exemple algoritmi vectori matrice

22
//calculul elementelor de rang impar dintr-un vector alocat dinamic #include <stdio.h> #include <malloc.h> void main() { float *v,s; int n,i; printf("n=");scanf("%i",&n); v=(float*)malloc(n*sizeof(float)); for(i=0;i<n;i++) { float t; scanf("%f",&t); v[i]=t; } s=0; for(i=0;i<n;i++) if (i%2!=0) s+=v[i]; printf("suma este %f",s); free(v); } //functia pt calcularea sumei elementelor unui masiv tridimensional. #include <stdio.h> #include <malloc.h> int suma(int ***a,int m, int n, int p) { int s=0,i,j,k; for(i=0;i<m;i++) for(j=0;j<n;j++) for(k=0;k<p;k++) s+=a[i][j][k]; return(s); } void main() { int ***a,m,n,p,i,j,k; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); printf("p=");scanf("%i",&p); a=(int***)malloc(m*sizeof(int**)); for(i=0;i<m;i++) a[i]=(int**)malloc(n*sizeof(int*)); 1

Upload: tiberiu-dumitru

Post on 01-Nov-2014

28 views

Category:

Documents


2 download

DESCRIPTION

C++ algoritmi vectori matrice

TRANSCRIPT

Page 1: Exemple Algoritmi Vectori Matrice

//calculul elementelor de rang impar dintr-un vector alocat dinamic#include <stdio.h>#include <malloc.h>void main(){ float *v,s; int n,i; printf("n=");scanf("%i",&n); v=(float*)malloc(n*sizeof(float)); for(i=0;i<n;i++) { float t; scanf("%f",&t); v[i]=t; } s=0; for(i=0;i<n;i++) if (i%2!=0) s+=v[i]; printf("suma este %f",s); free(v);}

//functia pt calcularea sumei elementelor unui masiv tridimensional.#include <stdio.h>#include <malloc.h>int suma(int ***a,int m, int n, int p){ int s=0,i,j,k; for(i=0;i<m;i++) for(j=0;j<n;j++) for(k=0;k<p;k++)

s+=a[i][j][k]; return(s);}void main(){ int ***a,m,n,p,i,j,k; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); printf("p=");scanf("%i",&p); a=(int***)malloc(m*sizeof(int**)); for(i=0;i<m;i++) a[i]=(int**)malloc(n*sizeof(int*)); for(i=0;i<m;i++) for(j=0;j<n;j++) a[i][j]=(int*)malloc(p*sizeof(int)); for(i=0;i<m;i++) for(j=0;j<n;j++) for(k=0;k<p;k++) {int t;

scanf("%i",&t);a[i][j][k]=t;

}

1

Page 2: Exemple Algoritmi Vectori Matrice

printf("suma elementelor este %i",suma(a,m,n,p)); for(i=0;i<m;i++) for(j=0;j<n;j++) free(a[i][j]); for(i=0;i<m;i++) free(a[i]); free(a);}

//functia pt gasirea elem minim si a primei poz d aparitie a acestuia;fct returneaza prin nume valoarea minima din vector.

#include <stdio.h>float minim_pozitie(float v[],int n,int *poz){ float min; min=v[0]; *poz=0; int i; for(i=0;i<n;i++) if(min>v[i]) { min=v[i];

*poz=i;}

return(min);}void main(){float v[10]; int n,pozitie,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } printf("minimul este: %6.2f",minim_pozitie(v,n,&pozitie));}

//calculati elem max din vect si pozitiile tuturor aparitiilor.

#include <stdio.h>void maxim(float v[10],int n, float *max, int poz[10], int *nr_ap){ int i; *max=v[0]; for(i=1;i<n;i++) if (*max<v[i]) {*nr_ap=1;

poz[0]=i;*max=v[i];

} else if (*max==v[i])

2

Page 3: Exemple Algoritmi Vectori Matrice

{ poz[*nr_ap]=i;(*nr_ap)++;

}

}void main(){float v[10],el_max; int n,nr_aparitii,pozitii[10],i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } maxim(v,n,&el_max,pozitii,&nr_aparitii); printf("elem maxim este %6.2f si pozitiile de apatitie sunt ",el_max); for(i=0;i<nr_aparitii;i++) printf(" %i ",pozitii[i]);}

//functie de inserarea unui 0 intre fiecare 2 elem ale unui vector.#include <stdio.h>void inserare(float v[20],int *n){ int i,j,k; k=*n; for(i=0;i<k-1;i++) { for(j=*n;j>2*i+1;j--) v[j]=v[j-1]; v[2*i+1]=0; (*n)++; }}void main(){ float v[20]; int i,n; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } inserare(v,&n); printf("noul vector este: "); for(i=0;i<n;i++) printf("%6.3f",v[i]);}

//functie pt creara unui vector din elem unui vector dat,inserand cate un 0 intre fiecare 2 elem ale acestuia.#include <stdio.h>void inserare(float v[20], int n,float v1[40], int *n1){ int i; *n1=0;

3

Page 4: Exemple Algoritmi Vectori Matrice

for(i=0;i<n-1;i++) { v1[2*i]=v[i]; v1[2*i+1]=0; (*n1)=(*n1)+2; } v1[*n1]=v[n-1]; (*n1)++;}void main(){float v[20],v1[30]; int n,i,n1; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } inserare(v,n,v1,&n1); printf("noul vector este: "); for(i=0;i<n1;i++) printf("%6.2f",v1[i]);}

//sa se elimine dublurile dintr un vector;fct returneaza prin numele ei nr de elem ramase in vector dupa eliminare.#include <stdio.h>int eliminare(float v[10],int *n){ int i,j,k; for(i=0;i<*n-1;i++) for(j=i+1;j<*n;j++) if (v[i]==v[j])

{ for (k=j;k<*n-1;k++) v[k]=v[k+1]; (*n)--; j--; }

return (*n);}void main(){ float v[10]; int n,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } printf("dupa eliminare au mai ramas %i elemente",eliminare(v,&n));}

//fct pt calculul amplitudinii elem unui vector;fct intoarce prin numele sau amplitudinea elem.

4

Page 5: Exemple Algoritmi Vectori Matrice

#include <stdio.h>float amplitudine(float v[10],int n){ float min,max; int i; min=v[0]; max=v[0]; for(i=0;i<n;i++) if (v[i]<min) min=v[i]; else if (v[i]>max) max=v[i]; return(max-min);}void main(){float v[10]; int n,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } printf("amplitudinea este %6.2f",amplitudine(v,n));}

//sa se sorteze un vector flosind metoda selectiei;fct nu intoarce nici un rez prin numele fct.#include <stdio.h>void selectie(float v[10],int n){ float aux; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (v[i]>v[j])

{aux=v[i]; v[i]=v[j]; v[j]=aux; }

}void main(){float v[10]; int n,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } selectie(v,n); printf("vectorul sortat crescator este:"); for(i=0;i<n;i++) printf("%6.2f",v[i]);}

5

Page 6: Exemple Algoritmi Vectori Matrice

//sa se sorteze un vector flosind metoda bulelor;fct nu intoarce nici un rez prin numele fct.#include <stdio.h>void bule(float v[10],int n){ float aux; int i,p; p=1; while(p) { p=0; for(i=0;i<n-1;i++)

if (v[i]>v[i+1]){aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; p=1; }

}}void main(){float v[10]; int n,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } bule(v,n); printf("vectorul sortat crescator este:"); for(i=0;i<n;i++) printf("%6.2f",v[i]);}

//fct pt interclasarea a 2 vectori ordonati crescator;nu se intoarce nici un rez prin numele fct.#include <stdio.h>void interclasare(float x[10],int n,float y[10],int m,float z[10],int *p){ int i=0,j=0; *p=0; while ((i<n)&&(j<m)) if (x[i]<y[j]) z[(*p)++]=x[i++]; else z[(*p)++]=y[j++]; if (i==n) for(i=j;i<m;i++) z[(*p)++]=y[i]; else for(j=i;j<n;j++) z[(*p)++]=x[j];}void main(){ float x[10],y[10],z[10]; int n,m,i,p; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) { printf("x[%i]=",i); scanf("%f",&x[i]); }

