From f6d53947f34dd9aae77ff56b49d153b44dae7471 Mon Sep 17 00:00:00 2001 From: Troy Campbell Date: Mon, 31 Oct 2022 08:08:25 +1000 Subject: [PATCH] Added go version of Change --- 00_Alternate_Languages/22_Change/go/main.go | 115 ++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 00_Alternate_Languages/22_Change/go/main.go diff --git a/00_Alternate_Languages/22_Change/go/main.go b/00_Alternate_Languages/22_Change/go/main.go new file mode 100644 index 00000000..fabe4d4b --- /dev/null +++ b/00_Alternate_Languages/22_Change/go/main.go @@ -0,0 +1,115 @@ +package main + +import ( + "bufio" + "fmt" + "math" + "os" + "strconv" +) + +func printWelcome() { + fmt.Println(" CHANGE") + fmt.Println("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY") + fmt.Println() + fmt.Println() + fmt.Println() + fmt.Println("I, YOUR FRIENDLY MICROCOMPUTER, WILL DETERMINE") + fmt.Println("THE CORRECT CHANGE FOR ITEMS COSTING UP TO $100.") + fmt.Println() +} + +func computeChange(cost, payment float64) { + change := int(math.Round((payment - cost) * 100)) + + if change == 0 { + fmt.Println("\nCORRECT AMOUNT, THANK YOU.") + return + } + + if change < 0 { + fmt.Printf("\nSORRY, YOU HAVE SHORT-CHANGED ME $%0.2f\n", float64(change)/-100.0) + print() + return + } + + fmt.Printf("\nYOUR CHANGE, $%0.2f:\n", float64(change)/100.0) + + d := change / 1000 + if d > 0 { + fmt.Printf(" %d TEN DOLLAR BILL(S)\n", d) + change -= d * 1000 + } + + d = change / 500 + if d > 0 { + fmt.Printf(" %d FIVE DOLLAR BILL(S)\n", d) + change -= d * 500 + } + + d = change / 100 + if d > 0 { + fmt.Printf(" %d ONE DOLLAR BILL(S)\n", d) + change -= d * 100 + } + + d = change / 50 + if d > 0 { + fmt.Println(" 1 HALF DOLLAR") + change -= d * 50 + } + + d = change / 25 + if d > 0 { + fmt.Printf(" %d QUARTER(S)\n", d) + change -= d * 25 + } + + d = change / 10 + if d > 0 { + fmt.Printf(" %d DIME(S)\n", d) + change -= d * 10 + } + + d = change / 5 + if d > 0 { + fmt.Printf(" %d NICKEL(S)\n", d) + change -= d * 5 + } + + if change > 0 { + fmt.Printf(" %d PENNY(S)\n", change) + } +} + +func main() { + scanner := bufio.NewScanner(os.Stdin) + + printWelcome() + + var cost, payment float64 + var err error + for { + fmt.Println("COST OF ITEM?") + scanner.Scan() + cost, err = strconv.ParseFloat(scanner.Text(), 64) + if err != nil || cost < 0.0 { + fmt.Println("INVALID INPUT. TRY AGAIN.") + continue + } + break + } + for { + fmt.Println("\nAMOUNT OF PAYMENT?") + scanner.Scan() + payment, err = strconv.ParseFloat(scanner.Text(), 64) + if err != nil { + fmt.Println("INVALID INPUT. TRY AGAIN.") + continue + } + break + } + + computeChange(cost, payment) + fmt.Println() +}