Найдите ошибку в программе Pascal Задание: Дано:a,b,c,d. Найти:среднее значение чисел...

0 голосов
139 просмотров

Найдите ошибку в программе Pascal
Задание: Дано:a,b,c,d.
Найти:среднее значение чисел принадлежащих интервалу(1;30) и кратных 3.

program zaschita;
var s,k,a,b,c,d:integer; sr:real;
begin
write ('a='); readln(a);
write ('b='); readln(b);
write ('c='); readln(c);
write ('d='); readln(d);
s:=0;
k:=0;
a:=1;
while (a<=30) do<br> begin
if (a mod 3=0) then
s:=s+a;
k:=k+1;
end;
b:=1;
while (b<=30) do<br> begin
if (b mod 3=0) then
s:=s+b;
k:=k+1;
end;
c:=1;
while (c<=30) do<br> begin
if (c mod 3=0) then
s:=s+c;
k:=k+1;
end;
d:=1;
while (d<=30) do<br> begin
if (d mod 3=0) then
s:=s+d;
k:=k+1;
end;
sr:=s/k;
writeln ('среднее значение=',sr);
end.


Информатика (521 баллов) | 139 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

1. Если числа a,b,c,d вводятся с клавиатуры, то их просто нужно проверить на принадлежность интервалу (1;30), но не присваивать им 1!
2. Циклы while не нужны, они зацикливают программу.
3. Так как увеличение значения k и суммы нужно выполнять одновременно, то есть при выполнении условия, то нужно было эти команды заключить в операторные скобки begin ... end
Примерный вариант программы:

program z;
var a,b,c,d,k,s:integer;
begin
write('a='); readln(a);
write('b='); readln(b);
write('c='); readln(c);
write('d='); readln(d);
k:=0; s:=0;
if (a>1) and (a<30) and (a mod 3=0) then <strong>begin k:=k+1; s:=s+a; end;
if (b>1) and (b<30) and (b mod 3=0) then <strong>begin k:=k+1; s:=s+b; end;
if (c>1) and (c<30) and (c mod 3=0) then <strong>begin k:=k+1; s:=s+c; end;
if (d>1) and (d<30) and (d mod 3=0) then <strong>begin k:=k+1; s:=s+d; end;
if k=0 then writeln(Not solution') else writeln(s/k);
end.

(1.2k баллов)