114 / 153
Nov 2018

Nie przeczytałeś tego wątku, prawda?
Jest tutaj test którego nie przechodzisz i to widać z oddali.

@redysz

Dzięki za odpowiedź, doceniam twój czas.

Gdy u mnie wpisuje liczby z zadania wszystko działa (Ale skoro u w twoim teście nie działa to oczywiste jest że jest źle! ale nie wiem co jest nie tak.

najpierw wpisuje 3 (ilosc operacji) pętla for zależna od wpisanej wartości
następnie wpisuje 4 (ile liczb podam do obliczen) tablica o pojemności wpisanej liczby
następnie wpisuje 1 2 3 4 (liczby do operacji) zwykle zmienne

Wszystko działa nie ważne jak wpiszesz, czy po sobie czy w kolumnie itp

Nie mam pojęcia czemu w twoim teście dało takie wyniki :frowning:

  1. Testuj w ideone, a nie u siebie
  2. Tak się dzieje bo masz inny kompilator / inne coś / a masz błąd w kodzie i następuje tzw. undefined behaviour (w zależności od kompilatora może stać się różna rzecz - problem może być różnie obsłużony).
  3. Łatwo zauważyć co (i jak bardzo) masz źle dla innych danych z tego wątku.

Gdzie jest Twoje undefined behaviour? W zasadzie wszędzie, polecam jakiś kurs, dobrą książkę najpierw przerobić zanim zaczniesz robić te zadania. Przykład:

int gruszka=0;
float tablica [gruszka];

Na prawdę chciałeś stworzyć zeroeleementową tablicę?

I co wtedy robi to:

for (int i=0; i<gruszka; i++)
{
    cin>>liczba;
    tablica [i]=liczba;
}

Wstawia dane w i-te miejsce zeroelementowej tablicy? Cud, że działa w ogóle.

Edit: Powyższe jednak nie jest Twoim największym problemem, a jakość kodu. Kod jest tak brzydki, że nie możesz się w nim połapać i nikt kto nie jest zawodowym programistą się nie połapie. Zapamiętaj raz na zawsze: napisanie ładnego kodu jest ważniejsze od tego by on poprawnie działał. Jak działa niepoprawnie, a jest czysty to szybko błąd można naprawić, jak działa poprawnie, ale jest taki jak Twój to przy najdrobniejszej zmianie się rozjedzie.

Edit2: Tak dla podkreślenia powtórzę: najważniejsze żeby kod był ładny. Później ewentualnie może działać.

Dzięki za rady, już zabieram się za poprawę. Co do zero elementowej tablicy, na początku pętli nadajemy wartość dla int gruszka i wszystko działa. Mam rozumieć że błędem jest początkowe definiowanie gruszka = 0 i zmienianie tego 0 na inna liczbę?

Nie. Błąd jest w tym, że definiujesz gruszka = 0 i w następnej linii tworzysz tablicę o rozmiarze gruszka. Nigdzie pomiędzy nie nadajesz jej wartości (dopiero po stworzeniu zeroelementowej tablicy).
Wkleiłem stricte dwie linie Twojego kodu. Dajesz gruszka=0 i od razu stwórz tablicę o rozmiarze gruszka. Widzisz to?

Jeśli chcesz stworzyć tablicę a dopiero potem nadać jej rozmiar to są trzy wyjścia:

  1. zastosować vector: https://en.cppreference.com/w/cpp/container/vector:2
    vector tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica.resize(rozmiar);

  2. zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
    float *tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica = new float[rozmiar];

  3. stworzyć na początku tablicę o rozmiarze którego na pewno nie przekroczysz, treść zadania podaje że masz do zsumowania maksymalnie 99 liczb więc 100 elementowa tablica wystarczy:
    float tablica[100];
    a potem indeksować od zera do wartości rozmiar.

PS. stosuj “normalne” nazewnictwo, jak ktoś zobaczy w kodzie banan = gruszka/jablko; - to może później nie wiedzieć co toto wogle robi.

Wielkie dzięki! Zastosuje się do tych możliwości. I tak przestane robić taki bałagan w kodzie, to nie ma sęsu gdy do niego się wróci po x czasie.

Napisałem kod od nowa, poprawiając tablice według waszych rad.
Również kod przechodzi test https://ideone.com/xYG3hh10

Sędzia SPOJ mimo to go odrzuca, mógłby ktoś mnie naprowadzić na odpowiedź?

  1. nie używaj float tylko double (przynajmniej na SPOJu i w większości przypadków w życiu)
  2. podejscia nie są typu double. Robisz o zgrozo niejawną konwersję i jak zawsze w takich przypadkach prosisz się o guza przez błędy precyzji
  3. co z delete[]?

@mariusz193
WIELKIE DZIĘKI dostałem AC :smiley:

@tarpauwatratar
ad 1. Dzięki na pewno się przyda.
ad 2. Faktycznie, ciezko o podejscie 1.3, będę pamiętał.
ad 3. Mój błąd powinienem chyba zrobić tak:
"zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
float *tablica;
int rozmiar;
cin >> rozmiar;
tablica = new float[rozmiar];"
Jak radził czaffik

6 months later

Może ktoś pomóc z testem dla którego program nie będzie działał będę wdzięczny.

ok zmieniłem nieco kod tak aby wszystko rozgrywało się w jednej pętli ale nadal jest coś nie tak. Z jakiego testu dostane jeszcze negatywny wynik ?

sprawdzałem ten test i program zwraca dla niego 1 co więc jest z nim nie tak?

To jest zły wynik :frowning: Przeczytaj UWAŻNIE treść zadania. Przecież już wcześniej podałem Ci, że Twój program podaje zły wynik dla tego testu.

w przykładach, które zamieściłeś jest jeden błędny wynik