Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ПАСКАЛЕ.doc
Скачиваний:
12
Добавлен:
04.09.2019
Размер:
2.98 Mб
Скачать

Контрольные вопросы

  1. Величины каких типов данных можно объединять во множество?

  2. Чем отличается объединение элементов множества от массива?

  3. Можно ли во множестве узнать число элементов множества по его объявлению?

  4. Какие операции возможны над множествами?

  5. Как определить принадлежность элемента множеству?

  6. Как можно добавлять новые элементы к множеству?

  7. Как удалить из множества A элементы, содержащиеся в другом множестве B?

  8. Какая операция и какой оператор используются для вывода элементов множества?

Задания для самостоятельной работы

Пример 1. Дано натуральное число n. Найти все цифры, не входящие в десятичную запись данного числа в порядке их возрастания.

Решение. Решение задачи состоит из двух этапов. Сначала надо, выделяя с помощью операций Div и Mod, сформировать множество из всех цифр числа n, а потом, перебирая все цифры от 0 до 9, проверить их вхождение в найденное ранее множество.

Type mn = set of 0..9;

Var s: mn; n: longint; I, k: integer;

Begin

Wrietln (‘введите число n’); readln (n);

S:= []; {Образование пустого множества}

{Формирование множества цифр числа n}

While n <> 0 do

Begin

k: = n Mod 10;

n:= n Div 10;

s:= s+ [k]

end;

{Вывод цифр числа n в порядке возрастания}

For i:= 0 to 9 do if i In s then write (i:2);

Readln

End.

Пример 2. «Решето Эратосфена». Найти все простые числа от 2 до n, где число n вводится с клавиатуры.

Решение. Метод «решета Эратосфена» заключается в следующем: формируется множество М, состоящее из всех чисел промежутка [1..n]. Затем из него удаляются все элементы, кратные 2б 3б 4 и так далее до числа n Div 2, кроме самих этих чисел. После такого просеивания в множестве M останутся только простые числа.

Var M: set of byte;

i, k, n: integer;

Begin

Writeln (‘введите число n (не более 255 – byte) ‘); readln (n);

M := [2..n]; {Начально значение множества М из всех чисел промежутка}

For k := 2 to n Div 2 do {Перебор все делителей}

For i := 2 to n do {Все числа промежутка}

If (i Mod k = 0) and (i <> k) then M := M – [k];

{ Если число i кратно k и не равно ему, то его удаляем из множества М }

For I := 1 to n do if I In M then write (i:3); {Распечатка простых чисел}

Readln

End.

Варианты заданий

Задание 1. Написать программу, вычисляющую значение выражения:

    1. [2..13] * [3,13..60] + [4..10] - [5..15] * [4..6,12..14].

    2. [2..10] - [4,6] - [2..12] * [8..15].

    3. (['0'..'4'] + ['7'..'9']) * (['а','3'] + ['Е','5'..'8'])

    4. (['a'..'z'] + ['A'..'Z']) * (['c'..'f'] + ['Q'..'T']).

Задание 2. Дана непустая последовательность слов из строчных латинских букв. Слова разделены запятой, за последним словом - точка. Напечатать в алфавитном порядке:

        1. Все гласные буквы, которые входят в каждое слово.

  1. Все гласные, которые входят только в одно слово.

  2. Все согласные, которые входят только в одно нечетное слово;

  3. Все согласные, которые не входят ни в одно слово.

Задание 3. Напечатать в алфавитном порядке все буквы текста, входящие в него:

  1. ровно один раз;

  2. не менее двух раз;

  3. не более двух раз;

  4. более двух раз.