Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачник с исправлением.doc
Скачиваний:
55
Добавлен:
08.05.2015
Размер:
922.62 Кб
Скачать

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 города;