Ohjelmointi (Pascal) Harjoitus 7, 28.10.-1.11. (monisteen sivut 1 - n.40) (Oh! Pascal! sivut 2 - n. 350, ei lukuja 4-2 ja 5-2, 8-2, 9-2, 10 vain kursorisesti, ei sivuja 237-239, 244-245) 7.1 Laadi ei-rekursiivinen versio luennolla esitetystä funktiosta Fibonacci(N: integer):integer; Testaa Turbo-Pascalilla miten paljon aikaa vie vaikkapa 10000 tai 100000 kutsukertaa luku := Fibonacci(6) rekursiivisella ja ei-rekursiivisella versiolla. Voit ottaa ajan ihan vain kellolla. Aseta kutsukertojen määrä sellaiseksi, että voit havaita eron. 7.2 Ohjelmassa on määritelty: type luvut = (yy, kaa, koo, nee, vii); var d : luvut; : : d := nee; : : Mitkä seuraavista ovat kevollisia lausekkeita, mitkä eivät? Miksi? Mikä on kunkin kelvollisen arvo? succ(koo), ord(kaa), ord(luvut), pred(d), succ(pred(yy)), ord(pred(d)), pred(ord(d)), pred(nee-1), ord(nee)-1, succ(false), succ(3), ord(3), succ(ord(nee)+1), pred(ord(koo)+ord(succ(d))) 7.3 Määrittele tyyppi ja esittele muuttuja: vuodenajalle, maitotuotteille, harrastuksille ja hyville harrastuksille (osavälinä), Ohjelmointi(Pascal)-kurssin kokonaispistemäärälle, harjoituslisäpisteille, ulkoilman lämpötilalle, vuosiluvulle, kuukaudenpäiville, auton nopeudelle, alkuaineen sulamispisteelle. 7.4 Määrittele tyyppi väreille ja pääväreille (osavälinä). Tee funktio Sekoita, joka saa parametrina kaksi päävärityyppistä arvoa ja palauttaa arvonaan parametrien sekoittamisesta syntyvän värin. Sekoitussääntöjähän on periaatteessa kahdenlaisia: lisääviä ja vähentäviä. Myös päävärit voidaan valita eri tavoin. Jos et tunne sekoitussääntöjä saat keksiä ne itse. 7.5 Ohjelmassa on mm. määrittelyt: type taulukko = array [1..40] of integer; : : var A : taulukko; Kirjoita lauseet, jotka a) lukevat 40 syöttölukua A:n alkioiden arvoksi, b) laskevat moneenko kertaan luku 7 esiintyy taulukossa, c) etsivät ja tulostavat A:n suurimman alkion ja sen indeksin (jos suurin ei ole yksikäsitteinen, tulostetaan indeksiltään pienin), d) tutkivat, moniko A:n alkio on pienempi kuin alkion indeksi. 7.6 Ohjelmassa on mm. määrittelyt type matriisi = array[1..10, 1..10] of integer; : : var M : matriisi; Kirjoita lauseet, jotka a) sijoittavat M:n jokaisen alkion arvoksi vastaavien indeksien tulon eli laatii kertotaulun, b) selvittävät ja tulostavat, moniko M:n alkio on jaollinen luvulla 7, c) tulostavat M:n lävistäjällä olevat arvot (s.o. ne joiden indeksit ovat yhtä suuret), d) tulostavat koko matriisin M "matriisin muotoisesti" (10x10 lukuneliönä).