6

Page 7: Exemple Algoritmi Vectori Matrice

printf("m=");scanf("%i",&m); for(i=0;i<m;i++) {printf("y[%i]=",i); scanf("%f",&y[i]); } interclasare(x,n,y,m,z,&p); for(i=0;i<p;i++) printf("%6.2f",z[i]);}

//fct pt calculul produsului scalar dintre 2 vectori;fct intoarce prin nume produsul scalar.#include <stdio.h>float produs_scalar(float x[10],int m,float y[10],int n,int *er){ float produs; int i; if (m!=n) *er=1; else { *er=0;

produs=0; for(i=0;i<m;i++) produs+=x[i]*y[i]; }

return produs;}void main(){float x[10],y[10],pr; int m,n,i,er; printf("m=");scanf("%i",&m); for(i=0;i<m;i++) {printf("x[%i]=",i); scanf("%f",&x[i]); } printf("n=");scanf("%i",&n); for(i=0;i<n;i++) {printf("y[%i]=",i); scanf("%f",&y[i]); } pr=produs_scalar(x,m,y,n,&er); if (er==1) printf("vectorii nu au lungimi egale"); else printf("produsul scalar este %6.2f",pr);}

//fct pt determinarea valorii unui polinom intr un punct dat;prin numele fct se intoarce valoarea calculata.#include <stdio.h>float valoare_polinom(int n,float p[10],float x){ int i; float k; k=p[n]; for(i=n;i>0;i--) k=k*x+p[i-1];

7

Page 8: Exemple Algoritmi Vectori Matrice

return k;}void main(){float p[10],x; int n,i; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) {printf("p[%i]=",i); scanf("%f",&p[i]); } printf("x=");scanf("%f",&x); printf("valoarea polinomului in punctul %6.2f este %6.2f",x,valoare_polinom(n,p,x));}

//fct pt gasirea elem minime d p diagonalele principala respectiv secundara ale unei matrice; prin numele fct se intoarce 1 dak matricea nu a fost patrata sau 0 in caz contrar.#include <stdio.h>.int minim(float a[10][20],int m,int n,float *min,float *min1){ int i,er; if (m!=n) er=1; else { *min=a[0][0]; *min1=a[0][m-1]; for(i=0;i<m;i++)

{ if (a[i][i]<*min) *min=a[i][i]; if (a[i][m-i-1]<*min1) *min1=a[i][m-i-1]; }

er=0; } return er;}void main(){ float a[10][20],min_dp,min_ds; int m,n,i,j,eroare; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("a[%i,%i]=",i,j);

scanf("%f",&a[i][j]); } eroare=minim(a,m,n,&min_dp,&min_ds); if (eroare==1) printf("matricea nu e patratica"); else printf("minimul de pe diagonala principala este %6.2f si cel de pe diagonala secundara este %6.2f",min_dp,min_ds);}

//fct pt calculul maximului din triunghiul de deasupra diagonalelor unei matrice patrate, exclusiv diagonalele;fct intoarce prin numele ei valoarea ceruta.#include<stdio.h>

8

Page 9: Exemple Algoritmi Vectori Matrice

float maxim(float a [10][20],int n){ int i,j; float max; max=a[0][1]; for(i=0;i<(n-1)/2;i++) for(j=i+1;j<n-i-1;j++)

if(a[i][j]>max) max=a[i][j]; return max;}void main(){ float a[10][20]; int n,i,j; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("a[%i,%i]=",i,j);

scanf("%f",&a[i][j]); } printf("elementul maxim din triunghiul de deasupra diagonalelor este %6.2f",maxim(a,n));}

//cate elem pozitive sunt in triunghiul de sub diagonalele unei matrice patratice exclusiv diagonalele.#include <stdio.h>int nr_pozitive(float a[10][20],int n){ int i,j,nr_poz; nr_poz=0; for(i=n/2+1;i<n;i++) for(j=n-i;j<i;j++) if (a[i][j]>0) nr_poz+=1; return nr_poz;}void main(){ float a[10][20]; int n,i,j; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("a[%i,%i]=",i,j);

scanf("%f",&a[i][j]);}

printf("in triunghiul de sub diagonale sunt %i nr pozitive",nr_pozitive(a,n));}

//elem minim din triunghiul din dreapta diagonalelor unei matrice patratice exclusiv diagonalele.#include <stdio.h>float minim(float a[10][20],int n){ int i,j; float min;

9

Page 10: Exemple Algoritmi Vectori Matrice

min=a[1][n-1]; for(i=n/2+1;i<n;i++) for(j=n-i+1;j<i;j++) if (a[j][i]<min) min=a[j][i]; return min;}void main(){ float a[10][20]; int n,i,j; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("a[%i,%i]=",i,j);

scanf("%f",&a[i][j]);}

printf("minimul din triunghiul din dreapta diagonalelor este %6.2f ",minim(a,n));}

//cate elem prime sunt in triunghiul din stanga diagonalelor unei matrice patratice exclusiv diagonalele.#include <stdio.h>#include <math.h>int prim(int x){ int d; x=abs(x); if ((x==0)||(x==1)) return 0; int b=pow(x,0.5); for(d=2;d<=b;d++) if (x%d==0) return 0; return 1;}int nr_prime(float a[10][20],int n){ int i,j,nr_pr; nr_pr=0; for(i=0;i<(n-1)/2;i++) for(j=i+1;j<n-i-1;j++) if (prim(a[j][i])==1) nr_pr+=1; return nr_pr;}void main(){ float a[10][20]; int n,i,j; printf("n=");scanf("%i",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("a[%i,%i]=",i,j);

scanf("%f",&a[i][j]);}

printf("in triunghiul din stanga diagonalelor sunt %i nr prime",nr_prime(a,n));}

10

Page 11: Exemple Algoritmi Vectori Matrice

//fct pt determinarea liniilor unei matrice care au elementele in ordine strict crescatoare.#include <stdio.h>void linii_crescator(float a[10][20],int m,int n,int l[10], int *p){ int i,j,k; *p=0; for(i=0;i<m;i++) { k=1; for(j=0;j<n-1;j++)

if (a[i][j]>=a[i][j+1]) k=0; if (k) l[(*p)++]=i; }}void main(){float a[10][20]; int m,n,i,j,p,l[10]; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); for(i=0;i<m;i++) for(j=0;j<n;j++) {printf("a[%i,%i]=",i,j); scanf("%f",&a[i][j]); } linii_crescator(a,m,n,l,&p); if (p==0) printf("nu exista linii cu elemente strict crescatoare"); else for(i=0;i<p;i++) printf("%i ",l[i]);}

//sortare crescator a elem d p diagonala principala prin interschimbari d linii si coloane.#include <stdio.h>#include <malloc.h>void ordonare(float **a,int n){ int i,j,k,l1,l2; float aux; do {k=0; for(i=0;i<n-1;i++) if (a[i][i]>a[i+1][i+1]) { l1=i;

l2=i+1; k=1; for(j=0;j<n;j++) { aux=a[l1][j]; a[l1][j]=a[l2][j]; a[l2][j]=aux; } for(j=0;j<n;j++) { aux=a[j][l1]; a[j][l1]=a[j][l2];

11

Page 12: Exemple Algoritmi Vectori Matrice

a[j][l2]=aux; }

} } while (k);}void main(){float **a; int n,i,j; printf("n=");scanf("%i",&n); a=(float**)malloc(n*sizeof(float*)); for(i=0;i<n;i++) a[i]=(float*)malloc(n*sizeof(float)); for(i=0;i<n;i++) for(j=0;j<n;j++) { float t; printf("a[%i,%i]=",i,j); scanf("%f",&t); a[i][j]=t; } ordonare(a,n); printf("matricea cu diagonala principala ordonata crescator este \n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%6.2f",a[i][j]); printf("\n"); } for(i=0;i<n;i++) free(a[i]); free(a);}

