VIITMUUTUJA. ARVUTI MÄLU PAINDLIK KASUTAMINE

Size: px
Start display at page:

Download "VIITMUUTUJA. ARVUTI MÄLU PAINDLIK KASUTAMINE"

Transcription

1 VIITMUUTUJA. ARVUTI MÄLU PAINDLIK KASUTAMINE SISSEJUHATUS Selle teema raames tutvustan ma Teile üht omapärast andmeobjekti VIITMUUTUJAT. Selleks, et järgnevast jutust hästi aru saada, tuleb meelda tuletada teises teemas käsitletud jutt MÄLU kohta. Kõik senivaadeldud andmeobjektid on olnud STAATILISED. Staatiline andmeobjekt tuleb programmis kirjeldada: talle peab andma nime ja tüübi. Programmi täitmise ajaks eraldatakse muutuja väärtuse hoidmiseks teatud osa arvuti mälust ja seotakse muutuja sellega mäluaadressi abil. Muutuja tüüp määrab väärtuse esitamiseks vajaliku mäluhulga ning muutujaga teostatavad operatsioonid. Muutujale viitamiseks kasutatakse tema nime. Programmeerijal pole võimalust muuta nime ja mäluaadressi vahelist seost. VIITMUUTUJA OLEMUS Keeltes Pascal ja C on olemas võimalus tekitada andmeobjekte ka alles programmi täitmise käigus dünaamiliselt. DÜNAAMILISE muutuja seostamiseks mäluaadressiga kasutatakse viitmuutujat. VIITMUUTUJA ehk lühemalt öeldes VIIT on andmeobjekt, millesse saab salvestada mingi teise andmeobjekti mäluaadressi. Viitmuutuja kirjeldamisel peab määrama ka selle poolt viidatava andmeobjekti tüübi. Lisaks dünaamilistele muutujatele võib viit viidata ka harilike muutujate peale. Viitmuutuja väärtus võib olla üks kolmest võimalikust: 1) viit on väärtustamata ja väärtus on juhuslik suurus; 2) väärtuseks on omistatud mäluaadress; 3) väärtuseks on omistatud "TÜHI VÄÄRTUS". Vaatame järgnevat tabelit: Aadress Muutujanimi Tüüp Väärtus A Täisarv B Täisarv VA Viit TÜHI 0009 VB Viit Meil on defineeritud kaks täisarvulist muutujat ja kaks viitmuutujat. Esimesele viidale VA on omistatud väärtuseks "TÜHI", mis tähendab, et see viit ei viita mitte millelegi. Harilikult on selliseks "TÜHJAKS" väärtuseks 0, kuid see sõltub konkreetsest keelest. Teisel viitmuutujal VB on väärtuseks 0003, mis on samal ajal ka muutuja B aadressiks. Sellisel juhul võib öelda, et viit VB viitab muutujale B.

2 Kujutame kirjeldatud muutujaid joonisega: A B < VA VB Milleks on meil vaja viidata "tühjusesse" või teisele muutujale? Asi on nimelt selles, et kasutades viita võib viidatava muutujaga teha neid samu operatsioone, mis on lubatud hariliku muutuja korral. Lisaks sellele on samas programmilõigus viida väärtust muutes võimalik opereerida mitmete erinevate muutujatega. Selleks kasutatakse spetsiaalset viitamise operaatorit. Viitmuutujate olemuse selgitamiseks on kasutatav ka järgmine mudel: 1) kogu arvuti mälu on üks suur massiiv nimega M, mille väikseim indeks on 1; 2) viitmuutuja VM on selle massiivi indeksit hoidev muutuja; 3) meid huvitava mälupesa indeksi väärtuse omistame viidale VM; 4) meid huvitava mälupesa ehk massiivi element on seega M[VM]. VIITMUUTUJA KASUTAMINE Vaatame järgnevalt, kuidas saab viitmuutujat kasutada. Selleks teeme läbi sarnased tegevused keeles Pascal ja C. Keeles QBasic viitmuutujat ei ole. Viitmuutuja kasutamine keeles Pascal Kõigepealt tuleb viitmuutuja deklareerida, kusjuures märk '^' koos tüübinimetusega tähistab viitmuutuja tüüpi. Var lp : ^Integer; ^Integer - viit täisarvu peale Kui tegeletakse viitmuutujale mingi väärtuse omistamisega, siis toimitakse sarnaselt hariliku muutujaga, kuid väärtus peab olema aadress. lp := Nil; Nil - Pascali identifikaator TÜHJA väärtuse tähistamiseks Kui soovitakse omistada viitmuutujale mõne olemasoleva muutuja X aadressi, siis on selleks kaks võimalust: või lp := Addr(X); funktsioon Addr tagastab muutuja X aadressi - aadressi määramise operaator Viitmuutuja kasutamise näiteks kirjutame väikese programmi: Program N8_1_P;

3 Type PInt = ^Integer; defineerime viida tüübi Var A, B : Integer; P : PInt; P viit paigaldatakse muutuja A peale Write('Palun sisesta arv : '); Read(A); Writeln('Tore, sain kätte arvu ',P^); arvu saab kätte ka viida abil Write('Palun sisesta teine arv : '); Read(B); if P^ > B then ehk kui A > B P paigaldame viida muutuja B peale Writeln('Nendest arvudest väiksem on ',P^); end. Nagu näitest näha võis, kasutatakse aadressi järgi viitamiseks viitmuutujat, millele järgneb vahetult märk '^'. Selline programm on muidugi teostatav ka lihtsamalt, kuid see demonstreerib viida kasutamise võimalusi. Dünaamiliste muutujate kasutamine on aga ilma viitmuutujata raske kui mitte lausa võimatu. Aga sellest tuleb juttu allpool. Viitmuutuja kasutamine keeles C Viitmuutujate tähistamine keeles C on mõnevõrra segadusttekitav, sest selleks kasutatakse märki '*', mis langeb kokku korrutamise operaatoriga. Seega on oluline jälgida, et ei tekiks kahemõttelisust ja sinna, kus selline oht on olemas, tuleb panna sulud. Viitmuutuja deklareerimine käib järgmiselt: int *lp; /* lp on viit täisarvu peale */ Tühja väärtuse määramine viidale toimub kas arvu 0 või eeldefineeritud konstandi NULL (mis harilikult on pikk täisarv 0 ehk (long int)(0)) omistamisega: lp = NULL; Olemasoleva muutuja X aadressi omistamine viidale toimub operaatori '&' abil: lp = &X; Ja kirjutame eespool esitatud programmi keele C: /* N8_1_C */ #include <stdio.h> main() int A, B, *P; P = &A; /* viit paigaldatakse muutuja A peale */ printf("palun sisesta arv : "); scanf("%d", &A); /* ka sisestamise funktsioon kasutab aadressi! */ printf("tore, sain kätte arvu %d\n", *P); /* kasutame viita */ printf("palun sisesta teine arv : "); scanf("%d", &B); if (*P > B) /* ehk kui A > B */ P = &B; /* paigaldame viida muutuja B peale */ printf("nendest arvudest väiksem on %d\n", *P); return 0; /* lõpp */

4 MÄLU PAINDLIK KASUTAMINE Ei ole harvad sellised ülesanded, mida saab täita mitmes osas ja millest iga osa vajab suurt hulka mälu. Kui lahendada ülesanne staatiliste muutujatega, see tähendab selliste muutujatega, mille jaoks reserveeriti mälu programmi töö alguses ja nad eksisteerivad kuni programmi lõppemiseni, siis võib meil mälust puudus tulla. Üks võimalik lahendusvariant on selline, et vajaminevad muutujad luuakse vahetult enne seda, kui neid kasutama hakatakse ja siis, kui neid enam vaja ei ole, kaotatakse nad ära. Selliseid muutujaid nimetataksegi DÜNAAMILISTEKS MUUTUJATEKS. Mälu hõivamine Dünaamilise muutuja tekitamine algab muutuja jaoks mälu küsimisega. Mälu võib küsida, andes ette konkreetse arvu (baitides) või andmetüübi. Kui küsitud hulk vaba mälu on veel olemas, siis hõivatakse see ja vastav aadress omistatakse viitmuutujale. Mälu hõivamiseks on programmeerimiskeeles spetsiaalsed funktsioonid. Kindlasti eksisteerib konkreetse suurusega mäluala hõivamise funktsioon. Keeles Pascal on selleks protseduur GETMEM, mille deklaratsioon on järgmine: procedure GetMem(var P: Pointer; Suurus: Word); Kasutades seda protseduuri võib hõivata mälu 'Suurus' arv baite ja aadressi omistada viitmuutujale P. Tüüp 'Pointer' on puhas viidatüüp. Keeles C on selleks funktsioon MALLOC, mille deklaratsioon on järgmine: void *malloc( size_t suurus ); Funktsioon tagastab puhta viidatüüpi (void *) väärtuse 'suurus' arv baite sisaldavale mäluosale. Teine liik mälu hõivamise funktsioone on seotud konkreetse andmetüübiga. Keeles Pascal on selleks protseduur New: procedure New(var P: Pointer); See protseduur uurib järele viida P tegeliku tüübi ja eraldab mälu vastavalt tüübi suurusele. Näiteks täisarvu viida tüübi korral eraldatakse mälu ühe täisarvu hoidmiseks. Keeles C "tüübiga" mäluhõivamist ei ole, see on lisatud keele C++ süntaksile. Võib tekkida küsimus, et "mis saab siis, kui vaba mälu ei ole?". Programmi käitumine sellises situatsioonis sõltub keelest ja translaatori versioonist. Pascali puhul võib ette tulla nii väärtuse 'Nil' tagastamist kui ka veateadet. Keeles C on üldiselt tavaks tagastada tühi väärtus, mida saab sellisel juhul kontrollida ja valida vastav käitumine. Mälu vabastamine Kui dünaamilised muutujad on oma töö teinud, siis on ilus nad ära kaotada ja vabastada nende jaoks hõivatud mälu. Selle jaoks on olemas vastavad protseduurid. Keeles Pascal on nendeks:

5 procedure FreeMem(var P: Pointer; Suurus: Word); procedure Dispose(var P: Pointer ); FreeMem vabastab GetMem'iga hõivatud mälu, kusjuures arv 'Suurus' peab olema sama, ja Dispose vabastab protseduuriga New hõivatud mälu. Keeles C on mälu vabastamiseks funktsioon FREE: void free(void *viit); Vaatame siinkohal samasisulisi näiteprogramme nii Pascalis kui ka C s, kus toimub mälu hõivamine ja vabastamine. Ü l e s a n n e: Sisestada üks rida teksti ja leida reas olevate tühikute arv. Program N8_2_P; Var S : ^String; viitmuutuja i, n : Integer; Writeln('Palun sisesta üks rida teksti:'); GetMem(S, 81); küsime 81 baiti mälu Readln(S^); kasutades viita loeme sellesse mällu sisestatava rea n := 0; n on tühikute loendur, algväärtuseks on 0 For i := 1 to Length(S^) do vaatame kõiki märke reas If S^[i] = ' ' then ja kui märk on tühik n := n + 1; siis suurendame loendurit ühe võrra FreeMem(S, 81); vabastame eelnevalt hõivatud 81 baiti mälu Writeln('Selles reas on ', n, ' tühikut.'); end. /* N8_2_C */ #include <stdio.h> #include <malloc.h> #include <string.h> main() char *S; /* viitmuutuja */ unsigned i, n; /* märgita täisarvud */ printf("palun sisesta üks rida teksti:\n"); S = malloc(81); /* küsime 81 baiti mälu */ if(s == NULL) /* kontrollime, kas mälu saime */ printf("nii palju vaba mälu ei ole!\n"); else /* kui saime mälu, siis */ gets(s); /* sisestame ühe rea teksti */ n = 0; for(i=0; i<strlen(s); i++) /* loeme kokku tühikud */ if(s[i] == ' ') n++; free(s); /* vabastame mälu ja teatame tulemuse */ printf("selles reas on %d tühikut\n", n); return 0; Kes tahab, võib proovida funktsiooni scanf() rea sisestamiseks. Saate kogemuse võrra rikkamaks.

6 TÜÜPILISED KOMISTUSKIVID Ka kõige kogenenumad programmeerijad teevad eksimusi (see on ju inimlik) ja suur osa nendest eksimustest langeb dünaamiliste muutujate kasutamise alale. Püüaks siinkohal üles loetleda tüüpilised komistuskivid, et Te teaksite nende eest hoiduda. 1. Hõivatud mälu ei vabastata. Seda juhtub mitmesugusel viisil: vabastatakse vähem kui hõivati; peale mälu hõivamist ja viidaga seostamist kasutatakse viita teisel otstarbel enne, kui mälu vabastatakse (üldiselt läheb see mittevabastamise kategooria alla); mälu vabastamine jääb üldse ära. Sellise vea tunnuseks on vaba mälu pidev vähenemine, kuni see lõpuks otsa saab. Paljudel juhtudel lõpeb see vastava veateatega. Muide, on täheldatud, et mõningaid laiatarbeprogramme ei saa mitu korda järjest välja kutsuda, sest iga kasutamisega läheb jupp mälu kaduma ja varsti on vaja arvuti algkäivitada. 2. Viitamisel püütakse kasutada väärtustamata või 'tühja' väärtusega viitmuutujat. Sõltub keskkonnast, kuid tulemuseks võib olla veateade "General protection fault" või midagi muud sellesarnast. Selline viga on tüüpiline programmidele, kus ei kontrollita mälu hõivamise õnnestumist. 3. Ei jälgita hõivatud mälu piire ja minnakse "üle ääre". Selline võimalus on viitade kasutamise korral täiesti olemas ja võib põhjustada väga raskesti leitavaid vigu, kuna vea põhjus asub ühes ja tagajärg hoopis teises kohas ning tagajärjed on väga erinevad. 4. Püütakse vabastada mälu, mis on juba vabastatud. See on küll veider viga, aga siiski tuleb seda ette. Tihtipeale on põhjuseks see, et pärast mälu vabastamist ei omistata viidale 'tühja' väärtust ja mingil hilisemal hetkel püütakse vabastamise protseduuri läbi viia sellepärast, et viit ei oma 'tühja' väärtust. DÜNAAMILISED ANDMESTRUKTUURID Eespool toodud näiteprogrammid olid rohkem viitmuutuja ja mäluga opereerimise olemuse selgitamiseks. Selliste lihtsate ülesannete jaoks dünaamilisi muutujaid harilikult ei kasutata. Tegelik vajadus tekib siis, kui hakata kasutama dünaamilisi andmestruktuure. Mis need on? Toome ühe elulise näite. Oletame, et eksisteerib järjekord arsti juurde ja meil on vaja opereerida selle järjekorra andmetega. Iga inimese andmed moodustavad selles järjekorras ühe ühiku. Inimese seisukohast vaadatuna toimub järjekorras olemine niimoodi, et inimene tuleb vastuvõturuumi ja nähes seal teisi inimesi, esitab küsimuse "Kes on viimane?". Seejärel jätab talle vastanud inimese näo meelde ja on valmis järgmisele küsimuse esitajale vastama, et tema ongi viimane selles järjekorras. Pärast seda, kui tema järele tuleb vähemalt üks inimene, jälgib ta ainult seda, millal tema ees olev isik vastu võetakse. Kui see juhtub, siis ta teab, et on nüüd järjekorras esimene. Kui arsti ukse vahelt hõigatakse "Järgmine!", siis on tema kord sisse minna. Kui järjekorda pidada arvuti abil, siis tuleb inimese saabudes küsida tema nimi ja arsti juurde kutsumine toimub nime järgi. Või teine võimalus, igale saabunule antakse number ja sisse

7 kutsutakse numbrite järgi (mis ei pea tingimata olema järjestikulised). Ahel ja järjekord Põhilised probleemid sellise ülesande jaoks programmi kirjutamisel on seotud sellega, et järjekord võib teoreetiliselt olla lõpmatult pikk ja igasugune massiiv võib täis saada. On olemas muidugi füüsiline piir arvuti vaba mälu näol, millest ei saa kuidagi üle ega ümber, kuid olemasoleva mälu optimaalne ärakasutamine on siiski võimalik. Selleks on vaja kasutada andmestruktuuri, mida nimetatakse AHELAKS. Lisades andmestruktuurile mõned tegevused, saab formeerida ühe ahela erikuju JÄRJEKORRA. Mida saab järjekorraga teha? Millised on need tegevused, mis teevad lihtsast ahelast järjekorra? Need tegevused on järjekorda lisamine ja järjekorrast väljavõtmine, kusjuures lisatakse alati järjekorra lõppu ning välja võetakse järjekorra algusest. Teeme mõned joonised: <--- 1 <--- 2 < See on esialgne järjekord. Iga LÜLI selles ahelas "teab", millise lüli järel ta on. Ainult esimene lüli ei ole ühegi teise järel. Lisame sellele järjekorrale ühe lüli juurde (olukord: saabus uus inimene): <--- 1 <--- 2 <--- 3 < Uus lüli lisati järjekorra lõppu. Võtame nüüd järjekorrast ühe lüli välja (olukord: inimene kutsuti arsti juurde): <--- 2 <--- 3 < Selleks, et leida kiiresti järjekorra esimene või viimane lüli, tuleb andmestruktuuril nende asukohad meeles pidada ning iga tegevuse juures tuleb neid kasutada ja vastavalt muuta <--- 2 <--- 3 < ^ ^ esimene viimane Eksisteerib veel üks eriline olukord, mida peab spetsiaalselt käsitlema. See on olek, kus järjekorras ei ole ühtegi inimest järjekord on tühi. Järgnevalt esitan ma programmi, mis aitab pidada järjekorda numbrite abil. Program N8_3_P; Type PLyli = ^Lyli; Järjekorra lüli viidatüüp Lyli = record Kirje järjekorra lüli info hoidmiseks Number : LongInt; Järjenumber Eelmine : PLyli; Viit eelmisele lülile Jarjekord = record Kirje järjekorra info hoidmiseks

8 Esimene : PLyli; Viit järjekorras esimesele Viimane : PLyli; Viit järjekorras viimasele Var JK : Jarjekord; V : Char; LV : PLyli; Viit lülile N : LongInt; JK.Esimene := Nil; Alguses ei ole järjekorras ühtegi lüli JK.Viimane := Nil; Writeln('Alustame järjekorra pidamist'); Repeat Write('Järgmine tegevus [L-Lisada, V-Välja vôtta, Q-Lôpetada]: '); Readln(V); Loeme sisse tegevuse valiku V := UpCase(V); Muudame sisseloetud tähe suureks täheks Case V Of 'L' : Kui oli valitud lisamine New(LV); teeme uue lüli tüüpi dünaamilise muutuja Write('LISAMINE. Palun järgmine number : '); Readln(LV^.Number); loeme sisse uue lüli numbri, LV^.Eelmine := JK.Viimane; "näitame" seni viimast lüli JK.Viimane := LV; ja paneme ta järjekorda viimaseks If JK.Esimene = Nil Then Juhul, kui järjekorras esimest JK.Esimene := LV; ei ole, paneme ta ka esimeseks 'V' : Kui oli valitud väljavõtmine If JK.Esimene <> Nil Then ja kui järjekorras on lülisid, siis ütleme esimese lüli numbri Writeln('VÄLJAVôTMINE. Number on ', JK.Esimene^.Number); If JK.Esimene = JK.Viimane Then Kui esimene on ühtlasi viimane LV := JK.Viimane; siis jätame selle meelde ja JK.Esimene := Nil; kuulutame järjekorra tühjaks JK.Viimane := Nil; end Else Kui aga järjekorras on veel lülisid, siis otsime üles järjekorras teise LV := JK.Viimane; liikudes viimase suunast While LV^.Eelmine <> JK.Esimene Do LV := LV^.Eelmine; ettepoole. JK.Esimene := LV; Paneme teise esimeseks ja LV := LV^.Eelmine; jätame esimese meelde. JK.Esimene^.Eelmine := Nil; Esimesel ei ole eelmist! Dispose(LV); Meeldejäetud lüli vabastame end ja saame mälu tagasi. Else Writeln('VÄLJAVôTMINE. Järjekord on tühi.'); 'Q' : Kui on valitud lõpetamine, siis LV := JK.Viimane; If JK.Esimene <> Nil Then kontrollime, kas järjekord on tühi ja kui ei ole, siis N := 0; While LV <> Nil Do loeme lülid kokku N := N + 1; LV := LV^.Eelmine;

9 ja küsime lõpetamise kinnitust. Write('LôPETAMINE.'); Writeln(' Järjekorda on jäänud veel ',N,' inimest.'); Write('Kas tahad tôesti lôpetada [J/E]? '); Readln(V); V := UpCase(V); If V = 'J' Then Kui kinnitati lõpetamist, siis V := 'Q'; lõpetamise tunnus püsti. If V = 'Q' Then Kui lõpetamine ja LV := JK.Viimane; While LV <> JK.Esimene Do järjekorras on veel lülisid, JK.Viimane := LV^.Eelmine; Dispose(LV); siis tuleb ka need vabastada. LV := JK.Viimane; Dispose(LV); See viimane ka! end Until V = 'Q'; Writeln('Lôpetame järjekorra pidamise'); end. Sama programm keeles C : /* P r o g r a m m i a l g u s */ #include <stdio.h> #include <malloc.h> #include <ctype.h> struct lyli /* kirje järjekorra lüli info hoidmiseks */ int number; /* järjenumber */ struct lyli *eelmine; /* viit eelmisele lülile */ ; struct jarjekord /* kirje järjekorra info hoidmiseks */ struct lyli *esimene; /* viit järjekorras esimesele */ struct lyli *viimane; /* viit järjekorras viimasele */ ; int main() struct jarjekord jk; jk.esimene = NULL; /* alguses ei ole järjekorras ühtegi lüli */ jk.viimane = NULL; int n; struct lyli *lv; /* viit lülile */ printf("alustame järjekorra pidamist\n"); char v; do printf("järgmine tegevus [L-Lisada, V-Välja võtta, Q-Lõpetada]: "); scanf("%s", &v); /* loeme sisse tegevuse valiku */ v = toupper(v); /* muudame sisseloetud tähe suureks täheks */ if (v == 'L') /* kui on valitud lisamine */ lv = (lyli*)malloc(sizeof(struct lyli)); /* teeme uue lüli tüüpi dünaamilise muutuja */ printf("lisamine. Palun järgmine number : "); scanf("%d", &lv->number); /* loeme sisse uue lüli, */ lv->eelmine = jk.viimane; /* "näitame" seni viimast lüli */ jk.viimane = lv; /* ja paneme ta järjekorda viimaseks */

10 */ if (jk.esimene == NULL) /* juhul kui järjekorras esimest ei ole, */ jk.esimene = lv; /* siis paneme ta esimeseks */ else if (v == 'V') /* kui on valitud väljavõtmine */ if (jk.esimene!= NULL) /* ja kui järjekorras on lülisid, */ /* siis ütleme esimese lüli numbri */ printf("väljavõtmine. Number on %d\n", jk.esimene->number); if (jk.esimene == jk.viimane) /* Kui esimene on ühtlasi viimane, */ lv = jk.viimane; /* siis jätame selle meelde */ jk.esimene = NULL; /* kuulutame järjekorra tühjaks */ jk.viimane = NULL; else /* Kui aga järjekorras on veel lülisid, siis /* otsime üles järjekorras teise */ lv = jk.viimane; /* liikudes viimase suunast */ while (lv->eelmine!= jk.esimene) lv = lv->eelmine; /* ettepoole */ jk.esimene = lv; /* paneme teise esimeseks ja */ lv = lv->eelmine; /* jätame esimese meelde */ jk.esimene->eelmine = NULL; /* esimesel ei ole eelmist */ free(lv); /* meeldejäetud lüli vabastame ja saame mälu tagasi */ else printf("väljavõtmine. Järjekord on tühi.\n"); else if (v == 'Q') /* Kui on valitud lõpetamine, siis */ lv = jk.viimane; if (jk.esimene!= NULL) /* kontrollime, kas järjekord on tühi */ /* ja kui ei ole, siis */ n = 0; while (lv!= NULL) /* loeme lülid kokku */ n++; /* suurendame n ühe võrra */ lv = lv->eelmine; printf("lõpetamine."); /* küsime lõpetamisele kinnituse */ printf(" Järjekorda on jäänud veel %d inimest.\n", n); printf("kas tõesti tahad lõpetada [J/E]? "); scanf("%s", &v); v = toupper(v); if (v == 'J') v = 'Q'; if (v == 'Q') /* Kui lõpetamine ja */ lv = jk.viimane; while (lv!= jk.esimene) /* järjekorras on veel lülisid */ jk.viimane = lv->eelmine; free(lv); /* siis tuleb ka need vabastada */ lv = jk.viimane; free(lv); /* see viimane ka */ while (v!= 'Q'); printf("lõpetame järjekorra pidamise");

11 return 0; /* P r o g r a m m i l õ p p */ Pinumälu ehk magasinmälu Teine AHELA eriliik on PINUMÄLU, mida nimetatakse ka MAGASINIKS. See tuleneb sarnasusest automaadi magasiniga. Kes pole magasini näinud, siis selgituseks kõlbab ka selline mündihoidja, millel on vedru all ja kuhu saab münte pealtpoolt sisse panna ja samuti välja võtta. Sellisel "mündimagasinil" ja automaadimagasinil on üks ühine omadus selle mündi või padruni, mis sinna esimesena sisse pandi, saadakse kätte kõige viimasena ja vastupidi. Viimane ese jääb kõige peale ja saadakse esimesena kätte. See on magasini põhimõte. Pinumälu kui andmestruktuur on kasutusel väga mitmete ülesannete lahendamisel. Lihtsaimaks ülesandeks, mille jaoks võib kirjutada programmi, on andmejada ümberpööramise ülesanne. Oletame, et sisestatakse järjest uusi andmeid ning arv 0 tähistab andmejada lõppu. Seejärel on vaja väljastada kõik sisestatu vastupidises järjekorras. Jada liikmete arv ei ole ette teada. /* N8_4_C */ #include <stdio.h> #include <malloc.h> #include <string.h> struct Lyli char *Liige; struct Lyli *Jargmine; ; main() struct Lyli *Pinu, *LV; char S[80]; Pinu = NULL; printf("jada liikmeteks võivad olla suvalised tekstiread.\n"); printf("lõpu tunnuseks on 0.\n\n"); printf("alustan jada sisestamist\n"); do printf(">"); gets(s); /* loeme sisse jada liikme */ if (strcmp(s, "0")) /* kontrollime, ega see pole lõpp */ LV = malloc(sizeof(struct Lyli)); /* võtame lüli jaoks mälu */ if (LV!= NULL) /* kui saime, siis */ /* küsime ka liikme jaoks mälu */ LV->Liige = malloc(strlen(s)+1); if (LV->Liige!= NULL) strcpy(lv->liige, S); /* salvestame liikme info */ LV->Jargmine = Pinu; /* ja paneme lüli kõige "pealmiseks" */ Pinu = LV; else /* kui liikme info jaoks mälu ei jätkunud */ free(lv); /* siis vabastame ka lüli */ LV = NULL;

