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 nochmal n-maliges Würfeln (https://www.delphipraxis.net/85736-nochmal-n-maliges-wuerfeln.html)

General Wolf1 4. Feb 2007 09:10


nochmal n-maliges Würfeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
hihi muss nochmal nerven!
Hab da in meinem Programm immer noch ein Problem. Undzwar zählt der die Ergäbnisse nicht weiter sondern schreibt mir immer wieder nur 1 hin. kann mir mal einer sagen wie ich das mache das der auch bis 3 und mehr zählen kann!
Greez Dori
Hier mal NUR der Wichtige Teil aus meinem Quelltext
ganzes Projekt ist im Anhang!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,f,g,h,i:Integer;
begin
a:=strtoint(Edit1.Text);
d:=0; e:=0; f:=0; g:=0; h:=0; i:=0;
randomize;

for b:= 1 to a
do
begin
c:=random(6)+1;
case c of
1:label16.Caption:=inttostr(d+1);//bei der Ausgabe gibt der mir immer nur 1 an!! Wieso? 
2:label17.Caption:=inttostr(e+1);
3:label18.Caption:=inttostr(f+1);
4:label19.Caption:=inttostr(g+1);
5:label20.Caption:=inttostr(h+1);
6:label21.Caption:=inttostr(i+1);
end;
Kann mir auch mal einer verrraten wie ich in der case anweisung den Zahlen eine Variable zuordne. Das wäre vielleicht schon die lösung.

[edit=Jelly] Nächstes Mal die Delphi-Tags bitte einpflegen. Mfg, Jelly[/edit]

dominikkv 4. Feb 2007 09:12

Re: nochmal n-maliges Würfeln
 
und jetzt antworte ich auch noch in deinem 2ten threat^^
Zitat:

ähm... ich hab mir jetzt nicht das ganze projekt angeschaut aber:
Delphi-Quellcode:
// ...
d:=0; e:=0; f:=0; g:=0; h:=0; i:=0;
// ...
1:label16.Caption:=inttostr(d+1);//bei der Ausgabe gibt der mir immer nur 1 an!! Wieso?
// ...
d ist zuerst 0, und dann gibst du d+1 aus, also 1
edit: aahhh...und jetzt verstehe ich auch deinen denkfehler^^
bei dem befehl inttostr(d+1)wird einfach nur d+1 gerechnet und als string umgewandelt, dannach hat d jedoch immernoch den wert von vorher, also immernoch 0... wenn du d um eins erhöhen willst kannst du das mit d := d+1 oder einfach mit Inc(d) machen.

Elicia 4. Feb 2007 09:20

Re: nochmal n-maliges Würfeln
 
Hi,

statt

1:label16.Caption:=inttostr(d+1);

probiere:
1:label6.Caption:=inttostr(d)+1;

d.h. du wandelst d in einen Integer um und addierst DANACH die 1 !

Gruß, Elicia

korrigiere nochmal:

case c of
1:d := d+1; // oder einfacher: inc(d)
2:e := e+1);

NACH der for-Schleife gibst du dann der Reihe nach d, e usw. mit IntToStr in den Labels aus!

General Wolf1 4. Feb 2007 09:22

Re: nochmal n-maliges Würfeln
 
ist ja richtig aber der wenn ich den 20 mal würfeln lasse müssten mindestens2 Zahlen mehrmals auftreten!
Also müsste der weiterzählen! z.b.: 1 wurde 3mal und die 2 würde 5mal usw. gewürfelt!
Und mein problem ist das der nicht über die 1 hinausgeht!
Wäre nett wenn mir da jemand helfen könnte!
>>??Was ist so schlimm daran das ich noch ein neues thema gemacht habe??<<

General Wolf1 4. Feb 2007 09:23

Re: nochmal n-maliges Würfeln
 
statt

1:label16.Caption:=inttostr(d+1);

probiere:
1:label6.Caption:=inttostr(d)+1;

d.h. du wandelst d in einen Integer um und addierst DANACH die 1 !

>>Hab ich auch schon probiert --> Bringt mir eine Fehlermeldung

Thorben_K 4. Feb 2007 09:26

Re: nochmal n-maliges Würfeln
 
Zitat:

Zitat von Elicia
Hi,

statt

1:label16.Caption:=inttostr(d+1);

probiere:
1:label6.Caption:=inttostr(d)+1;

d.h. du wandelst d in einen Integer um und addierst DANACH die 1 !

Gruß, Elicia

ich weiss nicht wie du das anstellen willst, du kannst doch einem String nicht die Zahl 1 addieren.... So geht das auf keinen fall.
Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,f,g,h,i:Integer;
begin
a:=strtoint(Edit1.Text);
d:=0; e:=0; f:=0; g:=0; h:=0; i:=0;
randomize;

for b:= 1 to a
do
begin
c:=random(6)+1;
case c of
1:
  Begin
  Inc(d);
  abel16.Caption:=inttostr(d);//bei der Ausgabe gibt der mir immer nur 1 an!! Wieso?
  end;
2: ... //usw

end;
so machst du das halt mit allen Variablen, bin zu faul alles nun auszuschreiben :D

PS: Mit einem array wäre das alles viel einfacher..

General Wolf1 4. Feb 2007 09:32

Re: nochmal n-maliges Würfeln
 
GOIL
Danke an >>dominikkv<<
Jetzt funzt es!!
Ist ja richtig geil!! Danke*hihi*
>>ACH ja und danke an alle anderen die so fleißig geposted haben und mein generve ertragen haben<<
Ich stell Später noch das funzende Projekt rein!!
DA KANN SICH JEDER AN EINEM N-MALIGEN WÜRFEL ERFREUEN!!!
braucht keiner ist aber geil!!!
Greez Dori

jaenicke 4. Feb 2007 09:37

Re: nochmal n-maliges Würfeln
 
Die Labels müssen auch vor jedem Würfeln am Anfang gelöscht werden, da sonst der Wert vom letzten Würfeln stehen bleibt, wenn eine Augenzahl nicht gewürfelt wird (weil die Labels ja nur in case aktualisiert werden).

Es wäre aber sinnvoller das mit einem Array und FindComponent zu machen anstatt die Labels direkt anzusprechen...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  WurfListe: array[1..6] of Integer;
  WurfAnzahl, i, AktuellerWert: Integer;
begin
  WurfAnzahl := StrToInt(Edit1.Text);
    // Anzahl der gewünschten Würfe
  for i := 1 to 6 do
  begin
    WurfListe[i] := 0;
      // Anzahl zunächst jeweils 0 bei jeder Augenzahl
    TLabel(FindComponent('Label' + IntToStr(15 + i))).Caption := '0';
      // Die Labels auf 0 als Startwert setzen.
      // Wenn sonst nämlich eine Augenzahl gar nicht vorkommt bleibt der Wert
      // vom vorherigen Würfeln drin... ;-)
  end;

  Randomize;

  for i := 1 to WurfAnzahl do
  begin
    AktuellerWert := Random(6) + 1;
      // Zufallswert holen
    Inc(WurfListe[AktuellerWert]);
      // Im Array bei der entsprechenden Augenzahl 1 hinzufügen
    TLabel(FindComponent('Label' + IntToStr(15 + AktuellerWert))).Caption :=
      IntToStr(WurfListe[AktuellerWert]);
      // Und den Label (16 bis 21) aktualisieren
  end;
end;

xZise 4. Feb 2007 09:41

Re: nochmal n-maliges Würfeln
 
1.: Achtung: Du musst die Variablen global deklarieren! Ansonsten "verschwinden" die nachdem man einmal auf den Button geklickt hat!
2.: Delphicode immer in
Code:
[delphi]<Der Code>[/delphi]
Schreiben ;)
3.: "IntToStr(d) + 1" kann nicht funktionieren, weil man zu einen String nicht "1" addieren kann! Es muss eher so gehen wie oben beschrieben:
Delphi-Quellcode:
case c of
  1 : begin
    ind(d); // d um eins erhöhen
    label16.Caption := IntToStr(d);
  end;
  ...
end;
4.: Man könnte sich die Variable c sparen! Du kannst direkt case Random(6) of schreiben, und dann auf 0 bis 5 prüfen!
5.: ggf. Könntest du auch mit arrays arbeiten ;) Vorteil: Der Case-Teil entfällt :P (Eine kleine Erklärung zu Arrays und auf DSDT)

PS: @ 1.: OOPs... Es sieht so aus, als bräuchte man es nicht ^^

Thorben_K 4. Feb 2007 09:44

Re: nochmal n-maliges Würfeln
 
Altanative ginge auch noch

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  zahlen : array[1..6] of LongInt;
  wurf, i, count : LongInt;
  Comp : TComponent;
begin

  randomize;
  count := StrToInt(Edit1.Text);
  for i := 1 to 6  do
    zahlen[i] := 0;
  for i := 0 to count -1  do
  begin
    wurf := Random(6) +1;
    Inc(zahlen[wurf]);
  end;

  for i := 1 to 6 do
  begin
    comp := FindComponent('Label'+ IntToStr(i));
   (Comp as TLabel).Caption := IntToStr(zahlen[i]);
  end;
end;
so ist es meiner bescheidenen Meinung nach einfach :)

gruss Thorben

EDIT: Oh da hatte wohl jemand die selbe Idee, das gut, das sagt mit das die idee gar net so schlecht ist :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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