Ohjelmointi (Pascal) Harjoitus 5, 14.-18.10. (monisteen sivut 1 - n.28) 5.1 Kirjoita if-lause seuraaviin tehtäviin: a) jos abc on positiivinen, se muutetaan negatiiviseksi b) on annettava ilmoitus onko ccc:n arvo numeromerkki c) jos real-muuttuja aaa on nollasta eroava se saa uudeksi arvokseen 1/aaa d) on annettava ilmoitus, onko ddd arvo välillä -123 - 321 vai onko arvo pienempi kuin -124 tai suurempi kuin 321. 5.2 a) Kuvitellaan ettei Pascalissa ole funktioita abs ja odd. Tee sellaiset itse. Miten ne eroavat samannimisistä valmiista funktioista? b) Laadi reaaliarvoille funktiot Min ja Max, jotka palauttavat arvonaan kahdesta parametristaan pienemmän/suuremman. 5.3 Tee totuusarvoinen funktio Vokaali, jonka arvo on true, jos parametrina annettu merkki on vokaali, pieni tai suuri. Hyväksy kaikki skandinaaviset vokaalit. Harkitse kannattaako funktion toteuksessa käyttää case-lausetta, if-lausetta ja yhtäsuuruus- vertailuja vai if-lausetta ja joukkoonkuulumisvertailuja. Perustele valintasi. 5.4 a) Syöttöjonossa on 100 kokonaislukua. Kirjoita Pascal-lauseet, jotka selvittävät, moniko syöttöluku pienempi kuin jonon ensimmäinen luku. b) Syöttöjonossa on 100 kokonaislukua. Kirjoita Pascal-lauseet, jotka selvittävät, ovatko luvut laskevassa suuruusjärjestyksessä. 5.5 Kirjoita lauseet, jotka laskevat syöttölukujen summan ja keskiarvon kun a) tiedetään, että lukuja on täsmälleen 35, b) ensimmäinen syöttöluku ilmaisee muiden syöttölukujen lukumäärän (eikä tuota ensimmäistä lasketa 'varsinaiseksi' syöttöluvuksi), c) lukujen määrää ei ennalta tiedetä vaan se ilmaistaan luvulla -9999, joka sijoitetaan viimeisen varsinaisen syöttöluvun jälkeen (tuota lukua, loppumerkkiä, ei saa laskea mukaan summaan, se ei myöskään voi esiintyä 'varsinaisten' syöttölukujen joukossa, so. ensimmäinen vastaantuleva -9999 päättää syöttöjonon). Varaudu b)- ja c)-kohdassa myös siihen, ettei varsinaisia syöttölukuja ole yhtään! Mitä etuja ja haittoja näillä kolmella tavalla on? 5.6 Kuvitellaan ettei Pascalissa ole div- ja mod-operaatioita eikä edes reaalilukuja. Laadi funktio a) div(jaettava,jakaja:integer):integer, jonka arvona on kokonaisjaon tulos, b) mod(jaettava,jakaja:integer):integer, jonka arvona on jäännösjaon tulos. Vihje: Jakolasku on oikeastaan monikertaista vähennyslaskua, sen selvittämistä "montako kertaa jakaja menee jaettavaan". c) Onko tehtävä helpommin ratkaistavissa, jos reaaliluvut ovat käytettävissä?