Einführung in die Sprache Go anhand von Beispielen
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.8 KiB

/*tcbb = time consuming black box;
In dieser Blackbox werden Berechnungen durchgeführt, die irgendetwas machen und dafür einige Zeit in Anspruch nehmen sollen. Es werden drei Werte zurückgelifert: Status (True/False), Ausgabetext, Error.
*/
package tcbb
import (
"errors"
"math"
)
func isPrim(n *int) bool {
if *n <= 2 && *n > 0 {
return true
} else if *n%2 == 0 {
return false // Gerade Zahlen > 2 sind keine Primzahlen
} else {
for i := 3; i <= int(math.Sqrt(float64(*n))); i += 2 {
if *n%i == 0 {
return false
}
}
return true
}
}
func FetchNextPrim() func() (int, error) {
primZahl := 1
var locked bool
return func() (int, error) {
if locked == false { // Simple Sicherheitsvorkehrung, die bei Nebenläufigkeit notwendig wird, damit nicht zwei Routinen gleichzeitig auf die Funktion zugreifen können.
locked = true
//fmt.Printf("Vorherige Primzahl: %v\n", primZahl)
for i := primZahl + 2; i < (1<<32 - 1); i += 2 { //1<<32-1 gleich int32 bzw. int auf meinem Rechner
if isPrim(&i) {
//fmt.Printf("Neue Primzahl: %v\n", i)
primZahl = i
break
}
}
locked = false
return primZahl, nil
} else {
return primZahl, errors.New("locked")
}
}
}
/*
func KreiszahlPiFlächenformel(r float64) float64 {
var kreistreffer float64 = 0
quadrattreffer := math.Pow(r, 2)
for i := 0.; i <= r-1; i++ {
x := i + 0.5
for j := 0.; float64(j) <= float64(r)-1; j++ {
y := j + 0.5
if math.Pow(x, 2)+math.Pow(y, 2) <= math.Pow(r, 2) {
kreistreffer++
//fmt.Println(kreistreffer)
}
}
}
return 4 * kreistreffer / quadrattreffer
}*/
/*
for i = 0 to r - 1
x = i + 0.5
for j = 0 to r-1
y = j + 0.5
if x ^ 2 + y ^ 2 <= r ^ 2 then
kreistreffer = kreistreffer + 1
ausgabe 4 * kreistreffer / quadrattreffer { 3.14159388 }
*/