avoin/avoin23

# avoin

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ä)
# aikajana
Tiedot päivittyvät 6 tunnin välein. Viimeksi:

Please to interact with this component.

{}


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 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.

{}

Please to interact with this component.

{}

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.

# Oppimistavoitteet

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.)

# summaaluvut

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.

# summaajokatoinen
# taunoOppi

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).

# villev1

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:

# teht1acode

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.

# teht1a

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.

# teht1b

Kun olet vastannut kysymykseen, voit tarkistaa vastauksesi muuttamalla 1. kohdan koodia.

c) Muutetaan pääohjelmaa seuraavasti:

# teht1ccode

Mikä ongelma tässä tulee? Mieti ja vastaa kysymykseen, ennen kuin käännät ohjelman. Kun ajat ohjelman, mitä huomaat?

# teht1c

d) Tehdään seuraavanlainen pääohjelma:

# teht1dcode

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).

# teht1d

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.

# tehtava2

Tehtävä 3. Binääriluvut

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ät (8 kpl)

# atk

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
# lammot1

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.

27 Sep 23 (edited 28 Sep 23)

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
# lammot2

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
# lammot3

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.

Mallikuva
Mallikuva

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.

# lumiukko

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!

03 Apr 24 (edited 03 Apr 24)

Tehtävä 6. Kolmiot päällekäin

Lue ensin: 6. Aliohjelmat.

Aja alla oleva ohjelma, joka piirtää lumiukon.

Tehtävä:

  1. Muuta ohjelma sellaiseksi, että yksittäisen kolmion piirtämiseksi on oma aliohjelma PiirraKolmio ja kolmioiden sekä kanta että korkeus ovat samat. (0.5 p)
  2. Lisää vielä toinen aliohjelma PiirraKuvio, jota kutsutaan Begin -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)
  3. 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)
Mallikuva
Mallikuva
# kolmiot

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.

04 Feb 24 (edited 04 Feb 24)
# 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 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ä!

# tehtavaL1

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).

# laskuja

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.

# tulosta

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.

# summa

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.

# erotus

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ä.

# tehtavab3

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.

Esimerkkikuva pelistä
Esimerkkikuva pelistä


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.

# pyrstotahdet

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

06 Feb 24 (edited 07 Feb 24)

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ä:

Katso myös video GalaxyTripin tekemisestä ja sen lähdekoodi.

# tehtavab2

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.