Sunteți pe pagina 1din 10

VECTORI-EXERCITII

1. Se citește un număr natural n și cele n cele n elemente ale unui vector. Să se înlocuiască
elementele de pe pozițiile pare cu cea mai mică cifra din număr iar cele de pe pozițiile impare cu 0
dacă numărul e prim și cu 1 altfel.

#include<iostream>

void citireTablou(int tablou[], int& dimensiune)


{
std::cout << "Cititi elementele:";
for (int index = 0; index < dimensiune; index++)
{
std::cin >> tablou[index];
}
}

void afisareTablou(int tablou[], int& dimensiune)


{
std::cout << "Afisare:";
for (int index = 0; index < dimensiune; index++)
{
std::cout << tablou[index] << " ";
}
std::cout << std::endl;
}
bool prim(int n)
{
int d;
if (n < 2)
return false;
else
for (d = 2; d <= n / 2; d++)
if (n % d == 0)
return false;
return true;
}
int cifra(int n)
{
int min = 10;
while (n != 0)
{
if (min > n % 10)
min = n % 10;
n = n / 10;
}
return min;
}
void schimbare(int tablou[], int& dimensiune)
{
for (int index = 0; index < dimensiune; index++)
if (index % 2 == 0)
tablou[index] = cifra(tablou[index]);
else
tablou[index] = prim(tablou[index]);
}

int main()
{
int dimensiune;
std::cout << "Inserati dimensiune:";
std::cin >> dimensiune;

// validare input
if (dimensiune <= 0)
return 0;

// Alocare dinamica
int* tablouDinamic = new int[dimensiune];
citireTablou(tablouDinamic, dimensiune);
schimbare(tablouDinamic, dimensiune);
afisareTablou(tablouDinamic, dimensiune);
delete[] tablouDinamic;
}

2. Se citește un număr natural n și cele n cele n elemente ale unui vector. Să se șteargă din vector
acele elemente care sunt egale cu suma vecinilor săi.
#include <iostream>

void stergere(int v[], int& n)


{
for (int i = 1; i < n - 1; i++)
if (v[i] == v[i - 1] + v[i + 1])
{
for (int j = i; j < n; j++)
v[j] = v[j + 1];
n--;
}
}
void citire(int v[], int& dimensiune)
{
for (int i = 0; i < dimensiune; i++)
{
std::cin >> v[i];
}
}
void afisare(int v[], int& dimensiune)
{
for (int i = 0; i < dimensiune; i++)
std::cout << v[i] << " ";

}
int main()
{
int n;
std::cin >> n;
// Validare
if (n <= 0)
return 0;
int* v = new int[n];
citire(v, n);
stergere(v, n);
afisare(v, n);
delete[]v;
return 0;
}

3. Se citește un număr natural n și cele n cele n elemente ale unui vector. Să se insereze în vector între
oricare două valori vecine suma și produsul acestora.
Obs: Determinarea sumei și a produsului a două numere se va realiza în cadrul unui singure funcții.

#include<iostream>

void FacereLoc(int& n, int tablou[], int pozitie)


{
n++;
for (int index = n - 1; index > pozitie; index--)
tablou[index] = tablou[index - 1];
tablou[pozitie] = 0;
}
void SumaProdus(int a, int b, int& suma, int& produs)
{
suma = a + b;
produs = a * b;
}
void CitireTablou(const int& n, int tablou[])
{
for (int index = 0; index < n; index++)
std::cin >> tablou[index];
}
void InserareSumProd(int& n, int tablou[])
{
for (int index = 0; index < n - 1; index++)
{
FacereLoc(n, tablou, index + 1);
FacereLoc(n, tablou, index + 2);
int suma, produs;
SumaProdus(tablou[index], tablou[index + 3], suma, produs);
tablou[index + 1] = suma;
tablou[index + 2] = produs;
index = index + 2;
}

}
void AfisareTablou(const int& n, int tablou[])
{
for (int index = 0; index < n; index++)
std::cout << tablou[index] << ' ';
}
int main()
{
int n;
std::cout << "Introduceti dimensiunea vectorului:";
std::cin >> n;
// Validare
if (n <= 0)
return 0;
int* tablou = new int[3 * n];
std::cout << "Introduceti elementele vectorului:";
CitireTablou(n, tablou);
InserareSumProd(n, tablou);
AfisareTablou(n, tablou);
delete[] tablou;
return 0;
}

4. Se citeșc două numere naturale n și k și cele n elemente ale unui vector. Să se deplaseze spre
dreapta elementele vectorilor cu k-poziții. Primele k-elemente ale vectorului vor fi
a) zerorizate iar dimensiunea vectorului va crește k elemente

Ex: v = [1,2,3,4,5,6,7], k=3 afișare: [0,0,0,1,2,3,4,5,6,7]

#include <iostream>

void CitireTablou(int tablou[], const int& n)


{
for (int index = 0; index < n; index++)
std::cin >> tablou[index];
}
void MutareKPoz(int& n, int tablou[], int k)
{
int aux = 0;
while (aux != k)
{
n++;
for (int index = n - 1; index > aux; index--)
tablou[index] = tablou[index - 1];
tablou[aux] = 0;
aux++;
}
}
void AfisareTablou(int tablou[], const int& n)
{
for (int index = 0; index < n; index++)
std::cout << tablou[index] << " ";
}
int main()
{
int n, k;
std::cout << "Introduceti dimensiunea vectorului si k:";
std::cin >> n >> k;
// Validari
if (n <= 0 || k <= 0 || k > n)
return 0;
int* tablou = new int[n + k];
std::cout << "Introduceti elementele vectorului:";
CitireTablou(tablou, n);
MutareKPoz(n, tablou, k);
AfisareTablou(tablou, n);
delete[] tablou;
return 0;
}

b) înlocuite cu ultimele k elemente din vector astfel dimensiunea vectorului nu va suferi


modificări
Ex: v = [1,2,3,4,5,6,7], k=3 afișare: [5,6,7,1,2,3,4]
#include <iostream>

void CitireTablou(int tablou[], const int& n)


{
for (int index = 0; index < n; index++)
std::cin >> tablou[index];
}
void MutareKPoz(const int& n, int tablou[], int k)
{
while (k > 0)
{
int aux = tablou[n - 1];
for (int index = n - 1; index > 0; index--)
tablou[index] = tablou[index - 1];
tablou[0] = aux;
k--;
}
}
void AfisareTablou(int tablou[], const int& n)
{
for (int index = 0; index < n; index++)
std::cout << tablou[index] << " ";
}
int main()
{
int n, k;
std::cout << "Introduceti dimensiunea vectorului si k:";
std::cin >> n >> k;
// Validari
if (n <= 0 || k <= 0 || k > n)
return 0;
int* tablou = new int[n];
std::cout << "Introduceti elementele vectorului:";
CitireTablou(tablou, n);
MutareKPoz(n, tablou, k);
AfisareTablou(tablou, n);
delete[] tablou;
return 0;
}

5. Se dă un vector v cu n elemente. Să se elimine din vector elementul de cu indicele de poziție p (citit


de la tastatură) iar p să se insereze la începutul vectorului. Să se afișeze noul vector. Ex: 2 51 2 91 3 cu
p = 3, afiseaza 3 2 51 2 3

#include <iostream>

void stergereinlocuire(int v[], int& n, int& p)


{
for (int i = p; i > 0; i--)
v[i] = v[i - 1];
v[0] = p;
}
void citire(int v[], int& dimensiune)
{
for (int i = 0; i < dimensiune; i++)
{
std::cin >> v[i];
}
}
void afisare(int v[], int& dimensiune)
{
for (int i = 0; i < dimensiune; i++)
std::cout << v[i] << " ";

}
int main()
{
int n, p;
std::cin >> p;
std::cin >> n;
// Validari
if (n <= 0 || p <= 0 || p > n)
return 0;
int* v = new int[n];
citire(v, n);
stergereinlocuire(v, n, p);
afisare(v, n);
delete[]v;
return 0;
}

6. Se citeșc două numere naturale n și m și doi vectori crescători de lungime n, respectiv m. Să se


creeze și să se afișeze vectorul ordonat crescător obținut prin reuniunea celor doi vector. Ex: v1 =
[1,2,5,10,13,20] v2 = [1,6,7,9,15,25], afisare: [1,1,2,5,6,7,9,10,13,15,20,25]
#include <iostream>
void citireTablou(int tablouDinamic[], int dimensiune) {
for (int index = 0; index < dimensiune; index++)
{
std::cin >> tablouDinamic[index];
}
}

void interclasare(int vector1[], int vector2[], int vector_final[], int dimensiune1, int dimensiune2) {
int i1 = 0, i2 = 0, i_final = 0;

while (i1 < dimensiune1 && i2 < dimensiune2) {

if (vector1[i1] < vector2[i2]) {


vector_final[i_final] = vector1[i1];
i_final++;
i1++;
}
else {
vector_final[i_final] = vector2[i2];
i_final++;
i2++;
}
}

while (i1 < dimensiune1) {


vector_final[i_final] = vector1[i1];
i_final++;
i1++;
}
while (i2 < dimensiune2) {
vector_final[i_final] = vector2[i2];
i_final++;
i2++;
}
}

void afisareTablou(int tablouDinamic[], int dimensiune) {


for (int index = 0; index < dimensiune; index++) {
std::cout << tablouDinamic[index] << " ";
}
}

int main() {
int dimensiune1, dimensiune2;

std::cout << "numar elemente primul vector = ";


std::cin >> dimensiune1;

std::cout << "numar elemente al doilea vector = ";


std::cin >> dimensiune2;

// Validari
if (dimensiune1 <= 0 || dimensiune2 <= 0)
return 0;

int* tablouDinamic1 = new int[dimensiune1];


int* tablouDinamic2 = new int[dimensiune2];
int* tablouDinamicFinal = new int[dimensiune1 + dimensiune2];

citireTablou(tablouDinamic1, dimensiune1);
citireTablou(tablouDinamic2, dimensiune2);
interclasare(tablouDinamic1, tablouDinamic2, tablouDinamicFinal, dimensiune1, dimensiune2);
afisareTablou(tablouDinamicFinal, dimensiune1 + dimensiune2);
return 0;
}

7. Se citește un număr natural n și n medii (numere reale cu doua zecimale cu valori cuprinse intre 1 şi
10). Să se afişeze o statistică a mediilor astfel: numărul de medii cuprinse în
intervalul [1,2], numărul de medii cuprinse în intervalul (2,3], …, numărul de medii cuprinse
în intervalul (9,10].

#include<iostream>

void CitireTablou(float tablou[], const int& n)


{
std::cout << "Introduceti elementele vectorului:";
for (int index = 0; index < n; index++)
std::cin >> tablou[index];
}
void AfisareStatistica(const int& m, int intervale[])
{
std::cout << "Numarul mediilor cuprinse in intervalul [1,2] este " << intervale[1] + intervale[2] << std::endl;
for (int index = 3; index < m; index++)
std::cout << "Numarul mediilor cuprinse in intervalul (" << index - 1 << "," << index << "] este " <<
intervale[index] << std::endl;
}
void Statistica(const int& n, float tablou[])
{
int m = 10; // celMaiMareCapatAlIntervalelor

int* intervale = new int[m + 1];


for (int index = 0; index < m + 1; index++)
intervale[index] = 0;
for (int index = 0; index < n; index++)
{
intervale[int(tablou[index] + 1)]++;
}
AfisareStatistica(m + 1, intervale);
delete[] intervale;
}
int main()
{
int n;
std::cout << "Introduceti dimensiunea vectorului:";
std::cin >> n;
float* tablou = new float[n];
CitireTablou(tablou, n);
Statistica(n, tablou);
delete[] tablou;
return 0;
}

8. Un număr natural se reţine într-un vector (număr mare), astfel încât fiecare componentă a
vectorului conţine câte o cifră a numărului. Să se înmulţească numărul cu un număr între 1 şi 9
(random generat).

#include<iostream>
#include <time.h>

void citireNumar(int* vectorNumar, const int numarCifre)


{
for (int index = 0; index < numarCifre; index++)
{
std::cout << "Cifra " << index + 1 << " :";
std::cin >> vectorNumar[index];
}
}
void introducereElementInVector(int* vector, const int poz, int& dimensiune, const int element)
{
for (int index = dimensiune; index > poz; index--)
{
vector[index] = vector[index - 1];
}
dimensiune++;
vector[poz] = element;

}
void inmultireVector(int* vectorNumar, const int numarRandom, int& numarCifre)
{
int transport = 0, copy;
for (int index = numarCifre - 1; index >= 0; index--)
{
copy = vectorNumar[index] * numarRandom;
vectorNumar[index] = (copy + transport) % 10;
transport = (copy + transport) / 10;

}
if (transport)
{
introducereElementInVector(vectorNumar, 0, numarCifre, transport);
}
}
void afisareNumar(int* vectorNumar, const int numarCifre)
{
for (int index = 0; index < numarCifre; index++)
{
std::cout << vectorNumar[index];
}
}
void generareNumarRandomInInterval(int& numar, const int margineInferioara, const int margineSuperioara)
{
srand(time(0));
numar = std::rand() % margineSuperioara + margineInferioara;
}

int main()
{
int numarCifre, numarRandom;
std::cout << "Numarul de cifre :";
std::cin >> numarCifre;
if (numarCifre <= 0)
return 0;
int* vectorNumar = new int[numarCifre + 1];

generareNumarRandomInInterval(numarRandom, 1, 9);
citireNumar(vectorNumar, numarCifre);
afisareNumar(vectorNumar, numarCifre);
inmultireVector(vectorNumar, numarRandom, numarCifre);
std::cout << " * " << numarRandom << " = ";
afisareNumar(vectorNumar, numarCifre);
delete[] vectorNumar;
}

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