Einführung
In diesem Lab lernen Sie, wie man den Erwartungswert einer diskreten Verteilung in der C-Programmiersprache berechnet. Das Lab umfasst die folgenden Schritte: Lesen der Werte und Wahrscheinlichkeiten, Berechnung des Erwartungswertes durch Summierung des Produkts jedes Wertes und seiner entsprechenden Wahrscheinlichkeit und Ausgabe des Endergebnisses. Das Programm ermöglicht es den Benutzern, die Anzahl der Ergebnisse, die Werte und ihre jeweiligen Wahrscheinlichkeiten einzugeben und anschließend die eingegebenen Werte zur Überprüfung anzuzeigen. Dieses Lab zielt darauf ab, ein praktisches Verständnis von Wahrscheinlichkeit und Kombinatorik mithilfe von C zu vermitteln, eine wertvolle Fähigkeit in verschiedenen Bereichen wie Datenanalyse, maschinellem Lernen und Entscheidungsfindung.
Werte und Wahrscheinlichkeiten einlesen
In diesem Schritt lernen Sie, wie Sie Werte und Wahrscheinlichkeiten zum Berechnen des Erwartungswertes einer diskreten Verteilung in C einlesen. Wir erstellen ein Programm, das es Benutzern ermöglicht, mehrere Werte und ihre entsprechenden Wahrscheinlichkeiten einzugeben.
Erstellen Sie zunächst eine neue C-Datei im Verzeichnis ~/project:
cd ~/project
nano expected_value.c
Schreiben Sie nun den Anfangscode zum Einlesen von Werten und Wahrscheinlichkeiten:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
printf("Geben Sie die Anzahl der Ergebnisse ein (max %d): ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
// Werte eingeben
printf("Geben Sie die Werte ein:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wert %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Wahrscheinlichkeiten eingeben
printf("Geben Sie die Wahrscheinlichkeiten ein:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wahrscheinlichkeit %d: ", i + 1);
scanf("%lf", &probabilities[i]);
}
// Eingaben zur Überprüfung ausgeben
printf("\nEingabewerte:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wert %d: %.2f, Wahrscheinlichkeit %d: %.2f\n",
i + 1, values[i], i + 1, probabilities[i]);
}
return 0;
}
Kompilieren und ausführen Sie das Programm:
gcc expected_value.c -o expected_value
./expected_value
Beispielausgabe:
Geben Sie die Anzahl der Ergebnisse ein (max 10): 3
Geben Sie die Werte ein:
Wert 1: 10
Wert 2: 20
Wert 3: 30
Geben Sie die Wahrscheinlichkeiten ein:
Wahrscheinlichkeit 1: 0.2
Wahrscheinlichkeit 2: 0.5
Wahrscheinlichkeit 3: 0.3
Eingabewerte:
Wert 1: 10.00, Wahrscheinlichkeit 1: 0.20
Wert 2: 20.00, Wahrscheinlichkeit 2: 0.50
Wert 3: 30.00, Wahrscheinlichkeit 3: 0.30
Wichtige Punkte:
- Wir verwenden Arrays, um Werte und Wahrscheinlichkeiten zu speichern.
MAX_OUTCOMESdefiniert die maximale Anzahl möglicher Ergebnisse.scanf()wird verwendet, um Benutzereingaben für Werte und Wahrscheinlichkeiten zu lesen.- Wir geben die Eingabe aus, um die korrekte Dateneingabe zu überprüfen.
Summe (Wert * Wahrscheinlichkeit) über alle Ergebnisse
In diesem Schritt erweitern Sie das vorherige Programm, um den Erwartungswert zu berechnen, indem Sie die Summe jedes Wertes multipliziert mit seiner Wahrscheinlichkeit berechnen.
Öffnen Sie die vorhandene Datei und ändern Sie den Code:
cd ~/project
nano expected_value.c
Aktualisieren Sie den Code, um den Erwartungswert zu berechnen:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
double expected_value = 0.0;
printf("Geben Sie die Anzahl der Ergebnisse ein (max %d): ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
// Werte eingeben
printf("Geben Sie die Werte ein:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wert %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Wahrscheinlichkeiten eingeben
printf("Geben Sie die Wahrscheinlichkeiten ein:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wahrscheinlichkeit %d: ", i + 1);
scanf("%lf", &probabilities[i]);
}
// Erwartungswert berechnen
for (int i = 0; i < num_outcomes; i++) {
expected_value += values[i] * probabilities[i];
}
// Ergebnisse ausgeben
printf("\nBerechnungsdetails:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wert %d: %.2f * Wahrscheinlichkeit %d: %.2f = %.2f\n",
i + 1, values[i], i + 1, probabilities[i],
values[i] * probabilities[i]);
}
printf("\nErwartungswert: %.2f\n", expected_value);
return 0;
}
Kompilieren und ausführen Sie das aktualisierte Programm:
gcc expected_value.c -o expected_value
./expected_value
Beispielausgabe:
Geben Sie die Anzahl der Ergebnisse ein (max 10): 3
Geben Sie die Werte ein:
Wert 1: 10
Wert 2: 20
Wert 3: 30
Geben Sie die Wahrscheinlichkeiten ein:
Wahrscheinlichkeit 1: 0.2
Wahrscheinlichkeit 2: 0.5
Wahrscheinlichkeit 3: 0.3
Berechnungsdetails:
Wert 1: 10.00 * Wahrscheinlichkeit 1: 0.20 = 2.00
Wert 2: 20.00 * Wahrscheinlichkeit 2: 0.50 = 10.00
Wert 3: 30.00 * Wahrscheinlichkeit 3: 0.30 = 9.00
Erwartungswert: 21.00
Wichtige Punkte:
- Wir führen
expected_valueein, um die Summe von Wert * Wahrscheinlichkeit zu speichern. - Die
for-Schleife berechnet jeden Term und summiert den Gesamtbetrag. - Wir geben detaillierte Berechnungsschritte aus, um zu zeigen, wie der Erwartungswert berechnet wird.
- Der Beitrag jedes Ergebnisses wird als (Wert * Wahrscheinlichkeit) angezeigt.
Ausgabe des Erwartungswertes
In diesem letzten Schritt verbessern Sie das Programm, um eine detailliertere Ausgabe und eine verbesserte Benutzererfahrung bei der Anzeige des Erwartungswertes zu erhalten.
Öffnen Sie die vorhandene Datei und nehmen Sie die endgültigen Änderungen vor:
cd ~/project
nano expected_value.c
Aktualisieren Sie den Code mit verbesserter Formatierung und Fehlerprüfung:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
double expected_value = 0.0;
double total_probability = 0.0;
printf("Erwartungswert-Rechner\n");
printf("======================\n");
// Eingabe der Anzahl der Ergebnisse
do {
printf("Geben Sie die Anzahl der Ergebnisse (1-%d) ein: ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
if (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES) {
printf("Ungültige Anzahl der Ergebnisse. Bitte versuchen Sie es erneut.\n");
}
} while (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES);
// Eingabe der Werte
printf("\nWerte eingeben:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wert %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Eingabe der Wahrscheinlichkeiten mit Validierung
printf("\nWahrscheinlichkeiten eingeben:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Wahrscheinlichkeit %d: ", i + 1);
scanf("%lf", &probabilities[i]);
total_probability += probabilities[i];
}
// Validierung der Gesamtwahrscheinlichkeit
if (total_probability < 0.99 || total_probability > 1.01) {
printf("\nWARNUNG: Die Wahrscheinlichkeiten summieren sich nicht zu 1,0 (aktuelle Summe: %.2f)\n",
total_probability);
}
// Berechnung des Erwartungswertes
for (int i = 0; i < num_outcomes; i++) {
expected_value += values[i] * probabilities[i];
}
// Ausgabe der detaillierten Ergebnisse
printf("\n--- Berechnungsdetails ---\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Ergebnis %d: Wert = %.2f, Wahrscheinlichkeit = %.2f\n",
i + 1, values[i], probabilities[i]);
printf(" Beitrag: %.2f * %.2f = %.2f\n",
values[i], probabilities[i], values[i] * probabilities[i]);
}
// Ausgabe des endgültigen Erwartungswertes
printf("\n=== Erwartungswert ===\n");
printf("E(X) = %.2f\n", expected_value);
return 0;
}
Kompilieren und ausführen Sie das endgültige Programm:
gcc expected_value.c -o expected_value
./expected_value
Beispielausgabe:
Erwartungswert-Rechner
======================
Geben Sie die Anzahl der Ergebnisse (1-10) ein: 3
Werte eingeben:
Wert 1: 10
Wert 2: 20
Wert 3: 30
Wahrscheinlichkeiten eingeben:
Wahrscheinlichkeit 1: 0.2
Wahrscheinlichkeit 2: 0.5
Wahrscheinlichkeit 3: 0.3
--- Berechnungsdetails ---
Ergebnis 1: Wert = 10.00, Wahrscheinlichkeit = 0.20
Beitrag: 10.00 * 0.20 = 2.00
Ergebnis 2: Wert = 20.00, Wahrscheinlichkeit = 0.50
Beitrag: 20.00 * 0.50 = 10.00
Ergebnis 3: Wert = 30.00, Wahrscheinlichkeit = 0.30
Beitrag: 30.00 * 0.30 = 9.00
=== Erwartungswert ===
E(X) = 21.00
Wichtige Verbesserungen:
- Hinzugefügte Eingabevalidierung für die Anzahl der Ergebnisse
- Überprüfte Gesamtwahrscheinlichkeitssumme
- Verbesserte Ausgabeformatierung
- Angezeigt einzelne Ergebnisbeiträge
- Deutlich angezeigter endgültiger Erwartungswert
Zusammenfassung
In diesem Labor lernen Sie, wie Sie Werte und Wahrscheinlichkeiten einlesen und anschließend den Erwartungswert einer diskreten Verteilung in C berechnen. Zuerst erstellen Sie ein Programm, das es Benutzern ermöglicht, mehrere Werte und ihre entsprechenden Wahrscheinlichkeiten einzugeben. Anschließend lernen Sie, wie Sie das Produkt aus jedem Wert und seiner Wahrscheinlichkeit summieren, um den Erwartungswert zu berechnen. Schließlich geben Sie den berechneten Erwartungswert aus.
Die in diesem Labor behandelten wichtigen Punkte umfassen die Verwendung von Arrays zum Speichern von Werten und Wahrscheinlichkeiten, die Definition einer maximalen Anzahl möglicher Ergebnisse und die Verwendung der Funktion scanf(), um Benutzereingaben zu lesen. Das Programm stellt sicher, dass die eingegebenen Werte und Wahrscheinlichkeiten zur Überprüfung ausgegeben werden, bevor mit dem nächsten Schritt fortgefahren wird.



