The referenced paragraph does not exist.
The referenced paragraph does not exist.

Demo 2

Vinkki: Pidä aina esillä kynä ja paperia. Koskee myös ohjausryhmiä.

Osaamistavoitteet

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

Ajankäyttösi tällä viikolla (0.5 p.)

Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.

Demokerran päätteeksi kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla (kalenteriviikko, ma klo 00:00 -- su klo 23:59) käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit.

# d2tunnit

Tehtävä 1

M: 7. Muuttujat

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.

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

  1. Olkoon meillä seuraavanlainen pääohjelma.
# mitatulostaa
       /// <summary>
       /// Pääohjelmassa alustetaan muuttujia ja tulostetaan muuttujan sisältö.
       /// </summary>
       /// <param name="args">Ei käytössä.</param>
       public static void Main(string[] args)
       {
           int a = 1;
           int b = 2;
           int c = 3;
           int x = a + b * ((2 - c) / a + b);
           System.Console.WriteLine(x);
       }

 

I guess, that the code debugging, is the part of the task

18 Jan 18

Ennen kuin ajat ohjelman, kirjoita alla olevaan vastauslaatikkoon se luku, minkä ohjelman viimeinen rivi ennen aaltosulkua mielestäsi tulostaa.

Kun olet tallentanut vastauksesi, täydennä luokka (public class jne.) yllä olevan pääohjelman (Main) ympärille ja tarkista vastauksesi painamalla Aja-nappia yllä olevalle koodille. Korjaa vastauksesi tarvittaessa.

# teht1a

 

B. Miten tuloste muuttuisi, jos kaikki sulut otettaisiin pois riviltä

int x = a + b * ((2 - c) / a + b);

Kirjoita luku, jonka ohjelma tulostaisi.

# teht1b

 

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

C. Muutetaan pääohjelmaa seuraavasti:

# teht1ccode
       /// <summary>
       /// Pääohjelmassa alustetaan muuttujia ja tulostetaan muuttujan sisältö.
       /// </summary>
       public static void Main()
       {
           int a = 0;
           int b = 2;
           int c = 3;
           int x = a + b * ((2 - c) / a + b);
       }

 

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

# teht1c

 

D. Tehdään seuraavanlainen pääohjelma:

# teht1dcode
       public class Tulostus
       {
           /// <summary>
           /// Pääohjelmassa alustetaan muuttujia ja tulostetaan muuttujan sisältö.
           /// </summary>
           /// <param name="args">Ei käytössä.</param>
           public static void Main(string[] args)
           {
               int c = 3;
               System.Console.WriteLine(c+1);
           }
       }

 

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.

# teht1d

 

Tehtävä 2

Tee kohdat 1 ja 2. Kummastakin max 0.5 pistettä, eli tehtävästä saa yhteensä max 1 p.

M: 3. Algoritmit

Johdanto: Algoritmi eli toimintaohje kuvataan usein perättäisinä askelina, joita edetään perättäisesti, tai tarvittaessa toistaen. Sinun pitäisi kirjoittaa tällainen toimintaohje perättäisinä askelina. Esimerkiksi, kuvitteellinen siirtyminen Agoran ala-aulasta työhuoneeseen voitaisiin kuvata seuraavilla askeleilla.

  1. Mene C-siiven portaiden juurelle.
  2. Kävele kerros ylöspäin.
  3. Jos olet kerroksessa nro 4, mene seuraavaan kohtaan. Muuten, palaa kohtaan 2.
  4. Kävele eteenpäin, kunnes näet huoneen C414.2. Olet perillä.

Tehtävä:

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

# teht2a

 

Tähän täytyy kommentoida, etten ole nähnyt puhelinluetteloa about 8 vuoteen, joten en oikein muista sen tarkkaa rakennetta :D

19 Jan 18

Samaa kommentoin, etten ole koskaan käyttänyt puhelinluetteloa.

19 Jan 18

