Sunteți pe pagina 1din 5

Lucru individual problem realizate 40

1. Scrieţi un program cu pointeri care calculează s1,s2,s3 pentru numerele reale x i , y i =, i=1,2,...,n.:
s1 = ( y 1 + y 2 + ... + y n ),
s 2 = ( y 1 * x 1 + y 2 * x 2 + . . .+ y n * x n ) / s 1 ,
s 3 = ( y 1 * x 1 * x 1 + y 2 * x 2 * x 2 + . . .+ y n * x n * x n ) / s 1 ,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main()
{
int n;
int *vector_y, *vector_x;

printf("Introduceti lungimea vectorului "); scanf("%d",&n);

srand(time(NULL));

vector_x=(int*)malloc(n*sizeof(int));
vector_y=(int*)malloc(n*sizeof(int));

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


{
vector_x[i]=rand()%100;
vector_y[i]=rand()%100;
}
long long int s1,s2,s3;

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


{
s1+=vector_y[i];
}

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


{
s2+=vector_x[i]*vector_y[i];
}

s2=s2/s1;

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


{
s3+=pow(vector_x[i],2)*vector_y[i];
}

s3=s3/s1;

printf("s1=%llu s2=%llu s3=%llu",s1,s2,s3);


free(vector_x);
free(vector_y);

return 0;
}

2. Scrieţi un program cu pointeri care calculează numarul maxim de divizori ai unui numar natural
de n cifre ( n<=5 sau n<=100). Se va completa programul cu afisarea numarului cu cel mai
multi divizori.
#include <stdio.h>
#include <stdlib.h>

int main()
{
int n,k;

printf("Introduceti nr "); scanf("%d",&n);

for (int i=2 ; i<=n ; i++)


{
if (n%i==0)
{
k++;
}
}

printf("Numarul maxim de divizori este %d",k);

return 0;
}

3. .Scrieţi un program cu pointeri cu pointeri care generează un tablou bidimensional a căror


valori ale elementelor sunt cuprinse între 1 şi 100. Să se determine frecvenţa cu care a fost
generat fiecare element al tablou bidimensionalului creat.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int **matrix;
int n,k;
printf("Introduceti marimea tabloului bideminsional "); scanf("%d",&n);

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

int vector[n*n];
int frecv[n*n];

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


{
matrix[i]=(int*)malloc(n*sizeof(int));
}

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


{
for (int j=0 ; j<n ;j++)
{
matrix[i][j]=rand()%100;
vector[k]=matrix[i][j];
frecv[k]=0;
k++;
}
}

for (int z=0 ; z<k ; z++)


{
for(int i=0 ; i<n ; i++)
{
for (int j=0 ; j<n ; j++)
{
if(matrix[i][j]==frecv[z])
{
frecv[z]+=1;
}
}
}

for (int i=0 ; i<k ; i++)


{
printf("Pentru nr %d frecventa == %d\n",vector[i],frecv[i]);
}
for (int i=0 ; i<n ; i++)
{
free(matrix[i]);
}

free(matrix);

return 0;
}

4. Scrieţi un program cu pointeri care tipăreşte în ordine crescătoare toate numerele de trei
cifre, care nu se repetă.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int a;

void count (int x, int* elements);

int main()
{
int *vector, *elements;
int n,z;

printf("Introduceti marimea tabloului "); scanf("%d",&n);

srand(time(NULL));

vector=(int*)malloc(n*sizeof(int));
elements=(int*)malloc(n*sizeof(int));

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


{
vector[i]=rand()%1000;
z=vector[i];
count(z,elements);
}

for (int i = 0; i < a; i++)


{
for (int j = 0; j < a; j++)
{
if (elements[j] > elements[i])
{
int tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
}
}

for (int i=0 ; i<a ; i++)


{
printf("%d\n",elements[i]);
}

free(vector);
free(elements);

return 0;
}

void count (int x, int* elements)


{
int k=0,o;
o=x;

while(x!=0)
{
x/=10;
k++;
}

if (k==3)
{
elements[a]=o;
a++;
}
}

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