Advertisement
AmidamaruZXC

Untitled

Nov 2nd, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <locale.h>
  5.  
  6. // Метод для очищения буффера ввода
  7. int clearInputBuffer() {
  8.     int ch;
  9.     while (((ch = getchar()) != EOF) && (ch != '\n')) /* void */;
  10.     return ch;
  11. }
  12.  
  13. // Метод для перевода из десятичной в двоично-десятичную
  14. void toBinary(int n)
  15. {
  16.     int d;
  17.     if (n == 0)
  18.         return;
  19.     toBinary(n / 10); // Отрезаем последнюю цифру числа и делаем рекурсионный вызов
  20.     d = n % 10; // Берем последнюю цифру числа
  21.     switch (d) // Переводим цифру в двоично-десятичный формат и выводим
  22.     {
  23.     case 0:
  24.         printf("0000");
  25.         break;
  26.     case 1:
  27.         printf("0001");
  28.         break;
  29.     case 2:
  30.         printf("0010");
  31.         break;
  32.     case 3:
  33.         printf("0011");
  34.         break;
  35.     case 4:
  36.         printf("0100");
  37.         break;
  38.     case 5:
  39.         printf("0101");
  40.         break;
  41.     case 6:
  42.         printf("0110");
  43.         break;
  44.     case 7:
  45.         printf("0111");
  46.         break;
  47.     case 8:
  48.         printf("1000");
  49.         break;
  50.     case 9:
  51.         printf("1001");
  52.     }
  53. }
  54.  
  55. // Метод для перевода из двоично-десятичной в десятичную
  56. void toDec(char* n)
  57. {
  58.     int len = 0, temp, i = 0;
  59.     char* digit = (char*)malloc(4); // Переменная для хранения 4 битов
  60.     i = 0;
  61.     while (n[i] != '\0') // Пока не прошлись по всему числу
  62.     {
  63.         temp = 0;
  64.         while (temp != 4) // Пока не считали 4 бита
  65.         {
  66.             digit[temp] = n[i]; // Записываем текущие 4 бита
  67.             i++;
  68.             temp++;
  69.         }
  70.         // Переводим цифру(4 бита) из двоично-десятичной в десятичную
  71.         if (strncmp(digit, "0000", 4) == 0)
  72.             printf("0");
  73.         if (strncmp(digit, "0001", 4) == 0)
  74.             printf("1");
  75.         if (strncmp(digit, "0010", 4) == 0)
  76.             printf("2");
  77.         if (strncmp(digit, "0011", 4) == 0)
  78.             printf("3");
  79.         if (strncmp(digit, "0100", 4) == 0)
  80.             printf("4");
  81.         if (strncmp(digit, "0101", 4) == 0)
  82.             printf("5");
  83.         if (strncmp(digit, "0110", 4) == 0)
  84.             printf("6");
  85.         if (strncmp(digit, "0111", 4) == 0)
  86.             printf("7");
  87.         if (strncmp(digit, "1000", 4) == 0)
  88.             printf("8");
  89.         if (strncmp(digit, "1001", 4) == 0)
  90.             printf("9");
  91.     }
  92.  
  93. }
  94.  
  95. void main(int argc, char* argv[])
  96. {
  97.     setlocale(LC_ALL, "rus");
  98.     int action = -1;
  99.     while (action != 0) // Меню
  100.     {
  101.         printf("1. Перевести из десятичного в двоично-десятичное\n");
  102.         printf("2. Перевести из двоично-десятичного в десятичное\n");
  103.         printf("0. Выйти\n");
  104.         printf("Выберите действие: ");
  105.         int n;
  106.         char s[100];
  107.         char* p;
  108.         scanf("%d", &action);
  109.         switch (action)
  110.         {
  111.         case 0:
  112.             break;
  113.         case 1: // Перевод из десятичного в двоично-десятичное
  114.             printf("Введите десятичное число: ");
  115.             scanf("%d", &n);
  116.             toBinary(n);
  117.             printf("\n");
  118.             break;
  119.         case 2: // Перевод из двоично-десятичного в десятичное
  120.             printf("Введите двоично-десятичное число: ");
  121.             clearInputBuffer();
  122.             p = gets(s);
  123.             toDec(p);
  124.             printf("\n");
  125.             break;
  126.         default:
  127.             printf("Некорректный ввод.\n");
  128.             break;
  129.         }
  130.     }
  131. }
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement