In K.N Kings "C programming: A modern approach", chapter 10 exercise 7, the task is to make a digit converter from normal digits to 7-segment digits in ASCII art, like this:
_ _ _ _ _ _ _ _
| _| _| |_| |_ |_ | |_| |_| | |
| |_ _| | _| |_| | |_| | |_|
I got the sequence for each digit where to turn in it on and off
sample:
int digit_sequence[10][7] = {
// A,B,C,D,E,F,G
/* 0 */ {1,1,1,1,1,1,0}
}
Where 1 = ON, 0 = OFF
but I have a hard time getting the process_digit(int digit, int position)
function to work.
I have a hard time in my head translating from sequence[10][7]
to digits[4][MAX_DIGITS*4]
Could a kind soul please help me?
I have been reading the golf code seven-segment challenge, but even though I understand that theory it's still hard to convince my brain into doing what I want with multiple arrays.
Ignoring the ASCII art, the question reads:
Write a program that prompts the user for a number and then displays the number using characters to simulate the effect of a seven-segment display.
...
Characters other than digits should be ignored. Write the program so that the maximum number of digits is controlled by a macro named MAX_DIGITS which has the value 10. If the number contains more than this number of digits, the extra digits are ignored. Hints: Use two external arrays. One is the
segments
array [...] which stores data representing the correspondence between digits and segments. The other array,digits
, will be an array of characters with 4 rows (since each segmented digit is 4 characters high) andMAX_DIGITS * 4
columns (digits are three characters wide but a spaces is needed between digits for readability). Write your program as four functions:main
, [...]void clear_digits_array(void); void process_figit(int digit, int position); void print_digits_array(void);
clear_digits_array
will store blank characters into all elements of the digits array.process_digit
will store the seven-segment representation ofdigit
into a specified position in thedigits
array (positions range from0
toMAX_DIGITS - 1
).print_digits_array
will display the rows of the digits array, each on a single line [...].
The trick is to map where a segment goes on display.
The line number is the same for each segment.
However, the columns vary by
position
. Each position is a 4 characters width 'mini-matrix' (3 for segments and 1 for space:'|_| '
). So we fix the line of segment and sum its column on the 'mini-matrix' with (position*4).Got it? The code will be something like that:
(You may choose between '-' and '_', or perhaps change some lines)
Hope it helps.