AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zufallszahlen, wer kann helfen?

Offene Frage von "kunta"
Ein Thema von kunta · begonnen am 14. Nov 2009 · letzter Beitrag vom 17. Nov 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#11

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 08:01
Hi!

Zitat von TOC:
"Möchtest Du einen einzigen Button auf den du klickst, und er berechnet dann in der Reihenfolge zuerst die 1 von Cell[0,0], beim zweiten klick die 2 von Cell[1, 0] usw bis 16 und beide StringGrids sind dann nach 16 Clicks voll?"
Zitat von kunta:
Genau. Diesen Fall möchte ich erreichen.
Also gut, dann müssen wir das Programm halt nochmal etwas anpassen.
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:
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;
So in etwa könnte das Formular in Deinem Programm aussehen, und unter "Private" habe ich die Zählvariable hinein geschrieben.
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:
// 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;
Ok. Und nun, der Würfel-Knopf:

Delphi-Quellcode:
// 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;
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.

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!
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#12

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 08:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#13

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 09:30
Hi!

Zitat von guidok:
Das ist jetzt leicht OffTopic.
Ja, ok, deshalb ist meine Antwort darauf ja auch etwas OT:

Zitat von guidok:
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?
Ja, durchaus! Weil man von einem Programm, wenn man es aufmerksam studiert und sich Gedanken darüber macht, mehr lernen kann als durch unverständliches und unproduktives "erklärendes" Geplapper.

Zitat von guidok:
Nicht böse gemeint, aber lernen kann man so nicht viel, wenn man gar nicht mehr denken muss.
Zusammenfummeln muss er sich die Vorschläge die ich ihm gemacht habe ja immer noch selbst, ich habe ja nicht das komplette fertige Programm gepostet. Es sind nur VORSCHLÄGE wie man so etwas programmieren könnte, es soll ihm helfen sein eigenes Programm hinzukriegen. Ich geh mal davon aus, dass er es nicht einfach nur abschreibt sondern darüber nachdenkt und möglicherweise etwas daraus lernt (Wenn vielleicht auch nur als Nebenaspekt die Erkenntnis, dass man möglicherweise eine Antwort bekommt wenn man eine Frage stellt !).

Grüße von TOC!
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#14

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 12:16
Hi TOC,

ich gebe dir teilweise recht.

Zitat von TOC:
Ja, durchaus! Weil man von einem Programm, wenn man es aufmerksam studiert und sich Gedanken darüber macht, mehr lernen kann als durch unverständliches und unproduktives "erklärendes" Geplapper.
Das hängt ziemlich stark davon ab, welches Engagement vorhanden ist. Ich unterstelle jetzt mal, dass viele den Code einfach kopieren und gut ist es.

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 von TOC:
Ich geh mal davon aus, dass er es nicht einfach nur abschreibt sondern darüber nachdenkt und möglicherweise etwas daraus lernt.
Ich hoffe es.

Freundliche Grüße,

Guido
  Mit Zitat antworten Zitat
Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#15

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 13:58
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... !

Ja, und deshalb bevorzuge ich Quellcode als Informationsquelle.

Liebe Grüße!
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#16

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 14:16
Zitat von TOC:
nur dass Du mich bitte nicht falsch verstehst oder es gar persönlich nimmst.
Keine Sorge deswegen, ich hatte es nicht so aufgefasst.

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
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#17

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 15:24
Zitat von kunta:
In einem Experiment sollen die Zahlen von 1-16 (in genau dieser Reihenfolge) mittels eines Zufallgenerators erzeugt werden.
Wenn die Reihenfolge feststeht (nämlich aufsteigend), benötigt man keinen Zufallsgenerator.

Zitat von kunta:
Es gibt insgesamt 16 Durchläufe. Im i-ten Durchlauf wird so lange eine Zufallszahl erzeugt, bis man die Zahl i erhält.
Wenn nur noch eine Zahl fehlt, ist ein Zufallsgenerator ebenfalls redundant.

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.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 15:55
Zitat von Delphi-Laie:
Wenn die Reihenfolge feststeht (nämlich aufsteigend), benötigt man keinen Zufallsgenerator.
Es geht hier nicht darum, nur 16 mal zu ziehen. Vielmehr sollen 16 Durchläufe gestartet werden. Im i-ten soll dabei dann solange eine Zufallszahl gezogen werden, bis diese i ist
Zitat von Delphi-Laie:
Wenn nur noch eine Zahl fehlt, ist ein Zufallsgenerator ebenfalls redundant.
Es gibt weiterhin 16 mögliche Zahlen für jeden Zufallszug

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.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
kunta

Registriert seit: 14. Nov 2009
Ort: Aachen
7 Beiträge
 
#19

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 16:29
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Zufallszahlen, wer kann helfen?

  Alt 17. Nov 2009, 16:33
Zitat von kunta:
Es scheint wohl mehrere Lösungswege zu geben.
Die gibt es so gut wie immer.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:49 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