Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2010, 21:55
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
Вопрос Биквадратные уравнения

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  a,b,c,x1,x2,x3,x4,t1,d,t2: real;
  m:array[1..4]of Real;
  i,j,kol:Integer;
Begin
  Reset(Input,'bisqr.in');
  Rewrite(Output,'bisqr.out');
   read(a);
   read(b);
   read(c);
   for i:=1 to 4 do m[i]:=999999;

  d:=b*b-4*a*c;
  if d >= 0 then
    begin
      t1:=(-b+sqrt(d))/(2*a);
      t2:=(-b-sqrt(d))/(2*a);
      if t1 >= 0 then
        begin
          x1:=sqrt(t1); x2:=-x1;
          m[1]:=x1;m[2]:=x2;
        end
      else begin m[1]:=999999; m[2]:=999999 end;
      if t2 >= 0 then
        begin
          x3:=sqrt(t2); x4:=-x3;
          m[3]:=x3; m[4]:=x4;
        end
      else begin m[3]:=999999;m[4]:=999999;end;
    end
  else m[1]:=999999;
  kol:=0;
  for i:=1 to 4 do begin
    if m[i]<>999999 then kol:=kol+1;
  end;
  Writeln(kol);
  for i:=1 to 4 do begin
    if m[i]<>999999 then Writeln(m[i]:0:6);
  end;
  closefile(output);
End.
помогите пожалуйста почему программа не правильная?
Ответить с цитированием
  #2  
Старый 04.12.2010, 22:13
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Не знаю что там дальше, смотреть как-то перехотелось после просмотра первых 2 строчек...
Код:
// так нельзя!
//  Reset(Input,'bisqr.in');
//  Rewrite(Output,'bisqr.out');
  AssignFile(Input, 'bisqr.in');
{$I-}
  Reset(Input);
  if(if IOResult <> 0) then
    ReWrite(Input);
{$I+}
...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 04.12.2010, 22:45
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

ну это нам не слишком важно.....это уже мелочи.....тут дальше гдето есть ошибка=(
Ответить с цитированием
  #4  
Старый 05.12.2010, 01:05
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

че такое m[]:=999999 и зачем это надо? о_О
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!
Ответить с цитированием
  #5  
Старый 05.12.2010, 01:11
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

у нас не всегда есть все 4 корня....ну и так как мы предположили что корня 999999 нет, то будем пользоваться этим числом для проверки наличия корня....
да,это глупо, но я подругому не умею=(
Ответить с цитированием
  #6  
Старый 05.12.2010, 01:18
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

а почему нельзя просто найти корни квадратного уравнения, и после проверить, если корни больше нуля, то еще раз корни и вывести их на экран, если меньше, вывести "ах он гад какой, не решается"
зачем столько лишнего кода?
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!

Последний раз редактировалось SerginhoLD, 05.12.2010 в 01:20.
Ответить с цитированием
  #7  
Старый 05.12.2010, 01:22
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от SerginhoLD
а почему нельзя просто найти корни квадратного уравнения, и после проверить, если корни больше нуля, то еще раз корни и вывести их на экран, если меньше, вывести "ах он гад какой, не решается"
зачем столько лишнего кода?
а как это будет выглядеть? просто я очень не силен в Delphi =(
Ответить с цитированием
  #8  
Старый 05.12.2010, 01:26
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

Код:
if d >= 0 then
    begin
      t1:=(-b+sqrt(d))/(2*a);
      t2:=(-b-sqrt(d))/(2*a);
      if t1 >= 0 then
        begin
          x1:=sqrt(t1); x2:=-x1;
          //m[1]:=x1;m[2]:=x2;
writeln('x1: ',x1,'; x2: ',x2);
        end
      else writeln('нехорошее уравнение');
      if t2 >= 0 then
        begin
          x3:=sqrt(t2); x4:=-x3;
          //m[3]:=x3; m[4]:=x4;
writeln('x3: ',x3,'; x4: ',x4);
        end
      else writeln('нехорошее уравнение');
    end
// и все вроде :)
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!
Ответить с цитированием
  #9  
Старый 05.12.2010, 01:28
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

спасибо=)))
Ответить с цитированием
  #10  
Старый 05.12.2010, 01:31
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

