fwongmc

12-06-2004, 02:59 PM

Well,I read my book again and I understand the use of functions and pointers.But I am still experiencing a problem,is one of my function cannot return accurate result.I gues my function is correct,but don't know why it cannot return accurate result,can anyone try to look and tell me where I made a mistake?

Question again(for reference)

Write a program to dispense change.The user enters the amount paid and the amount due.The program determines how many dollars, 50cents,20cents,10cents should be given as change.

a)Write a function with the heading:

void dispense(int change,int *dollars,int *c10,int *c20,int *c50)

that determines and return the quantity of each kind of coin.

(Note:16 cents-5 cents=11 cents meaning that one 10cents is returned for charge.However 16 cents-1 cents=15 cents meaning that one 20-cents is required(round-up))

--------------------------------------------------------------------------

b)Write a function int getData(int *paid,int *due) that doe the following:

inform the user that amount paid and amount due should be entered in cents(integer)

do

prompt the user to enter the amount paid and amount due

read in the data

while (amount due<0 or amount paid<amount due);

if both amount paid and amount due are zeros

return 0

otherwise

return 1

--------------------------------------------------------------------------c)Your main program should repeat the following until both the amount paid and amount due are zeros.

1.call the function getData to ask for the amount paid and amount due

2.print out the charge and the # of each kind of coins to dispense.

Program output:

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:16 5

amount due:5,amount paid:16,and thus change=11

You are suggested to give him/her 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:26 5

amount due:5,amount paid:26,and thus change=21

You are suggested to give him/her 1 20-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:66 5

amount due:5,amount paid:66,and thus change=61

You are suggested to give him/her 1 50-cents coin(s) 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:81 5

amount due:5,amount paid:81,and thus change=76

You are suggested to give him/her 1 50-cents coin(s) 1 20-cents coin(s) 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:5 81

Enter the amount paid and amount due please:0 0

--------------------------------------------------------------------------

#include <stdio.h>

/*function getData initialization*/

int getData(int *paid,int *due);

/*function dispense initialization*/

void dispense(int change,int *dollars,int *c50,int *c20,int *c10);

void main () {

/*pass value initialization*/

int paid,due,dollars,c50,c20,c10,trans;

/*repeat until both input equals to 0*/

do {

/*prompt user for data entry*/

getData(&paid,&due);

/*calculate for the change*/

trans=paid-due;

/*do while both entry is larger than 0*/

if (paid>0&&due>0) {

/*calculation*/

dispense(trans,&dollars,&c50,&c20,&c10);

/*prompt for user input*/

printf ("\namount due:%d",due);

printf (" amount paid:%d",paid);

printf ("and thus change:%d",paid-due);

/*if the rounded change smaller than 50*/

if (dollars<50) {

/*if c20 is null*/

if (c20==0) {

printf ("You are suggested to give him/her %d 10-cents coin(s)",c10); }

/*if c10 is null*/

if (c10==0) {

printf ("You are suggested to give him/her %d 20-cents coin(s)",c20); }

/*if both c10/c20 are not null*/

else

printf ("You are suggested to give him/her %d 10-cents coin(s) %d 20-cents coin(s)",c10,c20); }

/*if the rounded change is larger than 50*/

else if (dollars>50) {

/*if c20 is null*/

if (c20==0) {

printf ("You are suggested to give him/her %d 10-cent coin(s) %d 50-cent coin(s)",c10,c50); }

/*if c10 is null*/

if (c10==0) {

printf ("You are suggested to give him/her %d 20-cent coin(s) %d 50-cent coin(s)",c20,c50); }

/*if both c10/c20 are not null*/

else

printf ("You are suggested to give him/her %d 10-cent coin(s) %d 20-cent coin(s) %d 50-cent coin(s)",c10,c20,c50); }

/*if the rounded change=50*/

else if (dollars==50)

printf ("You are suggested to give him/her %d 50-cent coin(s)",c50);}

}while (getData(&paid,&due)==1); }

/*function dispense main*/

void dispense (int change,int *dollars,int *c50,int *c20,int *c10) {

/*temp store variable*/

int tmp;

tmp=(change%10);

if (tmp>=5)

*dollars=((change/10)*10)+10;

else if (tmp<5)

*dollars=(change/10)*10;

switch (*dollars) {

case '10':*c10+=1;

break;

case '20':*c20+=1;

break;

case '30':*c10+=1;

*c20+=1;

break;

case '40':*c20+=2;

break;

case '50':*c50+=1;

break;

case '60':*c10+=1;

*c50+=1;

break;

case '70':*c20+=1;

*c50+=1;

break;

case '80':*c10+=1;

*c20+=1;

break;

case '90':*c20+=2;

*c50+=1;

break;

default:printf ("\nPlease check your input"); }

}

/*function getData main*/

int getData (int *paid,int *due) {

printf ("The amount-paid and amount-due should be entered in cents(integer)");

do {

printf ("\nTo terminate the program,enter 0 for both values.");

printf ("\nEnter the amount paid and amount due please:");

scanf ("%d %d",paid,due); } while (*due<0 || *paid<*due);

if (*paid==0&&*due==0) {

return 0; }

else return 1;}

Question again(for reference)

Write a program to dispense change.The user enters the amount paid and the amount due.The program determines how many dollars, 50cents,20cents,10cents should be given as change.

a)Write a function with the heading:

void dispense(int change,int *dollars,int *c10,int *c20,int *c50)

that determines and return the quantity of each kind of coin.

(Note:16 cents-5 cents=11 cents meaning that one 10cents is returned for charge.However 16 cents-1 cents=15 cents meaning that one 20-cents is required(round-up))

--------------------------------------------------------------------------

b)Write a function int getData(int *paid,int *due) that doe the following:

inform the user that amount paid and amount due should be entered in cents(integer)

do

prompt the user to enter the amount paid and amount due

read in the data

while (amount due<0 or amount paid<amount due);

if both amount paid and amount due are zeros

return 0

otherwise

return 1

--------------------------------------------------------------------------c)Your main program should repeat the following until both the amount paid and amount due are zeros.

1.call the function getData to ask for the amount paid and amount due

2.print out the charge and the # of each kind of coins to dispense.

Program output:

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:16 5

amount due:5,amount paid:16,and thus change=11

You are suggested to give him/her 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:26 5

amount due:5,amount paid:26,and thus change=21

You are suggested to give him/her 1 20-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:66 5

amount due:5,amount paid:66,and thus change=61

You are suggested to give him/her 1 50-cents coin(s) 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:81 5

amount due:5,amount paid:81,and thus change=76

You are suggested to give him/her 1 50-cents coin(s) 1 20-cents coin(s) 1 10-cents coin(s)

The amount-paid and amount-due should be entered in cents (integer)

To terminate the program,enter 0 for both values

Enter the amount paid and amount due please:5 81

Enter the amount paid and amount due please:0 0

--------------------------------------------------------------------------

#include <stdio.h>

/*function getData initialization*/

int getData(int *paid,int *due);

/*function dispense initialization*/

void dispense(int change,int *dollars,int *c50,int *c20,int *c10);

void main () {

/*pass value initialization*/

int paid,due,dollars,c50,c20,c10,trans;

/*repeat until both input equals to 0*/

do {

/*prompt user for data entry*/

getData(&paid,&due);

/*calculate for the change*/

trans=paid-due;

/*do while both entry is larger than 0*/

if (paid>0&&due>0) {

/*calculation*/

dispense(trans,&dollars,&c50,&c20,&c10);

/*prompt for user input*/

printf ("\namount due:%d",due);

printf (" amount paid:%d",paid);

printf ("and thus change:%d",paid-due);

/*if the rounded change smaller than 50*/

if (dollars<50) {

/*if c20 is null*/

if (c20==0) {

printf ("You are suggested to give him/her %d 10-cents coin(s)",c10); }

/*if c10 is null*/

if (c10==0) {

printf ("You are suggested to give him/her %d 20-cents coin(s)",c20); }

/*if both c10/c20 are not null*/

else

printf ("You are suggested to give him/her %d 10-cents coin(s) %d 20-cents coin(s)",c10,c20); }

/*if the rounded change is larger than 50*/

else if (dollars>50) {

/*if c20 is null*/

if (c20==0) {

printf ("You are suggested to give him/her %d 10-cent coin(s) %d 50-cent coin(s)",c10,c50); }

/*if c10 is null*/

if (c10==0) {

printf ("You are suggested to give him/her %d 20-cent coin(s) %d 50-cent coin(s)",c20,c50); }

/*if both c10/c20 are not null*/

else

printf ("You are suggested to give him/her %d 10-cent coin(s) %d 20-cent coin(s) %d 50-cent coin(s)",c10,c20,c50); }

/*if the rounded change=50*/

else if (dollars==50)

printf ("You are suggested to give him/her %d 50-cent coin(s)",c50);}

}while (getData(&paid,&due)==1); }

/*function dispense main*/

void dispense (int change,int *dollars,int *c50,int *c20,int *c10) {

/*temp store variable*/

int tmp;

tmp=(change%10);

if (tmp>=5)

*dollars=((change/10)*10)+10;

else if (tmp<5)

*dollars=(change/10)*10;

switch (*dollars) {

case '10':*c10+=1;

break;

case '20':*c20+=1;

break;

case '30':*c10+=1;

*c20+=1;

break;

case '40':*c20+=2;

break;

case '50':*c50+=1;

break;

case '60':*c10+=1;

*c50+=1;

break;

case '70':*c20+=1;

*c50+=1;

break;

case '80':*c10+=1;

*c20+=1;

break;

case '90':*c20+=2;

*c50+=1;

break;

default:printf ("\nPlease check your input"); }

}

/*function getData main*/

int getData (int *paid,int *due) {

printf ("The amount-paid and amount-due should be entered in cents(integer)");

do {

printf ("\nTo terminate the program,enter 0 for both values.");

printf ("\nEnter the amount paid and amount due please:");

scanf ("%d %d",paid,due); } while (*due<0 || *paid<*due);

if (*paid==0&&*due==0) {

return 0; }

else return 1;}