avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
```
Demotilanne:
- Pisteet päivittyvät pienellä viiveellä.
- Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
Please
Osa-alue |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
12 |
12 |
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 | |||
Deadlinet |
HT1 (suu- nnitelma) |
Väli- kysely |
Debug- näyte |
HT2 (50%) |
Tentti- ilmo |
HT3 (100%) |
Tentti | ||||||||
Ohjaus | 1 | 2 | 3 | 4 | 5 | ||||||||||
Demo | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | d% | |
Pisteet |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
|
Korjattu |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
||||
Tunnit |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please
Ohjelmointi 1, avoin 2023 / Demo 2
Tehtävät perustuvat luentoihin: 03 ja 04.
OPPIMISTAVOITTEET
Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.
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#-dokuissa tämä on argument).
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 Visual Studiolla. 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 mielestäsi 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 = 5 - b * c - 4 / b - 2 * a;
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 d
:n arvo viimeisen rivin jälkeen? Vastaa kumpaankin kysymykseen yhdellä luvulla, molemmat omalle rivilleen. Kun olet vastannut kysymykseen, voit tarkistaa vastauksesi ajamalla yllä olevan koodin (kunhan ensin korjaat sen toimivaksi).
Tehtävä 2. Plussaus
Kirjoita yksinkertainen kahden int
-tyyppisen muuttujan välinen pluslasku (1 + 2
) ja säilö laskun tulos kolmanteen muuttujaan. Tulosta lopuksi laskun tulos eli kolmannen muuttujan arvo.
Vinkki! Katsoa apua syntaksiin tehtävän 1 koodista.
Tehtävä 3. Binääriluvut
Lue ensin: 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ääriluvun 01000101
kääntäminen kymmenjärjestelmään voitaisiin esittää seuraavasti:
1 // Sadat
2631 // Kymmenet
84268421 // Ykköset
--------
01000101 // Binääriluku
TAI
76543210 // Potenssit
--------
01000101 // Binääriluku
= 0*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 0*128 + 1*64 + 0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1
= 0 + 64 + 0 + 0 + 0 + 4 + 0 + 1
= 69
Muunna seuraavat binääriluvut ihmiselle tutumpaan 10-järjestelmään:
0011
1010
000101011
110011110
1000000001000
1001000100111
11000001000001000
10100110101011001
Muista vastaukseen laittaa myös aukilaskettuna se, miten sait tuloksen. Pelkkä numero ei riitä. Anna lopuksi itsellesi pisteet.
Tehtävä 4*. ATK
Ulkolämpötiloja on mitattu eri päivinä ja ne on kirjattu taulukkoon. Tehtävänäsi on laskea päivien lämpötilojen välinen kerskiarvo erilaisten ehtojen vallitessa.
a) Ei ehtoja
Laske keskiarvot lämpötilataulukoille tavallisesti. (Malliesimerkkinä M1)
nr | taulukko | tulos |
---|---|---|
M1 | 13, 32, 0, 11, -2, 27 | 13.5 |
1 | 5, -3, 8, 4 | |
2 | 0, 1, 8, 5, -2, 6 | |
3 | 22, -18, -2, 15, 23, 32 | |
4 | 12, -3, 2, 0, -8, 12, 20 |
Tästä tähtitehtävästä voi näköjään saada vain 0.5 pistettä, ympyrän piirtämisestä yhden. Mistä saa puuttuvan puoli pistettä?
VL: Korjattu pisteiden lasku niin että summaksi tulee 1p.
—b) Maksimiarvo
Nyt halutaan karsia liian kuumat päivät pois. Jätetään siis laskematta mukaan maksimiarvoa suuremmat arvot. (Malliesimerkkinä M2)
Lisäksi mikäli keskiarvoa ei voida laskea, annetaan tulokseksi aina määrätty maksimiarvo.
nr | taulukko | maksimi | tulos |
---|---|---|---|
M2 | 13, 32, 0, 11, -2, 27 | 25 | 5.5 |
5 | 5, -3, 8, 4 | 6 | |
6 | 6, 36, -11, 29, 30 | 29 | |
7 | -1, 1, 6, -15, 15, 9 | 10 | |
8 | 19, 22, 99, 15, 39, 18 | 14 |
c) Maksimiarvo ja Lopetusarvo
Nyt maksimiarvon sääntöjen lisäksi, jos vastaan tulee lopetusarvoa vastaava tai sitä pienempi arvo, lopetetaan laskeminen kokonaan. Lopettavaa arvoa ei lasketa mukaan.
nr | taulukko | lopetus | maksimi | tulos |
---|---|---|---|---|
M3 | 13, 32, 0, 11, -2, 27 | -1 | 25 | 8 |
9 | 5, -3, 8, 4 | 0 | 6 | |
10 | 15, 36, -12, 3, 11 | -5 | 15 | |
11 | 13, 19, 32, 15, 12, 11 | 12 | 17 | |
12 | -13, 21, 7, -3, 0, 18 | 20 | 13 |
Tehtävä 5*. Lumiukko II
Lue ensin: 6. Aliohjelmat.
Muutetaan demojen 1 tehtävää Lumiukko I siten, että yksittäisen ympyrän piirtäminen tapahtuu omassa aliohjelmassaan.
Tee aliohjelma PiirraYmpyra
, joka vastaanottaa parametreinään pelin, johon ympyrä piirretään ja piirrettävän ympyrän keskipisteen y-koordinaatin.
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.
Olen näköjään lukinnut pisteet nollaan tähän tähtitehtävään. Onko mitenkään mahdollista yrittää tätä uudelleen niin menisi tämä demo läpi. Tai jos ei, onko kurssi silti mahdollista suorittaa loppuun vaikka tämä ei mene läpi?
VL: voitko nyt vastata uudelleen?
Kyllä, nyt onnistuu taas, Kiitos!
—Tehtävä 6. Kolmiot päällekäin
Lue ensin: 6. Aliohjelmat.
Aja alla oleva ohjelma, joka piirtää lumiukon.
Tehtävä:
- Muuta ohjelma sellaiseksi, että yksittäisen kolmion piirtämiseksi on oma aliohjelma
PiirraKolmio
ja kolmioiden sekä kanta että korkeus ovat samat. (0.5 p) - Lisää vielä toinen aliohjelma
PiirraKuvio
, jota kutsutaanBegin
-aliohjelmasta. Sen tehtävänä on piirtää sijoittaa nuo kuusi kolmiota kolmelle riville niin, että niiden kulmat koskettavat toisiaan. Anna kolmioiden kannaksi ja korkeudeksi 50. (0.5 p) - Muuta ohjelma sellaiseksi, että kolmioiden kanta ja korkeus on säilöttynä yhteen paikkaan. Tällöin tuota yhtä arvoa muuttamalla voidaan luoda kolmiot eri koossa, mutta edelleen samassa muodostelmassa suhteessa toisiinsa. (1.0 p)
En tiedä onko pisteidenlasku rikki, mutta mielestäni tein annetut tehtävät oikein ja sain 0 pistettä.
VL: Tällaisiin tehtäviin ei saa äärillisillä kustannuksilla automaattia ja pisteet pitää antaa itse. Lisäsin huomautuksen.
—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. Muuttujalaskuja
Tehtävänäsi olisi saada pääohjelma Main
tulostamaan kommenttien mukaiset arvot. Saat kuitenkin vaihtaa kustakin laskutoimituksesta vain YHTÄ merkkiä. Korvaava merkki voi olla joko operaattori (esim. +
) tai se voi olla muuttuja (esim. x
). Se ei kuitenkaan saa olla "kovakoodattu" luku (esim. 3
).
B2. Aliohjelmat
Lue ensin: 6. Aliohjelmat.
Toistaiseksi kaikki koodi on kirjoitettu pitkälti pääohjelmaan Main
(lumiukkoa lukuunottamatta). Myöhemmin kurssilla lähes kaikki ohjelmat tulevat kuitenkin sisältämään aliohjelmia, joihin suurin osa koodista tulee keskittymään. Tästä tehtävästä saa vähän esimakua tulevasta.
Korvaa tehtävissä ISOLLA kirjoitetut sanat oikealla syntaksilla.
a) Tulostus
Tähän mennessä C#:ssa konsolille tulostamisen komento on nähty jo moneen otteeseen. Nyt siitä tulisi kuitenkin tehdä oma aliohjelmansa Tulosta
, joka tulostaa parametrina viedyn kokonaisluvun.
b) Summa
Tehtävässä 2 tehtiin itsenäisesti pääohjelmassa tapahtuva pluslasku. Nyt sama olisi tarkoitus parametrisoida ja luoda yleisesti pätevä funktio Summa
(joka on aliohjelma), jolla pluslaskut hoituvat minkä tahansa kahden kokonaisluvun välillä.
Kopioi alas myös a-kohdassa tekemäsi aliohjelma Tulosta
, jotta ohjelma osaa tulostaa summat.
c) Erotus
Seuraavaksi tulisi tehdä funktio Erotus
, joka palauttaa kahden parametrimuuttujan välisen erotuksen. Tuo tapahtuu muuten samaan tapaan kuin b-kohdan funktio Summa
, mutta vähennyslaskussa parametrien järjestyksellä onkin merkitystä, toisin kuin pluslaskussa. Ensimmäisestä parametristä on siis tarkoitus vähentää toinen, eikä toisin päin.
Kopioi alas myös a-kohdassa tekemäsi aliohjelma Tulosta
ja b-kohdassa tekemäsi funktio Summa
.
B3. 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ä.
G1. Pyrstötähdet
Tee ohjelma nimeltä Pyrstotahdet.cs
. Lisää siihen aliohjelma nimeltä PiirraTahti()
, joka lisää ruudulle (peliin) PhysicsObject
-tyyppisen tähden. Tee aliohjelma siten, että se ottaa parametrinä pelin, tähden koordinaatit ja mitat. Laita tähdet vielä liikkeelle lisäämällä peliin sivulta toiselle vetävän painovoiman seuraavasti (Lisää Vector-luokasta):
Gravity = new Vector(/*x-parametri, y-parametri*/);
Laita kenttään myös reunat, etteivät tähdet putoile ulos ruudusta seuraavasti:
Level.CreateBorders();
Lisää kentälle 30 tähteä, jotka ovat satunnaisen kokoisia kokovälillä [5, 30] ja satunnaisessa paikassa pelitason alueella.
Sijoita kaikki aliohjelman PiirraTahti
kutsut, painovoiman lisääminen ja reunojen luominen Begin()
-aliohjelmaan.
Huom! Vastauksen tallentaminen kestää, koska tästä tehdään palvelimella muutaman sekunnin video joka sitten näytetään tallentamisen jälkeen.
Vinkki! Saatat tarvita seuraavia: for-silmukka ja RandomGen.
Omalla koneella ajettuna painovoima toimii, mutta tässä ei toimi. Ohjeessa lukee, että pitäisi näkyä video, mutta kuvalta tuo näyttää tai sitten painovoima ei toimi.
Kyllä koodisi on ihan oikein. Varmaankin meidän puolella joku vika ettei tuosta synny videota -- selvitellään. -AJL
Korjattu. -SV
—H1. 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ä:
- Ohjelmointi 1, kevät 2017
- Ohjelmointi 1, syksy 2016
- Ohjelmointi 1, kevät 2016
- Ohjelmointi 1, syksy 2015
- Ohjelmointi 1, kevät 2015
- Ohjelmointi 1, syksy 2014
- Ohjelmointi 1, kevät 2012 (Youtube)
- Ohjelmointi 1 Kevät 2011
- Nuorten Peliohjelmointikurssi Mallipelejä
- Nuorten pelikurssin pelejä, kesä 2012 (Youtube)
Katso myös video GalaxyTripin tekemisestä ja sen lähdekoodi.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.