Перовод побитовой строчки матрицы в десятичное число - C (СИ)
Формулировка задачи:
Доброго времени суток.
Недавно столкнулся с проблемой в одной задаче:
Матрица B(a,b) состоит с нулей и едениц. Считая каждую строку матрицы побитовой записью двоичного числа, подсчитать и вывести десятичное число для всех строчек матрицы.
Единственный мой вопрос, это как строчку матрицы перевести в десятичное число? Вот половина кода:#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
int i,j,a;
scanf("%i", &a);
int mx[a][8];
for(i=0;i<a;i++)
for(j=0;j<8;j++)
scanf("%i", &mx[i][j]);
for(i=0;i<a;i++)
{
for(j=0;j<8;j++)
{
printf("%2.0i", mx[i][j]);
}
printf("\n");
}
//чудо-код который двоичные числа переводит в десятичные...
}Решение задачи: «Перовод побитовой строчки матрицы в десятичное число»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
int mx[3][8];
for(i=0;i<3;i++)
for(j=0;j<8;j++)
mx[i][j] = rand()%2;
for(i=0;i<3;i++)
{
int n = 0, k = 0;
for(j=7;j>=0;j--)
{
printf("%i", mx[i][7-j]);
n += pow(2, k) * mx[i][j];
k++;
}
printf(" %i \n", n);
}
}
Объяснение кода листинга программы
В этом коде выполняется следующие действия:
- Включаются необходимые заголовочные файлы:
stdlib.h- для работы с функциейrand()и операторомrand();stdio.h- для работы с функциями ввода-вывода;math.h- для работы с функциейpow().
- Создается матрица
mxразмером 3x8, заполненная случайными значениями от 0 до 1 с помощью функцииrand()и оператора%. - Выполняется цикл по каждому элементу матрицы.
- Для каждого элемента матрицы создаются две переменные:
n- для хранения результата преобразования битовой строки в десятичное число;k- для подсчета количества битов в текущей битовой строке.
- Выполняется внутренний цикл по каждому биту в текущей битовой строке.
- Внутренний цикл начинается с самого старшего бита (7-й позиции) и заканчивается самым младшим битом (0-й позиции).
- Каждый бит матрицы преобразуется в десятичное число с помощью функции
printf()и оператора%i. - **К текущему результату
nдобавляется текущий бит, умноженный на 2 в степениkс помощью функцииpow(). - **После внутреннего цикла выводится текущий результат
nи значение переменнойk. - После завершения внешнего цикла выводится результат.