- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
Операции над множествами
Объединением двух данных множеств называется множество элементов, принадлежащих хотя бы одному из этих множеств. Знак операции объединения множеств в Паскале − "+".
Примеры
-
['А','F']+['В','D']=['A','F','B','D'];
-
[1..3, 5, 7, 11]+[3..8, 10, 12, 15..20]=[1..8, 10..12, 15..20]
Пусть S1:=[1..5, 9], a S2:=[3 .. 7, 12]. Тогда если S:=S1+S2, то S=[1..7, 9, 12].
Пусть A1:=['a'..'z']; A1:=A1+['A'].
Тогда А1=['А', 'a'..'z'].
Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству. Знак операции пересечения множеств в Паскале − "*".
Примеры
1) ['А', 'F']*['В', 'D']=[ ], так как общих элементов нет;
2) [1..3, 5, 7, 11]*[3..8, 10, 12, 15..20]=[3, 5, 7];
3) если S1:=[1..5, 9] и S2:=[3..7, 12], a S:=SI*S2, то S=[3. .5].
Разностью двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго. Знак операции вычитания множеств − "−".
Примеры
1) ['А', 'F']-['В', 'D']=['А', 'F'], так как общих элементов нет;
2) [1..3, 5, 7, 11]-[3..8, 10, 12, 15..20] =[1, 2, 11];
3) S1:=[1..5, 9]; S2:=[3..7, 12]; S:=S1-S2; Тогда S=[1, 2, 9];
4) А1:=['А'..'Z']; А1:=А1-['А']. Тогда А1=['В'..'Z'].
Операция определения принадлежности
элемента множеству
Эта логическая операция обозначается служебным словом in. Результат операции имеет значение true, если элемент входит в множество, и false в противном случае.
Примеры
1) Выражение 5 in [3..7] имеет значение true, так как 5[3; 7];
2) выражение 'a' in ['A'..'Z'] имеет значение false, так как маленькой латинской буквы 'а' нет среди больших латинских букв.
Примечание. Операцию проверки принадлежности элемента множеству удобно использовать для исключения более сложных проверок. Например, оператор вида:
If (ch='a') or (ch='b') or (ch='x') or (ch='y') Then... − может быть переписан в компактной и наглядной форме:
If ch in ['a', 'b', 'х', 'у'] Then...
Сравнение множеств
Для сравнения множеств используются операции отношения:
= − проверка на равенство (совпадение) двухмножеств;
<> − проверка на неравенство двух множеств;
<=, < − проверка на вхождение первого множества во второе множество;
>=, > − проверка на вхождение второго множества в первое множество.
Пример 1
Составить программу выделения следующих множеств из множества целых чисел от 1 до 30:
− множества чисел, кратных 2;
− множества чисел, кратных 3;
− множества чисел, кратных 6;
− множества чисел, кратных 2 или 3.
Вопросы для обсуждения
1. Сколько множеств надо описать? Каков тип их элементов? (Четыре множества с элементами типа Byte.)
2. Каково начальное значение множеств? (Начальное значение множеств − пустое множество.)
3. Как формируются множества? (Первые два формируются перебором всех чисел данного промежутка и отбором подходящих, а третье и четвертое получаются из первых двух путем применения операций пересечения или объединения.)
4. Как осуществить вывод сформированных множеств? (Вывод множеств производится ТОЛЬКО поэлементно, поэтому удобно составить процедуру и передавать в нее множество, элементы которого и будут выводиться на экран. Для этого в разделе типов надо создать соответствующий тип и использовать его в дальнейшем.)
Программа для решения данной задачи выглядит так:
Program Example_139;
Const n = 30;
Type mn=Set Of 1..n;
Var n2, n3, n6, n23: mn;
{n2 - множество чисел, кратных 2,
n3 - кратных 3, n6 - кратных 6,
n23 - кратных 2 или 3}
k: Integer;
Procedure Print(m: mn);
Var i: Integer;
Begin
For i:=1 To n Do
If i In m Then Write(i:3);
Writeln;
End;
Begin
n2:=[ ]; n3:=[ ];
{начальные значения множеств}
For k:=1 To n Do {формирование n2 и n3}
Begin
{если число делится на 2, то
заносим его в n2}
If k Mod 2=0 Then n2:=n2+[k];
{если число делится на 3, то
добавляем его в n3}
If k Mod 3=0 Then n3:=n3+[k];
End;
{числа, кратные 6, - это те, которые
кратны и 2, и 3, поэтому это пересечение
двух первых множеств, а числа, кратные 2
или 3, - это объединение этих
же множеств}
n6:=n2*n3; n23:=n2+n3; {вывод множеств}
Writeln('числа, кратные 2');
Print(n2);
Writeln('числа, кратные 3');
Print(n3);
Writeln('числа, кратные 6');
Print(n6);
Writeln('числа, кратные 2 или 3');
Print(n23);
Readln;
End.
Задание
Изменить программу так, чтобы результатом ее работы являлось множество чисел, делящихся на 3, но не делящихся на 2.