Matematické Fórum

Archiv diskusního fóra o matematice, 2006–2026

Toto je archiv Matematického Fóra. Fórum je dostupné jen ke čtení. Můžete se ale zaregistrovat na náš Discord server.

#1 17. 10. 2007 22:16

Lukee
Administrátor
Místo: Opava
Příspěvky: 1867
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Výpočet kořenů kvadratické funkce — třetí cvičení

Tady je kód ze třetího cvičení pro výpočet kořenů kvadratické funkce. Je to i s lehkým popisem:

Jako první jsem deklaroval proceduru dvakoreny, která na obrazovku vypíše jeden kořen a pak normálně vrátí druhý kořen. Přijímá čtyři argumenty - a, b, c a diskriminant, který si sice můžeme počítat, ale na co, když už ho budeme počítat jinde. V těle téhle procedury je další procedura, konkrétně koren, která počítá samotný kořen. Bude popsána v dalším bloku.

 


Teď tu máme slibovanou proceduru koren. Ta bere celkem pět argumentů — a, b, c, operator a diskriminant. Operátor bude buď '+' anebo '–', tedy jestli přičítáme nebo odečítáme diskriminant (to je to ± ve vzorci pro výpočet kořenů kvadratické rovnice). Všimněte si tedy především posledního řádku, kde se za operator dosadí právě buď '+' anebo '–' a bude to počítat jak má. Samozřejmě můžeme předat i něco jiného, třeba násobení *, ale pak to bude počítat nesmysly.

 


A teď hlavní část programu. Zde využijeme dvou lambd, přičemž tu druhou okamžitě aplikujeme a navážeme na argument diskriminant výraz (- (* b b) (* 4 a c)) (poslední řádek procedury). V tuto chvíli máme na symbolu diskriminant navázáný vypočítaný diskriminant a můžeme s ním normálně pracovat, nemusíme ho počítat stále znova a znova (samozřejmě to jde líp, pomocí let výrazu, ale to ještě není většině v tuto chvíli oficiálně známo :-)). Zbytek dovysvětlím v komentářích:

span style="color: #808080; font-style: italic;">;; Jestliže je diskriminant záporný, vrátíme false, rovnice nemá v R řešení
     #f
     ;; Tady je vnořený if — jestliže není předchozí podmínka pradivá, provede se další if.
     ;; Je to proto, že mohou nastat celkem tři různé možnosti — diskriminant je kladný, záporný nebo nulový.
;; Když bude diskriminant nulový, má rovnice jeden dvojnásobný kořen
;; Zavoláme proceduru kořen, která nám vrátí jeden kořen
;; Jestliže je diskriminant různý od nuly,
       )                              ;; zavoláme proceduru dvakoreny, která už byla popsána
   )) (- (* b b) (* 4 a c)))))


Jo ještě bacha na to, že až to budete zkoušet a rovnice bude mít dva reálné kořeny, Scheme je vypíše hned vedle sebe, takže to vypadá jako jedno číslo, ale jsou to dvě čísla :-). Příklad:

 

Vypíše: –31 (a myslí tím –3 a 1)


2+2=4

Offline

 

#2 23. 01. 2008 03:06

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Výpočet kořenů kvadratické funkce — třetí cvičení

Pokud by někomu pomohl Haskellovský zápis téhož:

koren s a b d= (s (-b) (sqrt d))/(2*a)

koreny a b c = koreny' a b (b^2-4*a*c) where
               koreny' a b 0 = [-b/(2*a)]
               koreny' a b d = if d>0 then [koren (+) a b d, koren (-) a b d] else []


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

Archiv Matematického Fóra · stav k 30. 8. 2026 · 633 258 příspěvků v 108 818 tématech