Programmeerimise algkursus
Ainekood: I200 |
Sisukord
Tankiturniiri tulemused ja lõpphinded
Margus Ernits viis läbi tudengitankide vahelise turniiri. Lõpptulemused järgmised:
- I Silver Kuusik (20 lisapunkti)
- II Robert Õim (15 lisapunkti)
- III-IV Jürgen Erm (10 lisapunkti)
- III-IV Kaspar Steinberg (10 lisapunkti)
- III-IV Jaan Vahtre (10 lisapunkti)
Seepeale said ÕIS-is kinnitatud lõplikud hinded.
Eksam: 7. jaanuar
Eksam toimub 7. jaanuaril ruumis 314, kell 10-13 ja 13.30-16.30 vastavalt grupile (vt õis!).
Eksamile eraldi registreeruda ei ole vaja (piisab deklaratsiooni olemasolust). NB! Kaasa võtta pildiga dokument.
Eksamile pääsemiseks on kohustuslik saada eelnevalt arvestatud kõik praktikumid ja edukalt sooritatud kontrolltöö. Neid järele teha ei saa.
Järeleksamid (eeldusel, et praktikumid/kontrolltöö olid ok) toimuvad aprill/märts (esimene) ja september/oktoober (teine).
Standardne hindamisskaala: 50-59 hinne 1, 60-69 hinne 2, ..., 90-100 hinne 5.
Seejuures saadakse kogupunktid summana:
- Praktikumitööd: 30%. Perfektsed praksitööd annavad seega 30 punkti.
- Kontrolltööd: 20%.
- Eksam: 50%. Viis ülesannet, igaüks 10 punkti.
- Robocode tankilahing: toimub aasta alguses, punktid vastavalt tulemustele:
päris mitu paremat osavõtjat ja päris palju punkte. Täpsustused hiljem.
Eksam kirjutatakse paberil, harilikus auditooriumis, arvuteid ja lisamaterjale ei ole. Teooriaküsimusi ei tule. Üks ülesanne on koodist arusaamise kohta, neli ülesannet seisneb väikeste programmilõikude kirjutamises.
Juhuslikke süntaksivigu ja väiksemaid näpuvigu võib teha: need ei võta üldse punkte alla (süstemaatilised süntaksivead siiski võtavad punkte alla). Kood ei pea kompileeruma, seda ei testita. Arvestatatakse põhimõttelist arusaamist.
Viis ülesannet on järgmistel teemadel:
Koodist arusaamine: mida etteantud programm trükib. Koosneb kahest alamülesandest: lihtne ja keerulisem. Ülesandes on funktsioonid, globaalsed ja lokaalsed muutujad, tehted täisarvudega, omistamine, aritmeetika-op ++, +=, jne, tsüklid.
Massiivide ülesanne. Massiive osata deklareerida,
teha ja kasutada.
Nii ühe- kui mitmemõõtmelisi. Ülesanne on kirjutada
vajalik programmilõik.
Stringiülesanne. Stringi läbikäimine ja töötlus, näiteks alamstringi otsimine, alamstringi asendamine, teatud tähtede kokkulugemine vms. Vajalikud teegifunktsioonid (paar üksikut) antakse ette ja seletatakse. Ülesanne on kirjutada vajalik programmilõik.
Joonistamisülesanne. Sisuks ainult etteantud graafikapinnale kujundi joonistamine (eeskätt vaja aru saada koordinaatidest ja nende teisendustest). Vajalikud teegifunktsioonid antakse ette ja seletatakse (drawline, drawcircle vms). Nuppe, paneelide ja akende tegemist, evente jms GUI osi ei tule. Ülesanne on kirjutada vajalik programmilõik.
Puude/listide ülesanne. Peab oskama teha lihtsamaid puid ja liste ning neid läbi käia ja lihtoperatsioone (trükk, kokkulugemine, elemendi otsimine) programmeerida. Peab oskama kirjutada puu klassi. Abstract klasse ei nõuta. Stacke ja quesid ei tule. Parserit ei tule. Ülesanne on kirjutada vajalik programmilõik.
Aeg, koht
Loengud: Igal esmaspäeval kell 12.00-13.30, ruumis 314
Semester: sügis
Tulemus: kirjalik eksam, mille eelduseks ja üheks punktiosaks on praktikumiülesanded ja kontrolltööd.
Praktikum: vaheldumisi kord nädalas a 2*45 minutit ja kaks korda nädalas a 2*45 minutit.
Rühmadel on erinevad ajad ja juhendajad.
Praktikumiajad:
- Kolmapäev 8.15-9.45: paaritu nädal 11, paaris nädal 12
- Neljapäev 12.00-13.30: paaritu nädal 13, paaris nädal 14
- Reede 10.00-11.30: 13 ja 14
- Reede 12.00-13.30: 11 ja 12
Kursuse eesmärk
Õpetada programmeerimise aluseid ja tehnoloogiat üldiselt, eeldamata varasemat kokkupuutumist programmeerimisega. Programmeerimiskeelena kasutatakse Javat. Rõhk on arusaamisel ning praktiliste kogemuste ja oskuste omandamisel: iseseisev töö praktikumis on olulisem, kui õpiku lugemine. Märgatava osa loenguaega kulutab lektor kohapeal ette-programmeerimiseks.
Õpik
Tasuta e-book: David Eck, Introduction to Programming Using Java , version 5, 2006 (http://math.hws.edu/javanotes/ vt ka http://math.hws.edu/eck/cs124/downloads/javanotes5.pdf)
Kursus jätab käsitlemata keerulisemad osad õpikust. Viited vajalikele peatükkidele ja täiendavatele materjalidele on kas juba võrgus antud või lisatakse võrku loengute käigus.
NB! Raskuste ja probleemide korral on soovitav iseseisvalt lugeda läbi kogu David Ecki raamat ja teha iga peatüki juures mõned iseseisvad harjutused (raamatus on toodud ka näitelahendused).
Käesoleva lehe lõpuosas on antud ka täiendavaid lugemismaterjale.
Hindamine
Hinde aluseks on punktid erinevatest ülesannetest:
- Praktikumitööd: 30%
- Kontrolltööd: 20% (ei ole kohustuslik, kui teed piisavalt hästi tasemetöö (täpsem info esimeste nädalate jooksul))
- Eksam: 50%
- Robocode tankiturniir: vastavalt tulemustele.
Praktikumiülesanded ja tähtajad
Praktikumides lahendame asju jooksvalt harjutamise eesmärgil. Hinde saab kolme iseseisva töö eest. Iseseisvad tööd peavad olema valmis tehtud ja kaitstud enne auditoorse õppetöö lõppu st. hiljemalt 19. detsembriks 2008. Ülesannete kirjeldused leiab aadressilt http://www.itcollege.ee/~aandreim/java/kodused
Alustuseks tee ära: java tutvustusülesanne.
NB! Tutvustusülesannet ei juhendata ega kontrollita. See tuleks iseseisvalt ära teha esimese õppetöö nädala jooksul.
Käsureaga mugavamaks hakkamasaamiseks arvutiklassides loe neid soovitusi: AK arvutiklasside XP java käsurida.
Tähelepanek: päris paljudel masinatel ei leia java kompilaator ja interpretaator (javac ja java) üles vajalikke klasse, isegi siis, kui asud kompileerides kataloogis, kus need vajalikud klassid on. Sellisel juhul kutsu javac ja java välja koos classpathiga, milleks on kataloog, kus ise oled (seda tähistab punkt -cp järel), eeldusel muidugi, et oled ise selles kataloogis, kus vajalikud klassid:
- javac -cp . minuprogramm.java
- java -cp . minuprogramm
Jooksvalt reedestes praktikumitundides lahendatud ülesanded ja juhised on siin: http://www.itcollege.ee/~aandreim/java/praktikumid/
Praktikumi/harjutusülesanded jagunevad kahte gruppi:
- Väikesed üleni iseseisvalt kirjutatavad programmid. Kõigile kohustuslik.
- Robocode tankilahing: kursuse käigus selgitatakse parimad turniiril. Paremad saavad suure hulga eksami-lisapunkte.
Loengute plaan ja materjalid
Loengute plaan on esialgne, töö käigus ilmub siia kindlasti muutusi. Seega, täpselt adekvaatsed ja õiged on need materjalid, mille loeng on kas juba läbi või tuleb järgmisena: kõik tuleviku-loenguid puudutavad materjalid on vanad, ning saavad loengu kättejõudmise ajaks mingil määral modifitseeritud ja täiendatud.
- 1. Sissejuhatus programmeerimisse, kursuse ülevaade.
- Aeg: 1 september.
- Lugeda: D.Eck ptk 1
- Lugeda: Paul Graham: Hackers and Painters
- 2. Muutujad, tüübid, tehted, kontrollid.
- Aeg: 8 september.
- Loengumaterjal (ilma enamuse näideteta): progalg2.ppt, progalg2.pdf
- Lugeda: D.Eck ptk 2
- Kasutajalt sisendi lugemise funktsioonid (Ecki tehtud) leiad siit
- Lugeda: Peter Norvig: Teach yourself programming in ten years
- Loengumaterjal ilma tunnis tehtud näideteta: progalg2.ppt, progalg2.pdf
- 3. Tehted, tsüklid, tingimused, lisavõimalused. Massiivid.
- Aeg: 15 september.
- Loengumaterjal (ilma enamuse näideteta): progalg3.ppt, progalg3.pdf
- Lugeda: D.Eck ptk 3
- 4. Näited seniõpitu kohta. Täringustatistika programmeerimine.
- Aeg: 22 september.
- Loengumaterjal (lõplikult valminud näide): Täringustatistika
- 5. Funktsioonid.
- Aeg: 29 september.
- Loengumaterjal: Esimene osa siit: Progpohi3_07.ppt, Progpohi3_07.pdf
- Lugeda: D.Eck ptk 4
- 6. Mitmemõõtmelised massiivid ja funktsioonide kasutamine.
- Aeg: 6. oktoober
- Loengumaterjal: Loengu käigus valminud Game of life käsurealt. Vt ka Conways Game of Life
- Lugeda: D.Eck ptk 7.1, D.Eck ptk 7.2 ja D.Eck ptk 7.5
- 7. Stringitöötlus. Graafika algus.
- Aeg: 13. oktoober. Loengu peab Antti Andreimann.
- Loengus kirjutatud näited: Stringid.zip
- 8. Graafika. Objektide ja GUI algus.
- Aeg: 20. oktoober. Loengu peab Antti Andreimann.
- Loengus kirjutatud näited: Graafika1.zip
- 9. Objektid.
- Aeg: 27. oktoober.
- Loengumaterjal ilma tunnis tehtud näideteta: Objektid1.ppt, Objektid1.pdf
- Lugeda: D.Eck ptk 5 sect 1-5
- 10. Otsing ja sorteerimine
- Aeg: 3. november
- Kasutajaliidese jätk. Otsing ja sorteerimine.
- Sorteerimine: progalg_sort.ppt, progalg_sort.pdf
- Lugeda: D.Eck ptk 8.4: Searching and Sorting, analüüse ja seletusi.
- Proovida: xsortlab, sorting demo, Sortingdemo.zip
- 11. Keerukam otsing
- travelling salesman
- Aeg: 10. november
- Loengus ehitatud lahendus: travelling_salesman
- 12. Kasutajaliideste jätk
- Aeg: 17. november
- Loengus ehitatud graafiline Life: Glife1
- 13. Andmestruktuurid
- listid, stack, queue
- Aeg: 26. november
- Loengumaterjal: Progalg_listid.ppt, Progalg_listid.pdf
- Loengus kirjutatud näide, mis teisendab massiivi listiks, lisab uue elemendi ja siis teisendab tagasi massiiviks: Listex
- Õpikust lugeda: peatükk 9 osad 1,2,3.
- 14. Andmestruktuurid
- puud
- Aeg: 8. detsember
- Listide, stacki/queue meeldetuletus eelmisest loengust, seejärel puud.
- Õpikust lugeda: peatükk 9 osa 4.
- 15. Andmestruktuuride jätk
- keerukamad puud, parserid
- Aeg: 8. detsember kell 16.00 - 17.30 ruumis 314
- Õpikust lugeda: peatükk 9 osa 5.
- Lisamaterjal: parse1.java
- Loengus tehtud näide puude kohta: Treex.java
- Loengu Näiteprogramme parserite kohta Parse_examples.zip
Harjutustundide materjalid
- Sissejuhatus sõjarditele (robocode)
- Võta siga sihikule
- Sigade valik
- Seisev tank on surnud tank
- Käed ja jalad oskavad korraga eri asju teha, eksju?
- Seinad sakivad
Tarkvara ja käsiraamatud
Vajalik tarkvara kodus töötamiseks:
- Java J2SE JDK (Java 2 standard edition java development kit).
Tõmba SUN-i lehelt http://java.sun.com/javase/downloads/ versioon "JDK 6 update 7".
(või hilisem) NB! Vajalik on JDK, mitte JRE, ja nimelt J2SE (standard edition), mitte J2ME (micro edition) või J2EE (enterprise edition). Infoks: enne Java 1.5 versiooni kasutati nime JDK asemel nime SDK.
Versioone "JDK 6 with NetBeans" ja "JDK 6 with Java EE" ei ole soovitav tõmmata, kui sa just ise nende vastu spetsiaalset huvi ei tunne. Kui sinu masinas juba on Java JDK ehk SDK (kontrolli, kas leiad programmi nimega javac), siis on ta OK, kui versioon on vähemalt 1.3.1. Vanemaid, kui 1.3.1 versioone ei ole soovitav kasutada.- Praktiline juhatus versiooni 6 installeerimiseks
- Praktiline kiire juhatus eelmise kasutamiseks: windowsi jaoks, unixi jaoks
- Tekstiredaktor SciTE: põhileht, linuxi download (alternatiivina on distrotes enamasti oma scite package) windowsi download, mõnusam windowsi download (soovitav!).
- Keerulisem alternatiiv SciTE-le on mahukas java IDE: Eclipse.
- Robocode http://robocode.sourceforge.net
Tehnilised käsiraamatud:
- Sun'i tehniliste Java käsiraamatute üldleht: leiad siit
- Sun'i Java teekide ja teegifunktsioonide kataloog: otselink versiooni 1.5 jaoks
Lisa-lugemismaterjale
Lihtsad:
- Bradley Kjell: Computer Science I, using Java
Keskmise keerukusega:
- Sun'i Java tutorial: algus on siin
- Sun'i kataloog erinevatest õppematerjalidest
Keerukad (ära loe, kui kõik muu pole veel liiga-liiga lihtne!):
- Bruce Eckel: Thinking in Java Vt ka http://mindview.net/Books.