Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка Паскаль

.pdf
Скачиваний:
101
Добавлен:
30.04.2015
Размер:
592.26 Кб
Скачать

где N – максимальная длина строки. Если она не указана, максималь-

ной длиной строки считается число 255 для коротких строк (или любая длина для длинных строк).

Например:

Var Family : String [20];

Name : String [10];

P : String;

Номер символа в строке называется еще индексом. Для обращения к отдельному символу строки его индекс указывается после имени строки в квадратных скобках. Например, P[3] – 3-й символ строки P; Name[K] – K-й

символ строки Name.

К данным строкового типа применима операция конкатенации (обозна-

чается символом «+»). Например, после выполнения последовательности ко-

манд:

A:= ’тепло’;

B:= ’ход’;

C:= A+B;

впеременной С будет записана строка ‘теплоход’.

Кданным строкового типа применимы операции отношения, причем строки сравниваются посимвольно, с учетом порядковых номеров символов в алфавите. Например, ‘мама’ < ’папа’, ‘машина’>’мама’.

Стандартные функции:

Length (S) – возвращает длину строки S.

Pos (P, S) – возвращает позицию первого вхождения строки P в

строку S. Например, после выполнения последовательности команд:

A := ’крокодил’;

B := ’код’;

K := Pos (B, A);

N := Pos (‘о’, A);

M := Pos (‘a’, A);

31

переменные К, N, M примут следующие значения: K=4, N=3, M=0.

Copy(S, K, N) – выделяет (копирует) часть строки S длиной N на-

чиная с К-го символа. Например, после выполнения последовательности ко-

манд:

A := ’крокодил’;

B := Copy (A, 2, 3);

значением переменной В будет слово ‘рок’.

Стандартные процедуры:

Delete (S, K, N) – удаляет из строки S N символов, начиная с K-го.

Например, после выполнения последовательности команд:

A := ’корзина’;

Delete (A, 4, 3);

значением переменной A будет слово ‘кора’.

Insert (P, S, K) – вставляет строку P в строку S начиная с позиции с номером K. Например, после выполнения последовательности команд:

A := ’кот’;

Insert (‘р’, A, 2);

значением переменной A будет слово ‘крот’.

Val (S, N, K) – преобразует строку S в число N; K – номер позиции в строке S, где встретился символ, недопустимый в записи числа.

Str (N, S) – преобразует число N в строку S.

Примеры решаемых задач

Пример 1. Составить программу, которая определит, сколько раз за-

данная буква встречается во введенном предложении.

Программа:

 

Program S1;

 

Uses Crt;

 

Var P : String [80];

{ предложение }

B : Char;

{ буква }

 

32

K, N, M : Integer;

Begin

Clrscr;

Write (‘Введите предложение ’);

Readln (P);

{ ввели предложение }

Write (‘Введите букву ’);

Readln (B);

{ ввели букву }

M :=0;

{ обнулили счетчик заданных букв }

N := Length (P); { определили длину предложения }

For K := 1 To N Do

{ перебираем все символы предложения

 

 

от первого до последнего }

If P[K]=B

{ если К-ый символ строки Р равен заданной букве}

Then M := M+1;

{ увеличиваем счетчик букв }

Writeln (‘Буква ’, B, ‘ встречается в предложении ’, M, ‘ раз’); { вывели результат на экран }

Readln

End.

Пример 2. Составить программу, которая заменит во введенной строке

один заданный символ на другой.

Программа:

 

Program S2;

 

Uses Crt;

 

Var P : String [80];

{ строка}

B1, B2 : Char;

{ буквы }

K, N, M : Integer;

 

Begin

 

Clrscr;

Write (‘Введите строку текста ’);

Readln (P); { ввели исходную строку }

Write (‘Введите символ, который надо заменить ’);

33

Readln (B1); { ввели первый символ }

Write (‘На что заменять ? ’);

Readln (B2); { ввели второй символ }

N := Length (P);

{ определили длину предложения }

For K := 1 To N Do

{ перебираем все символы предложения

 

 

 

от первого до последнего }

If P[K]=B1

 

{ если К-ый символ строки Р равен первому

 

 

символу }

Then P[K] := B2;

{ записываем на К-е место в строку

Р второй символ }

Writeln (‘Получилась строка: ’, P); { вывели результат на экран } Readln

End.

Пример 3. Составить программу, которая определит количество слогов во введенном слове.

Модель: количество слогов в слове равно количеству гласных букв в нем. Следовательно, нужно вычислить количество гласных букв во введен-

ной строке.

Программа:

Program S3;

Uses Crt;

Const Glas = ‘АЕЁИОУЫЭЮЯаеёиоуыэюя’; { константа содержит все гласные буквы }

Var W : String [20]; { слово }

K, N, M : Integer;

Begin

Clrscr;

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

Readln (W);

{ ввели слово }

N := Length (W);

{ определили длину слова }

 

34

{ определили позицию первого пробела в строке S }
{ удалили пробел из строки S }
{ пока в строке S есть пробелы }

M := 0;

{ обнулили счетчик слогов }

For K := 1 To N Do

{ перебираем все буквы слова от первого

до последнего }

 

 

 

If Pos (W[K], Glas) > 0

{ если К-ая буква слова W – гласная

 

 

 

(т.е.содержится в константе Glas) }

 

Then M := M+1;

 

{ увеличиваем счетчик слогов }

Writeln (‘В слове ’, M, ‘ слогов’);

{ вывели результат на экран }

Readln

 

 

 

 

End.

Пример 4. Составить программу, которая удаляет все пробелы из вве-

денной строки.

Программа:

Program S4;

Uses Crt;

Var S : String [80]; { исходная строка }

K : Integer;

Begin

Clrscr;

Write (‘Введите строку ’);

Readln (S); { ввели строку }

While Pos(‘ ‘, S)>0 Do

Begin

K:= Pos (‘ ‘, S);

Delete (S, K, 1)

End;

Writeln (‘Получилась строка ’, S); { вывели результат на экран } Readln

End.

35

Пример 5. Составить программу, которая определяет количество слов во введенном предложении и выводит их на экран в столбик, если слова раз-

делены произвольным набором разделителей.

Модель: Разделитель – пробел либо знак препинания. Условие начала

слова: на i-м месте находится разделитель, на i+1 – буква (т.е. не раздели-

тель). Условие конца слова: на i-м месте находится не разделитель (т.е. бук-

ва), на i+1 – разделитель. Исключение могут составлять первое и последнее слова предложения. Применим искусственный прием: допишем в начало и конец введенного предложения по одному пробелу (пробел – это один из

разделителей).

Алгоритм: Будем рассматривать символы парами, запоминать позицию в которой слово началось. Если слово закончилось, необходимо увеличить

счетчик слов, выделить слово из предложения и вывести его на экран.

Программа:

 

Program S5;

 

Uses Crt;

 

Const R = ‘ .,!?-():;’;

{ записали в константу все разделители }

Var S, W : String;

{ S – предложение, W – очередное слово }

N, K, L, A, B : Integer;

Begin

ClrScr;

Write (‘Введите предложение ’);

Readln (S);

{ ввели предложение }

S := ‘ ‘+S+’

‘; { дописали пробелы в начало и конец предложения }

N := 0;

{ обнулили счетчик слов }

For K := 1 To Length (S) - 1 Do { перебираем все символы предло-

жения от первого до предпоследнего }

Begin

 

A := Pos(S[K], R);

{ входит ли K-й символ в разделители}

B := Pos(S[K+1], R);

{входит ли K+1-й символ в разделители}

 

36

If (A>0) And (B=0)

{ если слово началось }

Then L := K +1;

{ запоминаем позицию начала слова }

If (A=0) And (B>0)

{ если слово закончилось }

Then Begin

 

 

N := N+1;

{ считаем его }

W := Copy (S, L, K-L+1); { выделяем слово }

Writeln (W)

{ выводим слово на экран }

End

 

 

End;

Writeln (‘В предложении ’, N, ‘ слов ’); { выводим количество слов} Readln

End.

Контрольные задания

4.1.Составить программу, которая удалит из введенной строки все разделители.

4.2.Составить программу, которая удалит из введенной строки все

цифры.

4.3.Составить программу, которая определит, является ли перевер-

тышем введенное

a.слово;

b.предложение.

4.4.Составить программу, которая вводит предложение и выводит те его слова, которые:

c.имеют заданную длину;

d.имеют длину больше заданной;

e.имеют длину меньше заданной;

f.начинаются с заданной буквы;

g.заканчиваются на заданную букву.

37

4.5.Составить программу, которая заменит во введенном предложе-

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

разделителей).

4.6.Составить программу, которая вычислит сумму чисел (не цифр!)

во введенном предложении.

4.7.Составить программу, которая вводит две строки и выводит сим-

волы, которые содержатся как в первой, так и во второй строке.

4.8.Составить программу, которая вводит две строки и выводит сим-

волы первой строки, которых нет во второй.

4.9.Составить программу, которая вводит строку и заменяет в ней все группы пробелов на один пробел (т.е. удаляет все лишние пробелы).

4.10.Составить программу, которая вводит предложение и находит самое длинное слово в нем.

4.11.Составить программу, которая вводит предложение и находит самое короткое слово в нем.

38

Тема 5. Система типов языка Паскаль

Краткое изложение теоретического материала

Данные, обрабатываемые программой, записанной на языке Турбо Па-

скаль, принадлежат к одному из следующих типов, классификация которых представлена на Рис. 5:

Типы

 

 

Простые

 

 

Порядковые

 

 

Целые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вещественные

 

 

Логический

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Символьный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структурированные

 

 

Массивы

 

 

Перечисляемый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строки

 

 

Тип-диапазон

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Указатели

 

 

Записи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процедурные

 

 

Множества

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объекты

 

 

Файлы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5. Типы данных языка Паскаль

39

Тема 6. Перечисляемый тип

Краткое изложение теоретического материала

Перечисляемый тип задается перечислением тех значений, которые он может получать. Определяется как упорядоченный набор идентифика-

торов, заданных путем их перечисления. Например:

Type Colors = ( red, green, blue );

Var Col : Colors;

Переменная Col может принять одно из трех значений: red, green,

blue.

Таким образом, каждое значение именуется некоторым идентификато-

ром и располагается в списке, ограниченном круглыми скобками. Идентифи-

каторы перечисляются через запятую.

Значения перечисляемого типа упорядочены: первое имеет порядковый номер 0, второе – 1 и т.д. Можно использовать следующие стандартные

функции:

Ord (x) – возвращает порядковый номер элемента x;

Succ (x) – возвращает значение, следующее за х;

Pred (x) – возвращает значение, предшествующее х.

В приведенном выше примере:

a := ord (red);

{ Значение переменной a = 0 }

col := succ (green);

{ col = blue }

col := pred (col);

{ col = green }

Значения перечисляемого типа можно сравнивать: сравниваются их порядковые номера.

К данным этого типа нельзя применять стандартные команды ввода

(Readln) и вывода (Write).

Назначение перечисляемого типа – сделать текст программы более на-

глядным (читабельным).

40