# Wahrscheinlichkeit



## Lukases2 (18. Dez 2014)

Aufgabe: Auswahl von Studenten
Sie betrachten folgendes Szenario:
In einer Übungsgruppe befinden sich 30 Studenten, doch nur 10 von ihnen können wirklich sicher programmieren. Von nun an soll zu jeder Übungsaufgabe eine Lösung von einem zufällig ausgewählten Studenten der Gruppe präsentiert werden.
Frage: Wie wahrscheinlich ist es das ein nicht so guter Programmierer vortragen muss?
Implementieren Sie die benötigten Attribute, Konstruktoren und Methoden in einer Klasse Uebungsgruppe. Beachten Sie hierbei folgende 5 Hinweise:

1. Folgende Methode berechnet Ihnen die Wahrscheinlichkeit dafür, dass ein Student ausgewählt wird, der nicht gut programmieren kann. Voraussetzung hierfür ist: p aus anzahlStudenten Studenten können programmieren und es gibt in der Stunde u Übungsaufgaben:

```
public void wahrscheinlichkeitBerechnen(int p, int u){
wahrscheinlichkeit = (double)(binom(anzahlStudenten-p,u)*binom(p,0))/ (double)binom(anzahlStudenten,u);
}
```
2. Nutzen Sie dabei die rekursive Implementierung des Binomialkoeffizienten:

```
public int binom(int n, int k){
if (k==0||k==n) return 1;
else return binom(n-1,k) + binom(n-1,k-1);
}
```
3. Passen Sie ihre Klasse Uebungsgruppe soweit an, dass ein Konstruktor die nicht-öffentlichen Attribute anzahlStudenten und wahrscheinlichkeit initialisiert.
4. Überladen Sie diesen Konstruktor, indem Sie eine Methode anwesenheit() schreiben und verwenden um dem Attribut anzahlStudenten eine Zufallszahl zwischen 25 und 30 zuzuordnen.
5. Entwerfen Sie außerdem mithilfe von Standard- und Wrapperklassen eine Methode zur anschauliche Bildschirmausgabe der Lösung:
z.B. Wahrscheinlichkeit: 0,365085 => Ausgabe: 36,51%
Testen Sie schließlich ihre Implementierung in einer Klasse UebungMain und beantworten Sie die Frage.

Folgendes habe ich dazu geschrieben:

```
package bpack;

public class Uebungsgruppe {
	
	double wahrscheinlichkeit;
	int anzahlStudenten = 30;
	
	int p;
	int u;
	
	// Kriterium 1
	public void wahrscheinlichkeitBerechnen(int p, int u){
		wahrscheinlichkeit = (double)(binom(anzahlStudenten-p,u)*binom(p,0))/ (double)binom(anzahlStudenten,u);
		}
	
	//Kriterium 2
	public int binom(int n, int k){
		if (k==0||k==n) return 1;
		else return binom(n-1,k) + binom(n-1,k-1);
		}
	
	// Kriterium 3
	public Uebungsgruppe(double a /*anzahlStudenten*/, double w /*wahrscheinlichkeit*/){
		a = anzahlStudenten;
		w = wahrscheinlichkeit;
	}
	
	// Kriterium 4
	public static double anwesenheit(){
		return (int) (30 - Math.random()*5);
	}
	//Kriterium 5
	// fehlt noch ...
}
```

Probleme habe ich bei:

Darstellung mit Wrapperklassen
Ausgabe der Wahrscheinlichkeit. Die ist doch schon berechnet, oder? Wie gebe ich die dann aus?


----------



## Gucky (18. Dez 2014)

Bildschirmausgaben werden mit System.out.print***(); gemacht.
Das dürfte eigentlich kein Problem sein.


Wrapperklassen sind sowas, wie Math. Dort werden Methoden, wie zum Beispiel round angeboten, um aus deiner Zahl eine Prozentangabe zu machen.


----------



## stg (18. Dez 2014)

Gucky hat gesagt.:


> Wrapperklassen sind sowas, wie Math.



Math ist final und nicht instanzierbar, wie und was soll man denn damit wrappen? 

Beispiele für Wrapperklassen sind zum Beispiel Integer für int, o.Ä.
(Man kann aber natürlich auch eigene Wrapper für komplexeren Krams schreiben, wenn man möchte...)


----------



## Gucky (18. Dez 2014)

Ahhhhhhhhhh Mist. Ich hab Wrapper und Util Klassen verwechselt. 

Aber es ist auch die Rede von Standartklassen. Und da kann man Math wieder verwenden.


----------

