Stránka 1 z 1

Program v C - kvadratická rovnice

Napsal: 05 říj 2012, 18:43
od Velous
Zdravím, mám za úkol napsat program, který bude po zadání čísel "a, b, c" počítat kořeny kvadratické rovnice. Pokud nezadám číslo "a", tak program vypíše: Rovnice je lineární, ale já potřebuji, aby mi ji vypočítal. Poté musím program ošetřit proti tomu, aby když uživatel zadá místo čísel např. písmeno, slovo, tak aby vypsal: Zdejte pouze čísla. Ale netuším jak to udělat. Prosím o pomoc. Děkuji.


Můj kód:

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

int main(void)
{
int xlin, r, i, a, b, c, D;
double x1, x2;




c

scanf("%d", &c);

return 0;
}

Napsal: 05 říj 2012, 20:38
od mtajovsky
Funkce scanf() vrací počet úspěšně zkonvertovaných polí. Takže musí vrátit 1, jinak je to chyba. Jako znak typu bych použil e, f nebo g namísto d, aby to umělo desetinná čísla.

Dále bych projel celé nasnímané pole,a znak po znaku paranoidně kontroloval, jestli je v povolené množině, tj. +, -, desetinná tečka a cifra. Cifra se pozná podle binární hodnoty znaku v rozmezí 0x30 - 0x39. Dál je možno uplatňovat dodatečná pravidla - desetiná tečka smí být jen jednou, po ní už jen cifry a tak dále.

Nerozumím tomuto:

if (a == 0)
{
printf("\n Rovnice je linearni \n");
xlin = ((b + c) == 0);
}

To do xlin vloží buď 0 nebo jako výsledek nesrovnání nebo nenulu (závisí na implementaci překladače).

1) Nemůžete předpokládat, že true se bude konvertovat do (int)1.

2) Pokud bude například b = 2, c = -4, tak xlin má být 2, ale u vás bude výsledek 0.

Napsal: 05 říj 2012, 21:05
od Bernard
Také případ D<0 si zaslouží zvláštní pozornost. Vypočítat (sqrt(-D))/2a a do výstupu k tomu výsledku ještě přilepit imaginární jednotku i.

Napsal: 05 říj 2012, 21:16
od Velous
mtajovsky píše:To do xlin vloží buď 0 nebo jako výsledek nesrovnání nebo nenulu (závisí na implementaci překladače).

1) Nemůžete předpokládat, že true se bude konvertovat do (int)1.

2) Pokud bude například b = 2, c = -4, tak xlin má být 2, ale u vás bude výsledek 0.


A když tam dám:
if (a == 0)
{
printf("\n Rovnice je linearni \n");
xlin = b/c;
}
???


Jak mám přilepit k výsledku imaginární jednotku i? Jinak v C jsem naprostý začátečník.

Napsal: 05 říj 2012, 21:47
od mtajovsky
Tak snad -c/b je OK :)

Imaginární jednotku přilepíte do výstupu stejně jako na papíře. Vypočtete reálnou rex a imaginární imx složku a pak:

printf("%f+%fi\n", rex, imx);
printf("%f-%fi\n", rex, imx);