Ganze Zufallszahlen (Simulationen)
Die meisten Programmiersprachen kennen einen Zufallszahlengenerator, der eine (pseudo-)zufällige Zahl zwischen 0.0 (inklusive) und 1.0 (exklusive) erzeugt.
Schreiben Sie eine Funktion, die eine solche gleichverteilte Zufallszahl in eine ganze Zufallszahl von min bis max umwandelt:
zufall(nullEinsVerteilt: double, min: integer, max: integer): integer
0 Kommentare
6 Lösung(en)
int zufall(double nullEinsVerteilt, int min, int max) {
return (int) (nullEinsVerteilt * (max - min + 1)) + min; }
int zufall(int min, int max) {
return zufall(Math.random(), min, max); }
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ganze Zufallszahlen
https://www.programmieraufgaben.ch/aufgabe/ganze-zufallszahlen/8v6nj82y
"""
# Programmieraufgabe:
# Die meisten Programmiersprachen kennen einen Zufallszahlengenerator, der
# eine (pseudo-)zufällige Zahl zwischen 0.0 (inklusive) und 1.0 (exklusive)
# erzeugt.
# Schreiben Sie eine Funktion, die eine solche gleichverteilte Zufallszahl
# in eine ganze Zufallszahl von min bis max umwandelt:
#
# Autor, Erstellung:
# Ulrich Berntien, 2018-10-27
#
# Sprache:
# Python 3.6.6
import collections
import random
def zufall(null_eins_verteilt: float, min: int, max: int) -> int:
"""
Transformiere Zahl aus [0,1( auf den Bereich min..max mit Ganzen Zahlen.
:param null_eins_verteilt: Zahl [0,1(
:param min: Kleinste Ganze Zahl
:param max: Größte Ganze Zahl
:return: Ganze Zahl aus dem definierten Bereich.
"""
assert 0.0 <= null_eins_verteilt < 1.0
assert int(min) == min and int(max) == max and min < max
return int(min + (max - min + 1) * null_eins_verteilt)
if __name__ == '__main__':
counter = collections.Counter()
for i in range(30):
counter[zufall(random.random(), 5, 7)] += 1
for number in sorted(counter.keys()):
print("Zahl", number, "aufgetaucht", counter[number], "mal")
Lösung von: Ulrich Berntien ()
function randomInt(float01, min, max) {
return Math.floor(float01 * (max - min + 1) + min);
}
for (let i = 1; i <= 30; i++) console.log(randomInt(Math.random(), 5, 7));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
// mit Bordmitteln
int RndInt1(int min, int max) => new Random().Next(min, max + 1);
// umständlich
int RndInt2(int min, int max) => (int)(new Random().NextDouble() * (max - min + 1) + min);
Lösung von: Jens Kelm (@JKooP)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int get_rnd_int(int begin, int end) {
return (rand() % (end - begin + 1)) + begin;
}
int main() {
srand(time(NULL));
printf("%d\n", get_rnd_int(10, 30));
}
Lösung von: Jens Kelm (@JKooP)
// C++14 | VS-2022
#include <iostream>
#include <random>
static const auto get_rnd_int(int begin_, int end_) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<>dist(begin_, end_);
return dist(gen);
}
int main() {
std::cout << get_rnd_int(10, 30) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Rufen Sie 30 Mal die Funktion mit den Werten
random(5, 7)
auf. Die Zahlen 5, 6 und 7 sollten alle ca. 10 Mal auftauchen.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.25 |
Schwierigkeit: | k.A. |
Webcode: | 8v6n-j82y |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |