package main import ( "fmt" "os" "strconv" ) var ascii_intro string = ` _ ___ _ _ _____ _ | | / (_) | | (_) / ___| | | | |/ / _ _ __ ___ _ __ ___ __ _| |_ _ ___ ___ \ ` + "`" + `--. ___ | |_ _____ _ __ | \| | '_ \ / _ \ '_ ` + "`" + ` _ \ / _` + "`" + ` | __| |/ __/ __| ` + "`" + `--. \/ _ \| \ \ / / _ \ '__| | |\ \ | | | | __/ | | | | | (_| | |_| | (__\__ \ /\__/ / (_) | |\ V / __/ | \_| \_/_|_| |_|\___|_| |_| |_|\__,_|\__|_|\___|___/ \____/ \___/|_| \_/ \___|_| ` // GenDisplaceFn produces functions that solves a linear kinematics scenario for a given time value. // `acceleration` is a float64 number of the units the meters per second squared (m/s^2) // `initialVelocity` is a float64 number of the units meters per second (m/s) // `initialDisplacement` is a float64 number in the unit of meters(m) refering to the starting position of // object under consideration // s = 1/2*a*t^2 +vo*t+so // vo is initial displacement so initial displacement func GenDisplaceFn(acceleration float64, initialVelocity float64, intialDisplacement float64) func(float64) float64 { displacementFunc := func(t float64) float64 { return (0.5*acceleration*t*t + initialVelocity*t + intialDisplacement) } return displacementFunc } func processUserInput(value string) float64 { userFloat, err := strconv.ParseFloat(value, 64) if err != nil { fmt.Println("Opps you entered and incorrect input! Please enter float values only.") os.Exit(1) } return userFloat } func main() { var acceleration, initialVelocity, initialDisplacement, displaceTime float64 var userInput string fmt.Println(ascii_intro) fmt.Println("Ok cowboy! Let's solve some linear kinematics.") fmt.Println("Give me a value for \"acceleration\":") fmt.Scan(&userInput) acceleration = processUserInput(userInput) fmt.Println("Give me a value for \"initial velocity\":") fmt.Scan(&userInput) initialVelocity = processUserInput(userInput) fmt.Println("Give me a value for \"initial displacement\":") fmt.Scan(&userInput) initialDisplacement = processUserInput(userInput) displacementFn := GenDisplaceFn(acceleration, initialVelocity, initialDisplacement) fmt.Println("What value of \"time\" will we calculate displacement for?:") fmt.Scan(&userInput) displaceTime = processUserInput(userInput) fmt.Println(displacementFn(displaceTime)) }