Методичка Паскаль
.pdfгде 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 |
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