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

Zamiana na liczby binarne, dodanie do tablicy i działania na nich

Object Storage Arubacloud
0 głosów
1,124 wizyt
pytanie zadane 28 listopada 2016 w C i C++ przez Bartłomiej Kalka Początkujący (280 p.)
edycja 28 listopada 2016 przez Bartłomiej Kalka

Witam. Mam problem z tym zadaniem. Nie wiem jak dokładnie to napisać, ale potrzebuje programy który:

1. Zamieni 2 podane liczby na binarne i zapisze je do dwóch osobnych tablic.

2. Doda je bitowo.

 

Ogólnie bardzo prosty algorytm, ale nie wiem jak dokładnie to napisać.

 

Moja wizja jest taka:            

      Zrobić funkcję która dostanie liczbę typu int i teraz nie wiem czy ta funkcja ma być typem string? Chcę by zwróciła mi ciąg znaków, na którym później będę mógł działać w mainie. Co w moim kodzie jest źle byłbym wdzięczny za skorygowanie moich błędów ;/

 


#include <iostream>
#include <string>
using namespace std;



string zamiana(int liczba, string liczby_binarne[])
{

    int pomoc=0;

    while(liczba>0)
    {
        pomoc=liczba%10;      // pomoc jest to pierwsza liczba od prawej strony

        while(pomoc>=0)     // petla bedzie sie wykonywala dopoki pomoc osiagnie 0
            {                           // dla zera zachowa sie jak dla liczby parzystej

                                        // do tego stringa zapisuje ta pierwsza liczbe od prawej

            if(pomoc%2==1)  // jesli 7/2 da nieparzysta to
            {
                liczby_binarne[0]+="1";             //  dodaje do stringa string1 , jedynke
                pomoc/=2;               //  i dzieli 7/2 na dwa i znowu
            }
            else
            {
               liczby_binarne[0]+="0";
                pomoc/=2;
            }

            }

liczba/=10;}

}


int main()
{

string inna_tablica[1];
int n;

    cout << "Jaka liczbe dziesietna zapisac binarnie do tablicy: " << endl;
    cin >> n;
    zamiana(n,inna_tablica);

    return 0;
}

2 odpowiedzi

0 głosów
odpowiedź 28 listopada 2016 przez Predo Bywalec (2,260 p.)

Witaj. Obawiam się, że troszkę źle zinterpretowałeś polecenie nr 1. Jaki byłby sens tworzenia tablicy, jeśli wpiszesz całą liczbę binarną do jednej komórki? smiley Zapewne autorowi zadania chodziło o to, aby każda cyfra tej liczby znalazła się w oddzielnej komórce. Nie wiem, czy to jest twoje szkolne zadanie, czy robisz jakiś projekt, ale nie sprecyzowałeś żadnych założeń. Czy tablice mogą mieć stały rozmiar czy mają być dynamiczne?

Napisałem kod funkcji realizującej zamianę liczby dziesiętnej na binarną w oparciu o tablicę dynamiczną. Dodatkowo funkcja odwraca liczbę aby w pierwszej komórce tablicy znajdowała się cyfra najniższej wagi a w ostatniej komórce najwyższej wagi. Funkcja zwraca tablicę typu int.

int *zamien(int liczba)
    {
        int *tablica = new int; // tablica dynamiczna
        int i = 0; // licznik tablicy
        do
        {
            if(liczba % 2 == 1)
            {
                tablica[i] = 1;
                liczba = (liczba - 1) / 2;
            }
            else
            {
                tablica[i] = 0;
                liczba = liczba / 2;
            }
            i++;
        }while(liczba != 0);

        // odwracamy kolejność
        int tabLiczba[i]; // tablica zwracana
        int k = i; // licznik tablicy zwracanej
        for(int j=0;j<i;j++)
        {
            tabLiczba[j] = tablica[k-1];
            k--;
        }
        return tabLiczba;
    }

Spróbuj na bazie tego dalej pokombinować.

0 głosów
odpowiedź 1 grudnia 2016 przez Bartłomiej Kalka Początkujący (280 p.)
Dziękuje bardzo już sobie poradziłem :)
komentarz 2 grudnia 2016 przez Predo Bywalec (2,260 p.)
Może podzielisz się rozwiązaniem? :)
komentarz 3 grudnia 2016 przez Bartłomiej Kalka Początkujący (280 p.)
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;

string zamiana(int liczba)
{
    string wynik;
    int pomoc=0;
    while(liczba>0)
    {

    pomoc=liczba%10;
        while(pomoc>=0)
            {
                     if(pomoc==0)
                    {
                            wynik=string("0")+wynik;
                            pomoc=-1;
                                                                    }
                   else if((pomoc%2)==1)
                        {
                           wynik=string("1")+wynik;
                           pomoc/=2;
                                                                        }
                    else if((pomoc%2)==0)
                        {
                            wynik=string("0")+wynik;
                            pomoc/=2;
                                                                    }

                }

liczba/=10;
}
return wynik;
  }
int main()
{
    string tablica[3];
    int m,n,s;
    srand(time(NULL));

    m=rand()%1001;
    n=rand()%1001;
    tablica[0]= zamiana(n);
    tablica[1]= zamiana(m);
    s=m+n;
    tablica[2]= zamiana(s);

   cout << "1. liczba: " << endl;
   cout << "Dziesietnie: " << m << " | Binarnie: " << tablica[0] << endl;
   cout << "2. liczba: " << endl;
   cout << "Dziesietnie: " << n << " | Binarnie: " << tablica[1] << endl;
   cout << "Suma tych liczb liczba: " << endl;
   cout << "Dziesietnie: " << s << " | Binarnie: " << tablica[2] << endl;


    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 375 wizyt
pytanie zadane 29 października 2016 w C i C++ przez Ayaka Nowicjusz (170 p.)
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 16 grudnia 2016 w C i C++ przez luthien Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 1,272 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez niezalogowany

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...