You are on page 1of 6

int *a= calloc(n, sizeof(int)); // Aloca memorie pentru n numere intregi i

iniializeaz zona cu zero

int main() {
int n,i;
int *a; // Adresa vector alocat dinamic

printf("n = ");
scanf("%d", &n); // Dimensiune vector

a = calloc(n, sizeof(int)); // Alternativ: a = malloc(n * sizeof(int));


printf("Componente vector: \n");

for (i = 0; i < n; i++) {


scanf("%d", &a[i]); // Sau scanf (%d, a+i);
}
for (i = 0; i < n; i++) { // Afisare vector
printf("%d ",a[i]);
}

free(a); // Nu uitam sa eliberam memoria

return 0;
}

Matrice alocate dinamic

int main () {
int **a;
int i, j, nl, nc;

printf("nr. linii = ");


scanf(%d, &nl);

printf("nr. coloane = ");


scanf(%d, &nc);

a = malloc(nl * sizeof(int *)); // Alocare pentru vector de pointeri


for (i = 0; i < n; i++) {
a[i] = calloc(nc, sizeof(int)); // Alocare pentru o linie si initializare
la zero
}

// Completare diagonala matrice unitate


for (i = 0; i < nl; i++) {
a[i][i] = 1; // a[i][j]=0 pentru i != j
}

// Afisare matrice
printmat(a, nl, nc);

for (i = 0; i < nl; i++)


free(a[i]);
free(a); // Nu uitam sa eliberam!

return 0;
}

'Exemplul 2: Vector alocat dinamic (cu dimensiune cunoscut la execuie)

#include <stdio.h>
#include <stdlib.h>

int main() {
int n, i;
int *a; // Adresa vector

printf("n=");
scanf("%d", &n); // Dimensiune vector

a = malloc(n * sizeof(int));
printf("componente vector: \n");

for (i = 0; i < n; i++) { // Citire vector


scanf("%d", &a[i]);
}
for (i = 0; i < n; i++) { // Afisare vector
printf("%d", a[i]);
}

free(a);

return 0;
}

Exemplul 3: Vector realocat dinamic (cu dimensiune necunoscut)

#include <stdio.h>
#include <stdlib.h>

#define INCR 4

int main() {
int n, i, m;
float x, *v;

n = INCR;
i = 0;

v = (malloc(n * sizeof(float));

while (scanf("%f", &x) != EOF) {


if (i == n) {
n = n + INCR;
v = (realloc(v, n * sizeof(float));
}

v[i++] = x;
}

m = i;

for (i = 0; i < m; i++) {


printf("%.2f ", v[i]);
}

free(v);

return 0;
}

Exemplul 4: Matrice alocat dinamic (cu dimensiuni cunoscute la execuie)

#include <stdio.h>
#include <stdlib.h>

int main() {
int n, i, j;
int **mat; // Adresa matrice

// Citire dimensiuni matrice


printf("n = ");
scanf("%d", &n);

// Alocare memorie ptr matrice


mat = malloc(n * sizeof(int *));

for (i = 0; i < n; i++) {


mat[i] = calloc(n, sizeof(int));
}

// Completare matrice
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
mat[i][j] = n * i + j + 1;
}
}

// Afisare matrice
for (i = 0; i < n; i++) {
for (j = 0;j < n; j++) {
printf("%6d", mat[i][j]);
}

printf("\n");
}

return 0;

S se scrie programul care determin minimul elementelor de pe fiecare linie dintr-o


matrice. Masivele se vor aloca dinamic.

#include<stdio.h>

#include<malloc.h>

void main()

{ float **a, *min; int m,n,i,j;

printf ("m="); scanf("%d", &m);

printf ("n="); scanf("%d", &n);

//alocare matrice

a=(float**)malloc(m*sizeof(float*));

for(i=0;i<m;i++)

a[i]=(float*)malloc (n*sizeof(float));

for(i=0;i<m;i++)

for(j=0;j<n;j++)

{printf("a[%d][%d]=",i,j);

scanf("%f", &a[i][j]);//scanf("%f", *(a+i)+j);

//alocare vector

min=(float*)malloc(m*sizeof(float));

for(i=0;i<m;i++)

{ min[i]=a[i][0];

for(j=1;j<n;j++)

if(a[i][j]<min[i])min[i]=a[i][j];}

for(i=0;i<m;i++) printf("%4.2f,", min[i]);


//eliberare memorie

free(min);

for(i=0;i<m;i++) free(a[i]);

free (a);

__________________________________________________________________________

S se scrie o funcie care calculeaz cel mai mare divizor comun dintre dou
numere ntregi nenule (utiliznd algoritmul lui Euclid) i un apelator pentru
testare.

#include <stdio.h>

/*definirea functiei cmmdc*/

int cmmdc(int a, int b)

{ int r,d=a,i=b;

do {r=d%i;

d=i; i=r;}

while(r!=0);

return d;}

void main()

{ int n1,n2;

printf("Numerele pentru care se va calcula cmmdc:");

scanf("%d%d",&n1,&n2);

if(n1&&n2) printf("\ncmmdc=%d",cmmdc(n1,n2));

else printf("Numerele nu sunt nenule!"); }

You might also like