Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zaskakujący wynik programu


Rekomendowane odpowiedzi

Opublikowano
Chciałem napisać prosty program, który zamieni mi liczbę dziesiętną na binarną. Gdy wpiszę np. liczbę 10, 15 lub 20 to pojawia się problem tylko przy zapisie końcowym bitu nr 3 tej liczby. Zawsze jest w nim zero, nawet jak powinna być jedynka.
 
Proszę nie zwracać uwagi na brak odpowiednich pętli, ponieważ kod przerabiałem na coraz prostszy, żeby spróbować zrozumieć dlaczego bit nr 3 się "psuje".
 
#include <iostream>
#include <windows.h>


using namespace std;
int main()
{
   int liczba, bit[3];


    cout << "Liczba dziesietna: ";
    cin >> liczba;
    int i=0, j;
    do
    {
        j=i;
        bit[j]=liczba%2;
        cout << liczba << " | 2   r=" << bit[j] << endl;
        if(bit[3]==true){cout << "\a";}
        liczba/=2;
        i++;
        Sleep(800);
    }while(i<=4);


    cout << bit[4];
    Sleep(800);
    cout << bit[3] << "\a";
    Sleep(800);
    cout << bit[2];
    Sleep(800);
    cout << bit[1];
    Sleep(800);
    cout << bit[0];


    return 0;
}

 

Nigdy nie rozmawiaj z idiotą. Najpierw sprowadzi Cię do swojego poziomu, a później pokona doświadczeniem.

Opublikowano

1. Deklarujesz tablicę z 3 elementami.

int liczba, bit[3];

A korzystasz potem z jej 4 i 5 elementu.

if(bit[3]==true){cout << "\a";}

cout << bit[4];

 

2.Jeśli chcesz pokazywać proces tworzenia takiej liczby to korzystaj z dynamicznych tablic.

Bo jak chcę zamienić 63 to w tych twoich 3 miejscach w tablicy się nie zmieszczę.

http://cpp0x.pl/dokumentacja/standard-C++/vector/819

 

3.Jeśli chcesz wypisać dane pod koniec to skorzystaj z pętli.

 

4.Nie musisz duplikować wartości zmiennej i cały czas do j.

Lepszą pętlą zamiast do..while() byłoby for()

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-for/294

 

5. Co do if'a to tak na przyszłość

Nie musisz pisać ==true w if'ach jest tak, że jeśli nie podasz do czego porównujesz to domyślnie

Wartość prawdziwa - przechodzi dalej

Wartość nieprawdziwa - nie przechodzi dalej.

TuByłaSygnatura.png

Opublikowano

1. Deklarujesz tablicę z 3 elementami.

int liczba, bit[3];

A korzystasz potem z jej 4 i 5 elementu.

if(bit[3]==true){cout << "\a";}

cout << bit[4];

 

2.Jeśli chcesz pokazywać proces tworzenia takiej liczby to korzystaj z dynamicznych tablic.

Bo jak chcę zamienić 63 to w tych twoich 3 miejscach w tablicy się nie zmieszczę.

http://cpp0x.pl/dokumentacja/standard-C++/vector/819

 

3.Jeśli chcesz wypisać dane pod koniec to skorzystaj z pętli.

 

4.Nie musisz duplikować wartości zmiennej i cały czas do j.

Lepszą pętlą zamiast do..while() byłoby for()

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-for/294

 

5. Co do if'a to tak na przyszłość

Nie musisz pisać ==true w if'ach jest tak, że jeśli nie podasz do czego porównujesz to domyślnie

Wartość prawdziwa - przechodzi dalej

Wartość nieprawdziwa - nie przechodzi dalej.

 

1. Fakt, nie zwróciłem na to uwagi. Do tej pory byłem przekonany, że jak dam int zmienna[3] to znaczy, że są tam 4 elementy, bo zaczynamy od zera.

2 i 3. Tak jak pisałem, uprościłem program jak tylko się dało i przestałem kontynuować pracę nad nim, bo chciałem sprawdzić czemu nie działa mi akurat bit nr 3, gdy wpiszę liczbę 10 lub 15 (która ma 4 bity w binarnym).

4. Tak, wiem, ale przez to, że mi wychodził ten błąd zacząłem kombinować na różne sposoby. :)

5. Dzięki za radę.

Nigdy nie rozmawiaj z idiotą. Najpierw sprowadzi Cię do swojego poziomu, a później pokona doświadczeniem.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...