Demo 2
Palauta demot ma 25.1.2016 klo 11:59 mennessä.
Vinkki: Pidä aina esillä kynä ja paperia. Koskee myös ohjausryhmiä.
Oppimistavoitteet
Tämän demokerran päätteeksi
- osaat laskea lausekkeen arvon,
- osaat sijoittaa (lausekkeen) arvon muuttujaan,
- 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
Tehtävä 1
Mieti ensin kustakin alakohdasta, että mitä ohjelma tekee. Kirjoita päätelmäsi ylös ja kokeile vasta sitten itse ohjelmaa. Ohjelmakoodin lukeminen on tärkeä taito.
Lisäys: kohtien a\(-\)d ohjelmien ajamisesta ei tule pisteitä, vaan niihin kuuluviin kysymyksiin vastaamisesta. Kustakin kohdasta saa 0.25 pistettä, yhteensä tehtävästä voi siis saada max 1 p.
- Olkoon meillä seuraavanlainen pääohjelma.
Mitä viimeinen rivi (ennen aaltosulkua) tulostaa? Kirjoita yhdelle riville se luku minkä ohjelma mielestäsi tulostaa. Kun olet tallentanut vastauksesi painamalla Aja-painiketta, voit täydentää luokan (public class
jne.) yllä olevan pääohjelman (Main
) ympärille ja tarkistaa vastauksesi painamalla Aja-nappia yllä olevalle koodille.
B. Miten tuloste muuttuisi, jos kaikki sulut otettaisiin pois riviltä
int x = a + b * ((2 - c) / a + b);
Kirjoita luku, jonka ohjelma tulostaisi.
Kun olet vastannut kysymykseen, voit tarkistaa vastauksesi muuttamalla 1. kohdan koodia.
C. Muutetaan pääohjelmaa seuraavasti:
Mikä ongelma tässä tulee? Mieti, ennen kuin käännät ohjelman. Kun ajat ohjelman, mitä huomaat?
D. Tehdään seuraavanlainen pääohjelma:
Mitä ohjelma 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.
Tehtävä 2
Tee kohdat 1 ja 2. Kummastakin max 0.5 pistettä, eli tehtävästä saa yhteensä max 1 p.
Ohje tämän tehtävän tekemiseksi: Algoritmi (eli toimintaohje) kuvataan usein perättäisinä askeleina, joita edetään ylhäältä alaspäin, tai tarvittaessa toistaen. Sinun pitäisi siis 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ä.
Sitten varsinaiset tehtävät.
Kohta 1. M: 3. Algoritmit: Kirjoita suomenkielinen (ei ohjelmointikielinen) algoritmi eli toimintaohje, jolla kuvaat, miten puhelinluettelosta 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).
Kohta 2. 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 ... muuten ..."):
a .Tiskaaminen
b. Kahvin keittäminen
(b2. Jos osaat: Espresson tekeminen)
c. Ohjeet tämän demotehtävän palauttamiseksi
Tehtävä 3
Tee kaikki kohdat.
M: 7.3.2. Muuttujan arvon muuttaminen
- Mitä seuraava pääohjelma tulostaa? (Mieti ensin, kirjoita sitten vastaus, ja kokeile vasta sen jälkeen kirjoittaa vastaava koodi.)
public static void Main()
{
int a = 5;
int b = a;
b++;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
}
- Lisää viimeisen tulostuslauseen jälkeen seuraavat rivit.
a = b;
a = 15;
Paljonko on b
:n arvo nyt?
- Lisää vielä edellisten rivien perään seuraavat rivit.
double c = b + a;
System.Console.WriteLine("Summa on " + c);
Tuleeko ongelmia? Mitä tulostuu?
Voit vielä tarkistaa vastauksesi kopioimalla 1. kohdan koodin alle ja klikkaamalla aja
. Tarkista myös muut kohdat vastaavasti. Huom. Joudut täydentämään luokan itse.
Tehtävä 4
M: 6. Aliohjelmat: Täydennä alla oleva ohjelma Portaat.cs
toimimaan kuten kommenteissa on sanottu. Vinkki: Shape.Rectangle.
Huomaa että TIMissä on ohjelmarunkoa sen kirjoitusikkunan ulkopuolella eikä using
-lauseita tai Main
-pääohjelmaa rivejä kirjoiteta. Samoin jos ajetaan Visual Studiossa Jypelin projektimalleista tehtynä, niin Main
menee Ohjelma.cs
-tiedostoon ja omaan koodiin ei enää saa Main
:a kirjoittaa.
Tuloksen pitäisi näyttää tältä
Jos haluat sijainninkin samalla tavalla kuin mallikuvassa, voit lisätä Begin
-metodin loppuun: Camera.ZoomToAllObjects(50);
HUOM! Jos teet tehtävän Visual Studiossa (Jypeli-projektimallista luonnollisesti), niin poista Main
-pääohjelma peliluokasta (tai älä copy-pasteta sitä yo. koodista), sillä se on valmiina Ohjelma.cs
-tiedostossa.
Tehtävä 5
M: 6. Aliohjelmat: Kopioi ensin itsellesi ohjeen mukaan Jypeli-kirjasto. Tee ja aja mallin mukainen ohjelma, joka piirtää lumiukon kuvaruudun alareunaan. Ensin 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ä kynällä paperille kolme toisiaan sivuavaa ympyrää ja niiden keskipisteiden muodostama kolmio. Laske kolmion korkeus (ks. System.Math.Sqrt).
"ohjeen" -linkki ei toimi
Linkki korjattu. /SR
ohje-linkki ei toimi?
—Kuinkas saadaan Math. käyttöön ilman "using System"? Itse itselleni vastaten System.Math... Heh
—"Set custom points" ei tunnu tallentavan custom pointseja, eli siis kun laitan että kaksi pistettä ja refreshaan sivun ni vaihtuu takasin ykköseksii
—Herjaa PhoneBackButton-rivistä. Ilman sitä toimii.
—Merkkasin itselleni tähän kaksi pistettä, mutta ilmeisesti on muuttunut itsestään ykköseksi? Miten fixed points pitäisi tallentaa?
—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ä (klikkaa set custom points
ja kirjoita itse pistemäärä). Kahteen pisteeseen kuitenkin vaaditaan, että et ole "arvannut" ympyröiden paikkoja.
Tehtävä 6
M: 26. Lukujen esitys tietokoneessa. 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*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ä.
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?
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.
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.
Voiko tästä saada edes 0.5/0.5p?
—Ainakin minä sain. Oletkohan käsittänyt tehtävänannon väärin?
-- Paina "Kopioi taunosta", sitten "Aja, ja sitten "Test". /AJL
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).
B1
Tee Khan Academyn neljä "luentoa" Intro to Variables, Review 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ää, sekä vapaa sana Khan Academyn käytöstä ohjelmoinnin opetuksessa).
B2
Innovoi jokin ongelma/idea jonka voisi ratkaista ohjelmateknisesti/järjestelmällä jossa ohjelmateknisellä ratkaisulla on oma roolinsa. Kirjoittanut 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 pelin, suorakaiteen koordinaatit ja mitat. Laita peliin vielä painovoima seuraavasti (2d-vektori ottaa vastaan kaksi koordinaattia) ja sijoita se Begin()
-aliohjelmaan
parametrina pelin?
—
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
.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.