```

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 1

Tehtävät perustuvat luentoihin: 01 ja 02.

OPPIMISTAVOITTEET

Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.

# Oppimistavoitteet
# fields

Demoista

Tehtävä 1*. TIMiin tutustuminen

Tämän tehtävän tarkoituksena on tutustua TIM:iin uutena oppimisympäristönä ja opetella navigoimaan sen sisällä.

Jokaisen TIM-kurssisivun yläpalkissa on lista, josta löytyy mm. Moniste, Demot ja Työkalut. Listalla on suoria linkkejä (Koti, Moniste, Keskustelu) ja luetteloita (Luennot, Demot, jne. ).

Seuraavissa tehtävissä, joissa pyydetään etsimään sivu: kopioi osoitepalkissa oleva sivun osoite kunkin tehtävän vastaukseksi. Sivuilla tarkoitetaan Ohj1-kurssin TIM-sivuja, ei Googlella löydettyjä satunnaisia sivuja.

a)

# timA1
# timA2

b)

# timB1
# timB2

c)

# timC1
# timC2

d)

# timD1
# timD2

Tauno T1 a

Tee Taunolla ohjelma, joka kääntää taulukon päinvastaiseen järjestykseen.

# kaannataulukko

Jotta saat täydet pisteet, niin paina aina ensin Aja ja sitten Test.

Tauno T1 b

Tee Taunolla ohjelma, joka vaihtaa joka toisen alkion pareittain keskenään. Eli jos taulukossa olisi vain 4 alkiota, niin taulukosta 1, 2, 3, 4 tulisi taulukko 2, 1, 4, 3

# vaihdajokatoinen

Ville V1

Tee Villestä kohta 1.

# V1

Tee myös Villestä tehtävä 2.1. 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ää.

Kun kirjoitat TEKSTIvastauksia, niin rivitä vastaus itse niin että se näkyy kunnolla vastausruudussa. Toisaalta tekstikäsittelyssä (esim. Word) ei saa itse rivittää.

# VilleV1

Tehtävä 2. Komentorivi

Tehtävän saa tehdä myös Macillä tai Linuxilla. Windowsissa saa käyttää Git Bash (suositus), WSL, CMD tai PowerShell.

Mäcissa/Linuxissa alla esitetty kurssit hakemisto kannattaisi tehdä ehkä ~/ alle (mato on lyhenne omalle kotihakemistolle, esim /users/vesal.

Aloita sen mukaan mitä shelliä käytät esimerkiksi seuraavasti (c-levyn tilalla voit käyttää muutakin levyä Windowsissa):

Linux/Mac:   cd ~
Git Bash:    cd /c
WSL:         cd /mnt/c
CMD:         cd /d C:\
PowerShell:  cd c:\

Tee valitsemallasi komentorivikäyttöliittymällä alla olevan mallin mukainen hakemistorakenne kurssin demovastauksia varten. Alla sisennykset kuvaavat sitä, mikä on minkäkin alihakemisto.

kurssit
  ohj1
    demot 
      demo1
      demo2
    ht

Kun olet luonut yllä olevan hakemistorakenteen palaa samaan hakemistoon, josta edellä aloitit ja sitten kirjoita komento

Linux/Mac/Git Bash/WSL:   ls -laR kurssit
PowerShell:               dir -s kurssit
cmd:                      dir kurssit /s

Pitäisi näkyä mm. seuraavia rivejä, jos tehtävä on tehty oikein (Linuxissa ja komentorivissä näyttää vähän erilaiselle, mutta idea on sama):

kurssit:
total 0
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 .
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 ..
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 ohj1

kurssit/ohj1:
total 0
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 .
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 ..
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 demot
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 ht

kurssit/ohj1/demot:
total 0
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 .
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 ..
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 demo1
drwxr-xr-x 1 vesal 197609 0 Sep  4 23:09 demo2

Tehtävän vastaukseksi luodaan palautettava tiedosto teht1.txt seuraavasti:

Linux/Mac/Git Bash/WSL:   ls -laR kurssit >kurssit/ohj1/demot/demo1/teht1.txt
cmd:                      dir kurssit /s >kurssit\ohj1\demot\demo1\teht1.txt
PowerShell:               dir -s kurssit >kurssit\ohj1\demot\demo1\teht1.txt

Katso, mitä tuli tiedostoon teht1.txt. Mene ensin demo1 hakemistoon ja sitten:

Linux/Mac/Git Bash/WSL:   cat teht1.txt  
CMD/PowerShell:           type teht1.txt

tai voit katsoa teht1.txt tiedoston sisältöä myös jollakin tekstieditorilla (esim. Notepad++, Sublime Text).

Kopioi tiedoston teht1.txt sisältö alla olevaan tekstikenttään. Sitten voit tuhota tiedoston teht1.txt.

# tehtava2

Tehtävä 3. Työkalut

Varmista, että sinulla on jossakin käytössäsi minimityökalut tämän kurssin suorittamiseen. Omaa konetta varten työkalujen latauslinkit ja asennusohjeet löydät kurssin TIMistä. Agoran mikroluokissa nämä löytyvät valmiina

Jos ohjelmien asennuksessa ilmenee ongelmia, voit kysyä neuvoa kaverilta, kurssin keskustelusivulta tai katsoa kurssin TIM-sivuilta löytyviä asennusohjeita. Kotoa käsin toimiminen edellyttää pidemmän päälle edellä mainittujen työkalujen asentamista! Ihan alkuun voi hätätilassa tulla toimeen pelkästään tekstieditorilla

Kokeile käytännössä

Tehtävän vastauksena lisää tiedostoon HelloWorld.cs joku keksitty vaikka Ankkalinnan nimi kommentteihin. Kopioi tiedoston HelloWorld.cs sisältö alla olevaan tekstikenttään. Dokumentoinnin osalta ota mallia esimerkistä: 2.4.1 Dokumentointi.

# tehtava3

Tehtävä 4. Tiedoston kirjoittaminen

Editorin käyttötaito: Ota sekuntikellolla aika, kauanko juuri sinulla menee alla olevien ohjeiden mukaisen tekstitiedoston kirjoittamiseen. Ei saa huijata! Tämä on leikkimielinen mutta sitäkin vakavampi kilpailu.

Lue ensin tehtävä huolellisesti. Kun olet ensin sisäistänyt kaikki ohjeet, aloita tyhjästä tiedostosta ja käytä ainoastaan valitsemaasi tekstieditoria ja omia käsiäsi. (Tekstieditori on esimerkiksi ConTEXT, NotePad++, SublimeText, VIM, Emacs tms. Mikään Word tai muu "Office"-tyyppinen ohjelma ei ole tekstieditori). Kaikki editorin ominaisuudet ovat tietysti käytössä (eli leikkaa-liimaa, etsi-ja-muokkaa ja vastaavat kumppanit). Hiirtä EI SAA käyttää lainkaan tehtävän aikana. Aloita ajanotto siitä, kun kirjoitat ensimmäisen merkin, ja lopeta siihen kun viimeinen merkki on kirjoitettu. Tiedoston sisällön tulee olla seuraavanlainen:

  1. Aluksi tasan sata riviä, joilla jokaisella lukee:

    Harjoittelen tekstitiedoston tekemistä!
  2. Sen jälkeen tasan yksi rivi, jossa on tasan 80 kpl miinusmerkkejä '-' eikä mitään muuta, ei myöskään välilyöntejä.

  3. Sitten neljäkymmentä riviä, joissa on luvut ykkösestä neljäänkymmeneen kahdella numerolla siten, että jokaisella rivillä on yksi luku. Näin siis alkaisi tämä pätkä:

    01
    02
    03

    ...ja näin päättyisi:

    39
    40
  4. Loppuun taas sellainen rivi, jossa on tasan 80 kpl miinusmerkkejä. Mitään muita rivejä tai tyhjiä rivejä ei saa olla. Tyhjiä merkkejä ei saa olla rivien aluissa tai lopuissa.

Pysäytä ajanotto. Tallenna nimelle teht2.txt. Jälkeenpäin kirjoita vielä tiedoston loppuun (uudeksi viimeiseksi riviksi heti miinusmerkkirivin perään), kauanko sinulta meni. Ajan tulee olla muotoa mm:ss, missä mm on minuuttien määrä ja ss on sekuntien määrä. Tämän perään uudelta riviltä aloittaen kirjoita vielä lyhyt kuvaus siitä, mitä ja miten teit tehtävän aikana. Tässä on vastaustiedostosi tähän tehtävään. Tulos antaa itsellesi suuntaa nykyisestä tehokkuudestasi tekstin tuottajana suhteessa kurssikavereihin. Esim. Ohjelmointi 1 -kurssin lopussa voi tehdä testin uudelleen, ja kokeilla onko tapahtunut kehitystä.

Kopioi kirjoittamasi tiedoston sisältö alla olevaan vastausalueeseen ja ole todella huolellinen että kaikki on kuten ohjeissa. Muuten ei anna 1p. Virheitä voi olla mm:

  • rivien lopuissa ylimääräisiä välilyöntejä
  • viivariveillä ei ole täsmälleen 80 miinumerkkiä
  • aika on muotoa 3:45 eikä 03:45
  • aika-rivillä on jotakin muutakin kuin pelkkä aika
  • aika rivin jälkeen ei ole rivinvaihtoa
  • puuttuu aika-rivin jälkeen selitys siitä, miten toimittiin.

Mikäli et saa tehtävästä millään pisteitä mutta se on mielestäsi oikein (on siinä joku vika silti :-), niin voit ruksia kohdan Set custom points ja sitten laittaa itsellesi max 0.5 p. Jos kuitenkin haluat vielä yrittää automaattiarvostelua ja 1 p, niin ota ruksi pois. Muista aina painaa Tallenna kun olet muuttanut jotakin.

# tehtava4

Tehtävä 5. ASCII-koodi

Lue ensin: 27. ASCII-koodi.

Tämä tehtävä on tarkoitus tehdä ilman minkään apuohjelman käyttöä. Tehtävän tekemiseksi tehtävän taulukko 3 ja luentomonisteen Taulukko 10 riittää lähteeksi.

Voi voi. Simolta on mennyt USB-tikku rikki. Tikulla on vain pieniä tiedonsirpaleita eikä mitään tietoa, mikä sirpale kuuluu mihinkin. Siellä oli MP3-tiedostoja ja paljon muuta turhaa... Simo tietää kuitenkin, että yhdessä elintärkeässä tiedostossa hänellä luki selväkielinen salasana isoilla kirjaimilla. Alla oleva bittijono näyttää lupaavalta, mutta jotenkin pitäisi selvittää mitä siinä lukee:

Taulukko 1:
01010011  01001001  01010011  01010101
01001100  01001001  01010011  01001011
01001111

Helpotetaan: seuraavassa on samat (taulukon 1) tavun mittaiset jonot 10-järjestelmän lukuina (saatu luettua taulukosta 3 eli 01010011 = 83 jne...), ja malliksi on yksi luku muutettu ymmärrettäväksi kirjaimeksi alla olevaan taulukko 2:een.

Taulukko 2:

binääri   dec   char  hex
==========================
01010011 = 83
01001001 = 73 => I     49  
01010011 = 83
01010101 = 85 
...

Täydennä vastaavuudet loppuun saakka.
Heksadesimaali (hex) arvo täydennetään tehtävän lopussa, 
kun olet ensin tehnyt tämän alkuosan.

Tulkitse kaikki muutkin merkit, ja vastaa sitten seuraaviin kysymyksiin:

  • Mikä tuohon USB-tikun kohtaan tallentunut salasana oli?
  • Montako millimetriä Simo on painanut ohi yhdestä näppäimestä? Hänellä on samanlainen näppäimistö kuin sinulla.
  • Mikä binääriluku pitäisi olla viallisen kirjaimen kohdalla?

Tehtävän vastauksena kirjoita täydennetty taulukko 2 kirjainten vastaavuuksista ja vastaukset kysymyksiin. Simo tietää, että hänen käyttämässään tiedostomuodossa merkeille on sovittu seuraavat koodit (pala ASCII-koodia):

Taulukko 3:

Desimaaliluku Binäärilukuna Vastaa merkkiä
-------------------------------------------
  32          00100000      [välilyönti]
  33          00100001        !
  46          00101110        .
  65          01000001        A
  66          01000010        B
  67          01000011        C
  68          01000100        D
  69          01000101        E
  70          01000110        F
  71          01000111        G
  72          01001000        H
  73          01001001        I
  74          01001010        J
  75          01001011        K
  76          01001100        L
  77          01001101        M
  78          01001110        N
  79          01001111        O
  80          01010000        P
  81          01010001        Q
  82          01010010        R
  83          01010011        S
  84          01010100        T
  85          01010101        U
  86          01010110        V
  87          01010111        W
  88          01011000        X
  89          01011001        Y
  90          01011010        Z

Kun olet tulkinnut kaikki merkit muunna binääriluvut heksaluvuiksi jollakin seuraavista tavoista (tai kokeile useampia):

  1. avaa Windowsin tms. laskin ja laita se Programmer tilaan ja katso kutakin 10-järjestelmän lukua vastaava heksaluku (esim 73 kymmenjärjestelmässä on 49 heksalukuna)
  2. ota kurssin kotisivun ohjeiden mukaan itsellesi jokin heksa-editori. Kirjoita esim. NotePad++:lla tai vastaavalla tiedosto (vaikka nimelle t4.txt), jossa on äsken katsomasi teksti tekstinä (siis ne tulkitsemasi merkit). Sitten avaa tämä tiedosto heksaeditorilla ja katso vastaavien merkkien arvot heksalukuina.
  3. avaa luentomonisteesta muunnostaulukko ja muunna binäärilukuja heksaluvuiksi seuraavalla tavalla:
    1. jaa binääriluku 4 bitin palasiin
    2. katso kumpaakin palasta vastaava 16-järjestelmän (heksajärjestelmän) luku taulukosta
    3. heksaluku on kun nämä luvut laitetaan peräkkäin
    Esimerkiksi binääriluku 01011010 = 0101 1010 ja muunnostaulukosta vastaavat heksaluvut ovat 5 ja A eli binääriluku on heksalukuna 5A.
  4. katso kutakin kirjainta vastaava heksaluku monisteen ASCII-taulukosta.

Kirjoita heksaluvut vastaustaulukkoon kunkin kirjaimen vierelle (kuten mallipohjassa on tehty I:n kohdalle) ja jatka kaikki Taulukossa 1 olevat tavut vastaukseen. Yleensä tietotekniikassa käytetään heksalukuja silloin, kun halutaan puhua binäärisistä arvoista koostuvista kokonaisuuksista (kuten tässä esimerkissä kirjainten koodeista).

# tehtava5

Tehtävä 6*. Tietojen tulostaminen

Kopioi aluksi tehtävän 3 tiedosto HelloWorld.cs tiedostoksi Mina.cs:

Git Bash/Mac/Linux:

cp HelloWorld.cs Mina.cs

Windows CMD:

copy HelloWorld.cs Mina.cs

Avaa Mina.cs editoriin (komentoriviltä esim. komennolla npp Mina.cs). Jos komento ei toimi, varmista mikroluokassa että olet liittänyt N-levyn täältä. ja kotikoneessa tehnyt Tekstieditorin käynnistäminen komentoriviltä. Jos ei toimi sittenkään, niin käynistä "tyhmällä" Windows-tavalla. Muuta luokan nimi HelloWorld nimeksi Mina. Sitten muuta ohjelma sellaiseksi, että se tulostaa jonkun kuvitteellisen henkilön nimen, kännykän valmistajan ja operaattorin nimen, kunkin eri riveille. Käännä ja aja ohjelma. Kopioi tiedoston Mina.cs sisältö alla olevaan tekstikenttään. Muista dokumentointi.

(Huom: Yliopiston koneilla U-asemalta ei saa ajaa ohjelmia. Käytä C:\MyTemp-kansiota.)

# tehtava6

Tehtävä 7*. Lumiukko I

Muuta ohjelma sellaiseksi, että se piirtää lumiukolle silmät, mielellään myös nenän ja suun.

Huomaa edellä p3.Add(silma1), eli silma1 lisätään p3-olion lapseksi (eli p3:n sisälle).

Nyt siis silma1 on liitetty kiinteästi kappaleeseen p3 sen keskipisteeseen (koska Y:hyn lisätään 0). Mieti itse miten muutetaan X-koordinaattia.

Jos yrität lisätä fysiikkakappaleita toisten fysiikkakappaleiden sisälle, huomaat että ne automaattisesti liikkuvat erilleen.

Saat liitettyä kappaleita yhteen niin että ne käyttäytyvät kuin yksi ja sama kappale asettamalla toisen lapsiolioksi seuraavalla tavalla:

Yllä olevassa toimii valitettavasti koordinaatisto eri tavalla dotnet ajettavassa Jypelin versiossa ja TIMissä ajattavassa Jypeli versiossa. Eli TIMIssä lapsiolion koordinaatit ovat suhteessa isäolioon ja dotnet-Jypelissä suhteessa "ruutuun".

Eli

p3.Add(silma1);
silma1.Y = p3.Y;  // Menee keskellä p3:sta dotnet-Jypelissä
silma1.Y = 0;     // menee keskelle p3 TIMin Jypelissä.

Demoja palauttaessa jos tehtävä on tehty pääteohjauksessa, niin helpoin korjaus on vaihtaa vain

Add(silma1);

jolloin silma1 lisääntyy pelin tasolla (ei p3 sisälle). Tai sitten jos pidetään

p3.Add(silma1);

niin koordinaatit pitää muuttaa laskien että silma1:n (0,0) on keskellä p3-palloa.

Mallikuva
Mallikuva
# lumiukko

B1. Alice

Jätä tämä tehtävä väliin jos sinun mielestäsi kurssilla on jo tarpeeksi työkaluja :-)

Ota ja asenna Alice ohjeiden mukaan. Alice 2:n tapauksessa käy ensimmäinen (luistelu) tutoriaali läpi. Jos käytät Alice 3:sta, tee "ohjelma", jossa on muutamia otuksia, jotka tekevät jotakin. Vastauksena kirjoita parilla rivillä mitä opit ja miltä Alice tuntui, kannattaako siitä ottaa jatkossa lisäesimerkkejä. (ks video)

# b1alice

B2. Numeron siirtäminen

Yhtä numeroa (ei lukua, 62 on luku) siirtämällä tee yhtälöstä 62 - 63 = 1 tosi. Siirtäminen tarkoittaa sitä, että kuvitellaan annetussa kaavassa olevan 7 merkkiä (5 numeroa ja - ja =). Jos nuo merkit olisivat vierekkäisiä paperilappuja, niin tasan yhtä numeroa saa siirtää ja muihin ei saa koskea.

# b2numero

B3. Kurssin alkukysely

Vastaa kurssin alkukyselyyn.

Sitten kirjoita kurssin QA-sivulle halumasi otsikon alle jokin kysymys, jonka haluaisit esittää luennoitsijalle. Parhaisiin vastataan luennoilla. Tehtävän vastaukseksi kopioi kysymystekstisi tähän alle. Jos teit tämän jo demossa 0, niin kopioi sieltä kysymyksesi tähän.

# b3alkukysely

G1. Luvut joiden neliöjuuri on kokonaisluku

Tee C#-ohjelma, joka tulostaa ensimmäisestä alkaen järjestyksessä kaikki ne kokonaisluvut <= 1000, joiden neliöjuuri on kokonaisluku. Kukin luku tulostetaan omalle rivilleen. Mitään muuta ei saa tulostaa.

Kirjoita ennen koodaamista käsin lukuja ja niiden neliöjuuria. Tämä on pohja TDD-ajattelulle (Test Driven Development).

# neliojuuret

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