Sinun UserID: 0

Palautus viimeistään: ma 2.10 klo 11:00
Katso luennot-sivulta luennot 07 ja 08.

Ilmoittaudu missä ryhmässä (live/zoom/video) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)

  • Please to interact with this component.

    Ma 14-16
  • Please to interact with this component.

    Ma 16-18 (iltaryhmä lopetettu)
  • Please to interact with this component.

    Ma 14-16 Zoomista
  • Please to interact with this component.

    Ma 16-18 Zoomista (iltaryhmä lopetettu)
  • Please to interact with this component.

    Katson demonpalautuksen videolta

Alla demotilanteesi.

  • Pisteet eivät päivity tähän automaattisesti, vaan aina pienellä viiveellä.
  • Värit: Punainen: Minimit ei täyty. Vihreä: vähintään 5p joista 2p tähtitehtävistä.

Ohjelmointi 1, s 2023 / Demo 4

Ohjeet ja palautusten video

Oppimistavoitteet

Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.

# Oppimistavoitteet

Ajankäyttösi tällä viikolla (0.25p) 

Huomioitavaa

Oppimisen kannalta näistä tärkeimmät 2 tehtävää voisivat olla tehtävät joukosta 2, 5 ja 6.

Kunkin kerran minimipistemäärä 2 on tehtävä käyttäen tähdellä (*) merkittyjä tehtäviä. Esim. pelkkä Ville ja Tauno ei riitä minimimäärään. Jos nämä tehtävät eivät lähde luonnistumaan, kannattaa käydä pääteohjauksissa saamassa apua.

Muista että B-tehtävät ovat Bonus tehtäviä, joiden tekemiseksi joutuu yleensä etsimään materiaalia kurssin sen hetken materiaalin ulkopuolelta (esim. lukemalla monistetta eteenpäin). Jos niitä ei osaa tehdä, se ei ole vielä vakavaa.

G-tehtävät ovat Guru-tehtäviä, jossa pitää jo osata selkeästi enemmän kuin kurssin taso tällä hetkellä.

Edellisten demojen vastausten korjaaminen E1 (pakollinen)

Video 1 (1 p) 

TDD-pohja

Tauno 1a

Katso alta ensin video Demo 3:n Tauno-tehtävän käsittelystä. Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.

# lisaaTaulukkoon

Tauno 1b

# summaajokotoinen
# taunoOppi

Ville 1

Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Sanoin luennolla että Villen merkkijonot toimivat kuten Javassa, mutta tuo taitaa nyt olla korjattu Villessä, eli Substring-metodin jälkimmäinen indeksi on merkkien määrä.

# villev1

Funktioista F1

Mikäli olit luennolla 5 ma 18.09.2023 ja sait kaverin kanssa tehtyä aliohjelmien kutuja, voit hypätä kohdan 1 yli ja jatkaa suoraan tämän tehtävän kohdasta 2.

  1. Mikäli et ollut luennolla 05 tai et saanut luennolla tehtyä sitä tehtävää, jossa opiskelijat "leikkivät" aliohjelmia ja "paperilaput" parametrejä, tee se nyt yksin tai yhden/kahden kaverin kanssa.

  2. Seuraavaksi lue huolella monisteen luku 9. Aliohjelman paluuarvo.

  3. Suorita kohdan 9.2 Funktion kutsuminen lopussa oleva animaatio huolella miettien, mitä tapahtuu ja miten asiat samaistuvat luentojen "paperilappujen leikkiesimerkkiin".

  4. Aja kohdan 9.3 Funktion kirjoittaminen toisella tavalla toisen esimerkin testit. Vaihda 2.0 tilalle 2. Aja testit ja katso, mitä tapahtuu. Vaihda jakolaskun tilalle kertominen luvulla 0.5 ja aja testit uudelleen.

  5. Katso alla olevat molemmat animaatiot ajatuksen kanssa.

# ae_keskiarvo
# ae_tolower

Kirjoita alle:

  • mitä opit animaation ja luentojen "paperilappujen" antamisen yhteydestä?
  • mitä hyötyä oli testeistä?
  • miksi sanotaan, että merkijono on muuttumaton (immutable) vaikka merkkijonoanimaation esimerkissä muuttuja jono muuttui?
  • jos vastauksesi on että et oppinut uutta, niin milloin opit em asiat
# funktiokutsu

