• 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++

Object Storage Arubacloud
0 głosów
1,791 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ź 121 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ź 461 wizyt
pytanie zadane 30 stycznia 2017 w Egzaminy zawodowe przez Sznurek11 Obywatel (1,000 p.)
0 głosów
0 odpowiedzi 71 wizyt
pytanie zadane 24 kwietnia 2020 w C i C++ przez Oskardes Użytkownik (600 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...