Demo 2
Huomautus: Lopulliset demotehtävät julkaistaan aina tasan viikkoa ennen deadlinea. Demotehtäviin saattaa ennen sitä tulla muutoksia tai korjauksia. Tehtäviä voi tulla lisää tai tehtäviä voi poistua. Tehdessäsi tehtäviä ennen virallista julkaisua, ota tekemästäsi koodista aina varmuuskopio omalle tietokoneellesi.
*Palauta viimeistään ma 22.1. klo 11:59. Voit täydentää vastauksia määräaikaan mennessä.
Vinkki: Pidä tehtäviä tehdessäsi aina esillä kynä ja paperia.
Osaamistavoitteet
Tämän demokerran päätteeksi
- osaat laskea lausekkeen arvon,
- osaat sijoittaa muuttujaan arvon,
- ymmärrät aliohjelmien perusajatuksen, ja osaat kirjoittaa itse yksinkertaisen aliohjelman,
- muistat, miten kaksi- ja kymmenjärjestelmä liittyvät toisiinsa, ja osaat muuntaa 2-järjestelmän lukuja 10-järjestelmään
Ajankäyttösi tällä viikolla (0.5 p.)
Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.
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 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.
Tehtävä 1
Lue ensin: 7. Muuttujat
Vastaa kysymyksiin 1.1–1.4. Yhteenlaskettu maksimipistemäärä on 1 p. Jos haluat vastaamisen jälkeen kokeilla toimintaa Riderissa, täydennä luokka (public class...
) pääohjelman ympärille.
Kysymys 1.1. Mitä seuraava ohjelma tulostaa? Vastaa kysymykseen ennen kuin kokeilet toimintaa Riderissa tai Timissä. Voit antaa kysymykseen vastauksen vain kerran. (0.25 p.)
Kysymys 1.2. Otetaan kaikki sulut pois. Mitä ohjelma tulostaa nyt? Voit antaa kysymykseen vastauksen vain kerran. (0.25 p.)
Kysymys 1.3. Muutetaan pääohjelmaa seuraavasti:
Mikä ongelma ohjelmaa ajaessa tulee? Vastaa kysymykseen ennen kuin kokeilet toimintaa Riderissa tai Timissä. (0.25 p.)
Kysymys 1.4. Tee seuraavanlainen ohjelma:
Mitä ohjelma tulostaa? Vastaa kysymykseen ennen kuin kokeilet toimintaa Riderissa tai Timissä. (0.125 p.)
Mikä on c-muuttujan arvo viimeisen rivin jälkeen? (0.125 p.)
Tehtävä 2
Tee a- ja b-kohdat. Yhteenlaskettu maksimipistemäärä on 1 p.
(a) Muokkaa alla olevaa ohjelmaa siten, että se tulostaa tekstin
Moi Anonymous user! TIM-käyttäjänumerosi on 0.
Mitään muuta ei saa tulostua. HUOM! Sinun tulee käyttää ohjelmassa olevia muuttujia nimi
ja kayttajaNro
. Et siis saa kirjoittaa näin:
Console.WriteLine("Moi Anonymous user...");
(b) Tämä tehtävä kannattaa tehdä Riderissa, jolloin sen kokeileminen on hieman helpompaa. Copy-pasteta vastauksesi lopuksi Timiin. Tee ohjelma, joka pyytää käyttäjää syöttämään nimensä ja lempiruokansa. Alla esimerkki.
Anna nimesi > Anonymous user
Anna lempiruokasi > Makaronilaatikko
Tämän jälkeen ohjelma tulostaa tekstin:
Moi Anonymous user! Makaronilaatikko on minunkin lempiruokaani!
Tulosteiden on oltava tuossa muodossa, eikä ylimääräisiä rivinvaihtoja saa olla.
Käyttäjältä voidaan lukea yksi rivi syötettä näppäimistöltä (Enterin painallukseen saakka) seuraavasti.
Käyttäjän syöttämä teksti tallentuu syote
-nimiseen muuttujaan. HUOM! Sinun tulee tulostuksessa käyttää tekemiäsi muuttujia joihin tallensit syötteet (nimen ja lempiruoan). Et siis saa kirjoittaa näin:
Console.WriteLine("Moi Anonymous user! Makaronilaatikko on...");
Huomaa myös, että voit tulostaa tekstiä ilman rivinvaihtoa kutsumalla Console.Write("Tulostettava teksti");
. Tätä tarvitaan ennen kuin käyttäjältä pyydetään syöte.
Tehtävä 3*
Tee kaikki kohdat 1-3.
Lue ensin: 7.3.2. Muuttujan arvon muuttaminen
Tehtävä 3.1. Mitä alla oleva pääohjelma tulostaa? Kirjoita vastaus alla olevaan tehtävälaatikkoon.
public static void Main()
{
int a = 5;
int b = a;
b++;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
}
Kokeile nyt kirjoittaa vastaava koodi tämän tehtävän alimpaan laatikkoon. Luokka (public class
jne.) täytyy itse täydentää pääohjelman ympärille.
Tehtävä 3.2. Entä jos viimeisen tulostuslauseen jälkeen lisätään seuraavat rivit?
a = b;
a = 15;
Mieti ensin, mitä ohjelma tulostaa (tätä ei tarvitse kirjoittaa vastauslaatikkoon).
Varsinainen kysymys: Paljonko on b
:n arvo nyt?
Kokeile myös ajaa tämä ohjelma tehtävän lopussa olevassa koodilaatikossa näiden muutosten jälkeen kuten edellisessäkin kohdassa.
Tehtävä 3.3. Lisää vielä edellisten rivien perään seuraavat rivit.
double c = b + a;
System.Console.Write("Summa on ");
System.Console.WriteLine(c);
Mitä tulostuu?
Tehtävän 3 Tarkistuslaatikko
Tarkista vastauksesi kirjoittamalla koodi alla olevaan ikkunaan (muista laittaa myös public class
määrittely) ja klikkaa aja
.
Tehtävä 4*
Lue ensin: 6. Aliohjelmat: Täydennä alla oleva ohjelma Portaat.cs
toimimaan kuten kommenteissa on sanottu.
Tuloksen pelissä pitäisi näkyä viisi valkoista neliötä alla olevalla tavalla.
Jos haluat sijainninkin samalla tavalla kuin mallikuvassa, voit lisätä Begin
-aliohjelman loppuun
Camera.ZoomToAllObjects(50);
Arviointi: Käytä Set custom points -toimintoa. 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.
Tehtävä 5
Lue ensin: 6. Aliohjelmat: Aloita ajamalla alla oleva lumiukko-ohjelma. Voit myös viedä ohjelman Rideriin.
Tehtävä: Tehtävä on kaksiosainen. (1) Muuta ohjelma sellaiseksi, että yksittäisen pallon piirtämiseksi on oma aliohjelma PiirraPallo
. (2) Muuta 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ä kynällä paperille kolme toisiaan sivuavaa ympyrää ja niiden keskipisteiden muodostama kolmio. Saat laskettua kolmion korkeuden Pythagoraan lauseen avulla \(a^2+b^2 = {c^2}\). Kaavassa a on pallon säde (kateetti), c on kaksi kertaa pallon säde (hypotenuusa) ja b on etsittävä kolmion korkeus (kateetti).
Niinpä kun haluamme tietää b:n arvon, siirretään a yhtälön toiselle puolelle, \(b^2 = c^2 - a^2\), ja otetaan kummastakin puolesta neliöjuuri: \(b = \sqrt{c^2 - a^2}\). Koodina tämä olisi
Lisätehtävä (+ 1 bonuspiste): Tee ohjelmasta sellainen, että ympyröiden säde on yhdessä ainoassa paikassa. Ja muuttamalla sädettä (eli yhtä lukua yhdestä paikasta) tulee täsmälleen samanlainen kuva, vain eri "mittakaavassa". Jos teet myös lisätehtävän, saat merkitä tästä tehtävästä 2 pistettä. Kahteen pisteeseen kuitenkin vaaditaan, että et ole "arvannut" ympyröiden paikkoja. Ympyröiden paikkojen laskemisessa voi hyödyntää System.Math.Pow -potenssifunktiota.
Huomaa että TIMissä on ohjelmarunkoa sen kirjoitusikkunan ulkopuolella eikä using
-lauseita tai Main
-pääohjelmaa rivejä kirjoiteta. Samoin jos ajetaan Riderin Jypelin projektimalleista tehtynä, niin Main
menee Ohjelma.cs
-tiedostoon ja omaan koodiin ei enää saa Main
:a kirjoittaa.
Arviointi: Käytä Set custom points -toimintoa. 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.
Tehtävä 6
Lue ensin: 26. Lukujen esitys tietokoneessa.
Binäärilukujärjestelmässä on kaksi numeroa, nolla ja yksi. Yhtä tällaista arvoa sanotaan bitiksi (bit, binary digit). Vähiten merkitsevä eli viimeisimmäksi kirjoitettu bitti tarkoittaa 10-järjestelmän lukua yksi, toiseksi vähiten merkitsevä bitti lukua 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*64 + 0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*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ä. Aloita jokainen vastaus uudelta riviltä.
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ää)? Vastaus pitää antaa 10-järjestelmän lukuna.
Entä jos pitää voida esittää positiivisia ja negatiivisia lukuja: mikä silloin on toisaalta pienin ja toisaalta suurin luku, joka kahden tavun kokoiseen tilaan mahtuu? Kirjoita ensin isoin luku ja sen jälkeen pienin. Tässäkin vastaus annetaan 10-järjestelmän lukuina. HUOMAUTUS: Voit tehdä itse valinnan, onko negatiivisille luvuille käytössä suora tulkinta, yhden komplementti vai kahden komplementti. Vastaus hyväksytään minkä tahansa oletuksen mukaisesti.
Tehtävä 7, TIMiin tutustuminen
Tehtävä 7.1. Jokaisen kurssin sivun yläpalkissa on lista joka alkaa Koti
ja loppuu Omat tiedot
. Käy jokaisella sivulla ja kirjoita alle kustakin n. 1-2 rivin mittainen kuvaus siitä, mitä sivulla on.
Tehtävä 7.2. Seuraavissa tehtävissä kopioi osoitepalkissa oleva sivun/sivujen osoite/osoitteet kunkin tehtävän vastaukseksi. Sivuilla tarkoitetaan Ohj1-kurssin TIM-sivuja, ei Googlella löydettyjä satunnaisia sivuja. Vastauksiin ei myöskään laiteta sivuja, joiden osoitteessa esiintyy jokin tietyn kurssin aika tyyliin 16k3op
tai 2017s
. Paitsi jos erikseen kysytään jonkin tietyn vuoden sivua. Vinkki: Hakutoiminto (suurennuslasi) löytyy sivun oikeasta yläreunasta.
Tehtävä 7.3. Kun Tehtävässä 4 klikkailet linkkiä Tavallinen/Highlight
mitä tapahtuu? Kun klikkailet Tehtävässä 5 linkkiä Näytä koko koodi
, mitä tapahtuu?
Tauno T1a (0.5 p.)
Lisää aluksi Taunossa tulos
-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee yhteen taulukon luvut niin, että lukujen summa on lopuksi tulos
-nimisessä muuttujassa. Jotta saisi puoli pistettä pitää ohjelman antaa haluttu tulos Aja-painikkeella, ja myös Test-painikkeella.
Tarkista, että olet kirjoittanut tulos
-muuttujan nimen pienellä.
Tauno T1b (0.5 p.)
Lisää aluksi Taunossa tulos
-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee yhteen taulukon luvut niin, että parillisissa paikoissa (indeksit 0, 2, 4) olevien lukujen summa on lopuksi tulos
-nimisessä muuttujassa.
Tarkista, että olet kirjoittanut tulos
-muuttujan nimen pienellä.
Ville V1
Tee Villestä tehtävät 2.2-2.6 ja 6.1-6.4. Muodollinen parametri on "turkulaisten kielessä" aliohjelman esittelyrivillä oleva muuttujan nimi (meillä tästä käytetään nimeä parametri), ja ''todellinen parametri'' sille kutsussa sijoitettu arvo (meillä argumentti).
Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.
B1
Tee kohdat 1 ja 2. Kummastakin max 0.5 pistettä, eli tehtävästä saa yhteensä max 1 p.
Lue ensin: 3. Algoritmit
Johdanto: Algoritmi eli toimintaohje kuvataan usein perättäisinä askelina, joita edetään perättäisesti, tai tarvittaessa toistaen. Sinun pitäisi kirjoittaa tällainen toimintaohje perättäisinä askelina. Esimerkiksi, kuvitteellinen siirtyminen Agoran ala-aulasta työhuoneeseen voitaisiin kuvata seuraavilla askeleilla.
- Mene C-siiven portaiden juurelle.
- Kävele kerros ylöspäin.
- Jos olet kerroksessa nro 4, mene seuraavaan kohtaan. Muuten, palaa kohtaan 2.
- Kävele eteenpäin, kunnes näet huoneen C414.2. Olet perillä.
Osa 1 (0.5 p.)
Kirjoita suomenkielinen (ei ohjelmointikielinen) algoritmi eli toimintaohje, jolla kuvaat, miten "wanhasta" puhelinluettelosta (siis sellainen kirjan näköinen, paperinen puhelinluettelo) etsitään tietyn henkilön nimi. Entä millaisella algoritmilla puhelinluettelosta löytyy tietyn numeron omistaja? Kumpi algoritmeista on nopeampi ja miksi? (Vinkki: Lue https://tim.jyu.fi/view/2#algoritmin-suunnittelu).
Osa 2 (0.5 p.) Pitäydy tässä tehtävässä vielä irti C#:sta ja muista ohjelmointikielestä. Kuvaile suomen kielellä tai 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 ("toista ... kunnes ...") ja päätöstilanteille ("jos ... niin ... muuten ..."): Kirjoita kaikki kohdat a-c samaan vastauslaatikkoon:
- tiskaaminen,
- kahvin keittäminen,
- tiedoston etsiminen nimen perusteella tietokoneen tiedostojärjestelmästä olettaen, että valmista hakutoimintoa ei ole käytettävissä.
B2
Tee Khan Academyn neljä "luentoa" Intro to Variables, Using Variables, Challenge: Bucktooth Bunny ja More on Variables. Neljännessä tehtävässä (More on Variables) piirrä Winstonille hattu.
Tehtävän vastauksena palauta koodi neljännestä tehtävästä. Kirjoita perään lyhyt oppimispäiväkirja (mitä teit, mitä opit, jäikö jotain epäselvää).
B3
Innovoi jokin ongelma/idea jonka voisi ratkaista ohjelmateknisesti/järjestelmällä jossa ohjelmateknisellä ratkaisulla on oma roolinsa. Kirjoita lyhyt selostus ongelmasta ja sen ratkaisuideasta. Muista että idea voi olla hyvinkin lennokas (esimerkiksi Microsoftin opiskelijakilpailun voittajasovellus auttoi säästämään 50 % kasteluvettä Australiassa). Saat merkitä itsellesi 1 demopisteen, jos idea on sinunkin mielestäsi OIKEASTI hyvä. Tekijänoikeus säilyy keksijällä. AMK:ssa tällaisella kyselyllä syntyi useita jatkokehitykseen menneitä innovaatioita.
G1-2 (2 p.)
Tee ohjelma nimeltä SuorakulmiotFysiikalla.cs
. Tee siihen aliohjelma nimeltä PiirraSuorakulmio()
, joka lisää ruudulle (peliin) PhysicsObject
-tyyppisen suorakulmion. Tee aliohjelma siten, että se ottaa parametrina suorakaiteen koordinaatit ja mitat. Laita peliin vielä painovoima seuraavasti (2d-vektori ottaa vastaan kaksi koordinaattia) ja sijoita se Begin()
-aliohjelmaan
Gravity = new Vector(/*täydennä 2d-vektorin parametrit...*/);
ja laita kenttään reunat, etteivät palaset putoile ulos ruudusta.
Level.CreateBorders();
Lisää kentälle 100 eri kokoista suorakaidetta. Vinkki: for
-silmukka ja RandomGen
.
Huomaa, että tämä tehtävä on tehtävä Riderissa. TIMissä näkyy pelistä vain ensimmäinen frame ilman minkäänlaista liikettä.
G3-4 (2 p.)
Tee tarvittavat aliohjelmat jotta voit tehdä aliohjelmakutsun TeeLumiukko
kaikilla seuraavilla tavoilla. Ratkaisussa ei saa olla toistoa koodissa, eli esimerkiksi pallon luontikoodia ei saa olla monessa aliohjelmassa.
Kun olet mielestäsi valmis, laita itse pisteesi "Set custom points"-toiminnolla, enintään 2.0 pistettä.
TeeLumiukko(5); // tekee 5-palloisen lumiukon origoon, väri valkoinen
TeeLumiukko(3, 100, 100); // 3 palloa, alin pallo x=100, y=100, väri valkoinen
TeeLumiukko(4, -100, -100, Color.Green); // 4 palloa, alin pallo x=-100, y=-100, väri vihreä
Vinkki/ohje: Aliohjelman kuormittaminen
Muistutuksena ohjaajille, opiskelijat eivät tee näitä
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.