12 while (strcmp(s, "0") && LV!= NULL); if (LV == NULL) printf("mälu sai otsa.\n"); printf("alustan väljastamist\n"); LV = Pinu; while (LV!= NULL) printf("%s\n", LV->Liige); /* väljastame liikme info, */ Pinu = LV->Jargmine; /* võtame järgmise pealmiseks */ free(lv->liige); /* ja vabastame juba väljastatud lüli */ free(lv); LV = Pinu; printf("see on kõik!\n"); return 0; Selles näites on kasutatud kaheetapilist mäluvõtmist kõigepealt pinumälu lülile ja siis jadaliikme infole. Järgmine joonis annab sellisest struktuurist hea ülevaate: Pinu V > 3 ---> 2 ---> 1 ---> V V V V Info Info Info Info Ja nüüd sama programm keeles Pascal : P r o g r a m m i a l g u s Program N8_4_P; type PLyli = ^Lyli; Lyli = record Liige : ^string; Jargmine : PLyli; var Pinu, LV : PLyli; S : string[80]; Pinu := nil; Writeln('Jada liikmeteks võivad olla suvalised tekstiread.'); Writeln('Lõpu tunnuseks on 0.');writeln; Writeln('Alustan jada sisestamist'); Repeat Write('>');Readln(s); loeme sisse jada liikme If S <> '0' then kontrollime, ega see pole lõpp New(LV); võtame lüli jaoks mälu if LV <> nil then kui saime, siis küsime ka liikme jaoks mälu GetMem(LV^.Liige, length(s)); If LV^.Liige <> nil then LV^.Liige^ := S; salvestame liikme info

13 pealmiseks jätkunud LV^.Jargmine := Pinu; ja paneme lüli kõige Pinu := LV; end else kui liikme info jaoks mälu ei Dispose(LV); siis vabastame ka lüli LV := nil; Until (S = '0') or (LV = nil); If LV = nil then Writeln('Mälu sai otsa!'); Writeln('Alustan väljastamist'); LV := Pinu; While LV <> nil do Writeln(LV^.Liige^); väljastame liikme info, Pinu := LV^.Jargmine; võtame järgmise pealmiseks FreeMem(LV^.Liige, length(lv^.liige^)); ja vabastame juba väljastatud lüli Dispose(LV); LV := Pinu; Writeln('See on kõik.'); end. P r o g r a m m i l õ p p Selle peatüki materjalide peale on "Kodutöö nr. 8"

Puudub protseduur. Protseduuri nimi võib olla valesti kirjutatud. Protseduuri (või funktsiooni) poole pöördumisel on vähem argumente kui vaja.

Puudub protseduur. Protseduuri nimi võib olla valesti kirjutatud. Protseduuri (või funktsiooni) poole pöördumisel on vähem argumente kui vaja. Puudub protseduur. Protseduuri nimi võib olla valesti kirjutatud. Sub prog1() Msgox "Tere" Sub prog2() a = si(1) Protseduuri (või funktsiooni) poole pöördumisel on vähem argumente kui vaja. a = Sin() Protseduuri

More information

Andmebaasid (6EAP) I praktikum

Andmebaasid (6EAP) I praktikum Andmebaasid (6EAP) I praktikum Mõisteid Server on arvutisüsteem või selles töötav tarkvara, mis pakub teatud infoteenust sellega ühenduvatele klientidele. Klient on tarkvara, mis võimaldab suhelda serveriga.

More information

Tabelid <TABLE> Koostanud: Merike Hein

Tabelid <TABLE> Koostanud: Merike Hein Tabelid Tabelite kasutusvõimalus on HTML'is olemas juba pikka aega. Tabelimärgendite esmaseks kasutusalaks oli muidugi mõista tabelkujul info kuvamine. tähendab siis tabelite joonistamist.

More information

MSDE Upgrade platvormile SQL 2005 Server Express SP4

MSDE Upgrade platvormile SQL 2005 Server Express SP4 MSDE Upgrade platvormile SQL 2005 Server Express SP4 NB! Windos XP puhul peab veenduma, et masinas oleks paigaldatud.net Framework vähemalt versioon 2.0!!! NB! Muutke oma SA parool turvaliseks ( minimaalne

More information

WD My Net N600 juhend:

WD My Net N600 juhend: WD My Net N600 juhend: 1) Kui WD My Net N600 seade on ühendatud näiteks Elioni Thomsoni ruuteriga (TG789vn või TG784) või Elioni Inteno DG301a ruuteriga, kus üldiselt on ruuteri Default Gateway sama, nagu

More information

SQL Server 2005 Expressi paigaldamine

SQL Server 2005 Expressi paigaldamine SQL Server 2005 Expressi paigaldamine Laadige alla.net Framework 2.0 http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d- 8edd-aab15c5e04f5 Avage http://www.microsoft.com/express/2005/sql/download/default.aspx

More information

Informatsiooni andmeelementide omavaheliste seoste kohta saab, kui vastata järgmistele küsimustele:

Informatsiooni andmeelementide omavaheliste seoste kohta saab, kui vastata järgmistele küsimustele: Andmestruktuurid Programmid töötlevad andmeid. Neid hoitakse programmi töö jooksul mälus. Andmed pole amorfne arvude ja stringide hulk, vaid neil on omavahel väga olulised struktuursed seosed, mis võivad

More information

TP-Link TL-WR743ND Juhend

