```

Demotilanne:

  • Pisteet päivittyvät pienellä viiveellä.
  • Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
# aikajana

Error in expanding macros: 'luentoaiheet' is undefined

# fields

Ohjelmointi 1, k 2024 / 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.

# Oppimistavoitteet

Demoista

Tauno 1 a

# V1


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

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
# summaajokotoinen
# taunoOppi

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

# villev1

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.

Negatiiviset binääriluvut

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

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;
# muuttujat2

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...;
# muuttujat3

Tehtävä 5*. Aliohjelman täydentäminen

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.

# jako

b) Pinta-ala

Täydennä funktio KolmionPintaAla sijoittamalla oikeat syntaksit isolla kirjoitettujen sanojen tilalle.

# kolmio

c) Tulostus

Täydennä funktio Tulosta sijoittamalla oikeat syntaksit isolla kirjoitettujen sanojen tilalle.

# tulostus

Tehtävä 6*. Aliohjelman kirjoittaminen

a) Massa

Tee funktio, joka muuttaa ja palauttaa paunoina välitetyn parametrin arvon takaisin kilogrammoina.

Yksi pauna on 0.45359237 kilogrammaa.

# massat

b) Lämpötila

Tee funktio, joka muuttaa ja palauttaa celsius asteina välitetyn parametrin arvon takaisin kelvineinä.

0 °C on 273.15 K.

# lampotilat

c) Pituus

Tee funktio, joka muuttaa ja palauttaa metreinä välitetyn parametrin arvon takaisin jalkoina.

Yksi metri on 3.2808399 jalkaa.

# pituudet

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}");
# aritmeettiset
# 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 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ä!

# tehtavaL1

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

# pukkailu

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!

Mallikuva
Mallikuva

(Huom. Kun olet tallentanut vastauksesi arvioi oma suoriutumisesi tehtävästä 0-1p. asteikolla valitsemalla automaatin antaman pistemäärän vierestä Set custom points)

# lumiukko

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.

# tietokone
# cpu
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
Mallikuva
Mallikuva

(Huom. Kun olet tallentanut vastauksesi arvioi oma suoriutumisesi tehtävästä 0-2p. asteikolla valitsemalla automaatin antaman pistemäärän vierestä Set custom points)

# lumiukko2

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

# tdd

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