Wątek przeniesiony 2020-03-22 14:15 z C/C++ przez kq.

Bug w kodzie.

2020-03-22 04:38

Rejestracja: 4 miesiące temu

Ostatnio: 20 godzin temu

0

Hello. Mam kod na zliczenie wszystkich zer w kodzie(musi to być rekurencja ) , ale kompilator mi wypisuje 0 bez konca , ktoś podpowie, gdzie mam błędy?


#include <stdio.h>
#include <stdlib.h>
void szukanie_0(int liczba){
int n=0;
int z=2;

while (liczba !=0)
{szukanie_0(liczba/z);
if(liczba%2==0) {n++;
z=z*2;

}
printf("%d", n);
}

}

int main()
{
    int i ;
    scanf("%d", &i);
    szukanie_0(i);
    return 0;
} ```

Pozostało 580 znaków

2020-03-22 11:15

Rejestracja: 2 miesiące temu

Ostatnio: 9 godzin temu

0

Wg mnie problemem jest pętla while. Warunek nigdy nie będzie spełniony, ponieważ we wnętrzu tej pętli nie modyfikujesz zmiennej "liczba". Wydaje mi się, że jeśli masz to zrobić z wykorzystaniem rekurencji, to ta pętla nie będzie konieczna.

Pozostało 580 znaków

2020-03-22 12:05

Rejestracja: 10 lat temu

Ostatnio: 6 godzin temu

1

Dlaczego duplikujesz temat? https://4programmers.net/Forum/C_i_C++/337716-zliczanie_0_w_postaci_binarnej_liczby_calkowitej

Twój główny błąd polega na tym, że próbujesz napisać wywołanie rekurencyjne nie rozumiejąc ani trochę rekurencji. W dodatku nie rozumiesz jak rozwiązać problem w sposób klasyczny. Niezłe combo. Skoro ma być rekurencja to po co Ci pętla? Tak wyglądałyby minimalne zmiany, które spowodują, że nie dostaniesz zer w nieskończoność

void szukanie_0(int liczba){
    if(liczba == 0)
        return;
    int n=0;
    int z=2;

    szukanie_0(liczba/z);
    if(liczba%2==0) {
        n++;
        z=z*2;
    }
    printf("%d", n);
}

Funkcja nadal jest błędna i nie rozwiązuje Twojego problemu. Jeżeli chcesz zliczyć ilość zer w liczbie to Twoja funkcja do zliczania wyglądałaby mniej więcej tak (bez rekurencji)

int countZeros(int num){
    int counter = 0;
    if (num< 0){
        num= -num;
    }
    while (num> 9){
        if (num% 10 == 0){
            ++counter;
        }
        num= num/ 10;
    }
    return counter ;
}

Teraz możesz przerobić ją sobie na rekurencje jak już nauczysz się co to jest. Chociaż znając życie, jak chwilę poczekasz to pojawi się zaraz jakiś nadgorliwy użytkownik i przerobi ten kod za Ciebie ;)


edytowany 6x, ostatnio: several, 2020-03-22 12:18

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0