TP-Link TL-WR743ND Juhend TP-Link TL-WR743ND Juhend 1) Ühenda oma arvuti TP-Link ruuteriga üle kaabli (LAN). 2) Kui arvuti ja ruuter said omavahel ühendatud, siis võid minna seadme koduleheküljele (interneti brauseri otsingu reasse

More information

Tsüklidirektiivid. Klass Math. Staatilised meetodid. Massiivid. Koostada programm, mis leiab positiivsete paarisarvude summat vahemikus 1 kuni 20.

Tsüklidirektiivid. Klass Math. Staatilised meetodid. Massiivid. Koostada programm, mis leiab positiivsete paarisarvude summat vahemikus 1 kuni 20. Harjutustund 3 Tsüklidirektiivid. Klass Math. Staatilised meetodid. Massiivid. Tsüklidirektiivid Vaadake teooriat eelmisest praktikumist. Ülesanne 1 Koostada programm, mis leiab esimeste 20 arvude summat

More information

Mälu interfeisid Arvutikomponendid Ergo Nõmmiste

Mälu interfeisid Arvutikomponendid Ergo Nõmmiste Mälu interfeisid Arvutikomponendid Ergo Nõmmiste Mälu liigid Read-only memory (ROM) Flash memory (EEPROM) Static random access memory (SRAM) Dynamic random access memoty (DRAM) 1 kbaidine mälu vajab 10

More information

XmlHttpRequest asemel võib olla vajalik objekt XDomainRequest

XmlHttpRequest asemel võib olla vajalik objekt XDomainRequest 1 2 3 XmlHttpRequest asemel võib olla vajalik objekt XDomainRequest 4 5 6 7 8 https://www.trustwave.com/global-security-report http://redmondmag.com/articles/2012/03/12/user-password-not-sophisticated.aspx

More information

Mis on tõene? Tsüklid, failihaldus. if - näited. unless - näited. unless. Merle Sibola. if ($arv > $suur) { #leitakse suurim arv $suur=$arv; } #if

Mis on tõene? Tsüklid, failihaldus. if - näited. unless - näited. unless. Merle Sibola. if ($arv > $suur) { #leitakse suurim arv $suur=$arv; } #if Mis on tõene? Tsüklid, failihaldus Merle Sibola iga string on tõene, välja arvatud "" ja "0" iga number on tõene, v.a. number 0 Iga viide (reference) on tõene Iga defineerimata muutuja on väär. if if (EXPR)

More information

Digitaalne signaal Diskreetimine ja Dirac Delta Digitaalfiltrid. Digitaalne heli. Hendrik Nigul. Mathematics of Sound and Music.

Digitaalne signaal Diskreetimine ja Dirac Delta Digitaalfiltrid. Digitaalne heli. Hendrik Nigul. Mathematics of Sound and Music. Mathematics of Sound and Music Aprill 2007 Outline 1 Digitaalne signaal 2 3 z-teisendus Mis on heli? Digitaalne signaal Heli on elastses keskkonnas lainena leviv mehaaniline võnkumine. amplituud heli tugevus

More information

Andmebaasi krüpteerimine ja dekrüpteerimine

Andmebaasi krüpteerimine ja dekrüpteerimine Andmebaasi krüpteerimine ja dekrüpteerimine Me võime küll asetanud kõikidele andmebaasi objektidele ligipääsuõigused eri kasutajate jaoks, kuid ikkagi võib mõni häkker avada vastava faili lihtsalt failina

More information

Kirje. Kirje. Tüpiseeritud fail. CASE-lause. Laiendatud klahvikoodid. 1

Kirje. Kirje. Tüpiseeritud fail. CASE-lause. Laiendatud klahvikoodid. 1 Kirje. Tüpiseeritud fail. CASE-lause. Laiendatud klahvikoodid. 1 Kirje Kirje (record) on struktuurne andmetüüp (nagu massiiv) erinevat tüüpi andmete gruppeerimiseks. Kirje koosneb väljadest (field). Iga

More information

M. Kusmin, Programmeerimine II Teema 6 1

M. Kusmin, Programmeerimine II Teema 6 1 M Kusmin, Programmeerimine II Teema 6 1 Teema 6 Dünaamiline mälukasutus Väga sageli pole programmi kirjutamise ajal täpselt teada, kui suuri puhvreid või muid "mälust haaratavaid tükke" programmi töö ajal

More information

Lõimed. Lõime mõiste. Lõimede mudelid. Probleemid lõimedega seoses. Pthreads. Solarise lõimed. Windowsi lõimed. FreeBSD lõimed.

Lõimed. Lõime mõiste. Lõimede mudelid. Probleemid lõimedega seoses. Pthreads. Solarise lõimed. Windowsi lõimed. FreeBSD lõimed. Lõimed Lõime mõiste Lõimede mudelid Probleemid lõimedega seoses Pthreads Solarise lõimed Windowsi lõimed FreeBSD lõimed Linuxi lõimed MEELIS ROOS 1 Ühe- ja mitmelõimelised protsessid code data files code

More information

Robot iehit amise j uhend Mikrokont rolleri programmeerimine C keeles Põhiline C keelest

Robot iehit amise j uhend Mikrokont rolleri programmeerimine C keeles Põhiline C keelest Robot iehit amise j uhend Mikrokont rolleri programmeerimine C keeles Põhiline C keelest Autorid: Alar Ainla Alvo Aabloo Tartu Ülikool Juhendi koostamist on toetanud EITSA SISUKORD SISUKORD 2 SISSEJUHATUS

More information

Milleks tüübid? Mida teeb järgmine programmijupp? x 1 := "Pii siinus on : "; x 2 := ; printx 2 ; print(sin(x 1 ));

Milleks tüübid? Mida teeb järgmine programmijupp? x 1 := Pii siinus on : ; x 2 := ; printx 2 ; print(sin(x 1 )); Milleks tüübid? Mida teeb järgmine programmijupp? x 1 := "Pii siinus on : "; x 2 := 3.1415926;... printx 2 ; print(sin(x 1 )); Ei tea (loodetavasti siiski mitte midagi väga hullu :-) VARMO VENE 1 Milleks

More information

3 ALGORITMI KEERUKUS JA PÕHILISED ANDMESTRUKTUURID

3 ALGORITMI KEERUKUS JA PÕHILISED ANDMESTRUKTUURID 3 ALGORITMI KEERUKUS JA PÕHILISED ANDMESTRUKTUURID Arvutiprogrammid lahendavad mitmesuguseid ülesandeid arvutuste, andmetöötluse ja automaatsete otsuste tegemise alal. Selleks on programmil vaja sooritada

More information

EESTI STANDARD EVS-ISO 11620:2010

EESTI STANDARD EVS-ISO 11620:2010 EESTI STANDARD EVS-ISO INFORMATSIOON JA DOKUMENTATSIOON Raamatukogu tulemusindikaatorid Information and documentation Library performance indicators (ISO 11620:2008) EVS-ISO EESTI STANDARDI EESSÕNA NATIONAL

More information

Tallinna Ülikooli veebipuhvri teenuse kasutamine väljaspool ülikooli arvutivõrku

Tallinna Ülikooli veebipuhvri teenuse kasutamine väljaspool ülikooli arvutivõrku Tallinna Ülikooli veebipuhvri teenuse kasutamine väljaspool ülikooli arvutivõrku Selleks, et kasutada Tallinna Ülikooli veebipuhvrit väljaspool ülikooli arvutivõrku, tuleb luua ühendus serveriga lin2.tlu.ee

More information

Vea haldus ja logiraamat hajutatud süsteemides Enn Õunapuu.

Vea haldus ja logiraamat hajutatud süsteemides Enn Õunapuu. Vea haldus ja logiraamat hajutatud süsteemides Enn Õunapuu enn.ounapuu@ttu.ee Millest tuleb jutt? Kuidas ma näen, millises sammus erinevad protsessid parasjagu on? Kuidas ma aru saan, kas protsess töötab

More information

EESTI STANDARD EVS-ISO/IEC 27003:2011

EESTI STANDARD EVS-ISO/IEC 27003:2011 EESTI STANDARD EVS-ISO/IEC 27003:2011 INFOTEHNOLOOGIA Turbemeetodid Infoturbe halduse süsteemi teostusjuhis Information technology Security techniques Information security management system Implementation

More information

Aegridade analüüs Praktikum nr. 1, 2016, SAS tarkvara kasutamisest

Aegridade analüüs Praktikum nr. 1, 2016, SAS tarkvara kasutamisest Aegridade analüüs Praktikum nr. 1, 2016, SAS tarkvara kasutamisest Andmete lugemine SAS keskkonda. Protseduur sobiva skripti kirjutamiseks on järgmine: 1. Anname andmestikule nime ja alustame sisselugemise

More information

ESIMENE OSA - ALGAJATELE

ESIMENE OSA - ALGAJATELE ESIMENE OSA - ALGAJATELE Esimene osa on jõukohane neile, kel on olemas programmeerimise alusteadmised. Täiendava materjalina võib kasutada oma programmeerimiskeele dokumentatsiooni. 1 PROGRAMMIDE SISEMAAILM

More information

Programmeerimise 2. vaheeksam

Programmeerimise 2. vaheeksam Programmeerimise 2. vaheeksam 5. jaanuar 2015, kell 10:00 13:00 1. Fraktal (3p) yl1.py Kõrvaloleval pildil on fraktali 1., 2., 3. ja 4. taseme näidised. Kirjuta rekursiivne funktsioon, mis võtab argumendiks

More information

Puuduvate andmetega toimetulemine SQL-andmebaasides

Puuduvate andmetega toimetulemine SQL-andmebaasides Sisukord Puuduvate andmetega toimetulemine SQL-andmebaasides 1. Sissejuhatus...1 2. Vastandlikud seisukohad...2 3. NULLide lubamine baastabelis...3 4. Puuduvate andmete esitamine...4 4.1 IS NULL predikaat...6

More information

Androidi rakenduste ligipääsu õigused

Androidi rakenduste ligipääsu õigused Tallinna Ülikool Digitehnoloogiate Instituut Androidi rakenduste ligipääsu õigused Seminaritöö Autor: Martin Kütt Juhendaja: Jaagup Kippar Autor:...... 2017 Juhendaja:...... 2017 Instituudi direktor:......

More information

Objektorienteeritud programmeerimine. 5. märts, 4. loeng Marina Lepp

Objektorienteeritud programmeerimine. 5. märts, 4. loeng Marina Lepp Objektorienteeritud programmeerimine 5. märts, 4. loeng Marina Lepp 1 Loeng Möödunud nädalal Klassid. Isendid. Konstruktorid. Sõned. Mähisklassid Praktikum Objektid ja klassid. Muutujate skoobid. Objektide

More information

Programmeerimine. 2. loeng

Programmeerimine. 2. loeng Programmeerimine 2. loeng Tana loengus Nimed ja muutujad Baastuubid Litaraalkonstandid Omistamine Aritmeetilised avaldised Funktsioonide rakendamine Standardteegid Muutujad Imperatiivses programmeerimises

More information

SQL Serveri paigaldus. Laadimine:

SQL Serveri paigaldus. Laadimine: SQL Serveri paigaldus Laadimine: http://msdn.microsoft.com/vstudio/express/sql/download/ Tasub paigaldada kõige lihtsam versioon (SQL Server 2005 Express Edition SP2). Samalt lehelt saab laadida ka Sql

More information

NAS, IP-SAN, CAS. Loeng 4

NAS, IP-SAN, CAS. Loeng 4 NAS, IP-SAN, CAS Loeng 4 Tunniteemad Network Attached Storage IP Storage Attached Network Content Addressed Storage Network Attached Storage Tehnoloogia, kus andmed on jagatud üle võrgu Salvestusvahendile

More information

Lühike kokkuvõte Pascal-keele süntaksist 1

Lühike kokkuvõte Pascal-keele süntaksist 1 Lühike kokkuvõte Pascal-keele süntaksist 1 Sellest osast leiab järgmised mõisted ja teemad Keeltest, kompileerimisest ja Pascali ajaloost identifikaator, programmi struktuur, lihtandmetüübid, konstant,

More information

FUNKTSIONAALNE PROGRAMMEERIMINE. Animatsioonid

FUNKTSIONAALNE PROGRAMMEERIMINE. Animatsioonid Animatsioon on liikuv, ehk ajast sõltuv, graafika Liikumise illusioon saavutatakse sellega, et teatud ajavahemike järel (optimaalseks peetakse 30 freimi sekundis) joonistatakse erineva pildiga uus freim

More information

Turvaline laohaldussüsteem programmeerituna keeles PHP

Turvaline laohaldussüsteem programmeerituna keeles PHP TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Informaatika eriala Kristjan Robam Turvaline laohaldussüsteem programmeerituna keeles PHP Bakalaureusetöö (6 EAP) Juhendaja: Helle

More information

Objektorienteeritud programmeerimine MTAT (6 EAP) 9. Loeng. H e l le H e i n h e l l e. h ee

Objektorienteeritud programmeerimine MTAT (6 EAP) 9. Loeng. H e l le H e i n h e l l e. h ee Objektorienteeritud programmeerimine MTAT.03.130 (6 EAP) 9. Loeng H e l le H e i n h e l l e. h ein@ut. ee Täna loengus: Erindid Erindite töötlemine Võtmesõnad try, catch, throw, throws, finally, assert

More information

PHP koodimisstandard PSR

PHP koodimisstandard PSR Tallinna Ülikool Informaatika Instituut PHP koodimisstandard PSR Seminaritöö Autor : Manuel Vulp Juhendaja : Jaagup Kippar Tallinn 2014 Sisukord Sissejuhatus... 4 1 Mis on koodimisstandard?... 5 2 Miks

More information

Objekt-orienteeritud programmeerimine MTAT (6 EAP) 5. Loeng. H e l l e H e i n h e l l e. h e i e e

Objekt-orienteeritud programmeerimine MTAT (6 EAP) 5. Loeng. H e l l e H e i n h e l l e. h e i e e Objekt-orienteeritud programmeerimine MTAT.03.130 (6 EAP) 5. Loeng H e l l e H e i n h e l l e. h e i n @ut. e e Täna loengus: Abstraktsed klassid Liidesed Mähisklassid 2 Abstraktsed klassid Meetodit nimetatakse

More information

Sissejuhatus Funktsionaalne programmeerimisparadigma

Sissejuhatus Funktsionaalne programmeerimisparadigma Sissejuhatus Funktsionaalne programmeerimisparadigma Paradigma järgi liigitub funktsionaalne (ingl functional) programmeerimine koos loogilise (ingl logic) programmeerimisega deklaratiivse programmeerimise

More information

ABIMATERJAL ROBOOTIKA TÖÖVIHIKULE Algoritmid ja programmeerimine

ABIMATERJAL ROBOOTIKA TÖÖVIHIKULE Algoritmid ja programmeerimine Raivo Sell, Mikk Leini ABIMATERJAL ROBOOTIKA TÖÖVIHIKULE Algoritmid ja programmeerimine Robootika Kodulabori baasil Kujundus ja küljendus: Raivo Sell Arvutigraafika: Raivo Sell Keeletoimetus: Airi Veber

More information

Lühike paigaldusjuhend TK-V201S TK-V401S 1.01

Lühike paigaldusjuhend TK-V201S TK-V401S 1.01 Lühike paigaldusjuhend TK-V201S TK-V401S 1.01 Sisukord Eesti 1 1. Enne alustamist 1 2. Riistvara paigaldamine 2 Technical Specifications 8 Tõrkeotsing 9 Version 05.12.2010 1. Enne alustamist Eesti Pakendi

More information

Andmebaasid kursuse andmemudel

Andmebaasid kursuse andmemudel Veebiteenused SyBase SQL Anywhere koostanud Sander Sepp SQL Anywhere on andmebaasi juhtsüsteem, mis sisaldab HTTP veebiserveri funktsionaalsust. Veebiserver võimaldab andmebaasi luua veebiteenuseid. Veebiteenused

More information

Objektorienteeritud programmeerimine

Objektorienteeritud programmeerimine Objektorienteeritud programmeerimine 2. loeng 19. veebruar 2018 Marina Lepp 1 Möödunud nädalal Loeng Sissejuhatus Praktikum Paaristöö, algus Vastlapäev Sõbrapäev Hiina uusaasta 2 Umbes mitu tundi tegelesite

More information

Google Earth API juhendmaterjali koostamine

Google Earth API juhendmaterjali koostamine Tallinna Ülikool Informaatika Instituut Google Earth API juhendmaterjali koostamine Seminaritöö Autor: Ronald Kaul Juhendaja: Jaagup Kippar Tallinn 2011 Sisukord Sisukord... 2 Sissejuhatus... 3 1 Juhend

More information

GTK+ raamistiku kasutamine Pythonis PyGl mooduli vahendusel

GTK+ raamistiku kasutamine Pythonis PyGl mooduli vahendusel Tallinna Ülikool Digitehnoloogiate instituut GTK+ raamistiku kasutamine Pythonis PyGl mooduli vahendusel Seminaritöö Autor: Sander Peerna Juhendaja: Inga Petuhhov Tallinn 2016 Autorideklaratsioon Deklareerin,

More information

Pädevushaldus RESTful veebiteenuste abil

Pädevushaldus RESTful veebiteenuste abil Tallinna Ülikool Informaatika Instituut Pädevushaldus RESTful veebiteenuste abil Seminaritöö Autor: Eigen Lenk Juhendaja: Mart Laanpere Tallinn 2010 Sisukord Sissejuhatus... 3 1. Muutused veebitarkvara

More information

MTAT OPERATSIOONISÜSTEEMID praktikumid. Kersti Taurus

MTAT OPERATSIOONISÜSTEEMID praktikumid. Kersti Taurus MTAT.03.008 OPERATSIOONISÜSTEEMID praktikumid Kersti Taurus Mida tehakse praktikumides? Paigaldatakse operatsioonisüsteemid: Windows 7 Professional 64 bit eestikeelne ver. opensuse Linux 11.2 Edasi ülesanded

More information

EstEID Turvakiibi rakenduse kasutusjuhend

EstEID Turvakiibi rakenduse kasutusjuhend EstEID Turvakiibi rakenduse kasutusjuhend Dokumendi versioon: 01.11.2003 1 Sisukord Sisukord... 2 1 Kellele on dokument suunatud... 3 2 Kasutatud lühendid... 3 3 Kaardi äratundmine... 3 4 T=0 või T=1?...

More information

TTÜ informaatikainstituut. Algoritmimine

TTÜ informaatikainstituut. Algoritmimine TTÜ informaatikainstituut Algoritmimine Algoritm on täpne ja ühemõtteline eeskiri antud liiki ülesannete lahendamiseks või tegevuste täitmiseks kindla eesmärgi saavutamisel. Algoritm määrab, milliseid

More information

Erik Jõgi. twitter.com/erikjogi twitter.com/codeborne

Erik Jõgi. twitter.com/erikjogi twitter.com/codeborne Disain Erik Jõgi erik@codeborne.com twitter.com/erikjogi twitter.com/codeborne Disain? Miks? Bad code Clean Code A Handbook of Agile Software Craftsmanship Robert C. Martin, 2008 Uncle Bob You know you

More information

Making Orthophotomosaic about Tartu City with PHOTOMOD Program and Its Geometrical Quality

Making Orthophotomosaic about Tartu City with PHOTOMOD Program and Its Geometrical Quality Making Orthophotomosaic about Tartu City with PHOTOMOD Program and Its Geometrical Quality Natalja LIBA and Ina JÄRVE, Estonia Key words: orthophotomosaic, aerial triangulation, block of imagery, orientation,

More information

CSS i laiendusvõimalused läbi Sass i ning selle kasutamine veebirakenduste loomisel

CSS i laiendusvõimalused läbi Sass i ning selle kasutamine veebirakenduste loomisel Tallinna Ülikool Informaatika Instituut CSS i laiendusvõimalused läbi Sass i ning selle kasutamine veebirakenduste loomisel Seminaritöö Autor: Martin Koidu Juhendaja: Jaagup Kippar Tallinn 2012 Autorideklaratsioon

More information

SIDE (IRT 3930) Põhipunktid. Loeng 11 Transpordiprotokollid Teema - infotransport. Teenuse (lingi) demultipleks. Infotransport kliendilt serverini

SIDE (IRT 3930) Põhipunktid. Loeng 11 Transpordiprotokollid Teema - infotransport. Teenuse (lingi) demultipleks. Infotransport kliendilt serverini SIDE (IRT 3930) Loeng 11 Transpordiprotokollid Teema - infotransport Klient- mudel Teenuste jaotus Infotransport klient- seoses Töökindel infoülekanne võrgukihi kaudu ja transpordiprotokollid Põhipunktid

More information

COBOL Common Business-Oriented Language

COBOL Common Business-Oriented Language COBOL Common Business-Oriented Language Ain Uljas Ajalugu Esmaettekanne 28 mai 1959 Pentagonis peale seda kui American Departement of Defense palus grupil spetsialistidel luua ärivajadusi rahuldav keel,

More information

TTÜ informaatikainstituut. Algoritmimine

TTÜ informaatikainstituut. Algoritmimine TTÜ informaatikainstituut Algoritmimine Algoritm on täpne ja ühemõtteline eeskiri antud liiki ülesannete lahendamiseks või tegevuste täitmiseks kindla eesmärgi saavutamisel. Algoritm määrab, milliseid

More information

Rakendustarkvara: R. Sügis 2017, 1. praktikum

Rakendustarkvara: R. Sügis 2017, 1. praktikum Rakendustarkvara: R. Sügis 2017, 1. praktikum 1 Lühike sissejuhatus R on programmeerimiskeel ja -keskkond, mis on arendatud statistiliseks andmetöötluseks. R-i kasutavate inimeste hulk on viimase kümmekonna

More information

JavaScript programmeerimise tüüpvead ja parimad praktikad

JavaScript programmeerimise tüüpvead ja parimad praktikad Tallinna Ülikool Informaatika Instituut JavaScript programmeerimise tüüpvead ja parimad praktikad Seminaritöö Autor: Kristjan Tammekivi Juhendaja: Andrus Rinde Autor:...,,2014 Juhendaja...,,2014 Instituudi

More information

IPv6 harjutused. Aadressi kuju, kirjaviis, osad, liigid Aadressi saamise viisid

IPv6 harjutused. Aadressi kuju, kirjaviis, osad, liigid Aadressi saamise viisid IPv6 harjutused Aadressi kuju, kirjaviis, osad, liigid Aadressi saamise viisid IPv6 aadressi kuju IPv4 32 bitti (4 baidi kaupa) Kuju kümnendarvud 4 kaupa punktidega eraldatud 192.168.252.200 IPv6 128 bitti

More information

Veebilehe loomine HTML5 abil

Veebilehe loomine HTML5 abil Tallinna Ülikool Informaatika Instituut Veebilehe loomine HTML5 abil Seminaritöö Autor: Vladimir Vološin Juhendaja: Andrus Rinde Autor:......... 2011 Juhendaja:...... 2011 Tallinn 2011 Sisukord Sissejuhatus...

More information

3.1 Tsükkel KORDUV TEGEVUS

3.1 Tsükkel KORDUV TEGEVUS 3.1 Tsükkel KORDUV TEGEVUS Kui püüda arvuti võimalikke plusse välja tuua, siis üheks oluliseks neist on kahtlemata võime mingeid tegevusi kiiresti ja korduvalt sooritada. Nii saab teha arvutusi, midagi

More information

TARTU ÜLIKOOL. Arvutiteaduse instituut LOODUS- JA TÄPPISTEADUSTE VALDKOND

TARTU ÜLIKOOL. Arvutiteaduse instituut LOODUS- JA TÄPPISTEADUSTE VALDKOND TARTU ÜLIKOOL Arvutiteaduse instituut LOODUS- JA TÄPPISTEADUSTE VALDKOND Anita Scharonberg CVE-2015-3457 Referaat Juhendaja: Meelis Roos Tartu 2016 SISUKORD 1 Sissejuhatus... 3 2 Turvaauk... 3 3 Turvaaugu

More information

Süsteemprogrammeerimine keeles C

Süsteemprogrammeerimine keeles C Süsteemprogrammeerimine keeles C C Loeng 2 milles jätkame sisendi ja väljundiga tutvumist, räägime andmetüüpide teisendamisest, tähemärgi andmetüübist, massiividest ja pointeritest ja stringidest ja sellest,

More information

2

2 1 2 3 4 5 St. seotud grupid 6 7 Soovitused: Vältida sidusgruppide tähtsuse järgi järjestamist. Minimeerige üksikute sidusgruppide esiletõstmist. 8 9 10 11 12 Päästeameti avalik veebileht (www.päästeamet.ee)

More information

APPLE I ÕPPEMATERJAL TABELARVUTUSPROGRAMM NUMBERS

APPLE I ÕPPEMATERJAL TABELARVUTUSPROGRAMM NUMBERS Tallinna Ülikool Informaatika Instituut APPLE I ÕPPEMATERJAL TABELARVUTUSPROGRAMM NUMBERS Seminaritöö Autor: Sandra Saartok Juhendaja: Jaanika Meigas Tallinn 2014 Sisukord SISSEJUHATUS... 3 1 IWORK JA

More information

Programmeerimine. 3. loeng

Programmeerimine. 3. loeng Programmeerimine 3. loeng Tana loengus T~oevaartustuup ja loogilised avaldised Hargnemisdirektiivid { Lihtne if-lause { if-else-lause { Uldkujuline if-lause Tsuklidirektiivid { Eelkontrolliga tsukkel {

More information

Andmebaaside varundamine ja taastamine

Andmebaaside varundamine ja taastamine Andmebaaside varundamine ja taastamine Sybase SQL Anywhere 12 Menüü Pane tähele... 1. Andmebaasist kujutise tegemine ja taastamine 2. Andmebaasist pakitud varukoopia tegemine ja taastamine 3. Andmebaasist

More information

Camunda protsessimootori tutvustus

Camunda protsessimootori tutvustus Tallinna Ülikool Digitehnoloogiate Instituut Camunda protsessimootori tutvustus Seminaritöö Autor: Keio Arula Juhendaja: Jaagup Kippar Autor: Juhendaja: 2015 2015 Instituudi direktor: 2015 Tallinn 2015

More information

Nokia E51 kasutamine modemina

Nokia E51 kasutamine modemina Tartu Ülikool Matemaatika-informaatika teaduskond Arvutiteaduse instituut Nokia E51 kasutamine modemina Juhend Koostaja: Allar Tammik Juhendaja: Kersti Taurus Tartu 2008 Sisukord Sissejuhatus...3 Arvuti

More information

Java põhikursuse konspekt

Java põhikursuse konspekt Tallinna Pedagoogikaülikool Informaatika osakond Jaagup Kippar Java põhikursuse konspekt Tallinn 2003 Sissejuhatus Käesolev kirjutis on mõeldud nii iseõppijatele kui abimaterjaliks õpilastele ja õpetajatele.

More information

Semantika, tuubid, loogika ja programmeerimine

Semantika, tuubid, loogika ja programmeerimine Sissejuhatus informaatikasse Semantika, tuubid, loogika ja programmeerimine Varmo Vene Arvutiteaduse Instituut Tartu Ulikool 5. mai 2009. Tsitaat klassikutelt Sissejuhatus Everyone knows that debugging

More information

Veebilehtede loomine, css3

Veebilehtede loomine, css3 CSS... 3 CSS LINKIMINE HTML DOKUMENDIGA... 4 Välise stiililehe rakendamine... 4 Sisemise stiili rakendamine... 4 Reastiili rakendamine... 5 CSS ÕIGEKIRI... 5 Erinevad selektorid... 6 Elemendi nimega selektorid...

More information

Inuaki reptiil minu sees. Erakorralised avastused Maa minevikust, olevikust ja tulevikust

Inuaki reptiil minu sees. Erakorralised avastused Maa minevikust, olevikust ja tulevikust Inuaki reptiil minu sees Erakorralised avastused Maa minevikust, olevikust ja tulevikust I osa See on vestlus Rumeenia naise psühholoog Ariana Hawa ja ebatavalise poisi vahel, kes ütleb, et minevikus kehastus

More information

11. Transpordikiht. Side IRT3930 Ivo Müürsepp

11. Transpordikiht. Side IRT3930 Ivo Müürsepp 11. Transpordikiht Side IRT3930 Ivo Müürsepp Transpordikihi funktsioonid Ühendusele orienteeritud side. Virtuaalne otsekanal alg- ja sihtpunkti vahel. Sõltumatus alumiste kihtide ülesehitusest ja protokollistikust.

More information

Reaktiivsed pildid. Piltide definitsioon:

Reaktiivsed pildid. Piltide definitsioon: Reaktiivsed pildid Piltide definitsioon: data Picture = Region Color Region Picture Over Picture EmptyPic deriving Show Eesmärk on kirjutada programm, mis hiire vasaku nupu kliki korral toob viidatava

More information

VBA Exceli. Visual Basic for Applications Excel 2010 baasil Erki Savisaar

VBA Exceli. Visual Basic for Applications Excel 2010 baasil Erki Savisaar VBA Exceli Visual Basic for Applications Excel 2010 baasil Erki Savisaar Sisukord Sissejuhatus... 3 1 PROGRAMMIDE LOOMISE ÜLDPÕHIMÕTTED... 4 2 VBA KASUTAMINE EXCELIS... 7 2.1 Turvalisus... 7 2.1.1 Üksikute

More information

Tallinna Ülikool Informaatika Instituut. XML rakendused. Jaagup Kippar

Tallinna Ülikool Informaatika Instituut. XML rakendused. Jaagup Kippar Tallinna Ülikool Informaatika Instituut XML rakendused Jaagup Kippar Tallinn 2009 Sisukord XML...3 Ülesanded XMLiga tutvumiseks...5 XSL...5 Käivitamine Java abil...7 Käivitamine Visual Studio abil...8

More information

HTML 5 ja CSS 3 uued võimalused ning nende töökindlus veebilehitsejates

HTML 5 ja CSS 3 uued võimalused ning nende töökindlus veebilehitsejates Tallinna Ülikool Informaatika Instituut HTML 5 ja CSS 3 uued võimalused ning nende töökindlus veebilehitsejates Seminaritöö Autor: Anton Birjukov Juhendaja: Jaagup Kippar Tallinn 2012 Sisukord Sissejuhatus...3

More information

3.1 Valikulause. Sõnede ja arvude võrdlemine

3.1 Valikulause. Sõnede ja arvude võrdlemine 3.1 Valikulause. Sõnede ja arvude võrdlemine SISSEJUHATUS Elus tuleb teha mitmeid valikuid. Näiteks tuleb abielutseremoonial valida kahe valiku vahel - kas jah või ei. Selles osas vaatame, kuidas valikulausete

More information

Algoritmikeelte analüüs

Algoritmikeelte analüüs TALLINNA TEHNIKAÜLIKOOL Infotehnoloogia teaduskond Arvutitehnika instituut Algoritmikeelte analüüs Ringi pindaladega arvutamise keel Priit Rebina 107362IASMM Tallinn 2011 1 Sisukord 1. Sissejuhatus..3

More information

Erkki Moorits Cybernetica AS, Navigatsioonisüsteemide osakond

Erkki Moorits Cybernetica AS, Navigatsioonisüsteemide osakond Programmi kompileerimine ja C eripärad Erkki Moorits Cybernetica AS, Navigatsioonisüsteemide osakond Teemad Programmi kompileerimine, paigutus mälus ja kuidas jõuab programm mällu C keele eripärad Ohtlikud

More information

Tallinna Pedagoogikaülikool Haapsalu Kolledž. Rakenduste programmeerimine. Jaagup Kippar

Tallinna Pedagoogikaülikool Haapsalu Kolledž. Rakenduste programmeerimine. Jaagup Kippar Tallinna Pedagoogikaülikool Haapsalu Kolledž Rakenduste programmeerimine Jaagup Kippar 2004 Sisukord Eessõna...7 Andmebaasid...8 Andmebaasiühenduse loomine...8 Otsene draiver... 11 Servlet...12 Sisestus...

More information

Makrode koostamine. Menüüde koostamine

Makrode koostamine. Menüüde koostamine Makrode koostamine Makrode abil Access lubab automaatselt korrata erinevaid tegevusi ning seega tarbija ei pea kirjutama keerukaid programmi mooduleid. Makro on samasugune Accessi objekt, nagu tabel, päring,

More information

IT infrastruktuuri teenused. Failiserver. Margus Ernits

IT infrastruktuuri teenused. Failiserver. Margus Ernits IT infrastruktuuri teenused Failiserver Margus Ernits margus.ernits@itcollege.ee 1 Failide hoidmine kasutaja arvutis pole tihti mõistlik, kuna Failiserver Arvuti kõvaketta hävimisega kaovad andmed ja nendest

More information

MITME VÄITE ÜHE ANDMEVÄÄRTUSENA ESITAMISE EELISED JA PUUDUSED SQL-ANDMEBAASIDES

MITME VÄITE ÜHE ANDMEVÄÄRTUSENA ESITAMISE EELISED JA PUUDUSED SQL-ANDMEBAASIDES TALLINNA TEHNIKAÜLIKOOL Infotehnoloogia teaduskond Informaatikainstituut IDU40LT Maria Ossipova 135215IAPB MITME VÄITE ÜHE ANDMEVÄÄRTUSENA ESITAMISE EELISED JA PUUDUSED SQL-ANDMEBAASIDES Bakalaurusetöö

More information

Windows XP ja varasemates versioonides kasutati arvuti failides otsimiseks Windows Search versiooni 2.

Windows XP ja varasemates versioonides kasutati arvuti failides otsimiseks Windows Search versiooni 2. Windows 7 otsingud Windows XP ja varasemates versioonides kasutati arvuti failides otsimiseks Windows Search versiooni 2. Windows 7 kasutab täiustatud otsingut Windows Desktop Search (WDS), mis põhineb

More information

C++11 ja C++03 spetsifikatsioonide võrdlus reaalajas töötava rakenduse loomise abil

C++11 ja C++03 spetsifikatsioonide võrdlus reaalajas töötava rakenduse loomise abil Tallinna Ülikool Informaatika Instituut C++11 ja C++03 spetsifikatsioonide võrdlus reaalajas töötava rakenduse loomise abil Seminaritöö Autor: Roman Gorislavski Juhendaja: Inga Petuhhov Tallinn 2012 Sisukord

More information

LEGO Mindstorms NXT robotite programmeerimine NXC keeles

LEGO Mindstorms NXT robotite programmeerimine NXC keeles TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKA TEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Nikolai Konovalov LEGO Mindstorms NXT robotite programmeerimine NXC keeles Bakalaureusetöö (6 EAP) Juhendaja:

More information

Objektorienteeritud programmeerimine

Objektorienteeritud programmeerimine Objektorienteeritud programmeerimine 2. loeng 18. veebruar Eno Tõnisson kasutatud ka Helle Heina ja Jüri Kiho materjale 1 Eelmisel nädalal loeng sissejuhatus praktikum paaristööna Asteroid 2012 DA14 möödus

More information

Tartu Ülikooli Ideelabori veebikeskkonna arendus Bakalaureusetöö (6 EAP)

Tartu Ülikooli Ideelabori veebikeskkonna arendus Bakalaureusetöö (6 EAP) TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Informaatika eriala Lauri Laur Tartu Ülikooli Ideelabori veebikeskkonna arendus Bakalaureusetöö (6 EAP) Juhendajad: Uuno Puus, Margus

More information

Näidisrakendusel põhinev Microsoft Silverlight 3 õppematerjal

Näidisrakendusel põhinev Microsoft Silverlight 3 õppematerjal Tallinna Ülikool Informaatika Instituut Näidisrakendusel põhinev Microsoft Silverlight 3 õppematerjal Microsoft Silverlight 3 Tutorial for Creation of a Data Driven Application Bakalaureusetöö Autor: Ilja

More information

Linuxi võrgutamine. Harjutus 1 Sildamine Linuxis. Kõik vajalik, nagu ikka, Avalik/linuxiadmin-septer

Linuxi võrgutamine. Harjutus 1 Sildamine Linuxis. Kõik vajalik, nagu ikka, Avalik/linuxiadmin-septer Linuxi võrgutamine Kõik vajalik, nagu ikka, Avalik/linuxiadmin-septer Harjutus 1 Sildamine Linuxis Ettevalmistus. Tee ettevalmistus ära ja jää ootama loengu alguse DEMO ja SELGITUST sama harjutuse kohta.

More information

Veebilehtede loomine, css3

Veebilehtede loomine, css3 CSS... 4 CSS LINKIMINE HTML DOKUMENDIGA... 5 VÄLISE STIILILEHE RAKENDAMINE... 5 SISEMISE STIILI RAKENDAMINE... 5 REASTIILI RAKENDAMINE... 6 CSS ÕIGEKIRI... 6 EESLIITED... 7 ERINEVAD SELEKTORID... 7 Mistahes

More information

Venni diagrammide õpiprogramm

Venni diagrammide õpiprogramm TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Marko Täht Venni diagrammide õpiprogramm Bakalaureusetöö (9 EAP) Juhendaja: dots. Rein Prank Tartu 2016 Venni diagrammide õpiprogramm Lühikokkuvõte:

More information

Internet ja veebivahendid (HTML,CSS,DHTML) Kursuse konspekt. Autor Jüri PUHANG

Internet ja veebivahendid (HTML,CSS,DHTML) Kursuse konspekt. Autor Jüri PUHANG Internet ja veebivahendid (HTML,CSS,DHTML) Kursuse konspekt Autor Jüri PUHANG T a l l i n n 2 0 0 7 - 2 - Sisukord: SISSEJUHATUS... 5 1. PEATÜKK - INTERNET... 6 1.1. INTERNETI ÜLDMÕISTED JA ARENGULUGU...

More information

R algajatele, eriti neile kes pole varem programmeerinud

R algajatele, eriti neile kes pole varem programmeerinud R algajatele, eriti neile kes pole varem programmeerinud Tartu, 9. mai 2006 1 2 3 4 5 6 7 8 9 Kava Mis on R? S keele variant Üldotstarbeline k~orgtaseme programmeerimiskeel le orienteeritud vahendid vektorid

More information

Failide jagamine ilma internetiühenduseta kasutades Android operatsioonisüsteemi

Failide jagamine ilma internetiühenduseta kasutades Android operatsioonisüsteemi Tallinna Ülikool Digitehnoloogiate Instituut Informaatika õppekava Failide jagamine ilma internetiühenduseta kasutades Android operatsioonisüsteemi Bakalaureusetöö Autor: Teele Pae Juhendaja: Jaagup Kippar

More information

Reapõhise ja veerupõhise andmete salvestamise võrdlus kahe SQL-andmebaasisüsteemi näitel Magistritöö

Reapõhise ja veerupõhise andmete salvestamise võrdlus kahe SQL-andmebaasisüsteemi näitel Magistritöö TALLINNA TEHNIKAÜLIKOOL Infotehnoloogia teaduskond Informaatikainstituut Infosüsteemide õppetool Reapõhise ja veerupõhise andmete salvestamise võrdlus kahe SQL-andmebaasisüsteemi näitel Magistritöö Üliõpilane:

More information

SIDE (IRT 3930) Põhipunktid. Loeng 23/2007 Sidevõrkude haldus Teema võrguhaldus. Eeldused võrguhalduseks. Telefonivõrk. Mitmetasemeline andmevõrk

SIDE (IRT 3930) Põhipunktid. Loeng 23/2007 Sidevõrkude haldus Teema võrguhaldus. Eeldused võrguhalduseks. Telefonivõrk. Mitmetasemeline andmevõrk SIDE (IRT 3930) Loeng 23/2007 Sidevõrkude haldus Teema võrguhaldus Põhipunktid Võrguhalduse ülesanded Klient server mudel võrguhalduses Halduse standardimine Arvutivõrkude haldussüsteemid Terminalide ja

More information

Analüüs äriprotsesside juhtimise tarkvarale

Analüüs äriprotsesside juhtimise tarkvarale T A R T U Ü L I K O O L MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia Allar Soo Analüüs äriprotsesside juhtimise tarkvarale Bakalaureusetöö (6 EAP) Juhendaja: MSc Vambola Leping

More information