Autor Beitrag
mitor
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 35

WinXP Home
D 6.0 PE
BeitragVerfasst: Mo 14.02.05 12:01 
hallo,

wir müssen mal wieder ein kleines proggi machen - diesmal zum würfeln. man gibt die anzahl der würfe ein und erhält dann für jede zahl von 1 bis 6 wie oft diese vetreten ist.

leider klappt das bei mir nicht ganz. für 1 kommt immer ein utopischer wert heraus...2 bis 6 scheinen ok.

guckt euch das mal bitte an:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n, wurf, i, eins, zwei, drei, vier, fuenf, sechs:integer;
begin
n:=strtoint(edit1.Text);
for i:=1 to n do
   begin
   wurf:=random(6)+1;
       case wurf of
       1 : eins := eins+1;
       2 : zwei := zwei+1;
       3 : drei := drei+1;
       4 : vier := vier+1;
       5 : fuenf := fuenf+1;
       6 : sechs := sechs+1
       end
   end;
edit2.text:=inttostr(eins);
edit3.text:=inttostr(zwei);
edit4.text:=inttostr(drei);
edit5.text:=inttostr(vier);
edit6.text:=inttostr(fuenf);
edit7.text:=inttostr(sechs);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.clear;
edit2.clear;
edit3.clear;
edit4.clear;
edit5.clear;
edit6.clear;
edit7.clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
close
end;

end.



Moderiert von user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am Mo 14.02.2005 um 14:40
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 14.02.05 12:04 
mitor hat folgendes geschrieben:
leider klappt das bei mir nicht ganz. für 1 kommt immer ein utopischer wert heraus


Was 1? n = 1 oder die Anzahl der gewürfelten Einsen?

Ausserdem würde ich Randomize bei OnActivate oder OnCreate (vielleicht auch im initialization-Teil) zu verwenden

AXMD
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.02.05 12:10 
bevor du die Schleife beim ButtonClick ausführst, solltest du eventuell die Variablen "eins", "zwei" usw auf 0 setzen (initialisieren)
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 14.02.05 12:11 
Hallo!

Schau Dir doch mal die Warnungen an die Delphi Dir beim Compilieren liefert.
Zitat:
[Warnung] Unit1.pas(??): Variable 'eins' ist möglicherweise nicht initialisiert worden
[Warnung] Unit1.pas(??): Variable 'zwei' ist möglicherweise nicht initialisiert worden
[Warnung] Unit1.pas(??): Variable 'drei' ist möglicherweise nicht initialisiert worden
[Warnung] Unit1.pas(??): Variable 'vier' ist möglicherweise nicht initialisiert worden
[Warnung] Unit1.pas(??): Variable 'fuenf' ist möglicherweise nicht initialisiert worden
[Warnung] Unit1.pas(??): Variable 'sechs' ist möglicherweise nicht initialisiert worden

Das heißt das Du Deine Variablen vorher auf 0 setzen solltest.

Gruß
Tino
mitor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 35

WinXP Home
D 6.0 PE
BeitragVerfasst: Mo 14.02.05 12:12 
OneOfTen hat folgendes geschrieben:
bevor du die Schleife beim ButtonClick ausführst, solltest du eventuell die Variablen "eins", "zwei" usw auf 0 setzen (initialisieren)


Bingo...genau daran hat's gelegen - DANKE!!! :wink:
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 14.02.05 12:17 
Trotzdem solltest du, wie von AXMD oben beschrieben, den Befehl Randomize einmal aufrufen. Sonst bekommst du immer die gleiche Folge von Zufallsergebnissen. Das Randomize sorgt dafür, das die Random-Funktion mit einem meher oder weniger zufälligen Start-Wert beginnt.