Harjoitustehtävät 4
Osaamistavoitteet
Tämän harjoituksen päätteeksi
- ymmärrät, miten ehtolausetta voidaan käyttää
- osaat lukea käyttäjän syötettä (näppäimistöltä) ja käyttää merkkijonoja (String)
- osaat käyttää ohjelmassasi useita aliohjelmia ja funktioita
- osaat tehdä pienen pelin (Pong)
- osaat tehdä erilaisia laskutoimituksia 2-järjestelmän kokonaisluvuilla ja tulkita laskujen lopputuloksia
T0. Palaute tästä osasta (0,5 p.)
Auta meitä parantamaan tätä kurssia antamalla palautetta tästä kurssin osiosta.
Huom: Vastaa tähän vasta, kun olet valmis tämän harjoitustehtäväkerran tehtävien kanssa
Vastaa alla oleviin kohtiin tämän kurssin osasa käsiteltyjen materiaalien ja tehtävien (luennot, esimerkit, kurssimoniste, harjoitustehtävät) perusteella.
Saat 0,25 pistettä vastaamalla kaikkiin alla oleviin väittämiin.
Kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, harjoitustehtävien tekeminen, luentovideon katsominen, tehtävien purkutilaisuuteen osallistuminen ja niin edelleen.
T1*. Komentoriviharjoittelua (1 p.)
Tutustu Jyväskylän yliopiston OpenCS-alustan komentorivimateriaaliin Lukuun 1 ja Lukuun 2 sekä tee komentoriviharjoitusohjelman tehtäväkokonaisuudet 1 ja 2 (Navigation ja Managing files and folders). Harjoitusohjelman asennus- käyttöohjeet löytyvät materiaalin Luvusta 2.2.
Linkki komentorivimateriaaliin
Suosittelemme, että teet komentoriviharjoituksen käyttämällä omaan koneen bash-tulkkia (Windowsilla Git Bash, macOS:llä Pääte, Linuxilla mikä tahansa bash-tulkki). Saat sopivan bash-tulkin auki Git-työkalun ohjesivun ohjeilla.
Ongelmatilanteissa voit myös tehdä harjoitukset täysin selaimessa materiaalissa olevia ohjeita käyttäen.
Kun olet saanut tehtävät tehtyä, kirjoita alle lyhyesti, mitä opit. Voit myös kirjoittaa lyhyen palautteen materiaalin tekijälle (palaute välitetään anonyymisti eteenpäin).
Ongelmatilanteissa komentoriviharjoituksen kanssa ole yhteydessä Sami Sarsaan (sami.j.sarsa@jyu.fi).
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1.
T2-3*. Pong-harjoituspeli (2 p.)
Tee Pong-tutoriaalin vaiheet vaiheet 1-7 Kirjoita lopuksi noin 100-200 sanan mittainen oppimispäiväkirja, jossa vastaat kahteen kysymykseen:
- Mitä opit Pong-tutoriaalista?
- Mikä oli helppoa? Mikä oli vaikeaa?
- Tutustu kurssin harjoitustehtävän tarkastettaviin osa-alueisiin. Miten lopullinen tekemäsi Pong-peli vertautuu harjoitustyön vaatimuksiin?
- Mitä vaatimuksia tekemäsi peli täyttää? Mitä vaatimuksia se ei vielä täytä? Mistä vaatimuksista et ole vielä varma tai mitä kohtia et vielä ymmärrä?
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 piste jne.
T4. Lausekkeita ja lauseita (1 p.)
Lue ensin monisteesta: 7.7 Operaattorit sekä 7.7.4 Aritmeettisten operaatioiden suoritusjärjestys
Alla on C#-kielisiä lausekkeita ja lauseita. Vastaa kysymyksiin 1.1–1.8.
Arviointi: Pisteitä saa oikeista vastauksista. Yhteenlaskettu maksimipistemäärä on 1 p. Kysymyskohtaiset pisteet näkyvät kysymysten yhteydessä. Kysymyksissä vain yksi vastausyritys/kysymys!
Seuraavissa kohdissa on useita toisistaan erillisiä lauseita. Eri kohdissa olevia lauseita ei suoriteta peräkkäin.
T5*. Pidempi merkkijono kahdesta (1 p.)
Lue ensin monsteesta: 12. Merkkijonot, 13. Ehtolauseet.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Toteuta PidempiMerkkijono-aliohjelma, joka ottaa vastaan kaksi merkkijonoa, ja palauttaa näistä kahdesta pidemmän merkkijonon. Jonojen ollessa yhtä pitkiä palautetaan ensimmäisenä parametrina annettu jono. Aliohjelmassa PidempiMerkkiJono EI saa tulostaa mitään.
Rider ei anna kirjoittaa ReadLine-tekstejä kunnolla tekee testaamisesta käytännössä mahdotonta.
Kokeile toistaiseksi QA-palstalla ehdotettua väliaikaista korjeusta -DZ
—Alla on valmiiksi annettu pääohjelma. Ota siitä kopio, vie Rideriin ja täydennä sen ympärille luokka nimeltä Merkkijonot.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja -painikkeella 0,5 p; onnistuneesti ajetuista testeista Aja opettajan kirjoittamat testit -painikkeella 0,5 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Huomioitavaa: TIMissä käyttäjän syöte pitää antaa sille varattuun tilaan ENNEN ohjelman ajamista. TIMissä konsolilta lukeminen ei toimi samalla tavalla kuin Riderissa.
Voit kokeilla tehdä alkuun vastaavan tehtävän tutoriaalina täältä:
Harjoitustehtävien harjoittelu: Merkkijonofunktio-tutoriaali
Katso lisäksi yleinen ohje aliohjelmien kirjoittamisesta:
Muista erityisesti mallijärjestys aliohjelman kirjoittamiselle:
- Kirjoita aliohjelman määritys (
public static, palautustyyppi, nimi, parametrit, runko) - Lisää runkoon joku pakollinen
return-lause niin, että ohjelma kääntyy, esimerkiksireturn "testi"; - Kokeile, että ohjelma varmasti kääntyy.
- Lisää dokumentaatio aliohjelman alkuun.
- Nyt voit muuttaa aliohjelman runkoa niin, että se tekee halutun asian.
Voit myös käyttää TDD:tä, eli ennen aliohjelman rungon toteuttamista kirjoitat testejä dokumentaatioon.
T6. Kirjainten muuttaminen (1 p.)
Lue ensin: 12. Merkkijonot.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Toteuta MuutaKirjaimet-niminen funktio, joka muuttaa r-kirjaimet (pienet ja isot) l-kirjaimiksi. Kun funktio on valmis, ohjelman tulisi toimia seuraavasti
Toistan mitä sanot, mutta en osaa sanoa l:ää!
Anna teksti >ralliauto ajaa superkovaa.
Sanoit siis : lalliauto ajaa supelkovaa.
Alla olevassa palautuslaatikossa on valmiiksi tehty aliohjelman määrittely; riittää, että kirjoitat toteutuksen.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja -painikkeella 0,5 p; onnistuneesti ajetuista testeista Aja opettajan kirjoittamat testit -painikkeella 0,5 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Huomioitavaa ja vinkkejä:
- Katso String-luokan dokumentaatiota ja etsi metodi, jolla voit vaihtaa kaikki kirjaimen esiintymät toiseksi kirjaimeksi.
- Tässä tehtävässä ei välttämättä tarvitse itse kirjoittaa yhtään aliohjelmaa, tosin tulevia harjoituksia ajatellen apufunktiosta ei ole haittaakaan.
- TIMissä konsolilta lukeminen ei toimi samalla tavalla kuin oikeassa ohjelmassa. TIMissä käyttäjän syöte pitää antaa sille varattuun tilaan ENNEN ohjelman ajamista.
T7. Suurin ja pienin (1 p.)
Lue ensin monisteesta: 13. Ehtolauseet.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät 6.1 ja 6.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä 7.1
Toteuta funktio Suurin, joka ottaa parametreina kolme kokonaislukua ja palauttaa luvuista suurimman.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana. Voit myös palauttaa sinun omat tekemäsi dokumentaation ja dokumentaatiotestit, joita voit ajaa Aja itse kirjoittamasi testit -painikkeella.
Arviointi: Tehtävässä on automaattinen arviointi. Oikein toimista aliohjelmasta annetaan 0,5 p.
Tehtävä 7.2
Toteuta funktio Pienin, joka ottaa parametreina kolme kokonaislukua ja palauttaa luvuista pienimmän.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana. Voit myös palauttaa sinun omat tekemäsi dokumentaation ja dokumentaatiotestit, joita voit ajaa Aja itse kirjoittamasi testit -painikkeella.
Arviointi: Tehtävässä on automaattinen arviointi. Oikein toimista aliohjelmasta annetaan 0,5 p.
T8. Ensimmäinen sana merkkijonossa (1 p.)
Lue ensin monisteesta: 12. Merkkijonot.
Katso esimerkkikoodi: Jonoja.cs.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät 7.1 ja 7.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä 8.1
Toteuta aliohjelma VainEkaSana, joka ottaa parametrina merkkijonon ja palauttaa ensimmäisen sanan. Jos merkkijonossa on välilyönti, aliohjelman tulee palauttaa merkkijono, jossa on merkit alkuperäisen jonon alusta ensimmäiseen välilyöntiin saakka (välilyöntiä ei oteta mukaan). Jos merkkijonossa ei ole välilyöntiä (= sisältää vain yhden sanan), tulee alkuperäinen jono palauttaa sellaisenaan.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana. Voit myös palauttaa itse tekemäsi dokumentaation ja dokumentaatiotestit, joita voit ajaa Aja itse kirjoittamasi testit -painikkeella.
Arviointi: Tehtävässä on automaattinen arviointi. Oikein toimivasta aliohjelmasta annetaan 0,5 p.
Tarvitset mahdollisesti String-luokan metodeja IndexOf, Substring ja Split. Hae MSDN-dokumentaatio ja tutki, miten merkkijono saadaan paloiteltua. Split vaatii taulukon, jota ei vielä ole käsitelty.
Voit halutessasi kokeilla ohjelmasi toimintaa oheisella pääohjelmalla, ja myös kopioida omaan koodiisi. Pääohjelmaa ei kuitenkaan palauteta Timiin.
public static void Main(string[] args)
{
Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
string kokonimi = Console.ReadLine();
string etunimi = PoistaEkaSana(kokonimi);
string sukunimi = VainEkaSana(kokonimi);
Console.WriteLine("Etunimesi on siis " + etunimi +
" ja sukunimesi " + sukunimi);
}Tehtävä 8.2
Toteuta aliohjelma PoistaEkaSana, joka ottaa parametrina merkkijonon ja palauttaa kaiken muun paitsi ensimmäisen sanan, ts. ensimmäisestä välilyönnistä eteenpäin (välilyöntiä ei oteta mukaan). Jos merkkijonossa ei ole välilyöntiä, tulee palauttaa tyhjä merkkijono.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana. Voit myös palauttaa itse tekemäsi dokumentaation ja dokumentaatiotestit, joita voit ajaa Aja itse kirjoittamasi testit -painikkeella.
Arviointi: Tehtävässä on automaattinen arviointi. Oikein toimivasta aliohjelmasta annetaan 0,5 p.
Tarvitset mahdollisesti String-luokan metodeja IndexOf, Substring ja Split. Hae MSDN-dokumentaatio ja tutki, miten merkkijono saadaan paloiteltua. Split vaatii taulukon, jota ei vielä ole käsitelty.
Voit halutessasi kokeilla ohjelmasi toimintaa oheisella pääohjelmalla, ja myös kopioida omaan koodiisi. Pääohjelmaa ei kuitenkaan palauteta Timiin.
public static void Main(string[] args)
{
Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
string kokonimi = Console.ReadLine();
string etunimi = PoistaEkaSana(kokonimi);
string sukunimi = VainEkaSana(kokonimi);
Console.WriteLine("Etunimesi on siis " + etunimi +
" ja sukunimesi " + sukunimi);
}T9. Binäärilukulaskuja (1 p.)
Lue ensin: 26.4 Negatiiviset binääriluvut
Tee alatehtävät 8.1-8.10. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Johdanto: Useimmiten nykytietokoneissa käytetään sisäisesti negatiivisille kokonaisluvuille niin sanottua kahden komplementtia. Kahden komplementissa positiivinen luku muutetaan negatiiviseksi muuttamalla kaikki bitit "päinvastaisiksi" (1 0 ja 0
1) ja sitten lisäämällä saatuun lukuun 1.
Alla esimerkki luvun -3 esittämisestä kahden komplementin avulla 8-bittisen luvun avulla.
3 = 0000 0011, joten
-3 tehdään kahden komplementtina seuraavasti:
1) kaikki bitit päinvastoin = 1111 1100
2) +1 = 1111 1101
Lukua tulkittaessa katsotaan sen aluksi ensimmäinen bitti. Jos se on 1, niin kyseessä on negatiivinen luku ja se muutetaan positiiviseksi ottamalla siitä jälleen kahden komplementti, eli "kääntämällä" kaikki bitit päinvastaisiksi ja lisäämällä lopuksi 1.
Alla on tulkittu binääriluvut 0010 1101 ja 1101 1111, joiden tiedämme edustavan 8-bittisiä kokonaislukuja, missä negatiivisille luvuille on käytössä kahden komplementti.
0010 1101 luku on positiivinen, eli 45
1101 1111 luku on negatiivinen, siis ensin 2:n komplementti
0010 0000 + 1 = 0010 0001 = 33, eli tulos on -33
mielestäni tämä jotenkin ei toimi?
Näyttää toimivan. Kirjoita viivan alle vain lopullinen eikä mitään muuta välilaskua. Lisäsin tarkennuksen tehtävänantoon. -DZ
—T10. Testaa kaksi aliohjelmaa (1 p.)
Lue ensin monisttesta: 11. Testaaminen
Tarkista vähintään kahden tämän harjoituskerrassa tehdyn aliohjelman toimintaa automaattisella testillä ComTest-työkalua käyttäen.
Huomaa, että ohjelmia, joissa on pelkkä Main-pääohjelma, ei voida tämän kurssin tiedoilla testata, kuten ei myöskään Jypeli-pelejä. Siksi testaamista tehdään harjoitustehtävissä vain static-aliohjelmille, jotka palauttavat jonkun arvon. Tässä harjoitustehtäväkerrassa sellaisia on tehtävissä T5, T6, T7 ja T8.
On suositeltavaa käyttää ComTest-työkalua Riderin kautta. Pääset eteenpäin seuraavilla ohjeilla:
Palautus: Kerro, minkä tehtävän ja minkä aliohjelman/aliohjelmien toiminnan testasit.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
Jos ComTest ei toimi koneellasi, voit Copy/Pasteta ohjelmia alla olevaan laatikkoon ja testata siinä Test-painikkeella.
V1. ViLLE (1 p.)
Tee ViLLE-tehtävät 3.3, 3.5, 3.6. 4.1-4.4.
Muista: ViLLEn käyttöohje.
Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit tämän kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.
B1. Virheet aliohjelmien määrittelyssä (1 p.)
Lue seuraavat dokumentaatiot ja aliohjelmien esittelyt. Jokaisessa niissä on jotain outoa. Parannettavaa voi olla (mutta ei välttämättä ole) paluuarvon tyypissä, funktion nimessä, parametrien määrässä ja niiden nimissä tai tyypeissä, tai itse dokumentaatiokommenteissa. Myös kokonaisia sanoja voi puuttua esittelyriviltä tai dokumentaatiosta.
Kirjoita vastauslaatikkoon mitä korjattavaa löysit ylläolevasta koodista. Huomaa, että aliohjelmien toteutusta ei tässä arvioida eikä edes näytetä. Tee tulkintasi dokumentaation ja esittelyrivin perusteella.
Arviointi: Tehtävä koostuu kolmesta alakysymyksestä. Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi. Jos teit tehtävän mielestäsi täysin oikein, anna kysymyksen maksimipistemäärä, puoliksi oikein puolet pistettä jne.
B2-3. Pallojen törmäily (2 p.)
Tee Jypeli-peli, jossa luodaan pelikentälle satunnaisiin paikkoihin 30 palloa (mielellään satunnaisin värein), joilla on satunnainen säde 5 ja 30 välillä (katso vinkki 1). Kokeile, että toimii. Lisää vielä yksi 40-säteinen valkoinen pallo, jota voi ohjata "tökkimällä" nuolinäppäimillä (katso vinkki 2).
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 pistettä jne.
Vinkki 1: Tutustu Jypelin satunnaisuutta tarjoavaan RandomGen-luokkaan.
Vinkki 2: Ohjainten lisäämiseen voit katsoa apua Pong-tutoriaaleista.
B4. char-tietotyyppi (1 p.)
Tee alatehtävät B4.1 ja B4.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p. Voit tehdä alatehtävät samaan .cs-tiedostoon.
Tehtävä B4.1
Katso char-dokumentaatiota. Mitä sinun on kirjoitettava xxx:n paikalle, jotta alla oleva ohjelma toimisi? (0,4 p)
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0.4. Jos teit tehtävän mielestäsi täysin oikein, 0.4 pistettä, puoliksi oikein 0.2 pistettä jne.
Tehtävä B4.2
Lue ensin monisteesta: 12.1.2. Null-viittaus ja tyhjä merkkijono.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee aliohjelma IsoVaiPieni, joka palauttaa onko parametrina annetun merkkijonon ensimmäinen merkki suuraakkonen (uppercase) vai ei. Jos ensimmäinen merkki on suuraakkonen, palautetaan merkkijono "iso". Jos taas eka merkki ei ole suuraakkonen (myöskään erikoismerkit jne. eivät ole suuraakkosia) palautetaan merkkijono "pieni".
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0.6. Jos teit tehtävän mielestäsi täysin oikein, 0.6 pistettä, puoliksi oikein 0.3 pistettä jne.
G1. Pallot räjähtää (1 p.)
Lisää Tehtävän B2-3 pallopeliin ominaisuus, että jos ohjattavalla pallolla osuu toiseen palloon kentän puolivälin yläpuolella, toinen pallo räjähtää ja poistuu pelistä. Pelin tarkoituksena on räjäyttää kaikki pallot.
Vinkki: Jypelin ohjeet
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.