Kohta 2. Pitäydy tässä tehtävässä vielä irti C#:sta ja muista ohjelmointikielestä. Kuvaile suomen kielellä tai 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 ("toista ... kunnes ...") ja päätöstilanteille ("jos ... niin ... muuten ..."): Kirjoita kaikki kohdat a-c samaan vastauslaatikkoon.

    a. Tiskaaminen 
    b. Kahvin keittäminen
    (b2. Jos osaat: Espresson tekeminen)
    c. Ohjeet tämän demotehtävän palauttamiseksi
# teht2b

 

Tehtävä 3*

Tee kaikki kohdat 1-3.

M: 7.3.2. Muuttujan arvon muuttaminen

TODO: Pohtimista ei kirjoiteta tehtävälaatikkoon, vaan ainoastaan vastaus.

  1. Pohdi, mitä alla oleva pääohjelma tulostaa. Kirjoita vastaus alla olevaan tehtävälaatikkoon. Sen jälkeen kokeile kirjoittaa vastaava koodi tämän tehtävän alimpaan laatikkoon. Luokka (public class jne.) täytyy itse täydentää pääohjelman ympärille.
public static void Main()
{
    int a = 5;
    int b = a;
    b++;
    System.Console.WriteLine(a);
    System.Console.WriteLine(b);
}
# teht31

 

  1. Entä jos viimeisen tulostuslauseen jälkeen lisätään seuraavat rivit?
a = b;
a = 15;

Mieti ensin, mitä ohjelma tulostaa (tätä ei tarvitse kirjoittaa vastauslaatikkoon).

Varsinainen kysymys: Paljonko on b:n arvo nyt?

Kokeile myös ajaa tämä ohjelma näiden muutosten jälkeen kuten edellisessäkin kohdassa.

# teht32

 

  1. Lisää vielä edellisten rivien perään seuraavat rivit.
double c = b + a;
System.Console.Write("Summa on ");
System.Console.WriteLine(c);

Tuleeko ongelmia? Mitä tulostuu?

# teht33

 


Tarkistuslaatikko

Tarkista vastauksesi kopioimalla koodi alla olevaan koodi-ikkunaan ja klikkaa aja. Tarkista myös muut kohdat vastaavasti.

# teht3

 

Tehtävä 4*

M: 6. Aliohjelmat: Täydennä alla oleva ohjelma Portaat.cs toimimaan kuten kommenteissa on sanottu. Vinkki: Shape.Rectangle.

# portaat
using Jypeli;

/// @author  Antti-Jussi Lakanen, modified by (Oma nimesi).
/// @version 21.1.2014
///
/// <summary>
/// Ohjelma piirtää viisi neliötä (sivun pituus 80) siten, että
/// ensimmäisen neliön keskipiste on origossa, ja viimeisen
/// neliön keskipiste pisteeessä (320, 320).
/// </summary>
public class Portaat : PhysicsGame
{
    /// <summary>
    /// Aliohjelma piirtää ruutuun yhden neliön, jonka
    /// sivun pituus on 80, ja keskipiste on (x, y).
    /// </summary>
    /// <param name="peli">Peli, johon neliö piirretään</param>
    /// <param name="x">Neliön keskipisteen x-koordinaatti.</param>
    /// <param name="y">Neliön keskipisteen y-koordinaatti.</param>
    public static void PiirraNelio(PhysicsGame peli, double x, double y)
    {
        // Täydennä ...
    }

    /// <summary>
    /// Kutsutaan PiirraNeliota muutaman kerran.
    /// </summary>
    public override void Begin()
    {
        Camera.ZoomToLevel();
        PiirraNelio(this, 0, 0);
        PiirraNelio(this, 80, 80);
        // Täydennä ...
    }
}

 

Tuloksen pitäisi näyttää tältä

Jos haluat sijainninkin samalla tavalla kuin mallikuvassa, voit lisätä Begin-metodin loppuun: Camera.ZoomToAllObjects(50);

Tehtävä 5

M: 6. Aliohjelmat: Aloita ajamalla (tai vie Visual Studioon ja aja siellä) alla oleva lumiukko-ohjelma.

