1. Fie un masiv unidimensional (vector) alocat dinamic. Sa se realizeze urmatoarele: - sa se declare masivul - sa se citeasca elementele de la tastatura - sa se afseze Exemplu Dati lungimea vectorului:3 p[0]=1 p[1]=2 p[2]=3 p[0]= 1 p[1]= 2 p[2]= 3 Indicatie - se includ bibliotecile: stdio.h conio.h malloc.h - in main: o declaratii: int *p; //declarare pointer int i,n; o se citeste lungimea vectorului o se aloca memorie pentru vector p=(int*)malloc(n*sizeof(int)); o se citesc elementele vectorului for (i=0;i<n;i++) { printf("p[%d]=", i); scanf("%d", (p+i)); //sau scanf("%d", &(*(p+i)) );
o a!sare vector for (i=0;i<n;i++) printf("p[%d]= %d\n", i,*(p+i)); o eliberare memorie alocata free(p);
1 2. Fie un masiv bidimensional (matrice) alocat dinamic. Sa se realizeze urmatoarele: - sa se declare masivul - sa se citeasca elementele de la tastatura - sa se afseze Exemplu Dati nr de linii pentru mat1: 2 Dati nr. de coloane pentru mat1: 3 mat1[0][0]=1 mat1[0][1]=2 mat1[0][2]=3 mat1[1][0]=" mat1[1][1]=# mat1[1][2]=$ %atricea mat1 este: 123 "#$ Indicatie - se includ bibliotecile: stdio.h conio.h malloc.h - in main: o declaratii: int **mat1; //declarare !atrice int !,n,i,"; o se citesc dimensiunile matrice &m si n' o se aloca memorie pentru matricea alocata d(namic mat1=(int**)malloc(m*sizeof(int*)); //atentie# ! de la nu!arul de linii for (i=0;im;i++) *(mat1+i)=(int*)malloc(n*sizeof(int)); //atentie# n de la nr de coloane o se citeste matrice for (i=0;i<!;i++) for ("=0;"<n;"++) { printf ("!at$[%d][%d]=",i,"); scanf ("%d", *(mat1+i)+!);
o a!sare matrice for (i=0;i<!;i++) { for ("=0;"<n;"++) printf("%d", *(*(mat1+i)+!)); printf("%n");
o //de&alocare !e!orie !atrice 2 for (i=0;i<!;i++) //! de la alocarea !e!oriei free(*(!at$+i)); free(!at$);
. Sa se realizeze pro!ramul care calculeaza produsul vectorial a doi vectori alocati dinamic. "ezultatul va f trecut in al treilea vector alocat dinamic. Exemplu Indicatie - se includ bibliotecile necesare &stdio.h conio.h malloc.h' - se declar) pointerii p*r de tipul int &e+p: int ,p,* ,re-' - se cite.te lungimea vectorilor &aten/ie: trebuie sa !e aceea.i lungime pentru a se putea calcula produsul vectorial' - se aloca memorie pentru p*re- &e+p: p = &int,'malloc&n,si-eo0&int''1 ' - se citesc vectorii p si * &e+p: for (i=0;i<n;i++) { printf("p[%d]=", i); scanf("%d", (p+i)); // atentie la !odul introducere al datelor, (p+i) //ec'i(alent cu &(*(p+i))) //scanf("%d", p[i]);) testati si asa si o*ser(ati ce se inta!pla)
- se calculea-a produsul vectorial & *(re&+i)= *(p+i)**(++i); ' - se a!.a-) re-ultatul: for (i=0;i<n;i++) printf("re&[%d]= %d%n", i,*(re&+i)); - se elibereaza memoria alocata celor 3 vectori &e+p: 0ree &p'1' 3 #. Sa se realizeze interclasarea a doi vectori de dimensiuni di$erite. %asivele vor f alocate dinamic in interiorul pro!ramului. Exemplu Dimensiunea primului vector m=2 +[0]=1 +[1]=2 Dimensiunea primului vector n=3 +[0]=3 +[1]=" +[2]=# 1.00 2.00 3.00 ".00 #.00 Indicatii - &iblioteci - 'eclarare variabile (int m(n(p(i()(*+ ,oat -x(-.( -z+ ) - /itirea dimensiunilor m (pentru vectorul x) si n ( pentru vectorul .) - 0locarea memoriei pentru x(.(z - /itirea elementelor pentru x si - Initializare cu zero a contorilor i()(p - 0l!oritm de interclasa ,'ile ((i<!)&& ("<n)) if(-[i]<.["]) &[p++] = -[i++]; else &[p++] = .["++];
,'ile (i<!) &[p++] = -[i++]; ,'ile ("<n) &[p++] = .["++]; - 2!sare vector re-ultat - - 3liberare memorie pentru+(- " 1. Sa se calculeze suma a doua masive bidimensionale alocate dinamic. Exemplu Dati nr de linii pentru mat1 si mat2: 2 Dati nr. de coloane pentru mat1 si mat2: 2 mat1[0][0]=2 mat1[0][1]=2 mat1[1][0]=2 mat1[1][1]=2 mat2[0][0]=3 mat2[0][1]=3 mat2[1][0]=3 mat2[1][1]=3 %atricea mat1 este: 2 2 2 2 %atricea mat2 este: 3 3 3 3 %atricea adunare este: # # # # Indicatii - Se includ bibliotecile: stdio.h malloc.h conio.h - Declarare variabile &int ,,mat1,,mat2 ,,mat4e-2dun1 int mnpi56l1 - Se citesc: nr de linii si coloane &m si n' - Se aloca memorie pentru cele trei matrice - Se citesc de la tastatura elementele pentru mat1 si mat2 - Se a!sea-a matricele mat1 si mat2 - Se calculea-a suma lui mat1 si mat2 for (i=0;i<!;i++) for ("=0;"<n;"++) *(*(mat"ez#d$n+i)+!) = *(*(mat1+i)+!)+*(*(mat%+i)+!); / se a0sea&a !atricea re&ultat (!at1e&2dun) - se de-aloca memoria pentru cele 3 matrice
# 2. Sa se scrie un program pentru determinaea elementului minim din triunghiul de deasupra diagonalelor unei matrice patrate &inclusiv diagonalele'. %atricea este alocata dinamic. Exemplu Dati nr de linii pentru mat1 si mat2:3 Dati nr. de coloane pentru mat1 si mat2:3 mat1[0][0]=1 mat1[0][1]=2 mat1[0][2]=3 mat1[1][0]=" mat1[1][1]=# mat1[1][2]=$ mat1[2][0]=7 mat1[2][1]=8 mat1[2][2]=9 %atricea mat1 este: 1 2 3 " # $ 7 8 9 minimul este: 1 Indicatie - Declarare variabile &int ,,mat1 min1 int mnpi561' - :itire dimensiuni matrice - 2locare memorie pentru matrice - :itire matrice - 2!sare matrice - 2lgoritm cerinta !in=*(*(!at$+0)+0); //initiali&are cu pri!ul ele!ent din !atrice for(i=0;i<=(!/$)/3;i++) for("=i+$;"<=!/$;"++) if((*(*(!at$+i)+"))<!in) !in =*(*(!at$+i)+"); - 2!sare minim indenti!cat - 3liberare memorie matrice 3. ;ie un masiv bidimensional de numere intregi repre-entand valorile de carburant inregistrate de m masini intr-o perioada de n -ile. Sa se scrie un $ program pentru calcularea numarului de aparitii a unei valori citite de la tastatura in masiv. %asivul este alocat dinamic. Exemplu Dati nr de linii pentru mat1 si mat2: 3 Dati nr. de coloane pentru mat1 si mat2: 3 mat1[0][0]=1 mat1[0][1]=2 mat1[0][2]=3 mat1[1][0]=3 mat1[1][1]=" mat1[1][2]=# mat1[2][0]=3 mat1[2][1]=# mat1[2][2]=$ %atricea mat1 este: 1 2 3 3 " # 3 # $ val = 3 <aloarea cautata apare de 3 ori. Indicatie - =iblioteci - Declarari &int ,,mat1 val1 int mni5nr1 ' - :itire dimensiuni matrice - 2locare memorie pentru matrice - :itirea elementelor matricei - 2!sarea matricei - :itirea valorii cautate - 2lgoritm pentru cautarea valorii date si contori-area nr-ului de aparitii in matrice - 2!sarea numarului de aparitii - 3liberarea memoriei pentru matrice