Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Mit dem Auto, dem Zug, dem Fahrrad oder zu Fuß? (Simulationen)

Schreiben Sie ein Programm, das entweder «Auto», «Zug», «Fahrrad» oder «Zu Fuß» ausgibt und zwar mit den Wahrscheinlichkeiten 3:3:2:1. Von 1000 Aufrufen sollen also etwa 1/3 «Auto», 1/3 «Zug», 2/9 «Fahrrad» bzw. 1/9 «Zu Fuß» ausgegeben werden.

Zusatzaufgabe: Schreiben Sie obiges Programm so um, dass es 20 Ausgaben durchführt. Ändern Sie danach das Programm so ab, dass zu Testzwecken immer die selbe Zufallsfolge erzeugt wird; dies kann mit dem sog. Seed erreicht werden. Der Seed ist das x0 aus der Aufgabe 10.1 («Lineare Kongruenzmethode» aus dem Buch "Programmieren Lernen" - Seite 122). Die meisten Programmiersprachen bieten es an, den Seed selbst zu wählen.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

12 Lösung(en)

// see https://github.com/pheek/WalkerCategories
import eu.gressly.math.random.WalkerCategories;

// see https://github.com/pheek/javaSequencer
import static eu.gressly.util.Sequencer.seq;

public class AutoZugFahrradFuss {

	public static void main(String[] args) {
		new AutoZugFahrradFuss().top();
	}

	String[] fortbewegung = {"Auto", "Zug", "Fahrrad", "zu Fuss"};
	void top() {
		WalkerCategories wc = new WalkerCategories(new double[]{3, 3, 2, 1});
		for(int i : seq(1, 1000)) {
			int kategorie = wc.getWeightedCategory(Math.random());
			System.out.println(i + ". " + fortbewegung[kategorie]);
		}
	}

} // end of class AutoZugFahrradFuss
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

// see https://github.com/pheek/WalkerCategories
import eu.gressly.math.random.WalkerCategories;

// see https://github.com/pheek/javaSequencer
import static eu.gressly.util.Sequencer.seq;

import java.util.Random;

public class AutoZugFahrradFuss {

	public static void main(String[] args) {
		new AutoZugFahrradFuss().top();
	}

	String[] fortbewegung = {"Auto", "Zug", "Fahrrad", "zu Fuss"};
	void top() {
		Random r = new Random();
		r.setSeed(55);
		WalkerCategories wc = new WalkerCategories(new double[]{3, 3, 2, 1});
		for(int i : seq(1, 20)) {
			int kategorie = wc.getWeightedCategory(r.nextDouble());
			System.out.println(i + ". " + fortbewegung[kategorie]);
		}
	}

} // end of class AutoZugFahrradFuss
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

using System;
using System.Collections.Generic;
using System.Linq;

namespace Auto_Zug_Fahrrad_Fuß {
	class Program {

		public static string Transport(int? seed = null) {

			int
				min = 1, max = 10,
				transporter =
				seed == null ?
				Singleton.GetRandom().Next(min, max) :
				Singleton.GetRandom((int)seed).Next(min, max);

			return
				transporter < 4 ? "Auto" :
				transporter < 7 ? "Zug" :
				transporter < 9 ? "Fahrrad" :
				"Fuß";
		}//Ende Transport

		static void Main(string[] args) {
			for (int i = 1; i <= 20; i++)
				Console.WriteLine("{0,2}: {1}", i, Transport(5));
			Console.ReadKey(true);
		}//Ende Main
	}

	class Singleton {
		private static Random random;
		private static Dictionary<int, Random> randomWithSeed;

		public static Random GetRandom() {
			if (random == null)
				random = new Random();
			return Singleton.random;
		}

		public static Random GetRandom(int seed) {
			if (randomWithSeed == null) randomWithSeed = new Dictionary<int, Random>();

			if (!randomWithSeed.ContainsKey(seed))
				randomWithSeed.Add(Math.Abs(seed), new Random(seed));

			return randomWithSeed.First(x => x.Key == seed).Value;
		}
	}//Ende Singleton
}

                

Lösung von: Marcel Kapma ()

Math.sRandom = function(seed) {
   return {
      next: function() {
         module   =  2e32;
         seed     *= 2e32 - 1;    // faktor
         seed     += 12345;       // schrittweite
         return (seed %= module) / module;
      }
   }
}

var rnd = Math.sRandom(26),
    i = 1;
    
function locomotion() {
   var choice = rnd.next() * 9 + 1;
   if (choice <= 3) return "Auto";
   if (choice <= 6) return "Zug";
   if (choice <= 8) return "Fahrrad";
   return "zu Fuß";
}

for (i; i <= 20; i++) console.log(locomotion());
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

#include <iostream>
#include <random>

using namespace std;

int random = 0;

int main() {

	random_device rn;
	mt19937 engine(rn());

	engine.seed(1);

	for (int i = 0; i < 20; i++) {

		uniform_int_distribution<int> dice(1, 9);

		random = dice(engine);

		switch (random) {

		case 1:

			cout << "Du faehrst mit dem Auto!" << endl;
			break;

		case 2:

			cout << "Du faehrst mit dem Auto!" << endl;
			break;

		case 3:

			cout << "Du faehrst mit dem Auto!" << endl;
			break;

		case 4:

			cout << "Du faehrst mit dem Zug!" << endl;
			break;

		case 5:

			cout << "Du faehrst mit dem Zug!" << endl;
			break;

		case 6:

			cout << "Du faehrst mit dem Zug!" << endl;
			break;

		case 7:

			cout << "Du faehrst mit dem Fahrrad!" << endl;
			break;

		case 8:

			cout << "Du faehrst mit dem Fahrrad!" << endl;
			break;

		case 9:

			cout << "Du gehst zu Fuß!" << endl;
			break;

		}

	}

	system("PAUSE");

	return 0;
}
                

Lösung von: Loris Leitner (Imma-Mack-Realschule Eching)

import java.util.Random;


public class AutoZugFahrradFuß {

    public static void main(String[] args) {
	String [] methode= {"Auto","Zug","Fahrrad","Zu Fuß"};
	 Random random = new Random();
	     int ergebnis = random.nextInt(9);
	     switch (ergebnis){
	     case 1 : case 2 : case 3: System.out.println(methode[1]); break;
	     case 4 : case 5 : case 6: System.out.println(methode[2]); break;
	     case 7 : case 8 :	 System.out.println(methode[3]); break;
	     case 9 :	 System.out.println(methode[4]); break;
	     }
	 
    }

}

                

Lösung von: Name nicht veröffentlicht

import random

#Ohne Zusatzaufgabe
x = random.randint(1,10)
if x <= 3:
    print("Auto")
elif 3 < x <= 6:
    print("Zug")
elif 6 < x <= 8:
    print("Fahrrad")
else:
    print("Zu Fuß")
                

Lösung von: Patrick L. (Gymnasium Friedrich II)

* Aufgabe ohne Seed.

REPORT  zautofahrrad.

DATA: lv_int TYPE i.

DO 20 TIMES.
  CALL FUNCTION 'GENERAL_GET_RANDOM_INT'
    EXPORTING
      range  = 8 " Zufallszahl von 0-8
    IMPORTING
      random = lv_int.

  IF lv_int <= 2.
    WRITE: / 'Auto'.
  ELSEIF lv_int > 2 AND lv_int <= 5.
    WRITE: / 'Bahn'.
  ELSEIF lv_int > 5 AND lv_int <= 7.
    WRITE: / 'Fahrrad'.
  ELSEIF lv_int = 8.
    WRITE: / 'Zu Fuß'.
  ENDIF.
ENDDO.
                

