Algoritmid ja andmestruktuurid, MTAT.03.133, 4AP, praktikumid
ja iseseisev töö.
Tahvlipraktikumid
Tahvlipraktikumide töökeel on C. Püüan kommenteerida nii palju kui oskan, ja
vastan kõigile küsimustele.
Tahvlipraktikumides püütakse enamasti leida algoritme näiliselt
keerulistelr ülesannetele. Enamik neist on realiseeritavad lühikeste
programmidena ja on maha laaditavad minu
koduleheküljelt või
sellelt leheküljelt allpool, seal, kus on nende lühitutvustused.
C-keelseid tekste ma ei jaga, ent need on meie praktikumide põhisisustajad.
Üks probleem pärineb Kompilaatorite (MTAT.05.066) kursusest: kuidas
konstrueerida süntaksorienteeritud (universaalset) skannerit, mis saab ette
programmeerimiskeele terminaalse tähestiku ning on võimeline eristama selles
keeles kirjutatud programmi(de)st reservsõnad ja eraldajad ning lekseemiklasside
identifikaatorid ja konstandid liikmed. Skanneri töö näidet analüsaatori
koosseisus saab näha siit.
Kaks probleemi on näiliselt lihtsad, ent nende lahendamiseks ei eksisteeri
teadaolevalt efektiivset algoritmi, need on rahvaloendusjaoskondade moodustamine
ja paljude kitsendustega logistikaülesanne. Kuivõrd need programmid on
tehtud tellimustööna (koos prof. Tombakuga), siis neid maha laadida pole võimalik,
küll aga tutvume praktikumides probleemide ja põhimõtteliste algoritmidega.
Sobival ajal vaatame, kuidas on realiseeritavad C-keele vahenditega põhilised andme-
struktuurid ja kuidas võivad olla programmeeritud C stringifunktsioonid päisfailist
<string.h>.
Kui huvilisi leidub ja aega jatkub, siis võime semestri lõpus vaadata, kuidas
käib
programmeerimine Windowsi keskkonnas; TTSi juhtprogrammi
näitel. Käivitada
saaab TTSi siit.
Lihtsad ülesanded on järgmised:
- Rooma numbrite abil esitatud arvu teisendamine positsiooniliseks kümnendarvuks.
Rooma numbrid on:
- I = 1
- V = 5
- X = 10
- L = 50
- C = 100
- D = 500
- M = 1000
Arvude kirjutamisel võime eristada "konservatiivset" stiili, kus
parempoolset naabrit tohib vähendada 10% (X, C, M)
või 20% (V, L, D) ning "liberaalset" stiili ilma nende kitsendusteta.
Näiteks 1999 on esimesel juhul MCMXCIX ja teisel MIM.
Kuivörd "konservatiivne"stiil on "liberaalse" alamhulk, realiseerime
viimase.
Programm on araabia.exe, seansi lõpetab 'Esc'.
- Kümnendarvu teisendamine "rooma kujule".
Konservatiivset stiili järgib a_rome.exe ning
liberaalset rome.exe
-
"Rooma kalkulaator".
Konstrueerida kalkulaator, mis suudab teha nelja põhitehet rooma
numbrite abil esitatud kahe operandi vahel, näiteks
VII * XLI = CCLXXXVII
Programm on calc.exe (seansi lõpetab 'Esc').
- Aritmeetiliste täis- ja reealarvuliste konstantavaldiste väärtuste arvutaja.
Konstantavaldis ei sisalda muutujaid, seega on ülesandeks teha
interaktiivne kalkulaator, millele võib ette anda ka sulgavaldisi,
näiteks
-3*(99-(112/(8+444)))=
Programm on poola.exe, seansi lõpetab 'Esc'.
- C-keele standardfunktsioonid stringide töötlemiseks on
strcpy, strncpy, strcat, strncat, strcmp. strncmp. strchr, strrchr, strspn,
strcspn, strpbrk, strstr ja strlen. Ülesandeks on välja mõtelda
nende funktsioonide algoritmid. Demoprogramm on string.exe
ja selle väljatrükki näete siit
- Koolipoisi kirjutatud dialoogiprogramm: masin vestleb kasutajaga. Enne
praktikumi on soovitav seda programmi eku.exe ise proovida.
Ühe vestluse protokolli võite vaadata siit, vestluse
lõpetab 'Esc'.
- Pseudo-tehisintellekt: väikese kontori andmebaasile võib
esitada päringuid nii eesti, inglise kui ka vene (ladina tähtedega) keeles;
näiteseansi protokoll peaks andma ettekujutuse
programmi narinjan.exe
võimalustest.
- Bitikaupa järjestamine on meetod, mis töötab kiirushinnanguga
nk, kus n on kirjete arv ja k on võtme pikkus bittides; kitsendus: võti
on kas mittenagatiivne täisarv või tekst. Programm on
bitsort.exe ning tema põhiprogrammiks on näiteülesanne, mille töö
käik tuuakse sammhaaval ekraanile (vt. logi).
-
C-keel toetab ainult staatilisi massiive. Ülesandeks on kirjutada
programm dünaamiliste n-mõõtmeliste massiivide kirjeldamiseks ja
töötlemiseks. Programm on array.exe, demo on
siin.
-
Juhusliku kahendpuu generaator on gen_tree.exe ja
tema tööd illustreerib logifail.
- Kahendpuu läbimine ees-, kesk- ja lõppjärjekorras: programm on
order.exe, siin on näide.
Iseseisev töö
Semestri jooksul tuleb koostada kirjalik töö ajalisest keerukusest
Töö tuleb esitada novembri viimasel praktikumil.
Töö kirjutatakse nn. baastöö alusel -- selleks on eelmistel
aastatel koostatud töö. Teie ülesanne seisneb baastöö analüüsis ja
oma versiooni tegemises samal teemal. Töö koosneb tiitellehest, sisukorrast ,
sissejuhatusest (ülesande püstitusest koos põgusa ülevaatega kasutatud
materjalidest), retsensioonist baastööle (mida retsensent
võib kirjutada, võite vaadata näiteks siit), algoritmi
esitamisest, testimistulemustest (kohustuslikud on nii tabel kui ka graafik),
kirjanduse jm. kasutatud materjalide (sh. baastöö) loetelust ja lisana Teie
programmi tekstist, kindlasti koos kommentaaridega.
Programmi tuleb lisada "demo": alamprogramm, mis näitab, et algoritm(id)
tõepoolest töötab (töötavad);
näiteks, kui testite järjestusmeetodeid, siis
trükitakse esmalt (suhteliselt lühike)algandmete jada ja seejärel too jada
kõigi testitavate meetoditega järjestatult.
NB! Baastöödes see nõue veel ei kehtinud, teie jaoks aga küll.
Kuivõrd tegemist on paljudele esimese kirjaliku üliõpilastööga, siis
pööran hindamisel suurt tähelepanu vormistamisele.Töö keel peab olema
täpne ja isikupäratu, vältida tuleb nii õpiku-, populaarteaduslikku,
ajalehe- kui ka jututubade stiili, ja emotsionaalsust. Niisiis, stiil peab olema
teadustööde oma.
Kasutatud materjalidele tuleb tekstis viidata; tsitaadid tuleb esitada jutumärkides.
Viitamata tekstilõikude esitamine tekstis on sisuliselt plagieerimine ning pole
aktsepteeritav mistahes publikatsioonis.
Prof. J. Kiho vormistamissoovitusi saate lugeda .ps-formaadis
siit,
LaTex-formaadis siit ja
.rtf-formaadis siit.
Töö võib olla kirjutatud kas eesti, vene, inglise või saksa keeles, aga kogu töö peab
olema kirjutatud algusest lõpuni valitud keeles, sh. ka tiitelleht. Programmeerida
võite suvalises programmeerimiskeeles (pööramata tähelepanu
baastöö
(programmeerimis)keelele.)
Kui Teie emakeel pole eesti keel, ent kirjutate töö eesti keeles, siis soovitan
tungivalt paluda see kellelgi keeleliselt üle vaadata: kui näiteks aasta
aega eesti keelt õppinud venelase või lätlase kohta on keel fantastiliselt
hea, ei saa ma seda hindamisel arvestada, kui ta pole ka absoluutskaalas
perfektne.
Töö hinnet arvestab Härmel Nestra eksamihinde panemisel. Töö on
eelduseks eksamile pääsemiseks. Seega, et kvalifitseeruda, tuleb "F" (ja mitte
ainult) korral töö seni ümber teha, kuni resultaat mõlemat poolt rahuldab.
"Korraline eksam" annab punkte 0..80. Praktikumitöö annab täiendavaid
punkte:
A=20, B=15, C=10, D=5 ja E=0. Kui tööde hulgas on eriti silmapaistvaid, siis parimad neist
(umbes 5 -- 6) saavad lisaks 10 punkti.
Eelvaliku (ca 10 kandidaati) teen mina ning otsustab dr. H. Nestra.
Palve: ärge palun pange tööd lehekülghaaval "kilekottidesse" --
kilele on toda rikkumata raske märkusi teha..
Korduma kippuvaid vigasid vaata siit
"Normaalse töö" näide
Lõpuks, kunagi pole liiga palju saadaval materjale mistahes taseme
üliõpilastööde kirjutamiseks,
ja et naabrite kogemused on selleks,
et neist õppida, siis võite lõõgastuseks lugeda
nõuandeid vene
kraadiõppureile siit
ning professor Tšistjakovi lühiloengut oma aspirandist (üksiti
miilitsa-alampolkovnikust) naisele siit
NB! Baastöö TULEB TINGIMATA TAGASTADA! Koos oma tööga.
Viimati muudetud 2.09.08.