ďťż

Ładny brzuch

Mam problem. Pisze program w C majacy liczyc równania kwadratowe za pomoca delty. Kompiluje to na linuxie (gcc). Wszystko ładnie sie odpala, czyta dane,ale potem nic nie wypisuje, po prostu chyba przerywa program. Prosze powiedźcie co tu jest źle, bo ja juz nie wiem:

#include <stdio.h> #include <math.h> main() {    int a,b,c;    printf("Program rozwiązuje równania kwadratowe:\n");    printf("ax^2+bx+c=0\n\n");    printf("Podaj wartość a:\n");    scanf("%d",&a);    printf("Podaj wartość b:\n");    scanf("%d",&b);    printf("Podaj wartość c:\n");    scanf("%d",&c);        float delta=(b*b)-(4*a*c);            float x1,x2;    if (delta>0)    {        x1=(-b+sqrt(delta))/(2*a);        x2=(-b-sqrt(delta))/(2*a);        printf("Równanie ma dwa rozwiązania: %f i %f\n",&x1,&x2);    }    if (delta=0)    {        x1=-(b/(2*a));        printf("Równanie ma jedno rozwiązanie: %f\n",&x1);    }    if (delta<0)    {        printf("Równanie sprzeczne, zbiór rozwiązań pusty\n");    } }



Może program działa poprawnie, tylko nie ma możliwości zobaczenia wyników?

poprawny kod:
#include <stdio.h> #include <math.h> main() {   int a,b,c;   printf("Program rozwiązuje równania kwadratowe:\n");   printf("ax^2+bx+c=0\n\n");   printf("Podaj wartość a:\n");   scanf("%d",&a);   printf("Podaj wartość b:\n");   scanf("%d",&b);   printf("Podaj wartość c:\n");   scanf("%d",&c);     float delta=(b*b)-(4*a*c);       float x1,x2;   if (delta>0)   {       x1=(-b+sqrt(delta))/(2*a);       x2=(-b-sqrt(delta))/(2*a);       printf("Równanie ma dwa rozwiązania: %f i %f\n",&x1,&x2);   }   if (delta==0)   {       x1=-(b/(2*a));       printf("Równanie ma jedno rozwiązanie: %f\n",&x1);   }   if (delta<0)   {       printf("Równanie sprzeczne, zbiór rozwiązań pusty\n");   } getchar(); }

błędy były dwa:
1. Program znika automatycznie(to mniej straszny błąd
2. straszniejszy błąd, mianowicie w kodzie
 if (delta=0)   {       x1=-(b/(2*a));       printf("Równanie ma jedno rozwiązanie: %f\n",&x1);   }
dałeś w if = (czyli przypisanie) a powinno być == (porównanie)
Użytkownik comp123 edytował ten post 18 grudzień 2005, 20:50
Ten "poprawny" kod jest pod linuksem "antypoprawny". Tam nie ma conio.h

Edit: Zamiast getch(); wpisz getchar();
Użytkownik Catz edytował ten post 18 grudzień 2005, 20:48


do Catz: nie pracuje w gcc, ale jeśli tak to wystarczy poprawić błąd 2., czyli == zamiast = w IFie

Ok ok :) jak się zmieni przypisanie na porównanie oraz argumentami funkcji printf nie będą adresy zmiennych (&x1) tylko zmienne (x1), to powinno działać.
Co do getcharów, to w moim Dev-Cpp trzeba wpisać nawet dwa :> Jakby było getch() to by wystarczyło jedno, ale tak już działa bufor klawiatury z funkcjami w C.


       printf("Równanie ma dwa rozwiązania: %f i %f\n",&x1,&x2);

Dzięki wam wszystkim bardzo, poprawilem to wyrażenie porównania (zamiast == było =, cóż nawyki z pascala zostają) i wywałiłem znaki & sprzed x1,x2 przy printf, teraz juz wszystko ładnie działa,dzięki bardzo!

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •