- •Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7
- •Глава 7. Составные типы данных 29
- •Глава 8. Подпрограммы и функции 46
- •Глава 9. Файлы 50
- •Глава 10. Динамические переменные (списки) 58
- •Тип и функциональные возможности языка
- •Структура программы на Паскале
- •Алфавит языка
- •Правила написания имен
- •Структура блока описаний
- •Глава 2. Простые типы данных в языке Паскаль Понятие и классификация типов данных
- •Целочисленные типы
- •Вещественные типы
- •Логический тип
- •Символьный тип
- •Интервальный тип пользователя
- •Перечисляемый тип пользователя
- •Глава 3. Встроенные функции Понятие и классификация типов функций
- •Математические функции
- •Функции преобразования типов
- •Глава 4. Выражения Понятие и классификация типов выражений
- •Арифметические операции
- •Логические операции
- •Отношения
- •Битовые операции
- •Глава 5. Выполняемые операторы языка (для программ линейной структуры) Понятие и классификация
- •Классификация инструкций Паскаля
- •Оператор присваивания
- •Простейшие операторы ввода с клавиатуры
- •Простейшие операторы вывода на экран дисплея
- •Глава 6. Выполняемые управляющие операторы языка Простые управляющие операторы
- •Оператор безусловного перехода.
- •Оператор продолжения цикла.
- •Операторы ветвлений
- •Оператор условного перехода.
- •Неполный условный оператор.
- •Полный условный оператор.
- •Операторы циклов
- •Оператор арифметического цикла
- •Операторы итеративных циклов
- •Организация цикла с помощью условного перехода
- •Оператор итеративного цикла с предусловием
- •Оператор итеративного цикла с постусловием
- •Глава 7. Составные типы данных Классификация составных типов
- •Массивы Основные определения
- •Вывод массива
- •Примеры программ работы с массивами
- •Сортировки массива
- •Алгоритмы основных методов сортировок
- •Строки Строковые переменные
- •Стандартные (встроенные) процедуры работы со строками
- •Стандартные (встроенные) функции работы со строками
- •Структуры
- •Глава 8. Подпрограммы и функции Понятие подпрограмм в языке Паскаль.
- •Процедуры.
- •Описание и вызов функций
- •Параметры процедур и функций
- •Глава 9. Файлы Классификация внешних данных
- •Стандартные процедуры работы с файлами
- •Процедуры
- •Функции
- •Особенности работы с текстовыми файлами
- •Пример работы с текстовыми файлами.
- •Двоичные файлы (в машинных кодах) Типизированные файлы
- •Процедуры при работе с типизированными файлами
- •Функции при работе с типизированными файлами
- •Пример работы с типизированными файлами.
- •Файлы без типов
- •Процедуры, используемые при работе с нетипизированными файлами
- •Функции, используемые при работе с нетипизированными файлами.
- •Глава 10. Динамические переменные (списки) Понятие динамических переменных
- •Списочные данные
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Глава 11.Стандартный модуль работы с текстовым экраном Crt
- •2) Координаты экрана
- •3) Управление графическим режимом
- •4) Управление экраном и окном
- •5) Управление цветом
- •6) Вывод точек
- •7) Вывод линий
- •8) Вывод и закраска контуров
- •9) Окружности, эллипсы, дуги
- •10) Вывод текста
- •11) Последовательность работ при использовании графического режима
- •11) Пример программы приложения
Стандартные (встроенные) процедуры работы со строками
Delete(St,Poz,N) - удаление из строки St начиная с позиции Poz N символов. Если заказывается удалить больше символов, чем есть в строке, ошибки не возникает (удаляются символы до конца строки). Если Poz за пределами максимальной длины строки, ничего не будет удалено.
Пример:
значения параметров обращение к п/п результат
St='ABCDEFG' Delete(St, 2, 4) St='AFG'
Insert(St1,St2,Poz) - вставка строки St1 в строку St2 начиная с позиции Poz. Пример:
значения параметров обращение к п/п результат
St1='рак';St2='Дон' Insert(St1,St2,2) St2='Дракон' если
максимальная разрешенная длина St2 не меньше 6
Str(X,St) - преобразование числового значения Х в символьный вид и запись полученного числа в строку St. После параметра Х можно писать формат преобразования при выводе. Если получающееся число не влезает в строку, правые цифры (символы) числа отбрасываются.
Пример:
значения параметров обращение к п/п результат
X=0.17; St='ерунда' Str(X,St) St=' 1.7000000000000E-01'
если версия Турбо Паскаля ≥6 и максимальная
разрешенная длина St2 не меньше 23
Val(St,X,Code) - преобразует символьное изображение числа, записанного в строке St, в двоичное (внутримашинное) представление в переменной X (целого или вещественного типа). Целая переменная Code принимает значение номера неправильного символа, если преобразование невозможно (при этом X примет значение 0). Если при преобразовании получающееся число превышает максимально допустимое значение, процедура заканчивается по ошибке. В случае успешного завершения процедуры, Code принимает значение 0. Следует иметь в виду, что пробелы в строке за изображением числа считаются ошибочными символами и должны быть удалены до обращения к процедуре. Процедура обратная Str.
Пример:
значения параметров обращение к п/п результат
X=0.17; St='-31.4' Val(St,X,K) X=-3.14000000000000E+0001;K=0;
X=0.17; St='-31,4' Val(St,X,K) X=0.0; K=4;
Стандартные (встроенные) функции работы со строками
Функции, работающие со строками, в качестве аргумента используют строки, результатом могут быть либо новые строки, либо некоторые числовые характеристики строки - аргумента.
Concat(S1,S2,...Sn) - объединение нескольких строк в одну. Аргументы - имена строк (любое количество), результат - сцепленная строка (при превышении 255 символов, лишние последние символы отбрасываются без сообщения об ошибке). Пример:
Concat('Джентльмены',' у','дачи') вернет строку 'Джентльмены удачи'.
Copy(S,Num,Count) - вырезание подстроки из строки S начиная с символа с номером Num длиной Count символов. Если Num больше длины строки - результат
- строка нулевой длины, если заказанного количества символов в исходной строке не хватает, ошибки не возникает, а результирующая строка просто будет короче. Пример:
Copy('Гидромет',4,3) равно 'ром'.
Length(S) - нахождение текущей длины строки. Аргумент - имя строки, результат - целое число. Пример:
Length('ВТ и программирование') равно 16.
Pos(S,S0) - нахождение места, начиная с которого в строке S0 встречается строка S. Результатом будет целое число - номер позиции в строке S0. Если такого места не найдется, результат равен 0. Пример:
Pos('форма','Информатика') равняется 3.
Пример работы со строками.
Написать программу разбиения фразы на отдельные слова и распечатки массива выделенных слов с указанием, сколько раз каждое слово встречается. В качестве фразы использовать начало стихотворения «Не говорите мне – он умер – он живет. Пусть жертвенник разбит, огонь еще пылает, пусть роза сорвана, она еще цветет …».
Алгоритм программы должен учесть следующие моменты:
1) Нужно удалить все знаки препинаний (заменить их пробелами). Для этого, все символы, не попадающие в диапазоны букв, заменим пробелами.
2) Прописные буквы заменить на строчные. Для этого, все символы, попадающие в диапазон прописных букв, заменим соответствующими строчными.
3) Каждое вновь вырезанное слово сравнить с массивом ранее вырезанных слов на предмет совпадения.
В программе будем использовать следующие переменные:
S – исходная строка (150 символов)
Slovo – строка (е более 20 символов) в которую вырезается очередное слово.
Mas– массив строк длинной 20 символов каждая. Количество строк в массиве не более 30. (все выбираем с запасом!)
Kol– массив целых чисел, в котором будет хранится, сколько раз встречается соответствующее слово из массиваMas.
n– количество найденных различных слов.
i,j,m– номера символов в исходной строке (рабочие счетчики).
L – длина вырезаемого слова.
sdvig1,sdvig2 – сдвиги строчных букв от прописных для первой и второй частей алфавита (см. альтернативную кодировку ASCII в конце Практикума)
Pr– признак, что слово повторяется.
Program Dictionary;
{ VGI, MIT}
Type
Stroka = string[20];
Var
S:String[150];
Slovo : Stroka;
Mas : array[1..30] of Stroka;
Kol :array[1..30] of integer;
n,i,L,m,j,sdvig1,sdvig2: integer;
Fout:text;
Pr :boolean;
BEGIN
S:=Concat(' Не говорите мне - он умер - он живет.',
' Пусть жертвенник разбит, огонь еще пылает,',
' пусть роза сорвана, она еще цветет ...');
{ Вывод исходной строки в выводной файл }
Assign(Fout,'Diction.txt');
ReWrite(Fout);
WriteLn(Fout,'Исходная строка');
WriteLn(Fout,S);
WriteLn(Fout);
{ удаление знаков }
for i:=1 to Length(S) do
if not((S[i]>='А')and(S[i]<='п') or (S[i]>='р')and(S[i]<='я')) then
S[i]:=' '; { если не входит в диапазоны русских букв, заменяем на
пробел }
{ замена строчных на прописные}
sdvig1:= Ord('а') - Ord('А');
sdvig2:= Ord('р') - Ord('Р');
for i:=1 to Length(S) do
if (S[i]<='П') and (S[i]<>' ') then { если прописная от 'А' до 'П'}
S[i] := Chr(Ord(S[i])+sdvig1)
else
if (S[i]<='Я') and (S[i]<>' ') then { если прописная от 'Р' до 'Я'}
S[i] := Chr(Ord(S[i])+sdvig2);
{ Контрольный вывод очищенной строки в выводной файл}
WriteLn(Fout,'Исправленная строка');
WriteLn(Fout,S);
WriteLn(Fout);
{ Основной цикл вырезания слов }
n:=0;
while Length(S)>0 do
begin
{ поиск начала слова}
j:=1;
while S[j]=' ' do
j:=j+1;
{ поиск конца слова}
i:=j+1;
while S[i]<>' ' do
i:=i+1;
{ копирование слова из исходной строки}
Slovo:= Copy(S,j,i-j);
{ проверка, не встречалось ли слово раньше }
Pr:=FALSE;
for m:=1 to n do
if Slovo = Mas[m] then
begin
Kol[m]:=Kol[m]+1;
Pr:=TRUE;
{ break;}
end;
if not Pr and (Slovo <> '') then { слово еще не встречалось }
begin
n:=n+1;
Mas[n]:=Slovo; { записываем его в массив слов }
Kol[n]:=1;
end;
{ удаление символов до следующего слова или до конца строки }
while (i< Length(S)) and (S[i]=' ') do
i:=i+1;
Delete(S,1,i-1);
end; { конец основного цикла }
{ Вывод списка найденных слов }
WriteLn(Fout,'Слова':10,'количество':14);
for m:=1 to n do
WriteLn(Fout,Mas[m]:10, Kol[m]:6);
Close(Fout);
END.
Результат работы программы (файл Diction.txt) будет выглядеть так:
Исходная строка
Не говорите мне - он умер - он живет. Пусть жертвенник разбит, огонь еще пылает, пусть роза сорвана, она еще цветет ...
Исправленная строка
не говорите мне он умер он живет пусть жертвенник разбит огонь еще пылает пусть роза сорвана она еще цветет
Слова количество
не 1
говорите 1
мне 1
он 2
умер 1
живет 1
пусть 2
жертвенник 1
разбит 1
огонь 1
еще 2
пылает 1
роза 1
сорвана 1
она 1
цветет 1