Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
44
Добавлен:
02.05.2014
Размер:
107.52 Кб
Скачать

Министерство Образования Российской Федерации

Московский Государственный Индустриальный Университет

Филиал в г. Вязьме

Отчет по лабораторной работе № 6

Дисциплина: «Информатика и программирование»

Тема: «Строковый тип переменных»

Вариант: 5

Группа: 03Ид1

Студент: Афанасьев Виктор Валерьевич

Преподаватель: Соколова Н.В.

2003 г.

Тема: написание программ на языке программирования Паскаль, позволяющих обрабатывать массивы символов Turbo Pascal 7.0.

Цель: разработать алгоритм решения задачи и реализовать его в виде программы на языке программирования Паскаль.

Задание: составить программу на языке Паскаль для решения следующей задачи: дана последовательность из 32 символов. В ней есть слова, которые отделяются друг от друга запятыми. Длина слов от 3 до 7 символов, считается, что длиннее 7 символов слов нет. Проанализировать слова введённой последовательности символов. Среди пар ai и bi, где ai – первая, а bi

-последняя буквы i – слова последовательности определить наиболее часто встречающуюся пару.

Результаты полученных подсчётов и все возможные пары вывести на экран.

Краткие теоретические сведения:

Строковый тип данных.

Строка представляет собой последовательность нумерованных, начиная с 0, симво­лов, к ней можно обращаться как к единому целому и каждому элементу по отдель­ности. Для объявления переменной типа строка используется идентификатор String, являющийся зарезервированным словом:

Var s: String;

Количество элементов в строке s в процессе выполнения программы может быть любым, но не более чем 255 символов. Строки можно использовать так же, как мас­сивы. Например, объявленная выше строка занимает столько же памяти и имеет та­кую же структуру, как и массив s1:Array[0…255] of Char. Однако по сравнению с массивами использование строк даёт значительные преимущества. Строки можно вводить, выводить и сравнивать как единое целое. Поэтому, например, программа, которая вводит слова и расставляет их в алфавитном порядке, при использовании строк реализуется значительно проще, чем при использовании массивов.

Программа 1:

{Сортировка пяти слов в алфавитном порядке}

Const n=5;

Var MasArray[1…n] of String;

i, j: Byte;

Exchange: String;

Begin

{Ввод слов}

For I:=1 To n Do

Begin

Write (’Введите слово’);

Readln (mas[I]);

End;

{Сортировка}

For I: =1 To n-1 Do

For j: =1 To n-I Do

If Mas[j]>Mas[j+1];

Mas [j+1]:=Exchange;

End;

{Вывод слов, расположенных по алфавиту}

For I:=1 To n Do

Writeln (Mas[I]);

End.

Введём 5 слов: Озеро, Пруд, Река, Море, Бассейн. Программа расположит их в ал­фавитном порядке и выведет следующую последовательность:

Бассейн

Море

Озеро

Пруд

Река.

При сравнении строк меньшей считается та из них, у которой меньше первый сим­вол. Если символы совпадают, то сравниваются вторые, и так далее. Если одна строка является частью второй, например, «кот» и «котёнок», то более короткая строка является меньшей. Нужно согласиться, что реализовать подобный алгоритм сравнения для массивов сложнее, чем сравнить две строки.

Строкам, как и простым переменным, можно присваивать значение константы, которая представляет собой последовательность символов, заключённых в апост­рофы.

S: =’Строка’;

L: =’символов’;

Кроме операций сравнения для строк определена операция конкатенации, то есть сцепления (слияния, соединения) двух строк в одну. Эта операция обозначается знаком «+», как и операция арифметического сложения для чисел. Результатом применения операции конкатенации S+L к определённым выше строкам будет строка B, содержащая последовательность символов “Строка символов”. Если вы­полнить оператор B:=L+S, то строка В получит значение “символов Строка”.

Если заранее известно, что длина строки не превысит заданной величины, макси­мальное количество элементов можно задать при объявлении строки, указав его в квадратных скобках после слова String, например, Var s:String [20]. Если теперь мы попробуем ввести более двадцати элементов, то в строку запишутся только первые 20 из них. В памяти строка S всегда будет занимать 21 байт и соответствовать мас­сиву S:Array[0…20] of Char.

Первый элемент строки, то есть элемент с индексом 0, содержит в памяти число, равное количеству элементов, записанному в строку. Однако, поскольку все эле­менты в строке, в том числе и первый. Рассматриваются только как символы, это число, находящееся в диапазоне от 0 до 255, представляет собой код некоторого символа. Поэтому для того, чтобы им воспользоваться как числом, надо применить функцию Ord, возвращающую числовое значение кода символьной переменной, на­пример, как это сделано в следующей программе, определяющей количество задан­ных символов во введённой строке.

Программа 2:

Var

Stroka: string;

Symvol: Char;

I,n: Byte;

Begin

{Ввод строки}

Write (‘Введите символ’)

Readln(Symvol);

n:=0;

{Определение количества символов Symvol в строке Stroka}

For I:=1 To Ord(Stroka[0]) Do

If Stroka[I]=Symvol Then Inc(n);

