Dominika 608 wyśw. 01-07-2024 22:45

zad.dom 2 - Zadanie 23






Proszę o podpowiedź, gdzie jest błąd

int liczba=6;

 int i=1;

int a=1;

while(i<=liczba)

{System.out.print("\nLiczba " + i + ", liczby z przedziału podzielne przez tę liczbę: ");

  while(a<=liczba)

  {if(a%i==0){System.out.print(a + " ");};a++; };

  i++;}




programowanie Dodaj post do ulubionych Poproś o pomoc
s.gugula 02-07-2024 09:14

W wewnętrznej pętli każdorazowo zwiększana jest wartość a, natomiast nie jest ona nigdzie z powrotem ustawiana na wartość 1 przy kolejnym wejściu do pętli zewnętrznej. Czyli po pierwszym obejściu pętli wewnętrznej a = 7 i rozpoczyna się drugi obieg pętli zewnętrznej, ale a dalej zostaje równe 7, dlatego potem nic nie jest wypisywane ;)

Trzeba więc na początku ciała pętli zewnętrznej ustawić z powrotem a = 1 i będzie ok :)


Artur 04-07-2025 09:17

1 - A ja trochę tego nie rozumiem, czemu to nie działa, bo przecież jest a++ w drugim while to ta wartość zmiennej a chyba nie powinna pozostawać stała

2 - Dlaczego w ifie jest a%i, a nie i%a?


s.gugula 04-07-2025 10:54

1 - Hmm, mam wrażenie, że w poprzednim komentarzu udzieliłem odpowiedzi na pytanie co tam jest nie tak ;) a się zmienia, ale właśnie nigdy nie wraca na wartość równą 1.

2 - Bo w przypadku kodu napisanego przez koleżankę a jest dzielną, a i jest dzielnikiem.


Artur 04-07-2025 12:35

1 - Czyli ten początkowy kod koleżanki sprawdza po kolei dzielne i je odpowiednio wypisuje, ale jakby bez powtórzeń tak?


s.gugula 05-07-2025 12:18

On wypisuje te dzielne, ale niestety tylko dla pierwszej liczby (dla jedynki). Po każdorazowym ustawieniu następnie a = 1 już będzie działało to poprawnie.