Найдите ошибку в программе 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 begin if (a mod 3=0) then s: =s+a; k: =k+1; end; b: =1; while (b< =30) do begin if (b mod 3=0) then s: =s+b; k: =k+1; end; c: =1; while (c< =30) do begin if (c mod 3=0) then s: =s+c; k: =k+1; end; d: =1; while (d< =30) do begin if (d mod 3=0) then s: =s+d; k: =k+1; end; sr: =s/k; writeln ('среднее значение=',sr); end.

Ооггод Ооггод    2   25.09.2019 07:00    0

Ответы
zakharovserg20 zakharovserg20  27.08.2020 07:11
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 begin k:=k+1; s:=s+a; end;
if (b>1) and (b<30) and (b mod 3=0) then begin k:=k+1; s:=s+b; end;
if (c>1) and (c<30) and (c mod 3=0) then begin k:=k+1; s:=s+c; end;
if (d>1) and (d<30) and (d mod 3=0) then begin k:=k+1; s:=s+d; end;
if k=0 then writeln(Not solution') else writeln(s/k);
end.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика