38 / 75
Mar 2019

zdecydowanie lepiej :slight_smile:

twoja pętla nigdy się nie kończy (dlaczego ? - musisz sam poszukać odpowiedzi)

to teraz przeczytaj ten wątek, znajdziesz informację jak poprawnie zrobić, aby zakończyć pętlę, gdy skończą się dane

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 :slight_smile:

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ż)

3 months later

Męczyłem się kilka godzin, aby zrobić coś takiego i nie wiem co dalej. Może jutro na coś wpadnę, ale na chwilę obecną rozkładam ręce. Najchętniej bym to zrobił przez getchar() ale nie wiem jak.


Nowy kod wszystko działa poprawnie tylko jest przekroczony limit czasu

@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);
                ^
                ==

Przeoczenie naprawiłem(banalny błąd), ale przekraczam limit czasu. Dzięki za te ostrzeżenia. Nie wiedziałem on nich. Jak dam == to ne funguje jak powiadają sąsiedzi z południa.
Działa po picy(awesome). Wystarczyło przeczytać linijka po linijce co robi program.
Dziękuję wszystkim za pomoc.

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)

1 month later

Mam problem. Nie zalicza, a na testach wychodzi wszystko pięknie, ładnie… nie wiem na czym polega problem ?!?

Ponadto:

  1. Po co używasz zmienne globalne?
  2. Masz bardzo długi kod, spróbuj nad nim popracować. Dla przykładu mój kod liczył 37 linii, z całą pewnością mogę go jeszcze skrócić. Jestem pewien, że wielu ma znacznie krótsze kody. Oczywiście mam na myśli kody w C++, w innych językach może to być różnie.
  3. Masz za wiele zmiennych, naliczyłem ich 8. Ja mam tylko dwie zmienne.

No właśnie, widzisz że wynik nie jest poprawny.
Jak uzyskasz AC to, jeśli będziesz zainteresowany, mogę Ci przesłać moje rozwiązanie. Z pewnością jest tu wiele lepszych rozwiązań niż moje, ale może Ci pozwolić spojrzeć na problem z innego punktu widzenia.

Może inaczej… Być może nie rozumiem zadania.
Czy ma robić coś tam czyli dodawać, odejmować, że się tak wyrażę w trybie rzeczywistym, czy pobrać ileś tam danych i po skończeniu pobierania robić… Czy ma znaczenie kiedy będzie odejmował i dodawał czy może ma najpierw pododawać i na końcu odejmować…

  1. Masz zaimplementować stos: https://eduinf.waw.pl/inf/alg/001_search/0100.php;4
  2. Ja to zrobiłem pisząc klasę stos, jeśli wiesz jak tworzyć klasy to możesz tak zrobić, dodać metody push i pop, jeśli nie to albo tak nie rób albo dowiedz się jak pisze się klasy, co to pola klasy, metody klasy, modyfikatory public i private;
  3. znak ‘-’ oznacza zdjęcie liczby ze stosu i wypisanie ale jeśli stos jest pusty to nie da rady nic zdjąć i powinna wyświetlić się morda :(.

Można to robić na obydwa sposoby, to zależy od Ciebie. Ważne jest by zgadzało się to co jest wyświetlane, bo to jest sprawdzane. Metod implementacji pewnie można wymyślić wiele. Można stworzyć klasę stos jak to sugeruje czaffik z odpowiednimi funkcjami składowymi lub jak kto woli metodami.
Ja nie tworzyłem klasy ponieważ problem, jak się go już ogarnie jest naprawdę prościutki. Trzeba tylko zdecydować czy korzystać z tablic czy z klasy vector. Ja korzystam z klasy vector, ale myślę, że jest to kwestia gustu.

18 days later

Hejka! Mam problem z zadankiem. Nie zalicza mi, bo “Przekroczono limit czasu”. Domyślam się, że jest to wynik braku końca programu, ale nie wiem jak zinterpretować “Pewna nieokreślona liczba zestawu danych”. Proszę o pomoc.

Kod:
https://pastebin.com/M6UbUu3M6