AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi bei Random niemals diegleiche Zahl Teil 2
Thema durchsuchen
Ansicht
Themen-Optionen

bei Random niemals diegleiche Zahl Teil 2

Ein Thema von Moyyer · begonnen am 23. Aug 2003 · letzter Beitrag vom 23. Aug 2003
Antwort Antwort
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#1

bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 20:43
Hallo Alle Zusammen.

Ich habe mir aus der Fülle der Prozeduren die folgende herausgesucht.
Doch es gibt wie immer ein Problem. Wenn ich von 8 Zahlen 8 (in unterschiedlicher Reihenfolge) haben will (z.B 5,2,4,1,8,3,7,6) so hängt sich das Programm weg. Warum?
P.S. Die null darf nicht dabeisein.


Delphi-Quellcode:
procedure tForm1.Mischen;
var i, j, x: integer;
  function inarray(number: integer): boolean;
  var i : integer;
  begin
    result := false;
    for i := 0 to High(numbers) do begin
      if numbers[i] = number then begin
        result := true;
        Break;
      end;
    end;
  end;

begin
  randomize;
  SetLength(numbers, 0);
  while High(numbers) < 8 do begin//Anzahl Zahlen
    x := random(8) + 1;//Wertebereich <--- es muss irgendwo hier was falsch sein, doch ich weis nicht was --->
    if inarray(x) = false then begin
       j := High(numbers) + 1;
       SetLength(numbers, j + 1);
       numbers[j] := x;
     end;
  end;
  {Caption := InttoStr(High(numbers));}
  ListBox1.Items.Clear;
  for i := 1 to High(numbers) do begin
    ListBox1.Items.Add(InttoStr(numbers[i]));
   end;
end;
[edit=Christian Seehase] Delphi-Tags gesetzt, bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 20:45
tschuldigung, irgendwas ist beim eintrag falsch gegangen. der smily muss eine 8 sein.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 20:51
Moin Moyyer,

tausch' mal diese Zeile:

SetLength(numbers, j + 1); gegen diese

SetLength(numbers, high(numbers)+1); Wenn ich das richtig sehe vergrösserst Du sonst das array bei jedem Durchlauf um 2 Felder, und nicht um 1.

Was jetzt das Weghängen angeht:
Geh' doch mal im Einzelschritt durch und überwache dabei die Variableninhalte. Bei 8 Werten sollte das zu machen sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 20:59
Ich ahb es ausgetestet doch leider kommt jetzt eine schöne zugriffsverletzungsfehlermeldung.

Code:
    x := random(9);//Wertebereich
Wenn ich die zeile so umändere kommen 8 zahlen zwischen 0 und 8 (keine 9) wenn ich nach der zeile den folgenden code reimache hängt sich das programm trotzdem weg, obwohl es zulässig ist.

Code:
if x = 0 then x := 1;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 21:59
Moin Moyyer,

das mit dem Random hättest Du ja so lassen können.

Wie gesagt geh' doch mal im Einzelschritt durch und schau Dir mal an, was alles passiert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 22:09
Moin Moyyer,

sorry, ich hatte da auch einen Fehler gemacht

Es muss natürlich

SetLength(numbers, Length(numbers)+1); heissen

Warum das Programm in der Schleife festhängt kann ich Dir auch sagen:
Du musst in der while-Zeile mal das High gegen Length austauschen.
Die Listbox-Schleife muss übrigens von 0 bis high laufen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: bei Random niemals diegleiche Zahl Teil 2

  Alt 23. Aug 2003, 22:16
Delphi-Quellcode:
const
  Count = 8;

var
  Number: array of Integer;
  I,J,K,T: Integer;
  S: String;
begin
// Initialisierung
  SetLength(Numbers, Count);
  for I := 0 to High(Numbers) do Numbers[I] := I +1;

// Numbers Array vermischen
  for I := 0 to Count * Count -1 do
  begin
    J := Random(Count);
    K := Random(Count);

    T := Numbers[J];
    Numbers[J] := Numbers[K];
    Numbers[K] := T;
  end;

// Ausgabe
  S := '';
  for I := 0 to High(Numbers) do
    S := S + IntToStr(Numbers[I]) + #13#10;
  SetLength(S, Length(S) -2);
  
  ListBox1.Items.Text := S;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.
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