Ohjelmointi (Pascal) Harjoitus 8, 4.-8.11. (monisteen sivut 1 - n.43) (Oh! Pascal! sivut 2 - n. 381, myös 4-2, ei lukuja 5-2, 8-2, 9-2, 11-3, 10 vain kursorisesti, ei sivuja 237-239, 244-245) 8.1 Tee ohjelma, joka selvittää kokonaislukusyötteidensä jakauman nollan ja kahdenkymmenen välillä. Ensimmäinen syöttöluku joka on nollaa pienempi tai kahtakymmentä suurempi päättää syöttöjonon. Ohjelma siis laskee nollan ja kahdenkymmenen välillä olevien lukujen lukumäärän - kunkin erikseen - ja tulostaa kunkin luvun esiintymislukumäärän. Saat olettaa, että syötteet ovat kok.lukuja. Vihje: Käytä taulukon alkioita lukumäärälaskureina ja oikeankokoisiksi todettuja syöttölukuja taulukon indekseinä. 8.2 Ohjelmassa on mm. määrittelyt: const pituus = 80; leveys = 14; type vali1 = 1..pituus; vali2 = 1..leveys; vari = (sini, puna, kelta, viher); tauluA = array [vali2] of vali1; tauluB = array [vali1, vali2] of vari; var A, X : tauluA; B, Y : tauluB; a) Tee proseduuri Tayta, joka lukee tauluA-tyyppisen parametrinsa jokaiselle alkiolle arvon. Saat olettaa - taas kerran epärealis- tisesti - että syöttötiedot todella ovat kokonaislukuja. Tarkista kuitenkin, että arvot ovat sellaisia, joita taulukkoon voi tallettaa. b) Tee proseduuri Jarjesta, joka järjestää tauluA-tyyppisen paramet- rinsa laskevaan suuruusjärjestykseen. c) Kirjoita funktio YleisinVari, jonka arvona on yleisin väri parametrina annettavassa tauluB-tyyppisessä taulukossa. Saat olettaa, että todellisena parametrina annettavan taulukon jokaisella alkiolla on jokin arvo. 8.3 & 8.4 Tee varastokirjanpito-ohjelma varastoon, jossa säilytetään 100 erilaista tuotetta. Tietorakenne on nyt 100-alkioinen taulukko. Taulukon indeksit ovat tuotteiden koodinumeroita, alkioiden arvot tuotteiden määriä. Sallitut koodinumerot ovat välillä 1000 - 1099. Ohjelma lukee ja toteuttaa joukon komentorivejä, jotka kaikki alkavat yksikirjaimisella komennolla. Komennot ovat: V "vie varastoon", komentorivillä on lisäksi tuotteen numero ja vietävä määrä, O "ota varastosta", rivillä on myös tuotteen numero ja otettava määrä (jos varastossa ei ole pyydettyä määrää, annetaan mitä voidaan ja ilmoite taan tuotteen loppumisesta), T "tulosta varastotilanne" (luettelo kaikista tuotteista), L "lopeta" Ohjelmassa on varauduttava virheellisiin komentokirjaimiin ja tuotenumeroihin; niistä on annettava virheilmoitus, mutta ohjelman suorituksen on jatkuttava. Tämä tehtävä on syytä tehdä ja ymmärtää! Laajenna tehtävän 6.3 ratkaisua. KÄYTÄ UUTISRYHMÄSSÄ JA WWW- SIVULLA ANNETTUA RATKAISUA LÄHTÖKOHTANA. 8.5 & 8.6 a) Ohjelmassa on määritelty mm.: type rivi = packed array[1..60] of char; jono = packed array[1..4] of char; var r : rivi; j : jono; Tee proseduuri StringMatch, joka selvittää, moneenko kertaan jono-tyyppinen merkkijonoparametri esiintyy rivi-tyyppisessä merkkijonoparametrissa. Proseduuri palauttaa kolmannella parametrillaan esiintymiskertojen lukumäärän. Jos esim. r = '821493apuapuapua7987987apua987apua8765435439876543098654328' ja j = 'apua', kutsun StringMatch(r, j, lkm) seurauksena lkm = 5. b) Sama kuin edellinen tehtävä, mutta käytetään Turbo-Pascalin string-tyyppiä: type rivi = string[60]; jono = string[10]; c) Sama kuin edellinen tehtävä, mutta käytetään Sparc-Pascalin varying of char -tyyppiä: type rivi = varying [60] of char; jono = varying [10] of char; Mitä etua laajennuksista on?