liczby binarne

0

Witam

Mam napisac program ktory po wprowadzeniu dwoch liczb w systemie dwojkowym, zamieni je na system 10 i doda je do siebie.
Czy sa jakies artykuly na temat systemow, konwersji itp szukalem artykulow, z ktorych w prosty sposob dowiem sie jak mniej wiecej zaczac, ale nic konkretnego nie znalazlem.

0

Ty chyba sobie kpisz z tym, że szukałeś i nic nie było.
Jakie hasła wpisywałeś w Google?

0

Spokojnie Patryk.Artykuly ktore znalazlem nie objasnialy tego w prosty sposob. Moze inaczej powinienem sformulowac pytanie. Mam tam plan jakis, ale wszystko rozchodzi sie o proste komendy. Nie mam pojecia jakimi komendami zmienic a i b na system 10 bez uzycia tablicy znakow i to chyba jest glowny problem ;/bo na reszte to juz tak mniej wiecej mam pomysl jak to zrobic

0

Ależ ja jestem spokojny :P

Artykuly ktore znalazlem nie objasnialy tego w prosty sposob.

No ale systemy liczbowe to zakres gimnazjum...
Czego w tamtych artykułach nie rozumiesz? Podnoszenia do potęgi, modulo?

0

Tak systemy liczbowe to zakres gimnazjum, ale na papierze;p te liczenie itp. Ale żeby to zapisać w programie to już nie jest tak kolorowo zwłaszcza dla laika ;p.
Wprowadz liczbe a i b binarnie - czy zadeklarowanie wartosci musi byc jakies konkretne czy wystarczy zwykly int
Zamien (a i b) na system 10, Dodaj a i b no wlasnie i tu ta zamiana ;/. Podam np 0110 i 1000 i teraz chcialbym zeby program to wlasnie mi przeczytal jako zwykla liczbe w systemie 10. No i to jest wlasnie najwiekszy problem...
Wyswietl wynik

Moze patryk masz jakis konkretny artykul zebym mógł cos wynieść z niego i zastsowac w swoim kodzie ? Z gory dzieki

0

czy zadeklarowanie wartosci musi byc jakies konkretne czy wystarczy zwykly int

Musisz wczytywać do tablicy znaków.

Podam np 0110 i 1000 i teraz chcialbym zeby program to wlasnie mi przeczytal jako zwykla liczbe w systemie 10. No i to jest wlasnie najwiekszy problem...

A jak zamieniłbyś 0110 na papierze na system dzisiętny?

1

Zrób to tak. Wczytaj dwa stringi np. 10010101 i 10101. Napisz sobie funkcję zwracającą wartość zamienionej postaci z binarnej na dziesiętną, czyli w pętli for ustaw iterator na ostatniej pozycji tego stringa i sprawdzaj jego znak tzn. jeżeli i-ty znak stringa to '1' to do wyniku dodaj 2n, n oznacza kolejne iteracje. Czyli np. wczytujesz 1001 ustawiasz się na ostatniej 1 i sprawdzasz. Będziesz miał 1 * 20 + 0 * 21 + 0 * 22 + 1 * 23. Dla drugiego stringa wywołujesz tą samą funkcje i następnie zwróconą wartość sumujesz z wartością pierwszego stringa. Może trochę pokręciłem, ale pedagogiki nie skończyłem jeszcze, dopiero II technikum :D

0

Dzieki rafalek i patryk.Zacząłem od czegos takiego latwiejszego na jednej liczbie, poczytalem tez o co chodzi z tym stringiem. Już wiem mniej wiecej jak to zastosowac, teraz problem pojawia sie w momencie gdybym chcial zeby program pokazywal mi dwie liczby po konwersji. Ma ktos jakis pomysl ?


int main(){

    string liczba;
    int dec=0,size1,size2,i=0;

    cout<<"podaj liczbe w systemie dwojkowym : ";
    cin>>liczba;

    size1=size2=liczba.length()-1;
    
    for(i=0;i<=size1;++i) if(liczba[i]=='1')dec+=pow(2,size2--);
                            else size2--;
        
    cout<<"liczba w systemie dziesietnym : "<<dec<<endl;

    return 0;   
}
0

Rafal juz tlumacze;p. Bo zobacz cos tam porobilem tak jak mowiles i jest git, ale udalo mi sie zrobic cos takiego na wprowadzenie ale tylko 1 liczby,a dąże do wprowadzenia dwóch liczb i dodaniach ich dosiebie. Jednak nie wiem jak tutaj zmienić, dodać kodu, aby to uzyskać.

int main(){

   string liczba;
    int dec=0,size1,size2,i=0;

    cout<<"podaj liczbe w systemie dwojkowym : ";
    cin>>liczba;

    size1=size2=liczba.length()-1;
    
    for(i=0;i<=size1;++i) if(liczba[i]=='1')dec+=pow(2,size2--);
                            else size2--;
    //tutaj własnie mam dec+dec jako wynik. Jednak chciałbym zebym mogl miec zmienna np dec1 i to wtedy była druga liczba binarna(po konwersji na system10). Wtedy miałbym dec+dec1 czyli suma dwóch liczb wpisanych na początku
**cout<<"Suma dwóch liczb binarnych zapisana w systemie 10 to"<<dec+dec<<endl;**
    return 0;   
}
0

Masz dla n liczb :D

 #include <bits/stdc++.h>


using namespace std;

int zamiana(string liczba)
{
    int dec=0,size1,size2,i=0;
    size1=size2=liczba.length()-1;
    for(i=0; i<=size1; ++i)
    {
        if(liczba[i]=='1')dec+=pow(2,size2--);
        else size2--;
    }

    return dec;

}


int main()
{

int ile;
cout<<"Wprowadz ile liczb chcesz wczytac: ";
cin>>ile;
string *liczby = new string [ile];
for(int i = 0 ; i < ile ; i++)
{
    cout<<"Wprowadz " << i+1<<" liczbe: ";
    cin>>liczby[i];
}
long int suma = 0 ;
for(int i = 0 ; i < ile ; i++)
{
    cout<<liczby[i]<<" to: "<<zamiana(liczby[i])<<endl;
    suma+=zamiana(liczby[i]);
}

cout<<"Suma tych "<<ile<<" liczb binarnych wynosi: "<<suma<<endl;


    return 0;
}

}
0

@rafcio98 bardzo nieoptymalna ta zamiana, można to zrobić o wiele szybciej.

0

Dzieki za pomoc o to dokładnie chodzilo,ale troche dziwnie w tych zamianach np o co chodzi w tej linijcie int zamiana(string liczba) . Bo troche te zmiany sa nie zrozumiale jak dla mnie i wydaje mi sie ze mozna to jeszcze inaczej zapisac, ale mogę się mylić.
Nie chciałbym tego kopiować żywcem itp bo chciałbym po prostu to zrozumieć i się nauczyć więc szukam innego rozwiazania

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