
- •Конспект лекций по информатике
- •Организация данных в эвм и основы программирования
- •1. Основные понятия языка программирования паскаль
- •1.1. Структурное программирование
- •1.2. Основные символы языка
- •1.3. Элементы языка
- •1.4. Интегрированная среда turbo pascal
- •1.5. Структура программы в turbo pascal
- •1.6. Определение типов
- •1.7. Операторы в программе
- •1.7.1. Операторные скобки
- •1.7.2. Операторы ввода
- •1.7.3. Оператор присваивания
- •1.7.4. Условный оператор
- •1.7.5. Пример простой программы
- •1.7.6. Оперетор безусловного перехода
- •1.8. Организация циклов
- •1.8.1. Использование операторов условного и безусловного перехода
- •1.8.2. Цикл с параметром
- •1.8.3. Цикл с предусловием - цикл while
- •1.8.4. Цикл с постусловием - цикл repeat
- •1.9. Оператор выбора варианта
- •1.10. Расположение операторов в программе
- •1.11. Концепция типов данных
- •2. Стандартные простые типы
- •2.1 Целый тип
- •2.1.1. Операции над данными целого типа:
- •2.2. Действительный тип
- •2.2.1. Операции над данными действительного типа:
- •2.3. Логический тип
- •Var p, q, r : Boolean;
- •2.3.1. Алгебра логики в Паскале
- •2.3.2. Законы алгебры логики в Паскале
- •2.4. Символьный тип
- •2.4.1. Символьные строковые константы
- •3. Нестандартные простые типы (определяемые пользователем)
- •3.1. Перечисляемый тип
- •3.2. Ограниченный тип (диапазон, интервал)
- •4. Процедуры и функции
- •4.1. Описание процедур
- •4.2. Стандартные процедуры
- •4.3. Описание функций
- •4.4. Стандартные функции
- •4.5. Итерация и рекурсия
- •4.6. Побочный эффект рекурсии
- •4.7. Предварительное описание (ссылки вперед)
- •5. Регулярные типы
- •5.1. Одномерный массив, или переменные с индексами
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •2. Сортировка выбором
- •3. Метод Шелла
- •4. Метод Хoopа
- •5.2. Многомерные массивы
- •5.3. Упакованные массивы
- •5.4. Строки
- •6. Множественные типы
- •6.1. Свойства множеств
- •6.2. Операции над множествами
- •7. Комбинированные типы
- •7.1. Описание записей и действия с ними
- •7.2. Оператор присоединения.
- •7.3. Записи с вариантами
- •8. Типизированная константа
- •8.1. Простая типизированная константа
- •8.2. Структурированная (сложная) типизированная константа
- •8.2.1. Типизированная константа массива
- •8.2.2. Типизированная константа записи
- •8.2.3. Типизированная константа множества.
- •9. Преобразование типов
- •9.1. Неявные преобразования типов
- •9.2. Использование стандартных функций для преобразования
- •9.3. Явные преобразования типов
- •9.5. Совместимость типов
- •10. Файловые типы
- •10.1. Определение файлового типа
- •10.2. Структура файла
- •10.3. Имя файла
- •10.4. Описание файлового типа
- •10.5. Файловая переменная
- •10.6. Операции над файлами
- •10.7. Типизированные файлы
- •10.8. Текстовые файлы
- •10.9. Нетипизированные файлы
- •10.10. Стандартные файлы inpuTиOutput
6.1. Свойства множеств
Все элементы базового типа, образующие множество, должны быть различны. Запись элементов множества (2, 2, 3, 4) некорректна, поскольку два элемента тождественны.
2. Порядок расположения элементов во множестве не фиксируется, то есть множества представляют собой неупорядоченные совокупности объектов (элементов). Множества (1, 3, 5, 6), (6, 1, 3, 5) и (5, 3, 1,6) одинаковы.
Важным качеством данного типа значений является наличие новых операций по их обработке.
6.2. Операции над множествами
В языке программирования Паскаль имеются следующие операции над множествами:
+ объединение множеств;
* пересечение множеств;
– вычитание множеств;
=, < > проверка множеств на равенство, неравенство; множество А равно множеству В, если каждый элемент множества А является элементом множества В и наоборот, каждый элемент множества В является элементом множества А; иначе множества А и В неравны друг другу; результат операции будет логического типа: TrueилиFalse;
<= проверка множества на включение; множество А включено в множество В, если элементы множества А являются также элементами множества В; результат операции А <= В – логический: TrueилиFalse;
INпроверка на принадлежность какого-либо значения множеству; результат операции – логический:TrueилиFalse; операцияSINAслужит для проверки, принадлежит ли элемент базового типаSмножеству А.
Пример.Решето Эратосфена. Составить программу, реализующую алгоритм определения набора простых чисел, не превышающих некоторого заданного числа, то есть алгоритм построения “решета Эратосфена”.
ProgramResheto;
constN= 256; {Верхняя граница значений элементов множества}
var S: Set of 2..N;
C, M, P: integer;
begin writeln(‘Введите границу’);
read(P);
writeln(‘Простые числа до ‘,P: 3);
S := [2..N];
For C := 2 to P do
If C in S then
begin writeln(C: 3);
for M := 1 to (P div C) do
S := S – [C * M];
end;
end.
Пример.Если взять то общее, что есть у боба с ложкой, добавить кота и поместить в тёплое место, то получится муравей. Так ли это? Состоит ли муравей из кота?
Пусть Y1, Y2, Y3 и Y4 – заданные множества символьного типа. Они получают значения с помощью операторов присваивания;
Y1 := [‘B’, ‘E’, ‘A’, ‘N’] – боб,
Y2 := [‘S’, ‘P’, ‘O’, ‘O’, ‘N’] – ложка,
Y3 := [‘C’, ‘A’, ‘T’] – кот,
Y4 := [‘C’, ‘O’, ‘L’, ‘D’] – холод,
[‘A’,’N’,’T’] – муравей.
Применяя соответствующие операции над множествами, формируем новое множество:
X := (Y1 * Y2) + Y3 – Y4;
Program A28A;
Var Y1, Y2, Y3, Y4, X: Set of Char; (* множества *)
S: Char; (* символ *)
Begin
Y1 := [‘B’, ‘E’, ‘A’, ‘N’]; {боб}
Y2 := [‘S’, ‘P’, ‘O’, ‘O’, ‘N’]; {ложка}
Y3 := [‘C’, ‘A’, ‘T’]; {кот}
Y4 := [‘C’, ‘O’, ‘L’, ‘D’]; {холод}
X := (Y1 * Y2) + Y3 – Y4;
write(‘X=’);
for S := ‘A’ to ‘Z’ do
if S in X then write(S);
writeln;
if Y3 <= X
then write(‘Yes’)
elsewrite(‘No’);
end.
Здесь для вывода значений нового множества Х используется оператор цикла For. Параметром цикла является символьная переменнаяS, которая принимает значение каждого символа латинского алфавита от ‘A’ до ‘Z’. Если значение переменнойSпринадлежит множеству Х, то оно выводится на экран дисплея.
Для решения второй части задачи “Состоит ли муравей из кота?” используется операция включения <= в условном операторе.
Пример.Из множества целых чисел [2..20] выделить следующие множества:
делящихся на 6 без остатка:
делящихся без остатка на 2, или на 3 или на 2 и 3;
Введём обозначения:
N2 – множество чисел, делящихся на 2;
N3 – множество чисел, делящихся на 3;
N6 – множество чисел, делящихся на 6;
N23 – множество чисел, делящихся на 2 и 3;
ProgramA23;
Const N = 20; (* размерность множества*)
Var N2, N3, N6, N23: Set of Integer;
K:Integer;
Begin
N2 := [ ]; (* начальное значениеN2 *)
N3 := [ ]; (* начальное значениеN3 *)
ForK:= 1toNdo
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 (‘ on 6 devite: ‘);
For K := 1 to N do
If K in N6 then write(K: 3);
writeln;
writeln(‘ on 2 or 3 devite: ‘);
For K := 1 to N do
If K in N23 then write(K: 3);
End.
На экране:
on 6 devite:
6 12 18
on2or3devite:
2 3 4 6 8 9 10 12 14 15 16 18 20
Пример.Составить программу, реализующую алгоритм построения множеств из символов, проверки вхождения произвольного символа в построенные множества, сравнения двух множеств.
Program Mnogestvo;
Type M = Set of ‘A’..’Z’;
Var M1, M2: M;
B: Char;
BeginM1 := [ ];
M2 := [ ];
Repeatwriteln(‘введите символ-элемент 1-го множества‘);
read(B);
M1 := M1 + [B];
Until B =’.’;
Repeatwriteln(‘введите символ-элемент 2-го множества‘);
read(B);
M2 := M2 + [B];
Until B =’.’;
writeln(‘ все встретившиеся буквы: ‘);
for B := ‘A’ to ‘Z’ do
if B in M1 + M2 then write(B: 2);
writeln(‘ общие буквы: ‘);
for B := ‘A’ to ‘Z’ do
if B in M1 * M2 then write(B: 2);
ifM1 =M2thenwriteln(‘ множества совпадают ‘);
ifM1 < >M2thenwriteln(‘ множества не совпадают ‘);
ifM1 >=M2thenwriteln(‘ 2-ое есть подмножество 1-го ‘);
ifM1 <=M2thenwriteln(‘ 1-ое есть подмножество 2-го ‘);
End.