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 3
Tehtävät perustuvat luentoihin: 05 ja 06.
OPPIMISTAVOITTEET
Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.
On suositeltavaa (ja demosta 4 lähtien pakollista!) tehdä vähintään yksi tehtävä graafisessa ohjelmointiympäristössä.
Huomaa, että Jypeli-projektimalleja käytettäessä pääohjelma jää erilliseen tiedostoon. Pääohjelmaa ei saa enää uudestaan toistaa omassa ohjelmassa. Kääntäen, jos otat esimerkin joka on tehty Jypelin projektimallilla ja haluat kääntää sen komentoriviltä, niin sinun on lisättävä pääohjelma (Main()
) kuten kurssin alkuesimerkeissä.
Tauno 1 a
Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.
Lisää aluksi Taunossa tulos
-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee tulos
-muuttujaan parillisissa paikoissa olevien lukujen summa miinus parittomissa paikoissa olevien summa. Alkuperäistä taulukkoa ei saa muuttaa.
Esim:
5 4 6 2 9 1 => (5-4) + (6-2) + (9-1) = 13
Tauno 1 b
Lisää aluksi Taunossa tulos
-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee yhteen taulukon luvut niin, että summa (1. - viimeinen) + (2. - toiseksi viimeinen) jne... (kunnes kaikkiin on "koskettu") on lopuksi tulos
-nimisessä muuttujassa. Edellä 1. tarkoittaa ensimmäinen.
Esim:
5 4 6 2 9 1 => (5-1) + (4-9) + (6-2) = 3
ViLLE 1
Tee ViLLE-tehtävät: 3.1, 3.2, 3.4, 7.1 - 7.6. (Villessä voi olla virhe, että Sum on välillä kirjoitettu isolla ja välillä pienellä, kuvittele että se on aina kirjoitettu isolla alkukirjaimella.)
Muista: Villen käyttöohje.
Tehtävä 1. Negatiiviset binääriluvut
Lue ensin: 26.4 Negatiiviset binääriluvut.
Tämä tehtävä kannattaa tehdä mikäli on alan pääaineopiskelija tai haluaa tietää miksi kahden positiivisen luvun summa voikin olla negatiivinen. Muiden kannattaa ehkä ensin tehdä tehtäviä 2-6 ja tämä jos aikaa jää.
Tehtävän selitys ja itse tehtävät vievät sen verran tilaa, että ne on oletuksena piilotettu. Aukaise tehtävä [+]
-merkistä tai otsikosta klikkaamalla.
Useimmiten nykytietokoneissa käytetään negatiivisille luvuille niin sanottua kahden komplementtia. Eli positiivinen luku muutetaan negatiiviseksi muuttamalla kaikki bitit päinvastaisiksi ja sitten lisäämällä saatuun lukuun 1. Esimerkiksi:
3 = 0000 0011
-3 tehdään seuraavasti: 1) kaikki päinvastoin 1111 1100
2) +1 = 1111 1101 = -3
Vastaavasti kun lukua muutetaan "ihmismuotoon", katsotaan sen ensimmäinen bitti ja jos se on 1, niin kyseessä on negatiivinen luku ja se muutetaan positiiviseksi ottamalla siitä kahden komplementti (kaikki bitit päinvastoin ja +1). Tällöin tulostuksessa tulostetaan ensin -
merkki ja sitten itse luvun arvo.
Esimerkiksi jos meillä on binääriluvut 0010 1101
ja 1101 1111
ja ne pitäisi tulkita, niin tulkinta aloitetaan seuraavasti:
0010 1101 luku on positiivinen, eli 45
1101 1111 luku on negatiivinen, siis ensin 2:n komplementti
0010 0000 + 1 = 0010 0001 = 33, eli tulos on -33
Huom! Komplementin kääntämisen jälkeen tehtävä +1 lisäys tehdään myös alla olevien bittien yhteenlasku sääntöjen mukaan eli esim.
1111 1110 luku on negatiivinen, siitä ensin 2:n komplementti
0000 0001 + 1 = 0000 0010 = 2, eli tulos on -2
Bittien yhteenlasku
0 + 0 = 0 => 0 ja 0 muistiin
0 + 1 = 1 => 1 ja 0 muistiin
1 + 0 = 1 => 1 ja 0 muistiin
1 + 1 = 10 => 0 ja 1 muistiin
1 + 1 + 1 = 11 => 1 ja yksi muistiin
Esimerkki yhteenlaskusta allekkain 4-bittisillä luvuilla kaikki vastinbiteistä saadut muistinumerot merkiten (esimerkissä muistinumero on merkitty myös oikeanpuoleiseen pariin vaikka se aina onkin 0. Tätä ei ehkä kaikki merkitse tästä syystä).
esim1 esim2
muistinumero 01110 11110
luku 1 0101 1111
luku 2 + 0011 + 1111
===== =====
summa 1000 1110
Vinkki binäärilukujen yhteenlaskuun
Kirjoita vastauksesi alla oleviin e)- ja f)-kohtiin muodossa
a) 11 + 22 = +33
tai vähennyslaskuissa
b) 11 - 22 = -11
Vastauksissa ei saa olla ylimääräisiä merkkejä (esimerkiksi sulkuja).
Onko d kohdassa virhe? 69 + 223 = 36?
VL: Ei, sulla on muistinumerot väärin, laitoin tarkemman mallivastauksen.
—Em. 4 bitin esimerkissä olisi ollut (tehtävään vastataan siis omien 8-bitin laskujen mukaan)
e) f) e) f)
muistinumero 0111 1111
0101 5 5 1111 15 -1
+ 0011 3 3 + 1111 15 -1
===== =====
1000 8 -8 1110 14 -2
jolloin vastattaisiin e) kohtaan
a) 5 + 3 = 8
b) 15 + 15 = 14
ja f) kohtaan
a) 5 + 3 = -8
b) -1 - 1 = -2
Em. 4-bitin esimerkissä olisi ollut
g) 5 + 3 = 8 olisi ollut oikein e-kohdan tulkinnalla (ei etumerkkiä),
15+15 ei mahtunut 4 bittiin
h) -1 - 1 = -2 olisi ollut oikein f-kohdan tulkinnalla (2-komp.),
5+3 tuotti negatiivisen luvun
Tehtävä 2. Muuttujien esittely ja alustus
Lue ensin: 7. Muuttujat.
Miten esittelisit (tyyppi ja nimi) ja alustaisit (arvo) muuttujat seuraaville tilanteille? Kirjoita yksi kohta per rivi.
a) Jyväskylän väkiluku
b) Ylioppilaskokeesta ansaittu arvosana
c) Ruokakauppaostosten hinta
d) Maapallon väkiluku
e) Kellonaika keskiyöllä
f) Itsenäisen Suomen ikä
g) Onko Usain Boltin 100 m aika 9.58 s vaikea päihittää?
h) Ylioppilaskokeesta ansaitut pisteet
i) Auton rekisteritunnus
j) Hapen kemiallinen merkki
TODO opettajille: Kohta j: entä kaksimerkkiset kemialliset merkit? -AJL
—Tehtävä 3. Muuttujien arviointi I
Lue ensin: 7. Muuttujat.
Alla on erilaisten muuttujien esittelyrivejä. Tehtävänäsi on arvostella niitä:
- Ovatko ne syntaktisesti oikein?
- Ovatko hyviä valintoja?
a) char EkaKirjain;
b) int lempiruuanNimi;
c) int #%2.5;
d) double huoneenLeveys;
e) int pullia, piirakoita, kakkuja;
f) double työmatkanPituus;
g) type koiraRotu;
h) char default;
i) bool nopeinMaaElain;
j) char E;
Tehtävä 4. Muuttujien arviointi II
Lue ensin: 7. Muuttujat.
Tällä kertaa alla on esittelyn lisäksi tehty myös muuttujien alustus. Arvostele nyt muuttujien tyyppien ja nimien lisäksi myös niiden arvoja.
- Ovatko ne syntaktisesti oikein?
- Ovatko hyviä valintoja?
- Onko muuttujan nimi siihen tallennettavaa tietoa kuvaava?
a) long LUITAKEHOSSA = 206;
b) string linja-Auto = Bussi;
c) int ryhmänJäsenet = "Aapo, Kalle ja Mirja";
d) bool koira>kissa = true;
e) decimal ulkolampotila = -13.66;
f) char d-Vitamiini = 'D3';
g) double #lihapulliaKastikkeessa = 15;
h) string huippuUrheilija = "Bolt";
i) ulong pieninIntegerarvo = -2147483647;
j) float piinArvo = 3.14159265358979323846264338327...;
Tehtävä 5*. Aliohjelman täydentäminen
Lue ensin: 9. Aliohjelman paluuarvo ja 6.2 Aliohjelmien kirjoittaminen.
Jos yhtään vaikeuksia, aloita harjoitustehtävällä.
Huomaa, että tehtävissä, joissa on Aja
ja Test
-painikkeet sekä Document
-linkki, pitää niistä jokaista painaa täydet pisteet ansaitakseen!
a) Jakolasku
Täydennä funktio JaaKahdella
sijoittamalla oikeat syntaksit isolla kirjoitettujen sanojen tilalle.
b) Pinta-ala
Täydennä funktio KolmionPintaAla
sijoittamalla oikeat syntaksit isolla kirjoitettujen sanojen tilalle.
c) Tulostus
Täydennä funktio Tulosta
sijoittamalla oikeat syntaksit isolla kirjoitettujen sanojen tilalle.
Tästä ei tule virheilmoitusta, mutta ei toisaalta tulosta tekstiäkään. Kokeilin Riderissa lisäämällä Console.WriteLine-rivin ja sain siellä tekstin tulostumaan.
—Sama homma, eli ei tulosta tekstiä.
VL: ei tulosta jos ei laita itse tulostamaan. Aliohjelmat harvoin tulostavat, mutta nyt se on oikein annettu sen tehtäväksi.
—Tehtävä 6*. Aliohjelman kirjoittaminen
Lue ensin: 9. Aliohjelman paluuarvo ja 6.2 Aliohjelmien kirjoittaminen.
a) Massa
Tee funktio, joka muuttaa ja palauttaa paunoina välitetyn parametrin arvon takaisin kilogrammoina.
Yksi pauna on 0.45359237 kilogrammaa.
b) Lämpötila
Tee funktio, joka muuttaa ja palauttaa celsius asteina välitetyn parametrin arvon takaisin kelvineinä.
0 °C on 273.15 K.
c) Pituus
Tee funktio, joka muuttaa ja palauttaa metreinä välitetyn parametrin arvon takaisin jalkoina.
Yksi metri on 3.2808399 jalkaa.
Tehtävä 7. Aritmeettiset lausekkeet
Lue ensin: 7.7 Operaattorit.
Kirjoita lausekkeet, joilla lasket hyvin nimettyihin muuttujiin alla luetellut arvot. Tee Console C#-ohjelmaksi. Pääohjelman Main()
käyttäminen riittää, ei tarvitse aliohjelmia:
a) Vuosisadan viikkojen määrä
b) 90-luvun tuntien määrä
c) Valon päivässä kulkema matka
d) Valon kuusta maahan kulkeman matkan kesto
Tulosta muuttujien arvot. Periaatteessa tyyliin:
int tunnissaSekunteja = 60 * 60;
Console.WriteLine($"Tunnissa sekunteja: {tunnissaSekunteja}");
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 sen tehtävästä osan jota et jo tehnyt demo2:ssa, 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. Pallon pukkailu
Lue ensin: Voimia ja sitominen.
Tee ohjelmasta sellainen, että voit "pukkailla" keskipalloa nuoli vasemmalle ja nuoli oikealle näppäimillä. Tehtävä kannattaa tehdä Visual Studiolla, koska TIMillä ei voi tehdä interaktiivisia C#-pelejä. Kopioi tekemäsi koodi alle ja paina aja-nappia. Tosin näet vain ensimmäisen pelikierroksen staattisen kuvan.
Huom! Kun olet tallentanut vastauksesi, arvioi oma suoriutumisesi tehtävästä asteikolla 0-1p. valitsemalla automaatin antaman pistemäärän vierestä Set custom points.)
B2. Lumiukko III
Lue ensin: 6.5 Aliohjelman kuormittaminen.
Ota demojen 2 lumiukko ohjelman aliohjelma PiirraYmpyra
ja muuta se sellaiseksi, että sitä on mahdollista kutsua eri määrällä parametrejä. Toisin sanottuna aliohjelmalle PiirraYmpyra
tarvitaan useampi kuin yksi toteutus seuraavasti:
a) Ilman neljättä parametria piirtää aina ympyrän, jonka halkaisija on 100.
(parametreina keskipisteen y-koordinaatti)
PiirraYmpyra(this, 0);
b) Neljännen parametrin kanssa piirtää ympyrän, jonka halkaisija on määrätty
arvo.
PiirraYmpyra(this, 0, 50);
Ennen kuin teet mitään muutoksia, kokeile niin, että Jypelin pääohjelma (Begin
) on täsmälleen sama kuin mallissa lumiukon piirtämiseksi. Kun tämä toimii, vaihda yksi alkuperäisen ohjelman ympyröistä erikokoiseksi ympyräksi (eli kutsutaan uutta 4 parametristä aliohjelmaa). Muista kommentointi!
(Huom. Kun olet tallentanut vastauksesi arvioi oma suoriutumisesi tehtävästä 0-1p. asteikolla valitsemalla automaatin antaman pistemäärän vierestä Set custom points)
B3. Prosessorin toiminta
Alla olevat linkit voit avata toiseen ikkunaan tai tabiin ja katsoa niitä välillä samalla kun katsot videota.
Katso alla oleva video ja täytä alla olevia prosessorin rekistereitä samaa tahtia kuin videossa. Kannattaa painaa Ins
-painiketta, niin voi kirjoittaa ilman että työntää edellä olevia merkkejä eteenpäin.
Ohjelmamuisti:
==============
100 102 104 106 108 10A 10C 10E 110
B3 62 80 FB 61 72 08 80 FB 7A 77 03 80 EB 20 A1 F4 .. .. ..
Käskyjen merkitys:
==================
72 = jos vertailu oli pienempi, niin lisää ohjelmalaskuriin
seuraavan tavun arvo
IP+2
77 = jos vertailu ei ollut pienempi tai yhtäsuuri lisää
ohjelmalaskuriin seuraavan tavun arvo
IP+2
80 EB = vähennä BL-rekisterin arvosta seuraava tavu
IP+3
80 FB = vertaa BL rekisterin arvoa seuraavana olevaan tavuun
IP+3
A1 F4..= tulosta kirjaimena BL-rekisterissä oleva luku
B3 = ota seuraavana oleva tavu ja laita se BL-rekisteriin
IP+2
Miltä käännetty koodi näyttää? Voit katsoa esim: https://godbolt.org/.
G1. Lumiukko IV
Jatketaan demojen 2 tehtävää 5 (lumiukko). Tee ohjelmasta sellainen, että se piirtää kolmen ympyrän sijaan n
ympyrää. Muuta ohjelmaa lisäksi niin, että jokainen piirretty ympyrä on aiempaa pienempi. Tällöin i
:nnen ympyrän koko tulisi olla:
(n+1-i) / n * ympyranKoko
missä ympyranKoko
on ensimmäisen ympyran säteen pituus. Esimerkiksi kun piirretään 10 ympyrää, 7:nnen ympyrän koko on:
10+1-7 / 10 = 4/10 * ympyranKoko
(Huom. Kun olet tallentanut vastauksesi arvioi oma suoriutumisesi tehtävästä 0-2p. asteikolla valitsemalla automaatin antaman pistemäärän vierestä Set custom points)
TDD 1
Lisätehtävä "ammattilaisiksi" tähtääville.
Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen. Vastauksena kerro minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa vastauksessa palautetta ja kehitysehdotuksia ComTestin käytöstä. Huom! Ohjelmia joissa on pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastava testata, samoin esim. peli-juttuja. Siksi testaamista kannattaa ehkä tehdä tässä demoissa vain sellaisille funktioille, jotka selkeästi palauttavat jotakin. Tässä demossa sellaisia on tehtävässä 4 ja 5. Tämän kirjoittaminen antaa sinulle 0.5 p ja saat itse nostaa yhteensä 1 p jos olet VisualStudiossa tai Xamarinissa kirjoittanut vähintään kahteen funktioon itse testejä (erilaisia kuin mitä näistä demoista saa kopioimalla).
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.