Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Строковый тип в ТР






В ТР есть специальный тип для работы со строками переменной длины. Описание этого типа:

 
 

 

 


Целое определяет максимальную длину строки. Оно должно принадлежать промежутку [1; 255]. Например,

 
 
const n=10; var s: string[n];

 

 


Переменной 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: =’’;
Если строковой переменной присваивается значение, превышающее длину строковой переменной, то перед присваиванием происходит усечение присваиваемого значения.

Оператор инициализации строки s пустой строкой:. В правой части оператора присваивания два апострофа.

В ТP определена бинарная операция конкатенация (соединение строк). Знак этой операции '+'. Операндами могут быть символы, упакованные символьные массивы и строки. Результатом является строка, полученная дописыванием в конец первого операнда второго операнда.

Пример 1. var ch: char; ch_arr: array[1..3] of char; s1: string; s2: string[8]; begin ch: = ‘W’; ch_arr: = ‘ord’; s1: = ‘_and_byte’; s2: = ch+ch_arr+s1; writeln(ch+ch_arr+s1); writeln(s2) end.  

 

В результате выполнения программы примера 1 будет выведено

 
 
Word_and_byte Word_and  

 


Первая строка вывода - результат конкатенации, вторая - значение 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. ПОДПРОГРАММЫ

 

Один из принципов структурного программирования заключается в разбиении задачи на достаточно самостоятельные подзадачи. Для решения каждой подзадачи можно разработать свой алгоритм и записать его в виде самостоятельного программного блока, называемого подпрограммой. Подпрограммы имеют имена, и обращаться к ним можно по именам.

Подпрограммы позволяют избегать многократной записи одной и той же последовательности действий. В языке Паскаль существует два вида подпрограмм: процедуры и функции.

Программа, содержащая подпрограммы, проще для создания, легче для понимания, удобнее для использования.

При разработке программ, содержащих подпрограммы, необходимо уметь описывать подпрограммы и обращаться к ним.

Подпрограммы, как и другие программные объекты, должны быть описаны в разделе описаний. Структура описания подпрограммы такая же, как и структура программы, но в описании подпрограммы заголовок обязателен и описание подпрограммы заканчивается символом ‘; ’, а не точкой.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал