Autor |
Beitrag |
DMDADKT
      
Beiträge: 25
|
Verfasst: Mo 01.09.08 22:03
moin leute!
ich hab hier mal ein kleines problem. und zwar habe ich diesen code hier:
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:
| var n, i, j: integer; erl: char; volk: array[1..8] of integer; versch: boolean;
begin writeln('Willkommen beim ultimativen "Warhammer 40k: Soulstorm" Zufallsvolkausgeber!'); writeln; write('Spielerzahl: '); readln(n); write('Sind gleiche Voelker erlaubt? (y/n) '); readln(erl); writeln; randomize; for i:=1 to n do begin if erl='n' then repeat volk[i]:=(random(n)); versch:=true; for j:=1 to (i-1) do if volk[i] = volk[j] then versch:= false until versch=true else volk[i]:=(random(n)); case volk[i] of 0: writeln('Spieler ' + inttostr(i) + ': Space Marines'); 1: writeln('Spieler ' + inttostr(i) + ': Eldar'); 2: writeln('Spieler ' + inttostr(i) + ': Chaos Space Marines'); 3: writeln('Spieler ' + inttostr(i) + ': Orks'); 4: writeln('Spieler ' + inttostr(i) + ': Imperiale Armee'); 5: writeln('Spieler ' + inttostr(i) + ': Tau'); 6: writeln('Spieler ' + inttostr(i) + ': Necrons'); 7: writeln('Spieler ' + inttostr(i) + ': Adeptus Sororitas'); 8: writeln('Spieler ' + inttostr(i) + ': Dark Eldar'); end; end. |
er soll eigentlich dazu dienen, jeweils ein zufälliges unter 9 völkern in einem spiel für eine beliebige anzahl spieler auszugeben. dabei kann man sich entscheiden, ob gleiche völker möglich sind oder nicht.
allerdings erhalte ich zb bei der auswahl -2 spieler - selbe teams möglich- immer wieder 2 space marines, 2 eldar oder einen space marine und einen eldar als ausgabe.
was stimmt nicht mit der zufälligkeit?
danke und gruß, dmdadkt
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
_________________ "Sicher spinne ich, was aber nicht heißt, dass ich mich irre. Ich bin verrückt, nicht krank" -Robert Anton Wilson
Zuletzt bearbeitet von DMDADKT am Mo 01.09.08 22:15, insgesamt 1-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 01.09.08 22:06
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 01.09.08 22:08
Ruf das Randomize mal ganz am Anfang auf, bevor du irgendwas ausgibst.
@Hidden: Hab ich auch zuerst gedacht, aber er hats drin 
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 01.09.08 22:10
Moin!
DMDADKT hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3:
| write('Spielerzahl: '); readln(n); volk[i]:=(random(n)); | |
Das n steht doch für die Anzahl Spieler, und nicht für die Völkeranzahl, oder?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 01.09.08 22:11
Xentar hat folgendes geschrieben: | Ruf das Randomize mal ganz am Anfang auf, bevor du irgendwas ausgibst.
@Hidden: Hab ich auch zuerst gedacht, aber er hats drin  |
Ups, den Fall hielt ich für so klar. Sry 
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
DMDADKT 
      
