Коллеги, есть одна общая ошибка (особенно у начинающих), о которой хотелось бы поговорить.
Суть ошибки - невыполнение правила универсальности алгоритма и его краткости.
Чтобы было понятно, рассмотрим две задачи.
Первая - решение квадратного уравнения. Здесь нужно учитывать два нюанса. Первый - программа должна правильно реагировать при вводе ЛЮБЫХ входных данных, в том числе и при а=0. Во-вторых, программа должна выполнять действия только те, которые необходимо выполнить для решения. К примеру:
var A,B,c,d,x1,x2:real;
begin
write('a=,b=,c= ');
readln(a,B,c);
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Корниуравненния=',x1,', ',x2);
end;
if d=0 then
begin
x1:=-b/(2*a);
writeln('Корень уравненния =',x1);
end;
if d<0 then writeln('Корнейнет');
end.
Данная программа проверяет все условия вне зависимости от выполнения их. Во-вторых, не все варианты ввода данных предусмотрены. Короче, за подобную программу вашим ученикам совершенно справедливо скинули бы баллы на любой олимпиаде. А при проверке просто решения тоже. РЕшение, как минимум, дожно быть такое:
Коллеги, есть одна общая ошибка (особенно у начинающих), о которой хотелось бы поговорить.
Суть ошибки - невыполнение правила универсальности алгоритма и его краткости.
Чтобы было понятно, рассмотрим две задачи.
Первая - решение квадратного уравнения. Здесь нужно учитывать два нюанса. Первый - программа должна правильно реагировать при вводе ЛЮБЫХ входных данных, в том числе и при а=0. Во-вторых, программа должна выполнять действия только те, которые необходимо выполнить для решения. К примеру:
var A,B,c,d,x1,x2:real;
begin
write('a=,b=,c= ');
readln(a,B,c);
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Корниуравненния=',x1,', ',x2);
end;
if d=0 then
begin
x1:=-b/(2*a);
writeln('Корень уравненния =',x1);
end;
if d<0 then writeln('Корнейнет');
end.
Данная программа проверяет все условия вне зависимости от выполнения их. Во-вторых, не все варианты ввода данных предусмотрены. Короче, за подобную программу вашим ученикам совершенно справедливо скинули бы баллы на любой олимпиаде. А при проверке просто решения тоже. РЕшение, как минимум, дожно быть такое:
ar A,B,c,d,x1,x2:real;
begin
Write('a='); Readln(a);
Write('b='); Readln(b);
Write('c='); Readln(c);
if a=0 then writeln('Уравнение не квадратное!')
else
begin
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Корниуравнения=',x1,', ',x2);
end
else
if d=0 then
begin
x1:=-b/(2*a);
writeln('Корень уравнения =',x1);
end
else writeln('Корнейнет')
end
end.
Л.И. Долинер