C: Matrice unidimensionale: vectori - aplicatii rezolvate


1) Declarare a unui şir (tablou sau matrice unidimensionată) cu iniţializare de valori (rezolvare...)

2) Memorarea informaţiei într-un tablou unidimensional prin citire (rezolvare...)

3) Sa se scrie funcţii de citire şi afişare ale şirului de numere întregi, după ce acesta a fost în prealabil declarat (rezolvare...)

4) Sa se scrie funcţii de citire şi afişare ale şirului de numere întregi, după ce acesta a fost în prealabil declarat.
Se cere construcţia unui tip propriu pentru reţinerea şirurilor de elemente întregi (rezolvare...)

5) Alocare de memorie dinamică a unui şir. Se va citi şi ulterior, afişa, un şir de numere întregi, pentru care spaţiul ocupat se va determina la rulare şi nu la compilare (rezolvare...)

6) Se va dezvolta o aplicaţie pentru reprezentarea şirurilor de numere întregi, şi anume:
- se va determina un tip de date pentru astfel de reprezentari
- se va citi un sir de numere întregi
- se va afisa un sir de numere întregi
- se vor aduna componentele sirului (vom prezenta doua metode: una cu transfer rezultat prin tipul rezultat si alta cu transfer prin linia de parametri)
- se va realiza operatia de înmultire a componentelor sirului
- media elementelor din sir
- numarul de componente negative si numarul de componente pozitive din sir
- minimul si maximul dintre elementele sirului
- sortarea ascendenta a sirului
- cautarea unui anumit element în sir cu returnarea pozitiei pe care se gaseste; în cazul în care elementul se afla de mai multe ori în pe pozitii diferite, vom avea ca rezultat prima pozitie pe care acesta se gaseste.
Functiile vor fi descrise cu zona declarativa explicita, adica, cu prototip de functie.(rezolvare...)

7) Citirea si afisarea unui sir de numere, prin constructia unui tip propriu pentru retinerea sirului de numere intregi.
Funcţia va fi descrisa cu zonă declarativă explicită, adică, cu prototip de funcţie (rezolvare...)

8) Fie declaraţiile : int a[20]; int n; float e;
Să se determine valoarea expresiei e în fiecare din cazul: e = x1+x2+x3+…+xn (rezolvare...)

9) Alocare dinamica sir (rezolvare...)

10) Fie declaraţiile : int a[20]; int n; float e; Să se determine valoarea expresiei e în fiecare din cazurile: (rezolvare...)
a) e = x1+x2+x3+…+xn;
b) e = x1*x2*x3*…*xn;
c) e = media aritmetica a componentelor din vector;
d) e = suma patratelor componentelor din vector;
e) e = suma cuburilor componentelor negative din vector;
f) e = x1-x2+x3-x4+…±xn

11) Să se realizeze un program care interclasează doi vectori într-un al treilea vector. Primii doi vor fi iniţial sortaţi (rezolvare...)

Rezolvari

#include<stdio.h>
void main()
{
	int a[]={2,91,0,-45};		/*un sir de elemente intregi, variabila matrice
					initializata la declarare. Memoria alocata
					pentru aceasta matrice vine direct din numarul
					de elemente cu care este initilizata */
 
	// afisarea sirului ce contine numere intregi
	for(int i=0; i<4; i++)
		printf("%d", a[i]);
 
	getchar();
	int k;
	scanf("%d", k);
}


#include<stdio.h>
void main()
{
	int a[20];	/*am declarat un sir de max 20 de elem. de tipul int cu numele a */
 
	// INTRODUCEM DATE IN SIR
 
	// introducem numarul de elemente din sir
	int n;
	printf("Dati nr de elemente din sir (<=20): ");
	scanf("%d", &n);
 
	//introducem elementele din sir
	printf("Introduceti elementele: \n");
	for(int i=0; i<n; i++)
	{
		printf("\t elem %d: ", i+1);
		scanf("%d", &a[i]);
	}
 
	//AFISAM ELEMENTELE DIN SIR
	printf("Elementele sirului sunt: ");
	for(int i=0; i<n; i++)
		printf("%d", a[i]);
 	
	getchar();
	int k;
	scanf("%d", k);
}


#include<stdio.h>
void citire(int a[], int* n)
{
	printf("Dati numarul de elemente ale sirului: ");
	scanf("%d",n);
	printf("\nIntroduceti elementele sirului:\n");
	for(int i=0;i<*n;i++)
	{
		printf("\tIntroduceti elem %d: ",i+1);
		scanf("%d",&a[i]);
	}
}
void afisare(int a[], int n)
{
	printf("\nElementele sirului sunt: ");
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
	
}
void main()
{
	int a[20],n;
	citire(a,&n);
	afisare(a,n);
 
	getchar();
	int k;
	scanf("%d", &k);
}


#include<stdio.h>
typedef int vector[20]; /*vector de tip propriu creat pt retinerea sirurilor, 
			cu o dimensiune max de 20 elemente*/
void citire(vector a, int* n)
{
	printf("Dati numarul de elemente ale sirului: ");
	scanf("%d",n);
	printf("Introduceti elementele sirului:\n");
	for(int i=0;i<*n;i++)
	{
		printf("\telem %d: ",i+1);
		scanf("%d",&a[i]);
	}
}
void afisare(vector a, int n)
{
	printf("Elementele sirului sunt: ");
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
}
void main()
{
	vector a;
	int n;
	citire(a,&n);
	afisare(a,n);
 
	getchar();
	int k;
	scanf("%d", &k);
}


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

//functie de alocare de memorie pentru nr de elemente citite in sir

int* alocare(int* a, int* n)
{
	printf("Dati numarul de elemente ale sirului: ");
	scanf("%d",n);
	a=(int*)malloc(*n*sizeof(int)); /* alocam memorie dinamica (in zona Heap) pentru
					 memorarea unui sir in mod dinamic de n elemente */
	if(!a)
	{
		printf ("Eroare de alocare.");
		return 0;
	}
	return a;
} 
//functie ptr introducerea elementelor in sir
void citire(int* a, int n)
{
	printf("Introduceti elementele sirului:\n");
	for(int i=0;i<n;i++)
	{
		printf("\telem %d: ",i+1);
		scanf("%d",&a[i]);
	}
} 
//functie ptr afisarea elementelor din sir
void afisare(int* a, int n)
{
	printf("Elementele sirului sunt: ");
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
}
void main()
{
	int* a, n;
	a=alocare(a,&n); //apel al functiei de alocare de memorie
	citire(a,n); //apel al functiei de citire
	afisare(a,n); //apel al functiei de afisare

	getchar();
	int k;
	scanf("%d", &k);
}


#include<stdio.h>
#include<stdlib.h>
typedef int* vector;
 
//functie de alocare de memorie in zona Heap pentru un sir declarat
vector alocare(vector,int*); /*primul parametru este sirul, iar al doilea dimensiunea sa 
						(numarul de elemente ce vor fi citite)*/
				
 
//functia de citire a elementelor unui sir
void citire(vector,int);
 
//afisarea unui sir de numere intregi
void afisare(vector,int);
 
//sumarea elementelor din sir - cu transfer prin tipul rezultat
int suma1(vector,int);
 
//sumarea elementelor din sir - cu transfer prin linia de parametri
void suma2(vector,int,int*); //al 3-lea parametru va retine rezultatul suma
 
//produsul elementelor din sir
int produs(vector,int);
 
//media elementelor din sir
float media(vector,int);
 
//numarul de elemente negative, respectiv pozitive, din sir
void nr_neg_poz(vector,int,int*,int*);
 
//minimul si maximul valorilor din sir
void min_max(vector,int,int*,int*);
 
//functie de sortare a sirului
void sortare(vector,int);
 
/* cautarea unui anumit element, cu returnarea pozitiei pe care se gaseste
in sir (in cazul in care respectivul element se gaseste de mai multe ori in
sir, se va returna prima pozitie la care se afla) */
int cautare(vector,int,int);
 
void main()
{
	vector v;
	int n; 
	v=alocare(v,&n); //apelul functiei de alocare

	citire(v,n); //apelul functiei de citire

	afisare(v,n); 
	int s1=suma1(v,n);
	printf("\n\nSuma elementelor: %d",s1); 
	int s2;
	suma2(v,n,&s2);
	printf("\nSuma elementelor: %d",s2);
	int p=produs(v,n);
	printf("\nProdusul elementelor: %d",p);
	float m=media(v,n);
	printf("\nMedia elementelor: %.2f",m); 
	int neg,poz;
	nr_neg_poz(v,n,&neg,&poz);
	printf("\nNr. de elem. negative: %d; Nr. de elem. pozitive: %d",neg,poz);
 	int min,max;
	min_max(v,n,&min,&max);
	printf("\nMinimul din sir: %d; Maximul din sir: %d",min,max);
 	sortare(v,n);
	afisare(v,n);
 	int elem;
	printf("\nDati un element ce se doreste a fi cautat: ");
	scanf("%d",&elem);
	if(cautare(v,n,elem)) //rezultat diferit de 0
		printf("\tElementul se gaseste pe pozitia %d", cautare(v,n,elem));
	else
	printf("\tElementul nu se afla in sir");
 
	getchar();
	int k;
	scanf("%d", &k);
}
vector alocare(vector a, int* n)
{
	printf("Dati numarul de elemente: ");
	scanf("%d",n);
	a=(int*)malloc(*n*sizeof(int));
	return a;
}
void citire(vector a, int n)
{
	printf("Introduceti elementele:\n");
	for(int i=0;i<n;i++)
	{
		printf("\telem %d= ",i+1);
		scanf("%d",&a[i]);
	}
}
void afisare(vector a, int n)
{
	printf("\nSirul este: ");
	for(int i=0;i<n;i++)
	printf("%d ",a[i]);
}
int suma1(vector a, int n)
{
	int s=0;
	for(int i=0;i<n;i++)
	s+=a[i]; //s=s+a[i];
	return s;
}
void suma2(vector a, int n, int* s)
{
	*s=0;
	for(int i=0;i<n;i++)
	*s+=a[i];
}
int produs(vector a, int n)
{
	int p=1;
	for(int i=0;i<n;i++)
	p*=a[i];
	return p;
}
float media(vector a, int n)
{
	return (float)suma1(a,n)/n;
}
void nr_neg_poz(vector a, int n, int* neg, int* poz)
{
	*neg=*poz=0;
	for(int i=0;i<n;i++)
	if(a[i]>=0)
		(*poz)++;
	else
		(*neg)++;
}
void min_max(vector a, int n, int* m, int* M)
{
	*m=*M=a[0]; /*mergem de la premiza ca primul element va fi atat element
					minim cat si maxim in sir*/
	for(int i=1;i<n;i++)
	if(a[i]<*m)
	*m=a[i];
	else
	if(a[i]>*M)
	*M=a[i];
}
void sortare(vector a, int n)
{
	int aux;
	for(int i=0;i<n-1;i++)
	for(int j=i+1;j<n;j++)
	if(a[i]>a[j]) //sortare ascendenta
	{
		aux=a[i];
		a[i]=a[j];
		a[j]=aux;
	}
}
int cautare(vector a, int n, int e)
{
	for(int i=0;i<n;i++)
	if(a[i]==e)
	return i+1;
	return 0;	
}


#include<stdio.h>
#include<malloc.h>
typedef int* vector;
vector alocare (vector a, int* n)
{
  printf("Dati numarul de elemente: ");
  scanf("%d",n);
  a=(int*)malloc(*n*sizeof(int));
  return a;
}
void citire(vector a, int n)
{
 printf("Introduceti elementele:\n");
 for(int i=0;i<n;i++)
   {
    printf("\telem %d= ",i+1);
    scanf("%d",&a[i]);
   }
}
void afisare(vector a, int n)
{
 printf("\nSirul este: ");
 for(int i=0;i<n;i++)
   printf("%d ",a[i]);
}
void main()
{
  vector x; //sirul de nr. intregi
  int n;  //nr. de elemente ce vor fi citite in sir
  
  x=alocare(x,&n);
  citire(x,n);
  afisare(x,n);
 
 getchar();
 int k;
 scanf("%d",k);
}