Lösung von: Alexander S. (msg systems)

// NET 6.x | C# 10.x | VS-2022

// 1000 x Zufall (Verhältnis 3:3:2:1)
var lst = Enumerable.Range(1, 1000).Select(x => new Random().Next(1, 10) switch { <= 3 => "Auto", <= 6 => "Zug", <= 8 => "Fahrrad", _ => "zu Fuss" }).ToList();

// Auswertung
var eval = lst.GroupBy(x => x).Select(x => new {type = x.Key, count = x.Count(), percent = x.Count() * 100.0 / 1000}).Select(x => (x.type, x.count, x.percent)).OrderBy(x => -x.count).ToList();

// Ausgabe
Console.WriteLine(string.Join("-", lst)); // wenn es unbedingt sein soll... ;)
eval.ForEach(x => Console.WriteLine($"{x.count} x {x.type} ({x.percent}%)"));
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <iomanip>

std::map<std::string, int> get_grouped_vector(const std::vector<std::string>& v) {
	std::map<std::string, int> m;
	for (const auto& i : v)
		if (m.count(i)) m[i]++;
		else m.emplace(i, 1);
	return m;
}

std::vector<std::string> get_probabilities(int n) {
	srand((int)time(nullptr));
	std::vector<std::string> v;
	for (auto i{ 0 }; i < n; i++)
		switch (rand() * 1000 % 9 + 1) {
		case 1: case 2: case 3: v.push_back("Auto"); break;
		case 4: case 5: case 6: v.push_back("Zug"); break;
		case 7: case 8: v.push_back("Fahrrad"); break;
		case 9: v.push_back("zu Fuss"); break;
		}
	return v;
}

int main() {
	for(const auto& g : get_grouped_vector(get_probabilities(1000)))
		std::cout << g.first << "\t\t" << g.second << "\t" << std::fixed << std::setprecision(2) << g.second * 100.0 / 1000 << " %\n";
}
                

Lösung von: Jens Kelm (@JKooP)

' VBA
Option Base 1
Function GetProbabilities(n%)
    Dim arr(1 To 4)
    Randomize
    For i% = 1 To n
        Select Case CInt(Rnd * 1000 Mod 9 + 1)
            Case 1 To 3: arr(1) = arr(1) + 1    'Auto
            Case 4 To 6: arr(2) = arr(2) + 1    'Zug
            Case 7 To 8: arr(3) = arr(3) + 1    'Fahrrad
            Case 9: arr(4) = arr(4) + 1         'zu Fuss
        End Select
    Next
    GetProbabilities = arr
End Function

Sub Main()
    p = GetProbabilities(1000)
    arr = Array("Auto", "Zug", "Fahrrad", "Zu Fuss")
    For i% = 1 To 4
        Debug.Print arr(i), p(i) * 100# / 1000
    Next
End Sub
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022
#include <iostream>
#include <array>
#include <numeric> // accumulate

inline const auto get_probabilities(size_t num_) {
	std::array<size_t, 9> arr{};
	for (size_t i{ 0 }; i < num_; ++i) arr[rand() % 9]++;
	auto it{ arr.begin() };
	const auto per{ [&it, &num_](int beg, int end) { return std::accumulate(it + beg, it + end, 0) * 100.0 / num_; } };
	return std::make_tuple( per(0, 3), per(3, 6), per(6, 8), per(8, 9) );
}

template<typename Ty_>
inline const std::ostream& print(std::ostream& os, const Ty_& tuple_) {
	const auto [car, train, bicycle, walk] = tuple_; // C++ 20
	os << "Auto: " << car << "\n";
	os << "Zug: " << train << "\n";
	os << "Fahrrad: " << bicycle << "\n";
	os << "Zu Fuss: " << walk << "\n";
	return os;
}

int main() {
	srand((int)time(nullptr));
	print(std::cout, get_probabilities(1'000));
}
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: tfod-exee
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen