Загрузка данных
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Функция проверки корректности двоичного числа
int isValidBinary(const char* str) {
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] != '0' && str[i] != '1') {
return 0; // Неверный символ
}
}
return 1; // Корректное двоичное число
}
// Функция проверки корректности восьмеричного числа
int isValidOctal(const char* str) {
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] < '0' || str[i] > '7') {
return 0; // Неверный символ
}
}
return 1; // Корректное восьмеричное число
}
// Функция проверки корректности шестнадцатеричного числа
int isValidHex(const char* str) {
for (int i = 0; str[i] != '\0'; i++) {
if (!((str[i] >= '0' && str[i] <= '9') ||
(str[i] >= 'A' && str[i] <= 'F') ||
(str[i] >= 'a' && str[i] <= 'f'))) {
return 0; // Неверный символ
}
}
return 1; // Корректное шестнадцатеричное число
}
// Функция преобразования двоичного в восьмиричный
void binaryToOctal(const char* binary) {
int len = strlen(binary);
int decimal = 0;
// Переводим двоичное в десятичное
for (int i = 0; i < len; i++) {
decimal = decimal * 2 + (binary[i] - '0');
}
printf("Восьмеричное представление: ");
if (decimal == 0) {
printf("0\n");
} else {
char octal[100];
int index = 0;
while (decimal > 0) {
octal[index++] = (decimal % 8) + '0';
decimal /= 8;
}
for (int i = index - 1; i >= 0; i--) {
printf("%c", octal[i]);
}
printf("\n");
}
}
// Функция преобразования восьмеричного в двоичный
void octalToBinary(const char* octal) {
int len = strlen(octal);
int decimal = 0;
// Переводим восьмеричное в десятичное
for (int i = 0; i < len; i++) {
decimal = decimal * 8 + (octal[i] - '0');
}
printf("Двоичное представление: ");
if (decimal == 0) {
printf("0\n");
} else {
char binary[1000];
int index = 0;
while (decimal > 0) {
binary[index++] = (decimal % 2) + '0';
decimal /= 2;
}
for (int i = index - 1; i >= 0; i--) {
printf("%c", binary[i]);
}
printf("\n");
}
}
// Функция преобразования двоичного в шестнадцатеричный
void binaryToHex(const char* binary) {
int len = strlen(binary);
int decimal = 0;
// Переводим двоичное в десятичное
for (int i = 0; i < len; i++) {
decimal = decimal * 2 + (binary[i] - '0');
}
printf("Шестнадцатеричное представление: ");
if (decimal == 0) {
printf("0\n");
} else {
char hex[100];
int index = 0;
while (decimal > 0) {
int remainder = decimal % 16;
if (remainder < 10) {
hex[index++] = remainder + '0';
} else {
hex[index++] = (remainder - 10) + 'A';
}
decimal /= 16;
}
for (int i = index - 1; i >= 0; i--) {
printf("%c", hex[i]);
}
printf("\n");
}
}
// Функция преобразования шестнадцатеричного в двоичный
void hexToBinary(const char* hex) {
int len = strlen(hex);
int decimal = 0;
// Переводим шестнадцатеричное в десятичное
for (int i = 0; i < len; i++) {
int digit;
if (hex[i] >= '0' && hex[i] <= '9') {
digit = hex[i] - '0';
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
digit = hex[i] - 'A' + 10;
} else { // 'a'-'f'
digit = hex[i] - 'a' + 10;
}
decimal = decimal * 16 + digit;
}
printf("Двоичное представление: ");
if (decimal == 0) {
printf("0\n");
} else {
char binary[1000];
int index = 0;
while (decimal > 0) {
binary[index++] = (decimal % 2) + '0';
decimal /= 2;
}
for (int i = index - 1; i >= 0; i--) {
printf("%c", binary[i]);
}
printf("\n");
}
}
int main() {
int choice;
char number[1000];
printf("=== ПРЕОБРАЗОВАТЕЛЬ СИСТЕМ СЧИСЛЕНИЯ ===\n");
printf("Выберите режим преобразования:\n");
printf("1. Двоичный -> Восьмеричный\n");
printf("2. Восьмеричный -> Двоичный\n");
printf("3. Двоичный -> Шестнадцатеричный\n");
printf("4. Шестнадцатеричный -> Двоичный\n");
printf("Ваш выбор (1-4): ");
scanf("%d", &choice);
getchar(); // Очищаем буфер
switch (choice) {
case 1:
printf("Введите двоичное число: ");
fgets(number, sizeof(number), stdin);
number[strcspn(number, "\n")] = 0; // Удаляем символ новой строки
if (isValidBinary(number)) {
printf("Входное двоичное число: %s\n", number);
binaryToOctal(number);
} else {
printf("ОШИБКА: Неверный формат двоичного числа!\n");
}
break;
case 2:
printf("Введите восьмеричное число: ");
fgets(number, sizeof(number), stdin);
number[strcspn(number, "\n")] = 0;
if (isValidOctal(number)) {
printf("Входное восьмеричное число: %s\n", number);
octalToBinary(number);
} else {
printf("ОШИБКА: Неверный формат восьмеричного числа!\n");
}
break;
case 3:
printf("Введите двоичное число: ");
fgets(number, sizeof(number), stdin);
number[strcspn(number, "\n")] = 0;
if (isValidBinary(number)) {
printf("Входное двоичное число: %s\n", number);
binaryToHex(number);
} else {
printf("ОШИБКА: Неверный формат двоичного числа!\n");
}
break;
case 4:
printf("Введите шестнадцатеричное число: ");
fgets(number, sizeof(number), stdin);
number[strcspn(number, "\n")] = 0;
if (isValidHex(number)) {
printf("Входное шестнадцатеричное число: %s\n", number);
hexToBinary(number);
} else {
printf("ОШИБКА: Неверный формат шестнадцатеричного числа!\n");
}
break;
default:
printf("ОШИБКА: Неверный выбор режима!\n");
break;
}
printf("\nНажмите Enter для выхода...");
getchar();
return 0;
}