Beiträge: 25
|
Verfasst: Mo 01.09.08 22:13
Narses hat folgendes geschrieben: | Moin!
DMDADKT hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3:
| write('Spielerzahl: '); readln(n); volk[i]:=(random(n)); | | Das n steht doch für die Anzahl Spieler, und nicht für die Völkeranzahl, oder?
cu
Narses |
du hast recht!
habs korregiert, problem bleibt aber bestehn..
aber danke schonmal für die antworten!
und @hidden: gesucht habe ich bereits :/
Edit: yay! es hat wirklich geholfen das randomize ganz an den anfang zu setzen! ich dacht ich hötte das schonmal versucht
vielen dank!
_________________ "Sicher spinne ich, was aber nicht heißt, dass ich mich irre. Ich bin verrückt, nicht krank" -Robert Anton Wilson
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 01.09.08 22:17
Moin!
DMDADKT hat folgendes geschrieben: | du hast recht!
habs korregiert, problem bleibt aber bestehn.. |
Dann würde ich doch gerne mal die "Korrektur" sehen.
DMDADKT hat folgendes geschrieben: | Edit: yay! es hat wirklich geholfen das randomize ganz an den anfang zu setzen! ich dacht ich hötte das schonmal versucht  |
Das kann ich mir nicht vorstellen, setz das Randomize; mal wieder zurück, wo es vorher stand, das sollte keinen Unterschied machen!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 01.09.08 23:30
Narses hat folgendes geschrieben: | DMDADKT hat folgendes geschrieben: | Edit: yay! es hat wirklich geholfen das randomize ganz an den anfang zu setzen! ich dacht ich hötte das schonmal versucht  | Das kann ich mir nicht vorstellen, setz das Randomize; mal wieder zurück, wo es vorher stand, das sollte keinen Unterschied machen!  |
Meine Erklärung hierfür:
Random basiert auf der Systemzeit.
So, wie es vorher da stand, war die Zeit zwischen der Ausführung Randomize; und Random(n); immer gleich, weil der Prozessor ja nicht langsamer wurde. Dadurch hatte man hier keinen "zufälligen" Wert bei -> immer das gleiche Ergebnis.
Wenn Randomize nun ganz am anfang aufgerufen wird, hat man einen zufälligen Wert: Nämlich die Zeit, die der Anwender braucht, bis er eine Eingabe tätigt.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 01.09.08 23:58
Moin!
Xentar hat folgendes geschrieben: | Meine Erklärung hierfür: |
...ist falsch.
Beweis:
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:
| const VolkStr: array[0..8] of String = ('Space Marines','Eldar','Chaos Space Marines', 'Orks','Imperiale Armee','Tau','Necrons','Adeptus Sororitas','Dark Eldar');
var n, i, j: Integer; Duplikate: Char; Volk: array[1..9] of Integer; Doppelt: Boolean;
begin Writeln('Willkommen beim ultimativen "Warhammer 40k: Soulstorm" Zufallsvolkausgeber!'); Writeln; Write('Spielerzahl (1..9): '); Readln(n); Write('Sind gleiche Voelker erlaubt? (y/n) '); Readln(Duplikate); Writeln; Randomize; for i := 1 to n do begin repeat Volk[i] := Random(9); Doppelt := FALSE; if (UpCase(Duplikate) = 'N') then for j := 1 to (i-1) do Doppelt := Doppelt or (Volk[i] = Volk[j]); until NOT Doppelt; Writeln('Spieler '+IntToStr(i)+': '+VolkStr[Volk[i]]); end; ReadLn; | Es muss an einer anderen Änderung an seinem Code gelegen haben (der eine oder andere Anfänger soll ja schon mehrfach darüber gestolpert sein, gleich mehrere Änderungen auf einmal zu machen und dann nicht mehr zu wissen, an welcher Änderung es gelegen hat...  )
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 02.09.08 10:15
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Di 02.09.08 10:59
|
|
DMDADKT 
      
Beiträge: 25
|
Verfasst: Di 02.09.08 16:33
hrm, das ist komisch. schaut euch mal meine version an(anhang). sieht random aus, oder?
hier nochmal der code zum notfalls selberkompilieren.
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:
| var n, i, j: integer; erl: char; volk: array[1..8] of integer; versch: boolean;
begin randomize; writeln('Willkommen beim ultimativen "Warhammer 40k: Soulstorm" Zufallsvolkausgeber!'); writeln; write('Spielerzahl: '); readln(n); write('Sind gleiche Voelker erlaubt? (y/n) '); readln(erl); writeln; for i:=1 to n do begin if erl='n' then repeat volk[i]:=(random(9)); versch:=true; for j:=1 to (i-1) do if volk[i] = volk[j] then versch:= false until versch=true else volk[i]:=(random(9)); case volk[i] of 0: writeln('Spieler ' + inttostr(i) + ': Space Marines'); 1: writeln('Spieler ' + inttostr(i) + ': Eldar'); 2: writeln('Spieler ' + inttostr(i) + ': Chaos Space Marines'); 3: writeln('Spieler ' + inttostr(i) + ': Orks'); 4: writeln('Spieler ' + inttostr(i) + ': Imperiale Armee'); 5: writeln('Spieler ' + inttostr(i) + ': Tau'); 6: writeln('Spieler ' + inttostr(i) + ': Necrons'); 7: writeln('Spieler ' + inttostr(i) + ': Adeptus Sororitas'); 8: writeln('Spieler ' + inttostr(i) + ': Dark Eldar'); end; end; writeln; writeln; writeln; writeln('\o/'); writeln(' | lulz'); writeln('/ \'); readln; end. |
danke für die netten hilfen (:
(btw: warum bekomme ich eigentlich keine mail wenn ich das thema beobachte und eigentlich alles passend eingestellt habe?)
edit: @narses: du hast es nur optimiert, oder? ich sehe jetzt nichts was irgendwas besser macht, oder irre ich mich da? deswegen hab ich es jetzt grade rstmal nicht übernommen
Einloggen, um Attachments anzusehen!
_________________ "Sicher spinne ich, was aber nicht heißt, dass ich mich irre. Ich bin verrückt, nicht krank" -Robert Anton Wilson
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 02.09.08 17:19
Moin!
DMDADKT hat folgendes geschrieben: | hrm, das ist komisch. schaut euch mal meine version an(anhang). |
Was ist komisch?
DMDADKT hat folgendes geschrieben: | sieht random aus, oder? |
Nein, eher wie Quelltext...
DMDADKT hat folgendes geschrieben: | du hast es nur optimiert, oder? |
Ja, es sollte keinen funktionalen Unterschied geben.
DMDADKT hat folgendes geschrieben: | ich sehe jetzt nichts was irgendwas besser macht, oder irre ich mich da? |
Wenn du das Mischen ohne Duplikate "besser" machen willst, dann schau dir das mal an.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|