👤
Lorraine
a fost răspuns

Ce am gresit la acest program?

#include
#include
#include

using namespace std;
ifstream fin ("platou1.int");
ofstream fout ("platou1.out");

int main()
{
int xmin = 10, k = 0, lg = 1, x, y;
fin >> x;
while ( fin >> y )
if ( x == y )
lg++;
else
{
if ( k < lg)
k = lg, xmin = x;
else if ( k == lg && xmin > x )
xmin = x;
lg = 1;
x = y;
}
fout << k << " " << xmin << endl;
fin.close();
fout.close();

return 0;
}

Afisarea o face corect, deci presupun ca este citirea lui y pt ca se opreste doar cand introduc o litera.

Cerința
Se consideră un șir de cifre. Să se determine lungimea maximală a unei secvențe din șir formată din cifre egale.

Date de intrare
Fișierul de intrare platou1.in conține pe prima linie cifrele reprezentând termenii șirului, separate prin câte un spațiu.

Date de ieșire
Fișierul de ieșire platou1.out va conține pe prima linie două numere naturale k x, separate printr-un singur spațiu, k reprezentând lungimea secvenței determinate, iar x reprezentând termenul șirului din care este formată secvența.

Restricții și precizări
fișierul de intrare conține cel mult 1.000 de cifre, separate prin câte un spațiu, reprezentând termenii șirului dat;
dacă șirul conține mai multe secvențe cu lungimea maximală, se va afișa cel mai mic termen ce formează o astfel de secvență.



Exemplu
platou1.in

3 8 8 8 8 9 9 9 2 5 5 5 5 7 6 6 6 6 8 8
platou1.out

4 5
Explicație
În fișierul de intrare sunt 3 secvențe cu lungimea maximă k=4, termenul cel mai mic fiind x=5.


Răspuns :

ok deci exista doua probleme majore

1. programul tau nu acopera cazul in care dupa secventa de lungime maxima nu mai am nimic

ex.

1 1 2 2 2 3 3 3 3

o sa afiseze 3 2 in loc de 4 3


2. citirea lui y este perfect valida in forma asta DOAR in citirea din fisier, unde nu e nevoie sa introduci litera pentru a termina citirea deoarece programul isi da seama singur cand a terminat de parcurs fisierul.

Dar daca citesti de la tastatura, while(f>>y) nu se va opri decat atunci cand ii vei oferi ceva diferit de o variabila de acelasi tip cu y (in cazul tau un intreg) pentru ca altfel el tot asteapta sa introduci variabile.

Daca ai intalnit problema cu citirea cand testezi de la tastatura, foloseste fisiere si e ok. daca treaba asta se intampla si la citire din fisier poate fi o problema la compilator si nu te pot ajuta.


solutia pe care o propun eu este:

---inlocuiesti doar structura while, restul e ok----

while ( fin >> y ){

if ( x == y )

lg++;


if ( k < lg)

k = lg, xmin = x;

else if ( k == lg && xmin > x )

xmin = x;


if(x!=y)

lg = 1;

x = y;

}


am scapat de else pentru a efectua comparatia de lungime chiar si daca x==y (asta evita problema de la 1) si am pus niste paranteze la while pentru ca am mai multe instructiuni acum. apoi am mai pus o conditie la actualizarea lui lg daca este cazul, if(x!=y) lg=1. asta inseamna ca lg se va reseta doar daca termin secventa de numere egale.


pentru orice nelamurire, poti sa ma intrebi in comentarii sau in mesaj privat si incerc sa te ajut cat de curand :) spor!