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

Salut! Va rog mult sa ma ajutati cu niste explicatii la fiecare linie de cod c++ la aceasta problema de pe pbinfo (#1883), ca sa o pot intelege.
Atasez aici programul c++:

#include
using namespace std;
int main()
{
int n,i,v[1001],j,maxi,sol[1001];
cin>>n;
for(i=1; i<=n; i++)
cin>>v[i];
for(i=1; i<=n; i++)
{
if(v[i] maxi)
{
maxi=v[j];
break;
}
}
if(maxi==v[i])
sol[i]=-1;
else
sol[i]=maxi;
}
}
sol[n]=-1;
for(i=1; i<=n; i++)
cout < return 0;
}

Răspunsuri la întrebare

Răspuns de Apollyon
1

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++).


ciprian74: Codul care l-am atasat eu este perfect functional. Nu are nicio eroare.
ciprian74: #include
using namespace std;
int main()
{
int n,i,v[1001],j,maxi,sol[1001];
cin>>n;
for(i=1; i<=n; i++)
cin>>v[i];
for(i=1; i<=n; i++)
{
if(v[i] sol[i]=v[i+1];
else
{
maxi=v[i];
for(j=i+1; j<=n; j++)
{
if(v[j]>maxi)
{
maxi=v[j];
break;
}
}
if(maxi==v[i])
sol[i]=-1;
else
sol[i]=maxi;
}
}
sol[n]=-1;
for(i=1; i<=n; i++)
cout < return 0;
}
ciprian74: doar ca la inceputul programului nu s-a copiat (biblioteca)
ciprian74: iostream
Apollyon: păi uite de exemplu ai un #include gol, la final încerci să afișezi ceva cu cout, ce vrei să afișezi până la urmă că tot ce văd e un "cout < return 0;" :)) stuff like that
ciprian74: daca mai lasa sa termin ce am de zis ce bine ar fi
Apollyon: + că din ce am văzut mai erau niște acolade lipsă... etc, poate nu s-a copiat bine
ciprian74: la sfarsit este cout <
ciprian74: solutie de i.
ciprian74: Nu vrea sa se copieze codul cum trebuie.
Alte întrebări interesante