Advertisement
AmidamaruZXC

Untitled

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