|
![]() |
|
Registriert seit: 6. Apr 2005 10.109 Beiträge |
#1
Hi.
Lebersalz hat in einer PM an mich geschrieben Nun hast du mich ja total verwirrt!!! Also nochmal zusammengefasst: Ich habe sechs Spineditfelder mit denen ich sechs zahlen festlege! Die übernehme ich mit einem Button.click in ein TLabel ... hier ist der quelltext dazu:
Delphi-Quellcode:
So und wo soll ich jetzt hier Bubblesort einbinden???
procedure TForm1.Button3Click(Sender: TObject);
begin Label4.Caption := SpinEdit1.Text+(' ') + SpinEdit2.Text + (' ') + SpinEdit3.Text + (' ') + SpinEdit4.Text + (' ')+ SpinEdit5.Text + (' ') + Spinedit6.Text; Label1.caption:=''; If SpinEdit1.Text = SpinEdit2.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit1.Text = SpinEdit3.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit1.Text = SpinEdit4.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit1.Text = SpinEdit5.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit1.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit2.Text = SpinEdit3.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit2.Text = SpinEdit4.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit2.Text = SpinEdit5.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit2.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit3.Text = SpinEdit4.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit3.Text = SpinEdit5.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit3.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit4.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit4.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else IF SpinEdit5.Text = SpinEdit6.Text Then Showmessage('Keine gleichen Zahlen erlaubt!') Else Button1.Visible:=true; end; :duck: Ich hab gesagt ich bin blutiger anfänger!!! Ob die Verwendung von SpinEdit-Controls so sinnvoll ist? Hat das dein Lehrer vorgegeben? Ist aber eigentlich egal. Der Algorithmus für eine Lottoziehung 6 aus 49 ist auf der ![]()
Delphi-Quellcode:
Ich hatte nicht ohne Grund gefragt, wie deine Zahlen in die SpinEdits kommen. Deine Prüfungen zeigen mir, dass du die Zahlen in den SpinEdits nicht gut vorbereitet hast, da du noch Doppelte erwartest. Durch den hier gezeigten Code erhältst du schon eine gültige Ziehung, allerdings in unsortiertem Zustand. Wenn du willst, dann kannst du das Ergebnis auch noch in deine SpinEdit-Controls eintragen:
function Ziehung(const Anzahl, Gesamt: Integer): TIntegerDynArray;
var i, iRandom: integer; // Laufvariable Vorrat: TIntegerDynArray; // Vorratsvektor begin // Vorratsvektor dimensionieren SetLength(Vorrat, Gesamt); // Vektor initialisieren for i := Low(Vorrat) to High(Vorrat) do Vorrat[i] := Succ(i); // Ergebnisvektor dimensionieren SetLength(Result, Anzahl); // Soviele Zahlen übernehmen wie nötig for i := Low(Result) to High(Result) do begin // eine zufällige Position in dem // durch die Laufvariable verkürzten // Vektor auswählen iRandom := Random(Gesamt - i); // Zahl an dieser Position übernehmen Result[i] := Vorrat[iRandom]; // Letzte Zahl des Vorrats an diese // Position verschieben Vorrat[iRandom] := Vorrat[High(Vorrat) - i]; end; // Aufsteigende Sortierung BubbleSort(Result); end;
Delphi-Quellcode:
Jetzt kommt die Sortierung. Erst durch die Speicherung deiner Zufallszahlen in einem Vektor kannst du elegant einen Sortier-Algorithmus formulieren (EDIT Abbruch der inneren Schleife):
procedure TLotteryForm.DrawButtonClick(Sender: TObject);
var ida: TIntegerDynArray; begin // Ziehungsergebnis 6 aus 49 feststellen ida := Ziehung(6, 49); // Eintragen in SpinEdit-Controls SpinEdit1.Value := ida[0]; SpinEdit2.Value := ida[1]; SpinEdit3.Value := ida[2]; SpinEdit4.Value := ida[3]; SpinEdit5.Value := ida[4]; SpinEdit6.Value := ida[5]; // Vektor in Zeichenkette umbauen und anzeigen DisplayPanel.Caption := NumbersToStr(ida); end;
Delphi-Quellcode:
Und wenn du dann noch deine Zahlen in eine Zeichenkette umwandeln willst, damit du sie auf einem Label als Caption anzeigen kannst, dann geht das mit dem Eregbnisvektor viel einfacher:
// uses Types;
procedure BubbleSort(var ida: TIntegerDynArray); var i, iInner, iOuter: Integer; begin // vom zweiten bis zum letzten Eintrag for iOuter := Succ(Low(ida)) to High(ida) do // für alle Einträge unterhalb des aktuellen for iInner := Pred(iOuter) downto Low(ida) do if ida[iInner] > ida[Succ(iInner)] then begin // Vertauschen um Teilvektor zu ordnen i := ida[Succ(iInner)]; ida[Succ(iInner)] := ida[iInner]; ida[iInner] := i; end else Break; // Teilvektor ist sortiert end;
Delphi-Quellcode:
Beim direkten Zugriff auf deine SpinEdit-Controls sieht das momentan noch ganz überschaubar aus, aber bei 100 oder 1000 SpinEdits wäre ein Ansatz über eine Schleife sicher angenehmer - oder?
function NumbersToStr(const ida: TIntegerDynArray): String;
var i: Integer; begin // Ausgabe-Zeichenkette initialisieren Result := ''; // Jede Zahl aus sortiertem Vektor ... for i := Low(ida) to High(ida) do // ... in Leerzeichen einfassen und // an die Ausgabe-Zeichenkette anhängen Result := Result + ' ' + IntToStr(ida[i]) + ' '; end;
Delphi-Quellcode:
Freundliche Grüße vom marabu
function NumbersToStr(const ida: TIntegerDynArray): String;
begin Result := IntToStr(SpinEdit1.Value) + ' ' + IntToStr(SpinEdit2.Value) + ' ' + IntToStr(SpinEdit3.Value) + ' '; + IntToStr(SpinEdit4.Value) + ' '; + IntToStr(SpinEdit5.Value) + ' '; + IntToStr(SpinEdit6.Value); end; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |