Programski jezici Strukturni tipovi podataka Strukturni tipovi podataka
- Slides: 50
Programski jezici Strukturni tipovi podataka
Strukturni tipovi podataka Polja n Zapisi n Skupovi n Datoteke n
Strukturni tipovi n Prisutni u svim višim programskim jezicima Nizovi n Slogovi n Skupovi n Datoteke n Pascal uvodi pojam strukturnih tipova podataka n Jednorodne ili raznorodne strukture podataka n
Polja n n Jednodimenzionalne ili višedimenzionalne strukture podataka koje obuhvataju više vrednosti istog tipa Jednodimenzionalna polja – vektori Višedimenzionalna polja – matrice Ključna reč array za opis polja n type VEKTOR = array[1. . 10] of integer;
Definisanje polja n Definisanje polja VEKTOR od 10 elemenata tipa float n n type VEKTOR = array[1. . 10] of float; Definisanje dve varijable tipa VEKTOR n var A, B: VEKTOR; Varijable A i B odgovaraju strukturama podataka sa po 10 elemenata tipa float n Pristup komponentama vektora pomoću indeksa n A(I) – opšti slučaj n A[I] – Pascal n
Pristup elementima polja Pristup pomoću indeksa koji određuje element u okviru strukture n Indeks je u opštem slučaju celi broj n Indeks može da bude definisan i kao celobrojni izraz n n n A(2*I+1) Indeksirane promenljive se koriste u programu kao i proste promenljive odgovarajućeg tipa A(3): =0. 0; n X: =A(3); n
Indeksni tip n Tip indeksa u jeziku Ada može biti bilo koji diskretni tip n Intervalni tipovi u funkciji indeksa
Memorijski prostor Polja se realizuju kao statičke strukture podataka n Unapred se rezerviše potreban memorijski prostor u memoriji računara n Granice indeksa u definiciji tipa mogu biti date i preko promenljivih i izraza čija vrednost mora biti poznata u tački definicije tipa u programu n type VEKTOR 1 = array[1. . N] of float; n type VEKTOR 2 = array[N. . N+M] of float; n
Dodeljivanje na nivou polja n Vektori istog strukturnog tipa mogu se dodeljivati jedan drugom, na nivou strukture ili pojedinačnih komponenti
Dodeljivanje i eksplicitna ekvivalentnost n Ako su dva vektora definisana u okviru različitih tipova koji su strukturno jednaki, sva međusobna dodeljivanja su nekorektna u slučaju eksplicitne ekvivalentnosti
Anonimne definicije strukturnih tipova Definicija strukturnih tipova bez eksplicitnog definisanja i imenovanja tipa n Obično važi strukturna ekvivalentnost na nivou naredbi dodeljivanja, a u novije vreme eksplicitna ekvivalentnost n
Neograničena polja Mogućnost definisanja polja sa neograničenim opsegom indeksa (Ada) n Definisanje klase strukturnih tipova koja se u konkretnoj definiciji tipa bliže određuje n
Neograničena polja i podtipovi Definisanje konkretnih tipova podataka, kao podtipova tipa sa neograničenim indeksom n Podtipovi međusobno kompatibilni jer potiču od istog roditeljskog tipa n
Višedimenzionalna polja Potreba za višedimenzionalnim strukturama podataka pri rešavanju mnogih problema n Jednorodne strukture podataka n Pojedinačnim elementima se pristupa pomoću dva ili više indeksa n Dvodimenzionalne strukture – matrice za rešavanje široke klase problema sa matričnom reprezentacijom podataka n
Definisanje višedimenzionalnih polja
Atributi polja Postoje u pojedinim programskim jezicima i koriste se za bliže određivanje strukture, slično kao kod elementarnih tipova podataka n Isti skup atributa se koristi za strukturni tip i za pojedinačne strukture (Ada) n A_TIP'LENGTH i A'LENGTH daju broj elemenata strukture n A_TIP'RANGE i A'RANGE daju opseg indeksa n A_TIP'FIRST i A_TIP'LAST daju prvu i zadnju vrednost indeksa n A(A_TIP'FIRST) prvi element strukture A n
Zapisi (slogovi) su strukture podataka koje se, za razliku od polja, sastoje od komponenti (segmenata) različitog tipa. n Definišu se preko eksplicitnih definicija odgovarajućih strukturnih tipova podataka ili preko anonimnih opisa tipova. n
Definisanje zapisa type DATUM is record mesec : (jan, feb, mar, apr, maj, jun, jul, avg, sep, nov, dec); dan : integer range 1. . 31; godina : integer range 1900. . 2100; end record;
Pristup elementima zapisa n Pristup elementima preko selektora danas, sutra : DATUM; danas. mjesec : = dec; sutra. dan : = 14; danas. dan : = sutra. dan;
Dodela vrednosti zapisu n Obično postoji mogućnost dodele vrednosti celom zapisu danas : = (dec, 13, 1994); -- Najčešće se koristi danas : = DATUM(dec, 13, 1994); -- Pascal danas : = (mesec => dec, god => 1994, dan => 13); --Ada
Nizovi zapisa n Jednom definisani strukturni tipovi mogu se koristiti za definisanje novih strukturnih tipova type PRAZNIK is array (1. . 10) of DATUM; Raspust : PRAZNIK; Raspust(1) : = (29, dec, 2011);
Zapisi preko zapisa n Preko već definisanih zapisa mogu se definisati novi zapisi type OSOBA is record Ime : String(1. . 10); Prezime : String(1. . 15); Dan_rodj : DATUM; end record; Student, Ja, Ti : OSOBA; Student : = ("Ana", "Petrovic", (14, maj, 1970)); Ja. Dan_rodj. godina : = 1953;
Zapisi sa varijantama n Definisanje zapisa sa segmentima koji se uključuju u strukturu zapisa zavisno od vrednosti nekog drugog segmenta zapisa
Naredba with u Pascalu Student : OSOBA; with Student do with Dan_rodj do begin mesec : = maj; dan : = 14; godina : = 1983 end; Student : OSOBA; with Student, Dan_rodj do begin mesec : = maj; dan : = 14; godina : = 1983 end;
Skupovi Skup - više elemenata objedinjenih nekim zajedničkim svojstvom (matematika) n U programskim jezicima pojam skupa je nešto uži u odnosu na matematiku n Definisanje skupova pomoću struktura podataka i odgovarajućih strukturnih tipova (Pascal) n
Skupovi – primer program Skupovi(input, output); type Osnovne. Boje = (crvena, oranz, zelena, zuta, plava, violet); Boje = Set of Osnovne. Boje; var Sboja, Sboja 1, Sboja 2 : Boje; Jednaboja : Osnovne. Boje; B : Boolean; begin Sboja 1 : = [ crvena, zuta, violet ]; Sboja 2 ; = [ ]; Sboja 1 : = [ crvena, zuta, violet, oranz, zelena, plava ]; Sboja 2 : = [ plava ]; end.
Operacije nad skupovima Unija skupova n Presek skupova n Razlika skupova n Jednakost i nejednakost skupova n Podskupovi n Pripadnost skupu n
Unija skupova Sboja 1 : = [ crvena, zuta, violet ]; Sboja 2 : = [ plava, zelena ]; Sboja : = Sboja 1 + Sboja 2; Sboja : = [ crvena, zuta, violet ] + [ plava, zelena ];
Presek skupova Sboja 1 : = [ crvena, zuta, violet ]; Sboja 2 : = [ plava, zelena, zuta ]; Sboja : = Sboja 1 * Sboja 2;
Razlika skupova Sboja 1 : = [ crvena, zuta, violet ]; Sboja : = Sboja 1 - [ zuta, violet ];
Jednakost i nejednakost skupova Sboja 1 : = [ crvena, zuta, violet ]; Sboja 2 : = [ crvena, zuta, violet ]; Sboja : = [ crvena, zuta, violet, zelena ]; B : = Sboja 1 = Sboja 2; B : = Sboja 1 < > Sboja;
Podskupovi Sboja 1 : = [ crvena, zuta ]; Sboja 2 : = [ crvena, zuta, violet ]; B : = Sboja 1 < = Sboja 2; B : = Sboja 2 > = Sboja 1;
Pripadnost skupu Sboja 1 : = [ crvena, zuta ]; Sboja 2 : = [ crvena, zuta, violet ]; Jednaboja : = violet; B : = Jednaboja in Sboja 1; B : = Jednaboja in Sboja 2;
Definisanje uslova preko skupova if (I = 215) or (I = 220) or. . . or (I = 275) or (I = 280) then. . . if I in [ 215, 220, 225, . . . , 280 ] then. . .
Datoteke Sekvencijalne strukture jednorodnih zapisa n Jednorodne strukture slične poljima n Broj elemenata se ne definiše unapred n Podrazumeva se da datoteke fizički postoje van programa na nekom eksternom medijumu n Opisuju se sa file i postali su standardni u programskim jezicima nakon pojave ovog koncepta u Pascalu n
Primeri definicija const Limit = 10; type Opseg = 1. . Limit; Skup = set of Opseg; Vektor = array [Opseg] of real; Complex = record Re, Im : integer; end; Intdat = file of integer; Redat = file of real; Chdat = file of char; Skupdat = file of Skup; Vekdat = file of Vektor; Komdat = file of Complex;
Procedure F^– Baferska promenljiva n EOF(F) – Funkcija kraja datoteke n
GET i PUT
Primer Program kojim se sadržaj datoteke A preslikava u datoteku B: program Datoteke: type Dat = file of integer; var A, B : Dat; begin reset (A); rewrite (B) ; while not EOF(A) do begin B^ : = A^; GET (A); PUT(B); end.
Read i Write
Tekstualne datoteke n Datoteke čiji su elementi znaci ASCII kodirani n type Text = file of char;
Tekstualne datoteke
Standardne datoteke INPUT i OUTPUT WRITE(CH) ekvivalentno sa WRITE(OUTPUT, CH) READ(CH) ekvivalentno sa READ(INPUT, CH) WRITELN ekvivalentno sa WRITELN(OUTPUT) READLN ekvivalentno sa READLN(INPUT) EOF ekvivalentno sa EOF(INPUT) EOLN ekvivalentno sa EOLN(INPUT)
Datoteke u C-u FILE struktura koja je kao specijalan tip podataka definisana u stdio. h n Definicija pokazivača datoteke n FILE *pok_dat; n Korišćenjem ovog pokazivača ostvaruje se pristup datoteci
Procedure u C-u n FILE *fopen(char* ime_datoteke, char* modus) n modus – znakovni niz koji pokazuje dozvoljeni način pristupa datoteci n Funkcija vraća pokazivač na datoteku koja je otvorena, ili NULL ako datoteka nije mogla da bude otvorena FILE *pok_dat; pok_dat = fopen("datul", "r");
Procedure u C-u n int fclose(FILE *pok_datoteke) Ovom funkcijom se prekida veza koja postoji između pokazivača datoteke i imena datoteke. Ukoliko je zatvaranje izvršeno uspešno, povratna vrednost ove funkcije je 0.
Procedure u C-u n Standardna funkcija za čitanje jednog znaka (bajta) iz datoteke int fgetc(FILE *pok_dat) n Funkcije za upis jednog znaka (bajta) u datoteku int fputc(char c, FILE *pok_dat) Rezultat funkcije je upisani znak. n Funkcija za čitanje jednog reda iz tekstualne datoteke char *fgets(char *s, int maxbr, FILE *pok_dat) Učitava jedan red (niz znakova do znaka ‘n’) iz datoteke na koju ukazuje pok_dat. s je niz u koji se smešta učitani red, a maxb-1 je maksimalni broj znakova koji se mogu učitati. n Funkcija za upis jednog reda u tekstualnu datoteku char *fputs(char *s, FILE *pok_dat)
Procedure u C-u n Funkcija za formatirano čitanje podataka iz tekstualne datoteke int fscanf(FILE *pok_dat, char *format [, arg]…) n Funkcija za formatirani upis podataka u tekstualne datoteke int fprintf(FILE *pok_dat, char *format [, arg]…)
Procedure u C-u n Funkcija za binarno čitanje int fread(void *ulaz, long vel, long br, FILE *uldat) Iz binarne datoteke na koju ukazuje pok_dat učitava se br podataka veličine vel bajtova i to smešta počev od lokacije na koju ukazuje pokazivač ulaz. n Funkcija za binarni upis int fwrite(void *izlaz, long vel, long br, FILE *izdat) U binarnu datoteku na koju ukazuje pok_dat upisuje se br podataka veličine vel bajtova. izlaz je početna adresa od koje su smešteni podaci koji se prenose u datoteku.
Pitanja ? ? ?
- Programski jezici i strukture podataka
- Prevodjenje programskih jezika
- Simbolicki jezik
- Sta su programi prevodioci
- Objektno orijentirani programski jezici
- Tehniki
- Programiranje i programski jazici
- Programski jezici za djecu
- Tablica era
- Tipovi podataka c++
- Vrste baza podataka
- Vrste podataka u pythonu
- Osnovni tipovi podataka
- Jezici u europi
- Asemblerski jezici
- Cv jezici
- Skriptni jezici i web programiranje
- Podjela jezika
- Violeta moretti
- Skriptni jezici
- Java skript
- Fail rp primjeri
- Programski paketi u matematici
- Programski jezik logo
- Sql programski jezik
- Osnovni programski jezik
- S struktura
- Pascal programski jezik
- Dejan akerman
- Fortran programski jezik
- Programski jazici
- Programski jazici
- Programski jezik c
- Delphi programski jezik
- Python programski jezik
- C# programski jezik
- Podjela programskih jezika
- Jupiter programski jezik
- Programski jezik r
- Python programski jezik
- Cyklopropan racionální vzorec
- Strukturní vzorec cyklohexanu
- Molekulový vzorec
- Strukturni krug
- Tetrafluorethylen teflon
- Strukturní vzorec cyklohexanu
- Hexen strukturní vzorec
- Rovnice hoření acetylenu
- Vzorec propyn
- Ketony příklady
- Strukturní vzorec cyklohexanu