69 / 75
Jun 2020

Popatrzyłem na Twój kod i od razu wszystkiego mi się odechciało. Masz bardzo niedobre formatowanie (przynajmniej według tych standardów według, których ja się uczyłem).

  1. Po co masz tu zmienne globalne? Oczywiście one nic nie szkodzą, ale jest to zły nawyk.
  2. Jedna instrukcja w jednej linii (to nie jest jakaś sztywna reguła, ale bardzo ułatwia znalezienie linii, w której jest błąd kompilacji czy podczas debugowania).
  3. Odpowiednie wcięcia.
    Może znajdziesz innych, bardziej wyrozumiałych, chętnych do czytania Twojego kodu, ale ja się nie piszę na to gdy jest on w takiej postaci. Niby nie jest to trudne bo zadanie jest proste i kod krótki, ale dlaczego mam się wysilać gdy Tobie na tym nie zależy?

Dzięki za posta.
Poprawione formatowanie (domyślne z CodeBlocksa): https://ideone.com/chdsR310
Kto powiedział, że mi nie zależy? Na moim małym ekranie tamten kod wyglądał na czytelny :wink:

Teraz czyta się zdecydowanie lepiej :slight_smile:
Mam dla Ciebie informację, którą pewnie cię zdziwi. Ten kod nie daje na ideone poprawnych wyników dla danych testowych :frowning: . Jak Tobie się to udało?
Zauważ, że w treści zadania jest podane, że liczba operacji jest nieokreślona. Ty gdy testowałaś podawałaś to jako parametr, ale to jest niezgodne z warunkami zadania.
Jak wczytać niekreśloną ilość zmiennych? To było na SPOJ-u wielokrotnie opisywane, np. tak:
while(cin >>zmienna)

W takim razie przyjmij moje gratulacje!

PS
Pani Sędzina zaakceptowała Twój kod ale powiedziała mi, że bardzo jej się on nie podobał i ja przychylam się do jej oceny i gdyby to zależało odemnie musiałabyś się jeszcze bardziej postarać :wink:

Dziękuję!
Twój post niestety kompletnie nic nie wnosi :frowning:

2 months later

Cześć i czołem!
Wyskrobałem kod (https://ideone.com/BBQbWe12 ) i intryguje mnie jedna rzecz
Jeśli wprowadzam dane w takiej postaci:
+1 +2 +3
to program działa poprawnie, tak długo jak wprowadzam dane.
A jeśli wprowadzam dane w takiej postaci:
+ 1 + 2 + 3
to pętla while przerywa działanie po wykonaniu 28. linii (pełny stos i buźka “:(”.
Przed return 0; wpisywałem też jedną testową instrukcję i działa, stąd wiem że while zostaje przerwana, ale funkcja main działa dalej.
Jest tak i na ideone i na codeblocksie.
Spoj stwierdza “błędna odpowiedź”, nie żaden błąd kompilacji.

O co chodzi?

Jeżeli nie wiadomo, o co chodzi, to chodzi o … :wink:
a czasami po prostu chodzi o to, że warto a czasami nawet trzeba koniecznie użyć else if i najczęściej to else załatwia całą sprawę, ale od razu uprzedzę, że twój kod tak czy siak [z else czy bez] nie podoba mi się :wink:

1 month later

Nie wiem dlaczego, ale u mnie ten program również nie działa. Pojawia się informacja “Przekroczono limit czasu”… Czytałem tutaj o problemach innych i nie wiem gdzie jest fail… Próbowałem ustawiać inne typy zmiennych, zamiast switcha i pętli do…while wstawiałem pętlę for z ifami i za każdym razem ten sam komunikat. Może ktoś coś podpowie? Po za tym, to mój pierwszy post na tym forum i początek przygody z programowaniem, także WITAM wszystkich i liczę na wyrozumiałość ;-). Pozdr!

#include

using namespace std;
short rozmiar;
short *tablica = new short[10];
short full;

void push()
{
if (rozmiar<=9)
{
rozmiar++;
cin>>tablica[rozmiar];
cout<<":)"<<endl;
}
else
{
cin>>full;
full=false;
cout<<":("<<endl;
}
}

void pop()
{
if (rozmiar>=1)
{
cout<<tablica[rozmiar]<<endl;
rozmiar–;
}
else
cout<<":("<<endl;
}

int main() {

char wybierz;
rozmiar = 0;
do
{
    cin>>wybierz;
    switch (wybierz)
    {
        case '+': push(); break;
        case '-': pop(); break;
    }
} while ((wybierz=='+')||(wybierz=='-'));
delete[]tablica;

return 0;

}

  1. zle sie czyta bez wciec
  2. doczytaj jak cin zwraca EOF flage konca pliku (strumienia) i zastosuj w programie
  3. zmien warunek konca petli.
    Pzdr

No dobra, zmieniłem pętlę na while i umieściłem warunek z cin. Dzięki za podpowiedzi :wink:

7 months later

Może mi ktoś podpowiedzieć co jest z moim kodem nie tak, w kompilatorze działa poprawnie jak wymaga tego zadanie tylko przy zgłoszeniu wyskakuje błąd kompilacji

#include
#include <windows.h>
#include

using namespace std;

int stos[11];
int nr_stosu;
char znak;

void push()
{

cin>>stos[nr_stosu];

if(nr_stosu>=10)
{
    cout<<":("<<endl;


}
else
{

    cout<<":)"<<endl;
    nr_stosu=nr_stosu+1;

}

}

void pop()
{
if(nr_stosu>=1)
{
nr_stosu=nr_stosu-1;
cout<<stos[nr_stosu]<<endl;
}
else
{
cout<<":("<<endl;
exit(0);
}

}

int main()
{
while ((znak!=’+’)||(znak!=’-’))
{
cin>>znak;
if(znak==’+’)
{
push();
}
else if(znak==’-’)
{
pop();
}
}
return 0;
}

Popieram, to co napisał @korkirw, to dramat.

Przy błędzie kompilacji przy zgłaszaniu kodu na SPOJU, możesz i powinieneś natychmiast kliknąć właśnie w ten napis - błąd kompilacji i dowiedzieć się o co chodzi - jaki to błąd. A chodzi zapewne o windows.h, bo SPOJ to Linux a nie windows i nie ma tu takiego pliku.
Dziwne, bo już przecież zaliczyłeś kilka AC.

Twój kod daje złe wyniki dla np. takiego przypadku:
-
-
-

Zauważyłem, że mój kod trwa zbyt długo co moge zrobić aby go przyspieszyć?

Może zacznij od tego żeby on w ogóle działał. Testuj go w ideone, w SPOJ działa dokładnie tak samo.

3 years later

raczej nie do końca dokładnie tak samo…
ideon wszystko git, spoj błąd wykonania
https://ideone.com/kxyqzF1
#java,
czy ktoś podpowie jak w javie zrobić while(cin>>a) :slight_smile:
bo tutaj ból jest największy.