Histogramm

milli2000

Grünschnabel
Hallo,

mein Programm soll einen Histogramm ausgeben.
Ich habe zwei Würfel, dessen geworfene Werte gemittelt werden.
Der Anwender meines Programmes soll seine Werte eingeben und das Programm soll ermitteln wieviel mal der Anwender 2,3,4,5,6,7,8,9,10,11,12 geworfen hat. das Ergebnis soll ich einen Histogramm ausgeben, der so aussehen soll:
How many attempts? 10

2: x
3:
4:
5: xx
6: x
7: xx
8:
9: xx
10: x
11: x
12:

Ich komm nicht drauf wie mein Programm die x-en ausgeben soll?
Kann da jemand bitte helfen:confused:?
 
mit einer Schleife über ein printf("x")-Statement. Du speicherst doch hoffentlich die Anzahl der geworfenen Ergebnisse?
 
Entweder Du machst ein Array mit den Würfen (jeder Wurf ein Eintrag mit dem Ergebnis)

zB
Wurf(1)=1
Wurf(2)=4
Wurf(3)=3
etc..

Oder Du zählst gleich die Ergebnisse hoch (einfacher für die Auswertung), also

zB
Zahl(1)=1
Zahl(2)=3
Zahl(3)=1
Zahl(4)=2
Zahl(5)=1
Zahl(6)=2

Beim ersten Beispiel trägst Du jeden Wurf in das Array ein, beim zweiten Vorgehen, erhöhst Du das jeweilige Ergebnis(Zahlenarray) um 1. Am Ende bist Du mit Variante 1 für weitere Berechnungen besser dran, mit Variante 2 bist Du aber bez. Deines Histogramms schneller am Ziel. Das Histogramm lässt sich aus Variante 2 sofort umsetzen, indem Du eine simple Schleife laufen lässt.

Da wir Hier in c/c++ sind, kann ich keinen richtigen Code schreiben, aber sinngemäß sollte er so aussehen:

Code:
for zeigeaugen=1 to 6
  Zahl_string=zeigeaugen+" : "
  xe=""
  for x_setzen=0 to Zahl(zeigeaugen)
     xe=xe+"x"
  next x_setzen
  print Zahl_string+xe
next zeigeaugen

p.s.: Äh Ja, 2 Würfel :D analog zum 1-Würfel-Problem vorgehen :)

mfg chmee
 
Code:
#include <cstdlib>
#include <iostream>
#include <iomanip>

int main ()
{
  
    const int Max_throws=25;
	int diceThrows;
	srand(time(NULL));
	int dice;
	int counts[Max_throws];
	cout << "how many times you want to throw the dice? " << endl;
	cout << "Maximum number of throws allowed is  " << Max_throws << endl;
	cin >> diceThrows;
	for(int i=0; i<diceThrows; i++)
	{
		dice= 1+ rand()%6;
		counts[i]=dice;
		cout << "throw " << i+1 << " first dice is " << dice << endl;
		dice= 1+ rand()%6;
		counts[i]=counts[i]+dice; // add it to the first one
		cout << "throw " << i+1 << " second dice is " << dice << endl;
		cout <<"throw " << i+1 << " sum is " << counts[i] << endl; 
	}
	cout<< "------End Throws------" << endl;
       
    system("PAUSE");
    return EXIT_SUCCESS;
}

bis jetzt hab ich das programmiert bekomme aber ne fehler meldung, dass ich nicht cout deklariert hab.
 
Milli2000, Wir haben eine Ändern-Knopf, Du musst nicht ständig neue Beiträge für 1-Satz-Infos anhängen. Und : Wir machen keine Fremdhausaufgaben, sorry. Wir sind Dir gerne behilflich, Deine Lösung zu erarbeiten, aber fragen und fertige Lösung bekommen soll es hier nicht geben. Dabei lernst Du nix, sondern schreibst nur ab.

Zum Eigentlichen :
Die random()-Sache macht es doch einfach und schnell überprüfbar. Mach Dir doch erstmal Gedanken, wie die logische Reihenfolge der Befehlskette ist. (Erstmal Zahlenwurf simulieren und in das Array speichern, danach das Array auswerten und ausgeben)

Zahlenwurf - Schleife mit n Würfen, in jedem Schleifendurchgang speichern im Array.
Auswertung - siehe oben!

mfg chmee
 
Ich habe nicht erwartet, dass ihr meine Hausaufgaben macht. Kannst du vieleicht mich auf dem weg zu der lösung begleiten? wenn ich fragen hab mich an dich wenden, denn ich wirklich was lernen. brauch unbedingt c++ zu verstehen.
Fragen:
Ich habe den Zahlenwurf simuliert und auch in einen Array gespeicher in den Code siehe oben gesteckt. oder?
Jetzt muss ich den Array auswerten das heisst herausleiten wieviel mal eine Zahl geworfen wurde. Wie macht man das?Soll ich da einen neuen Array daraus generieren wie soll das Funktionieren?


lg
milli2000
 
Zuletzt bearbeitet:
Zurück