- •Содержание
- •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.3 Группы операций
Все операции над множествами подразделяются на две группы.Первая группа операций - операции сопоставления. Они близки операциям сравнения (чисел, символов, строк). Рассмотрим ряд примеров:
ИСТИННО |
ЛОЖНО |
[1, 3, 2] = [3, 2, 1] [5, X] = [X, 5] [] = [] [1, 2] <> [2] [5, X] <> [5, X+1] [’a’, ’k’] <= [’a’ .. ’m’] [] <= [3] [X, X+2] >= [X+2] 2 in [1..5] [] in [1..5] |
[1] = [3, 2, 1] [5, X] = [5, X+1] [] = [3] [1, 2, 3] <> [2, 3, 1] [5, X] <> [X, 5] [’a’… ’e’] <= [’m’ .. ’z’] [] >= [3] [1..10] >= [1..20] X in [X-1, X+1] X in [] |
Вторая группа операций реализует математические действия над множествами. Рассмотрим примеры:
ДЕЙСТВИЕ |
РЕЗУЛЬТАТ |
[1,2,3,3,4] + [2,4,4,6,5] |
[1,2,3,4,5,6] ([1..6]) |
[’1’, ’3’] + [’5’, ’7’] |
[’1’, ’3’,’5’, ’7’] |
[X] + [X+1] + [X+2] |
[X..X+2] |
[1,2,3,3,4] – [2,4,5,6] |
[1,3] |
[’1’, ’3’] – [’5’, ’7’] |
[’1’, ’3’] |
[X] – [] |
[X] |
[1,2,3,3,4] * [2,4,4,6,5] |
[2, 4] |
[X] * [] |
[] |
[a,b,c]*[a,b]*[a] |
[a] |
Пример1. Имеются три множества символьного типа, которые заданы своими конструкторами: y1=[‘a’,’b’,’r’,’m’], y2=[‘r’,’a’,’d’], y3=[‘a’,’r’].
Сформировать новое множество x=(y1*y2)+(y1-y2). Проверить включено ли множество y3 и x.
var y1,y2,y3,x:set of char;
c;char;
begin
y1:=[‘a’,’b’,’r’,’m’];
y2:=[‘r’,’a’,’d’];
y3:=[‘a’,’r’];
{формировать и печатать множества x}
x:=(y1*y2)+(y1-y2);
write(‘множество x=’);
for c:=’a’ to ‘r’ do
if c in x then write(c);
{проверка включения множества y3 в x}
if y3<=x
then write(‘y3 включено в x’)
else write(‘не включено в x’);
Пример2. Из множества целых чисел 1..20 выделить: множество чисел, делящихся на 6; множество чисел, делящихся или на 2. или на 3(деление нацело).
Const n=20;
Var n2,n3,n6,n23:set of integer;
K:integer;
begin n2:=[];n3=[];
for k:=1 to n do
begin
if k mod 2=0 then n2:=n2+[k];
if k mod 3=0 then n3:=n3+[k]
end;
n6:=n2*n3;
n23:=n2+n3;
writeln(‘на 6 делятся числа’);
for k:=1 to n do
if k in n6 then write(k);
writeln(‘на 2 или на 3 делятся’);
for k:=1 to n do
if k in n23 then write(k);
end.
Использование в программе данных типа set дает ряд преимуществ: значительно упрощаются сложные операторы if, увеличивается степень наглядности программы и понимания алгоритма решения задачи, экономятся память, время компиляции и выполнения. Помимо ряда достоинств, множества имеют и недостатки. Так множества невозможно вывести на экран. Можно лишь убедиться в наличии элемента в множестве. Ввод множеств осуществляется поэлементно.
program MN;
var C:char;
S: set of Char; begin
S:=[]; C:=#0; {обнуление значений}
writeln('Введите элементы множества через Enter.');
writeln('Для окончания введите точку');
while C<>'.' do {цикл до ввода точки}
begin readln(C); {чтение символа в С и}
S:=S+[C] {добавление его к S}
end;
S:=S-['.']; {выбросим точку}
writeln('поэлементный вывод:');
for C:=chr(1) to chr(255) do {для каждого символа}
if C in S then write(C:3); {если символ входит в множество S
напечатать его}
writeln;
end.
program MN; {Решето Эратосфена}
Const
N=255; {максимальное количество перебираемых нат. Чисел}
Var
S, {исходное множество}
Rez : Set of Byte; {результат}
Next: Byte; {рабочие переменные}
j: word;
BEGIN
{начальные присваивания}
S:=[2..N]; {все числа в заданном диапазоне}
Rez:=[]; {первоначально пустое множество}
Next:=2; {начинаем с минимального простого}
repeat
{поиск очередного простого числа}
while not(Next in S) do {ищем в S наименьшее число}
Next:=Next+1;
Rez:=Rez+[Next]; {помещаем его в Rez}
j:=Next;
while j<=N do
begin
{удаляем из S все числа, кратные Next}
S:=S-[j];
j:=j+Next
end;
until S=[]; {повторяем цикл до исчерпания S}
for j:=2 to N do {выводим на печать содержимое Rez}
if j in Rez then write(j:5)
end.