Официальный сайт circ-a 24/7/365

Вы не зарегистрированы

Авторизация



Форум вопросов для участников дистанционного курса по обучению программирования в среде PascalABC

Ответов - 11
Леонид Исаевич Долинер
Фото пользователя Леонид Исаевич Долинер
На сайте с: 23/11/2010
Баллы: 71
Пользователь в офф-лайн. Последнее посещение 6 лет 40 недель назад.
На: Форум вопросов для участников дистанционного курса по обуче

Коллеги, есть одна общая ошибка (особенно у начинающих), о которой хотелось бы поговорить.

Суть ошибки - невыполнение правила универсальности алгоритма и его краткости.

Чтобы было понятно, рассмотрим две задачи.

Первая - решение квадратного уравнения. Здесь нужно учитывать два нюанса. Первый - программа должна правильно реагировать при вводе ЛЮБЫХ входных данных, в том числе и при а=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.

Л.И. Долинер

Смотреть видео онлайн


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн