Читаем Песни о Паскале полностью

1 2 3 * 5 * 7 * 9 * 11 * 13 * 15 * 17 * 19 *

Результат – простые числа:

1 2 3 * 5 * 7 * * * 11 * 13 * * * 17 * 19 *


А если бы Эратосфен жил в наше время? Стал бы он царапать на песке? Конечно, нет, – на что ж тогда компьютеры? Программа «P_38_4» находит все простые числа, не превышающие 255, – роль песка исполняет множество чисел.


program P_38_4; { Решето Эратосфена }

var Simples : set of byte; { множество чисел }

n, m : integer;

F : text;

begin

Assign(F, 'P_38_4.out'); Rewrite(F);

Simples:= [2..255]; { Сначала множество полное }

{ Цикл вычеркивания составных чисел }

for n:=2 to (255 div 2) do begin

      { если число ещё не вычеркнуто }

      if n in Simples then

      { проверяем на кратность ему все последующие }

      for m:=2*n to 255 do

      { если остаток(m/n) равен нулю, то m – составное }

      if (m mod n)=0

      { и его надо вычеркнуть из множества}

      then Simples:= Simples – [m];

end;

{ Распечатка множества простых чисел }

for n:=2 to 255 do if n in Simples then Writeln(F,n);

Close(F); Readln;

end.


Мелочь, а приятно

Одну из первых своих программ мы снабдили разумом попугая, научив повторять имя пользователя. После ввода имени в переменную S программа печатала.


      Writeln (’Здравствуй, ’+ S);


Сделаем её чуть умнее, научив отличать мальчиков от девочек. По крайней мере, для русских имен. Русские женские имена оканчиваются на буквы «а» или «я» (Анна, Светлана, Мария и так далее), чего не скажешь о мужских. Последнюю букву имени можно «выдернуть» в символьную переменную C таким оператором.


      C:= S[Length(S)];


И теперь приветствовать пользователя можно так:


      if (C=’А’) or (C=’а’) or (C=’Я’) or (C=’я’)

      then Writeln (’Здравствуй, девочка ’+ S)

      else Writeln (’Здравствуй, мальчик ’+ S);


Здесь проверяется совпадение переменной C с буквами верхнего и нижнего регистров, поскольку нельзя предсказать, в каком регистре будет введено имя. Условный оператор выглядит громоздко, но, призвав на помощь множество, мы упростим его.


      if C in [’А’, ’а’, ’Я’, ’я’]

      then Writeln (’Здравствуй, девочка ’+ S)

      else Writeln (’Здравствуй, мальчик ’+ S);


Переменную C проверяем на попадание в множество символов. Согласитесь, этот вариант читается приятней.

Итоги

Если вовремя смекнуть, что имеете дело с множествами, сложные задачи, как по волшебству, превратятся в простые!

А слабо?

А) Напишите программу для решения директорских задач и повторите подвиг контрразведчика. Или слабо?

Б) На острове действовали забавные законы по части транспортных средств – автобусов, грузовиков и легковушек. Во-первых, общее количество автомобилей на острове не должно было превышать 256. Автомобилям назначались номера с 0 до 255, при этом соблюдались следующие правила.

Номера, делившиеся без остатка на 7, назначались автобусам. Те, что делились без остатка на 5, назначались грузовикам, а все прочие – легковушкам. Например, номера 35 и 70 (они делятся и на 7, и на 5) доставались автобусам, а не грузовикам.

Схожие правила применялись и к окраске автомобилей, а именно: если номер авто делился на 4, его красили красным, если на 3 – желтым, если на 2 – белым, а остальные автомобили красили черным.

• Сформируйте три множества по классам автомобилей – автобусы, грузовики и легковушки. Вычислите количество машин каждого класса (Ответ: 37, 44, 175).

• Сформируйте четыре множества по цвету автомобилей – красные, желтые, белые и черные. Определите количество машин каждого цвета (Ответ: 64, 64, 43, 85).

• Столица того государства – деревня Кокосовка – страдала от пробок. Для их устранения ввели ограничение на въезд транспорта. Так, в один из дней недели в столицу пускали только красные легковушки, белые грузовики и все автобусы. Найдите номера всех этих машин. Сколько всего автомобилей могло въехать в столицу в тот день?

В) Полицейская база островного государства содержала номера угнанных автомобилей – числа от 1 до 255. Это был текстовый файл такого, например, вида:


120 31 16 25


Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы