1 3 Sloeni tipovi podataka C raspolae sljedeim
- Slides: 29
1. 3. Složeni tipovi podataka C raspolaže sljedećim složenim tipovima podataka: polja (indeksirane promjenljive) jednodimenzionalno = NIZ, dvodimenzionalno = MATRICA, višedimenzionalno strukture unije 1
1. 3. 1. Polja NIZOVI ? Nizovi Niz ili vektor je jednodimenzionalno polje To je skup podataka istog tipa U memoriji se smješta u niz uzastopnih mem. lokacija Svi podaci u nizu imaju jedno ime = IME NIZA Ime niza predstavlja početnu adresu niza u memoriji Svaki element u nizu određen je: imenom niza, i indeksom (pomjerajem u odnosu na početak niza) niz[7] niz[6] niz[5] niz[4] niz[3] niz[2] niz[1] niz[0] MEMORIJA 2
1. 3. 1. Polja NIZOVI ? Deklaracija niza Opšti oblik deklaracije: tip ime_niza [broj_elemenata] = {lista vrijednosti} tip niza (tip podataka u nizu) ime niza (identifikator u skladu sa sintaksom jezika, važe sva pravila kao i za skalarne promjenljive) 3 vrijednosti elemenata u nizu (inicijalizacija niza) (nije obavezno inicijalizovanje) (vrijednosti se razdvajaju zapetama) broj elemenata u nizu (cjelobrojna konstanta) (rezerviše se potreban broj bajtova za memorisanje deklarisanog broja elemenata)
1. 3. 1. Polja NIZOVI ? Deklaracija niza Primjer deklaracije: int niz[5]; char tekst[10]; tekst[9] tekst 10*1 B = 10 B Primjer: #define MAX 5 #define LENG 10 main() { int niz[MAX]; char tekst[LENG]; . . . } tekst[1] tekst[0] niz[4] niz[3] niz[2] 5*2 B = 10 B niz[1] niz[0] MEMORIJA 4
1. 3. 1. Polja NIZOVI ? Deklaracija niza Primjer deklaracije sa inicijalizacijom: A[0] int A[3]={1, 2, 3}; int B[]={1, 2, 3, 4}; int C[5]={10}; int D[5]={0}; 5 1 A[1] 2 A[2] 3 B[0] B[1] B[2] 1 2 3 C[0] C[1] C[2] 10 0 0 D[0] D[1] D[2] 0 0 0 B[3] 4 C[3] C[4] 0 0 D[3] D[4] 0 0
1. 3. 1. Polja NIZOVI ? Primjer: Učitati niz od n cijelih brojeva, pa ih ispisati redoslijedom kojim su učitani. #include <stdio. h> #define MAX 100 main() { int niz[MAX]; int i, n; do { printf(”n=”); scanf(”%d”, &n); } while (n<1); for ( i=1 ; i<=n ; i++ ) { printf(”Unesite %d broj: ”); scanf(”%d”, &niz[i-1]); } printf(”Unijeli ste: ”); for ( i=0 ; i<n ; i++ ) printf(” %d”, niz[i]); } 6 POČETAK n ISTINA n<1 LAŽ i = 1, n niz[i-1] i = 0, n-1 niz[i] KRAJ
1. 3. 1. Polja NIZOVI ? Primjer: Učitati niz od n cijelih brojeva, pa ih ispisati obrnutim redoslijedom. #include <stdio. h> #define MAX 100 main() { int niz[MAX]; int i, n; do { printf(”n=”); scanf(”%d”, &n); } while (n<1); for ( i=1 ; i<=n ; i++ ) { printf(”Unesite %d broj: ”); scanf(”%d”, &niz[i-1]); } printf(”Unijeli ste: ”); for ( i=n ; i>=1 ; i-- ) printf(” %d”, niz[i-1]); } 7 POČETAK n ISTINA n<1 LAŽ i = 1, n niz[i-1] i = n, 1 niz[i-1] KRAJ
1. 3. 1. Polja NIZOVI ? Primjer: Učitati niz od n cijelih brojeva, pa ispisati njihovu aritmetičku sredinu i one učitane brojeve koji su veći od sredine. POČETAK T n ISTINA as = s/n n<1 i = 0, n-1 LAŽ s=0 i = 0, n-1 ISTINA niz[i]>as niz[i] s = s + niz[i] T 8 KRAJ LAŽ #include <stdio. h> #define MAX 100 main() { int niz[MAX]; int i, n, s=0; float as; do { printf(”n=”); scanf(”%d”, &n); } while (n<1); for (i=0; i<=n-1; i++) { printf(”Unesite broj: ”); scanf(”%d”, &niz[i]); s+=niz[i]; } as=(float)s / n; printf(”Sredina: %7. 3 fn”, as); printf(”Veci su: ”); for ( i=0 ; i<n ; i++ ) if (niz[i]>as) printf(” %d”, niz[i]); }
1. 3. 1. Polja NIZOVI ? Primjer: Program koji učitava niz cijelih brojeva, a zatim ih ispisuje u rastućem redoslijedu. Sortiranje niza: Sortiranje je postupak kojim se mijenja poredak elemenata u nizu, kako bi se podaci doveli u željeni redoslijed: rastući (ascending) opadajući (descending) Rješenje problema? Postoji velik broj algoritama za sortiranje Najpopularniji algoritmi za sortiranje: select-sort bubble-sort quick-sort shell-sort stack-sort. . . 9
1. 3. 1. Polja NIZOVI ? Primjer: Program koji učitava niz cijelih brojeva, a zatim ih ispisuje u rastućem redoslijedu. #include <stdio. h> #define MAX 100 main() { int niz[MAX]; int i, j, n, rb, pom; do { printf(”n= ”); scanf(”%d”, & n); } printf(”n=”); while ((n )); ((n<1) || (n>100)); for ( i=1 ; i< i=1; i<=n; i++ ) { printf(”Unesite broj: ”); scanf(”%d”, &niz [i-1 -1]); } &niz[i for ( i=0 ; i<n-1 ; i++ i=0; i<n-1; i++ ) { for ( j=i+1, rb=i; j<n; j++ ) if (niz [j] < niz[rb] rb]) rb=j; if (rb!=i) { pom=niz [i]; niz[i]= niz[rb]; niz[rb]=pom; pom=niz[i]; niz[i]=niz niz[rb]=pom; } } printf(”Sortirani niz: ”); for ( i=0; i<n; i++ ) printf(” %d”, niz[i]); } 10
1. 3. 1. Polja MATRICE ? Dvodimenzionalna polja Element niza može da bude novi niz tako dobijamo dvodimenzionalno polje (matrica) 0 1 . . . j . . . m-1 0 1 mat[1][0] i red (vrsta) n-1 mat[i][j] 11 kolona (stupac) mat[n-1][m-1]
1. 3. 1. Polja MATRICE ? Deklaracija matrice Opšti oblik deklaracije: tip ime_mat [D 1][D 2] = { {L 1}, {L 2}, . . . , {Ln-1} } tip matrice (tip podataka) ime matrice vrijednosti elemenata u matrici inicijalizacija matrice nije obavezno inicijalizovanje dimenzije matrice D 1 = broj redova D 2 = broj kolona rezerviše se potreban broj bajtova za memorisanje D 1*D 2 elemenata 12
1. 3. 1. Polja MATRICE ? Deklaracija matrice Primjer deklaracije: char tablica[2][3]; 0 1 tablica[1][2] tablica[1][1] 2 0 tablica[1][0] 1 tablica[0][2] tablica[0][1] logička predstava tablica[0][0] MEMORIJA fizička predstava 13
1. 3. 1. Polja MATRICE ? Deklaracija matrice Primjer deklaracije sa inicijalizacijom: int mat[2][3] = { {3, 1, 8}, {2, 5, 6} }; 0 1 2 0 3 1 8 1 2 5 6 Primjer deklaracije sa inicijalizacijom: int mat[2][3] = { {3, 1, 8} }; 0 1 2 14 0 3 1 8 1 0 0 0
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer učitavanja matrice: for ( red=1; red<=n; red++ ) for ( kol=1; kol<=m; kol++ ) { printf(”mat[%d]=”, red-1, kol-1); scanf(”%d”, &mat[red-1][kol-1]); } ili: for ( red=0; red<n; red++ ) for ( kol=0; kol<m; kol++ ) { printf(”mat[%d]=”, red, kol); scanf(”%d”, &mat[red][kol]); } 15
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer ispisivanja matrice: for ( red=1; red<=n; red++ ) { for ( kol=1; kol<=m; kol++ ) printf(” %4 d”, mat[red-1][kol-1]); printf(”n”); } ili: for ( red=0; red<n; red++ ) { for ( kol=0; kol<m; kol++ ) printf(” %4 d”, mat[red][kol]); printf(”n”); } 16
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer manipulacije glavnom dijagonalom: mat[0][0] mat[1][1] mat[i][i] mat[i][j], i=j mat[n-1] Ispis elemenata na glavnoj dijagonali: printf(”Glavna dijagonala: ”); for ( i=0; i<n; i++ ) printf(” %d”, mat[i][i]); Suma elemenata na glavnoj dijagonali: for ( s=i=0; i<n; i++ ) s+=mat[i][i]; printf(”Suma elemenata na GD: %d”, s); 17
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer manipulacije sporednom dijagonalom: mat[0][n-1] mat[1][n-2]. . . mat[i][j], i+j=n-1 mat[n-1][0] Ispis elemenata na sporednoj dijagonali: printf(”Sporedna dijagonala: ”); for ( i=n-1; i>=0; i-- ) printf(” %d”, mat[i][n-1 -i]); Suma elemenata na sporednoj dijagonali: for ( s=i=0; i<n; i++ ) s+=mat[i][n-1 -i]; printf(”Suma elemenata na SD: %d”, s); 18
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer manipulacije donjom trougaonom matricom: mat[i][j], j<=i Ispis donje trougaone matrice: printf(”Donja trougaona matrica: n ”); for ( i=0; i<n; i++ ) { for ( j=0; j<=i; j++ ) printf(” %4 d”, mat[i][j]); printf(”n”); } 19
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer manipulacije gornjom trougaonom matricom: mat[i][j], j>=i Ispis gornje trougaone matrice: printf(”Gornja trougaona matrica: n ”); for ( i=0; i<n; i++ ) { for ( j=1; j<=i; j++ ) printf(”%5 c”, ’ ’) for ( j=i; j<n; j++ ) printf(” %4 d”, mat[i][j]); printf(”n”); } 20
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer transponovanja matrice 1 4 7 2 5 8 3 6 9 polazna matrica Ispis transponovane matrice na osnovu originalne matrice: printf(”Transponovana: n ”); for ( i=0; i<n; i++ ) { for ( j=0; j<n; j++ ) printf(” %4 d”, mat[j][i]); printf(”n”); } 21 1 2 3 4 5 6 7 8 9 transponovana matrica Transponovanje matrice: for ( i=0; i<n; i++ ) for ( j=i+1; j<n; j++ ) { pom=mat[i][j]); mat[i][j]=mat[j][i]; mat[j][i]=pom; }
1. 3. 1. Polja MATRICE ? Manipulacija matricom Primjer množenja dvije matrice 1 4 1 2 5 0 3 6 2 * Matrica A (m*n) 1 4 7 2 2 1 3 1 0 Matrica B (n*p) ? ? ? 30 9 ? ? ? 66 24 15 4 ? ? ? 5 17 3 Matrica C (m*p) Množenje matrica: for ( i=0; i<m; i++ ) /* red matrice C */ for ( j=0; j<p; j++ ) /* kolona matrice C */ for ( k=0; k<n; k++ ) c[i][j]+=a[i][k]*b[k][j]; 22
1. 3. 1. Polja VIŠE DIMENZIJE? Višedimenzionalna polja C omogućava i manipulaciju višedimenzionalnim poljima Trodimenzionalno polje tip ime[d 1][d 2][d 3]; Primjer deklaracije: int kocka[3][6][6]; Primjer 4 -dim. polja: char P 4[d 1][d 2][d 3][d 4]; 23 kocka[sloj][red][kolona]
1. 3. 2. Strukture STRUKTURA? Strukture Struktura je skup heterogenih podataka međusobno logički povezanih Pogodna za grupisanje atributa nekog entiteta (stvarnog ili nestvarnog) Atributi? ime prezime visina struct osoba { char prezime[15]; char ime[15]; int visina; } 24
1. 3. 2. Strukture STRUKTURA? Deklaracija strukture Opšti oblik deklaracije: struct ključna riječ ime strukture ime { tip 1 element 1; tip 2 element 2; . . . tip. N element. N; } lista_promjenljivih; Deklaracija elementa (polja) lista promjenljivih Primjer: ovog tipa struct osoba { char prezime[15]; char ime[15]; int visina; } student 1, student 2, klub[100]; 25
1. 3. 2. Strukture STRUKTURA? Deklaracija strukture Alternativni oblik deklaracije: struct ime { tip 1 element 1; . . . tip. N element. N; }; struct ime lista_promjenljivih; 26 Npr: struct osoba { char ime[15]; int visina; }; struct osoba student, klub[100];
1. 3. 2. Strukture STRUKTURA? Pristup elementima (poljima) strukture Pristup pomoću operatora ”. ” = ELEMENT STRUKTURE Primjer: struct osoba { char prezime[15]; char ime[15]; int visina; } student, klub[100]; Pristup poljima: student. prezime = ”Markovic”; student. ime = ”Marko”; student. visina = 190; 27 klub[1]. prezime = ”Jankovic”; klub[1]. ime = ”Janko”; klub[1]. visina = 202;
1. 3. 2. Strukture STRUKTURA? Primjer: Manipulacija kompleksnim brojevima pomoću strukture #include <stdio. h> main() { struct kompleks { float re, im; }; kompleks x = { 3. 0, 2. 0 }; kompleks y = { 2. 0, 3. 0 }; kompleks zbir, proizvod; zbir. re = x. re + y. re; zbir. im = x. im + y. im; proizvod. re = x. re*y. re – x. im*y. im; proizvod. im = x. re*y. im + x. im*y. re; printf(”Zbir je: %5. 2 f + j%5. 2 fn”, zbir. re, zbir. im); printf(”Proizvod je: %5. 2 f + j%5. 2 fn”, proizvod. re, proizvod. im); } 28
1. 3. 2. Strukture STRUKTURA? Primjer: Manipulacija tačkom u dvodimenzionalnom koordinatnom sistemu y A(x, y) x B(x. B, y. B) y d A(x. A, y. A) x 29 #include <stdio. h> #include <math. h> #define KV(x) (x)*(x) main() { struct tacka { float x, y; } a, b; float d; printf(”A: x=”); scanf(”%f”, &a. x); printf(”A: y=”); scanf(”%f”, &a. y); printf(”B: x=”); scanf(”%f”, &b. x); printf(”B: y=”); scanf(”%f”, &b. y); d = sqrt( KV(a. x-b. x) + KV(a. y-b. y)); printf(”Udaljenost: %5. 2 f”, d); }
- Osnovni tipovi podataka
- Era dijagram
- Tipovi podataka c++
- Primena baze podataka
- Vrste podataka u pythonu
- Ishrana filtracijom
- Tipovi samoubojstva
- Tipovi buke
- Pojedinacna proizvodnja primer
- Tipovi hotela
- Tipovi proizvodnje
- Tipovi proizvodnje
- Tipovi organizacione kulture
- Umereno kontinentalna klima srbije
- Klimadijagram
- Tipovi slova
- Dare tipovi
- Ukrajina austrija tipovi
- Tipovi sukoba interesa
- Tipovi komunikacije
- Dnevni tipovi
- Tipovi slova
- Komunikacija vrste
- Dnevni tipovi
- Tipovi zadataka u testovima znanja
- Epistemiologija
- Dare tipovi
- Jezicka tipologija
- Tipovi samoubojstva
- Tipovi kupaca