- •Введение
- •1. Вычисление функций
- •Пояснения к программе
- •Пояснения к программе
- •2. Одномерные массивы
- •3. Матрицы
- •Пояснения к программе
- •4. Обработка текстов
- •Пояснения к программе
- •Пояснения к программе
- •5. Процедуры и функции
- •Пояснения к программе
- •Пояснения к программе
- •Пояснения к программе
- •6. Перечисляемый и диапазонный типы
- •Пояснения к программе
- •7. Записи
- •8. Множества
- •9. Файлы
- •10. Списки
- •Пояснения к программе
- •Пояснения к программе
- •Литература
- •Приложение 1 Комбинации клавиш управления в среде Turbo Pascal
- •Приложение 2 Сообщения об ошибках периода компиляции
- •1. Вычисление функций 5
8. Множества
8.1 Из множества целых чисел 1..N выделить множество чисел делящихся на 6 и множество чисел делящихся на 2 или на 3;
Пояснения к программе:
Первоначально формируются множество N2 четных чисел и множество N3 чисел кратных 3. Путем пересечения этих множеств получаем множество N6 чисел, делящихся на 6, и путем их объединения получаем множество N23 чисел, делящихся на 2 или на 3. Переменные множественного типа нельзя использовать в процедурах ввода-вывода, поэтому для вывода результирующих множеств используется стандартный прием — в цикле перебираются все возможные значения элементов множества и с помощью операции in выделяются элементы, принадлежащие множеству.
program Set_6;
const
N = 33;
Var
N2, N3, N6, N23 : set of 1 .. N;
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 : 3);
Writeln;
Writeln( 'На 2 или 3 делятся:' );
for K := 1 to N do
if K in N23 then Write ( K : 3)
End.
8.2 Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.
8.3 Пусть дан текст. Найдите наибольшее количество цифр, идущих подряд.
8.4 Пусть вводится последовательность символов длиной не более 4. Если все вводимые символы — цифры, то выполните преобразование данной последовательности в целое число.
8.5 Пусть дан текст. Определите, содержит ли он символы, отличные от букв и пробелов.
8.6 Пусть дан фрагмент программы. Опишите процедуру Print(A), печатающую в алфавитном порядке все элементы множества А типа TLetter.
Type
TLetter = set of 'a'..'z';
8.7 Пусть дан текст, состоящий из строчных латинских букв и цифр. Определите, каких букв — гласных (а, е, i, о, u) или согласных — больше в этом тексте.
8.8 Пусть дан текст, оканчивающийся точкой. Напечатайте:
а) первые вхождения символов в текст, сохраняя их исходный порядок;
б) символы, входящие в текст не менее двух раз;
8.9 Пусть дана непустая последовательность слов из строчных русских букв. Между соседними словами присутствует запятая, за последним — точка. Напечатайте в алфавитном порядке:
а) гласные буквы, которые входят в каждое слово;
б) согласные буквы, которые не входят ни в одно слово;
в) все звонкие согласные буквы, которые входят хотя бы в одно слово;
г) все глухие согласные буквы, которые не входят хотя бы в одно слово;
д) все глухие согласные буквы, которые не входят только в одно слово;
е) все звонкие согласные буквы, которые входят более чем в одно слово;
ж) все гласные буквы, которые не входят более чем в одно слово;
з) все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово;
и) все глухие согласные буквы, которые входят в каждое нечетное слово и не входят хотя бы в одно четное слово.
ПРИМЕЧАНИЕ Буквы а, е, и, о, у, ы, э, ю, я — гласные; все остальные — согласные, кроме й, ь, ъ; звонкие согласные — б, в, г, д, ж, з, л, м, н, р; глухие согласные — к, п, с, т, ф, х, ц, ч, ш, щ.
8.10 Пусть дано натуральное число п (п > 2). Найдите все меньшие п простые числа, используя решето Эратосфена. Решетом Эратосфена называют следующий способ определения простых чисел. Выпишем подряд все целые числа от 2 до п. Первое простое число 2. Подчеркнем его, а все большие числа, кратные 2, зачеркнем. Первое из оставшихся чисел — 3. Подчеркнем его, а все большие числа, кратные трем, зачеркнем. Первое число из оставшихся теперь — 5, так как 4 уже зачеркнуто. Подчеркнем его как простое, а все большие числа, кратные пяти, зачеркнем и т. д.
8.11 С помощью решета Эратосфена (см. предыдущее задание) найдите четверки меньших п простых чисел, принадлежащих одному десятку (например, 11, 13, 17, 19).
8.12 Пусть дан фрагмент программы. Опишите функцию QuantDays(m), определяющую количество дней в месяце m невисокосного года.
Type
month = 1..12;
8.13 Пусть дан фрагмент программы. Опишите функцию Card(A), подсчитывающую количество элементов во множестве А типа М. Например, Card([5, 8, 23])=3.
Type
М = set of 1..99;
8.14 Пусть дан фрагмент программы. Опишите функцию Sum(A, SI, S2), вычисляющую сумму тех элементов матрицы А, номера строк и номера столбцов которых принадлежат соответственно непустым множествам S1 и S2 типа num.
Const
n = 10;
Type
number = 1..n;
matrix = array [number, number] of real;
num = set of number;
Var
A : matrix;
S1, S2 : num;
8.15 Опишите перечисленные ниже подпрограммы:
а) процедура Print(n) печатает в возрастающем порядке все цифры, не входящие в десятичную запись числа n.
б) функция Digit(n) подсчитывает количество различных значащих цифр в десятичной записи числа;
program Set_Digits;
var
N : LongInt;
function Digits ( N : LongInt ) : LongInt;
Var
Sd : Set of 0 .. 9;
D : 0 .. 9;
K : Integer;
begin
Sd := [];
repeat
D := N mod 10;
Sd := Sd + [ D ];
N := N div 10;
until N = 0;
K := 0;
for D := 0 to 9 do
if D in Sd then K := K + 1;
Digits := K
end;
Begin
Writeln( 'Введите целое число' );
Readln( N );
Writeln( 'В записи целого числа ', N ,
' количество различных цифр =', Digits( abs( N ) ):2 )
End.
8.16 В возрастающем порядке напечатайте все целые числа из диапазона 1.. 1000, представимые в виде п2 + т2, где m,n>0.
8.17Пусть дан фрагмент программы. Опишите процедуруНаличие( Маг, А, В, C ), которая по информации из массиваМагтипамагазиныприсваивает параметрамА, В, Стипаассортиментзначения, перечисленные ниже.
Type
продукт = (хлеб,масло,молоко,мясо,рыба,соль,сыр, колбаса,сахар,чай,кофе);
ассортимент = set of продукт;
магазины = array [1..20] of ассортимент;
a) А — продукты, которые есть во всех магазинах;
б) В — продукты, которые есть хотя бы в одном магазине;
в) С — продукты, которых нет ни в одном магазине.
8.18 Пусть дан фрагмент программы. Опишите логическую функцию Везде(ГР) определяющую, есть ли в группе ГР хотя бы один человек, побывавший в гостях у всех остальных из группы (ГР[х] — множество людей, побывавших в гостях у человека с именем х; х ГР[х]).
Type
имя = (Вася, Володя, Ира, Лида, Марина, Миша, Наташа, Олег, Оля, Света, Юля);
гости = set of имя;
группа = array [имя] of гости;
8.19 Пусть дан фрагмент программы. Опишите процедуру МожноПопасть(Р, Н, К), которая по рейсам Р (Р[х] — множество городов, в которые можно за один рейс доехать из города х) определяет К — множество городов, в которые можно попасть автобусом (за один рейс или через другие города) из города Н.
Type
город = ( A, B, C, D, E, F, G, H );
города = set of город;
рейсы = array [город] of города;