Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int get_system();
- void system_transfer(int from_number, int to_system, char *result);
- int main(int argc, char **argv)
- {
- int from_system; /* soustava z ktere prevadime */
- int to_system; /* soustava do ktere prevadime */
- int from_number; /* cislo ktere prevadime */
- char tmp[255]; /* pomocna promenna do ktere si ukladam cislo jako retezec */
- char to_number[255]; /* vysledne cislo */
- memset(to_number, '\0', 255); /* radeji vynuluju at to pak nevypisuje nesmysly */
- from_system = get_system(); /* nactu soustavu z ktere prevadim */
- printf("Zadejte cislo v %d soustave: ", from_system);
- scanf("%s", tmp); /* nactu cislo jako retezec */
- from_number = strtol(tmp, NULL, from_system); /* prevedu cislo v soustave from_system na cislo v 10tkove soustave */
- to_system = get_system(); /* nactu soustavu do ktere budu prevadet */
- system_transfer(from_number, to_system, to_number); /* vypocitam cislo, bude ulozene v to_number */
- printf("Cislo %s ve %d soustave je %s ve %d soustave.\n", tmp, from_system, to_number, to_system);
- return 0;
- }
- /*
- Funkce, ktera nacte soustavu, pokud nebude mezi 2-20 tak bude opakovat
- zadavani
- */
- int get_system()
- {
- int system;
- int ok;
- do
- {
- printf("Zadejte soustavu (2-20): ");
- ok=scanf("%d", &system);
- if (ok==0) printf("Chyba zadani! Ocekavam integer!\n");
- else if (system<2 || system>20) printf ("Chyba zadani, ocekavam cislo v rozsahu 2-20, zkuste to znovu\n");
- fflush(stdin); //vymaze obsah stdin a muzeme dál posílat dalsi data
- } while (ok==0 || system<2 || system>20);
- return system
- ;
- }
- /*
- Funkce, ktera prevede cislo from_number v 10tkove soustave na
- soustavu to_system a cislo ulozi do result jako pole znaku
- kvuli A-Z
- */
- void system_transfer(int from_number, int to_system, char *result)
- {
- int tmp_number = from_number; /* cislo ktere prevadime, ale budeme ho delit */
- char to_number[255]; /* vysledne cislo */
- int tmp_rest; /* tady budem ukladat zbytky po deleni */
- int i = 0; /* kolikaty zbytek pocitame */
- int j;
- do
- {
- tmp_rest = tmp_number % to_system; /* vypocitame zbytek */
- if (tmp_rest > 10) /* pokud je zbytek vetsi jak 10 */
- to_number[i] = (char)(tmp_rest + 54); /* prevedeme na pismeno (viz. ASCII tabulka) */
- else /* pokud je zbytek mezi 0-10 */
- to_number[i] = (char)(tmp_rest + 48); /* zapiseme jako pismeno cisla (viz. ASCII tabulka) */
- i++;
- } while ((tmp_number = tmp_number / to_system) != 0); /* pokud vysledek deleni neni nula, pokracujeme dal */
- /* nakonec musime zbytky obratit a ulozit do result */
- for (j = 0; j < i; j++)
- result[j] = to_number[i-j-1];
- }
Add Comment
Please, Sign In to add comment