//sa s verifice dak o matrice este tringhiulara superior.#include <stdio.h>#include <malloc.h>int verificare(float **a,int n){ int i,j,ts; ts=0; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (a[i][j]!=0) ts=1; return ts;}void main(){float **a; int n,i,t_sup,j; printf("n=");scanf("%i",&n); a=(float**)malloc(n*sizeof(float*)); for(i=0;i<n;i++) a[i]=(float*)malloc(n*sizeof(float)); for(i=0;i<n;i++) for(j=0;j<n;j++) { float t;

12

Page 13: Exemple Algoritmi Vectori Matrice

printf("a[%i,%i]=",i,j); scanf("%f",&t); a[i][j]=t;}

t_sup=verificare(a,n); if (t_sup==1) printf("matricea nu e triunghiulara superior"); else printf("matricea e triunghiulara superior"); for(i=0;i<n;i++) free(a[i]); free(a);}

//sa se determine maximul d p fiecare linie a unei matrice.#include <stdio.h>#include <malloc.h>void max_linie(float **a,int m, int n,float max[]){ int i,j; for(i=0;i<m;i++) {max[i]=a[i][0]; for(j=0;j<n;j++)

if (a[i][j]>max[i]) max[i]=a[i][j]; }}void main(){ float **a,max[20]; int m,n,i,j; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); 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++) { float t;

printf("a[%i,%i]=",i,j);scanf("%f",&t);a[i][j]=t;

} max_linie(a,m,n,max); for(i=0;i<m;i++) printf("%6.2f",max[i]); for(i=0;i<m;i++) free(a[i]); free(a);}

//determinarea produsului vectorial dintre fiecare 2 linii ale unei matrice dreptunghiulare.#include <stdio.h>#include <malloc.h>void produs_vectorial(float **a,int m,int n,float m_vect[][20],int *k){ int i,j,p; *k=0; for(i=0;i<m-1;i++)

13

Page 14: Exemple Algoritmi Vectori Matrice

for(j=i+1;j<m;j++) { for(p=0;p<n;p++) m_vect[*k][p]=a[i][p]*a[j][p];

(*k)++; }}void main(){float **a,m_vect[20][20]; int m,n,i,j,k; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); 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++) { float t; printf("a[%i,%i]=",i,j); scanf("%f",&t); a[i][j]=t; } produs_vectorial(a,m,n,m_vect,&k); for(i=0;i<k;i++) { for(j=0;j<n;j++) printf("%6.2f",m_vect[i][j]); printf("\n"); }}

//pt fiecare linie a unei matrice sa se calculeze produsul dintre cel mai mare si cel mai mic element.#include<stdio.h>#include<malloc.h>void produs(float **a,int m,int n,float pr[]){ float min,max; int i,j; for(i=0;i<m;i++) {min=a[i][0]; max=a[i][0]; for(j=0;j<n;j++) { if (a[i][j]<min) min=a[i][j];

if (a[i][j]>max) max=a[i][j];}

pr[i]=min*max; }}void main(){float **a,pr[20]; int m,n,i,j; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); a=(float**)malloc(m*sizeof(float*));

14

Page 15: Exemple Algoritmi Vectori Matrice

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++) { float t; printf("a[%i,%i]=",i,j); scanf("%f",&t); a[i][j]=t; } produs(a,m,n,pr); for(i=0;i<m;i++) printf("%8.2f",pr[i]);}

//sa se determine coloanele care au elementele in progresie aritmetica.#include <stdio.h>#include <malloc.h>void coloane(float **a,int m,int n,int col[],int *k){ int i,j,p,verific; float ratie; *k=0; verific=0; for(j=0;j<n;j++) { ratie=a[1][j]-a[0][j]; for(i=1;i<m;i++)

if (a[i][j]-a[i-1][j]!=ratie) verific=1; if (verific==0) col[(*k)++]=j; }}void main(){float **a; int m,n,i,j,col[20],k; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); 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++) { float t; printf("a[%i,%i]=",i,j); scanf("%f",&t); a[i][j]=t; } coloane(a,m,n,col,&k); for(i=0;i<k;i++) printf("%i",col[i]);}

//transpusa unei matrice;masivele sunt alocate dinamic.#include <stdio.h>#include <malloc.h>void main()

15

Page 16: Exemple Algoritmi Vectori Matrice

