• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem z algorytmem dodawania binarnego w c++

VPS Starter Arubacloud
0 głosów
1,920 wizyt
pytanie zadane 23 lutego 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
edycja 23 lutego 2017 przez Jakub 0

hej ,w racji ćwiczeń w padłem na pomysł by stworzyć w C++ program sumujący liczby w systemie binarnym .

na początku szło mi dość dobrze jednak niezależnie jakie dane się wprowadzi to wynik wynosi 0 (oczywiście w systemie binarnym) Program pisałem całkowicie sam i też nie jestem do końca pewny czy ten algorytm ma jakiś sens ): Wiem że kod może być mało czytelny ale starałem się go dokładnie opisać , ale ktoś kto zna zasadę działania sumatora binarnego to powinien zrozumieć (oczywiście algorytm postępowania nie jest taki sam jak w ALU). Będę bardzo wdzięczny jak ktoś poświęci czas i mi pomoże (:

Pozdrawiam i dziękuje za wszelkie komentarze ...

 

#include <iostream>
#include <cstdlib>

using namespace std;

char AC[4]; //liczby binarne zaimplementowane w typie char by dalo sie je zapisac bez uzycia spacji
char BC[5];

int A[4]; //pierwsza liczba binarna
int B[5]; //druga liczba binarna
int C[5]; //przeniesienie logiczne
int S[5]; //suma logiczna             //o jeden bit więcej by nie doszło do przepełniena

int bufor;

int main()
{
    cout<<"pierwsza liczba : ";
    cin>>AC[0]>>AC[1]>>AC[2]>>AC[3]; //wprowadzamy liczby w formacie char
    cout<<"druga liczba : ";
    cin>>BC[0]>>BC[1]>>BC[2]>>BC[3];

    for(int i=0; i<4; i++) //konwersia na int
    {
        A[i]=atoi(AC);
        B[i]=atoi(BC);
    }


    for(int i=0; i<4; i++) //funkcia dodajaca zera i jedynki (a+b+c) i dajaca wynik w systemie dziesietnym konwertowanym na sume logiczna i przeniesienie logiczne
    {
        bufor = C[i]+A[i]+B[i]; //wynik tymczasowo w buforze

        if(bufor==0) //instrukcia logiczna odpowiadajaca za sume i przeniesienie bitowe
        {
            S[i]=0;
            C[i+1]==0;
        }
        if(bufor==1)
        {
            S[i]=1;
            C[i+1]==0;
        }
        if(bufor==2)
        {
            S[i]=0;
            C[i+1]==1;
        }
        if(bufor==3)
        {
            S[i]=1;
            C[i+1]==1;
        }
    }

    S[4]=C[4]; //na koniec zostaje tylko ewentualne przeniesienie (do wyniku dodajemy ostatnie C)

    cout<<endl;
    cout<<S[0]<<S[1]<<S[2]<<S[3]<<S[4]<<endl; //wyswietlanie wyniku dodawania

    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 23 lutego 2017 przez Sedi Stary wyjadacz (10,200 p.)
    for(int i=0; i<4; i++) //konwersia na int
    {
        A[i]=atoi(AC);
        B[i]=atoi(BC);
    }

Po przypisaniu jak powyżej, każdy wyraz w tablicy A[i] oraz B[i] będzie miał całą tablicę charów, które wczytałeś wcześniej

komentarz 24 lutego 2017 przez Jakub 0 Pasjonat (23,120 p.)
Faktycznie , śmieszny błąd , Mam nadzieję że teraz zadziała :)
komentarz 24 lutego 2017 przez Jakub 0 Pasjonat (23,120 p.)
for(int i=0; i<4; i++)

{

    A[i]=atoi(AC[i]);

    B[i]=atoi(BC[i]);

}    

            

Tylko że jak chce konwertować na pojedyncze szufladki w tablicy to nie działa , próbowałem wielu sposobów i nie mogę się doczytać w internecie o co chodzi .

1
komentarz 3 marca 2017 przez Sedi Stary wyjadacz (10,200 p.)
Dobrze kombinujesz. Jednocześnie zauważ, że funkcja atoi nie konwertuje pojedyńczych charów na inty. Taka konwersja jest znacznie prostsza, wystarczy że zamiast atoi napiszesz po prostu int :) Oraz odejmiesz 48. Dlaczego 48 ? Wskazówką jest tablica ASCII. Liczba 1 ma 49 znak w tablicy charów. Dlatego jeśli odejmiesz od 49, 48, wynikiem będzie pożądana przez Ciebie jedynka.

Podobne pytania

+1 głos
1 odpowiedź 137 wizyt
pytanie zadane 18 października 2021 w Rozwój zawodowy, nauka, praca przez Rykez Początkujący (250 p.)
0 głosów
1 odpowiedź 535 wizyt
pytanie zadane 30 stycznia 2017 w Egzaminy zawodowe przez Sznurek11 Obywatel (1,000 p.)
0 głosów
0 odpowiedzi 76 wizyt
pytanie zadane 24 kwietnia 2020 w C i C++ przez Oskardes Użytkownik (600 p.)

92,961 zapytań

141,924 odpowiedzi

321,160 komentarzy

62,295 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...