creați un program care va ordona un șir de cifre introduse de la tastatură
Răspunsuri la întrebare
Răspuns:
#include <algorithm>
#include <iostream>
#include <vector>
void citesteValori(std::vector<int>& vectorNumere);
void afiseazaVector(std::vector<int>& vectorNumere);
void sorteazaVectorul(std::vector<int>& vectorNumere);
int main() {
/* câte numere vrem să citim de la tastatură */
size_t cateNumere;
std::cout << "Cate numere introduci de la tastatura? >> ";
std::cin >> cateNumere;
/* vectorul în care vom citi numerele, poți folosi și un tablou de întregi (int[]) */
std::vector<int> vectorNumere;
/* capacitatea va fi egală cu câte numere citim (util pentru a evita eventuale realocări de memorie) */
vectorNumere.reserve(cateNumere);
/* citim valorile în vector */
citesteValori(vectorNumere);
/* afișăm vectorul înainte de sortare */
std::cout << "Vectorul inainte de sortare:\n\t";
afiseazaVector(vectorNumere);
/* sortăm vectorul, ne folosim de std::sort din biblioteca algorithm */
std::sort(vectorNumere.begin(), vectorNumere.end());
/* alternativa lui sort, dacă vrei să folosești un algoritm de sortare */
/*sorteazaVectorul(vectorNumere);*/
std::cout << "\nVectorul dupa sortare:\n\t";
afiseazaVector(vectorNumere);
return 0;
}
void citesteValori(std::vector<int>& vectorNumere) {
int numarCitit{};
for (size_t i{}; i < vectorNumere.capacity(); i++) {
std::cout << "vectorNumere[" << i << "] = ";
std::cin >> numarCitit;
vectorNumere.push_back(numarCitit);
}
}
void afiseazaVector(std::vector<int>& vectorNumere) {
for (const int& numar : vectorNumere) {
std::cout << numar << " ";
}
std::cout << "\n";
}
void sorteazaVectorul(std::vector<int>& vectorNumere) {
/* eu am ales BubbleSort, tu poți alege orice alt algoritm de sortare */
/* atunci când nu se mai face niciun swap la valori înseamnă că vectorul sortat deci nu mai are rost să-l parcurgem până la final în for-ul principal, ieșim din for */
bool vectorulESortat;
size_t capacitateVector{vectorNumere.capacity()};
for (int i{}; i < capacitateVector - 1; i++) {
vectorulESortat = true;
for (int j{}; j < capacitateVector - i - 1; j++) {
/* dacă primul număr e mai mare decât al doilea facem un swap și setăm variabila bool la false pentru a continua sortarea la următoarea iterație a for-ului principal */
if (vectorNumere.at(j) > vectorNumere.at(j + 1)) {
std::swap(vectorNumere.at(j), vectorNumere.at(j + 1));
vectorulESortat = false;
}
}
if (vectorulESortat) {
break;
}
}
}
- Ce este size_t si de ce nu folosim int
- Ce este si cum se foloseste vectorul din STL si de ce nu folosim vectorul ca la scoala
- Initializarea variabilelor cu {}
Salut!
Ai rezolvarea in C++ mai jos fara STL
#include <iostream>
using namespace std;
int main() {
int n, a[1001];
//Citire lungimea sirului
cin >> n;
//Citire sir
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
//Sortare crescator
for (int i = 1; i <= n; ++i) {
for (int j = 1; j < n; ++j) {
if (a[i] < a[j]) {
swap(a[i], a[j]);
}
}
}
//Afisare sirul sortat
for (int i = 1; i <= n; ++i) {
cout << a[i] << " ";
}
return 0;
}
Complet de acord, propunem rezolvari STL, rezolvari folosind functii predefinite, elemente ceva mai avansate ale limbajului - atunci cand o astfel de solutie are sens, daca explicam de ce si cum.