Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Квадратное уравнение


Женя ©   (2012-12-21 12:43:00) 

Здравствуйте, посмотрите кому не тяжело, правильно ли я решила уравнение на Паскаль.


program prg_4;
uses
 crt;
label
 lb;
var
  mode: Integer;
  A,B,C,D: Real;
begin
lb:
 clrscr;
 write('A = ');
 readln(A);

 if (A = 0) then
 begin
   writeln('Korney net');
   readln;
   goto lb;
 end;

 write('B = ');
 readln(B);

 write('C = ');
 readln(C);

 D := B * B - 4 * A * C;

 writeln('');
 writeln('Otvet:');

 if (D = 0) then
 begin
   writeln('X1 = X2 = ',(-B)/(2*A):6:2);
 end;

 if (D > 0) then
 begin
   writeln('x1 = ',((-B+Sqrt(D))/(2*A)):6:2);
   writeln('x2 = ',((-B-Sqrt(D))/(2*A)):6:2);
 end;

 if (D < 0) then
 begin
   writeln('x1 = ',((Sqrt(-D))/(2*A)):6:2);
   writeln('x2 = ',((-Sqrt(-D))/(2*A)):6:2);
 end;

 writeln('');
 writeln('vveite 0 - vixod, 1 - prodoljit');
 readln(mode);

 if(mode = 0) then Exit;
 if(mode = 1) then goto lb;
end.


Юрий Зотов   (2012-12-22 00:54:00) [1]

Женя, в программе [5] есть серьезная ошибка. Постарайтесь найти ее и исправить, а если не получится - спрашивайте.


Юрий Зотов   (2012-12-21 17:24:00) [2]

В самом начале программы (перед repeat) вставьте:
mode := 0


Женя   (2012-12-21 15:39:00) [3]


> Юрий Зотов ©   (21.12.12 14:25) [5]


Спасибо.


Юрий Зотов   (2012-12-21 14:26:00) [4]

Поправка:

until
 mode = 0


Юрий Зотов   (2012-12-21 14:25:00) [5]

Женя, метками и goto пользоваться можно, но это считается не очень хорошим стилем (хотя непонятно, почему). Ну и если уж рассматривать разные варианты (нет корней, один корень, два корня...), то надо рассматривать все.

В общем, посмотрите вот это. Писал "с ходу", могут быть ошибки, проверьте.

program prg_4;
var
 mode: byte;
 A, B, C, D: real;
begin
 repeat
   write('Введите A, B, C через пробел: ')l
   readln(A, B, C);
   if A = 0 then
     if B = 0 then
       if C = 0 then
         writeln('Корень - любое число')
       else        
         writeln('Корней нет')
     else
       writeln('X= ', -C / B:6:2)
   else
     begin
       D :=  B * B - 4 * A * C;
       if D <  0 then
         writeln(Действительных корней нет')
       else        
         if D = 0 then
           writeln('X1 = X2 = ', -B / (2 * A) :6:2)
         else
           writeln('X1 = ', (-B - Sqrt(D)) / (2 * A) :6:2,
             ', X2 = ', (-B + Sqrt(D)) / (2 * A) :6:2);
         repeat
           write('Введите 0 - выход, 1 - продолжить: ');
           readln(mode)
         until
           mode in [0, 1]
     end
 until
   mode = 1
end.


Игорь Шевченко   (2012-12-21 14:15:00) [6]


>  writeln('Uravnenie virajdeno');


куда ?


брат Птибурдукова   (2012-12-21 13:27:00) [7]

Косметика исправлена, а принципиальные гадости — лейблы — на месте. И Exit тут совершенно не к месту.


Жека   (2012-12-21 12:57:00) [8]

A=0 - понятно, поменяю
D<0 - корней нет.

зачем убирать CRT и LABEL

СПАСИБО.

ОП новый вариант:

program prg_4;
uses
 crt;
label
 lb;
var
  mode: Integer;
  A,B,C,D: Real;
begin
lb:
 clrscr;
 write('A = ');
 readln(A);

 if (A = 0) then
 begin
   writeln('Uravnenie virajdeno');
   readln;
   goto lb;
 end;

 write('B = ');
 readln(B);

 write('C = ');
 readln(C);

 D := B * B - 4 * A * C;
 writeln('');
 writeln('Otvet:');

 if (D = 0) then
 begin
   writeln('X1 = X2 = ',(-B)/(2*A):6:2);
 end;

 if (D > 0) then
 begin
   writeln('x1 = ',((-B+Sqrt(D))/(2*A)):6:2);
   writeln('x2 = ',((-B-Sqrt(D))/(2*A)):6:2);
 end;

 if (D < 0) then
   writeln('Korney net D = ',D:6:2);

 writeln('');
 writeln('vveite 0 - vixod, 1 - prodoljit');
 readln(mode);

 if(mode = 0) then Exit;
 if(mode = 1) then goto lb;
end.


брат Птибурдукова   (2012-12-21 12:48:00) [9]

лейблы убери, crt убери, вариант с A=0 продумай получше (сообщение неправильное), вариант с D<0 неправильный


Наверх

Титульная страница Поиск, карта сайта Написать письмо