Witam
Mam pewien problem z zadaniem STOS. Po pewnych modyfikacjach przed ktorymi mialem problem z przekroczonym limitem czasu wyskoczyl mi komunikat o blednym programie.Natomiast szczerze mowiac analizujac go kilka razy nie moge za bardzo znalezc bledu.Liczylbym na jakas wskazowke.Nie szukam gotowego rozwiazania ale podpowiedzi
Mam nadzieje ze dobrze wrzucilem kod
Cześć, a co w przypadku, kiedy piszę np. w języku C#, gdzie funkcja “ReadLine” nie zwraca, ani true ani false, więc jak zrobić inaczej pętlę jak nieskończoną, wydaje mi się, że wszystko robię dobrze, tylko błąd leży w przystosowaniu tego zadania do różnych języków
– edit
Dobra troszeczkę za wcześnie zapytałem, w C# po prostu nie można deklarować nowych zmiennych w while, ale można zastosować bez obaw następującą konstrukcję: while((zmienna = Console.ReadLine()) != null)
Może komuś się przyda!
Cześć,
Od 1,5 tygodnia próbuję skrobać w c++. Ostatnim zadaniem z jakim próbuję się zmierzyć to stos. Niby kod działa, poprawnie wyrzuca a sędzia jednak informuje o przekroczonym czasie. Próbuję na różne sposoby, ale efekt jest taki sam. Co robię nie tak? Z góry dziękuję za pomoc.
Wytłumacz mi proszę w takim razie bo nie rozumiem. Mam że jeśli znak + to wybór 1, jeśli - minus to wybór 2. Jeśli cokolwiek innego to wybór 3. Pętla działa do momentu kiedy wybór jest <3. To nie jest poprawne zakończenie pętli?
Ps. Zadziałało dodanie linii while(cin>>znak). Natomiast wciąż nie rozumiem dlaczego tamto nie działało. Co więcej, teraz kiedy podam pusty string, albo inny znak program działa dalej. Dlaczego więc jest poprawnym rozwiązaniem?
zakończenie jest poprawne, niepoprawne jest twoje założenie, że tym znakiem będzie coś innego niż ‘+’ lub '-'
efekt wiadomy
zmienna znak nie zostanie zmieniona, jeżeli dane w strumieniu wejściowym się skończą
czyli dla danych:
+ 1
-
program nigdy się nie skończy (a przynajmniej do momentu, gdy zostanie przerwany z zewnątrz)
skończył by się np. dla:
+1
-
*
ale w zadaniu nie ma, że na zakończenie jest jakiś nie biały znak
więc powinieneś uzupełnić swoje informacje o strumieniach wejściowych (o wyjściowych pewnie też)
Przeczytaj informacje dla początkujących na forum. Po przeczytaniu (i zastosowaniu się do wymienionych tam porad) napisz, z czym dokładnie masz problem.
@bombardello zastanów się dokładnie co robisz np tutaj:
cin >> a;
switch (a)
{
case'+':
{
cin >> dane[rozmiar];
rozmiar++;
cout << ":)" << endl;
if (rozmiar == 9)cout << ":(" << endl;
break;
}
Załóżmy, że próba dodania elementu się nie uda to czemu rozmiar jest zmieniany i zostaną wypisane również ‘:)’? Zastanów się jak uniknąć próby odczytania pamięci poza tablicą. Włącz ostrzeżenia kompilatora, lub/i czytaj je - pomogą znaleźć banalne błędy:
prog.cc:38:10: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
}while(a=100);
~^~~~
prog.cc:38:10: note: place parentheses around the assignment to silence this warning
}while(a=100);
^
( )
prog.cc:38:10: note: use '==' to turn this assignment into an equality comparison
}while(a=100);
^
==
W jaki sposob pobrac dane w jezyku Python ? Wywala mi blad NZEC:
def Dodawanie(stos,liczba):
if len(stos)<10:
stos.append(liczba)
print(":)")
return stos
elif len(stos)>=10:
print(":(")
return stos
def Odejmowanie(stos):
if len(stos)>0:
print(stos.pop())
return stos
else:
print(":(")
return stos
stos=[]
flaga=0
while True:
a=input()
if flaga==1:
stos=Dodawanie(stos,a)
flaga=0
elif a=="+":
flaga=1
elif a=="-":
stos=Odejmowanie(stos)