The referenced paragraph does not exist.

Demo 2

Palauta demot ma 25.1.2016 klo 11:59 mennessä.

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

Oppimistavoitteet

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

Tehtävä 1

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.

Lisäys: 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);
       }

 

Mitä viimeinen rivi (ennen aaltosulkua) tulostaa? Kirjoita yhdelle riville se luku minkä ohjelma mielestäsi tulostaa. Kun olet tallentanut vastauksesi painamalla Aja-painiketta, voit täydentää luokan (public class jne.) yllä olevan pääohjelman (Main) ympärille ja tarkistaa vastauksesi painamalla Aja-nappia yllä olevalle koodille.

# 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
       /// <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ä täsmälleen ottaen tuo arghh tässä tekee?

20 Jan 16

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.

Ohje tämän tehtävän tekemiseksi: Algoritmi (eli toimintaohje) kuvataan usein perättäisinä askeleina, joita edetään ylhäältä alaspäin, tai tarvittaessa toistaen. Sinun pitäisi siis 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ä.

Sitten varsinaiset tehtävät.

Kohta 1. M: 3. Algoritmit: 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

 

Ei anna pisteitä kohdista 1 ja 2. Mitä niihin olisi vaadittu?

25 Jan 16

Kohta 2. M: 3. Algoritmit: Pitäydy tässä tehtävässä vielä irti C#:sta ja muista ohjelmointikielestä. Kuvaile suomen kielellä tai korkeintaan 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 ja päätöstilanteille ("jos ... niin ... muuten ..."):

    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.

M: 7.3.2. Muuttujan arvon muuttaminen

  1. Mitä seuraava pääohjelma tulostaa? (Mieti ensin, kirjoita sitten vastaus, ja kokeile vasta sen jälkeen kirjoittaa vastaava koodi.)
public static void Main()
{
    int a = 5;
    int b = a;
    b++;
    System.Console.WriteLine(a);
    System.Console.WriteLine(b);
}
# teht31

 

  1. Lisää viimeisen tulostuslauseen jälkeen seuraavat rivit.
a = b;
a = 15;

Paljonko on b:n arvo nyt?

# teht32

 

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

Tuleeko ongelmia? Mitä tulostuu?

# teht33

 

Voit vielä tarkistaa vastauksesi kopioimalla 1. kohdan koodin alle ja klikkaamalla aja. Tarkista myös muut kohdat vastaavasti. Huom. Joudut täydentämään luokan itse.

# teht3

 

Tehtävä 4

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

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.

# 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>
    /// Pääohjelmassa laitetaan "peli" käyntiin.
    /// </summary>
    /// <param name="args">Ei käytössä</param>
    public static void Main(string[] args)
    {
        using (Portaat game = new Portaat())
        {
            game.Run();
        }
    }
    /// <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);

HUOM! Jos teet tehtävän Visual Studiossa (Jypeli-projektimallista luonnollisesti), niin poista Main-pääohjelma peliluokasta (tai älä copy-pasteta sitä yo. koodista), sillä se on valmiina Ohjelma.cs-tiedostossa.

Tehtävä 5

M: 6. Aliohjelmat: Kopioi ensin itsellesi ohjeen mukaan Jypeli-kirjasto. Tee ja aja mallin mukainen ohjelma, joka piirtää lumiukon kuvaruudun alareunaan. Ensin muuta ohjelma sellaiseksi, että yksittäisen pallon piirtämiseksi on oma aliohjelma PiirraPallo. Mieti, mitä parametreja pallon piirtämiseksi tarvitaan. Muuta sitten 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).

"ohjeen" -linkki ei toimi

Linkki korjattu. /SR

20 Jan 16 (edited 21 Jan 16)

ohje-linkki ei toimi?

23 Jan 16
# 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);
   }

 

Kuinkas saadaan Math. käyttöön ilman "using System"? Itse itselleni vastaten System.Math... Heh

23 Jan 16 (edited 23 Jan 16)

"Set custom points" ei tunnu tallentavan custom pointseja, eli siis kun laitan että kaksi pistettä ja refreshaan sivun ni vaihtuu takasin ykköseksii

24 Jan 16

Herjaa PhoneBackButton-rivistä. Ilman sitä toimii.

25 Jan 16

Merkkasin itselleni tähän kaksi pistettä, mutta ilmeisesti on muuttunut itsestään ykköseksi? Miten fixed points pitäisi tallentaa?

25 Jan 16

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.

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

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ää)? Entäpä jos pitää voida esittää positiivisia ja negatiivisia lukuja: mikä silloin on toisaalta pienin ja toisaalta suurin luku, joka kahden tavun kokoiseen tilaan mahtuu?

# tehtava2

 

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.

# summaaluvut
        int tulos = 0;

 

Antoi vielä yöllä pisteet, tänä aamuna pisteet taunosta kadonneet.

25 Jan 16

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.

# summaajokotoinen
        int tulos = 0;

 

Voiko tästä saada edes 0.5/0.5p?

21 Jan 16

Ainakin minä sain. Oletkohan käsittänyt tehtävänannon väärin?
-- Paina "Kopioi taunosta", sitten "Aja, ja sitten "Test". /AJL

21 Jan 16 (edited 23 Jan 16)
# 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).

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

parametrina pelin?

23 Jan 16

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

 

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