Pomoc w zrozumieniu działania programu

0

Hej, zaczynam dopiero swoją naukę w C++. Ostatnio miałam egzamin na którym pojawiło się takie zadanie (wyjaśnij działanie i opisz wyjście z programu):

int main()
{
    int n;
    cin >> n;
    int b[32];
    int i = 0;
    while (n > 0) {
        b[i++] = (n % 2);
        n = n / 2;
    }
    while (i > 0) {
        i--;
        cout << b[i];
    }
    cout << endl;
}

Czy mógłby mi ktoś pomóc zrozumieć działanie tego programu ?

0

Pewnie! Co jest dla Ciebie niezrozumiałe?

0

dziękuje za odpowiedz:)

int main()
{
    int n;   \\\ tutaj inicjujemy zmienną n (liczby całkowite)
    cin >> n; \\\ tutaj ją wczytujemy (czyli np. n=13)
    int b[32];  \\\ tutaj inicjujemy tablicę 32 elementową liczb całkowitych
    int i = 0;    \\\ tutaj inicjujemy zmienną i  (liczby całkowite) i nadajemy jej wartość początkową 0
    while (n > 0) {    \\\ dopóki n > 0 wykonujemy pętlę
        b[i++] = (n % 2);    \\\ tablica wynosi b [ 1 ] = 1
        n = n / 2;          \\\     n = 6
    }
    while (i > 0) {       \\ dopóki i > 0
        i--;                    \\\   odejmujemy i - 1 = 1 ????
cout << b[i];          \\\   wypisujemy b [ i ]  = 0 ??
    }
    cout << endl;
}

Niestety nie rozumiem działania tej drugiej pętli i co ona robi

0

i--; \\ odejmujemy i - 1 = 1 ????

i zmniejszamy o 1, coś jak i = i -1;

cout << b[i]; \\ wypisujemy b [ i ] = 0 ??

wyświetlamy na konsoli wartość, która jest w tablicy b na indexie i

Generalnie chodzi o wyświetlenie zawartości tablicy w drugiej pętli.

A wartość i nie jest cały czas 0, bo jest zmieniana w tym miejscu b[i++]

0

czyli tutaj : b[i++] = (n % 2) ---- definiujemy sobie tablice że:
w pierwszej pętli b [ 1 ] = 1 , a n = 6
w drugiej pętli b [ 2 ] = 0 , a n = 3
w trzeciej pętli b [ 3 ] = 1 , a n = 1
w czwartej pętli b [ 4 ] = 1 , a n = 0

czyli gdyby nie "i--" to nasz wynik byłby b [ i ] = 1011 ??
Na konsoli przy n= 13 wychodzi 1101

Nie rozumiem ile wynosi "i". Nie bardzo rozumiem tej drugiej pętli :

2

Obczaj jak działa post/pre incrementation

taki kod:

int i = 0;
cout << i++ << endl; // 0
    
int y = 0;
cout << ++y << endl; // 1

Mamy tak:

i = 0, n = 6, w pętli wykonuje się

b[0] = 6 % 2, a później dopiero i++ (post/pre incrementation), zatem b[0] = 0
n = 6/2 = 3
b[1] = 3 % 2, a później dopiero i++ (post/pre incrementation), zatem b[1] = 1
n = 3/2 = 1
b[2] = 1 % 2, a później dopiero i++ (post/pre incrementation), zatem b[2] = 1
n = 1/2 = 0, zatem koniec pętli.

Nasze i po ostatnim i++ ma wartość: 3

Teraz druga pętla:

while (i > 0) 
{
    i--;
    cout << b[i];
}

i teraz

i--; (i = 2)
wyświetlamy b[i], czyli b[2], czyli 1

i--; (i = 1)
wyświetlamy b[i], czyli b[1], czyli 1

i--; (i = 0)
wyświetlamy b[i], czyli b[0], czyli 0

Czyli wynik: 110

0

bardzo dziękuje !!

już rozumiem : D

1

Ten kod robi pawie to samo

int main() {
    int x;
    if (cin >> x) {
        cout << std::bitset<8 * sizeof(x)>(x) << '\n';
    }
    return 0;
}

https://wandbox.org/permlink/EjY0v4fggYC1P120

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