Kvadratická rovnice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kvadratická rovnice – C / C++ – Fórum – Programujte.comKvadratická rovnice – C / C++ – Fórum – Programujte.com

 

Patrik Hlobil
~ Anonymní uživatel
3 příspěvky
9. 2. 2015   #1
-
0
-

Ahoj, s programováním teprve začínám, proto bych byl moc rád kdyby mi někdo doladil program na výpočet kořenů kvadratické rovnice.

#include <stdio.h>
#include <math.h>

int main(void) 
{ 
double x1, x2, x, xlin, r, i, a, b, c; 
printf("\nVypocet korenu kvadraticke rovnice - ax^2+bx+x=0"); 
printf("\nZadej cleny kvadraticke rovnice a,b,c:"); 
while(scanf("%lf %lf %lf", &a, &b, &c) !=3) 
{ 
printf("zadej cisla!\n"); 
fflush(stdin);

    } 
printf("n\%.0lfx^2+%.0lfx+%.0lf=0",a,b,c); 
if(a==0) 
{ 
printf("\nRovnice neni kvdaraticka: \n"); 
xlin=-(c/b); 
printf("x = %lf\n",xlin); return 0;
 } 
double D; 
D=(pow(b,2)-(4*a*c)); 
int A= (1* (D==0)) + (2* (D>0)) + (4 * (D<0)); 
switch(A)
{ 
case 1: 
printf("\nRovnice ma jeden koren\n"); 
x=(-b+sqrt(D))/(2*a); 
printf("x=%lf\n",x); 
break; 
case 2: 
printf("\nRovnice ma dva realne koreny: \n"); 
x1=(-b+sqrt(D))/(2*a); x2=(-b-sqrt(D))/(2*a); 
printf("x1=%lf\n",x1); printf("x2=%lf\n",x2); 
break; 
case 3: 
printf("\nRovnice ma dve komplexni reseni \n"); r=-b/ (2*a); 
i=sqrt (fabs(D))/ (2*a); 
printf("\nf1=%.2lf + %.2lf*i",r,i); 
printf("\nf2=%.2lf - %.2lf*i\n\n",r,i); 
break;
} 
return 0;
}

Při spuštění zadám čísla, vypíše se rovnice a tím to končí. Šlo by to možná napsat i jednodušším způsobem, potřeboval bych to ale takhle. Předem děkuji.

Nahlásit jako SPAM
IP: 77.48.31.–
9. 2. 2015   #2
-
0
-

je otázka, jak se vyhodnotí 

int A= (1* (D==0)) + (2* (D>0)) + (4 * (D<0)); 

Když je nějaký výraz true, nemusí to být nutně int hodnota 1. Jednodušší by bylo použití několika if. Druhá věc je porovnávání float a / nebo double čísel. Rovnost je tak trochu problematická - číslo nelze uložit absolutně přesně. Za rovná čísla se prohlásí čísla která se od sebe liší o méně než je stanovená odchylka.

hu

Edit: komplexní kořeny program neurčí, protože (4 * (D<0)) a ve switch máš case 3

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e50d:3a...–
9. 2. 2015   #3
-
0
-

   

double a, b;
double odch = 1e-5;  //odchylka by mela byt co nejmensi, ale dostatecne velka aby zachytila rovnost

if ( ((a - odch) < b) && (b < (a + odch)) )  {
  //povazuje se za a == b
}
else  {
//povazuje se za a != b
}

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e50d:3a...–
Patrik Hlobil
~ Anonymní uživatel
3 příspěvky
9. 2. 2015   #4
-
0
-

#2 hlucheucho
Aha, děkuji, to byla ta chyba.

Nahlásit jako SPAM
IP: 77.48.31.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 78 hostů

Podobná vlákna

Kvadratická rovnice — založil Kolis

Kvadraticka rovnice — založil Yurda

Kvadratická rovnice — založil rdckONE

Kvadraticka rovnice — založil Hanmir1

Kvadratická rovnice — založil Kaalc

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý