Sinun UserID: 0
Ilmoittaudu missä ryhmässä (live/zoom/video) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)
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.
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 2
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 ma 18.9 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.
- huomaa että Answer-linkistä pääset katsomaan muiden vastauksia kun palautusaika on ummessa
- mallivastaukset
- muiden vastaukset
Oppimistavoitteet
Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.
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 (tai zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen palautustilaisuuteen osallistuminen 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:
Please
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ä.
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 23 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.
Tauno T1 a
Lisää tulos-niminen muuttuja Taunoon. Tee ohjelma, joka laskee yhteen taulukon luvut niin, että lukujen summa on lopuksi tulos
-nimisessä muuttujassa.
(Muista painaa Taunoissa sekä Aja
että Test
että saat niistä kummastakin Taunosta sen 0.5 pistettä eli molemmista Taunoista yhteensä 1 p.)
Tauno T1 b
Lisää tulos-niminen muuttuja Taunoon. Tee ohjelma, joka laskee yhteen taulukon luvut niin, että parillisissa paikoissa olevien lukujen summa on lopuksi tulos
-nimisessä muuttujassa.
Ville V1
Tee Villestä tehtävät 2.2-2.6 ja 6.1-6.4.
Kerro tehtävän palautuksena mitä opit Villeltä.
Vinkki: Muodollinen parametri on "turkulaisten kielessä" aliohjelman esittelyssä oleva muuttujan nimi ja todellinen parametri sille kutsussa sijoitettu arvo (C#:n omassa dokumentaatiossa tämä on argument).
Villen tehtävä 2.6: Onko tuota mahdollista tehdä oikein vai pitäisikö "a++" olla "++a"?
VL: On mahdollista, eikä ole tarkoitus vaihtaa operaattoreita. (Think out of the Box)
—Pitääkö kaikista tehtäväksi annetuista Ville-tehtävistä saada täydet pisteet, eli pitääkö "jankata" niitä niin kauan, että on 10/10? Vai riittääkö, että tekee tehtävän läpi ja saa esim. 6/10.
VL: Sanoisin että Ville-tehtävät ovat omantunnon kysymys. Jos väärästä kuitenkin tietää mikä olisi oikea vastaus, niin se riittäköön TIMin suuntaan.
—Tehtävä 1. Lausekkeiden arvot
Mieti ensin kustakin alakohdasta, että mitä ohjelma tekee. Kirjoita päätelmä itsellesi ylös ja kokeile vasta sitten itse ohjelmaa (joka pitää korjata oikeaksi että sen voi ajaa). Ohjelmakoodin lukeminen on tärkeä taito. Voit myös kokeilla tehdä ohjelmat itse Riderilla. Kohtien a)-d) ohjelmien ajamisesta ei tule pisteitä, vaan niihin kuuluvien kysymysten vastauksista, kustakin alakohdasta max 0.25 p. Lue ensin huolella mitä kysytään ja miten pitää vastata.
a) Olkoon meillä seuraavanlainen pääohjelma:
Mitä viimeinen rivi (ennen aaltosulkua) tulostaa? Kirjoita yhdelle riville se luku minkä ohjelma tulostaa. Kun olet tallentanut vastauksesi voit täydentää luokan (class
, ks. alkuperäinen HelloWorld -ohjelma) yllä olevan koodin ympärille ja tarkistaa vastauksesi painamalla aja-nappia.
b) Miten tuloste muuttuisi, jos kaikki sulut otettaisiin pois riviltä
int x = a + b * ((2 - c) / a + b);
Kirjoita luku, jonka muutettu ohjelma tulostaisi.
Kun olet vastannut kysymykseen, voit tarkistaa vastauksesi muuttamalla 1. kohdan koodia.
c) Muutetaan pääohjelmaa seuraavasti:
Mikä ongelma tässä tulee? Mieti ja vastaa kysymykseen, ennen kuin käännät ohjelman. Kun ajat ohjelman, mitä huomaat?
d) Tehdään seuraavanlainen pääohjelma:
Mitä yllä oleva ohjelmanosa tulostaa? Mikä on c
:n arvo viimeisen rivin jälkeen? Vastaa kumpaankin kysymykseen yksi luku, kumpikin omalle rivilleen. Kun olet vastannut kysymykseen, voit tarkistaa vastauksesi ajamalla yllä olevan koodin (kunhan ensin korjaat sen toimivaksi).
Tehtävä 2. Binääriluvut
M: 26. Lukujen esitys tietokoneessa. Luento 04. Binäärilukujärjestelmässä on kaksi numeroa, nolla ja yksi. Tätä sanotaan bitiksi (binary digit). Vähiten merkitsevä eli viimeisimmäksi kirjoitettu bitti tarkoittaa lukumäärää yksi, toiseksi vähiten merkitsevä bitti lukumäärää kaksi, kolmanneksi vähiten merkitsevä lukumäärää neljä ja niin edelleen aina kakkosen potensseja jatkaen (8, 16, 32, 64, ...). Kokonaisen binääriluvun ilmoittama lukumäärä saadaan kun summataan nämä yksittäisten bittien ilmoittamat lukumäärät toisiinsa. Esimerkiksi binääriluku 1000101 olisi kymmenjärjestelmässä:
1*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 ==
1*64 + 0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 ==
64 + 4 + 1 == 69
Muunna seuraavat binääriluvut ihmiselle tutumpaan 10-järjestelmään:
10010
1001110001
1000000000000000
1010101010101011
10000000000000001
10000000000000010
10000000000000011
Muista vastaukseen laittaa myös aukilaskettuna se, miten sait tuloksen. Pelkkä numero ei riitä.
Nykytietokoneissa on tyypillistä jakaa muisti kahdeksan bitin mittaisiin tallennuspaikkoihin eli tavuihin (byte). Mikä on suurin kokonaisluku, jonka voit tallentaa kahden tavun (eli 16 bitin) kokoiseen tilaan (oletetaan että negatiivisia lukuja ei tarvitse esittää)? Entäpä jos pitää voida esittää positiivisia ja negatiivisia lukuja: mikä silloin on toisaalta pienin ja toisaalta suurin luku, joka kahden tavun kokoiseen tilaan mahtuu?
Tehtävä 3. Algoritmit
M: 3. Algoritmit: Kirjoita suomenkielinen (ei ohjelmointikielinen) algoritmi eli toimintaohje, jolla kuvaat:
- Miten "wanhasta" kirjan näköisestä paperisesta puhelinluettelosta etsitään tietyn henkilön puhelinnumero.
- Millaisella algoritmilla puhelinluettelosta löytyy tietyn numeron omistaja.
- Kumpi algoritmeista on nopeampi ja miksi?
(Vinkki: Lue Luku3).
Mitä jos ei ole koskaan käyttänyt paperista puhelinluetteloa eikä tiedä miten sieltä löytää numeroita ;_;
—Puhelinluettelon rakenne muistaakseni: Kansi -> mainoksia -> hakemisto josta selviää miltä sivulta alkaa mikäkin kirjain -> numerosivuja jossa henkilöiden ja yritysten nimiä aakkosjärjestyksessä (sukunimi ensin, etunimi sitten) ja nimeä vastaava puhelinnumero rivin lopussa.
—M: 3. Algoritmit: Pitäydy tässä tehtävässä vielä irti C#:sta ja muista ohjelmointikielestä. Kuvaile suomen kielellä tai korkeintaan ''pseudokoodilla'', miten jakaisit seuraavat tehtävät yhtä pykälää tarkemmiksi osatehtäviksi. Jaa sitten vielä kukin osatehtävä seuraavalle tasolle pienemmiksi osatehtäviksi. Käytä jotakin luonnollisia ilmauksia toistolle ja päätöstilanteille ("jos ... niin ... mutta muussa tapauksessa ..."):
- Tiskaaminen
- Kahvin keittäminen
- Ohjeet kuinka kurssin sivuilta löytää kurssilla käytettävän sanaston (joka ei siis ole se tynkä luentomonisten lopussa).
Tässä tehtävässä on mielestäni liikaa työtä yksinkertaisen pointin esiin tuomiseen.
VL: tuohan riippuu ihan siitä, miten yksityiskotaisia algoritmejä kirjoittaa. Ja en tiedä oletko tulkinnut tuon "yksinkertaisen pointin" ihan oikein tässä (vielä :-)
—Tehtävä 4*. ATK
ATK = Automaattinen TietojenKäsittely. Tässä tehtävässä yritetään motivoida miksi automaatio on tärkeää ja miksi ongelma pitää osata ensin tehdä itse ja vasta sitten miettiä ratkaisua joka automatisoi sen. Lisäksi opetellaan yleistämään ongelmaa.
Huomautus: Seuraava pitää lukea huolella monta kertaa ja ymmärtää ennenkuin lähtee tekemään! Eli tehtävä on erittäin paljon luetun ymmärtämistehtävä. Kuten oikeastaan kaikki asiakkaan ja ohjelmoijan välinen kommunikaatio.
Laskettava montako karkkia opettaja heittää luennolla keskimäärin.
Opettaja heittelee luennoilla karkkeja. Luennolla heitettyjen karkkien määrä on luentokerroittain kokonaislukutaulukossa (taulukko
). Ne luennot, joilla ei ole heitetty yhtään karkkia, jätetään laskematta tulokseen, eli keskiarvo lasketaan vain niiltä päiviltä, jolloin karkkeja on heitetty. Luonnollisesti myös negatiiviset arvot hylätään. Keskiarvon laskeminen lopetetaan (eli keskiarvo on tätä edeltävien hyväksyttyjen alkioiden keskiarvo) mikäli taulukosta tulee vastaan luku 99 tai suurempi. Laskeminen lopetetaan luonnollisesti myös mikäli taulukon alkiot loppuvat.
Jotta algoritmi olisi yleiskäyttöisempi annetaan taulukon
lisäksi parametrina minimiarvo (vialliset
), joka vastaa alkuperäisen ongelman arvoa 0
(eli alkuperäisen "negatiiviset" tarkoitti että pienempiä tai yhtä suuria kuin vialliset
). Yleiskäyttöisyyden vuoksi algoritmille annetaan vielä parametrina lopetusarvo, joka vastaa alkuperäisen ongelman arvoa 99
(lopetus
). Mikäli keskiarvoa ei voi laskea, käytetään laskun tuloksena vialliset
arvoa.
Laske em. sääntöjen mukaiset keskiarvot seuraavista arvoista. Aluksi on muutama mallilasku (M1, M2 ja M3). Perustapausta vastaa alla olevan taulukon mallilasku M1 (vialliset = 0
, lopetus=99
).
Vastatakseni (ulkopuolisena), -1>-10. Tehtävänannon ensimmäinen osa johtaa harhaan hylkäyssääntöjen raja-arvojen osalta, kaikki raja-arvot uusittiin ja mukana maininnat 0 ja neg arvoista eivät sellaisinaan päde.
VL: Ei johda harhaan, vaan se on ensimmäinen tulkinta, jolle sitten on tehty yleistys.
Oletko tehnyt vääränlaisen yleistyksen?
nr | taulukko | vialliset | lopetus | tulos |
---|---|---|---|---|
M1 | 12, 0, 42, 14, 99, 12, 55 | 0 | 99 | 22.667 |
M2 | 1, 2, 3, 0 | -2 | 10 | 1.5 |
M3 | 1, 2, 3, 0 | -2 | 0 | -2 |
1 | 12, 0, 42, 14, 99, 12, 55 | 1 | 42 | |
2 | 12, 0, 42, 14, 100, 12, 55 | -1 | 41 | |
3 | 12, 0, 42, 14, 99, 12, 55 | 0 | 0 | |
4 | tyhjä | 0 | 99 | |
5 | 0, 10 | 0 | 99 | |
6 | -1, -2, 99, 1 | 0 | 99 | |
7 | 12, 0, 42, 14, 99, 12, 55 | 99 | 0 | |
8 | 12, 0, 42, 14, 99, 12, 55 | 98 | 0 | |
9 | -1, 0, 1 | -10 | 99 | |
10 | -1, 0, 1 | -1 | 99 |
Tehtävän koko pointti vaikuttaa olevan tietoinen harhautus ilmaisemalla erittäin yksinkertainen algoritmi monimutkaisesti parin virkkeen sijaan. Tästä syystä tehtävä on "luetun ymmärtämistehtävä". Ilmaisussa on myös lieviä rakenteellisia vikoja, joita lopputuleman tietävä ei havaitse, mutta joista tehtävää noviisina lähestyvä tarkka ajattelija häiriintyy. Ensimmäisessä kappaleessa ei esimerkiksi esitellä muuttujia nimillä yksiselitteisesti, ja pian niihin viitataan niiden arvoilla tai kuvauksilla. Lukijan täytyy harkita pari vaihtoehtoista tulkintaa ja lopulta vetää yhtäläisyysviivat kolmen ilmaisun välille: "vastaa -- arvoa 0"="luennot, joilla ei ole heitetty yhtään karkkia"=vialliset = 0".
VL: Sitähän se ohjelmointi on. 1) on jokin ongelma joka ei ole lausuttu mitenkään "ohjelmointikielellä". 2) Siitä muokataan ehkä ohjelma, mutta havaitaan että siitä saisi yleiskäyttöisemmänkin. Mutta ei sitä ratkaisua asiakas anna suoraan, vaan se pitää koodarin kaivaa. Se että algoritmi on yksinkertainen, ei tarkoita että se valmiiksi pitäisi opiskelijalle sellaisenaan antaa.
—Huom! Videossa pitäisi -2 kohdalla sanoa että hylätään "miinus kaksi" ja pienemmät. Miinus on unohtunut sanoa. Tosin arvolla ei ole merkitystä hylkäämisen suhteen tässä tapauksessa. Kun videoon laittaa tekstityksen päälle, niin sillä näkee virheen.
Tehtävä 5*. Portaat
M: 6. Aliohjelmat: Täydennä alla oleva ohjelma Portaat.cs
toimimaan niin, että se piirtää 5 porrasta. Ole tarkkana että ohjelma muodostaa kokonaisuuden, eli katso Näytä koko koodi
kohdasta että mitä on valmiina (luokka), eli älä lisää sitä enää.
Vinkki: Ympyrän (katso luentojen PiirraPallo
, Shape.Circle
on oikeastaan sama kuin Shape.Ellipse
kun leveys ja korkeus ovat samoja) tilalla Shape.Rectangle. Älä tee muutoksia mihinkään muualle kuin Täydennä
merkittyihin kohtiin! (Huomaa että TIMissä on ohjelmarunkoa sen kirjoitusikkunan ulkopuolella - katso Näytä koko koodi
- eikä using tai Main
rivejä kirjoiteta. Ole tarkkana myös sulkujen kanssa! Samoin jos ajetaan Riderissa Jypelin projektimalleista tehtynä, niin Main
menee Ohjelma.cs
tiedostoon ja omaan koodiin ei enää saa Main-funktiota
kirjoittaa. )
Huom! Videolla sanotaan että 0,0 on neliön nurkassa ja tehtävässä että se on neliön keskipisteessä. Tehtävän saa tehdä kummalla tavalla tahansa. Tulevissa demoissa tosin on hyötyä että 0,0 on nurkassa.
Huom! Koodin saat kopioitua Rideriin ja takaisin seuraavasti (ja käytä tätä samaa tekniikkaa kaikissa tulevissa demoissa):
- Paina
Näytä koko koodi
-linkkiä. - Katso mikä on luokan nimi (tässä tapauksessa
Portaat
). - Luo projekti, jonka nimi on sama kuin em. luokan nimi.
- Paina
Copy
-linkkiä silloin, kun koko koodi on näkyvissä TIMIssä. - Liitä koodi Riderissa (tässä esimerkissä
Portaat.cs
tiedostoon)Ctrl-A
Ctrl-V
(Macissa tietysti Ctrl-tilalla Macin vastaava)
- Muokkaa ohjelma toimivaksi. ÄLÄ HÄVITÄ
// BYCODE..
sisätäviä rivejä, niiden perusteella TIM poistaa sen koodin jota ei palauteta. - Kun toimii Riderissa, niin kopioi koko vastaus (
Ctrl-A
Ctrl-C
) - Liitä vastaus TIMin ohjelma-alueessa (
Ctrl-A
Ctrl-V
) Aja
Document
(ja katso millainen dokumentti tuli, käy kaikissa dokumentin linkeissä)
Kohta 8. sanooo että liitä vastaus (Ctrl-A Ctrl-V), mutta varmaan on tarkoitus jättää Riderista kopioimasta koodista pois nuo mitä TIMissä on valmiina (using... , namespace... jne.)? Jos liittää kaiken suoraan Riderista, ei koodi tule toimimaan.
VL: Jos tuo tehdään just oikein eikä hukata sinne syntyviä // BYCODEBEGIN // BYCODEEND -rivejä, niin TIM osaa poistaa niiden ulkopuolisen osan.
—Vinkki: Katso 4. luennon LumiukkoAli, jossa piirretään pallo (mutta on myöskin aliohjelma PiirraLumiukko
, jota ei tarvita tässä tehtävässä tai oikeastaan tämän tehtävän pääohjelma (Begin
) on kuten PiirraLumiukko
luennon tehtävässä.
Tuloksen pitäisi näyttää sijaintia lukuunottamatta tältä
Vinkki: Jos haluat sijainninkin samalla tavalla kuin mallikuvassa, voit lisätä Begin
-metodin loppuun: Camera.ZoomToAllObjects(50);
Loppuun lisääminen tarkoittaa että laitetaan ennen Begin
-metodin lopettavaa aaltosulkua.
Tehtävä 6. Ympyrät kolmion muotoon
M: 6. Aliohjelmat: Aja alla oleva ohjelma, joka piirtää lumiukon.
Huom! Yritä tehdä ohjelmasta sellainen, että ympyröiden säde on yhdessä paikassa. Tällöin muuttamalla sädettä syntyy täsmälleen samanlainen kuva, eri "mittakaavassa". Saat merkitä tehtävästä yhden pisteen vaikket tuossa "yleistämisessä" vielä onnistuisikaan.
- Muuta ohjelma sellaiseksi, että yksittäisen pallon piirtämiseksi on oma aliohjelma
PiirraPallo
. Mieti mitä parametreja pallon piirtämiseksi tarvitaan. - Muuta sitten ohjelma sellaiseksi, että se piirtää kuusi ympyrää kolmeen riviin siten, että ympyrät juuri koskettavat toisiaan. Alla mallikuva ratkaisusta. Anna ympyröille säteeksi 50.
Vinkki: Piirrä paperille kolme toisiaan sivuavaa ympyrää ja niiden keskipisteiden muodostama kolmio. Laske kolmion korkeus (ks. System.Math.Sqrt. Esimerkiksi Pythagoraan lauseesta saataisiin hypotenuusan c
pituus ratkaistua näin: c = Math.Sqrt(a*a + b*b)
).
Yritän laskea kolmion korkeutta ja en ymmärrä miksi tälläinen virhe tulee? Eikö double tyyppisia muuttujia voi laittaa neliöjuureen tai potenssiin? Cannot apply operator '^' to operands of type 'double' and 'double' Tuolta näyttää rivi miltä herjaa tuota double a = Math.Sqrt((2*r)^2 - r^2);
VL: kielessä ei ole tuollaista ^
-operaattoria. Riittää ihan r*r
tyyliin.
Saan pallot asettumaan "oikein", mutta jostain syystä en pääse matemaattiseen ongelmaan "kiinni". Piirsin kuvion ruutupaperille koordinaatistoon ja saan mielestäni x- ja y-koordinaatit r:n kertoimina suoraan kuvasta. Koodissa ne ei kuitenkaan toimi. Miksi haluaisin laskea hypotenuusan kun teidän jo että a=r ja b=r? XD
VL: Minä en kyllä millään osaa tuota laskea käyttämättä vanhaa Pythagoraan-kaava ja sitä kautta neliöjuurta. Minusta tuossa sinun kuvassasi pallot eivät täysin sivua toisiaan.
Olet tod.näk. oikeassa ja minä väärässä. Laskemalla tulos on eri.
—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 tehtävästä osan ja kolmanteen demoon osan, kunhan kumpaankin merkkaamasi (demo2 + demo3) summa on sama kuin Liukuhihnatehtävän pistemäärä.
Huom! Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!
B1. Harjoitustyö
Kurssille kuuluu harjoitustyö, mutta mitä harjoitustyössä sitten pitäisi tehdä? Jollei valmista peli-ideaa ole, tutustu aiempien vuosien tuotoksiin ja raportoi mietteesi kolmesta eri (Jypeli) pelistä tai ei-pelistä. Liitä mukaan myös linkki, mistä ko. pelin/videon/ohjelman löytää.
Alla linkkejä, mistä voi löytää peleihin liittyviä videoita ja itse pelejä:
Katso myös video GalaxyTripin tekemisestä ja sen lähdekoodi.
B2. Alice ja puut
Tämä jälkeen ei ole enää Alice-demoja, eli jos sitä ei ole vielä asentanut, niin kannattaa miettiä asentaako tämän takia.
Joko Alice 2.3: Aloita avaamalla Alicen luisteluesimerkki Eli aloita luistelu-tutorial ja poistu siitä saman tien. Taustalla on puita. Laita kaksi niistä saapumaan luistelijan luo niin, että ensimmäinen saapuu 2 sekunnin aikana ja "kaatuu" 45 astetta vasemmalle sen jälkeen, kun toinen on saapunut. Ensimmäisen kaatumisen jälkeen toinen kaatuu 45 astetta oikealle. Tehtävän vastauksena palauta lisäämäsi "ohjelmarivit" käsin tekstiksi kopioituna tyyliin
IceSkater.do simple spin
Tai Alice 3: Luo maailma missä on vähintään 3 "oliota". Sitten kuten edellä että kaksi saapuu sen kolmannen luo ja kaatuu kuten edellä.
B3. Khan Academy ja Code Org
Tässäkin kannattaa miettiä viekö erilainen materiaali omaa edistymistä eteen- vai taaksepäin. Jotkut kokevat hyödylliseksi, toiset ajanhukaksi.
Tee Khan Academyn "luennot" Intro to Variables ja More on Variables. Kokeile lisätä koodiin joku oma muuttuja ja kokeile muutella sitä.
Kokeile myös Code.orgia
Tehtävän vastauksena kerro mielipiteitä Khan Academyn "luennoista" ja käytön järkevyydestä tällä kurssilla.
G1-2. Tippuvat suorakulmiot
Tee ohjelma nimeltä SuorakulmiotFysiikalla.cs
. Tee siihen aliohjelma nimeltä PiirraSuorakulmio()
, joka lisää ruudulle (peliin) PhysicsObject
-tyyppisen suorakulmion. Tee aliohjelma siten, että se ottaa parametrinä pelin, suorakaiteen koordinaatit ja mitat. Laita peliin vielä painovoima seuraavasti (2d-vektori ottaa vastaan kaksi koordinaattia) ja sijoita se Begin()
-aliohjelmaan
Laita kenttään myös reunat, etteivät palaset putoile ulos ruudusta.
Lisää kentälle 100 satunnaisen kokoista suorakaidetta satunnaiseen paikkaan. Vinkki: for-silmukka ja RandomGen.
Voisi sanoa selkeämmin mitä "satunnainen koko" tässä meinaa käytännössä, omiin suorakulmioihin laitoin maksimiksi 100x100 (kun kenttä on 1000x1000) ettei menisi liian holtittomaksi ja se näyttää suht. hyvältä mutta kauneus on lopulta katsojan silmissä, kokohan voisi olla maksimissa vaikka 1000x1000 jos haluaa hullutella.
VL: Guru-tehtävä! Mitään ei määritellä tarkasti. Koodari ei koskaan saa tarkkoja speksejä, jos saa, niin sen nimi on valmis ohjelma.
—HUOM! Vastauksen tallentaminen kestää, koska tästä tehdään palvelimella muutaman sekunnin video joka sitten näytetään tallentamisen jälkeen.
Minulle jäi vähän auki, että mitä "peli.Add(p);" tekee. Yhdessä tehtävässä tuli virheilmoitus kun tuo oli mukana ja toisessa taas se piti olla.
VL: Lisää siis sen p:n siihen peli
-nimiseen olioon. Jos samaa yrität Begin
metodissa, niin se valittaa, ettei tiedä mikä on peli
. Siellä se kohde mihin lisätään on se peliolio itse, eli this
. Sellaisissa paikoissa missä this
on olemassa (eli ei-staattisten metodien sisällä, meillä lähinnä tuo Begin
), sen saa kirjoittaa siihen, mutta ei ole pakko kirjoittaa. Eli siellä pitäisi oikeasti olla this.Add(p)
. Kun mietit informaation määrää, niin pakkohan on jollakin tavalla kertoa mihin lisätään ja mitä lisätään. Siksi pelkkä Add(p)
ei voisi olla mielekäs, koska kukaan ei tietäisi mihin lisätään (paitsi tuossa mainitussa Begin
-metodissa koska se käsittelee itseään, niin jos ei muuta sanota, niin toimet kohdistuvat siihen itseensä).
Sulla on muuten tuossa liikaa sulkuja, vertaa luennon LumiukkoAli
. Niiden takia tuo sun aliohjelma PiirraNelio
ei voi olla public
kuten saisi olla. Sä muuten myös piirrät 101 neliötä
Kiitos!
—Palautteena tehtävästä, että tämä tehtävä oli hauskaa yrittää tehdä. Tämä on erinomainen tehtävä ja suosittelen muidenkin yrittää tätä, jos vähääkään kokemusta on koodailusta tai jos haluaa muuten vaan kokeilla. :D
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.