![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Строковый тип в ТР
В ТР есть специальный тип для работы со строками переменной длины. Описание этого типа:
Целое определяет максимальную длину строки. Оно должно принадлежать промежутку [1; 255]. Например,
Переменной s, согласно описанию, выделяется n +1 байт. Переменную s можно рассматривать, как символьный массив с типом индекса 0..n и использовать для работы со строками длиной не более n. Собственно строка начинается с символа s[1]. Нулевой элемент массива резервируется для хранения информации о динамической длине строки. В нем хранится символ с кодом, равным динамической длине строки. Если s[0] есть символ с кодом 0 (#0), то строка s не содержит символов. Будем называть такую строку пустой. Динамическая длина определяется выражением ord(s[0]). Кроме этого, динамическую длину строки возвращает стандартная функция length(s: string): byte. Тип string (без указания размера) эквивалентен типу string[ 255]. Длина строки при этом может изменяться от 0 до 255. Ввод и вывод строк осуществляется с помощью процедур read[ln] и write[ln]. Следует обратить внимание на то, что при вводе в строку заносятся последовательно все символы из буфера ввода до символа перехода к новой строке. Сам символ перехода к новой строке остается в буфере, и с него начнется следующее считывание. Поэтому одним оператором read несколько строковых переменных ввести нельзя. При выполнении оператора read(s1, s2) строка s2 всегда будет пустой. Последовательный ввод строк можно выполнить, обращаясь к процедуре readln с одним параметром: readln(s1); readln(s2); readln(s3); Строковый тип ТР совместим по присваиванию: 1) с любым типом string; 2) c упакованным символьным массивом (равенство длин не требуется); 3) с символьным типом.
Оператор инициализации строки s пустой строкой:. В правой части оператора присваивания два апострофа. В ТP определена бинарная операция конкатенация (соединение строк). Знак этой операции '+'. Операндами могут быть символы, упакованные символьные массивы и строки. Результатом является строка, полученная дописыванием в конец первого операнда второго операнда.
В результате выполнения программы примера 1 будет выведено
Первая строка вывода - результат конкатенации, вторая - значение s2, которое получено в результате конкатенации с последующим усечением до 8 символов. Над строковым типом определены все операции сравнения, причем если один из операндов имеет строковый тип, то другой может быть строковым, символьным или упакованным символьным массивом. Примеры истинных отношений: ‘abcwt’< ’abd’, ‘abc’ > ’ab’. Пример 2. Словом будем называть последовательность символов, не содержащую пустых символов. К пустым символам отнесем пробел (#32), символ табуляции (#9) и переход к новой строке (#10). Можно считать, что слово не содержит не только пустых, но и любых управляющих символов, то есть символов, меньших #33. Опишем программу для определения количества слов в данной строке: Program words_number; var str: string; k, i: byte; {k - счетчик числа слов, i - параметр цикла} begin writeln('Введите строку'); ReadLn(str); {инициализация счетчика} if str[1]> #32 then k: =1 {первый символ - начало слова} else k: =0; {строка начинается пустым символом} for i: =2 to length(str) do if (str[i-1]< #33) and (str[i]> #32) {если начало слова } then k: =k+1; writeln ('Число слов строки ', str, ' равно ', k); end. Если, работая со строкой, как с символьным массивом, приходится изменять длину строки, необходимо позаботиться об изменении значения нулевого байта. Пример 3. Программа удаления из строки символов, равных данному: Program symb_del; var str: string; ch: char; len, i, j: byte; begin writeln('Введите строку'); ReadLn(str); writeln('Введите символ'); ReadLn(ch); len: = length(str); {Запоминаем длину исходной строки} j: = 0; {j - число сохраненных символов в преобразованной строке} for i: =1 to len do {Просматриваем все символы строки} if str[i]< > ch {Символ остается в строке} then begin j: = j+1; {Увеличиваем число сохраненных символов} str[j]: = str[i] {Сохраняем символ} end; str[0]: = chr(j); {Устанавливаем новую длину строки} write (‘ Преобразованная строка: ', str); end.
20. ПОДПРОГРАММЫ
Один из принципов структурного программирования заключается в разбиении задачи на достаточно самостоятельные подзадачи. Для решения каждой подзадачи можно разработать свой алгоритм и записать его в виде самостоятельного программного блока, называемого подпрограммой. Подпрограммы имеют имена, и обращаться к ним можно по именам. Подпрограммы позволяют избегать многократной записи одной и той же последовательности действий. В языке Паскаль существует два вида подпрограмм: процедуры и функции. Программа, содержащая подпрограммы, проще для создания, легче для понимания, удобнее для использования. При разработке программ, содержащих подпрограммы, необходимо уметь описывать подпрограммы и обращаться к ним. Подпрограммы, как и другие программные объекты, должны быть описаны в разделе описаний. Структура описания подпрограммы такая же, как и структура программы, но в описании подпрограммы заголовок обязателен и описание подпрограммы заканчивается символом ‘; ’, а не точкой.
|