zamiana liczby na binarna

0

chciałbym aby program wczytał liczbę, wypisał ją wspak w sposób rekurencyjny a następnie by wypisał tą liczbę binarnie. Stworzyłem cos takiego ale wypisanie jej w sposob binarny mi nie idzie, prosze bardzo o pomoc.

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

void rekurencja(int* tab,int indeks)
{
    cout<<tab[indeks]<<" ";
    if(indeks>0)rekurencja(tab,indeks-1);
}
void zamiana(int n)
{
    int i=0,tab[31];
    int licznik=0;
    while(n!=0)
    {
        tab[i++]=n%2;
        n/=2;
    }
    for(int j=i-1;j>=0;j--)
       {
           cout<<tab[j];
       }
}
int main()
{
    int n;
    cin>>n;
    int *tab = new int[n];
    for(int i=0;i<n;i++)
    {
        cin>>tab[i];

    }
  rekurencja(tab,n-1);
   cout<<endl;
  zamiana(n);



        return 0;
}

0

Do funkcji zamiana() przekazujesz n czyli jak mniemam ilość liczb a nie liczby podane przez użytkownika.

0

własnie nie wiem co wpisac aby zamienialo mi liczbę podana przez uzytkownika ..

0

Już chyba widzę o co w Twoim kodzie biega.
Musiałbyś zamienić cyfry z tablicy tab na jedną zmienną int którą to przekażesz funkcji zamiana.
Ewentualnie przerób swój program tak aby wczytał liczbę za jednym razem a nie cyfra po cyfrze.

0

Nie wiem o co chodzi, ale funkcja zamiana drukuje to co powina, czyli swój parametr wejścoiwy (n) binarnie.

0

chodzi o to ze np podaje 3
wczytuje: 1 2 3
wypisuje: 3 2 1
i te 123 zamienilo mi na binarną, atmal chyba dobrą wskazówke mi podpowiedział ale nie wiem za bardzo jak to zrobic.

0

Żeby zmienić tablicę na jednego inta możesz zrobić taki myk w Twojej pętli:

// Przed pętlą zadeklarowane jest number = 0
cin >> tab[i];
number += tab[i] * pow(10, n - i - 1);

Pamiętaj o dołączeniu biblioteki cmath.

0

o super o cos takiego mi chodzilo :) a mam jeszcze pytanie jak mogę przerobic ten program aby wczytał liczbę za jednym razem a nie cyfra po cyfrze?

0

Wczytanie nie jest problemem bo wystarczy:

int number;
cin >> number;

Musiałbyś przerobić funkcję rekurencja. Jeżeli chodzi tylko o wyświetlenie liczby to użyj modulo aby dostać ostatnią cyfrę, następnie wyświetl ją i rekurencyjnie wywołuj tą samą funkcję tylko z i / 10. Oczywiście pamiętaj o tym aby dodać jakiś warunek aby zatrzymać rekurencję ;)

0

udało mi sie po wskazowkach zrobić te zadanko tylko jest jeden mały problem, gdy wpisuje np.
123 wypisuje mi
3210 , nie rozumiem dlaczego wypisuje mi jeszcze 0 ?

#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;

void rekurencja(int indeks)
{
    cout<<indeks%10;
    if(indeks>0)
        rekurencja(indeks/10);
}
void zamiana(int n)
{
    int i=0,tab[31];
    int licznik=0;
    while(n!=0)
    {
        tab[i++]=n%2;
        n/=2;
    }
    for(int j=i-1; j>=0; j--)
    {
        cout<<tab[j];
    }
}
int main()
{
    int n;
    cin>>n;
    rekurencja(n);
    cout<<endl;
    zamiana(n);

    return 0;
}

0

Zmień warunek w if na indeks >= 10.

0

Zmieniłem na indeks>2 też działa ale dlaczego taki warunek musi być spełniony??

0

Chodzi o to żeby nie wywoływać funkcji rekurencja gdy indeks < 10. Warunek indeks > 2 działa tylko wtedy gdy pierwsza cyfra jest mniejsza lub równa 2.
Aby wszystkie liczby działały warunek musi być indeks >= 10.

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