forked from steger/pr3-sose2026
Merge remote-tracking branch 'upstream/main'
commit
6af376c1c4
|
|
@ -5,18 +5,46 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
const (
|
||||
add = "add"
|
||||
subtract = "subtract"
|
||||
multiply = "multiply"
|
||||
divide = "divide"
|
||||
exit = "exit"
|
||||
)
|
||||
|
||||
//TODO: implement according to README.md
|
||||
fmt.Println("Welcome to the Simple Calculator!")
|
||||
for {
|
||||
var operation string
|
||||
fmt.Print("\nEnter operation (add, subtract, multiply, divide, exit): ")
|
||||
fmt.Scan(&operation)
|
||||
|
||||
//the following code just demonstrates how to use fmt.Scan
|
||||
|
||||
var str string
|
||||
fmt.Print("Please enter a string: ")
|
||||
fmt.Scan(&str)
|
||||
|
||||
var x float64
|
||||
fmt.Print("Please enter a float: ")
|
||||
fmt.Scan(&x)
|
||||
|
||||
fmt.Printf("You entered '%s' and %f\n", str, x)
|
||||
if operation == exit {
|
||||
fmt.Println("Goodbye!")
|
||||
break
|
||||
}
|
||||
|
||||
var num1, num2 float64
|
||||
fmt.Print("Enter the first number: ")
|
||||
fmt.Scan(&num1)
|
||||
fmt.Print("Enter the second number: ")
|
||||
fmt.Scan(&num2)
|
||||
|
||||
switch operation {
|
||||
case add:
|
||||
fmt.Printf("Result: %.2f\n", num1+num2)
|
||||
case subtract:
|
||||
fmt.Printf("Result: %.2f\n", num1-num2)
|
||||
case multiply:
|
||||
fmt.Printf("Result: %.2f\n", num1*num2)
|
||||
case divide:
|
||||
if num2 == 0 {
|
||||
fmt.Println("Error: Division by zero is not allowed!")
|
||||
} else {
|
||||
fmt.Printf("Result: %.2f\n", num1/num2)
|
||||
}
|
||||
default:
|
||||
fmt.Println("Invalid operation. Please try again.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
func main() {
|
||||
//create an array with a lot of data
|
||||
massiveData := make([]int, 1_000_000)
|
||||
for i := range massiveData {
|
||||
massiveData[i] = i
|
||||
}
|
||||
|
||||
// Task: Extract the first 8 elements safely
|
||||
|
||||
//1. attempt: use the slice operator
|
||||
//smallSlice := massiveData[:8]
|
||||
// consequence -> smallSlice and massiveData point to the same underlying array.
|
||||
// Therefore, setting massiveData to nil is not sufficient to release that big array.
|
||||
|
||||
//2. attempt: create a new slice (with a new underlying array) and copy data
|
||||
smallSlice := make([]int, 8)
|
||||
copy(smallSlice, massiveData[:8])
|
||||
|
||||
massiveData = nil //don't use massive data anymore: Underlying array shall be freed.
|
||||
runtime.GC() //run the garbage collector to make sure that all unused data is actually freed
|
||||
|
||||
//cap(smallSlice) should be 8 or similar, but not close to 1_000_000. The majority of the data should have been released by now
|
||||
fmt.Printf("Small Slice: %v, Len: %d, Cap: %d\n", smallSlice, len(smallSlice), cap(smallSlice))
|
||||
}
|
||||
Loading…
Reference in New Issue