Writeln (‘Строка’,’Stroka’,’содержит’,n:4,’символов’,Symvol);

End.

Каждый элемент строки, начиная с первого, сравнивается с введённым символом. При их совпадении выполняется процедура Inc(n), записывающая в переменную n (счётчик повторений) следующее по порядку значение. Цикл сравнения заверша­ется по достижении последнего элемента строки, то есть символа с номером Ord (Stroka[0]).

В Turbo Pascal 7.0 определено 9 процедур и функций, выполняющих операции над строками или их частями.

Функция Length(s) вычисляет длину строки s. Оператор y:=Length(s) даёт тот же ре­зультат, что и оператор y:=Ord(s[0]).

Функция Copy (s, start, len) возвращает часть строки s, начинающуюся с символа с порядковым номером start. Количество возвращаемых символов равно len. В ре­зультате выполнения операторов

s:=’булавка’;

s1:=Copy(s, 3, 5);

в переменную s1 будет записано слово “лавка”.

Процедура Delete (s, start, len) удаляет часть строки s, начинающуюся с порядковым номером start. Количество удаляемых символов равно len. После выполнения опе­раторов

s:=’булавка’;

Delete (s, 3, 3);

В переменной s будет записано слово “бука”.

Процедура Insert(ins, s, start) вставляет в строку s, начиная с позиции start, все сим­волы строки ins. После выполнения операторов

s:=’булка’;

ins:=’aв;

Insert (ins, s, 4);

в переменной s будет записано слово “булавка”.

Функция Pos (sub, s) определяет, является ли строка sub частью строки s.Если это так, то она возвращает порядковый номер первого символа в стоке s, начиная с ко­торого элементы этих строк совпадают. Если sub не является частью s, то возвраща­ется 0. В результате выполнения операторов

s:=’булавка’;

sub: =’aв;

n:=Pos (sub, s);

в переменную n будет записано число 3.

Функция Concat (s1, s2,…,sn) выполняет операцию конкатенации, объединяя не­сколько строк в одну. В результате выполнения операторов

First: =’бул’;

Second: =’aв;

Third: =’ка’;

Wrd: = Concat (first, second, third);

В переменную word будет записано слово “булавка”. Количество символов в объеди­нённой строке не может превышать максимальной длины word, лишние символы от­секаются.

Процедура Fillchar (s[n], m, c) заполняет строку s, начиная с позиции n, m одинако­выми символами, образец символа находится в переменной c. В результате выпол­нения операторов

C:=’+’;

Fillchard (s [5], 10, c);

В переменную s будет записано 10 звёздочек, начиная с пятого символа. Данная процедура заполняет смежную область памяти, не проверяя границы расположения переменных. Поэтому, если максимальная длина строки s задана равной 11, послед­ние 3 символа будут записаны в ячейке памяти, соседние с ячейками переменной s. В этом случае возможно нарушение данных в смежной с s переменной.

Процедура Stx (x, s) преобразует число, записанное в переменной x, в строку. Пере­менная x может быть любого целого или вещественного типа. После выполнения операторов

X:=14;

Str (x, s);

В переменную s типа String будет записано слово “14”. В результате выполнения операторов

X real:=145/3;

Str (x real, s);

В переменную s типа String будет записано слово “4.83333333E+01”.

В процедуре Str допускается использовать формат так же, как и при выводе значе­ний. Поэтому выполнение следующих операторов

X real: =145/3;

Str (x real: 6:2,s);

приведёт к тому, что в переменную s будет записано слово “48.33”

Процедура Val(s, x, err) преобразует последовательность символов, записанную в строке s, в числовое значение и сохраняет его в числовой переменной x. Тип пере­менной x должен соответствовать типу преобразуемого числа. Если это не на­блюдается или в строке s записано не число, то преобразование не будет выпол­нено, значение x не изменится, а в переменной err будет записан код ошибки, пред­ставляющей собой номер первого символа в строке, при анализе которого про­изошла ошибка преобразования. Если ошибки в задании исходных данных нет, то в переменной err возвращается 0.

В языке Pascal, начиная с версии Turbo Pascal 7.0, введён ещё один тип строк- Pchar, который позволяет использовать значительно более длинные строки. Максимальное число символов для строки типа Pchar равно 65535. Следует, однако, иметь в виду, что при использовании типа Pchar необходимо обязательно установить режим рас­ширенного синтаксиса. Это можно сделать, установив опцию Extended syntax (Рас­ширенный синтаксис) в панели Syntax options (Опции синтаксической обработки) пункта Compile (Компиляция) меню Option (Опции), либо включив в начало про­граммы, использующей строку данного типа, директиву {$x+}.Если режим расши­ренного синтаксиса не включить, то переменная типа Pchar будет эквивалентна пе­ременной типа Char.

Строки типа Pchar называются ASCIIZ-строками, то есть ASCII строками, заканчи­вающимися нулём (Zero). Аббревиатура ASCII является названием общепринятого способа кодирования символов, а буква z-Zero- означает, что данная строка завер­шается символом с кодом, равным нулю, который и является признаком конца этой строки.

Соседние файлы в папке Лабораторная работа1