1 / 20
Jul 2019

Próbuję się uporać z przedszkolanką. Stworzyłem taki kod:

KOD USUNIĘTY (problem rozwiązano)

Założenie było takie, że pętla while będzie zwiększać wartość x o 1 (czyli ilość cukierków jakie powinna kupić) do momentu aż podzielenie przez obie grupy da liczby całkowite. Ale kod nie działa. Zrobiłem błąd logiczny czy w kodzie?

Pętla, którą zrobiłeś działa w ten sposób, że powiększa x o jeden gdy x dzieli się bez reszty przez a i przez b.
Oczywiście błędem jest średnik na końcu linii while.
Ponadto jest jeszcze jeden drobny błąd.
Gdy go znajdziesz wszystko będzie działać. Jeśli nie będziesz mógł go znaleźć, odezwij się na priv.

Usunąłem średnik i zmieniłem warunek pętli na
while ((x%a!=0) && (x%b!=0))
Program się wykonuje, ale nie tak jak powinien, teraz już wiem, że jest tu błąd logiczny i nie miało prawa wykonywać zadania poprawnie. I nie znalazłem tego małego błędu o którym pisałeś.

@edit
Jednak program nie działa, jak wpisuje liczby a=22 i b=333 to program pokazuje x jako 22, a przecież nie podzieli się to bez reszty przez 333. Tak jakby nie uwzględniał w ogóle liczby b w algorytmie.

Hmm, to dochodzi jeszcze jeden mały błąd którego myślałem, że nie zrobisz.
Masz teraz dwa małe błędy: jeden logiczny i jeden programistyczny (chociaż może ktoś inny sklasyfikowałby to inaczej… :slight_smile: ). Właściwie to nawet dwa programistyczne…
czyli łącznie trzy…

Wprowadziłem kilka poprawek i kod wygląda teraz tak:

KOD USUNIĘTY (problem rozwiązano)

Rozumiem już dlaczego operator OR działa, nie rozumiem dlaczego nie zadziałał END. Muszę się jeszcze nad tym pochylić. Teraz program działa kiedy uruchamiam go w kompilatorze, w sensie, że dla danych z przykładu z ćwiczenia, ale sędzia programu nie zalicza. Dodałem na końcu x=10, bo w innym przypadku pętla liczyła następne przypadki od poprzednio zapisanego x po zakończeniu pętli. Zastanawiam się czy tylko pozornie rozwiązałem problem, czy brnę coraz dalej w błędy :smile:

Już jest bardzo blisko. Przypisanie dla x lepiej zrobić raz bezpośrednio przed wczytaniem a i b, chociaż tak też działa. Wysłałem Ci na priv kompletny opis błędów, ostatniego nie poprawiłeś.
Testowanie kodu zrób na ideone, w szczególności zrób przypadek kilku testów. Jak uzyskasz zaliczenie usuń kod, jest zbyt blisko kompletnego rozwiązania

Ok, sędzia zaliczył program, więc kod usunąłem. Dzięki za pomoc :slight_smile:

6 months later

Hej,
mam podobny problem z przedszkolanka jak opisany powyżej. Pomogłeś w tym przypadku czy możesz podesłać mi info co powinienem zmienić albo gdzie robię błąd?

Jeśli chcesz pomocy to najpierw czytelnie prześlij swój kompletny kod, najlepiej jako link do Ideone

  1. Zmienne globalne nie sa dobra praktyka dla duzych programow.
  2. Algorytm nie jest optymalny.
  3. Podpowiedz najwazniejsza: Zwiekszasz x , ale gdy przyjdzie nastepny zestaw danych to …
  4. Brakuje wypisywania wyniku :thinking:

Dzięki za szybką odpowiedz. Mój kompletny kod wygląda tak:

Założenie miałem podobne jak autor wątku i problem również podobny: w pętli while ((x%a!=0) && (x%b!=0)) program nie uwzględnia drugiej części dot. liczby b.

Warunek musisz przemyśleć.
Jakie dostajesz wyniki dla danych wejściowych z zadania?
(Wkleja się je do okienka dane wejściowe na ideone.)
Czy nie za wcześnie wychodzi z pętli?

Tak, jak Ci napisał @pawoj20 masz drobny (duży jak kto woli :slight_smile: ) błąd w warunku pętli. Po poprawie tego błędu jest zaliczone. I, jak już było wspomniane, nie używaj zmiennych globalnych jeśli nie musisz. Nie jest to tutaj błąd, ale wyrabia to złe nawyki.
Gdy uzyskasz akceptację usuń link do kodu

2 years later

Hej, czy dane wejściowe mamy ustawić na sztywno czy scanfem mają być wprowadzane?

dane trzeba czytac z wejscia standardowego. scanf to dobry sposób dla jezyku C/C++

2 months later

Cześć, mam podobny zamysł co kolega na samej górze. Program działa mi dla wartości wejściowych i wypisuje wszystko tak jak powinno być na wyjściu. Jednakże sędzia nie zalicza programu. Sam nie jestem w stanie znaleźć błędu w swoim programie. Może jest ktoś w stanie nakierować mnie na niego? Tu mój program - (usunięty link)

Dzięki wielkie za pomoc, już poprawiłem i działa:)