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 ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, vă rugăm să ne contactați. Revenirea dumneavoastră ne va bucura, iar pentru acces rapid, nu uitați să ne salvați la favorite!