Требовалось написать программу, которая получает на входе натуральное число n и выводит число, которое получается из n после удаления всех пятерок, порядок остальных цифр при этом не меняется. Программист торопился и написал программу неверно, найдите неверную строку и исправьте ее.
var n, r, t:longint;
d:integer;
begin
readln (n);
r:=0; t:=1;
while n>0 do begin
d:=n mod 10; if d=5 then begin
r:=r+d*t;
t:=t+1
end;
n:=n div 10;
end;
writeln (t);
end.

1

Ответы и объяснения

  • Участник Знаний
2014-03-19T15:29:20+04:00
Var n, r, t:longint; 
d:integer;
begin  
readln (n); 
 r:=0;  t:=1;  
while n>0 do begin  
d:=n mod 10;  if d=5 then begin    1 ошибка: надо вместо d=5 написать d<>5
 r:=r+d*t;  
t:=t+1                                         2 ошибка: надо вместо t+1 написать t*10
end; 
n:=n div 10;
 end;
writeln (t);                                   3 ошибка: надо вместо t написать r
end.
Комментарий удален
В этой переменной хранится как бы разряд цифры. Например, 253. 5 выкидываем, а двойка теперь обозначать будет не число сотен, а число десятков. Не знаю, как это грамотно по-научному объяснить, ну вот так как-то. Понятно так?
Когда слева направо по числу идем в t заносим сначала 1, потом 10, потом 100, ... Т.е. запоминаем, что работаем с единицами, десятками, сотнями.
Блин((( идем справа налево!!!