#include<stdio.h>
void citire(int a[], int* n)
{
	printf("\nIntroduceti nr de elemente: ");
	scanf("%d", n);
	printf("\nIntroduceti elementele: ");
	for(int i=0; i<*n; i++)
	{
		printf("\nElem %d: ", i+1);
		scanf("%d", &a[i]);
	}
}
int expresie(int a[20],int n)
{	
	int e=0;
	for(int i=0; i<n; i++)
	{
	e=e+a[i];
	}
	return e;
}
void main()
{
	int a[20], n, e;
 
	citire(a, &n);
	printf("\nRezultatul este: %d", expresie(a,n));
 
	getchar();
	int var;
	scanf("%d", &var);
}


#include <stdio.h>
#include <stdlib.h>
void main()
{
    int n , *a, i;
    printf ("Dati numarul de elemente ale sirului: ");
    scanf ("%d", &n); 
    //alocare memorie pt memorarea unui sir in mod dinamic de n elemente
    a=(int*) malloc(n*sizeof(int));  
    //introducere elementelor in sir
    printf ("Introduceti elementele in sir: \n"); 
    for (i=0; i<n; i++)
	{
        printf ("element %d: ", i+1);
		scanf ("%d", &a[i]);
	} 
	//afisarea elementelor
    printf ("Elementele intregi ale sirului sunt: \n");
    for (i=0; i<n; i++)
	{
       	printf ("element %d = %d\n", i+1, a[i]);
	}
 
	int j;
	scanf("%d", &j);
}


#include<stdio.h>

//introducere date in sir
void citire(int b[], int* n)
{
	printf("\nIntroduceti numarul de elemente: ");
	scanf("%d", n);
 
	printf("\nIntroduceti elementele:\n ");
	for(int i=0; i<*n; i++)
	{
		printf("\nElem %d:", i+1);
		scanf("%d", &b[i]);
	}
}
int expresie1 (int a[20], int n)
{
	int e=0;
	for(int i=0; i<n; i++)
	e=e+a[i];
	return e;
}
int expresie2 (int a[20], int n)
{
	int e=1;
	for(int i=0; i<n; i++)
	e=e*a[i];
	return e;
}
float expresie3 (int a[20], int n)
{
	float e=0;
	for(int i=0; i<n; i++)
		e=e+a[i]/(float)n;
	return e;
}
int expresie4 (int a[20], int n)
{
	int e=0;
	for(int i=0; i<n; i++)
	e=e+a[i]*a[i];
	return e;
}
int expresie5 (int a[20], int n)
{
	int e=0;
	for(int i=0;i<n;i++)
	{
		if(a[i]<0)
		e=e+a[i]*a[i]*a[i];
	}
	return e;
}
int expresie6 (int a[20], int n)
{
	int e=0,semn=1;
	for(int i=0;i<n;i++)
	{
		if (i%2==0)
			semn=1;
		else 
			semn=-1;
 		e=e+a[i]*semn;
	}
	return e;
}
void main()
{
	int b[20], n, i;
	float e; 
	citire(b, &n); 
	printf("\n\tSuma elementelor este: %d",expresie1(b,n));
	printf("\n\tProdusul este: %d",expresie2(b,n));
	printf("\n\tMedia aritmetica este: %.2f",expresie3(b,n));
	printf("\n\tSuma patratelor este: %d",expresie4(b,n));
	printf("\n\tSuma cuburilor negative este: %d",expresie5(b,n));
	printf("\n\tExpresia este: %d",expresie6(b,n));
 
	getchar();
	int var;
	scanf("%d", &var);
}


#include<stdio.h>
#include<stdlib.h>
void main()
{ 
 int n , m, *a, *b, i, j, gasit, aux, k, *c; 
//---------------------------------------------------------------------------------
    printf ("Dati numarul de elemente ale sirului1: ");
    scanf ("%d", &n);
	//alocare memorie pt memorarea unui sir in mod dinamic de n elemente
	a=(int*) malloc(n*sizeof(int));
   //introducere elementelor in sir
	printf ("Introduceti elementele in sir1: \n"); 
	for (i=0; i<n; i++)
	{
        printf ("element %d: ", i+1);
		scanf ("%d", &a[i]);
	}
//---------------------------------------------------------------------------------

    printf ("Dati numarul de elemente ale sirului2: ");
    scanf ("%d", &m); 
	//alocare memorie pt memorarea unui sir in mod dinamic de n elemente
	b=(int*) malloc(m*sizeof(int));
   //introducere elementelor in sir
	printf ("Introduceti elementele in sir2: \n"); 
	for (j=0; j<m; j++)
	{
        printf ("element %d: ", j+1);
		scanf ("%d", &b[j]);
	}
//--------------------------------------------------------------------------------- 
	//afisarea elementelor celor 2 siruri
	printf ("Elementele intregi ale sirului1 sunt: \n");
	for (i=0; i<n; i++)
	{
       printf ("element %d = %d\n", i+1, a[i]);
	} 
	printf ("Elementele intregi ale sirului2 sunt: \n");
	for (j=0; j<m; j++)
	{
       printf ("element %d = %d\n", j+1, b[j]);
	} 
//---------------------------------------------------------------------------------	 
	//sortare sir I

	do
	{
		gasit=0;
		for(i=0;i<n-1;i++)
		if (a[i]>a[i+1])
		{
			aux=a[i];
			a[i]=a[i+1];
			a[i+1]=aux;
			gasit=1;
		}
	} 
	while(gasit); 
	//afisare dupa sortare sir 1

	printf ("Elementele sirului1 dupa sortare sunt: \n");
	for (i=0; i<n; i++)
	{
       printf ("element %d = %d\n", i+1, a[i]);
	}
//--------------------------------------------------------------------------------- 
	//sortare sir II

	for(i=0;i<m-1;i++)
	for(j=i+1;j<m;j++)
	if(b[i]>b[j])
	{
		aux=b[i];
		b[i]=b[j];
		b[j]=aux;
	}
 
	//afisare dupa sortare sir 2

		printf ("Elementele sirului2 dupa sortare sunt: \n");
	for (j=0; j<m; j++)
	{
       printf ("element %d = %d\n", j+1, b[j]);
	}
//---------------------------------------------------------------------------------
	//interschimbarea propriu-zisa
 
	//alocare memorie pt memorarea unui sir in mod dinamic de n elemente
	c=(int*) malloc((n+m)*sizeof(int)); 
	i=j=k=0;
	while(i<m && j<n)
if (a[i]==b[j])	//în cazul în care avem elemente comune în cei doi vectori acestea
 sa fie puse o singura data în vectorul interclasat
	{
		c[k++]=a[i++];
		j++;
	}
	else 
	if (a[i]<b[j]) c[k++]=a[i++];
	else c[k++]=b[j++]; //sau {c[k]=b[j]; k++; j++;}

	if(i<m) //în caz ca mai ramân elemente neanalizate în a se copiaza în c
		for(j=i;j<n;j++)
			c[k++]=a[j];
	else //în caz ca mai ramân elemente neanalizate în b se copiaza în c
		for(i=j;i<m;i++)
			c[k++]=b[i]; 
	//afisare dupa sortare siruri

		printf ("Elementele sirului dupa sortare sunt: \n");
	for (k=0; k<(m+n); k++)
	{
       printf ("element %d = %d\n", k+1, c[k]);
	} 
//---------------------------------------------------------------------------------

getchar();
int var;
scanf("%d", &var);
}
Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.