1 / 50

Programski jezici

Programski jezici. Strukturni t ipovi podataka. Strukturni t ipovi podataka. Polja Zapisi Skupovi Datoteke. Strukturni tipovi. Prisutni u svim višim programskim jezicima Nizovi Slogovi Skupovi Datoteke Pascal uvodi pojam strukturnih tipova podataka

barny
Télécharger la présentation

Programski jezici

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programski jezici Strukturni tipovi podataka

  2. Strukturni tipovi podataka • Polja • Zapisi • Skupovi • Datoteke

  3. Strukturni tipovi • Prisutni u svim višim programskim jezicima • Nizovi • Slogovi • Skupovi • Datoteke • Pascal uvodi pojam strukturnih tipova podataka • Jednorodne ili raznorodne strukture podataka

  4. Polja • 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 • type VEKTOR = array[1 .. 10] of integer;

  5. Definisanje polja • Definisanje polja VEKTOR od 10 elemenata tipa float • type VEKTOR = array[1 .. 10] of float; • Definisanje dve varijable tipa VEKTOR • var A, B: VEKTOR; • Varijable A i B odgovaraju strukturama podataka sa po 10 elemenata tipa float • Pristup komponentama vektora pomoću indeksa • A(I) – opšti slučaj • A[I] – Pascal

  6. Pristup elementima polja • Pristup pomoću indeksa koji određuje element u okviru strukture • Indeks je u opštem slučaju celi broj • Indeks može da bude definisan i kao celobrojni izraz • A(2*I+1) • Indeksirane promenljive se koriste u programu kao i proste promenljive odgovarajućeg tipa • A(3):=0.0; • X:=A(3);

  7. Indeksni tip • Tip indeksa u jeziku Ada može biti bilo koji diskretni tip • Intervalni tipovi u funkciji indeksa

  8. Memorijski prostor • Polja se realizuju kao statičke strukture podataka • Unapred se rezerviše potreban memorijski prostor u memoriji računara • 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 • type VEKTOR1 = array[1 .. N] of float; • type VEKTOR2 = array[N .. N+M] of float;

  9. Dodeljivanje na nivou polja • Vektori istog strukturnog tipa mogu se dodeljivati jedan drugom, na nivou strukture ili pojedinačnih komponenti

  10. Dodeljivanje i eksplicitna ekvivalentnost • 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

  11. Anonimne definicije strukturnih tipova • Definicija strukturnih tipova bez eksplicitnog definisanja i imenovanja tipa • Obično važi strukturna ekvivalentnost na nivou naredbi dodeljivanja, a u novije vreme eksplicitna ekvivalentnost

  12. Neograničena polja • Mogućnost definisanja polja sa neograničenim opsegom indeksa (Ada) • Definisanje klase strukturnih tipova koja se u konkretnoj definiciji tipa bliže određuje

  13. Neograničena polja i podtipovi • Definisanje konkretnih tipova podataka, kao podtipova tipa sa neograničenim indeksom • Podtipovi međusobno kompatibilni jer potiču od istog roditeljskog tipa

  14. Višedimenzionalna polja • Potreba za višedimenzionalnim strukturama podataka pri rešavanju mnogih problema • Jednorodne strukture podataka • Pojedinačnim elementima se pristupa pomoću dva ili više indeksa • Dvodimenzionalne strukture – matrice za rešavanje široke klase problema sa matričnom reprezentacijom podataka

  15. Definisanje višedimenzionalnih polja

  16. Atributi polja • Postoje u pojedinim programskim jezicima i koriste se za bliže određivanje strukture, slično kao kod elementarnih tipova podataka • Isti skup atributa se koristi za strukturni tip i za pojedinačne strukture (Ada) • A_TIP'LENGTH i A'LENGTH daju broj elemenata strukture • A_TIP'RANGE i A'RANGE daju opsegindeksa • A_TIP'FIRST i A_TIP'LAST daju prvu i zadnju vrednost indeksa • A(A_TIP'FIRST) prvi element strukture A

  17. Zapisi • Zapisi (slogovi) su strukture podataka koje se, za razliku od polja, sastoje od komponenti (segmenata) različitog tipa. • Definišu se preko eksplicitnih definicija odgovarajućih strukturnih tipova podataka ili preko anonimnih opisa tipova.

  18. Definisanje zapisa typeDATUM 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;

  19. Pristup elementima zapisa • Pristup elementima preko selektora danas, sutra : DATUM; danas.mjesec := dec; sutra.dan := 14; danas.dan := sutra.dan;

  20. Dodela vrednosti zapisu • 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

  21. Nizovi zapisa • 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);

  22. Zapisi preko zapisa • 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;

  23. Zapisi sa varijantama • Definisanje zapisa sa segmentima koji se uključuju u strukturu zapisa zavisno od vrednosti nekog drugog segmenta zapisa

  24. 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; Naredba with u Pascalu

  25. Skupovi • Skup - više elemenata objedinjenih nekim zajedničkim svojstvom (matematika) • U programskim jezicima pojam skupa je nešto uži u odnosu na matematiku • Definisanje skupova pomoću struktura podataka i odgovarajućih strukturnih tipova (Pascal)

  26. Skupovi – primer program Skupovi(input,output); type OsnovneBoje = (crvena, oranz, zelena, zuta, plava, violet); Boje = Set of OsnovneBoje; var Sboja, Sboja1, Sboja2 : Boje; Jednaboja : OsnovneBoje; B : Boolean; begin Sboja1 := [ crvena, zuta, violet ]; Sboja2 ;= [ ]; Sboja1 := [ crvena, zuta, violet, oranz, zelena, plava ]; Sboja2 := [ plava ]; end.

  27. Operacije nad skupovima • Unija skupova • Presek skupova • Razlika skupova • Jednakost i nejednakost skupova • Podskupovi • Pripadnost skupu

  28. Unija skupova Sboja1 := [ crvena, zuta, violet ]; Sboja2 := [ plava, zelena ]; Sboja := Sboja1 + Sboja2; Sboja := [ crvena, zuta, violet ] + [ plava, zelena ];

  29. Presek skupova Sboja1 := [ crvena, zuta, violet ]; Sboja2 := [ plava, zelena, zuta ]; Sboja := Sboja1 * Sboja2;

  30. Razlika skupova Sboja1 := [ crvena, zuta, violet ]; Sboja := Sboja1 - [ zuta, violet ];

  31. Jednakost i nejednakost skupova Sboja1 := [ crvena, zuta, violet ]; Sboja2 := [ crvena, zuta, violet ]; Sboja := [ crvena, zuta, violet, zelena ]; B := Sboja1 = Sboja2; B := Sboja1 < > Sboja;

  32. Podskupovi Sboja1 := [ crvena, zuta ]; Sboja2 := [ crvena, zuta, violet ]; B := Sboja1 < = Sboja2; B := Sboja2 > = Sboja1;

  33. Pripadnost skupu Sboja1 := [ crvena, zuta ]; Sboja2 := [ crvena, zuta, violet ]; Jednaboja := violet; B := Jednaboja in Sboja1; B := Jednaboja in Sboja2;

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

  35. Datoteke • Sekvencijalne strukture jednorodnih zapisa • Jednorodne strukture slične poljima • Broj elemenata se ne definiše unapred • Podrazumeva se da datoteke fizički postoje van programa na nekom eksternom medijumu • Opisuju se sa file i postali su standardni u programskim jezicima nakon pojave ovog koncepta u Pascalu

  36. 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 ofchar; Skupdat = file of Skup; Vekdat = file of Vektor; Komdat = file of Complex;

  37. Procedure • F^– Baferska promenljiva • EOF(F) – Funkcija kraja datoteke

  38. GET i PUT

  39. 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; end.

  40. Read i Write

  41. Tekstualne datoteke • Datoteke čiji su elementi znaci ASCII kodirani • type Text = file of char;

  42. Tekstualne datoteke

  43. 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)

  44. Datoteke u C-u • FILE struktura koja je kao specijalan tip podataka definisana u stdio.h • Definicija pokazivača datoteke FILE *pok_dat; • Korišćenjem ovog pokazivača ostvaruje se pristup datoteci

  45. Procedure u C-u • FILE *fopen(char* ime_datoteke, char* modus) • modus – znakovni niz koji pokazuje dozvoljeni način pristupa datoteci • 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");

  46. Procedure u C-u • 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.

  47. Procedure u C-u • Standardna funkcija za čitanje jednog znaka (bajta) iz datoteke int fgetc(FILE *pok_dat) • Funkcije za upis jednog znaka (bajta) u datoteku int fputc(char c,FILE *pok_dat) Rezultat funkcije je upisani znak. • 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. • Funkcija za upis jednog reda u tekstualnu datoteku char *fputs(char *s, FILE *pok_dat)

  48. Procedure u C-u • Funkcija za formatirano čitanje podataka iz tekstualne datoteke int fscanf(FILE *pok_dat,char *format [,arg]…) • Funkcija za formatirani upis podataka u tekstualne datoteke int fprintf(FILE *pok_dat,char *format [,arg]…)

  49. Procedure u C-u • 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. • 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.

  50. Pitanja ???

More Related