AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Zufallszahlen generieren und in Memo feld ausgeben funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Zufallszahlen generieren und in Memo feld ausgeben funktioniert nicht

Ein Thema von fox67 · begonnen am 12. Feb 2013 · letzter Beitrag vom 13. Feb 2013
Antwort Antwort
Seite 1 von 2  1 2      
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#1

Zufallszahlen generieren und in Memo feld ausgeben funktioniert nicht

  Alt 12. Feb 2013, 21:38
Delphi-Version: 5
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i,merke : integer;
begin
merke := 1;
memo1.Lines.Clear;
max := strtoint(edit1.Text);
setlength(zahlen, max);

for i := 1 to max do
begin
  zahlen[i] := random(strtoint(edit2.Text));
  if i > merke*10 then merke := merke+1;

  memo1.Lines.Insert(merke-1,(memo1.Lines.Strings[merke-1] + ' ' + inttostr(Zahlen[i]) + ',')) ;

end;
showmessage(inttostr(memo1.Lines.Count));

end;
Hallo ich wollte ein Prgramm schreiben das eine bestimmte Anzahl an Zufallszahlen generiert und diese dann anschließend ein einem Memofeld ausgibt. Bei 10 Zahlen soll es in einer Zeile ausgegeben werden. Anschließend sollen die Zahlen nach dem Bubble Sort Verfahren sortiert(dazu bin ich aber noch ncht gekommen da der erste Teil ja schon Probleme macht). Allerdings macht das Programm jetzt genau so viele Zeilen wie es Zahlen generieren soll und füllt diese mit den ersten 10 Zahlen immer abnehmen so das es wie eine halbe Pyramide ausschaut

Geändert von TBx (13. Feb 2013 um 20:06 Uhr) Grund: Dreckfuhler aus dem Titel entfernt
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 12. Feb 2013, 22:24
Eine Reihe von Zufallszahlen kann man eigentlich ganz nett mit einer TList machen.
Delphi-Quellcode:
procedure GetRandomNumbers(Strings: TStrings; AFrom, ATo: integer);
var
  I, J: integer;
  List: TList;
begin
  List := TList.Create;
  Strings.Clear;
  try
    for I := AFrom to ATo do
      List.Add(Pointer(I));
    while List.Count > 0 do
    begin
      I := Random(List.Count);
      J := Integer(List[I]);
      Strings.Add(IntToStr(J));
      List.Delete(I);
    end;
  finally
    List.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetRandomNumbers(Memo1.Lines, 1, 12);
end;
Die Zahlen im Memo anders unterzubringen solltest du schaffen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 09:54
Mit insert machst du eine neue Zeile und verschiebst die bisherige nach unten. Dadurch entsteht die Pyramide. Du must einfach ...Lines[i] = Lines[i]+...+Zahl[i]
oder entsprechend ändern.

Generell wäre es aber sicher einfacher erstmal in einer ersten Schleife die Zahlen zu generieren und in dem Array zu speichern. Anschließend dann die Zahlen aus dem Array ausgeben in einer neuen Schleife, wo man dann einfach erstmal bis zu 10 Zahlen in einen String hängt und den dann nach und nach ausgibt.

Oder man macht es direkt so wie bjoerk es vorschlägt.
Ralph
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 13:01
Oder man baut sich gleich eine Klasse, die die entsprechende Funktionalität zur Verfügung stellt (braucht man eh öfter). Wenn XE bereits eine TIntegerList hat, dann kann man die Klasse ja auch davon ableiten und entsprechend erweitern.

Delphi-Quellcode:
procedure TIntegerList.Exchange(Index1, Index2: integer);
var
  T: integer;
begin
end;

procedure TIntegerList.Sort;
var
  I, J: integer;
begin
end;

procedure TIntegerList.Assign(List: TIntegerList);
var
  I: integer;
