Функция, которая формирует двоично-десятичный код числа
Создать функцию, которая формирует двоично-десятичный код числа (код записывается тетрадами, между тетрадами 1 символ пробела). Я создала массив строк, в который записываю двоично-десятичный код чисел из другого массива. Но в результате выводится пустая строка, не понимаю, где ошибка.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctime>
#define MAX 10
int Enter(void);
void Generate(int);
void DecToBin(int);
void Print(int);
int arr[MAX];
char str[MAX][100];
void main(void)
{
int size;
size = Enter();
Generate(size);
DecToBin(size);
Print(size);
getchar(); getchar();
}
int Enter(void)
{
system("chcp 1251");
int n; // розмір масиву
printf_s(" Введіть кількість елементів масиву: ");
scanf_s("%d", &n);
return n;
}
void Generate(int k)
{
int i;
srand(time(NULL));
printf(" Масив випадкових чисел: ");
for (i = 0; i < k; i++) {
arr[i] = rand() + 1;
printf("%d ", arr[i]);
}
}
void DecToBin(int k)
{
int i, j, m = 0;
int a = 0, b = 0;
int ost;
for (i = 0; i < k; i++) {
b = arr[i];
for (j = 0; b > 0; j++) {
a = b % 10; // виділяємо останню цифру числа
b = b / 10;
int p = 0;
for (m; p < 4; m++) {
ost = a % 2;
str[i][m] = ost;
a = a / 2;
p++;
}
str[i][m + 1] = ' ';
m++;
}
str[i][m] = '\0';
char* l = &str[i][0];
char* r = &str[i][m - 1];
for (; l < r; l++, r--) { // переписуємо рядок у зворотньому порядку
char t = *l;
*l = *r;
*r = t;
}
puts(str[i]);
m = 0;
}
}
void Print(int k)
{
int i;
printf("\n\n\t Таблиця чисел та їх 2-10 кодів");
printf("\n ------------------------------------------------------");
printf("\n | Число | ");
printf(" 2-10 код |");
for (i = 0; i < k; i++) { // виводимо таблицю
printf("\n ------------------------------------------------------");
printf("\n | %-6d |", arr[i]);
printf(" %-25.2s |", str[i]);
}
printf("\n ------------------------------------------------------");
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Биты нужно записывать буквами :
//str[i][m] = ost;
str[i][m] = '0'+ost;
Проблемы с пробелами на следующие тетрады (не там пробелы ставите) :
//str[i][m + 1] = ' ';
str[i][m] = ' ';
Строка длинная, пишу полностью :
//printf(" %-25.2s |", str[i]);
printf(" %s |", str[i]);