Sei sulla pagina 1di 18

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

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])

{ 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;

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.

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

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

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];

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>

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;

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

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

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

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

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

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

{ 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

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

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

Potrebbero piacerti anche