Sinun UserID: 0

```

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

Ilmoittaudu missä ryhmässä (zoom) 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
  • Please to interact with this component.

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

    Ma 16-18 Zoomista
  • 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ä.
# aikajana
Tiedot päivittyvät tunnin välein. Viimeksi:

Please to interact with this component.

{}


Viikko 35
26.8.
36
2.9.
37
9.9.
38
16.9.
39
23.9.
40
30.9.
41
7.10.
42
14.10.
43
21.10.
44
28.10.
45
4.11.
46
11.11.
47
18.11.
48
25.11.
Luennot 1&2 3&4 5&6 7&8 9&10 11&12 13&14 15&16 17&18 19&20 21&22 23&24
Tärkeät ti: bonus
pe: HT1
Väli-
kysely
pe: Debug-
näyte

ti: bonus
pe: HT2
ti: bonus
pe: HT3
Tentti
pe: 2.12
dh 1 2 3 4 5 6 7 8 9 10 11 Summa %
Demot

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Korjattu

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Tunnit

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Ohjelmointi 1, s 2022 / Demo 4


Jos haluat harjoitella vastaavilla tehtävillä, joihin saat myös mallivastaukset, niin katso:

HUOM! Joka kerta on saatava vähintään 2p tähtitehtävistä! Alle 5p tehneillä on huono ennuste loppukurssissa.

Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä. Alla mainitut mallivastaukset näkyvät vasta kun demojen palautustilaisuudet on pidetty.

# vdr1
# vdr2

Oppimistavoitteet

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

# Oppimistavoitteet

Palautus

Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.

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

Demokerran päätteeksi 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 (=zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit. Tästä annettava 0.25 näkyy Pisteet-sivun demokerran summassa. Kirjoita pelkkä luku esim tyyliin 13.5

Ajankäyttösi tällä viikolla: Plugin numericfield error: Task id refers to another document, but you do not have access to that document.

# vaikeaa

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)

# korjattu

Kun tehtävien vastaukset on julkistettu (esim demopalautuksissa), pitää jokaisen korjata omat vastauksensa niin, että ainakin Tauno ja perustehtävät 1-6 tuottavat vähintään 1p kukin. Eli demon palautuksen jälkeen pitää demosivun näyttää vähintään 7 p.

Siis esim. ennen demo 2 tehtävien aloittamista pitää demoista 1 tulla vähintään mainittu pistemäärä.

Itsearvio A1 (vapaaehtoinen)

Video 1

Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 22 Lisää em. videosivulle vähintään 3-linkkiä ja kirjoita alla olevaan laatikkoon, mitkä linkit lisäsit. Joka demokerralle voi merkitä aina vähintään 3:sta linkistä yhden demotehtävän.

# video1

TDD-pohja

Tässä voit testata ohjelmiasi jos ComTest ei toimi koneellasi

# ComTestPohjaCSx

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

Mitähän tästä mahtaa puuttua?

VL: Taitaa tulla varoituksia, joita et ole noteerannut.

23 Sep 22 (edited 24 Sep 22)
# 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 ma 12.09.2022 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) Visual Studiossa 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

Miksi tässä tehtävässä tim vaatii aliohjelman nimeen "public static string" kun visual studiossa riittää vain "string"? Jos visual studiossa kirjoitan eteen public, tulee ilmoitus: "The modifier 'public' is not valid for this item"

VL: Sää oot todennäköisesti VisualStudiossas kirjoittanut sen funktiosi main-funktion sulkujen sisään jolloin siitä tulee sisäinen funktio josta ei julkista ihan helposti saakkaan. Eli katsolla huolella ne sulkujen paikat!

24 Sep 22 (edited 24 Sep 22)

Saan pisteiksi 0.9/1 vaikka ohjelma toimii ja testi menee läpi. Mistä voisi johtua?

VL: Ootkos käynyt dokumentit lukemassa?

25 Sep 22 (edited 25 Sep 22)

Kauan piti miettiä mistä dokumenteista on kyse, mutta löytyipä tuokin nappi nyt. Eli siitä oli kiinni, kiitos.

25 Sep 22

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

Eikös tuossa ohjelmassa pitäisi lukea: "Console.WriteLine("Toistan mitä sanot, mutta en osaa sanoa r:ää!");"

VL: eihän se osaa sanoa r:ää

Okei nyt on tyhmä olo :D

21 Sep 22 (edited 21 Sep 22)

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)

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"?
# 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

Saan pisteiksi 0.9/1 vaikka ohjelma toimii ja testi menee läpi. Mistä voisi johtua?

25 Sep 22

Juuh ei en ymmärrä miten tuo Console.Write osuus toimii.

25 Sep 22

Tehtävä 6. Merkkijonon pätkiminen

Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi (vinkki: IndexOf, Substring tai Split, Split vaatii taulukon jota ei vielä ole käsitelty, muista aina painaa Näytä koko koodi):

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);
}

Eikös tässä ole väärin päin AnnaEkaSana ja PoistaEkaSana? Koodissa lukee just toise päin

VL: Nyt en ymmärrä?

string kokonimi = Console.ReadLine();
string sukunimi = AnnaEkaSana(kokonimi); 

pitäisivät olla toiste päin niin kuin koodissakin? Kyse nyt siis tästä tehtävän esittelystä ilman katsomatta koodia

VL: en vieläkään ymmärrä? Ensin luetaan päätteeltä koko nimi ja sukunimi saadaab ekasta sanasta. Sillä kumpi sijoitetaan ensin (suku- vai etunimi), ei ole väliä, kunhan se pyydetään oikealla funktiolla. Se että tuossa on kaksi esimerkkiä, joissa on eri järjestys, ei muuta tulosta. Hyväkin että on erilaiset esimerkit, ettei kukaan luule että noiden kutsujärjestyksellä on tässä tapauksessa väliä.

21 Sep 22 (edited 21 Sep 22)
# Plugin3
# poistaekasana
# 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.

Linkki herjaa "404 page not found", vaikka kirjautuu JYU-tunnuksilla. Liittyen mallivastauksiin tuolta edellisten demojen linkistä eli pohjakoodia tehtävän tekoon ei löydy.

VL: Täsmennötkö mikä linkki?

VH: Tuo eka linkki vie demo2 G1-2 tehtävän kohdalle, ja kun viet kursorin tehtävänpalautustilan kohdalle pitäisi siihen yläpuolelle tulla "näytä mallivastaus" teksti näkyviin. Sitä kautta pitäsi ainakin näkyä.

VL: Eikö tuo SuorakulmiotFysiikalla.cs linkki toimi? OLetko kirjautunut koskaan Gitlabiin?

24 Sep 22 (edited 25 Sep 22)
# 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 tarkoituksen 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.