Autor Beitrag
man-u
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Sa 09.07.05 16:22 
Hallo,
Ich habe folgendes Problem
Ich muss für die Schule das Spiel 6 aus 49 programmieren. Dabei generiere ich jede Zahl mit
dem Zufallsgenerator und speicher diese in einem Araay ab. Jedoch darf in dem array niemals zwei gleiche
Zahlen stehen. Kann mir jemans sagen, wie ich es schaffe, dass ich das irgendwie überprüfen kann oder ähnliches.

Wäre sehr net danke

gruß man-u
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Sa 09.07.05 16:26 
Hallo!

Du gehst beim generieren einer neuen Zahl einfach das Array durch und überprüfst, ob es die Zahl schon gibt. Wenn ja -> Neue Zahl generieren, wenn nein -> Zahl in Array speichern.

Alstar
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Sa 09.07.05 16:38 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
  I: Integer;
  X: Integer;
  IntArry: array[1..6] of Integer;
  BoolArry: array[1..49] of Boolean;
begin

  FillChar(BoolArry, SizeOf(BoolArry), 0);

  I := Low(IntArry);
  while I <= High(IntArry) do
  begin
    X := Random(49) + 1;
    if not BoolArry[X] then
    begin
      BoolArry[X] := True;
      IntArry[I] := X;
      Inc(I);
    end;
  end;

end;

_________________
Ciao, Sprint.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 09.07.05 16:53 
Oder deterministisch in O(n):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Const  
 Count = 49;  
Var  
 A : Array[0..Count-1] of Integer;  
 I, J, T : Integer;  
begin  
 for I := 0 to Count-1 do  
  A[I] := I+1;  
 for I := 0 to Count-1 do  
 begin  
  J := I+random(Count-I);  
  T := A[J];  
  A[J] := A[I];  
  A[I] := T;  
 end;
end;
man-u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Sa 09.07.05 17:20 
Hallo,
erstmal danke für eure antworten.
Das Problem ist nur beide Lösungen die mir geschrieben wurden, sind zu schwer.
Sowas haben wir in der schule noch nicht gehabt und daher kann ich diese befehle auch
nicht nutzen.

Fällt euch vielleicht noch ein einfacherer weg ein ??

gruß man-u
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 09.07.05 17:23 
user profile iconman-u hat folgendes geschrieben:
Das Problem ist nur beide Lösungen die mir geschrieben wurden, sind zu schwer.

Dann solltest du uns mitteilen, was du brauchen darfst. Was ist zu schwer? Arrays? for-Schleifen?
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Sa 09.07.05 17:27 
Ungetestet, unsauber, aber für die Schule denke ich möglich:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var i,j,r:integer;
    Zahlen:array [1..6] of Byte;
begin
 // Array mit Nullen füllen
 for i:=1 to 6 do Zahlen[i]:=0;

 for i:=1 to 6 do repeat
  // Zahl generieren
  r:=random(48)+1;
  // Array durchgehen, ob Zahl schon vorhanden
  for j:=1 to 6 do if Zahlen[j]=r then begin
   // Zahl vorhanden: Merken!!
   r:=0;
   break;
  end;
  // Wenn Zahl nicht vorhanden, setzen
  if r>0 then Zahlen[i]:=r;
  // ansonsten neue Zahl generieren (ab nach oben)
 until r<>0;
end;


// Edit: Es heißt ja 6 aus 49 und nicht 49 aus 49 :oops:

Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Sa 09.07.05 17:33 
user profile iconmaxk hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var i,j,r:integer;
    Zahlen:array [1..49] of Byte;
begin
 for i:=1 to 49 do repeat
  // Zahl generieren
  r:=random(48)+1;
  // Array durchgehen, ob Zahl schon vorhanden
  for j:=1 to 49 do if Zahlen[j]=r then begin
   // Zahl vorhanden: Merken!!
   r:=0;
   break;
  end;
  // Wenn Zahl nicht vorhanden, setzen
  if r>0 then Zahlen[i]:=r;
  // ansonsten neue Zahl generieren (ab nach oben)
 until r<>0;
end;



Ich glaube wohl eher so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var 
  i,j,r: integer;
  Zahlen: array [1..6] of Byte; // [geändert] nur 6 Zahlen werden gesucht!
begin
  Randomize; // [hinzugefügt] Zufallzahlengenerator initialisieren
  for i := 1 to 6 do // [geändert] nur 6 Zahlen werden gesucht! 
  repeat   
    r := random(49)+1; // Zahl generieren [geändert] random erzeugt 0<=x<49!
    for j := 1 to 6 do if Zahlen[j]=r then // Array durchgehen, ob Zahl schon vorhanden [geändert] array geht nur bis 6
      begin
        r:=0; // Zahl vorhanden: Merken!!
        break;
      end;
    if r>0 then Zahlen[i]:=r; // Wenn Zahl nicht vorhanden, setzen
  until r<>0; // ansonsten neue Zahl generieren (ab nach oben)
end;


Und schöner eingerückt :wink:

Alstar
man-u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Sa 09.07.05 18:33 
Okay habe es nun hinbekommen,
vielen dank an alle

gruß man-u