TDD 1

M: 11. Comtest

Jos teet itse omia testejä vähintään kahteen funktioon (esim ComTest) Riderissa tai vastaavassa, saat merkitä yhden lisäpisteen. Testit eivät saa olla täsmälleen samoja kuin mitkä saa kopioimalla tehtävien TIM-versiosta. Vastauksena kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa samalla palautetta ja kehitysehdotuksia Comtestin käytöstä. Huom! Ohjelmia joissa on pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastavaa testata, samoin esim. pelijuttuja. Siksi testaamista kannattaa ehkä tehdä tässä demoissa vain sellaisille funktioille, jotka selkeästi palauttavat jotakin. Tässä demossa sellaisia on tehtävissä 2, 5 ja 6.

Jos ComTest ei toimi koneellasi, voit Copy/Pasteta ohjelmia alla olevaan laatikkoon ja testata siinä.

# ComTestPohjaCS
# tdd

Tehtävä 1. Pong tai työaikatutoriaali

Valitse seuraavista jompikumpi sen mukaan mikä on kiinnostus peleihin:

  1. Jos et tykkää pelin tekemisestä, niin tutustu Työaikaraportti tutoriaaliin Toki voit tämän toisen tutoriaalin tehdä myöhemmin vaikka peleistä pitäisitkin :-) Kuten Pongissakin, kirjoita alle muutaman kappaleen mittainen oppimispäiväkirja

  2. Tee Pong-tutoriaalista vaiheet 4-7. Pong-tehtävää ei voi tehdä TIMissä! (Tee myös 1-3 jos et niitä ohjauksissa tehnyt.) Kirjoita parin kappaleen mittainen oppimispäiväkirja (väh. 5 riviä), eli mitä opit, mikä oli uutta? Mikä oli helppoa ja mikä vaikeaa? Oliko tästä tehtävästä sinulle hyötyä? Voit antaa myös palautetta tutoriaalin sisällöstä. Pong-tutoriaalin kooditiedostoja EI tarvitse palauttaa.

Älä jää liikaa suremaan hieman omituista fysiikan käytöstä joissakin pompuissa :-)

# Pong
# pidempisana

Tehtävä 2*. Merkkijonoja vertaava funktio

  • katso erityisesti animaatio siitä, miten merkkijonofunktio toimii: ToLower
  • käytä ensisijaisena lähteenä luentomonisteen Merkkijonot-lukua

Selitystä ja vinkkejä (avaa tämä jos haluat pidemmän selityksen, mutta ennen sitä lue tehtävän määritys alla olevasta tehtävälaatikosta).

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

# pidempijono

VL: Jos Rider valittaa ReadLinestä että voi palauttaa null, niin ota se virhe pois ainakin tästä projektista.

27 Sep 23 (edited 27 Sep 23)

Jaa-a, testaamalla näyttää ok:ta, mutta kun ajaa niin eipä tuo 0.6 ykköseksi muutu enkä keksi enää miten saisin täysiin pisteisiin ni jää nyt tähän..

VL: Laita siihen alempaan ikkunaan kaksi sanaa alekkain, ei ohjelmaa.

01 Oct 23 (edited 02 Oct 23)

Multa on se alempi ikkuna varmaan hävinny johonkin koska en saa tuon "kirjoita ohjelman syöte.."- osuuden alapuolelle kirjoitettua mitään. Hiiri näyttää siinä nuolta, ei anna kursiivia näkyviin ollenkaan niin että voisi kirjoittaa..

02 Oct 23

Ps. minkähän vuoksi mulla näkyy sekä demojen että korjattujen pisteet punaisella?

02 Oct 23

Tehtävä 3 Lässytystä

Huomaa! 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.

