http://www.mazlo.org - Osobní stránky Jiřího Zamazala  

Výpočet kvadratické rovnice v PHP

V dnešním článku bych ukázal, jak jsem udělal script na výpočet kvadratické rovnice v PHP. Ukázku si můžete prohlédnout zde. Pokud nevíte, co je to diskriminant, tak rovnou skončete se čtením, protože to pro vás bude španělská vesnice ;)
A ještě na úvod by se slušelo říct, že tento příklad jsme ve škole dělali v Pascalu

Tak a teď se můžeme vrhnout do samotného scriptu ;) Nebudu zde popisovat, jak se dělá HTML dokument a podobý věcičky a rovnou skočím na samotné tělo stránky. Jako vstupní brána do scriptu nám samozřejmě poslouží formulář:

<form action="adresa" method="get">
<input type="text" name="a">Proměnná A
//Stejně tak napíšeme i proměnnou B a C
<input type="hidden" name="akce" value="vypocitat">
<input type="submit" value="Vypočítat">
</form>

Rejpalové mi odpustí, že je to napsané v dost jednoduchém HTML a můžeme jít dál :))

<?
if ($_GET["akce"] == "vypocitat"):
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
if ($a=="" or $b=="" or $c==""):
echo "Nebyly zadány všechny proměnné!";
else:

Myslím, že toto je jasné. Pokud je potvrzen formulář, splní se první podmínka a může se dál pokračovat ve scriptu. Další podmínka ověřuje, zda-li byly zadány všechny údaje. K tomu se použil operátor OR

A nyní si musíme rozmyslet samotný výpočet kvadratické rovnice. Nejdříve musíme ošetřit to, aby z rovnice nevznikla lineární rovnice. A pokud vznikne, vypočítá se kořen rovnice:

if ($a == 0):
if ($b == 0):
echo "B se nesní rovnat nule!";
else:
echo -$c/$b;
endif;
else:

Nevíte, kde se vzala podmínka, že se B nesmí rovnat nule? Fakt nevíte? ;) Dělit nulou přeci nejde :D
A nyní potřebujeme vypočítat diskriminant - pokud bude záporný, rovnice nemá řešení, pokud bude nula, výsledek je jen jeden a pokud je kladný, výsledky budou dva:

//výpočet diskriminantu:
$d = $b * $b - (4 * $a * $c);
if ($d < 0):
echo "Rovnice nemá řešení";
else:
if ($d == 0):
echo -$b/(2 * $a);
else:
echo (-$b + sqrt($d))/(2 * $a);
echo (-$b - sqrt($d))/(2 * $a);
endif;
endif;
endif;
endif;
endif;
?>

Samozřejmě že by bylo dobré výstup zformátovat a přidat CSS, aby to bylo trošku k světu ;)

Kategorie: Web a vše kolem něj ≈ 24. 11. 2005 ≈ Počet zobrazení: 12092x

Komentáře

Napsat komentář





;) :-P :-) :D 8-) :-O :( :-X .-)

  • Povinné údaje jsou zvýrazněny tučným písmem!
  • Formátování textu:
  • Povolené typy odkazů (příklady):
    • www.mazlo.org, http://www.mazlo.org či jen http://mazlo.org
    • https://www.t-zones.cz
    • ftp.slackware.cz (není povoleno ftp://ftp....!)
    • Za odkazem dělejte vždy mezeru!
  • Enter znamená nový řádek
  • Po 45 znacích ve slově se vytvoří mezera (vyjma odkazů)
  • RSS export komentářů tohoto článku
T-Fuse [226] -- 24. 11. 2005 18:06:52
Mno... pro hodnoty a,b,c=1,2,3 neni pravda, ze rovnice nema reseni... ona ma totiz dva komplexni koreny ;)
Mazlo [227] -- 24. 11. 2005 18:10:07
Díky za upozornění, ale já jsem teďka ve škole nebyl skoro 14 dní a zrovna nyní prej ve škole začali brát komplexní čísla :D
Podle učebnice jsem si zjistil, co to přibližně je, ale zatím to moc dobře nechápu :D
Webmaster | Kontakt | Reagovat
Timy [228] -- 24. 11. 2005 19:34:57
T-Fuse: "ona ma totiz dva komplexni koreny" -- rovnice nemá v oboru reálných čísel řešení. Takto bych to upravil a je to;-)
pckeeper [229] -- 24. 11. 2005 21:32:41
No hezke, ale zlatej perl :))

#!/usr/bin/perl
# Program pro vypocet Kvadratickych rovnic
# Napsal : Martin Vesely alias Pckeeper
# mail: pckeeper@seznam.cz
print "Hodnota a";
$a=<STDIN>;
print "Hodnota b";
$b=<STDIN>;
print "Hodnota c";
$c=<STDIN>;
$abc=$b*$b-4*($a*$c);
print "D = $abc\n";
if ($abc>=0) {
$x0=(-$b+sqrt($abc));
$x1=$x0/(2*$a);
$x2=(-$b-sqrt($abc));
$x3=$x2/(2*$a);
print "Kvadraticka rovnice ma reseni a koreny jsou X1=$x1 a X2=$x3 :)\n";
}
else {
print "Kvadraticka rovnice nema reseni :(";
}
pckeeper (zavinac) seznam.cz | www | Reagovat
pckeeper [230] -- 24. 11. 2005 21:33:31
Delam si srandu :))
pckeeper (zavinac) seznam.cz | www | Reagovat
Mazlo [231] -- 25. 11. 2005 07:37:35
Ještě včera jsem pak upravil ten script a nahoru jsem napsal "ax^2 + bx + c = 0, výsledek je v oboru reálných čísel" (děkuji T-fusovi za radu :])
pckeeper: hmm, vypadá to hezky :D
Webmaster | Kontakt | Reagovat
peCan [232] -- 25. 11. 2005 08:23:07
nemam rad matiku a komplexni cisla uz vubec ne:-)
Sc@ry [236] -- 28. 11. 2005 23:20:45
peCan: tohle je jeste jednoduchý, mě zas teďkon nebaví analytická geometrie :-P
iamscary (zavinac) seznam.cz | www | IM: 286136060 | Reagovat
MeBa [235] -- 29. 11. 2005 17:42:07
panove, pckeeper i mazlo, prectete si neco o coding style practices! http://www.phpbuilder.com/columns/tim20010101.php3?page=1
Lord AgEnT [240] -- 30. 11. 2005 20:33:34
lol, taky jsme tohle dělali v pascalu. :)

k těm komplexním číslům:
d:=-d;
y1:=(-+sqrt(d))/(2*a);
y2:=(-b-qrt(d))/(2*a); write ln('Koren x1 se rovna hodnote ',y1:3:3,' i');
writeln('Koren x2 se rovna hodnote ',y2:3:3,' i');

prostě tak nějak :)
agent_ (zavinac) centrum.cz | www | IM: 162729221 | Reagovat
Mazlo [262] -- 02. 12. 2005 22:15:46
Lord AgEnT:
Hezký ;)
Ale teď si mi připoměl jednu děsně hnusnou věc :( Za 3 týdny píšeme kompozici z komplexních čísel :(
Webmaster | Kontakt | Reagovat
Lord AgEnT [266] -- 03. 12. 2005 16:02:06
to mě to čeká až příští rok :P
agent_ (zavinac) centrum.cz | www | IM: 162729221 | Reagovat
pckeeper [270] -- 04. 12. 2005 22:39:02
To MeBa ... nechapu pripominku (po letnem preletnuti vaseho odkazu) ...

To co jsem napsal bylo v perlu nikoliv v php :)
pckeeper (zavinac) seznam.cz | www | Reagovat
Littlemaple [554] -- 17. 02. 2006 18:46:54
Není ošetřeno vkládání písmenek místo čísel ;) :]. Při prezentaci tak snadného prográmku je třeba, aby byl více než dokonalý :D
 
 
pckeeper [735] -- 20. 04. 2006 20:13:20
To me ani nenapadlo, ze by tam byl nekdo schopen dat pismenka, nebo jeste lepe nejake specialni znaky :)))
pckeeper (zavinac) seznam.cz | www | Reagovat
Radushka [877] -- 08. 06. 2006 18:22:05
já tomu nerozumím a ještě navíc ztoho píšeme zítra písemku:((
--- | Reagovat
Lukky [1464] -- 26. 04. 2007 11:45:17
V kvadratických rovnicích se B může rovnat nule ;)
 
 
Mazlo [1465] -- 26. 04. 2007 16:41:21
Tak se koukni pořádně, já tu podmínku mám u lineární rovnice a né u kvadratický :-D
Webmaster | Kontakt | Reagovat
majkl [1556] -- 12. 12. 2008 11:05:20
cuz hele potreboval bych od tebe jestli bys mi moh poslat tuhle funkci primo jako soubor pro turbo pascal...ja s tim neane hnout.....mejl je mikelangello@centrum.cz.....predem diky....majkl
mikelangello (zavinac) centrum.cz | Reagovat
Ondra [1610] -- 11. 02. 2010 11:27:36
Hele měl bys to trošku vylepšit, nebere to koeficienty ve tvaru písmenek..;-)
Rejpal [1616] -- 09. 04. 2010 08:00:52
nic proti, ale kvadraticky rovnice je i v pripade ze B se rovna 0, jestli si pamatujes ze skoly tak v tom hnusnym vzorci se je ve jmenovateli 2*A !!! ne 2*B

Navigace

Kategorie

RSSad.cz: Chyba číslo 407 - Nejde načíst cacheRSSad.cz: Chyba číslo 407 - Nejde načíst cache

© 2005 - 2006 Jiří Zamazal alias Mazlo | Web pohání MRSS 1.0 | XHTML 1.0 Strict | Valid CSS | RSS: články / komentáře |