Перовод побитовой строчки матрицы в десятичное число - 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
. - После завершения внешнего цикла выводится результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д