68 / 69
Nov 2020

Dzięki, zamieniłem tablicę na dynamiczną i użyłem sort, teraz wszystko ładnie działa i zaakceptowano.

Chyba zacznę bardziej zwracać uwagę, żeby nie wychodzić poza tablicę :smiley:

1 month later

na jakim kompilatorze ?
edit na C++ 4.3.2 działa na innych nie :c

Hmm, zazwyczaj takie rzeczy powodują takie rzeczy jak sięganie za tablicę i do niezadeklarowanych zmiennych. Ale po szybkim przejrzeniu nie widzę czegoś takiego Twoim w kodzie. Najbardziej podejrzana byla:

swap(wyniki[h], wyniki[h + 1]);

Wtedy można sobie do tablicy wcisnąć jakieś pozostałości, które stały bezpośrenio za nią jeśli się nie uważa z indeksem tablicy. Niestety nie widzę gdzie mógłby leżeć problem.

ale ja widzę :slight_smile:

		for (int b = ileLiczb - 1; wyniki[b] == najwieksza; b--)
			ileWygranych++;

a do autora rozwiązania: usuń już link do programu

2 months later

ależ skąd :slight_smile: - wcale się nie zawiesza, tylko cały czas pracuje i nie chce skończyć

gdybyś czytała inne wątki, to byś przeczytała, że pisanie własnej procedury sortującej to proszenie się o kłopoty (zaś próba napisania własnej quicksoert to podwójne proszenie się o kłopoty)

przecież można użyć qsort() lub sort()

dodatkowo powinnaś jeszcze co najmniej raz dokładnie przeczytać treść zadania

gr… jednak nie. Wyglada na to, że działa…ale “bledna odp”…Zgubiłam gdzieś spacje czy coś? :smiley:

a moja druga rada ? - należy ją powtarzać aż do pełnego zrozumienia treści zadania :slight_smile:

Gr, widać muszę się nauczyć czytać :smiley:
Dzięki. Teraz przeszło za pierwszym razem.

2 years later

Witam.
Mogłaby jakaś dobra duszyczka zerknąć w kod i powiedzieć co jest nie tak ?


Z góry dziękuje.

Witam,

Twój kod zawiera dwa błędy:

  1. (WAŻNY BŁĄD) Próba odczytu danych znajdujących się poza zaalkowanym obszarem:
    for (int j = 0; wsk[0]==wsk[j] ; ++j) {
    Rozważ przypadek testowy nr 3:
    2
    1 1
  1. (WYCIEK PAMIĘCI) Brak zwolnienia zaalokowanej tablicy na końcu pętli.

Generalnie na ideone.com3 brakuje możliwości odpalenia kodu z debugowymi opcjami kompilacji typu:
g++ -fsanitize=address -fno-omit-frame-pointer -g -ggdb -lasan program.cpp
Odpalenie programu skompilowanego w taki sposób od razu by pokazało te problemy.

Pzdr.

Nie widzę miejsca w którym twierdzisz że próbuje odczytać miejsce którego nie zaalokowałem

Dla tego przypadku:

2
1 1


int * wsk=new int [2];

wsk jest tablica zawierajaca dwa elementy: [0]=1, [1]=1

pierwsze wywolanie petli j=0:
wsk[0]==wsk[j] // tu jest OK, ciało pętli wypisze 1
drugie wywolanie petli j=1:
wsk[0]==wsk[j] // tu jest OK, ciało pętli wypisze 1
trzecie wywolanie petli j=2:
wsk[0]==wsk[j] // no i sięgamy już poza zaalokowany obszar

Tak jeśli w kolejnej komórce pamięci będzie przechowywana ta sama wartość co w komórce o indeksie [0].
Wprowadzę stosowne zmiany i dam znać czy pomogło i dzięki za poświęcony czas na czytanie moich wypocin.

Tak miałeś rację w tym tkwił problem poprawiłem i spoj zaliczył jeszcze raz wielkie dzięki za pomoc.

To prawda, w tym tkwił problem. Ale teraz kilka uwag, nie mających żadnego wpływu, na AC na spoju:

Niestaranne formatowanie kodu: Formatowanie kodu, a także, strona do formatowania kodu: http://format.krzaq.cc3 . Ładnie można też formatować w swoim ulubionym IDE.

Używanie C++, ale też C, nie wymaga samodzielnego wymyślania koła, to korzystanie z gotowych struktur i algorytmów.

Super, że samodzielnie wymyśliłeś i napisałeś algorytm sortowania, ale jest on bardzo nieefektywny.

Mikro konkurs

  1. Czy potrafisz znaleźć test, dla którego kod @patrykos125 daje błędny wynik?
  2. Skoro program “sięga” do niezaalokowanej pamięci, to czy potrafisz wyjaśnić, czemu kod dostaje WA, a nie np SIGABORT?

Mikro Nagrody :wink: :

Dla 3 najlepszych i najszybszych odpowiedzi, ewentualnie moje skromne prywatne konsultacje do wybranych kodów…

Oczywiście autor zadania jest wyłączony z pkt 1.

Wątek zablokowałem maksymalnie do końca roku, aby dać wszystkim równe szanse, więc odpowiedzi proszę wysyłaj do mnie na priv.

closed Nov 29, '20