IAG0582 - Programmeerimine II

From ATI public wiki
Revision as of 07:40, 29 April 2020 by Trkal (Talk | contribs) (vna zoom)

Jump to: navigation, search

English course page United Kingdom.png

E-Õpe

Zoomi tuba tarkvara projekti õpilastele, avatakse kell 15:00

Abimaterjalid iseseisvaks õppimiseks
Putty juhend video eesti keeles
Putty juhend video inglise keeles

Eeleksamile registreeumine
Eksamile registreerumine - peale eksamieelduse kätte saamist ning kodutööde esitamist

Punktitabel 2020 kevad IACB
Kaugelt ligipääsu juhend

Ülesanded 18.03.2020
18.03 Ülesande jaoks laeti ülesse juba tehtud kood, seetõttu palun tehke ära lisa ülesanne ja kodune ülesanne, kus tuleb lisaks muuta Linked List Double Linked Listiks (https://www.geeksforgeeks.org/doubly-linked-list/).
Sissejuhtus 25.03 ülesannete jaoks
Ülesanded 25.03
Lisa ülesanne 25.03.2020
Loeng 01.04
Esimese aprilli ülesanne
Kodutöö 3
Koodi kirjutamine toimub enda arvutis kasutades isevalitud tekstiredaktorit(NP++/Geany/VSCode/vms).Kompileerimine toimub kooliarvutis kasutades kaugligipääsu.Kirjutatud kood tuleb tõsta enda arvutist kooli arvutisse kasutades programmi WinSCP(juhend http://pld.ttu.ee/~trkal/Download%20PuTTY.pdf ).P ketas on WinSCP-s nimega StudentsHome. Kui kood on üle tõstetud tuleb see kooli arvutist üles leida, kooliarvutis saab folderite vahel liikuda kasutades käsku "cd"(change directory, nt "cd P", tagasi saab minna kasutades "cd ."), folderi sisu saab vaadata käsuga "ls"(list).Kui käsk "ls" näitab ületõstetud programmi saab seda kompileerida käsuga "gcc"(nt "gcc failinimi.c", andmebaasi failide puhul "gcc failinimi.c -lpq"). Kui programm ei kompileeru näitab terminali aken erroreid. Kui kompileerimine õnnestus saab kompileeritud programmi jooksutada käsuga "./a.out".

Praktikum 22.04
Ühe kontrolltöö2 töö põhjalikum lahkamine (inglise keeles)

Silumine ja veatöötlus
silumise ja veatöötluse slaidid


Kontrolltöö 2, avatakse kell 9



Kodutöö 2 variant valitakse matrikli numbri viimase numbri järgi
Link kodutöö kahe variantidele

Materjalid

Ainekaart

Vladimir Viies

Risto Heinsar


Lembit Jürimägi

Vanad materjalid

Hannes Kinks

Helena Kruus

Moodle materjalid

Ise registreerumisega kursusele "IAX0584 Programmeerimine II".

https://moodle.hitsa.ee/course/view.php?id=4710

Praktikumid

Üldstruktuur

Antud kursus on jätk kursusele „Programmeerimine I“, milles pearõhk oli pööratud ülesande lahendusalgoritmi koostamisele. „Programmeerimine II“ annab lisaks vajalike teadmisi algoritmi realiseerimisele kõrgkeele(C,C++,Java) keskkonnas.

Kursus on jaotatud 4ks mooduliks, kus iga moodul sisaldab näiteülesandeid, mis tuleb õppimise käigus kindlasti läbi lahendada. Kahes esimeses moodulis on komplektid teemaakohaseid ülesandeid, millest vähemalt ühe lahenduse peaks saatma kursuse tuutorile, et kontrollida enda mõttekäiku.

Kahes viimases moodulis on testid koos vastustega – soovitus:vastuseid mitte eelnevalt piiluda. Vastasel juhul võib tekkida näiv tunne ülesande lihtsuse ja materjali arusaadavuse kohta.

Kolmandas moodulis on individuaalne kohustuslik kodune töö, mille lahendus tuleb vormistada vastavalt kursuse üldosas toodud juhendile. Neljas moodul sisaldab kodust ülesannet, mille lahendamist tuleks teha rühmatööna. Rühm peaks koosnema 3 liikmest ja selle moodustamine võiks toimuda kas foorumi kaudu või siis tuutori poolt. Ülesandes on jällegi kindlalt eristatavad osad: 1- sideandmebaasiga, päringud 2- andmetöötlus, vastavalt ülesandele 3-kasutajaliides algandmete sisestamiseks ja tulemuse kuvamiseks.

Erandjuhuna võib õppija sooritada selle kodutöö üksinda, viimane on reegliks mikrokontrolleri programmeerimise valimisel kodutööks.

Ainerõhud moodulites

C programmi koostamisel on eriline koht viitadel, millede asjatundlik kasutamine muudab programmi kiiremaks ja effektiivsemaks. Programmi töö käigus saab andmete poole pöörduda kas muutuja nime kaudu(keskkond seostab ise asukohaga mälus) või viida kaudu(sisaldab andmete asukoha mäluaadressit). Eriti selgelt väljendub viimase kasutamise effektiivsus töös massiividega. On selge, et ühest programmi moodulist , teise programmi moodulisse massiivi edastamine palju ressursinõudlikum, kui ainult selle esimese elemendi edastus. Viidaga teeme aga just viimast!

Teine tee andmetöötluse effektiivsuse tõstmiseks on andmete ühildamine ühtseks muutujaks. Näiteks kui on meil ülesanne, kus nõutakse üliõpilaste keskmiste hinnete leidmist, on sellise struktuurse muutuja kasutamine, mis sisaldab nii üliõpilase identifikaatorit, kui tema hindeid, tunduvalt arusaadavam, kui mitme erineva massiivi kasutuselevõtt. Objektorienteeritud programmeerimises(OOP) minnakse aga veelgi edasi ja ühendatakse struktuursed andmed neid töötlevate programmimoodulitega. Kahes esimeses moodulis tuleb peatähelepanu keskendada viida mõistele ja selle kasutamise võimalustele. Operatsioonisüsteem eraldab igale programmile sisemälus teatud mälu. Andmetele eraldavat osa juhib programm, kasutades kas statilist või dünaamilist mälueraldamist. Esimesel juhul peab kogu eraldatav mälu olema kirjeldatud programmi töö alguseks. Teisel juhul ei , töö käigus saab mälu vajadus muutuda.

Kolmas moodul ongi pühendatud dünaamilisele mälujaotusele, mis sisaldab alati kahte tegevust: mälu hõivamist ja selle vabastamist. Üheks mälu dünaamilise kasutamise võtteks on rekursiooni kasutamine. Viimane võimaldab veel taandada ülesande keerukust, näiteks n! leidmine asendub (n-1)! Leidmisega.Rekursiooni vale kasutamine aga „kurnab“ arvutiressursse. Selle temaatika kinnistamiseks tuleb sooritada esimene kodutöö.

Neljas moodul on kokkuvõtlik ja võimaldab teise kodutöö sooritamisel kontrollida eelnenu omandamise taset. Samuti lõppeb neljas moodul kontrolltöö sooritamisega, mis annab eelduse edukaks eksamiks. Moodulis pakutav , OOP tutvustav materjal, on lisamaterjali staatuses ja selle valdamine eksamil ei ole kohustuslik, kuid meeldiv võimalus näidata enda häid teadmisi.

Õppetöö

Kontrolltööd

I kontrolltöö 5. nädal kirjed ja failid (20p)

II kontrolltöö 12. nädal dünaamiline mälujaotus (20p)

Kontrolltööd toimuvad loengus.

Kodused tööd

I kodune töö - 15p kirjed ja failid

II kodune töö - 15p dünaamiline mälujaotus, rekursiivsus

III kodune töö - 10p valikuline:

  • mikrokontrolleri ülesanne
  • andmebaasi ülesanne

Esimesed kaks kodust tööd peavad olema tehtud enne eeleksamit 16 nädal neljapäev. Kolmanda koduse töö tähtaeg kuni eksamisessiooni lõpuni.

Praktika

Kokku on praktika eest võimalik kokku saada 36p

  • kohaloleku eest 1p (kokku max 14p)
  • tunniülesanded kokku max 22p. Sellest 4p moodustavad kaks külalispraktikumi:
    • andmebaasi ülesanne max 2p
    • mikrokontrolleri ülesanne max 2p

Eksamieeldus

  1. Eeleksami soorituse eelduseks on 61p enne 01.05.2017.
  2. Eksami soorituse eelduseks eksamisessioonil on 50p (praktika + kontrolltöö 1 + kontrolltöö 2 + boonus (max 10p))

Eksam

Eksami hinne kujuneb välja järgmiste punktide arvelt: Kodutöö 1 + kodutöö 2 + kodutöö 3 + kirjalik eksamitöö(max 65p)

Plagiaadikahtluse puhul on esitatud töö hindeks 1p. Punktide parandamiseks tuleb osata oma tööd kaitsta.

3. Kodutöö

Kolmanda kodutöö tegemiseks on üliõpilasel valikuvabadus. Mõlemad kodutööd on sissejuhatuseks spetsiifilisematesse teemadesse.

  1. Andmebaasi ülesanne - Suunaga rohkem tarkvara ja infosüsteemide poole andes ülevaate andmebaaside kasutusest ja PostgreSQL andmebaasimootorist. Ülesande käigus tuleb luua minimalistlik õppeinfosüsteem, mis suhtleks andmebaasiga.
  2. Mikrokontrolleri ülesanne - Suunaga riistvaralähedasema programmeerimise poole. Ülesande käigus õpitakse mikrokontrollerit programmeerima.

Andmebaasi kodutöö

Teemat puudutav tunniülesanne

  • Antud ülesande kaal on 10p.
  • Ette on antud olemasolev PostgreSQL andmebaas, mis sisaldab endas lihtsa kursuste haldamiseks mõeldud infosüsteemi andmeid.

Kõigepealt tuleks registreerida oma tudengikoodiga, mille tulemusena loodakse tudengikoodi nimega kasutaja ja sellele vastav andmebaas. Loodavas andmebaasis on olemas õigused nii kirjete lugemiseks, kui ka lisamiseks, muutmiseks ja kustutamiseks.

Registreerimine
  • Andmed ühendumiseks:
Host: ewis.pld.ttu.ee
Andmebaas: <tudengikood>
Port: 5432
Kasutaja: <tudengikood>
Parool: <registreerimisel valitud parool>
  • Andmebaasi visuaalseks haldamiseks võib kasutada mõnda selleks ettenähtud tarkvara, nt
  • Andmestruktuur

Is struct.png

  • Kui on vajadus algne andmebaas taastada, siis selleks võib kasutada järgnevat SQL koodi - Link
  • Kodutöö saata aadressile raiko.keinanen@gmail.com

Ülesanded

Koostada tekstipõhise kasutajaliidesega programm, mis võimaldaks kasutada järgmist funktsionaalsust:

  1. Tudengi lisamine. Kasutajalt küsitakse: eesnimi, perekonnanimi, sünnikuupäev. Programm peaks looma iga tudengi jaoks unikaalse tudengikoodi. (2p)
  2. Tudengi muutmine ja kustutamine. (2p)
  3. Aine lisamine, muutmine, kustutamine. (2p)
  4. Hinde lisamine õpilasele vastava aine eest. Hinde lisamisel peaks ka uuendama kaalutud keskhinnet (student.average_grade) võttes arvesse ainepunkte (subject.credits). (2p)
  5. Tudengite otsing kkh põhjal. Nt. otsimaks keda eksmatrikuleerida, peaks saama anda ette tingimuse kaalutud keskhinne < 1 või kellele cum laude anda tingimusel kaalutud keskhinne > 4.8. (2p)

Programm peab liidestuma etteantud andmebaasiga ning kasutama seda andmete lugemiseks ja hoiustamiseks.

Suureks plussiks on:

  • Sisendi valideerimine ehk programm ei jookse kokku ega lähe tsüklisse, kui sisestatakse näiteks numbri asemel täht.
  • Makefile kasutus kompileerimisel.

PostgreSQL teegiga koodi kompileerimine

Selleks, et kirjutada C koodi, mis ühenduks PostgreSQL andmebaasiga, on vaja eelnevalt paigaldada vastav connector teek (libpq) ja kompilaatorile selgeks teha, kust neid leida.

Kompileerida on kõige lihtsam kasutades TTÜ klassiarvuteid, kus on PostgreSQL eelnevalt paigaldatud. Selleks tuleks SSH abil ühenduda mõnda klassiarvutisse. Selle kohta on põhjalikumad juhendid:

Kui on sellegipoolest soovi enda arvutis kõnealune libpq teek ise paigaldada, siis abiks on järgnev juhend:

Kompileerides tuleks kindlasti lisada oma C koodis vastav teek:

#include <pgsql/libpg-fe.h>

Kui olete teegi ise paigaldanud, siis selle asukoht võib varieeruda ja peaksite asendama nt #include <libpg-fe.h>.

Kompileerimisel tuleb anda ka lisaargument linkerile -lpq. Näiteks gcc -o program main.c -lpq.

Abimaterjalid

  • PostgreSQL dokumentatsioon
  • SQL cheatsheet
  • Ülesannet võib lahendada meelepärases programmeerimiskeeles. C kohta on olemas näidiskood ja põhjalikum juhis kompileerimiseks. Java puhul on toodud samuti näidisprogramm, kuid ülejäänud keelte puhul tuleks PostgreSQL andmebaasiga ühenduse loomine iseseisvalt selgeks teha.
C Näidiskood

Näidiskood - loob ühenduse eelnimetatud PostgreSQL andmebaasiga ja pärib 10 esimest kirjet.

Mikrokontrolleri ülesanne

Juhendi leiab aadressilt http://blue.pri.ee/ttu/