Click here to load reader
Upload
dejan-marinkovic
View
14
Download
8
Embed Size (px)
DESCRIPTION
Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja
Citation preview
04/10/23 1
NAJVECI ELEMENTNIZA PROIZVOLJNE DIMENZIJE
• #include <stdio.h>• /* Neophodno je ukljuciti stdlib.h */• #include <stdlib.h>• main()• {• int n;• /* Deklaracija int a[n]; • nije dozvoljena jer kompajler ne moze u vreme prevodjenja
da odredi potrebnu kolicinu memorije. Umesto ovoga, vrši se dinamička alokacijai memorije tj. rezervacija memorije u fazi izvrsavanja rograma kada bude poznata vrednost broja n. Zbog toga je potrebno upamtiti samo adresu pocetka alociranog bloka sto se postize koriscenjem sledeceg pokazivaca: */
04/10/23 2
• Int *a;
• int i, max;
• printf("Unesi dimenziju niza : ");
• scanf("%d", &n);
• /* U ovom treunutku se zna koliko je memorije potrebno i poziva se funkcija
• malloc za dinamicku alokaciju. */
04/10/23 3
• a = (int*) malloc(n*sizeof(int));• /* U slucaju da nema
dovoljno memorije malloc vraca NULL */• if (a == NULL)• {• printf("Greska : Nema dovoljno memorije!\n");• return 1;• }
04/10/23 4
• /* Kao obican niz */• for (i = 0; i<n; i++)• {• printf("a[%d]=", i);• scanf("%d", &a[i]);• }• /* Nalazi maksimum */• max = a[0];• for (i = 1; i<n; i++)• if (a[i] > max)• max = a[i];• printf("Najveci element je %d\n", max);• scanf("%d");• /*Alocirana memorija se oslobadja */• free(a);• return 0;• }
04/10/23 5
HEAP
STACK
STATIC DATA
CODE
DINAMIČKA ALOKACIJA MEMORIJE
System space
Program space
Run-time allocate memory
Compile-time allocate memory
04/10/23 6
heap
memory manager
user code
“Potreban je memorijski blok veličine n”malloc(n) ili calloc(x,n)
DINAMIČKA ALOKACIJA MEMORIJE
Ovde je pokazivač bloka
“Nije više potreban memorijski blok”free(p)
Rezervacija i oslobadjanje
•malloc(n) - funkcija dodeljuje memoriju od n bajtova;•calloc(x,n) - dodeljuje memorijski prostor za x komponenti niza od n bajtova.•free(p) - oslobađa prostor.
04/10/23 7
*/#include <stdio.h> /* Neophodno je ukljuciti stdlib.h */
#include <stdlib.h>int main(){int n; int* a;int i, max;printf("Unesi dimenziju niza : ");scanf("%d", &n);
a = (int*) malloc(n*sizeof(int));/* U slucaju da nema dovoljno memorije malloc vraca NULL */
if (a == NULL) {printf("Greska : Nema dovoljno memorije!\n");return 1; }
/* Nadalje a koristimo kao obican niz */
for (i = 0; i<n; i++){printf("a[%d]=", i);scanf("%d", &a[i]); }
/* Nalazimo maksimum */
max = a[0];for (i = 1; i<n; i++)if (a[i] > max) max = a[i];printf("Najveci element je %d\n", max); /* Duzni smo da rucno alociranu memoriju rucno i oslobodimo */
free(a);return 0;}
PROGRAM UNOSI NIZ PROIZVOLJNE DIMENZIJE I NALAZI NAJVECI ELEMENT
04/10/23 8
POKAZIVAČI NA MATRICE
U memoriji su smeštene u jednodimenzionalni niz tako što se prvo smešta prvi red matrice a zatim redom i ostali stoga pokazivač ukazuju na niz pokazivača koji ukazuju na niz(red) podataka.
Matrica je po definiciji dvodimenzionalni niz.
Matrica predstavlja nizjednodimenzionalnihnizova.
04/10/23 9
int i, j, n; /*i, j indeksi matrice; n
veličina*/
double **a;
a = (double **) calloc(n, sizeof(double
*));
for (i = 0; i < n; ++i)
a[i] = (double *) calloc(n,
sizeof(double));
DINAMIČKA ALOKACIJA MATRICE
a[n-1]
0 1 2 3 ... n-1
.... ....
a[1] 0 1 2 3 ... n-1
a a[0] 0 1 2 3 ... n-1
Alociranje memorije za redove matrice(n elementa-double)
Alociranje memorije za n elemenata double pokazivača“
04/10/23 10
FORMIRANJE I BRISANJE MARTICEI polu dinamičko II dinamičko
#include <stdio.h>#include <stdlib.h>main () {int *a[5]; /* Niz pokazivaca na int. */
int m, n, i, j;
/* Broj vrsta i kolona: */printf ("m,n? "); scanf ("%d%d", &m, &n);
/* Stvaranje matrice: */for (i=0; i<m; i++) {a[i] = malloc (n*sizeof(int));for (j=0; j<n; j++) printf ("%4.4d a%d
", *(a[i]+j)=100*i+j,(a[i]+j));putchar ('\n');
/* Unistavanje matrice: */ for (i=0; i<m; i++) free(a[i]); }
#include <stdio.h>#include <stdlib.h>main () {int **a; /* Pokazivac na pokazivac na int.*/int m, n, i, j;
/* Broj vrsta i kolona: */ printf ("m,n? "); scanf ("%d%d", &m, &n); /* Stvaranje matrice: */ a = malloc (m*sizeof(int*)); for (i=0; i<m; i++) { *(a+i) = malloc (n*sizeof(int)); for (j=0; j<n; j++) printf ("%4.4d ", *(*(a+i)+j)=100*i+j); putchar ('\n'); }
/* Unistavanje matrice: */ for (i=0; i<m; i++) free(*(a+i)); free (a); }