{ float **a,**b; int n,m,i,j; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); 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++)

{ float t; scanf("%f",&t); a[i][j]=t; }

b=(float**) malloc(n*sizeof(float*)); for (i=0;i<m;i++) b[i]=(float*) malloc (m*sizeof(float)); for(i=0;i<n;i++) for(j=0;j<m;j++) b[i][j]=a[j][i]; for(i=0;i<n;i++) { for(j=0;j<m;j++)

printf("%6.2f",b[i][j]); printf("\n"); } for (i=0;i<m;i++) free(a[i]); free(a); for (i=0;i<n;i++) free(b[i]); free(b);}

//pozitia de aparitie a unui elem intr un vect mem dinamic.#include <stdio.h>#include <malloc.h>void main(){ float *v,el; int i,n; printf("n=");scanf("%i",&n); v=(float*) malloc (n*sizeof(float)); for(i=0;i<n;i++) { printf("v[%i]=",i); scanf("%f",&v[i]); } printf("elementul este:");scanf("%f",&el); int gasit=0; for(i=0;(i<n)&&(gasit==0);i++) if (v[i]==el) gasit=1; if (gasit) printf("%i",i-1); else printf("nu se gaseste in vector"); free(v);}

16

Page 17: Exemple Algoritmi Vectori Matrice

//calc matricea produs dintre 2 matrice alovcate dinamic.#include <stdio.h>#include <malloc.h>float **inmultire(float **a,float **b,int m,int n,int p){float **c; int i,j,k; c=(float**) malloc(m*sizeof(float*)); for (i=0;i<m;i++) c[i]=(float*)malloc(p*sizeof(float)); for (i=0;i<m;i++) for(j=0;j<p;j++) { c[i][j]=0; for(k=0;k<n;k++)

c[i][j]+=a[i][k]*b[k][j]; } return c;}void main(){ float **a,**b,**c; int m,n,i,j,p; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); printf("p=");scanf("%i",&p); a=(float**)malloc(m*sizeof(float*)); for(i=0;i<m;i++) a[i]=(float*)malloc(n*sizeof(float)); float t; for(i=0;i<m;i++) for(j=0;j<n;j++) { scanf("%f",&t);

a[i][j]=t; } b=(float**)malloc(n*sizeof(float*)); for (i=0;i<n;i++) b[i]=(float*)malloc(p*sizeof(float)); for(i=0;i<n;i++) for(j=0;j<p;j++) { scanf("%f",&t); b[i][j]=t; } c=inmultire(a,b,m,n,p); for(i=0;i<m;i++) { for(j=0;j<p;j++) printf("%6.3f ",c[i][j]); printf("\n"); } for(i=0;i<m;i++) free(a[i]); free(a); for(i=0;i<n;i++) free(b[i]);

17

Page 18: Exemple Algoritmi Vectori Matrice

free(b); for(i=0;i<m;i++) free(c[i]); free(c);}

//calculul tuturor poz de aparitie ale unui elem dat intr o matrice alocata dinamic.#include <stdio.h>#include <malloc.h>int **aparitii(float a[10][20],int m,int n,float k, int *ptdim){ int i,j; int **mat; mat=(int**)malloc(2*sizeof(int*)); for (i=0;i<2;i++) mat[i]=(int*)malloc((m*n)*sizeof(int)); *ptdim=0; for(i=0;i<m;i++) for(j=0;j<m;j++) if(a[i][j]==k)

{ mat[0][*ptdim]=i; mat[1][*ptdim]=j; (*ptdim)++; }

return mat;}void main(){ float a[10][20],k; int m,n,i,j; printf("m=");scanf("%i",&m); printf("n=");scanf("%i",&n); printf("k=");scanf("%f",&k); for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("a[%i][%i]=",i,j);

scanf("%f",&a[i][j]); } int **x,d; x=aparitii(a,m,n,k,&d); if (d==0) printf("elementul nu s gaseste"); else for(j=0;j<d;j++)

printf("(%i,%i)",x[0][j],x[1][j]); for(i=0;i<2;i++) free(x[i]); free(x);}

18