Tehtävä: Tehtävä on kaksiosainen. (1) Muuta ohjelma sellaiseksi, että yksittäisen pallon piirtämiseksi on oma aliohjelma PiirraPallo. (2) Muuta 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).

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. Ympyröiden paikkojen laskemisessa voi hyödyntää System.Math.Pow -potenssifunktiota.

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.

# ympyrat
   /// <summary>
   /// Aliohjelmassa piirretään ja zoomataan kamera siten että
   /// kenttä näkyy hyvin ruudulla.
   /// </summary>
   public override void Begin()
   {
       Camera.ZoomToLevel();
       Level.Background.Color = Color.Black;

       PhysicsObject p1 = new PhysicsObject(2*100,2*100,Shape.Circle);
       p1.Y = Level.Bottom + 200.0;
       Add(p1);

       PhysicsObject p2 = new PhysicsObject(2*50,2*50,Shape.Circle);
       p2.Y = p1.Y + 100 + 50;
       Add(p2);

       PhysicsObject p3 = new PhysicsObject(2*30,2*30,Shape.Circle);
       p3.Y = p2.Y + 50 + 30;
       Add(p3);
   }

 

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ä. Aloita jokainen vastaus uudelta riviltä.

# tehtava2

 

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ää)? Vastaus pitää antaa 10-järjestelmän lukuna.

# tehtava2k1

 

Entä jos pitää voida esittää positiivisia ja negatiivisia lukuja: mikä silloin on toisaalta pienin ja toisaalta suurin luku, joka kahden tavun kokoiseen tilaan mahtuu? Kirjoita ensin isoin luku ja sen jälkeen pienin. Tässäkin vastaus annetaan 10-järjestelmän lukuina.

# tehtava2k2

 

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.

Tarkista, että olet kirjoittanut tulos-muuttujan nimen pienellä.

# summaaluvut
        int tulos = 0;

 

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.

Tarkista, että olet kirjoittanut tulos-muuttujan nimen pienellä.

# summaajokotoinen
        int tulos = 0;

 

# taunoOppi

Mitä opit tehtävistä Tauno T1a ja T1b?

 

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

Mites kun tää Ville sanoo että muita kuin osion 1 tehtäviä pääsee tekemään vasta joskus myöhemmin?

15 Jan 18

Villen toisen osion 6. tehtäväpaketin ensimmäinen tehtävä ei oikein aukea? Millä siitä olisi tarkoitus päästä eteenpäin?

19 Jan 18

Pahoittelut, huomasin kommentin vasta nyt. Nyt pitäisi kaikkki Ville-kierrokset olla auki. -AJL

21 Jan 18

Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.

# villev1

 

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

# tehtavab1

 

B2

Innovoi jokin ongelma/idea jonka voisi ratkaista ohjelmateknisesti/järjestelmällä jossa ohjelmateknisellä ratkaisulla on oma roolinsa. Kirjoita 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.

# tehtavab2

 

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 suorakaiteen koordinaatit ja mitat. Laita peliin vielä painovoima seuraavasti (2d-vektori ottaa vastaan kaksi koordinaattia) ja sijoita se Begin()-aliohjelmaan


Gravity = new Vector(/*täydennä 2d-vektorin parametrit...*/);

Vector-luokan dokumentaatio.

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.

# tehtavag12

 

G3 (1 p.)

Tee tarvittavat aliohjelmat jotta voit tehdä aliohjelmakutsun TeeLumiukko kaikilla seuraavilla tavoilla. Ratkaisussa ei saa olla toistoa koodissa, eli esimerkiksi pallon luontikoodia ei saa olla monessa aliohjelmassa.

Kun olet mielestäsi valmis, laita itse pisteesi "Set custom points"-toiminnolla, enintään 1.0 pistettä.

TeeLumiukko(5); // tekee 5-palloisen lumiukon origoon, väri valkoinen
TeeLumiukko(3, 100, 100); // 3 palloa, alin pallo x=100, y=100, väri valkoinen
TeeLumiukko(4, -100, -100, Color.Green); // 4 palloa, alin pallo x=-100, y=-100, väri vihreä
# tehtavag13

 

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