Răspuns :
Răspuns:
#include <iostream>
#include <vector>
int
cautaNumarMaiMare(const std::vector<int>& vectorNumere, int pozitieNumar);
int
main()
{
/* dimensiuneVector (în ea salvăm câte numere citim de la tastatură) */
int dimensiuneVector{}, numarCitit;
std::vector<int> vectorNumere;
std::cout << "Introdu cate numere vrei sa citesti >> ";
std::cin >> dimensiuneVector;
/* setăm de la început capacitatea vectorului la câte numere citim pentru a evita viitoare realocări de memorie */
vectorNumere.reserve(dimensiuneVector);
/* citim numărul de la tastatură și-l adăugăm în vector */
for (int i{}; i < dimensiuneVector; ++i) {
std::cout << "vectorNumere[" << i << "] = ";
std::cin >> numarCitit;
vectorNumere.push_back(numarCitit);
}
/* pentru fiecare număr mai apoi îi căutăm următoarea cifră mai mare decât el însuși */
for (int i{}; i < dimensiuneVector; i++) {
int cifraGasita{ cautaNumarMaiMare(vectorNumere, i) };
/* și o afișăm */
std::cout << cifraGasita << " ";
}
return 0;
}
int
cautaNumarMaiMare(const std::vector<int>& vectorNumere, int pozitieNumar)
{
/* numărul inițial este numărul cu care vom compara următoarele */
/* de exemplu pentru vectorul [3, 4, 3, 5, 1] la a 2-a iterație (a for-ului din main(...)) numărul inițial va fi 4, la a 5-a 1 etc... */
/* numărGăsit va avea valoarea -1, ea se va schimba doar dacă găsim un număr mai mare decât numărul inițial */
int numarInitial{ vectorNumere.at(pozitieNumar) }, numarGasit{ -1 };
/* pozitieNumar e i-ul din for-ul din main(...) ca să începem căutarea de la numărul curent ci nu de la început de fiecare dată (sper că are sens) */
/* cât timp valoarea din pozitieNumar e diferită de ultimul index al vectorului o incrementăm (că dacă am incrementa valoarea când aceasta e egală cu ultimul index din vector am accesa memorie din afara vectorului și asta ar putea duce la niște erori nasoale :)), sper că e clar */
if (pozitieNumar != vectorNumere.size() - 1) {
pozitieNumar++;
}
/* no, dacă găsim în lista de numere de după numărul inițial o valoare mai mare o actualizăm și ieșim din for, altfel ea rămâne -1, valoarea găsită e mai apoi returnată și afișată mai sus în main(...) */
/* de exemplu să zicem că pozitieNumar la noi e 1 (deci suntem la prima iterație când căutăm număr mai mare decât 3) din prima vedem că vectornumere.at(i[1]) este 4 care e mai mare decât numărInitial(3) deci setăm numărGăsit la 4 și ieșim returnăm valoarea lui ș.a.m.d. */
for (int i{ pozitieNumar }; i < vectorNumere.size(); i++) {
if (vectorNumere.at(i) > numarInitial) {
numarGasit = vectorNumere.at(i);
break;
}
}
return numarGasit;
}
Na, am făcut-o eu de la 0 că, codul de l-ai dat tu are erori și cel puțin așa mi se pare mai simpluț. Dacă nu înțelegi ceva, scrie-mi. Bineînțeles că nu ești nevoit să folosești std::vector<> doar că-ți faci viața mai ușoară :)) poți liniștit adapta și la un array de int-uri (chit că nu văd rostul din moment ce ai STL în C++).
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Ne vedem curând și nu uitați să ne adăugați la marcaje!