- •Содержание
- •1Алгоритмы линейных структур
- •2 Циклы
- •Введение
- •1 Алгоритмы линейных структур
- •1.1 Этапы разработки программы
- •1.2 Основные понятия
- •1.3 Основная структура программы
- •1.4 Алфавит языка
- •1.5 Идентификаторы
- •1.6 Константы
- •1.7 Понятие переменной Типы
- •1.8 Оператор присваивания Арифметические выражения
- •1.9 Операторы ввода и вывода информации
- •1.10 Практические задачи
- •1.11 Примеры решения задач
- •2 Циклы
- •2.1 Цикл с предусловием
- •Цикл с постусловием
- •Цикл со счетчиком
- •2.2 Задачи
- •2.3 Примеры
- •3 Немного об алгоритмах Алгоритм Кнута - Морриса - Пратта
- •Алгоритм Бойера – Мура
- •Алгоритм Рабина
- •Алгоритмы сортировки
- •Метод пузырька.
- •Сортировка выбором
- •Метод Шелла
- •Метод Хoopа
- •3.1 Разветвляющиеся алгоритмы
- •3.2 Задачи Свойства и виды треугольников (задачи 1-4)
- •Свойства и виды четырехугольников (задачи 5, 6)
- •Каким будет значение переменной а после выполнения фрагмента программы с составным оператором?
- •4 Массивы
- •4.1 Объявление массива
- •4.2 Действия над массивами
- •4.3 Вывод массива
- •4.4 Ввод массива
- •4.5 Сортировка массива
- •4.6 Поиск в массиве
- •4.7 Поиск минимального (максимального) элемента массива
- •4.8 Многомерные массивы
- •4.9 Ошибки при использовании массивов
- •4.10 Практические задачи
- •5 Множества
- •5.1 Описание типа множество
- •5.2 Операции над множествами
- •5.3 Группы операций
- •5.4 Упражнения
- •5.5 Задачи Тема: Множества
- •6 Записи
- •6.1 Понятие записи
- •6.2 Оператор присоединения With ... Do
- •6.3 Вариантные записи
- •6.4 Работа с файлами записей
- •6.5 Задачи
- •7 Файлы
- •7.1 Работа с файлами
- •7.2 Текстовые файлы
- •7.3 Типизированные файлы
- •7.4 Нетипизированные файлы
- •7.5 Задачи
- •8 Графика
- •8.1 Графика в Турбо Паскале
- •8.2 Базовые процедуры и функции
- •Процедуры модуля Graph
- •Функции модуля Graph
- •8.3 Экран и окно в графическом режиме
- •8.4 Вывод простейших фигур
- •8.5 Графические процедуры
- •8.6 Построение прямоугольников
- •8.7 Построение многоугольников
- •8.8 Построение дуг и окружностей
- •8.9 Работа с текстом
- •8.10 Построение графиков функций
- •8.11 Циклы в графике. Построение случайных процессов
- •8.12 Создание иллюзии движения
- •Задания
- •Контрольные тесты
- •1. Программирование алгоритмов линейных структур
- •2. Программирование алгоритмов разветвляющейся структуры
- •3. Программирование алгоритмов циклических структур
- •4. Массивы
- •5. Множества
- •6. Записи
- •7. Файлы
- •8. Графика
5.4 Упражнения
Упражнение 1. Иллюстрацией описания множеств и операций над ними может служить программа Dem _ Mno, в которой описаны множества чисел D, D1, D2, D3. Затем они заполнены следующим образом: множество D1 — четными числами 2,4,6,8; множество D2 — числами 0,1,2,3,5; множество D3 — нечетными числами 1,3,5,7,9. После этого над множествами выполнены операции объединения, разности и пересечения.
Program Dem _ Mno; {Демонстрация операций над множествами}
Type
Digits=set of 0... 9;
var
D1, D2, D3, D: Digits;
Begin
D1:= [2, 4, 6, 8]; {Заполнение множеств}
D2:= [0..3, 5];
D3= [1, 3, 5, 7, 9];
D: =D1+D2; {Объединение множеств D1 и D2}
D: =D+D3; {Объединение множеств D и D3}
D: =D -D2; {Разность множеств D и D2}
D: =D*D1; {Пересечение множеств D и D1}
End.
Как видно из текста программы, сначала описан тип Digits= set of 0..9, затем описаны переменные D1, D2, D3, D этого типа. В первой части программы осуществляется заполнение множеств, а затем над множествами выполняются операции объединения, пересечения, разности.
Для проверки действия программы запустите интегрированную среду программирования. Введите текст программы Dem_Mno и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Так как в Паскале отсутствуют средства ввода-вывода элементов множества, то действие программы проверьте, исполняя ее по шагам и наблюдая ; текущие значения переменных D1,D2,D3,D в окне просмотра.
Упражнение 2. Опишите множество М(1..50). Сделайте его пустым. Ввода целые числа с клавиатуры, заполните множество 10 элементами.
В разделе описания переменных опишем множество целых чисел от 1 до 50, переменную Х целого типа будем использовать для считывания числа-кандидата во множество, целую переменную I используем для подсчета количества введенных чисел.
В начале программы применим операцию инициализации множества М:= [ ], так как, но не имеет элементов и является пустым.
Заполнение множества элементами произведем с использованием оператора повтора for, параметр которого I будет указывать порядковый номер вводимого элемента. Операцию заполнения множества запишем оператором присваивания М:=М+[Х]. Контроль заполнения множества запишем с использованием операции проверки принадлежности in. Если условие Х in М выполняется, выведем сообщение о том, что число Х помещено во множество. Текст программы описания и заполнения множества будет таким:
Program Inpu_ Mno;
var
M: set of 1..50;
X, I: integer;
Begin
M: = [ ];
For I: =1 to 10 do
Begin
Write ('Введите', I, ' -й элемент множества: ');
Readln(X);
If (X in M) then {Если введенное число входит в множество М}
Begin
Writeln (X,' помещен в множество 1..50');
M: =M+[X];
End;
End;
Writeln;
End.
Для проверки действия программы запустите интегрированную среду программирования. Введите текст программы Inpu_ Mno и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Так как в Паскале отсутствуют средства ввода-вывода элементов множества, то действие программы проверьте, исполняя ее по шагам и наблюдая текущие значения переменных I, Х и М в окне просмотра. Попробуйте задать значения числа Х больше 50, повторно задавать одинаковые значения Х и проанализировать значения множества М.
Упражнение 3. Описать множества гласных и согласных букв русского языка, определить количество гласных и согласных букв в предложении, введенном с клавиатуры.
Зададим тип Letters — множество букв русского языка, затем опишем переменные этого типа: Glasn — множество гласных букв, Sogl — множество согласных букв. Вводимое < клавиатуры предложение опишем переменной Техt типа String. Для указания символа в строке Техt применим переменную I типа byte. Для подсчета количества гласных и согласных букв опишем переменные G и S. Блок описания программы запишется следующим образом:
Type
Letters= set of 'A'....'я';
Var
Glasn, Sogl: Letters;
Text: string;
I: byte;
G, S: byte;
В начале программы запишем заполнение множеств гласных и согласных букв:
Glasn:=['А' ,'а' ,'Е','е', 'И' ,'и','0' ,'o','У ,'у','Э' ,'э','Ю' , 'ю' ,'Я .,'я'];
Sogl: = ['Б'..'Д','б'..'д','Ж ', 'ж', 'З', 'з', 'К'..'Н','к'..'н','П', .. 'T', 'п'..'т', 'Ф'..'Щ', 'ф'..'щ', 'Ъ','ъ', 'Ь','ь'];
После этого запишем вывод приглашения на ввод предложения и считывание этого предложения в переменную Техт.
Write ('Введите предложение ');
Readln (Техt);
Перед началом подсчета количества гласных и согласных букв в предложении обнулим значения переменных G и S.
Проверку принадлежности символов, составляющих предложение множествам гласных или согласных букв русского языка запишем с использованием оператора повтора for, параметр I которого, изменяясь от 1 до значения длины предложения, будет указывать порядковый номер символа в предложении. Принадлежность очередного символа предложения множеству гласных или согласных букв запишем операцией 1п. Если условие Техt[I] in Glasn выполняется, то счетчик гласных букв G увеличивается на 1. Если выполняется условие Техt[I] in Sogl, тогда увеличивается на 1 счетчик согласных букв S. Если не выполняется ни первое, ни второе условие, значит, очередной символ в предложении не является гласной или согласной буквой русского языка. Данный фрагмент программы запишется так:
For I: =1 to Lengt (Text) do
Begin
If text [I] in Glasn then G: = G+1;
If text [I] in Sogl then S: = S+1;
End;
В заключение программы запишем вывод сообщения о результатах подсчета гласных и согласных букв русского языка в предложении.
В целом текст программы запишется таким образом:
Program Glasn_Sogl; {Подсчет гласных и согласных букв в предложении}
Tуре
Letters = set of 'A'. .'я'
var
Glasn, Sogl: Letters;
Техt : String;
I : byte;
G, S : Ьуtе;
Ьеgin
Glasn:=['А' ,'а' ,'Е','е', 'И' ,'и','0' ,'o','У ,'у','Э' ,'э','Ю' , 'ю' ,'Я .,'я'];
Sogl: = ['Б'..'Д', 'б'..'д','Ж ', 'ж', 'З', 'з', 'К'..'Н','к'..'н','П', .. 'T', 'п'..'т', 'Ф'..'Щ', 'ф'..'щ', 'Ъ','ъ', 'Ь','ь'];
Write (' Введите предложение ');
Readln(Text);
G: =0;
S: =0;
For I: =1 to Length (Text) do
Begin
If text [I] in Glasn then G: = G+1;
If text [I] in Sogl then S: = S+1;
End;
Writeln (В предложении " ', Text, ' " ', G, ' гласных и ', S, ' согласных букв');
End.
Запустите интегрированную среду программирования. Введите текст программы Glasn_Sogl и запишите файл на диск под соответствующим именем, а затем откомпилир. его. Проверьте действие программы, задавая различные предложения.
Упражнение 4. Составить программу с контролем ввода данных, обеспечив ввод фамилии, имени и отчества только на русском языке.
В разделе описания переменных опишем множество Litera, включающее в себя всевозмо-
жные символы, переменную Name для хранения Ф.И.О., Ch для посимвольного ввода Ф.И.О. Переменная логического типа Rus будет указывать, принадлежит ли очередной вводимый символ множеству букв русского языка. Для использования стандартной функции чтения кода нажатой клавиши ReadKey подключим модуль Crt. Блок описания запишется так:
Uses crt;
Var
Litera: set of char;
Name: string;
Ch: char;
Rus: Boolean;
В начале программы запишем заполнение множества букв русского алфавита:
Litera: = [' ', 'А' .. 'п' , 'р' .. 'я'];
Затем запишем вывод запроса о вводе Ф.И.О.:
Write ('Введите фамилию, имя, отчество ');
Считывание всех символов, входящих в запись Ф.И.О., запишем с применением от тора повтора гереаt. Завершение цикла проверим по нажатии клавиши Епtег (код 13).
Считывание каждого символа вводимого текста Ф.И.О. запишем оператором повтора гереаt, условием завершения которого зададим значение Тгuе переменной Rus. В теле оператора повтора сначала считаем в переменную ch код нажатой клавиши, затем проверим, входит ли введенный символ во множество букв русского алфавита. Если условие ch in Litera выполняется, то переменной Rus присваивается значение Тгuе, данный символ приклеивается к строке Name и печатается в строке ввода, после чего управление передается на оператор until. Так_как условие завершения цикла ввода символа на русском языке выполняется, осуществляется переход к считыванию кода нажатой клавиши.
Если очередной нажатой клавишей является Еnтег, то ReadКеу возвращает код №#13. Если в операторе if ch<>#13 условие не выполняется, то управление передастся за его пределы, т. е оператор until ch=#13, и ввод строки name завершается, так как нажата клавиша enter.
Данный блок программы запишется так:
Repeat {Считать всю строку name}
Repeat {Считать один символ, входящий в множество Litera}
Ch: = ReadKey; {Считать в ch код нажатой клавиши}
If ch<>#13 then begin
Rus: =ch in Litera;
If Rus {Если символ входит в множество Litera }
Then
Begin
Name: =name+ch; {Приклеить введенный символ к name}
Write (ch); {Напечатать введенный символ в строке ввода}
end
е1sе {Код нажатой клавиши не входит в множество Litera}
Begin
Writeln (' Переключитесь в русский регистр');
Write ('и введите Ваше имя ');
End;
End;
Until rus; {Завершить ввод очередного символа на русском языке}
Until ch=#13 ;"{ Завершить ввод строки name, т.к. нажата клавиша Enter}
В заключительной части программы выполняется перевод курсора на следующую строку и вывод текста "Здравствуйте,", после чего печатается значение переменной Name.
Полный текст программы будет записан следующим образом:
Program FOI; {Ввод Ф.И.О. только на русском языке}
Uses crt;
vаr
Litera: set of char;
Name: string;
Ch: char;
Rus: Boolean;
Begin
Litera: = [' ', 'А' ... 'п', 'р' ... 'я'];
Write ('Введите фамилию, имя, отчество ');
Repeat {Считать всю строку name}
гереаt: {Считать один символ, входящий в множество Litera}
ch:= readkey; {Считать .в ch код нажатой клавиши}
If ch<>#13 then begin -
rus:=ch in Litera;
If Rus {Если символ входит в множество Litera};
Then
Begin
Name:=Name+Ch; {Приклеить введенный символ к Name};
Write (Ch); {Напечатать введенный символ в строке ввода}
End;
Else {Код нажатой клавиши не входит в множество Litera}
Begin
Writeln ('Переключитесь в русский регистр')
Write ('и введите ваше имя');
End;
End;
Until Rus; {Завершить ввод очередного символа на русском языке}
Until Ch=#13; {Завершить ввод строки Name т.к нажата клавиша Enter}
Writeln;
Writeln ('Здравствуйте, ' ,Name);
End.
Запустите интегрированную среду программирования. Введите текст программы FOI_RUS и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Проверьте действие программы, пытаясь ввести латинские и русские символы. Пронаблюдайте в пошаговом исполнении значения переменных Ch, Name, Rus и выражений Ch=#13, Ch in Litera.