{1)дано натуральное число, удалить все цифры А(А вводится с клавиатуры)
2)найти все числа от 1 до 200,у которых количество делителей равно N
(N вводится с клавиатуры)
3)найти сумму чисел от 1 до 200,у которых 5 делителей.
===
Решение без подпрограмм, а потому не лучшее}
uses CRT;
VAR
src, a, c, N: Longint;
err, a_int, count: Integer;
i, j: Integer;
ch: Char;
S: String;
BEGIN
ClrScr;
{ПЕРВОЕ ЗАДАНИЕ}
WriteLn('Удаление заданной цифры из числа');
repeat
Write('Введите целое число: '); {$I-} ReadLn(src); {$I+}
err:= IOResult;
if err <> 0 then WriteLn('Ошибка ввода! Попробуйте еще раз');
until err = 0;
Write('Введите цифру: ');
repeat
ch:=ReadKey;
until ch in ['0'..'9'];
WriteLn(ch);
{Удаление. Первый способ - с помощью строки}
Str(src, s);
if POS(ch, S) = 0 then WriteLn('Цифры ',ch,' в числе ',src,' нет')
else
begin
while (POS(ch, S) <> 0) do delete(S, POS(ch, S), 1);
WriteLn('Число после удаления: ',S);
(* {Вывод с преобразованием в число} Val(S, c, err); WriteLn(c); *)
end;
{Удаление. Прямой метод}
{ Для простоты работы переворачиваем цифры в числе }
a := 0;
while (src <> 0) do begin
a:= a* 10 + (src mod 10);
src := src div 10;
end;
c:= 0;
count:= 0; {Число удалений}
VAL(ch, a_int, err);
while a <> 0 do begin
if a mod 10 = a_int then inc(count)
else c := c*10 + (a mod 10);
a := a div 10;
end;
if count = 0 then
WriteLn('Цифры ',ch,' в числе ',src,' нет')
else WriteLn('После удаления: ',c);
WRiteLn;
{второе задание. Считаю делителями и 1 и само число}
WriteLn('========= ВТОРОЕ ЗАДАНИЕ =========');
repeat
Write('Введите целое число (количество делителей): '); {$I-} ReadLn(N); {$I+}
err:= IOResult;
if err <> 0 then WriteLn('Ошибка ввода! Попробуйте еще раз');
until err = 0;
WriteLn('Числа с числом делителей = ',N);
c:=0; {было ли хоть одно число?}
for i:=1 to 200 do
begin
count:=0;
for j:=1 to i do
if i mod j = 0 then inc(count);
if count = N then begin
Write(i:8); inc(c);
end;
end;
WriteLn;
if c = 0 then WriteLn('Чисел с числом делителей ',N,' нет')
else WriteLn('Таких чисел: ',c);
WriteLn;
{третье задание}
WriteLn('========= ТРЕТЬЕ ЗАДАНИЕ =========');
WriteLn('Сумма чисел с числом делителей = 5');
a:=0; {будет сумма}
for i:=1 to 200 do
begin
count:=0;
for j:=1 to i do
if i mod j = 0 then inc(count);
if count = 5 then
begin
a := a + i;
WriteLn(i);
end;
end;
WriteLn('Сумма чисел, у которых число делителей равно 5: ',a);
END.