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;
}