Advertisement
Guest User

Hex to Oct/Oct to Hex, przed szlifem końcowym

a guest
Apr 8th, 2020
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void hex_to_oct()
  5. {
  6.     char hex[8]; //Jeśli limitem jest 75174, to wiêcej ni¿ 5 nie trzeba
  7.  
  8.     printf("Podaj liczbe hexadecymalna: ");
  9.     scanf("%s", hex);
  10.  
  11.     int pom = strlen(hex);
  12.  
  13.     char bin[pom*4];
  14.     char oct[pom*4];
  15.  
  16.     for(int i=0; i<pom; i++)
  17.     {
  18.         switch(hex[i]){  //zamiana z hex na bin // P O T E Z N Y SWITCH
  19.             case '0':
  20.                 bin[4*i+0]='0';
  21.                 bin[4*i+1]='0';
  22.                 bin[4*i+2]='0';
  23.                 bin[4*i+3]='0';
  24.                 break;
  25.            case '1':
  26.                 bin[4*i+0]='0';
  27.                 bin[4*i+1]='0';
  28.                 bin[4*i+2]='0';
  29.                 bin[4*i+3]='1';
  30.                 break;
  31.             case '2':
  32.                 bin[4*i+0]='0';
  33.                 bin[4*i+1]='0';
  34.                 bin[4*i+2]='1';
  35.                 bin[4*i+3]='0';
  36.                 break;
  37.             case '3':
  38.                 bin[4*i+0]='0';
  39.                 bin[4*i+1]='0';
  40.                 bin[4*i+2]='1';
  41.                 bin[4*i+3]='1';
  42.                 break;
  43.             case '4':
  44.                 bin[4*i+0]='0';
  45.                 bin[4*i+1]='1';
  46.                 bin[4*i+2]='0';
  47.                 bin[4*i+3]='0';
  48.                 break;
  49.             case '5':
  50.                 bin[4*i+0]='0';
  51.                 bin[4*i+1]='1';
  52.                 bin[4*i+2]='0';
  53.                 bin[4*i+3]='1';
  54.                 break;
  55.             case '6':
  56.                 bin[4*i+0]='0';
  57.                 bin[4*i+1]='1';
  58.                 bin[4*i+2]='1';
  59.                 bin[4*i+3]='0';
  60.                 break;
  61.             case '7':
  62.                 bin[4*i+0]='0';
  63.                 bin[4*i+1]='1';
  64.                 bin[4*i+2]='1';
  65.                 bin[4*i+3]='1';
  66.                 break;
  67.             case '8':
  68.                 bin[4*i+0]='1';
  69.                 bin[4*i+1]='0';
  70.                 bin[4*i+2]='0';
  71.                 bin[4*i+3]='0';
  72.                 break;
  73.             case '9':
  74.                 bin[4*i+0]='1';
  75.                 bin[4*i+1]='0';
  76.                 bin[4*i+2]='0';
  77.                 bin[4*i+3]='1';
  78.                 break;
  79.             case 'A':
  80.             case 'a':
  81.                 bin[4*i+0]='1';
  82.                 bin[4*i+1]='0';
  83.                 bin[4*i+2]='1';
  84.                 bin[4*i+3]='0';
  85.                 break;
  86.             case 'B':
  87.             case 'b':
  88.                 bin[4*i+0]='1';
  89.                 bin[4*i+1]='0';
  90.                 bin[4*i+2]='1';
  91.                 bin[4*i+3]='1';
  92.                 break;
  93.             case 'C':
  94.             case 'c':
  95.                 bin[4*i+0]='1';
  96.                 bin[4*i+1]='1';
  97.                 bin[4*i+2]='0';
  98.                 bin[4*i+3]='0';
  99.                 break;
  100.             case 'D':
  101.             case 'd':
  102.                 bin[4*i+0]='1';
  103.                 bin[4*i+1]='1';
  104.                 bin[4*i+2]='0';
  105.                 bin[4*i+3]='1';
  106.                 break;
  107.             case 'E':
  108.             case 'e':
  109.                 bin[4*i+0]='1';
  110.                 bin[4*i+1]='1';
  111.                 bin[4*i+2]='1';
  112.                 bin[4*i+3]='0';
  113.                 break;
  114.             case 'F':
  115.             case 'f':
  116.                 bin[4*i+0]='1';
  117.                 bin[4*i+1]='1';
  118.                 bin[4*i+2]='1';
  119.                 bin[4*i+3]='1';
  120.                 break;
  121.             default:
  122.                 printf("Nieprawidlowa liczba\n\n");
  123.                 return;
  124.                 break;
  125.         }
  126.     }
  127.  
  128.     printf("Jej odpowiednik oktalny to: ");
  129.  
  130.     /*
  131.     for(int i=0; i<pom*4; i++)  //wypisywanie ciagu binarnego
  132.         printf("%c", bin[i]);
  133.     printf("\n");
  134.     fflush(stdin);
  135.     */
  136.  
  137.     int i=0;  //zmienna wskazujaca na moment, od ktorej ma byc zamiana z bin na oct
  138.     if((pom*4)%3!=0)  //warunek sprawdza, czy dlugosc ciagu binarnego jest podzielna przez 3, jak nie to robi pierwsza zamiane w zaleznosci od modulo 3
  139.         if((pom*4)%3==1)
  140.         {
  141.             if(bin[0]=='0')
  142.                 printf("0");
  143.             else printf("1");
  144.             i=1;
  145.         }
  146.         else
  147.         {
  148.             switch(bin[0]){
  149.             case '0':
  150.                 if(bin[1]=='0')
  151.                     printf("0");
  152.                 else
  153.                     printf("1");
  154.                 break;
  155.             case '1':
  156.                 if(bin[1]=='0')
  157.                     printf("2");
  158.                 else
  159.                     printf("3");
  160.                 break;
  161.             }
  162.             i=2;
  163.         }
  164.     //printf("i=%d\n", i);
  165.  
  166.     for(i; i<pom*4; i+=3){ //zamiana z bin na oct
  167.         switch(bin[i]){
  168.         case '0':
  169.             switch(bin[i+1]){
  170.             case '0':
  171.                 if(bin[i+2]=='0')
  172.                     printf("0");
  173.                 else printf("1");
  174.                 break;
  175.             case '1':
  176.                 if(bin[i+2]=='0')
  177.                     printf("2");
  178.                 else printf("3");
  179.                 break;
  180.             }
  181.             break;
  182.         case '1':
  183.             switch(bin[i+1]){
  184.             case '0':
  185.                 if(bin[i+2]=='0')
  186.                     printf("4");
  187.                 else printf("5");
  188.                 break;
  189.             case '1':
  190.                 if(bin[i+2]=='0')
  191.                     printf("6");
  192.                 else printf("7");
  193.                 break;
  194.             }
  195.             break;
  196.         default: printf("Cos nie tak...");
  197.         }
  198.     }
  199.     printf("\n\n");
  200.     return;
  201. }
  202.  
  203. void oct_to_hex()
  204. {
  205.     char oct[8]; //limit?
  206.     printf("Podaj liczbe oktalna: ");
  207.     scanf("%s", oct);
  208.  
  209.     int pom = strlen(oct);
  210.     char bin[pom*3];
  211.  
  212.     for(int i=0; i<pom; i++){
  213.         switch(oct[i]){
  214.         case '0':
  215.             bin[3*i+0]='0';
  216.             bin[3*i+1]='0';
  217.             bin[3*i+2]='0';
  218.             break;
  219.         case '1':
  220.             bin[3*i+0]='0';
  221.             bin[3*i+1]='0';
  222.             bin[3*i+2]='1';
  223.             break;
  224.         case '2':
  225.             bin[3*i+0]='0';
  226.             bin[3*i+1]='1';
  227.             bin[3*i+2]='0';
  228.             break;
  229.         case '3':
  230.             bin[3*i+0]='0';
  231.             bin[3*i+1]='1';
  232.             bin[3*i+2]='1';
  233.             break;
  234.         case '4':
  235.             bin[3*i+0]='1';
  236.             bin[3*i+1]='0';
  237.             bin[3*i+2]='0';
  238.             break;
  239.         case '5':
  240.             bin[3*i+0]='1';
  241.             bin[3*i+1]='0';
  242.             bin[3*i+2]='1';
  243.             break;
  244.         case '6':
  245.             bin[3*i+0]='1';
  246.             bin[3*i+1]='1';
  247.             bin[3*i+2]='0';
  248.             break;
  249.         case '7':
  250.             bin[3*i+0]='1';
  251.             bin[3*i+1]='1';
  252.             bin[3*i+2]='1';
  253.             break;
  254.         default:
  255.             printf("Nieprawidlowa liczba.\n\n");
  256.             return;
  257.             break;
  258.         }
  259.     }
  260.     printf("Odpowiednik w hexadexymalnej to: ");
  261.  
  262.     int i=0;
  263.     if((pom*3)%4!=0)
  264.     {
  265.         switch((pom*3)%4){
  266.         case 1:
  267.             if(bin[0]==0)
  268.                 printf("0");
  269.             else printf("1");
  270.             i=1;
  271.             break;
  272.         case 2:
  273.             switch(bin[0]){
  274.             case '0':
  275.                 if(bin[1]=='0')
  276.                     printf("0");
  277.                 else
  278.                     printf("1");
  279.                 break;
  280.             case '1':
  281.                 if(bin[1]=='0')
  282.                     printf("2");
  283.                 else
  284.                     printf("3");
  285.                 break;
  286.             }
  287.             i=2;
  288.             break;
  289.         case 3:
  290.             switch(bin[0]){
  291.             case '0':
  292.                 switch(bin[1]){
  293.                 case '0':
  294.                     if(bin[2]=='0')
  295.                         printf("0");
  296.                     else printf("1");
  297.                     break;
  298.                 case '1':
  299.                     if(bin[2]=='0')
  300.                         printf("2");
  301.                     else printf("3");
  302.                     break;
  303.                 }
  304.                 break;
  305.             case '1':
  306.                 switch(bin[1]){
  307.                 case '0':
  308.                     if(bin[2]=='0')
  309.                         printf("4");
  310.                     else printf("5");
  311.                     break;
  312.                 case '1':
  313.                     if(bin[2]=='0')
  314.                         printf("6");
  315.                     else printf("7");
  316.                     break;
  317.             }
  318.             break;
  319.             }
  320.         i=3;
  321.         break;
  322.         }
  323.     }
  324.  
  325.     for(i; i<pom*3; i+=4){
  326.         switch(bin[i]){
  327.         case '0':
  328.             switch(bin[i+1]){
  329.             case '0':
  330.                 switch(bin[i+2]){
  331.                 case '0':
  332.                     if(bin[i+3]=='0')
  333.                         printf("0");
  334.                     else printf("1");
  335.                     break;
  336.                 case '1':
  337.                     if(bin[i+3]=='0')
  338.                         printf("2");
  339.                     else printf("3");
  340.                     break;
  341.                 }
  342.                 break;
  343.             case '1':
  344.                 switch(bin[i+2]){
  345.                 case '0':
  346.                     if(bin[i+3]=='0')
  347.                         printf("4");
  348.                     else printf("5");
  349.                     break;
  350.                 case '1':
  351.                     if(bin[i+3]=='0')
  352.                         printf("6");
  353.                     else printf("7");
  354.                     break;
  355.                 }
  356.                 break;
  357.             }
  358.             break;
  359.         case '1':
  360.             switch(bin[i+1]){
  361.             case '0':
  362.                 switch(bin[i+2]){
  363.                 case '0':
  364.                     if(bin[i+3]=='0')
  365.                         printf("8");
  366.                     else printf("9");
  367.                     break;
  368.                 case '1':
  369.                     if(bin[i+3]=='0')
  370.                         printf("A");
  371.                     else printf("B");
  372.                     break;
  373.                 }
  374.                 break;
  375.             case '1':
  376.                 switch(bin[i+2]){
  377.                 case '0':
  378.                     if(bin[i+3]=='0')
  379.                         printf("C");
  380.                     else printf("D");
  381.                     break;
  382.                 case '1':
  383.                     if(bin[i+3]=='0')
  384.                         printf("E");
  385.                     else printf("F");
  386.                     break;
  387.                 }
  388.                 break;
  389.             }
  390.             break;
  391.         default:
  392.             printf("Cos nie tak...");
  393.             return;
  394.             break;
  395.         }
  396.     }
  397.     printf("\n\n");
  398. }
  399.  
  400. int main()
  401. {
  402.     char instrukcja;
  403.  
  404.     while(11){
  405.     printf("Dostepne opcje:\n1. Z szesnastkowego na osemkowy,\n2. Z osemkowego na szesnastkowy,\n3. Wyjscie z programu.\nPodaj numer opcji:");
  406.     scanf("%c", &instrukcja);
  407.  
  408.     switch(instrukcja){
  409.         case '1': hex_to_oct();break;
  410.         case '2': oct_to_hex();break;
  411.         case '3': return 0;
  412.         default: printf("Wpisano nieprawidlowe polecenie. Prosze wybrac jeszcze raz.\n\n");break;
  413.         }
  414.     fflush(stdin);
  415.     };
  416. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement