Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Beginner: Münzwurf (https://www.delphipraxis.net/191011-beginner-muenzwurf.html)

jdiephaus 29. Nov 2016 20:33

Delphi-Version: 5

Beginner: Münzwurf
 
Hallo liebe Community,
da dies mein erster Beitrag ist möchte ich mich hier kurz vorstellen: Student der Wirtschaftsinformatik, Programmierkenntnisse = 0 (arbeite aber aufrichtig daran, dies zu ändern).

Ich arbeite gerade das Script unseres Profs durch und hänge seit über einer Stunde an einer Aufgabe fest. Diese lautet:

Schreiben Sie ein Programm das SOZUSAGEN eine Münze x mal wirft und die relative Häufigkeit für Kopf ausgibt.

Hier der Code den ich bislang erarbeitet habe:

Code:
program Muenzwurf;
   var n,x,Anzahl,Zufall:Int64;
begin
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  for n:=1 to Anzahl do
   begin
     x:=n+1;
     Zufall:=random(x);
     If Odd(Zufall) then writeln('Kopf') else writeln('Zahl');
   end;
  readln();
end.
Ich habe vor die relative Häufigkeit von Kopf dadurch zu ermitteln, ob ein Zufallswert (random(x)) gerade oder ungerade ist. Soweit klappt die Ausgabe auch wunderbar, jedoch habe ich es nicht hinbekommen zu zählen wie oft der Wert random(x) gerade oder ungerade ist.

Wie würdet ihr das anstellen?

Schöne Grüße und schonmal Danke für die Anregungen!

Klaus01 29. Nov 2016 20:38

AW: Beginner: Münzwurf
 
Delphi-Quellcode:
program Muenzwurf;
   var n,x,Anzahl,Zufall, oddCount:Int64;
begin
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  oddCount := 0;
  for n:=0 to Anzahl do
   begin
     x:=n+1;
     Zufall:=random(x);
     If Odd(Zufall) then
       begin
         writeln('Kopf');
         inc(oddCount,1);
       end
     else
       writeln('Zahl');
   end;
  readln();
end.
Grüße
Klaus

Luckie 29. Nov 2016 20:55

AW: Beginner: Münzwurf
 
ES fehlt die Ausgabe von oddcount zum Schluss.

jdiephaus 29. Nov 2016 20:56

AW: Beginner: Münzwurf
 
Vielen, vielen Dank Klaus. Jetzt komm ich mir extrem dumm vor und das ist auch gut so. :-D

Delphi-Quellcode:
program Muenzwurf;
   var n,x,Anzahl,Zufall,oddCount:Int64; Kopf: real;
begin
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  oddCount:=0;
  for n:=1 to Anzahl do
   begin
     x:=n+1;
     Zufall:=random(x);
     If Odd(Zufall) then
       begin
         writeln('Kopf');
         inc(oddCount,1);
       end
     else
       writeln('Zahl');
   end;
  Kopf:=(oddCount/Anzahl)*100;
  writeln('Relative Haeufigkeit von Kopf:',Kopf:6:2,' Prozent.');
  readln();
end.

Kalakmul 29. Nov 2016 21:03

AW: Beginner: Münzwurf
 
Da eine Münze nur 2 Seiten hat, sollte man vielleicht lieber "Random(2)" nehmen, was zwei Zufallszahlen - nämlich 0 oder 1 - erzeugt.
Die ungeraden - sprich 1 - kann man dann mit "Odd" zählen und in OddCount speichern.
Dann wird die relative Häufigkeit durch "RelHaeuf := OddCount/Anzahl;" berechnet.
Achtung: Die Schleife sollte dann von 1 bis Anzahl laufen, damit die "Münze" wirklich Anzahl-mal geworfen wird.
Zu Beginn sollte man noch "Randomize" einsetzen, damit nicht immer der "gleiche Zufall" abläuft.

Code:
program Muenzwurf;
var
  n, Anzahl,Zufall, oddCount:Int64;
  RelHaeuf: Real;
begin
  Randomize; // initialisiert die "Random seed number" mit der Anzahl der Millisekunden seit Computerstart
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  oddCount := 0;
  for n := 1 to Anzahl do
  begin
    Zufall:=random(2);
    If Odd(Zufall) then
    begin
      writeln('Kopf');
      inc(oddCount,1);
    end
    else
      writeln('Zahl');
  end;
  RelHaeuf := oddCount/Anzahl;
  writeln('Relative Häufigkeit: ', RelHaeuf);
  readln();
end.

jdiephaus 29. Nov 2016 21:17

AW: Beginner: Münzwurf
 
Danke für die Antwort! Das sind einige sehr nützliche Tipps! Nur falls nochmal jemand danach sucht, hier der finale Code:

Delphi-Quellcode:
program Muenzwurf;
var
  n, Anzahl,Zufall, oddCount:Int64;
  RelHaeuf: Real;
begin
  Randomize;
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  oddCount:=0;
  for n:=1 to Anzahl do
  begin
    Zufall:=random(2);
    If Odd(Zufall) then
    begin
      writeln('Kopf');
      inc(oddCount,1);
    end
    else
      writeln('Zahl');
  end;
  RelHaeuf:=(oddCount/Anzahl)*100;
  writeln('Relative Haeufigkeit von Kopf:',RelHaeuf:6:2,'%');
  readln();
end.

haentschman 30. Nov 2016 05:46

AW: Beginner: Münzwurf
 
Moin...:P
Zitat:

Ich arbeite gerade das Script unseres Profs durch
...zu einem Delphi Progamm Script zu sagen, ist wie Jehova zu sagen...:zwinker:

relocate 30. Nov 2016 05:53

AW: Beginner: Münzwurf
 
Zitat:

Zitat von haentschman (Beitrag 1354983)
Moin...:P
Zitat:

Ich arbeite gerade das Script unseres Profs durch
...zu einem Delphi Progamm Script zu sagen, ist wie Jehova zu sagen...:zwinker:

<Klugscheiss>
Die Unterrichtsmaterialien an einer Hochschule heißen Skripte.
</Klugscheiss>

Jumpy 30. Nov 2016 08:23

AW: Beginner: Münzwurf
 
Wenn man eine große Anzahl nimmt, macht es vllt. nicht immer Sinn, jedes Kopf und Zahl einzeln auszugeben, dann ließe sich das noch verkürzen zu:

Delphi-Quellcode:
program Muenzwurf;
var
  n, Anzahl, oddCount:Int64;
  RelHaeuf: Real;
begin
  Randomize;
  writeln('Muenzwurf');
  writeln('Wie oft soll die Muenze geworfen werden?');
  readln(Anzahl);
  oddCount:=0;
  for n:=1 to Anzahl do
    oddCount:=oddCount+random(2);
  RelHaeuf:=(oddCount/Anzahl)*100;
  writeln('Relative Haeufigkeit von Kopf:',RelHaeuf:6:2,'%');
  readln();
end.

Rollo62 30. Nov 2016 13:34

AW: Beginner: Münzwurf
 
Vielleicht ist das auch interessant, wenn du mal nicht mit ideal-gleichverteilten Zufällen testen möchtest (also im Fachjargon Schummeln genannt :stupid:).

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz