3.2 Listat
Kun käsitellään isoa määrä tietoa, on kätevää tallentaa se tietorakenteeseen, jonka koko voi kasvaa ja pienentyä tarvittaessa. Lista on juuri tällainen tietorakenne. Listaan voi lisätä alkioita, siitä voi poistaa alkioita, listoja voi yhdistellä jne.
Listamuotoista tietoa on myös helppo käsitellä rekursiivisilla funktioilla tai Higher Order - funktioilla. Tutustu niihin Koodarin käsikirjan avulla.
3.2.1 Listan "syöntiä" ja luontia rekursiivisesti
Harjoittele listojen ja rekursion käyttöä seuraavien tehtävien avulla.
Listan "syöntiä" ja luontia rekursiivisesti
Tee funktio, joka laskee listassa olevista luvuista keskiarvon. |
Tee funktio, joka laskee listassa oleville hinnoille alennetun/korotetun hinnan, kun funktiolle annetaan haluttu muutosprosentti (esim. -10 tarkoittaa -10%, 20 tarkoittaa +20%). |
Tee funktio, joka ottaa sisäänsä oppilaiden nimet listana, ja palauttaa listan jossa on arvottu uudet oppilasparit. Esim. alkuperäinen lista: (list "Jenni" "Ulla" "Pasi" "Panu" ) Uusi parit-lista: (list (list "Jenni" "Pasi") (list "Panu" "Ulla")) |
Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:
|
|
|
|
| ||||||
|
|
|
|
|
3.2.2 Kuvatehtäviä listoilla
Listaa voi käydä läpi myös niin, että se ei tyhjene vaan käytetty alkio siirretään listan loppuun, jolloin se tulee käyttöön jälleen omalla vuorollaan. Käytä tätä ideaa apunasi seuraavassa tehtävässä.
Kuvatehtäviä listoilla
Tee funktio, joka tuottaa oheisen kuvion mukaisen "Death Star" -tähden. Vinkki: Värit kannattaa tallentaan listaan, joka annetaan parametrina rekursiiviselle funktiolle. |
Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:
|
|
|
| |||||
|
|
|
| |||||
|
|
|
|
3.2.3 Laskutoimituksia listoilla ja Higher Order - funktioilla
Harjoittele listojen kanssa laskemista seuraavien tehtävien avulla.
Laskutoimitukset listoilla
Keskiarvo, mediaani ja moodi | Tee funktiot, jotka laskevat listassa olevista luvuista keskiarvon, mediaanin sekä moodin. |
Eratostheneen seula alkulukujen etsimiseen | Algoritmi: Muodostetaan lista (2, 3, ... 100). Poistetaan listasta kaikki luvut, jotka ovat jaollisia kymmentä pienemmillä alkuluvuilla: 2, 3, 5 ja 7. Jäljelle jääneet luvut ovat jaollisia vain itsellään ja ykkösellä eli ne ovat alkulukuja. Sataan asti tarkistamiseen riittää tutkia jaollisuus kymmentä pienemmillä luvuilla (10*10=100). Eratosthenen seula sataa pienemmillä alkuluvuilla antaisi siis alkuluvut, jotka ovat pienempiä kuin 10000 (100*100) jne. |
Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:
|
|
|
|
|
|
| ||||||||
|
|
|
|
|
|
| ||||||||
|
|
|
|
|
|
|