Równanie kwadratowe.

0

Miałem napisać prosty program który wylicza pierwiastki z równania kwadratowego. Napisałem taki kod:

#include<stdio.h>
#include<stdlib.h>
int rkwad(double a, double b, double c,double *x1, double *x2)
{
    double Delta;
    if(a==0){
    return(-1);
    }
    Delta=b*b-4.0*a*c;
    if(Delta<0)
    return(0);
    else
    if(Delta==0)
    {
    *x1=((-b)/2.0*a);
    *x2=*x1;
    return(1);
    }
    else
    if(Delta>0){
    *x1=((-b)-sqrt(Delta))/(2.0*a);
    *x2=((-b)+sqrt(Delta))/(2.0*a);
    return(2);
    }
}
int main()
{
  double a,b,c;
  double *d,*e;
  printf("Podaj a, b, c: \n");
  scanf("%lf %lf %lf",&a,&b,&c);
  printf("\n");
  if(rkwad(a,b,c,d,e)==-1){
                             printf("a nie moze sie rownac 0!\n");
                             }
  else
  if(rkwad(a,b,c,d,e)==0){
                            printf("Delta jest mniejsza od zera. Rownanie nie ma rozwiazan.\n");
                            }
  else
  if(rkwad(a,b,c,d,e)==1){
                            printf("Delta rowna 0. Rownanie ma takie rozwiazanie: x1=%lf i x2=%lf\n",d,e);
                            }
                            else
                            if(rkwad(a,b,c,d,e)==2){
                                                      printf("Delta wieksza od zera. Rownanie ma takie rozwiazania: x1=%lf i x2=%lf",d,e);
                                                      }
                                                      system("PAUSE");
                                                      return 0;
                                                      }

Ale niestety od warunku gdy delta jest równa zero program zawiesza się. W którym momencie zrobiłem błąd?

0

A pamięć na te zmienne sama się zaalokowała?
Stworzyłeś wskaźniki, ale one nie pokazują na nic. A potem do tego "nic" chcesz cos wpisać. Brawo.

0

Wydaję mi się, że raczej chciał zwracać pierwiastki przez referencję i powinien o tym trochę poczytać.

0

printf("Delta jest mniejsza od zera. Rownanie nie ma rozwiazan.\n");
oj wierz mi, ze ma...
poczytaj o pierwiastkach zespolonych rownania kwadratowego...

0

pizdak: Wiem co to zespolone:) Mam algebrę na studiach, ale program ma liczyć pierwiastki rzeczywiste:)

Poczytałem trochę o tych wskaźnikach i już program działa:) Dzięki

0

Ja natomiast mam inny problem. Napisałem program do liczenia równań kwadratowych natomiast nie potrafię wykonać kilku rzeczy do tego programu.
Oto kod:

"unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TFormularz = class(TForm)
Naglowek1: TLabel;
Naglowek2: TLabel;
Naglowek3: TLabel;
Ed_a: TEdit;
Ed_b: TEdit;
Ed_c: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Przelicz: TButton;
Wynik: TLabel;
Koniec: TButton;
procedure PrzeliczClick(Sender: TObject);
procedure KoniecClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;
var
Formularz: TFormularz;

implementation

{$R *.dfm}

procedure TFormularz.PrzeliczClick(Sender: TObject);
var delta,x,a,b,c : Extended;
kod : Integer;
liczba : String;
begin

wynik.Caption:='';
a:=StrToFloat(ed_a.text);
b:=StrToFloat(ed_b.text);
c:=StrToFloat(ed_c.text);
delta:=bb-4a*c;
if delta<0 then wynik.Caption:='Brak rozwiązań rzeczywistych'
else if delta=0 then
Begin
x:=-b/2/a;
Str(x4,liczba);
Wynik.Caption:='Pierwiastek podwójny: x0 = '+liczba
End
else
Begin
x:=(-b-sqrt(delta))/2/a;
Str(x4,liczba);
Wynik.Caption:='x1 = '+liczba;
x:=(-b+sqrt(delta))/2/a;
Str(x4,liczba);
Wynik.Caption:=Wynik.Caption+' x2 = '+liczba
End

end;

procedure TFormularz.KoniecClick(Sender: TObject);
begin
close
end;

END."

Nie potrafię wprowadzić takich zmian:
w przypadku a=0 wyświetlenie informacji ze jest to równanie liniowe
zablokowac program przed wprowadzaniem danych nie będących liczbami.
Uaktywnic enter do przechodzenia pomiędzy komponentami Edit (po każdym przejściu powinien być zaktualizowany wynik)

Jestem nowicjuszem w pascalu. Czy ktoś mógłby uwzględnić te zmiany i nanieść je do mojego kodu ?
Z góry dzięki.

0

if a=0 then

1 użytkowników online, w tym zalogowanych: 0, gości: 1