### Write a C function with the following prototype: void fillColor(struct Color *p

Write a C function with the following prototype:

void fillColor(struct Color *p, struct Data d, char type)

This function assigns values to the Color structure ‘p’s members

based on the value in the char variable ‘type’ as follows:

char

type: assigned struct Color *p values:

‘R’ sets p’s name to “Red” and copies d’s struct members ‘r’, ‘g’, and ‘b’ to

p’s ‘red’, ‘green’, and ‘blue’ members respectively.

‘G’ sets p’s name to “Red” and copies d’s struct members ‘r’, ‘g’, and ‘b’ to

p’s ‘red’, ‘green’, and ‘blue’ members respectively.

‘B’ sets p’s name to “Red” and copies d’s struct members ‘r’, ‘g’, and ‘b’ to

p’s ‘red’, ‘green’, and ‘blue’ members respectively.

Q2. Write a C function with the following prototype:

void displayHexCodeAsString(const struct Color *s, int n)

This function accepts ‘n’ Color structures and displays the structure’s ‘name’ and the value

in each of the Color’s integer members (red, green, and blue) as a string in hexadecimal

notation as follows (see below) followed by a newline:

Color:color R:hexString G:hexString B:hexString

You may assume that no integer value will exceed 2147483647 or 7FFFFFFF in Hexadecimal.

Recall, the hexadecimal number system is base16 and contains 16 digits (0 to 9)

and (A to F; where A=10, B=11, C=12, D=13, E=14, and F=15).

HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F

DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

CONVERTING DECIMAL TO HEXADECIMAL

Steps:

1. Divide the decimal number by 16 and treat the division as an integer division

(i.e. the whole number portion only).

2. Compute the remainder by using the modulus operator.

3. Divide the result again by 16 and treat the division as an integer division.

4. Repeat step 2 and 3 until result is 0.

5. The hex value is the digit sequence of the remainders from last to first.

Note: The remainder here refers to the left over value after performing

the integer division. (see example below).

Example: Convert integer 177 to hexadecimal

Solution: Divide 177 by 16 until the quotient is zero.

177/16 = 11, with a remainder of 1

11/16 = 0, with a remainder of 11 (11 is B in hexadecimal)

The remainders from bottom to top would be B1

(so 177 in decimal is B1 in hexadecimal) and the function would display

the output as a string: “B1″ using %s with printf( ).

HINT: Consider using the following char array in your solution:

char hex[17]=”0123456789ABCDEF”;

Given that the position of each char digit in the array parallels its actual

integer value!

/ Your solution may ONLY use functions from the following

// included C library header files.

#include

#include

#define NUM 3

struct Color {

char name[12];

int red, green, blue;

};

struct Data {

int r, g, b;

};

// function prototypes:

void fillColor(struct Color *p, struct Data d, char type);

void displayHexCodeAsString(const struct Color *s, int n);

int main( ) {

char types[NUM] = { ‘G’, ‘B’, ‘R’ };

// hex strings 4000 10 B1 7FFFFFFF 24E 0 BC 100 ABCD

int values[NUM*3] = { 16384, 16, 177, 2147483647, 590, 0, 188, 256, 43981 }, i;

struct Color myColors[NUM];

struct Data myData[NUM];

for(i=0; i