Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2012, 00:08   #1
mimit
Пользователь
 
Регистрация: 18.10.2012
Сообщений: 49
По умолчанию Квадратное утравнени

Код:
program kvadrateravnenie;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;

var a,b,c:integer; d,x1,x2,x:real;
begin
  setconsolecp(1251);
  setconsoleoutputcp(1251);
  writeln('Введите a');
  readln(a);
  writeln('Введите b');
  readln(b);
  writeln('Введите c');
  readln(c);
  begin
  if (a=0) and (b=0) and (c=0)
    then
      writeln('x - любое')
    else
      if (a=0) and (b=0)
        then
          writeln('нет решения')
        else
          if (b=0) and (c=0)
            then
              begin
                x1:=sqrt(a);
                x2:=-(sqrt(a));
                writeln('x1= ',x1:2:2,' x2= ',x2:2:2);
              end
            else
              if (a=0) and (c=0)
                then
                  writeln('x=0');end; begin
                    if (a>0) and (b>0) and (c>0)
                      then
                        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= ',x1:2:2,' x2= ',x2:2:2);
                              end
                            else
                              if d<0
                                then
                                  writeln('нет решения')
                                else
                                  if d=0
                                    then
                                      begin
                                        x:=(-b)/(2*a);
                                        writeln('x= ',x:2:2);
                                      end;   end;
readln;
end.
Проверьте пожалуйста в чем ошибка почему когда я ввожу значения 0 то программа закрываеться
mimit вне форума Ответить с цитированием
Старый 20.10.2012, 00:39   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Про трассировку что-нибудь слышали?

Ошибка у Вас в коде, и возникла она из-за совершенно нечитабельного структурирования программы:

Код:
  if (a=0) and (b=0) and (c=0)
    then
      writeln('x - любое')
с этого места, вместо выхода к финальному ReadLn программа идет сюда:

Код:
writeln('x=0');end; begin
                    if (a>0) and (b>0) and (c>0)
                      then
(И да простят меня модераторы, но код цитирую из поста ТС.)

В общем, у Вас в программе бегины и энды стоят где ни попадя, некоторые лишние вообще, а некоторые просто не на своих местах.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 00:39   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Где ошибка, не вижу, поэтому привожу свое решение.
Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  eps = 0.00001;

var
  a, b, c: double;
  x1, x2, x: double;
  d, ds: double;

begin
  readln(a, b, c);
  if a = 0 then
    if b = 0 then
      if c = 0 then
        writeln('Бесконечно много решений')
      else
        writeln('Решения нет')
      else
      begin
        x := -c / b;
        writeln('Корень: ', x:0:3);
      end
      else
      begin
        d := b * b - 4 * a * c;
        if d >= 0 then
        begin
          ds := sqrt(d);
          x1 := (-b + ds) / (2 * a);
          x2 := (-b - ds) / (2 * a);
          if abs(x1 - x2) < eps then
            writeln('Корень: ', x1:0:3)
          else
            writeln('Корни: ', x1:0:3, '; ', x2:0:3);
        end
        else
          writeln('Решения нет');
      end;
  readln;

end.
ПС Согласен со Scivом. Чужой код вообще сложно отлаживать. Особенно когда его сложно читать
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.10.2012 в 00:42.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратное уравнение. Hotab Паскаль, Turbo Pascal, PascalABC.NET 6 15.01.2012 11:27
Квадратное уравнение turtles Общие вопросы по Java, Java SE, Kotlin 1 14.04.2011 21:56
Квадратное уровнение... khorolpavel Общие вопросы C/C++ 2 05.10.2010 22:27