Ohjelmointi (Pascal) Harjoitus 9, 11.-15.11. (monisteen sivut 1 - n.46) (Oh! Pascal! sivut 2 - n. 417, ei lukuja 5-2, 8-2, 9-2, 11-3, 12-3, 10 vain kursorisesti, ei sivuja 237-239, 244-245) 9.1 & 9.2 & 9.3 Kilpailussa on 20 osanottajaa. Kukin voi saada tyylipisteitä 0-50 ja peruspisteitä 0-100. Lopputulokseen pisteet lasketaan yhteen. Suurempi voittaa. Tee ohjelma, joka lukee kilpailijoiden nimet ja pisteet sekä tulostaa kilpailijoista luettelon sekä aakkosjärjes- tyksessä, että paremmuusjärjestyksessä. Saat olettaa, että nimet ovat yksikäsitteisiä. Saman pistemäärän omaavat tulostetaan parem- muuslistalle aakkosjärjestyksessä. Saat tyytyä siihen 'aakkosjär- jestykseen', joka syntyy Pascalin merkkijonovertailulla, so. skandinaavisia erikoisaakkosia ja eri kokoisia kirjaimia ei tar- vitse ottaa huomioon. Toteuta ohjelma aliohjelmia käyttäen. Vihjeitä: Käytä taulukkoa, jonka kukin alkio on tietue, jossa on kenttä nimelle ja pisteille. Järjestä taulukko ensin nimikentän perusteella ja tulosta. Järjestä sitten pisteiden perusteella ja tulosta uudelleen. Pisteiden perusteella järjestäessäsi tee aakkosjärjestysvertailusta toissijainen vertailuperuste, so. jos pisteet ovat samat, vertaa nimiä. Nimikentän tyyppinä voit käyttää Pascalin merkkijonoa, Turbon string-tyyppiä tai Sparcin varying of char -tyyppiä. 9.4 & 9.5 & 9.6 Lehden tilaajatiedot esitetään seuraavasti: const kpl = 500; type nimity = packed array [1..15] of char; osoite = packed array [1..20] of char; pvm = record pv : 1..31; kk : 1..12; vv : 1990..2050 end; tilaaja = record etunimi, sukunimi : nimity; katu, postipaikka : osoite; alkupvm, loppupvm : pvm; maksettu : boolean end; var Tilaajat : array [1..kpl] of tilaaja; ViimKayt : 0..kpl; Taulukon alkuosa on käytössä. Muuttujan ViimKayt arvona on viimeisen käytössä olevan tietueen indeksi. Pvm-tyyppiset kentät on varattu tilauksen alkamis- ja päättymispäivämäärälle. Tilaajatietueet säily- tetään nimien mukaisessa (Pascal-toteutuksen antamassa!) aakkos- järjestyksessä. Taulukkoa ja viimeisen käytössä olevan tietueen indeksiä voit käyttää globaaleina muuttujina (välittämättä niitä proseduureille parametreina). Proseduurit ovat tässä tehtävässä työ- kaluja, joilla tutkitaan ja muutellaan koko ohjelmassa merkityksel- listä tietorakenteen sisältöä. a) Tee proseduuri Hae, joka selvittää, onko annetun niminen henkilö tilaajien joukossa. Proseduuri saa etu- ja sukunimen parametrina ja palauttaa kolmannella parametrilla tiedon, onko haettu henkilö tilaaja: kolmas parametri on haetun henkilön tietueen indeksi, jos henkilö löytyi. Jos ei löytynyt, parametri palauttaa negatii- visen arvon. b) Tee proseduuri Lisaa, joka lisää parametrina saamansa tilaajatiedot tietorakenteeseen. Proseduuri tarkistaa a)-kohdan proseduurilla, ettei lisättävä jo ole taulukossa. c) Tee proseduuri Poista, joka poistaa parametrina (etu- ja sukunimi) saamansa tilaajan tietorakenteesta. Käytä a)-kohdan proseduuria. Muista tiivistää taulukko poiston jälkeen. d) Tee proseduuri AjanTasalle, joka saa parametrina päiväyksen ja poistaa tietorakenteesta vanhentuneet (parametria vanhemmat) ja maksamattomat tilaukset. e) Tee parametriton proseduuri Osoitelaput, joka tulostaa osoite- lipukkeet kaikille lehden tilaajille