Основы программирования на C++, PASCAL
Var А,В: Set Of 2..N;
K,P: Integer;
Begin
{Формирование исходного множества А; В - искомое множество простых чисел, сначала - пустое}
A:=[2..N]; В:=[]; Р:=2;
Repeat
{Поиск минимального числа в множестве А}
While Not(P In A) Do Р:=Р+1;
{Включение найденного числа в множество В)
В:=В+[Р];
К:=Р;
{Исключение из А чисел, кратных Р}
While K<=N Do
Begin
A:=A-[K];
K:=K+P;
End
Until A= [ ] ;
{Вывод результата, т.е. всех чисел из множества В в порядке возрастания}
For Р:=2 То N Do If P In В Then WriteLn(P)
End.
Красивая программа! К сожалению, ею нельзя воспользоваться для N > 255 из-за отмеченного выше ограничения на максимальный размер множества в Турбо Паскале.
Пример 4. Как уже говорилось, нельзя вводить значения непосредственно в множество. Однако такая потребность у программиста может возникнуть. В этом случае можно прибегнуть к процедуре INSET, описанной ниже. Для примера рассматривается множество с символьным базовым типом. Предполагается, что в основной программе глобально объявлен тип SetChar.
Type SetChar: Set Of Char;
Procedure INSET(Var M: SetChar);
Var I,N: Byte; C: Char;
Begin
Write('Укажите размер множества:'); ReadLn(N);
M:=[];
For I:=l To N Do
Begin
Write(1:1,'-и элемент:'); ReadLn(С);
M:=M+[C]
End;
WriteLn('Ввод завершен!')
End.
В основной программе для ввода значений в множество, например с именем sim, достаточно записать оператор: INSET (SIM);
Произойдет диалоговый ввод значений.
Упражнения
1. В программе присутствуют описания:
Var P: Set Of 0..9; I,J: Integer;
Если i = 3 и j = 5, то какое значение получит переменная Р при выполнении следующих операторов присваивания:
а) P:=[I+3,J Div 2,J..Sqr(I)-3];
б) P:=[2*I..J];
в) P:=[I,J,2*I,2*J]?
2. Вычислить значения отношений:
а)[2] <> [2, 2, 2]; б)['a','b']=['b','а'];
в)[4,5,6]=[4,5,6]; г)['с','b']=['с'..'Ь'];
д)[2, 3,5, 7] <=[!.. 9]; е)[3,6..8]<=[2..7,9];
ж)Тrunс(3.9)In[1,3,5]; з)Odd(4) In[].
3. Вычислить значения выражений:
а)[1,3,5]+[2,4]; б)[1,3,5]*[2,4];
в)[1,3,5]-[2,4]; г) [1..6]+[3..8];
д)[1..6]*[3..8]; е)[1..6]-[3..8];
ж)[]+[4]; з) []*[4];
и)[]-[4].
4. Составить программу подсчета количества различных значащих цифр в десятичной записи натурального числа.
5. Составить программу, печатающую в возрастающем порядке все целые числа из диапазона 1 ...255, представимые в виде n2+m2, где п, т > 0.
6. Дана строка из строчных русских букв. Между соседними словами — запятая, за последним словом — точка. Напечатать в алфавитном порядке:
а) все гласные буквы, которые входят в каждое слово;
б) все согласные буквы, которые не входят ни в одно слово;
в) все согласные буквы, которые входят только в одно слово;
г) все гласные буквы, которые входят более чем в одно слово.