10

Click here to load reader

Op 11 22

Embed Size (px)

DESCRIPTION

Za razliku od znaka, koji nastaje i mimo čovekove volje, svaki simbol je uvek ljudska tvorevina. Već je rečeno da se univerzum otkriva kroz nepregledno mnoštvo znakova u kojima čovek pronalazi određena značenja. Samo se po sebi razume da čulima, kojima ostvaruje prvi kontakt i upija znak iz okruženja, čovek ne može dosegnuti značenje znaka. U proces poimanja znaka uključuju se, gotovo trenutno posle čulne percepcije, razum i emocije. To je trenutak u procesu preobražaja znaka u simbol.Sliku sveta, u prostorno vremenskom beskraju, čovek sagledava i stiče mnoštvom znakova ili signala. • Znak se, budući da ukazuje na nešto, uvek ispoljava kroz jedinstvo dva svoja strukturna elementa - oznaku i označeno. Najčešće su oznaka i označeno posebni entiteti: • Slovo A je oznaka za glas A • Ime označava ličnost • Suza u oku radost ili tugu Za razliku od znaka, koji nastaje i mimo čovekove volje, svaki simbol je uvek ljudska tvorevina. Već je rečeno da se univerzum otkriva kroz nepregledno mnoštvo znakova u kojima čovek pronalazi određena značenja. Samo se po sebi razume da čulima, kojima ostvaruje prvi kontakt i upija znak iz okruženja, čovek ne može dosegnuti značenje znaka. U proces poimanja znaka uključuju se, gotovo trenutno posle čulne percepcije, razum i emocije. To je trenutak u procesu preobražaja znaka u simbol.

Citation preview

Page 1: Op 11 22

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: */

Page 2: Op 11 22

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. */

Page 3: Op 11 22

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;• }

Page 4: Op 11 22

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;• }

Page 5: Op 11 22

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

Page 6: Op 11 22

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.

Page 7: Op 11 22

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

Page 8: Op 11 22

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.

Page 9: Op 11 22

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“

Page 10: Op 11 22

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); }