Шестиразрядное десятичное натуральное число изобразить цифрами по 9-сегментному шаблону - C (СИ)
Формулировка задачи:
Почтовый индекс. Заданное шестиразрядное десятичное натуральное число изобразить цифрами по 9-сегментному шаблону, используемому при почтовой индексации.
Решение задачи: «Шестиразрядное десятичное натуральное число изобразить цифрами по 9-сегментному шаблону»
textual
Листинг программы
#include <stdio.h>
//-----------------------------------------------------------------------------
void IntToAddr(int addr, unsigned char index[6])
{
int i;
for (i = 5; i >= 0; --i)
{
index[i] = addr % 10;
addr /= 10;
}
}
//-----------------------------------------------------------------------------
void Print(int addr)
{
const char* CDigits[] = { " _ _ _ _ _ _ _ _ ",
"| | /| _| _||_||_ |_ ||_||_|",
"|_| ||_ _| | _||_| ||_| _|"};
unsigned char index[6];
IntToAddr(addr, index);
size_t i, j;
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 6; ++j)
{
printf("%.3s ", CDigits[i] + (index[j] * 3));
}
printf("\n");
}
}
//-----------------------------------------------------------------------------
int main()
{
Print(123456);
Print(789012);
return 0;
}
Объяснение кода листинга программы
- #include
— подключает файл стандартного ввода/вывода, что позволяет использовать функции вывода на экран - void IntToAddr(int addr, unsigned char index[6]) — функция принимает на вход шестиразрядное десятичное число и массив из 6 элементов типа unsigned char. Функция перебирает массив, беря остаток от деления входного числа на 10 и записывая его в соответствующий элемент массива. Деление на 10 выполняется для того, чтобы взять последнюю цифру шестиразрядного числа.
- void Print(int addr) — функция принимает на вход шестиразрядное десятичное число и выводит его на экран в 9-сегментном формате с использованием функции printf.
- *const char CDigits[] = {
_ _ _ _ _ _ _ _,** — массив строк, соответствующих каждому сегменту дисплея. | | /| _| _||_||_ |_ ||_||_|, — строка, соответствующая первому сегменту дисплея.|_| ||_ _| | _||_| ||_| _|}; — строка, соответствующая второму сегменту дисплея.- unsigned char index[6]; — массив, в который функция IntToAddr записывает цифры шестиразрядного числа.
- size_t i, j; — переменные для перебора массива.
- for (i = 0; i < 3; ++i) — цикл, выполняющийся 3 раза, для вывода каждой строки на экран.
- for (j = 0; j < 6; ++j) — цикл, выполняющийся 6 раз, для вывода каждого сегмента на экран.
- *printf(
%.3s, CDigits[i] + (index[j] 3));** — форматированный вывод строки на экран с смещением на 3 символа (так как в массиве CDigits каждая строка начинается с 4-го символа). - printf(
\n); — перевод строки. - int main() — точка входа в программу.
- Print(123456); — вызов функции Print с шестиразрядным числом 123456.
- Print(789012); — вызов функции Print с шестиразрядным числом 789012.
- return 0; — завершение работы программы.