Trouble with Arrays
Warbz 01 Mar 2010
Trying to make a program that takes a number of pence from the user and then calculates the most efficient number of coins to make up that number.
£2, £1, 50p, 20p, 10p, 5p, 2p, 1p coins.
I tried to use an array but that doesn't seem to be working as the output is wayyyy messed up. Anyone got any ideas? It's C#.
EDIT:
If it helps, here is the working program, before I tried to implement the array.
Edited by W!, 01 March 2010 - 18:18.
£2, £1, 50p, 20p, 10p, 5p, 2p, 1p coins.
I tried to use an array but that doesn't seem to be working as the output is wayyyy messed up. Anyone got any ideas? It's C#.
using System; namespace Calculator { class Program { public static void Main(string[] args) { //Declare Variables. string value, myChoice; int pence; int[] change = new int [8] {200, 100, 50, 20, 10, 5, 2, 1}; do { //Collect input from user. Console.WriteLine("Please input the amount in pence that you want to have calculated:\n"); value = Console.ReadLine(); pence = Convert.ToInt32(value); Console.Clear(); Console.WriteLine("You entered {0}", pence); //The math. do { if(pence >= 200) { change[0] = pence / 200; pence = pence % 200; } else if(pence >= 100) { change[1] = pence / 100; pence = pence % 100; } else if(pence >= 50) { change[2] = pence / 50; pence = pence % 50; } else if(pence >= 20) { change[3] = pence / 20; pence = pence % 20; } else if(pence >= 10) { change[4] = pence / 10; pence = pence % 10; } else if(pence >= 5) { change[5] = pence / 5; pence = pence % 5; } else if(pence >= 2) { change[6] = pence / 2; pence = pence % 2; } else if(pence >= 1) { change[7] = pence / 1; pence = pence % 1; } } while (pence > 0); Console.WriteLine("The minimum amount of change possible for that sum of money"); Console.WriteLine("would be the following combination of coins: \n"); //Output end values only if greater than 0. if(change[0] > 0) { Console.WriteLine("{0} x £2 coins.", change[0]); } if(change[1] > 0) { Console.WriteLine("{0} x £1 coins.", change[1]); } if(change[2] > 0) { Console.WriteLine("{0} x 50p coins.", change[2]); } if(change[3] > 0) { Console.WriteLine("{0} x 20p coins.", change[3]); } if(change[4] > 0) { Console.WriteLine("{0} x 10p coins.", change[4]); } if(change[5] > 0) { Console.WriteLine("{0} x 5p coins.", change[5]); } if(change[6] > 0) { Console.WriteLine("{0} x 2p coins.", change[6]); } if(change[7] >0) { Console.WriteLine("{0} x 1p coins.", change[7]); } Console.ReadLine(); Console.Clear(); Console.WriteLine("Would you like to quit?\n(Y/N)\n"); myChoice = Console.ReadLine(); //Does user want to quit? switch(myChoice) { case "Y": case "y": Console.WriteLine("\nProgram will close."); Console.ReadLine(); break; case "N": case "n": Console.WriteLine("\nProgram will restart."); Console.ReadLine(); Console.Clear(); break; } } while (myChoice != "Y" && myChoice != "y"); } } }
EDIT:
If it helps, here is the working program, before I tried to implement the array.
using System; namespace Calculator { class Program { public static void Main(string[] args) { //Declare Variables. string value, myChoice; int change, pound2 = 0, pound1 = 0, p50 = 0, p20 = 0, p10 = 0, p5 = 0, p2 = 0, p1 = 0; do { //Collect input from user. Console.WriteLine("Please input the amount in pence that you want to have calculated:\n"); value = Console.ReadLine(); change = Convert.ToInt32(value); Console.Clear(); Console.WriteLine("You entered {0}", change); //The math. do { if(change >= 200) { pound2 = change / 200; change = change % 200; } else if(change >= 100) { pound1 = change / 100; change = change % 100; } else if(change >= 50) { p50 = change / 50; change = change % 50; } else if(change >= 20) { p20 = change / 20; change = change % 20; } else if(change >= 10) { p10 = change / 10; change = change % 10; } else if(change >= 5) { p5 = change / 5; change = change % 5; } else if(change >= 2) { p2 = change / 2; change = change % 2; } else if(change >= 1) { p1 = change / 1; change = change % 1; } } while (change > 0); Console.WriteLine("The minimum amount of change possible for that sum of money"); Console.WriteLine("would be the following combination of coins: \n"); //Output end values only if greater than 0. if(pound2 > 0) { Console.WriteLine("{0} x £2 coins.", pound2); } if(pound1 > 0) { Console.WriteLine("{0} x £1 coins.", pound1); } if(p50 > 0) { Console.WriteLine("{0} x 50p coins.", p50); } if(p20 > 0) { Console.WriteLine("{0} x 20p coins.", p20); } if(p10 > 0) { Console.WriteLine("{0} x 10p coins.", p10); } if(p5 > 0) { Console.WriteLine("{0} x 5p coins.", p5); } if(p2 > 0) { Console.WriteLine("{0} x 2p coins.", p2); } if(p1 >0) { Console.WriteLine("{0} x 1p coins.", p1); } Console.ReadLine(); Console.Clear(); Console.WriteLine("Would you like to quit?\n(Y/N)\n"); myChoice = Console.ReadLine(); //Does user want to quit? switch(myChoice) { case "Y": case "y": Console.WriteLine("\nProgram will close."); Console.ReadLine(); break; case "N": case "n": Console.WriteLine("\nProgram will restart."); Console.ReadLine(); Console.Clear(); break; } } while (myChoice != "Y" && myChoice != "y"); } } }
Edited by W!, 01 March 2010 - 18:18.
Dauth 01 Mar 2010
Do you need to End your if statements? Using Endif or something similar?
BTW I expect one of the moos to shift this to the code block.
BTW I expect one of the moos to shift this to the code block.
Warbz 01 Mar 2010
Sorted now, sorry.
Should have been
Didn't realise it assigns values, thought it was some kind of naming method.
int[] change = new int [8] {200, 100, 50, 20, 10, 5, 2, 1};
Should have been
int[] change = new int [8] {0, 0, 0, 0, 0, 0, 0, 0};
Didn't realise it assigns values, thought it was some kind of naming method.
Warbz 01 Mar 2010
AJ, on 1 Mar 2010, 18:29, said:
Yer bloody numpty. Topic moved btw.
Now I have the problem of the array keeping the previous values each time the program loops. |:
EDIT: Fixed again. Added:
Array.Clear(change, 0, Math.Min(8, change.Length));
To the end.
Edited by W!, 01 March 2010 - 18:46.
BeefJeRKy 01 Mar 2010
Try assigning the values inside one of the do while loops. Also this is the program I've seen that makes full use of a 'do while' loop. I normally use either 'while' or 'for' loops.