Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- // Метод для очищения буффера ввода
- int clearInputBuffer() {
- int ch;
- while (((ch = getchar()) != EOF) && (ch != '\n')) /* void */;
- return ch;
- }
- // Метод для перевода из десятичной в двоично-десятичную
- void toBinary(int n)
- {
- int d;
- if (n == 0)
- return;
- toBinary(n / 10); // Отрезаем последнюю цифру числа и делаем рекурсионный вызов
- d = n % 10; // Берем последнюю цифру числа
- switch (d) // Переводим цифру в двоично-десятичный формат и выводим
- {
- case 0:
- printf("0000");
- break;
- case 1:
- printf("0001");
- break;
- case 2:
- printf("0010");
- break;
- case 3:
- printf("0011");
- break;
- case 4:
- printf("0100");
- break;
- case 5:
- printf("0101");
- break;
- case 6:
- printf("0110");
- break;
- case 7:
- printf("0111");
- break;
- case 8:
- printf("1000");
- break;
- case 9:
- printf("1001");
- }
- }
- // Метод для перевода из двоично-десятичной в десятичную
- void toDec(char* n)
- {
- int len = 0, temp, i = 0;
- char* digit = (char*)malloc(4); // Переменная для хранения 4 битов
- i = 0;
- while (n[i] != '\0') // Пока не прошлись по всему числу
- {
- temp = 0;
- while (temp != 4) // Пока не считали 4 бита
- {
- digit[temp] = n[i]; // Записываем текущие 4 бита
- i++;
- temp++;
- }
- // Переводим цифру(4 бита) из двоично-десятичной в десятичную
- if (strncmp(digit, "0000", 4) == 0)
- printf("0");
- if (strncmp(digit, "0001", 4) == 0)
- printf("1");
- if (strncmp(digit, "0010", 4) == 0)
- printf("2");
- if (strncmp(digit, "0011", 4) == 0)
- printf("3");
- if (strncmp(digit, "0100", 4) == 0)
- printf("4");
- if (strncmp(digit, "0101", 4) == 0)
- printf("5");
- if (strncmp(digit, "0110", 4) == 0)
- printf("6");
- if (strncmp(digit, "0111", 4) == 0)
- printf("7");
- if (strncmp(digit, "1000", 4) == 0)
- printf("8");
- if (strncmp(digit, "1001", 4) == 0)
- printf("9");
- }
- }
- void main(int argc, char* argv[])
- {
- setlocale(LC_ALL, "rus");
- int action = -1;
- while (action != 0) // Меню
- {
- printf("1. Перевести из десятичного в двоично-десятичное\n");
- printf("2. Перевести из двоично-десятичного в десятичное\n");
- printf("0. Выйти\n");
- printf("Выберите действие: ");
- int n;
- char s[100];
- char* p;
- scanf("%d", &action);
- switch (action)
- {
- case 0:
- break;
- case 1: // Перевод из десятичного в двоично-десятичное
- printf("Введите десятичное число: ");
- scanf("%d", &n);
- toBinary(n);
- printf("\n");
- break;
- case 2: // Перевод из двоично-десятичного в десятичное
- printf("Введите двоично-десятичное число: ");
- clearInputBuffer();
- p = gets(s);
- toDec(p);
- printf("\n");
- break;
- default:
- printf("Некорректный ввод.\n");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement