program konwertujący liczbę w dowolnym systemie na liczbę w dowolnym systemie

0

Witam, na samym poczatku mialem napisac program konwertujacy liczbe z 2 na 10 i na odwrot, a takze z 16 na 10 i na odwrot. Wszystko działa pięknie ale teraz jak tak w tytule mam zrobić program konwertujący liczbę w dowolnym systemie na liczbę w dowolnym systemie.

Tutaj jest kod gdzie wykonałem z:

  • 2 na 10,
  • 10 na 2,
  • 10 na 16, z 16 na 2 nie robiłem bo sie robi analogicznie.

Jednakże nie wiem jak ogarnać jakiś uniwersalny kod, zeby wlasnie wykonywal z dowolnego na dowolny, bo wiadomo tutaj mamy jakies podobieństwa, ale robić to na piechote to jest masakra czyt.

  • z 2 na 3 i na odwrot
  • z 2 na 4 i na odwrot,
    etc....

I stawiam, ze tego tak sie nie robi, a raczej jestem pewny, ale nie potrafie wymyślić jak.
Najlepiej, zeby to bylo mniej wiecej tak jak ja zrobilem, bo najlatwiej by mi bylo wszystko ogarnac i zrozumiec :P Z tego wgledu, ze na zajeciach mielismy podstawy podstaw tylko z C.
Bo przykładowo to: https://4programmers.net/Forum/C_i_C++/228212-konwersja_systemow_liczbowych?p=1005274#id1005274 trochę ciezko mi ogarnac :D

Z góry dzięki!

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
void DecToBin(int l)
{
    int i;
    int length = 0 ;
    int temp = l;
    for(; 0<l; l=l/2)
    {
        length = length+ 1;
    }

    char bin[length];

    for(i = 0; i<sizeof(bin); i ++ )
    {
        bin[i] = temp%2;
        temp = temp /2;
    }
    i = length;
    for(; 0<i; i--)
    {

        printf("%d",bin[i-1]);
    }
}

void BinToDec(int l)
{
    int i;

    int reszta = 0 ;
    int decimal =0;


    for(i = 0 ; 0 < l; i++)
    {
        reszta = l%10;
        decimal = decimal + reszta*pow(2,i);
        l = l/10;
    }
    printf("Wartosc dziesietna to: %d ", decimal);
}

void DecToHex(int l)
{
    int temp = l;
    int i;
    int length = 0 ;

    for(; 0<l; l=l/16)
    {
        length = length+ 1;
    }

    char bin[length];

    for(i = 0; i<sizeof(bin); i ++ )
    {
        int reszta = temp%16;
        if(reszta>=10)
        {
            reszta = 55 + reszta;
        }
        else
            reszta = 48 + reszta;

        bin[i] = reszta;
        temp = temp /16;
    }
    i = length;
    for(; 0<i; i--)
    {
        printf("%c",bin[i-1]);
    }
}
int main()
{
    printf("Co chcesz zrobic?\n1.Zamienic liczbe dziesietna na binarna\n2.Zamienic liczbe binarna na dziesietna\n3. Zamienic liczbe dziesietna na szestastkowa\n");
    int number,l;
    scanf("%d", &number);
    switch(number)
    {
    case 1:
        printf("Podaj liczbe, ktora chcesz zamienic\n");
        scanf("%d", &l);
        DecToBin(l);
        break;

    case 2:
        printf("Podaj liczbe binarna, ktora chcesz zamienic\n");
        scanf("%d", &l);
        BinToDec(l);
        break;
    case 3:
        printf("Podaj liczbe, ktora chcesz zamienic\n");
        scanf("%d", &l);
        DecToHex(l);
        break;
    }

    return 0;
}

1

W sieci bez problemu możesz znaleźć algorytm konwersji z jegnego systemu liczbowego na inny. Uniwersalizm powoduje, że będziesz musiał napisać tylko jedną funkcję, której będziesz mógł użyć do konwersji w obie strony.

Tak więc najpierw poszukaj informacji, wybierz najlepszy sposób, a dopiero na sam koniec zajmij się pisaniem kodu. Zobacz na wiki jak wygląda samo przeliczanie z jednego systemu na drugi – szybko załapiesz, a implementacja pójdzie z górki.

Edit: patrz, nawet Pan Zelent nagrał tutorial – Zamiana liczb - system dwójkowy, szesnastkowy, ósemkowy, dziesiętny. ;)

0

Jak chcesz zamienić np. liczbę binarną na szesnastkową, to najpierw binarną zamieniasz na dziesiętną, a potem tą dziesiętną na szesnastkową. Ograniczysz w ten sposób ilość potrzebnych funkcji, aby robić dowolne zamiany.

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