Molim nekoga da napise program za rjesavanje kvadratne jednadzbe koji u slucaju da je diskriminanta negativna ispisuje kompleksna rjesenja. Hvala.
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Ne vidim gdje je problem osim u maloj modifikaciji ispisa.
Ako je diskriminanta negativna, onda ćemo imati 2 komplexna rješenja:
-b/2a + korijen(-D)/2a i
-b/2a - korijen(-D)/2a i
a kao je pozitivna rješenja bi bila
-b/2a + korijen(D)/2a
-b/2a - korijen(D)/2a
(primjeti, isto ko i gore, samo nema ovog i)
Tako da jedino što trebaš promijeniti je kako ćeš ispisati rješenja u prvom slučaju
google is your friend
prvo si pitanje prevedeš na engleski i dobiš upit tipa: c++ quadratic equation
uglavnom, pogledaj ovdje http://jblanco_60.tripod.com/c_pp_quadratic.html
Neće... Stalno izbacuje greske... Sto je tu krivo:
#include<stdio.h>
#include<math.h>
int main(void)
{
float a, b, c, d, x1, x2;
printf("Unesite kvadratni koeficijent (a): ");
scanf("%f",&a);
printf("Unesite linearni koeficijent (b): ");
scanf("%f",&b);
printf("Unesite slobodni koeficijent (c): ");
scanf("%f",&c);
d=sqrt(b*b-4*a*c);
if(d>=0) {
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("\nRjesenja zadane jednadzbe su: x1=%f i x2=%f \n \n",x1,x2);
}
if(d<0) {
d=sqrt((b*b-4*a*c)*(-1)) i;
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("\nRjesenja zadane jednadzbe su: x1=%f i x2=%f \n \n",x1,x2);
}
return 0;
}
Inace, idem u drugi razred srednje skole. Ucim ovo gradivo (c++) tek jedan - jedan i pol mjesec...
google is your friend
prvo si pitanje prevedeš na engleski i dobiš upit tipa: c++ quadratic equation
uglavnom, pogledaj ovdje http://jblanco_60.tripod.com/c_pp_quadratic.html
Hvala, ali ne zasad. Valjda postoji neki jednostavniji nacin...
Greška je što računaš korijen iz diskriminante bez da znaš kakvog je ona predznaka. Korijen nije definiran za negativne brojeve, i tu se desi greška.
Ja bih ovako:
D=b2-4ac
if ( D>=0 )
x1=(-b+sqrt(D) )/(2*a);
x2=(-b-sqrt(D) )/(2*a);
printf( ... )
else
realni_dio = (-b/(2*a) )
imaginarni_dio = sqrt(-D)/(2*a);
printf("x1 = %g + %g i", realni_dio, imaginarni_dio);
printf("x2 = %g + %g i", realni_dio, -imaginarni_dio);
pišem bez zagrada i ostalog da bolje skužiš. Dakle korijen računam tek kad znam predznak i prema obliku rješenja modoficiram ispis
btw ovo nije C++, radiš u čistom C-u. A problem je matematički, ne programerski.
A imaginarna jedinica ( i ) ne postoji u nijednom programskom jeziku (koliko ja znam), zato ju moramo umjetno stvorit :D
Nisam probao, ali mislim da ce raditi.
BTW, pise Microsoft Visual C++. Ja znam matematiku, pitajte Horagia. Samo je problem to pretociti u program... :D
Nek je taj program u kojem pišeš, ali to kaj pišeš nije C++ nego C ;-)
C++ bi bio da koristiš jedno od ovoga:
enkapsulacija,
skrivanje podataka,
nasljeđivanje,
polimorfizam.
Pošto su to značajke OOP-a, a C++ je zamišljen kao OO jezik (točnije, OO nadogradnja C-a). Ako ne koristiš ništa od toga, već radiš s proceduralno strukturiranim modelom, to je C.
Nego, kao što je Luuka rekao, prvo provjeri predznak, onda s obzirom na njega računaj. Ako je negativan samo modificiraš ispis (dodaš imaginarni dio), ako je pozitivan onda normalno ispišeš.
C++ bi bio da koristiš jedno od ovoga:
enkapsulacija,
skrivanje podataka,
nasljeđivanje,
polimorfizam.
Pošto su to značajke OOP-a, a C++ je zamišljen kao OO jezik (točnije, OO nadogradnja C-a). Ako ne koristiš ništa od toga, već radiš s proceduralno strukturiranim modelom, to je C.
To nije bas tocno. Vec kad koristis iostream, koristis C++. Vec kad koristis operatore new i delete, koristis C++. Vec kad koristis bool, koristis C++. Vjerojatno ima jos nekih stvari.
Takodjer, C++ nije zamisljen kao OO jezik, nego je zamisljen kao jezik koji omogucava programiranje u obje paradigme, pa da si programer moze izabrati koju ce koristiti.
Jep jep, istina, također i kad cin i cout koristiš, kužim te ofc :). Ja sam više htio istaknuti OO dio C++-a. Hm, ja sam oduvijek bio u uvjerenju da je C++ nastao kao OO nadogradnja C-u, tj. da se C-u doda taj dio koji mu nedostaje, a ne zato da si možeš izabrati hoćeš OOP ili proceduralno...
Što sad da ti čovjek kaže na ovo... Da, C++ je nastao kao OO nadogradnja C-u, dakle dodao mu je taj dio koji mu nedostaje. A ne da je promijenio C u totalno OO jezik, kao što je recimo Java, gdje su sve objekti. U C++-u ti možeš kombinirati obje paradigme - možeš pola programa napisati proceduralno, pola OOP. C++ je pokušao zadržati što je moguće veću kompatibilnost s C-om, tako da se postojeći programi napisani u C-u mogu bez izmjena ili uz male izmjene kompajlirati u njemu, što je korisno programerima koji su iskusni u C-u, dok friškim programerima omogućava da iskoriste OO paradigmu.
A, pa to sve znam, malo si me zbunio s onim, "da si čovjek može odabrati kak hoće pisati", mislim, ako hoćeš proceduralno možeš i u C-u bez problema, ne treba ti C++ za to.
A, pa to sve znam, malo si me zbunio s onim, "da si čovjek može odabrati kak hoće pisati", mislim, ako hoćeš proceduralno možeš i u C-u bez problema, ne treba ti C++ za to.
To si sad napisao kao da treba posebno nabavljati C++ kompajler, ili kao da i inače ljudi ne programiraju u C++ razvojnim alatima. Zašto ne bi koristio C++ razvojni alat/kompajler, pa ako ti zatreba neka osobina C++ jezika koju C nema, jednostavno - radiš kao i do tada? Mislim... Visual C++, Borland C++Builer ili pak za akademsku zajednicu obavezan DevC++ (za one koji nemaju licence za VC++) - sve su to C++-i. Zašto ne bi iskoristio ono što već imaš?
You got me there ;). A istina, malo sam se nespretno izrazio.
Danas sam uspio napraviti ciljani program... Pa ako ce trebati nekome:
#include<stdio.h>
#include<math.h>
int main(void)
{
float a, b, c, d, x1, x2;
printf("Unesite kvadratni koeficijent (a): ");
scanf("%f",&a);
printf("Unesite linearni koeficijent (b): ");
scanf("%f",&b);
printf("Unesite slobodni koeficijent (c): ");
scanf("%f",&c);
d=b*b-4*a*c;
if(d>=0) {
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("\nRjesenja zadane jednadzbe su: x1=%f i x2=%f \n \n",x1,x2);
}
if(d<0) {
float m, n;
m=-b/2*a;
n=sqrt(d*(-1))/2*a;
printf("\nRjesenja zadane jednadzbe su: x1=%f+%fi i x2=%f-%fi \n \n",m,n,m,n);
}
return 0;
}
Hvala svima na pomoci.
Sad kad si napravio program koji radi probaj se malo igrat sa ispisom :D
npr kad je d==0 onda će postojat jedno dvojstruko rješenje, pa bi to mogao biti poseban slučaj.
kod slučaja d<0 ružno je ispisati 0+ -1i, puno bi ljepše bilo ispisati samo -i.
pa recimo ako se unese a=0, onda je bezveze rješavati kvadratnu jednadžbu kad se radi o običnoj linearnoj koja ima jedno rješenje.
I slično :D Ako imaš volje, to bi bio idući korak prema putu ka skroz funkcionalnom programu :D