![]() |
Re: Zufallszahlen, wer kann helfen?
Hi!
Zitat:
Die Funktion "GetRandomNumber" hasst Du ja weiter oben in diesem Thread, die wieder hole ich hier nicht noch mal. Also, erstmal brauchen wir eine Variable, diese müssen wir zuerst mal auf eins setzen und dann mit jedem Klick hoch zählen. Nur, wohin mit der Variable? Ich würde folgendes vorschlagen:
Delphi-Quellcode:
So in etwa könnte das Formular in Deinem Programm aussehen, und unter "Private" habe ich die Zählvariable hinein geschrieben.
type
TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; Button1: TButton; Button2: TButton; procedure StringGrid1SelectCell(Sender: TObject; Col, Row: Integer; var CanSelect: Boolean); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private // Diese Zähler-Variable ist wichtig! Count: Integer; public end; Es gibt auch andere Möglichkeiten, zum Beispiel hätte man auch eine globale Variable nehmen können, aber ich persönlich finde es so besser. Dann ist folgendes noch wichtig: Am Programmstart müssen wir erstmal mit Randomize den Zufallszahlengenerator initialisieren und die Zählvariable auf 1 setzen. Dazu würde ich folgenden Vorschlag machen:
Delphi-Quellcode:
Ok. Und nun, der Würfel-Knopf:
// Diese Methode wird immer aufgerufen wenn das Formular erzeugt wird, also beim Programmstart
procedure TForm1.FormCreate(Sender: TObject); begin // Zufallszahlgenerator initialisieren Randomize; // Zählvariable auf 1 setzen Count:=1; end;
Delphi-Quellcode:
Ok. Also, jedesmal, wenn Du auf den Würfel-Knop klickst zählt er um eins weiter, und wenn die Stringgrids voll sind gibt es eine Meldung und der Würfel-Knopf wird gesperrt.
// Würfel-Knopf
// Diese Prozedur erzeugt die Zufallszahlen von 1 bis 16 in aufsteigender Reihenfolge // und schreibt die Anzahl der Würfelversuche in Stringgrid2 procedure TForm1.Button1Click(Sender: TObject); Var Col, Row: Integer; begin // Aus Zählvariable die Spalte berechnen Col:=(Count-1) mod 4; // Aus Zählvariable die Zeile berechnen Row:=(Count-1) div 4; // Schreibe die Zählvariable in StringGrid1 StringGrid1.Cells[Col, Row]:=IntToStr(Count); // Zähle die Versuche bis die Zahl gewürfelt wurde und schreib die Anzahl in StringGrid2 StringGrid2.Cells[Col, Row]:=IntToStr(GetRandomNumber(Count, 1, 16)); // Erhöhe die Zählvariable Inc(Count); // Falls Zählvariable>16 ist... If Count>16 then Begin // Meldung an Benutzer ausgeben ShowMessage('Stringrid ist voll!'); // Würfelknopf sperren Button1.Enabled:=false; End; end; Man könnte auch noch einen zweiten-Knopf machen, nämlich um die StringGrids wieder zu lehren, den Zäher wieder auf 1 zu setzen und den Würfel-Knopf zu entsperren. Dazu noch ein letzter Vorschlag:
Delphi-Quellcode:
// Lösch-Knopf
// Diese Prozedur setzt die Zählvariable zurück und löscht die StringGrids procedure TForm1.Button2Click(Sender: TObject); Var Col, Row: Integer; begin // Zählvariable wieder auf 1 setzen Count:=1; // Zähle für die Zeilen von 0 bis 3... For Row:=0 to 3 do Begin // Zähle für die Spalten von 0 bis 3... For Col:=0 to 3 do Begin // Lösche die Zelle in StringGrid1 und 2 mit Leerstring StringGrid1.Cells[Col, Row]:=''; StringGrid2.Cells[Col, Row]:=''; End; End; // Entsperre wieder den Würfel-Knopf Button1.Enabled:=true; end; Grüße von TOC! |
Re: Zufallszahlen, wer kann helfen?
Das ist jetzt leicht OffTopic.
Sehr nettes Programm TOC, aber hältst du es tatsächlich für sinnvoll, jemanden, der eine Computersprache lernen soll, eine komplette ausgearbeitete Lösung zu geben? Nicht böse gemeint, aber lernen kann man so nicht viel, wenn man gar nicht mehr denken muss. |
Re: Zufallszahlen, wer kann helfen?
Hi!
Zitat:
Zitat:
Zitat:
Grüße von TOC! |
Re: Zufallszahlen, wer kann helfen?
Hi TOC,
ich gebe dir teilweise recht. Zitat:
Für fortgeschrittene Programmierer ist es unglaublich hilfreich, sich den Code von anderen anzuschauen und davon zu lernen, aber die Betonung liegt dabei auf fortgeschritten. Grundlagen muss man sich erst mal durch Nachdenken selbst erarbeiten und bei dem hier diskutierten Problem handelt es sich definitiv um Grundlagen. Zitat:
Freundliche Grüße, :-) Guido |
Re: Zufallszahlen, wer kann helfen?
Hi Guidok!
Sorry, ich werd nochmal OT, aber das hier muss ich klarstellen, weil es war von mir doof formuliert: Mit der Formulierung "unverständliches und unproduktives "erklärendes" Geplapper" habe ich mich keineswegs auf Dich, Guidok, oder Deinen Beitrag in diesem Thread beziehen wollen, nur dass Du mich bitte nicht falsch verstehst oder es gar persönlich nimmst. Ich meine damit gewisse Tutorials oder gar teure Bücher, zum Beispiel über DirectX, die man aufmerksam studiert und am Ende vom Buch, kriegt man selbstständig noch nicht einmal einen Strich auf den Bildschirm, weil der Autor des Buches z.B. vergessen hat zu erklären dass man eine Projektions-Matrix erzeugen muss... Oder das Z-Buffering aktivieren... :gruebel: ! Ja, und deshalb bevorzuge ich Quellcode als Informationsquelle. Liebe Grüße! |
Re: Zufallszahlen, wer kann helfen?
Zitat:
Ich bin durchaus auch kein Pädagoge, sondern es ist meine persönliche Einstellung, dass es sinnvoller ist einen Lernenden behutsam auf den Lösungsweg zu bringen und auch zum selbstständigen Denken anzuregen. Das Lernen aus dem Quellcode ist für Fortgeschrittene auf jeden Fall sinnvoll, aber Anfänger müssen erst mal die grundsätzliche Herangehensweise lernen. So und jetzt ist für meine Seite Schluss mit dem OT. Einen schönen Tag noch :) |
Re: Zufallszahlen, wer kann helfen?
Zitat:
Zitat:
Und wenn noch zwei Zahlen fehlen, dann wird solang eine Zufallszahl erzeugt, bis man eine der beiden hat, bei dreien dito usw.? Wenn Du erst wenige Tage programmierst, wirst Du sicher froh sein, ein überhaupt lauffähiges, die Aufgabenstellung erfüllendes Ergebnis zu erhalten, aber trotzdem sei darauf hingewiesen, daß das kein rationeller Algorithmus ist. Im ungünstigsten Falle könnte ein solches Programm in einer Endlosschleife sich verfangen (na gut, bei nur 16 Zahlen ist das "extremst" unwahrscheinlich). Besser wäre es, aus den Zahlen 1-16 eine per Zufall auszuwählen, dann die Menge (Liste, Array o.ä.) entsprechend zu verkleinern, dann eine Zufallszahl aus den verbliebenen 15 Zahlen auszuwählen usw. . Dann müßtst Du bzw. Dein Programm auch keine Zufallszahlenversuchsirrtümer hinnehmen. |
Re: Zufallszahlen, wer kann helfen?
Zitat:
Zitat:
Im Prinzip geht es hier - sofern ich die Aufgabenstellung richtig verstanden habe - darum, wieviele Versuche jeweils benötigt wurden, um auf die korrekte Zahl für den jeweiligen Durchgang zu kommen. |
Re: Zufallszahlen, wer kann helfen?
Hat sich bereits erledigt mit dem Code.
Ich habe ihn bereits fertig und dazu sieht er noch ein wenig anders aus als hier beschrieben. Es scheint wohl mehrere Lösungswege zu geben. |
Re: Zufallszahlen, wer kann helfen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz