Sunteți pe pagina 1din 7

Seminar 10

- masive alocate dinamic -


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



7

S-ar putea să vă placă și