begin
  Clear;
  for I := 0 to List.Count - 1 do
    Add(List[I]);
end;

procedure TIntegerList.Mix;
var
  MixList: TIntegerList;
  I: integer;
begin
  MixList := TIntegerList.Create;
  try
    while FCount > 0 do
    begin
      I := Random(FCount);
      MixList.Add(FItems[I]);
      Del(I);
    end;
    Assign(MixList);
  finally
    MixList.Free;
  end;
end;

procedure TIntegerList.SetStrings(Strings: TStrings; ColCount: integer);
var
  I, J, K, RowCount: integer;
  S: string;
begin
  Strings.BeginUpdate;
  Strings.Clear;
  try
    if FCount mod ColCount = 0 then
      RowCount := FCount div ColCount
    else
      RowCount := FCount div ColCount + 1;
    for I := 0 to RowCount - 1 do
    begin
      S := '';
      for J := 0 to ColCount - 1 do
      begin
        K := I * ColCount + J;
        if K < FCount then
          S := S + IntToStr(FItems[K]) + FSeparator;
      end;
      Strings.Add(S);
    end;
  finally
    Strings.EndUpdate;
  end;
end;
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 15:49
Mit insert machst du eine neue Zeile und verschiebst die bisherige nach unten. Dadurch entsteht die Pyramide. Du must einfach ...Lines[i] = Lines[i]+...+Zahl[i]
oder entsprechend ändern.

Generell wäre es aber sicher einfacher erstmal in einer ersten Schleife die Zahlen zu generieren und in dem Array zu speichern. Anschließend dann die Zahlen aus dem Array ausgeben in einer neuen Schleife, wo man dann einfach erstmal bis zu 10 Zahlen in einen String hängt und den dann nach und nach ausgibt.

Oder man macht es direkt so wie bjoerk es vorschlägt.
Dann wird aber nur eine Zeile angezeigt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 16:02
....
Oder man macht es direkt so wie bjoerk es vorschlägt.
Dann wird aber nur eine Zeile angezeigt
Dann Zeig doch mal was Du wirklich in Deinem Programm hast.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 16:03
Mit insert machst du eine neue Zeile und verschiebst die bisherige nach unten. Dadurch entsteht die Pyramide. Du must einfach ...Lines[i] = Lines[i]+...+Zahl[i]
oder entsprechend ändern.

Generell wäre es aber sicher einfacher erstmal in einer ersten Schleife die Zahlen zu generieren und in dem Array zu speichern. Anschließend dann die Zahlen aus dem Array ausgeben in einer neuen Schleife, wo man dann einfach erstmal bis zu 10 Zahlen in einen String hängt und den dann nach und nach ausgibt.

Oder man macht es direkt so wie bjoerk es vorschlägt.
Dann wird aber nur eine Zeile angezeigt
Ich zitier mich mal selber:
Zitat:
Anschließend dann die Zahlen aus dem Array ausgeben in einer neuen Schleife, wo man dann einfach erstmal bis zu 10 Zahlen in einen String hängt und den dann nach und nach ausgibt.
Delphi-Quellcode:
s:='';
for i:=Low(Array) to High(Array) do
  begin
  s = s+Array[i];
  if (i mod 10 = 0) or i=High(Array) then
    beginn
    Memo1.Lines.Add(s);
    s:='';
    end
  else
    begin
    s=s+',';
    end;
  end;
Ralph
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 16:25
Nee nee Ralph, das wird so nicht funzen (für i = 0 ist die mod Bedigung ebenfalls erfüllt).
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 16:29
Na und? dann eben eine Zeile mehr, dieses "nur eine Zeile" stört mich viel mehr.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Zufallszaheln generieren und in Memo feld ausgeben funktioniert nicht

  Alt 13. Feb 2013, 16:43
Aha, na dann..

Warum nicht einfach so?
  if ((I + 1) mod 10 = 0) or (I = High(Array)) then
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:18 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