Просто дело в том что мне еще нужно выводить количесив решений(
Ответить с цитированием
  #11  
Старый 05.12.2010, 01:34
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

ну глобальная переменная, допустим i, сначала равна нулю
потом если корень больше нуля, то i:=i+2, да и все
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!
Ответить с цитированием
  #12  
Старый 05.12.2010, 11:31
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от SerginhoLD
ну глобальная переменная, допустим i, сначала равна нулю
потом если корень больше нуля, то i:=i+2, да и все
я это сделал...+ мне надо выводить сначала количестыо корней, а потом уже корни... Получилось вот так:
Код:
program Project2n;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a,b,c,x1,x2,x3,x4,t1,d,t2: real;
  m:array[1..4]of Real;
  i,j,kol:Integer;
  label hh;
Begin
  Reset(Input,'bisqr.in');
  Rewrite(Output,'bisqr.out');
   read(a);
   read(b);
   read(c);
   if (a=0) and (b=0) and (c=0) then begin Writeln(-1); goto hh;end;
  d:=b*b-4*a*c;
  if d >= 0 then
    begin
      t1:=(-b+sqrt(d))/(2*a);
      t2:=(-b-sqrt(d))/(2*a);
      if t1 >= 0 then
        begin
          x1:=sqrt(t1); x2:=-x1;
          //m[1]:=x1;m[2]:=x2;
       // writeln('x1: ',x1,'; x2: ',x2);
         i:=2;
        end
      else I:=0;
      if t2 >= 0 then
        begin
          x3:=sqrt(t2); x4:=-x3;
          //m[3]:=x3; m[4]:=x4;
         // writeln('x3: ',x3,'; x4: ',x4);
          I:=I+2;
        end
      else i:=i+1;
    end;
    if d<0 then i:=0;
    writeln(i);
   if x1<>0 then Writeln(x1:0:6);
   if x2<>0 then Writeln(x2:0:6);
   if x3<>0 then Writeln(x3:0:6);
   if x4<>0 then Writeln(x4:0:6);
   hh:
   CloseFile(Output);
end.
всервыно не пашет(
Ответить с цитированием
  #13  
Старый 05.12.2010, 11:52
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

на
PHP код:
program Project2n;

{
$APPTYPE CONSOLE}

uses
  SysUtils
;

var
  
a,b,c,x1,x2,x3,x4,t1,d,t2double;
  
tf1tf2boolean;
  
i:Integer;
Begin
  a
:=4b:=-13c:=7i:=0tf1:=falsetf2:=false;
  
d:=b*b-4*a*c;
  if 
>= 0 then
  begin
    t1
:=(-b+sqrt(d))/(2*a);
    
t2:=(-b-sqrt(d))/(2*a);
    if 
t1 >= 0 then
    begin
      x1
:=sqrt(t1); x2:=-x1;
      
tf1:=true;
      
i:=i+2;
    
end;
    if 
t2 >= 0 then
    begin
      x3
:=sqrt(t2); x4:=-x3;
      
tf2:=true;
      
i:=i+2;
    
end;
  
end
  
else writeln('d < 0');

  
writeln('kol-vo resheniy: ',i);
  if 
tf1 then writeln('x1: ',x1:8:2,#10#13+'x2: ',x2:8:2);
  
if tf2 then writeln('x3: ',x3:8:2,#10#13+'x4: ',x4:8:2);

  
readln;
end
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!
Ответить с цитированием
  #14  
Старый 05.12.2010, 12:37
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

а как обработать вариант когда решений бесконечно много? например когда a b и c =0?.... просто я знаю только один такой пример=(
Ответить с цитированием
  #15  
Старый 05.12.2010, 12:51
razh2009 razh2009 вне форума
Прохожий
 
Регистрация: 04.12.2010
Сообщения: 20
Репутация: 10
По умолчанию

я не знаю почему, но когда я добавил обработку а=0 б=0 с=0, программа всеравно не прошла тесты((.... пришло сообщение что там

Ошибка времени исполнения;
В конце программы на C/C++ нет оператора 'return 0';
'return (не 0)' в программе на С/С++;
'halt(не 0)' в программе на паскале;
'System.exit(non-zero)' в программе на Java;
Необработанная исключительная ситуация

в чем ошибка я не могу понять((
Код:
program Project1d;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
a,b,c,x1,x2,x3,x4,t1,d,t2: double;
tf1, tf2: boolean;
i:Integer;
label hh;
Begin
  Reset(input,'bisqr.in');
  Rewrite(Output,'bisqr.out');
a:=4; b:=-13; c:=7; i:=0; tf1:=false; tf2:=false;
read(a,b,c);
if (a=0) and (b=0) and (c=0) then begin Writeln(-1); goto hh; end;
d:=b*b-4*a*c;
if d >= 0 then
begin
t1:=(-b+sqrt(d))/(2*a);
t2:=(-b-sqrt(d))/(2*a);
if t1 >= 0 then
begin
x1:=sqrt(t1); x2:=-x1;
tf1:=true;
i:=i+2;
end;
if t2 >= 0 then
begin
x3:=sqrt(t2); x4:=-x3;
tf2:=true;
i:=i+2;
end;
end
else i:=0;

writeln(i);
if tf1 then writeln(x1:0:6,#10#13,x2:0:6);
if tf2 then writeln(x3:0:6,#10#13,x4:0:6);
hh:
CloseFile(Output);
end.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter