Oppimateriaalin copyright © 2011 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

Imperatiivinen, funktionaalinen ja looginen ohjelmoija ratkomassa ongelmaa

(Muutettu viimeksi 8.3.2011)

Miten imperatiivinen, funktionaalinen ja looginen ohjelmoija ratkaisevat ongelman löytää kahden luonnollisen luvun suurin yhteinen tekijä [Scottin luvun 10.1 esimerkkiä mukaillen]:

Imperatiivinen ohjelmoija:
Laskeaksesi a:n ja b:n s.y.t:n tarkista ovatko luvut samat. Jos ovat, vastaus on tämä luku. Jos luvut eivät ole samat, korvaa suurempi luvuista a ja b lukujen erotuksen itseisarvolla ja aloita alusta.
Esim:

a = 9, b = 27, eivät samat, siis b := b-a;
a = 9, b = 18, eivät samat, siis b := b-a;
a = 9, b = 9, samat, BINGO!

Funktionaalinen ohjelmoija:
Lukujen a ja b s.y.t. on a, jos luvut ovat samat. Elleivät ne ole samat, kutsutaan pienempää luvuista a ja b nimellä c. Lukujen a ja b erotuksen itseisarvo olkoon d. Sovella tätä samaa sääntöä c:n ja d:n s.y.t:in laskentaan, niis saat alkuperäisten lukukujen s.y.t:in.
Esim:

a  = 9, b = 27, eivät samat, siis c = 9 ja d = 18
      c  = 9, d = 18, eivät samat, siis c' = 9 ja d' = 9
            c' = 9, d' = 9, ovat samat, BINGO!

Logiikkaohjelmoija:
Väittämä syt(a, b, g) on tosi, jos (1) a, b ja g ovat kaikki samoja tai (2) on olemassa luvut c ja d siten, että c on a:n ja b:n minimi, d on a:n ja b:n erotuksen itseisarvo, ja syt(c, d, g) on tosi. Laskeaksesi annettujen lukujen s.y.t:in etsi sellainen luku g ja joukko lukuja c ja d, joiden avulla annetuista säännöistä voidaan päätellä, että syt(a, b, g) on tosi.
Esim:

syt(9, 27, 9) on tosi, koska säännön (2) takia
syt(9, 18, 9) on tosi, koska säännön (1) takia
syt(9, 9, 9)  on tosi, BINGO!


Takaisin sisältösivulle.