Sunteți pe pagina 1din 6

1) Să se scrie o funcţie care calculează cel mai mare divizor comun dintre două numere întregi

nenule, utilizînd algoritmul lui Euclid şi un apelant 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 i;}

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 sînt nenule!");}

2) Să se calculeze produsul a două matrice.

void produs(float a[][10],float b[][20], float c[][20],int m,

int n,int p)

{ int i,j,k;

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

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

for(c[i][j]=0,k=0;k<n;k++)c[i][j]+=a[i][k]*b[k][j];}
3) Să se calculeze produsul dintre o matrice şi un vector.

#include<malloc.h>

……………………

float * prod(float a[][30], float v[],int m, int n)

{ float *p;int i,j;

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

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

for(p[i]=0,j=0;j<n;j++) p[i]+=a[i][j]*v[j];

return p;}

Apelul se realizează astfel:

float a[20][30], b[30], *c;

int m,n;

…………………………

c=prod(a,b,m,n);

4)Să se sorteze un şir cu elemente de un tip neprecizat, dar pe care se poate defini o relaţie de
ordine (de exemplu numeric, şir de caractere, caracter).
#include <mem.h>
#include<malloc.h>
int compara(const void *x, const void *y);
void sort(void *v, int n, int dim,
int (*compara)(const void *x,const void *y))
{ int i,j;
void *aux;
aux=malloc(dim);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if((*compara)((char*)v+dim*i,(char*)v+dim*j))
{memmove(aux,(char*)v+dim*i,dim);
memmove((char*)v+dim*i,(char*)v+dim*j,dim);
memmove((char*)v+dim*j,aux,dim);
}
free(aux);}
Exemplu de apel pentru un vector de cuvinte:
#include <stdio.h>
#include <string.h>
#include<conio.h>
#include "exp_tip.cpp"
int compara(const void *a, const void *b)
{ if(strcmp((char *)a, (char *)b)>0)return 1;
else return 0;}
void main()
{ typedef char cuvant[10];
cuvant vect[20];
int n;
clrscr();
printf("Dimensiunea vectorului de cuvinte:");
scanf("%d",&n);
printf("\nCuvintele:");
for(int i=0;i<n;i++)scanf("%s",&vect[i]);
sort(vect,n,10,compara);
printf("\nCuvintele sortate:");
for(i=0;i<n;i++)printf("\n%s",vect[i]);
getch();}

5)Să se calculeze cel mai mare divizor comun al unui număr oarecare de numere întregi.
#include<stdio.h>
#include<conio.h>
#include<stdarg.h>
int cmmdc_var(int,...);
int cmmdc(int, int);
void main()
{ int x,y,z,w;
clrscr();
scanf("%d%d%d%d",&x,&y,&z,&w);
printf("\nCmmdc al primelor 3 numere:%d\n",cmmdc_var(3,x,y,z));
printf("\nCmmdc al tuturor numerelor:%d\n",cmmdc_var(4,x,y,z,w));}
//cel mai mare divizor comun a doua numere
int cmmdc(int x,int y)
{ int d=x,i=y,r;
do{r=d%i;
d=i;i=r;}
while(r);
return d;}
//cel mai mare divizor comun a nr numere
int cmmdc_var(int nr,...)
{ va_list ptlist;
/*initializarea lui ptlist cu adresa de inceput a listei de
parametri*/
va_start(ptlist,nr);
//extragerea primului parametru, de tip int
x=va_arg(ptlist,int);
for(int i=1;i<nr;i++)
{
//extragerea urmatorului element din lista de parametri
y=va_arg(ptlist,int);
z=cmmdc(x,y);x=z;
}
va_end(ptlist);
return x;}

6) Să se interclaseze un număr oarecare de vectori.


#include<stdarg.h>
#include<stdio.h>
#include<conio.h>
void inter(double *,int,double *,int,double *);
void inter_var(double *,int nr,...);
void main()
{ int n1,n2,n3,n4; double x1[10],x2[10],x3[10],x4[10],z[50];
clrscr();
scanf("%d%d%d%d",&n1,&n2,&n3,&n4);
for(int i=0;i<n1;i++)scanf("%lf",&x1[i]);
for(i=0;i<n2;i++)scanf("%lf",&x2[i]);
for(i=0;i<n3;i++)scanf("%lf",&x3[i]);
for(i=0;i<n4;i++)scanf("%lf",&x4[i]);
inter_var(z,4,x1,n1,x2,n2);
printf("\nRezultatul interclasarii primilor 2 vectori\n");
for(i=0;i<n1+n2;i++)
printf("%lf ",z[i]);
inter_var(z,8,x1,n1,x2,n2,x3,n3,x4,n4);
printf("\nRezultatul interclasarii celor 4 vectori\n");
for(i=0;i<n1+n2+n3+n4;i++)
printf("%lf ",z[i]);
}
void inter(double *x, int n1, double *y, int n2, double *z)
{ int i,j,k;
for(i=0,j=0,k=0;(i<n1)&&(j<n2);k++)
if(x[i]<y[j])z[k]=x[i++];
else z[k]=y[j++];
if(i<n1)for(;i<n1;z[k++]=x[i++]);
else
for(;j<n2;z[k++]=y[j++]);
}
void inter_var(double *z,int nr,...)
{ va_list ptlist;
double *x,*y,x1[100];
int n1,n2;
/*initializarea lui ptlist cu adresa de inceput a listei de
parametri*/
va_start(ptlist,nr);
//extragerea primului vector
x=va_arg(ptlist,double *);
//extragerea dimensiunii lui
n1=va_arg(ptlist,int);
for(int j=0;j<n1;j++)x1[j]=x[j];
for(int i=1;i<(int)(nr/2);i++)
{//extragerea urmatorului vector
y=va_arg(ptlist,double *);
//extragerea numarului sau de elemente
n2=va_arg(ptlist,int);
inter(x1,n1,y,n2,z);
for(j=0;j<n1+n2;j++)x1[j]=z[j];n1+=n2;}
va_end(ptlist);
}

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