Tee Console-ohjelma, joka toimisi seuraavasti (vinkki: katso String-luokan dokumenttia ja etsi metodi, jolla voit vaihtaa kirjaimia. Tiedon lukemista varten katso edellisen tehtävän pääohjelmaa (tässä tehtävässä ei välttämättä tarvitsisi itse kirjoittaa yhtään aliohjelmaa, tosin tulevia demoja ajatellen apufunktiosta ei ole haittaakaan).

Toistan mitä sanot, mutta en osaa sanoa l:ää!
Anna teksti  >ralliauto ajaa superkovaa.
Sanoit siis : lalliauto ajaa supelkovaa.
# lassytysta

Muutamilla seuraavia virheitä (vaikka olisiki täydet pisteet, samoja virheitä myös T5):

  • sisennykset väärin
  • jos kutsutaan funktiota, sulku kiinni nimeen
  • muuttujien nimien pitää alkaa pienellä kirjaimella
  • valmiissa kommentissa oli parametrin sivunpituus nimeksi annettu lause ja sitä pitäisi käyttää!
  • turhia tyhjiä rivejä
  • parametria (lause) ei saisi käyttää apumuuttujana, kannattaa esitellä uusi apumuuttuja

Tehtävä 4. Char-luokka

Kirjaimet: Katso ensin huolellisesti luennon 08 esimerkki Merkkijonot.cs. Sitten katso Char-dokumentaatiota sekä dokumenttia Aliohjelminen kutsuminen

Tehtävä 4a. Kirjain isoksi (0.4 p)

Katso, mikä kutsu sinun on kirjoitettava XXX:n paikalle, jotta seuraava ohjelma toimisi:

# kirjainIsoksia

Tehtävä 4b. Onko iso? (0.6 p)

ONko tätä tehtävää mahdollista tehdä toistaiseksi kurssilla käydyn materiaalin perusteella? Jos on, niin ensimmäisen merkin koon tutkimisen osio on mennyt itseltä täysin ohitse.

VL: Tarkoitus on vähän lukea monistetta. Ks Char-luokka.

27 Sep 23 (edited 27 Sep 23)

Oletetaan että tehtävänä olisi tehdä ohjelma, jossa kysytään käyttäjältä sana tai jono ja tulostetaan, onko sen ensimmäinen kirjain iso kirjain (uppercase) vai ei (lower case). Käyttönä voisi olla vaikkapa tarkistaa onko annettu muuttujan nimi koodauskäytänteiden mukainen.

Tehtävä kannattaa ilman muuta silloin aloittaa niin, että ensin tehdään funktion IsoVaiPieni, joka selvittää merkkijonon 1. kirjaimen suuruuden. Sitten kun tämä on tehty ja testattu, ruvetaan miettimään käyttäjältä kysymistä. Tässä tehtävässä tyydytään vasta tuon funktion tekemiseen. Erikoistapausten tulkinnan saat selville valmiista testeistä; jos ensimmäistä merkkiä ei ole tai se on muu kuin kirjain, palautetaan aina "pieni".

TIM-versiossa pääohjelmassa on vakiojono, jossa funktiolla selvitetään, onko jonon 1. kirjain iso vai pieni. Katso tarkasti, mitä itse funktiossa testataan (Näytä koko koodi) ja mieti, mitä mikäkin tapaus tarkoittaa funktion kannalta. (Array index is out of range = taulukon indeksi on rajojen ulkopuolella, saattaa liittyä tyhjään merkkijonoon. Eli mitä on mj[0] jos mj == "" :-) Katso myös luentomoniste.

# Plugin1

Jaa ongelma ensin selkeästi pienempiin osiin:

  1. Voinko edes ottaa 1. kirjaimen? Missä tilanteessa en? Mitä silloin palautetaan?
  2. Miten saan jonon 1. kirjaimen?
  3. Miten tutkin, onko 1. kirjain iso?
  4. Miten tuon perusteella palautan tekstin "iso" tai "pieni"?

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

# vertailua

Tehtävä 5*. Kolmen luvun suurin ja pienin

Tee ohjelma, joka kysyy kolme kokonaislukua ja tulostaa niistä suurimman ja pienimmän. Tee avuksi funktioaliohjelmat Suurin ja Pienin (joille kummallekin viedään kolme parametriä). Millä arvoilla aliohjelmia olisi hyvä testata? Oletetaan, että käyttäjä syöttää kokonaisluvun, eli poikkeuksia (jokin muu kuin kokonaisluku annettu) ei tarvitse tässä ottaa huomioon. Numeron saat luettua päätteeltä seuraavasti:

Console.Write("Anna 1. kokonaisluku >");
int a = int.Parse(Console.ReadLine());

Vinkki! Tehtävää on helpointa lähteä laajentamaan ajatuksesta

int suurin = a;
if ( b > suurin ) suurin = b;
return suurin;
# Plugin2
# kolmensuurin

Tehtävä 6. Merkkijonon pätkiminen

Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi:

    public static void Main() 
    {
        Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
        string kokonimi = Console.ReadLine();
        string sukunimi = AnnaEkaSana(kokonimi);
        string etunimi = PoistaEkaSana(kokonimi);
        Console.WriteLine("Etunimesi on siis " + etunimi + 
                          " ja sukunimesi " + sukunimi);
    }

Vinkki: Katso monisteesta String-luokan IndexOf ja Substring tai Split (Split vaatii taulukon jota ei vielä ole kunnolla käsitelty). Muista aina painaa Näytä koko koodi.

# Plugin3
# poistaekasana

Mikähän tässä menee pieleen? sain aikaisemmin samalla vastauksella 1 pisteen ja nyt vain 0.4

VL: nyt ei mene testit läpi (testien osuus on 0.5 p).

27 Sep 23 (edited 27 Sep 23)
# liuku

L1. Liukuhihna

Dokumentissa Liukuhihna on hauska robotti. Vastaa siellä oleviin kysymyksiin. Maksimissaan voit tuolta kerätä 2.5 p. Kirjoita alla olevaan tehtävään miltä liukuhihnatehtävä tuntui ja laita itse tehtävän pisteisiin liukuhihnan tuloksesi. Saat tehdä tähän demoon sen tehtävästä osan jota et jo tehnyt demo2:ssa tai demo3:ssa, kunhan kumpaankin merkkaamasi (demo2 + demo3 + demo4) summa on sama kuin Liukuhihnatehtävän pistemäärä.

Huom!. Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!

# tehtavaL1

B1-2. Pallojen pukkaileminen

Ota pohjaksi demo 2:n mallivastaus G1-2. Tippuvat suorakulmiot (Näytä mallivastaus/Show model answer, SuorakulmiotFysiikalla.cs). Aja se ensin sellaisenaan. Muuta sitten se niin, että luodaan pelikentälle satunnaisiin paikkoihin 30 palloa (mielellään satunnaisin värein), joilla on satunnainen säde 5 ja 30 välillä. Kokeile että toimii. Lisää vielä yksi 40-säteinen valkoinen pallo, jota voi ohjata "tökkimällä" nuolinäppäimillä (katso mallia edellisen demon Lumiukon tökkimisestä). Ohjainten lisäämiseen voit katsoa vinkkiä Pong-tutoriaaleista.

# pallot

G1. Räjähdys

Lisää edelliseen pallopeliin sellainen ominaisuus, että jos ohjattavalla pallolla osuu toiseen palloon kentän puolivälin yläpuolella, niin toinen pallo räjähtää ja poistuu pelistä (vinkki: Jypelin ohjeet. Pelin tarkoituksena on räjäyttää kaikki pallot.

# rajahdys
# eipeli

Korvaavia tehtäviä jotka ovat ei-pelejä

Tehtävät B1-B2 sekä G1 vaativat Jypelin käyttöä. Tähän kerätään vaihtoehtoisia tehtäviä, joissa on sama oppimistavoite, mutta voidaan tehdä tekstuaalisena konsolisovelluksena. Tehtävät ovat ensisijaisesti tarkoitettu niille, jotka eivät halua tai eivät voi käyttää Jypeliä. Tehtäviä voivat kuitenkin tehdä myös muutkin.

B1-2e. Piin likiarvo

Tehtävän tavoitteena on tehdä funktio, joka laskee piin likiarvon Monte-Carlo-simuloimalla.

Piin likiarvo voidaan laskea Monte-Carlo-simuloimalla seuraavasti:

  1. Arvotaan pistettä jonkin neliön sisälle.
  2. Lasketaan, moniko pisteistä osuu neliön sisälle asetetun ympyrän sisälle ()
  3. Lasketaan arvio ympyrän pinta-alalle käyttäen lukuja ja .
  4. Lasketaan saadusta ympyrän pinta-alasta.

Palauta vastauskenttään kokonainen ohjelma, joka sisältää pääohjelman ja toteuttamasi funktion.

Laske ja tulosta lisäksi pääohjelmassa piin likiarvo kun

(Huom. Kun olet tallentanut vastauksesi, arvioi oma suoriutumisesi tehtävästä asteikolla 0-2p. valitsemalla automaatin antaman pistemäärän vierestä Set custom points.)

# piin_likiarvo_e

Vinkkejä, jos jäät jumiin:

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.