Seuraavista tehtävistä saatu yhteispistemäärä (max 7 pistettä) jaetaan luvulla 3.5 ja näin saadaan varsinainen kurssipisteisiin laskettava pistemäärä. Bonustehtävien pisteet jaetaan luvulla 4 eli niistä voi saada yhden lisäpisteen. Ratkaisut: http://users.metropolia.fi/~pasitr/2014-2015/ti00aa43-3004/kt/03/ratkaisut/ Tehtävä 1. (1 piste) Tee ohjelma K03T01.cpp, jossa ohjelmalle syötetään kokonaisluku. Jos kokonaisluku on positiivinen, niin tulostetaan teksti: "Luku on positiivinen". Jos kokonaisluku on negatiivinen, niin tulostetaan teksti: "Luku on negatiivinen". Jos luku on 0, niin tulostetaan luku on nolla. Ohjelman syöte- ja tulostemalli on kuvassa 1. Palauta lähdekielinen ohjelmatiedosto K03T01.cpp Tuubiin. Kuva 1. Ohjelman K03T01.cpp tulostus Tehtävä 2. (1 piste) Tee ohjelma K03T02.cpp, joka lukee kokonaislukuja ja etsii luvuista pienimmän ja suurimman. Ohjelma lopettaa etsinnän, kun syötetään luku 99999. Tämän jälkeen ohjelma tulostaa pienimmän ja suurimman luvun. Ohjelman syöte- ja tulostemalli on kuvassa 2. Kuva 2. Ohjelman K03T02.cpp tulostus
Tehtävä 3. (1 piste) Tee ohjelma K03T03.cpp, jolle syötetään kokonaisluku väliltä 1-365. Aluksi ohjelma tarkistaa, että luku on kyseisellä välillä. Jos näin ei ole, niin tulostetaan virheilmoitus ja syötetty luku. Jos luku on oikein, niin tutkitaan mikä päiväys vastaa kyseistä juoksevaa päivää vuoden alusta. Oletetaan, että vuosi ei ole karkausvuosi. Ohjelma tulostaa kyseisen päivän muodossa pp.kk. Ohjelman syöte- ja tulostemalli on kuvassa 3. Palauta lähdekielinen ohjelmatiedosto K03T03.cpp Tuubiin. Tehtävä 4. (2 pistettä) Kuva 3. Ohjelman K03T03.cpp tulostus Tee C-ohjelma K03T04.cpp, jolle syötetään N mittaustulosta taulukkoon mittaus. Mittaustulokset ovat desimaalilukuja (double) ja N:n arvo kysytään käyttäjältä. Sitten ohjelma laskee tasoitetut arvot tasoituskaavoilla t, kun i 1 tai N i x i i ( xi 1 xi xi 1 t )/3, kun i 2, 3,..., N 1, missä xi on alkuperäinen ja ti on tasoitettu arvo. Esimerkiksi syötettäessä N:n arvolla 5 luvut 4, 2, 3, 1, 8, niin ohjelman tulostuksen pitää olla samanlainen kuin kuvassa 4. Tuubiin palautetaan tiedosto K03T04.cpp. Kuva 4. Ohjelman K03T04.cpp tulostus
Tehtävä 5. (2 pistettä) Tarkastellaan seuraavaa tilannetta (kuva 5). Tee ohjelma K03T05.cpp, jolle syötetään ympyrän säde r (oletetaan, että käyttäjä syöttää kiltisti positiivisen luvun). Sen jälkeen säde välitetään arvoparametrina funktiolle ympyran_ala, joka palauttaa arvonaan ympyrän pinta-alan (pinta-ala A lasketaan kaavalla A = πr 2 ). C:ssä phi:n (π) arvoon voidaan viittaa vakiomerkinnällä M_PI, kun ohjelman alussa on #include <math.h>. Tämän jälkeen lasketaan ympyrän ympärillä olevan pienimmän mahdollisen neliön pintaala funktiolla nelion_ala. Funktiolle välitetään arvoparametrina neliön sivun pituus ja se palauttaa arvonaan neliön pinta-alan. Edelleen ohjelma laskee neliön ympärille piirretyn mahdollisimman pienen ympyrän pinta-alan funktiolla ympyran_ala. Toteuta myös funktio hypotenuusan_pituus, joka saa arvonaan suorakulmaisen kolmion kateetit (merkitään a ja b) ja palauttaa arvonaan hypotenuusan (merkitään c) pituuden. Pythagooran lause (http://fi.wikipedia.org/wiki/pythagoraan_lause) on c 2 = a 2 + b 2. C:ssä neliöjuuri voidaan laskea funktiolla sqrt. Ohjelman pitää tulostaa ympyrän sisällä olevan neliön pinta-ala, neliön pinta-ala ja sen ympärillä olevan pinta-ala sekä ympyröiden pinta-alojen suhde. Ohjelman syöte- ja tulostemalli on kuvassa 6. Palauta lähdekielinen ohjelmatiedosto K03T05.cpp Tuubiin. Kuva 5. Tilannetta havainnollistava kuva Kuva 6. Ohjelman K03T05.cpp tulostus
Bonustehtävät Tehtävä 6. (2 pistettä) Tee C-ohjelma K03T06.cpp, jolle syötetään 12 kokonaislukua 3 x 4 -taulukkoon. Sen jälkeen ohjelma laskee kunkin rivin lukujen summan sekä koko taulukon lukujen summan. Lopuksi tulostetaan taulukon alkiot rivi kerrallaan ja lasketut summat. Ohjelman syöte- ja tulostemalli on kuvassa 7. Kaksiulotteisen taulukon läpikäynti onnistuu kahdella sisäkkäisellä for-lauseella. Tuubiin palautetaan tiedosto K02T06.cpp. Kuva 7. Ohjelman K03T06.cpp syöte- ja tulostusmalli
Tehtävä 7. (2 pistettä) Kirjoita ohjelma K03T07.cpp, joka arpoo lottorivin (7 varsinaista numeroa ja 3 lisänumeroa) ja tulostaa ne nousevassa järjestyksessä! Kirjoita ohjelman alkuun määritykset #include <stdio.h> #include <stdlib.h> #include <time.h> Ohjelmassa pitää olla ensimmäisenä lauseena satunnaislukugeneraattorin alustuslause srand(time(null)); /*alustetaan satunnaislukugeneraattori */ Kokonaisluku väliltä 1-39 voidaan arpoa lauseella x=rand()%39+1; /* arvotaan uusi */ Vihje: Määritä 40-alkioinen taulukko, jonka jokaisella alkiolle annetaan alkuarvo 0. Kun luku tulee arvotuksi varsinaiseksi numeroksi, niin merkitään kyseisen arvotun numeron indeksoiman taulukon alkion arvoksi luku 1. Kun luku tulee arvotuksi lisänumeroksi, niin merkitään kyseisen arvotun numeron indeksoiman taulukon alkion arvoksi luku 2. Lopussa käydään taulukko läpi ja tulostetaan varsinaiset numerot. Tämän jälkeen käydään taulukko uudelleen läpi ja tulostetaan varanumerot. Ratkaisussa ei saa käyttää automaattisia lajittelufunktioita. Ohjelman esimerkkitulostus on kuvassa 8. Tuubiin palautetaan tiedosto K03T07.cpp. Kuva 8. Ohjelman K03T07.cpp tulostusmalli