Цитата:
Сообщение от zaaag
а можете проверить ещё одну задачу, правильно ли?
|
В целом - да, всё правильно. Но есть несколько, скажем так, небольших шероховатостей непринципиального характера.
1. Для переменной sum лучше выбрать формат LongInt - мало ли, какие числа вводятся и сколько, может получиться так, что сумма выскочит за границы формата Integer (32000 с копейками).
2. Ввод чисел желательно оформить с экранной подсказкой - пустой экран с моргающим маркером плохо смотрится.
3. Есть некая тонкость с оператором ввода. Лучше использовать не read, а readln. Не буду вдаваться в подробности, но read - "плохой" оператор, он как бы не закрывает ввод, а оставляет систему в ожидании следующего ввода, что приводит, в частности, к несрабатыванию остановок, см. п.4.
4. В конце программы желательно поставить команду readln без параметров. Дойдя до нее, программа остановится и покажет выведенный на экран результат расчета. Но это произойдет только, если в программе для ввода используются операторы readln, а не read.
5. Для среднего лучше (просто красивее) использовать форматный вывод. Например, формат 0:3 означает, что число будет выведено с тремя знаками после десятичной точки.
С учетом поправок:
Код:
program qw;
var
tmp, zero, total: integer;
sred: real;
sum:longint;
begin
zero:=0;
total:=0;
sum:=0;
repeat
write('Введите число: ');
readln(tmp);
if tmp<>777 then
begin
inc(total);
sum:=sum+tmp;
if tmp=0 then inc(zero);
end;
until tmp=777;
sred:=sum/total;
writeln('Всего чисел: ', total, ' Из них нулей - ', zero, ' Среднее арифметическое = ', sred:0:3);
readln
end.
Но, повторяю, все эти поправки - в основном "косметического" характера. Принципиально же программа составлена правильно.