Difference between revisions of "IAG0582 - Programmeerimine II"

From ATI public wiki
Jump to: navigation, search
m (Näidiskood)
(Andmebaasi ülesanne)
Line 59: Line 59:
 
  Parool: iag0582
 
  Parool: iag0582
 
* Andmestruktuur
 
* Andmestruktuur
[[File:jogede_andmestruktuur.png]]
+
[[File:Joe andmed strukt.png]]
 
* [http://www.postgresql.org/docs/9.1/interactive/index.html PostgreSQL dokumentatsioon]
 
* [http://www.postgresql.org/docs/9.1/interactive/index.html PostgreSQL dokumentatsioon]
 
* Ü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.
 
* Ü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.

Revision as of 19:46, 30 March 2014

Ainekaart

Ü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.

Materjalid

Moodle materjalid

Ise registreerumisega kursusele "IAG0582 Programmeerimine II".

https://moodle.e-ope.ee/

Repositoorium

Avatud kõigile

http://www.e-ope.ee/repositoorium/otsing?@=7sen#euni_repository_10895

Õppejõud

  • Lembit Jürimägi
  • Marina Brik

3. Kodune ülesanne

Andmebaasi ülesanne

  • Antud ülesande kaal on 10p eksamil ja see võib olla asendatud harjutustunni õppejõu poolt mingi teise ülesandega.
  • Ette on antud olemasolev PostgreSQL andmebaas, mis sisaldab Eesti jõgede andmeid.
Host: ewis.pld.ttu.ee
Andmebaas: ablid 
Port: 5432
Kasutaja: student
Parool: iag0582
  • Andmestruktuur

Joe andmed strukt.png

  • PostgreSQL dokumentatsioon
  • Ü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.

Näidiskood

C

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

Kompileerida on kõige lihtsam kasutades TTÜ klassiarvuteid, kus on PostgreSQL eelnevalt paigaldatud. Põhjalikum juhend väljastpoolt sisevõrku töötamiseks

Üks viis Windowsi alt klassiarvutitesse ühenduda on järgmine:

  • Alla laadida endale Putty.
  • Putty käivitamisel tuleks Host Name lahtrisse kirjutada proksi.intra.ttu.ee ning vajutada Open.
  • Esmakordsel ühendamisel tekib dialoogaken "PuTTy Security Alert", millele võib vastata Yes.
  • Avaneb terminaliaken, kus küsitakse kasutajanime. Kasutajanimeks on Eesnimi.Perenimi@INTRA. (Kui mingil põhjusel INTRA domeenis parool puudub, siis https://pass.ttu.ee/ on võimalik ID kaardiga sisse logida ja parool tekitada. Või kui ka ID-kaart puudub, sisse logimiseks ka sõbra kasutajat kasutada.)
  • Peale kasutaja sisestamist vajutada Enter, sisestada parool (trükitud tähemärke ei kuvata tärnidena).
  • Kui taaskord küsitakse "Are you sure you want to continue connecting?", trükkida yes.
  • Kui sisselogimine õnnestus, tuleks teha järgmine ühendus läbi SSH ühte ICT-502 klassiarvutitest, mis on parasjagu Linuxis. Klassiarvutite staatust on näha aadressil http://ati.ttu.ee/klassi-staatus/. Kui sobiv arvuti on leitud, siis SSH ühenduse loomiseks kasutada järgnevat käsku,

kus lx22 asemel on mistahes soovitud arvuti alias.

ssh -l Eesnimi.Perenimi@INTRA lx22
  • Seejärel on võimalik tööd alustada. Näitekoodi allalaadimiseks terminalis võib kasutada käsku
wget http://ati.ttu.ee/~hkinks/iag0582/psql.c
  • Tekstiredaktorina võib kasutada näiteks nano või vim,(kasutusjuhend käsuga man nano/vim).
  • Lähtekoodi kompileerimiseks kasutada käsku:
gcc psql.c -lpq
  • Programmi käivitamiseks kasutada käsku ./<nimi>, kui programm asub samas kaustas. Näiteks:
./a.out
  • Kui juhtub, et programmi pole muul moel võimalik sulgeda, siis sundimaks programmi oma tööd lõpetama, kasutada klahvikombinatsiooni Ctrl+C.
  • Lihtsamad Linuxi terminali käsud
Putty kasutamine
Sisse logimine
Klassiarvutisse ühendamine
Näidiskoodi kompileerimine

PostgreSQL C API dokumentatsioon

http://www.postgresql.org/docs/9.1/static/libpq.html


Java

Ülesanded

Veendumaks, et ühendus andmebaasiga on olemas, võib teha päringu SELECT * FROM joe_andmed LIMIT 10; , mis peaks väljastama 10 esimest kirjet tabelist joe_andmed.

1. Pärida jõed, mille tyyp väli vastab matrikli viimasele numbrile.

2. Pärida seirejaamad, mis paiknevad eelmises punktis leitud jõgedel. (JOIN)

3. Sorteerida tulemus jõgede pikkuse järgi.

4. Lugeda valgla pindala väärtused (valgla_km2) programmi sisse ja leida nende kogusumma.

5. Kirjutada tekstifaili punktis 4 saadud tulemus, mis sisaldaks järgmiseid väljasid: id_jogi, joenimi, tyyp, pikkus_km, id_jaam, jaama_nimi, valgla_km2. Lõppu lisada leitud valglate kogusumma.

Lahenduseks olev programm koos lähtekoodiga, mis väljastab tekstifaili tulemusega, saata vladimir.viies@gmail.com .