Ohjelmointi 1 (3op), Demo 1
1. Demojen aloittaminen
- Aloita katsomalla luentovideot. Ne ovat vuoden 2016 ohjelmointi 1 -kurssilta, joten kaikki niissä ilmenevät asiat eivät päde tähän 3op:n kurssiin. Luota aina tämän kurssin kotisivujen tietoihin.
- Aloita tekemään demoja. Lue ohjeet huolellisesti ja huomaa erilaiset tehtävätyypit. Pakolliset tehtävät on merkitty tähdellä (*).
2. Luennot
2.1 1. luento: ma 5.9.2016 klo 12:15-14:00: Aihe: Alkubyrokratia, komentorivi, yksinkertaisin C#-ohjelma
- 3 tärkeää asiaa
- Kurssin kotisivujen ja pelisääntöjen läpikäynti
- Vastaa kurssin alkukyselyyn
- Komentorivi
- Mahdollisimman paljon koneen käyttöä muuten kuin hiirellä
- Vuoden 2007 materiaali Windowsin komentorivistä
- Vuoden 2007 materiaali Linuxin käytöstä Jyväskylän yliopistossa.
- Komentorivistä muita linkkejä: Työvälinekurssin moniste
- M: 1. Mitä ohjelmointi on? TIM
- M: 2. Ensimmäinen C#-ohjelma TIM
- Julkkiskin haluaa pysyä ajan hermolla
- 1. luento videona: Osa 1 ja 2 MP4 alkuperäinen, MP4 kännykkäversio
- Jos haluat katsoa luentovideoita, niin tiedostoja ei tarvitse välttämättä ladata, vaan videoita voi streamata (suoratoisto).
2.2 2. luento: ti 6.9.2016 klo 14:15-16:00: Aihe: yksinkertainen graafinen C#-ohjelma
- Demotehtävien tarkastelua
- pääteohjauksiin osallistujien määrän laskeminen
- Excelillä
- AWKilla
- HelloWorld muilla kielillä
- M: 2. Ensimmäinen C#-ohjelma - kerrataan syntaksia ja kääntämistä
- M: 3.5 Peräkkäisyys
- M: 4. Yksinkertainen graafinen C#-ohjelma
- Lumiukko.cs
- Jypeli-kirjasto ja sen asennus. Kirjaston dokumentaatio (versio 4).
- Näppäinoikoteitä näppäimistön käyttöä nopeuttamaan (NPO wikissä)
- Tiedoston sisältö binäärisenä
- Luennolla tehdyt koodit
- 2. luento videona: Osa 1 ja 2 MP4 alkuperäinen, MP4 kännykkäversio
- luentoseinä
3. Demot
4. Ryhmässä tekeminen
Mikäli teette tehtäviä ryhmässä, niin kirjautukaa kaikki TIMiin, niin saatte palautettua tehtävät kerralla kaikille ryhmäläisille. Ryhmän muiden jäsenten kirjautumisen voi tehdä yläreunassa olevaa omaa nimeä klikkaamalla; sieltä aukeaa valikko, jossa voi lisätä muita käyttäjiä. Lopuksi muistakaa kaikki kirjautua ulos.
5. Demoista yleistä
Demoista yleisesti sekä niiden pisteistä ja miten niitä lasketaan, kerrotaan tarkemmin kurssin kotisivuilla.
Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.
Demotehtävän alussa tai muualla iso M ja linkki tarkoittaa viittausta luentomonisteeseen. Linkki menee TIM-monisteeseen, mutta käynnistää joka kerta siitä uuden "esiintymän". Jos haluat säästää aikaa, katso M-kirjaimen jälkeen oleva otsikko ja etsi aina 1. kerran avatusta TIM-monisteesta vastaava otsikko (Ctrl-F) ja siirry siellä siihen kohtaan. Tai siirry M-linkin kohdalle, hiiren oikealla paina "Kopioi linkin osoite" ja mene kerran avattuun TIM-monisteen sivulle ja liimaa kopioitu linkki osoiteriville. Tämän pitäisi siirtyä oikeaan kohtaan lataamatta monistetta uudelleen.
Jokaisessa demossa on vähintään kaksi tähtitehtävää (*). Tähtitehtävistä vähintään kaksi pitää tehdä joka kerta.
6. Tehtävien pisteistä
Jokaisella tehtäväkerralla voi olla tavallisia tehtäviä, Ville-tehtäviä (V=Ville) Tauno-tehtäviä (T=Tauno), lisätehtäviä (B=Bonus) ja harrastajien tehtäviä (G=Guru).
Tehtävät ovat yhden pisteen tehtäviä, ellei ole erikseen mainittu, että tehtävästä saa useamman pisteen (esim. Ville 1
, Tehtävä 1
ja B2
eli Bonus 2
ovat maksimissaan yhden pisteen tehtäviä, mutta G1-2
on maksimissaan kahden pisteen tehtävä).
Kun olet tehnyt tehtävän, muista tarkistaa, että pistemäärä on oikein. Viimeisimmän ajon/testin pisteet jäävät voimaan. Test
-napin sisältävät tehtävät tuottavat usein eri määrän pisteitä ajamisesta ja testaamisesta.
Esimerkki:
Ajaminen onnistuu -> 0.5p
Testit menevät läpi -> 1p
Jos edeltävässä esimerkissä menisi vielä testin jälkeen painamaan aja
-nappia, niin pisteet alenisivat 0.5p
ja täysiin pisteisiin täytyisi siis painaa Test
-nappia uudelleen.
Prosentteja laskettaessa enimmäispisteet demokertaa kohti on tavallisten tehtävien lukumäärä. Siten Ville/bonus/GURU-tehtävillä voi "kerätä pisteitä varastoon". GURU-tehtävien tarkoitus on myös tarjota asiaa jo osaaville hieman haastavampia tehtäviä. Kuitenkin kultakin demokerralta lasketaan max. 6 p. Eli vaikka merkitsisi enemmän kuin 8 pistettä, siirtyy automaattisesti korkeintaan 6 pistettä Korppiin.
7. Vanhat vastaukset tai kavereiden vastaukset
Tehtävistä saattaa liikkua edellisten vuosien vastauksia ja jos niiden tai kavereiden vastauksien käyttämisestä jää kiinni, ovat rangaistukset lunttaamiseen verrattavia! Tärkeintä kurssilla on OPPIMINEN, ei demopisteiden kalastelu tai kopiointi. Kopiot saa jo demoissa valmiiksi painetussa muodossa.
Ryhmätyö on sallittua, mutta tämä ilmaistaan laittamalla aina tiedoksi - esimerkiksi ohjelman kommentteihin - kaikkien ryhmään osallistuneiden nimet.
8. Taunon käyttöohjeita:
Kunkin Tauno-tehtävän aluksi klikkaa Click here to show Tauno
-linkkiä.
Taunossa raahaa taulukon alkioita niin, että sinulla on lopuksi tehtävässä pyydetty lopputulos. Katso samalla minkälaista koodia Tauno sinulle generoi. Tämä on C#-kielinen algoritmi tehtävän suorittamiseksi. Jos haluat aloittaa Tauno-tehtävän alusta, piilota ja näytä Tauno uudelleen.
Raahaamisen sijaan (ja joissakin mobiileissa ei muuten voi tehdäkkään) voit myös tökätä ensin lähdealkiota ja sitten kohdealkiota.
Jos tarvitset apumuuttujia, joihin voit viedä alkioita tilapäiseen "säilöön", paina uusi muuttuja
-painiketta. Keksi muuttujalle kuvaava nimi. Muuttujalle voit antaa alkuarvon, mutta tämä ei ole pakollista jos olet heti aikeissa raahata siihen jonkin toisen muuttujan arvon talteen.
Laskutoimituksia voit tehdä raahaamalla arvoja vasemmassa alakulmassa olevaan laskualueeseen ja valitsemalla arvojen välistä minkä laskutoimituksen haluat tehdä. Laskun tuloksen voit sitten raahata takaisin johonkin muuttujaan (siis myös taulukon alkioksi).
Muuttujan arvoa voit lisätä/vähentää yhdellä vetämällä ++
tai --
-operaattorin muuttujan arvon päälle.
Kun olet saanut Taunolla ohjelman mielestäsi valmiiksi, voit painaa Aja
tai Test
-painikkeita nähdäksesi miten ohjelma toimii. Molemmissa tapauksissa Taunon tekemä ohjelmakoodi kopioidaan ohjelma-alueeseen ja ajetaan. Ajossa voidaan käyttää eri taulukkoakin kuin mitä Taunossa käytettiin, mutta hyvä "algortimi" selviää tästäkin. Jos testissä saat punaista, lue huolella virheilmoitus ja mieti mikä meni pieleen.
Halutessasi voit aloittaa Taunolla alusta tai sitten jos osaat, voit korjata suoraan ohjelma-alueeseen kopioitua koodia. Demotehtävän vastaukseksi riittää että Aja-napin yläpuolella on sama koodi kuin Taunon koodialueessa.
Näytä koko koodi
-linkistä voit katsoa minkälaisilla arvoilla ohjelma ajetaan tai minkälaisilla arvoilla testataan. Tästä kokonaisuudesta ei kurssin aluksi tarvitse vielä ymmärtää kaikkea. Voit tietysti yrittää "arvailla" mistä on kyse.
9. Tehtävä Tauno T1 a
Tee Taunolla ohjelma, joka kääntää taulukon päinvastaiseen järjestykseen.
10. Tehtävä Tauno T1 b
Tee Taunolla ohjelma, joka vaihtaa joka toisen alkion pareittain keskenään. Eli taulukosta 1, 2, 3, 4 tulee taulukko 2, 1, 4, 3
11. Tehtävä Ville V1
Tee Villestä kohta 1.
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. Tosaalta tekstikäsittelyssä (esim. Word) ei saa itse rivittää.
12. Tehtävä 1. Komentorivi
Tee komentoriviä käyttäen tietokoneellesi (tai Agoran mikroluokassa U:
-asemallesi) alla olevan mallin mukainen hakemistorakenne kurssin demovastauksia varten. Alla sisennykset kuvaavat sitä, mikä on minkäkin alihakemisto.
Huom. Tulevissa Windows-komentorivikomennoissa oletetaan, että kurssit
-hakemisto on luotu aseman juureen, esim. U:\kurssit
. Jos luot sen muualle, esim. paikkaan U:\jutut\kurssit
, niin korvaa komennoissa polku \kurssit
polulla \jutut\kurssit
.
kurssit
ohj1
demot
demo1
demo2
ht
Kun olet luonut yllä olevan hakemistorakenteen, kirjoita komento
dir \kurssit /s (tai Linuxissa: ls -R HAKEMISTO)
Pitäisi näkyä mm. seuraavia rivejä, jos tehtävä on tehty oikein (Linuxissa näyttää vähän erilaiselle, mutta idea on sama):
Directory of U:\kurssit
Directory of U:\kurssit\ohj1
Directory of U:\kurssit\ohj1\demot
Directory of U:\kurssit\ohj1\demot\demo1
Directory of U:\kurssit\ohj1\demot\demo2
Directory of U:\kurssit\ohj1\ht
Tehtävän vastaukseksi luodaan palautettava tiedosto teht1.txt
seuraavasti:
cd \kurssit\ohj1\demot\demo1
dir \kurssit /s >teht1.txt (Linuxissa ls -R ~/kurssit/ > teht1.txt)
Katso, mitä tuli tiedostoon teht1.txt
:
type teht1.txt (Linuxissa cat 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
13. Tehtävä 2. 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:
Aluksi tasan sata riviä, joilla jokaisella lukee:
Harjoittelen tekstitiedoston tekemistä!
Sen jälkeen tasan yksi rivi, jossa on tasan 80 kpl miinusmerkkejä '
-
' eikä mitään muuta, ei myöskään välilyöntejä.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
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.
14. Tehtävä 3. Työkalut
Vapaaehtoinen, mutta suositeltu: 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 kotisivulta. Agoran mikroluokissa Mountains 212.2 ja Lakes 213.1 nämä löytyvät valmiina (paitsi VS on ehkä vanhempaa versiota).
Kokeile käytännössä (M: 2. Ensimmäinen C#-ohjelma):
- Tallenna esimerkkiohjelma HelloWorld.cs netistä demohakemistoosi.
- Kopioi kyseinen tiedosto hakemistoon
C:\mytemp\OMATUNNUS\ohj1\demo1
.- Siirry
C:\mytemp\OMATUNNUS\ohj1\demo1
hakemistoon. - Toistaiseksi mikroluokissa voi ohjelmia ajaa vain hakemistossa
C:\mytemp
. Siksi tämä kopiointi. - Myös
Jypeli.dll
pitää tarvittaessa kopioida samaanC:\mytemp\OMATUNNUS\ohj1\demo1
-hakemistoon. - Aikanaan kun tehtävä(t) tulevat valmiiksi, kopioi
.cs
-tiedostot takaisin U-levylle.
- Siirry
- Komentotulkkia käyttäen käännä ohjelma ja aja se. Pikaohjeet löytyvät kurssin TIMistä. Tässä lyhyesti:
SETX PATH "%WINDIR%\Microsoft.NET\Framework\v4.0.30319;%PATH%"
Käännä sitten ohjelma kirjoittamalla komentoriville
csc HelloWorld.cs
Aja ohjelma kirjoittamalla
HelloWorld.exe
Tehtävän vastauksena lisää tiedostoon HelloWorld.cs
oma nimesi (tai kaikkien ryhmän jäsenten nimet) kommentteihin. Kopioi tiedoston HelloWorld.cs
sisältö alla olevaan tekstikenttään. Dokumentoinnin osalta ota mallia esimerkistä: 2.4.1 Dokumentointi.
15. Tehtävä 4. ASCII-koodi
M: 27. ASCII-koodi: Voi voi. Simolta on mennyt USB-tikku rikki. Tikulla on vain pieniä tiedonsirpaleita eikä mitään tietoa, mikä sirpale kuuluu mihinkin. Siellä oli paljon MP3-tiedostoja ja kaikkea turhaa... Simo tietää, että yhdessä elintärkeässä tiedostossa hänellä luki selväkielinen teksti isoilla kirjaimilla. Alla oleva bittijono näyttää lupaavalta, mutta mikä teksti siihen on tallennettu:
Taulukko 1:
01010100 01010101 01010100 01001011
01001001 01000101 01001100 01001101
01010011
Helpotetaan: seuraavassa on samat (taulukon 1) tavun mittaiset jonot 10-järjestelmän lukuina (saatu luettua taulukosta 3 eli 01010100 = 84 jne...), ja malliksi on yksi luku muutettu ymmärrettäväksi kirjaimeksi alla olevaan taulukko 2:een.
Taulukko 2:
binääri dec char hex
==========================
01010100 = 84
01010101 = 85 => U 55
01010100 = 84
01001011 = 75
... 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ä teksti tuohon kohtaan USB-tikun muistia on tallentunut?
- 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, 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. Kirjoita ne vastaustaulukkoon kunkin kirjaimen vierelle. Yleensä tietotekniikassa käytetään heksalukuja silloin, kun halutaan puhua binäärisistä arvoista koostuvista kokonaisuuksista (kuten tässä esimerkissä kirjainten koodeista).
16. Tehtävä 5*. Tietojen tulostaminen
M: 2. Ensimmäinen C#-ohjelma: Kopioi aluksi tehtävän 3 tiedosto HelloWorld.cs
tiedostoksi Mina.cs
:
copy HelloWorld.cs Mina.cs
Avaa Mina.cs
editoriin (komentoriviltä esim. komennolla ct Mina.cs
), ja muuta luokan nimi HelloWorld
nimeksi Mina
. Sitten muuta ohjelma sellaiseksi, että se tulostaa sinun nimesi, kännykkäsi valmistajan ja operaattorisi nimen, kunkin eri riveille. Käännä ja aja ohjelma. Kopioi tiedoston Mina.cs
sisältö alla olevaan tekstikenttään. Muista dokumentointi.
17. Tehtävä 6*. Lumiukko
M: 4. Yksinkertainen graafinen C#-ohjelma: Muuta ohjelma sellaiseksi, että se piirtää lumiukolle silmät, mielellään myös nenän ja suun.
Tehtävän voi tehdä myös työasemassa, johon on asennettu .NET Framework 4 ja XNA Game Studio 4. Jos teet työasemassa, niin kopioi demonpalautukseen silti ohjelmasta se osa, joka on Begin
-aliohjelman sulkujen { }
välissä (koska muu osa on alla olevassa koodissa jo valmiina, ks. Näytä koko koodi
.
18. B1. Alice
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)
19. 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ä niistä saa siirtää ja muihin ei saa koskea.
20. B3. Kurssin alkukysely
Vastaa kurssin alkukyselyyn
Ja tutustu kysymyksiin, joita aikaisemmin on kysytty luennoitsijoilta QA-sivulta.
Liitä tähän sinulle hyödyllisin kysymys & vastaus tai kirjoita uusi kysymys.
21. Tehtävä G1-2. Luvut joiden neliöjuuri on kokonaisluku
Tee C#-ohjelma, joka tulostaa kaikki ne kokonaisluvut <= 1000, joiden neliöjuuri on kokonaisluku. Kukin luku tulostetaan omalle rivilleen. TDD: Kirjoita ennen koodaamista käsin lukuja ja niiden neliöjuuria.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.