Informatică, întrebare adresată de aghinea005, 8 ani în urmă

creați un program care va ordona un șir de cifre introduse de la tastatură​

Răspunsuri la întrebare

Răspuns de Apollyon
0

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;

   }

 }

}


andrei750238: Nu crezi ca e putin prea complex programul (din punct de vedere al limbajului) pentru o asemenea cerinta ?

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.
andrei750238: Nu o spun cu rautate, dar nu prea cred ca un elev de clasa a 10-a (probabil) care are probleme in sortarea unui sir de numere intelege :
- 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 {}
andrei750238: Probabil o sa fie multumit ca are o solutie care functioneaza dar nu o sa inteleaga mare lucru, si nici nu o sa se osteneasca prea tare pentru chestii extra, care nu sunt "ca la scoala". Inteleg, vrei sa ajuti, dar e probabil ca mesajul pe care elevul in cauta sa nu mai ajunga pana la el.
Apollyon: da, putea să se folosească de un simplu array dar cu ocazia asta a descoperit și std::vector-ul în caz că nu știa de el, poate vrea să citească-n + despre el, eu sincer n-am făcut un liceu de informatică, habar nu am la ce nivel se predă acolo, de fiecare dată am încercat să adaug comentarii ca să explic oarecum pe înțelesul oricui și dacă aveau întrebări am răspuns de fiecare dată
Apollyon: eu cel puțin sunt fan STL, prefer să-l folosesc de fiecare dată când am ocazia dar pe viitor o să încerc cât mai mult să mă rezum la chestii mai de bază, de aia am și pus alternativa cu un algoritm de sortare ca să aibă 2 variante.
Apollyon: faza cu inițializarea variabilelor cu {}, mda, e mai mult un moft de al meu dar size_t-ul la o căutare scurtă pe Google afla din prima că e un întreg fără semn.
Răspuns de Sergetec
1

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;

}

Alte întrebări interesante