Ohjelmointi 1, syksy 2024, luento11

# L11

11. luento: ma 6.10.2024 klo 12:15-14:00: Olioviitteet, 2-ulotteiset taulukot

Muu sisältö: Aliohjelmien tekeminen, taulukot, silmukat, if-lauseet, etsiminen, debuggaus, pelikenttä merkkijonosta

1. Kurssin esimerkkiohjelminen hakeminen

  • siirry tyhjään hakemistoon johon haluat esimerkit

    git clone https://gitlab.jyu.fi/tie/ohj1/v/2024/syksy/esimerkit.git .
  • seuraavan kerran jos olet muutellut niin

    git stash
  • sitten

    git pull -r

2. Rider/Visual Studion sanastoa

Katso: Sanasto, löytyy myös menusta

  • assignment = sijoitus
  • unassigned = sijoittamaton, alustamaton

Kerro jos jotakin puuttuu, sinne voi jättää kommentin tai lisätä loppuun puuttuvia sanoja, niin siirretään oikealla paikalleen ja selitetään.

Demot:

  • Ollaan puolessa välissä! (d11 on tentin harjoittelu)
  • Aloittakaa demojen teko ajoissa niin ehditte pääteohjauksissa saada apua!
  • Muistakaa demojen harjoittelusivut
  • Katsokaa tämä sivun silmukka-animaatioita
  • Katsokaa Luento 10-sivun StringBuilder-animaatioita
# GLO_DemoN2
# GLO_stat

3. Kertausta

# Plugin1
# abctulokuva
# muuttujankasvatus
# loops

4. Animaatiot ja silmukat

Lasketaan robotilla yhteen Input-hihnalla olevat luvut ja lopetetaan kun tulee vastaan 0. Lopuksi laitetaan tulos Output-hihnalle. Oletetaan että hihnalla on aina ainakin yksi 0. Muistipaikka 0:aa käytetään summana.

4.1 while

  • muista myös debuggerilla mennä silmukoita läpi!
        while (ehto) 
        {
            lause1;
            lause2;
            lauseX;
        }
# k22

Kuva 22: while-silmukka vuokaaviona.

# ae_while
# ae_while3
# cswhile
# cswhilegoto

Robotti joka "tulostaa" luvut 1-3 (alle 4, muistipaikassa 0). count on muistipaikassa 2. Muistipaikassa 1 on askeleen koko.

4.2 do-while

do 
{
  lause1;
  lause2;
  lauseX;
} while (ehto);
# k24

Kuva 24: do-while-silmukka vuokaaviona.

# ae_doWhile

Robotti joka "tulostaa" luvut 1-3 (alle 4, muistipaikassa 0). count on muistipaikassa 2. Muistipaikassa 1 on askeleen koko.

# csdwhile
# csdowhilegoto

4.3 for

Kuva 25: for-silmukan syntaksi graafisessa "junaratamuodossa".
Kuva 25: for-silmukan syntaksi graafisessa "junaratamuodossa".
for (muuttujien alustukset; ehto; kasvatuslauseet)
{ 
   lauseet; // silmukan runko-osa
}

Älä muuta silmukkamuuttujan arvoa muualla kuin tuolla for-rivin kasvatuslauseissa.

# ae_forloop1
# ae_forloop
# animfor
# robo1

4.4 Robottitehtävä

Muuta robotin ohjelma sellaiseksi, joka laskee Input-liukuhihnalla olevat positiiviset luvut yhteen ja "tulostaa" niiden summan Output-hihnalle. Laskeminen lopetetaan ja tulos tulostetaan kun hihnalta tulee vastaan luku 0. Oletetaan että hihnalla on aina luku 0.

# robotti1

4.5 foreach

int i = 0;
while (i < luvut.Length)
{
    int luku = luvut[i];
    ...
    i++;
}

vastaava for-silmukka

for (int i = 0; i < luvut.Length; i++)
{
    int luku = luvut[i];
    ...
}

tätä vastaa foreach, jossa ei esiinny indeksiä:

foreach (int luku in luvut)
{
   ...
}
# ae_forloop_each

5. Viitteet

# olioviitejamuuttuja
# refanim
# refanim2

5.1 Piirrostehtävä

5.1.1 drawio

Muokkaa alle kuvaa samaa tahtia kun etenet debuggerilla Olioviitteet-luokan ohjelmaa.

# viitteet2

5.1.2 vars.js

# refanim3

Vastaus:

8010 = eka
s1 -> 8010
8040 = eka
s2 -> 8040
i1 = 11
i2 = 11
8070 = 3
it1-> 8070
8080 = 3
it2 -> 8080
s2 -> 8010
# refanim4
ref s1 -> new $1 eka
ref s2 -> new $2 eka
val i1 = 11
val i2 = 11
gn $3 w: 1
ref it1 -> [] $3 v1
$3[0] = 3
gn $4 w: 1
ref it1 -> [] $4 v1 
$4[0] = 3
s2 -> $1
style $2 fill=lightgray
# Plugin2

Vastaus:

ref s1 -> new $1 eka
new $2 eka
ref s2 -> $1
val i1 = 11
val i2 = 11
ref it1 -> [] $3 v1 3
ref it2 -> [] $4 v1 3
style $2 fill=lightgray
# ae_olioviitteet

Muita kysymyksiä

Lisätäämpä vielä rivit

Console.WriteLine(s2);
s1.Append("Toka");
Console.WriteLine(s2);

6. Taulukot

# taulukonsuurinkuva
# funktoita2

2-ulotteiset taulukot

# kerrostalo

[0,0], [1,3], [2,0], [2,3], [3,2], [3,3], [5,2], [5,4]

1. Lumiukot taulukolla

LumiukotTaulukolla simple

Piirrä kuva kun ukot on palautettu taulukossa.

# ukotkuva1
# ukott

2. Matriisit

# matriisit
# matriisitkuva

3. Kentän muokkaus matriisilla

# kenttakuva

TODO: vaihda kaikki public private

# kentanmuokkaus

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