Guest User

Untitled

a guest
Apr 24th, 2018
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. int get_system();
  8. void system_transfer(int from_number, int to_system, char *result);
  9.  
  10. int main(int argc, char **argv)
  11. {
  12. int from_system; /* soustava z ktere prevadime */
  13. int to_system; /* soustava do ktere prevadime */
  14. int from_number; /* cislo ktere prevadime */
  15.  
  16. char tmp[255]; /* pomocna promenna do ktere si ukladam cislo jako retezec */
  17. char to_number[255]; /* vysledne cislo */
  18. memset(to_number, '\0', 255); /* radeji vynuluju at to pak nevypisuje nesmysly */
  19.  
  20. from_system = get_system(); /* nactu soustavu z ktere prevadim */
  21.  
  22. printf("Zadejte cislo v %d soustave: ", from_system);
  23. scanf("%s", tmp); /* nactu cislo jako retezec */
  24. from_number = strtol(tmp, NULL, from_system); /* prevedu cislo v soustave from_system na cislo v 10tkove soustave */
  25.  
  26. to_system = get_system(); /* nactu soustavu do ktere budu prevadet */
  27.  
  28. system_transfer(from_number, to_system, to_number); /* vypocitam cislo, bude ulozene v to_number */
  29.  
  30. printf("Cislo %s ve %d soustave je %s ve %d soustave.\n", tmp, from_system, to_number, to_system);
  31.  
  32. return 0;
  33. }
  34.  
  35. /*
  36. Funkce, ktera nacte soustavu, pokud nebude mezi 2-20 tak bude opakovat
  37. zadavani
  38. */
  39. int get_system()
  40. {
  41. int system;
  42. int ok;
  43.  
  44. do
  45. {
  46. printf("Zadejte soustavu (2-20): ");
  47. ok=scanf("%d", &system);
  48. if (ok==0) printf("Chyba zadani! Ocekavam integer!\n");
  49. else if (system<2 || system>20) printf ("Chyba zadani, ocekavam cislo v rozsahu 2-20, zkuste to znovu\n");
  50. fflush(stdin); //vymaze obsah stdin a muzeme dál posílat dalsi data
  51. } while (ok==0 || system<2 || system>20);
  52.  
  53. return system
  54. ;
  55. }
  56.  
  57. /*
  58. Funkce, ktera prevede cislo from_number v 10tkove soustave na
  59. soustavu to_system a cislo ulozi do result jako pole znaku
  60. kvuli A-Z
  61. */
  62. void system_transfer(int from_number, int to_system, char *result)
  63. {
  64. int tmp_number = from_number; /* cislo ktere prevadime, ale budeme ho delit */
  65. char to_number[255]; /* vysledne cislo */
  66. int tmp_rest; /* tady budem ukladat zbytky po deleni */
  67. int i = 0; /* kolikaty zbytek pocitame */
  68. int j;
  69.  
  70. do
  71. {
  72. tmp_rest = tmp_number % to_system; /* vypocitame zbytek */
  73.  
  74. if (tmp_rest > 10) /* pokud je zbytek vetsi jak 10 */
  75. to_number[i] = (char)(tmp_rest + 54); /* prevedeme na pismeno (viz. ASCII tabulka) */
  76. else /* pokud je zbytek mezi 0-10 */
  77. to_number[i] = (char)(tmp_rest + 48); /* zapiseme jako pismeno cisla (viz. ASCII tabulka) */
  78.  
  79. i++;
  80. } while ((tmp_number = tmp_number / to_system) != 0); /* pokud vysledek deleni neni nula, pokracujeme dal */
  81.  
  82. /* nakonec musime zbytky obratit a ulozit do result */
  83. for (j = 0; j < i; j++)
  84. result[j] = to_number[i-j-1];
  85. }
Add Comment
Please, Sign In to add comment