Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Suche]Hilfe bei Turbo Pascal Lottozahl Generator (https://www.delphipraxis.net/147476-%5Bsuche%5Dhilfe-bei-turbo-pascal-lottozahl-generator.html)

crisbinfranke 9. Feb 2010 17:35


[Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Hallo liebe Delphi-Praxis User.
Ich brauche eure Hilfe.
In der Schule arbeiten wir momentan mit dem Programm "Turbo Pascal" und irgendwie werden wir nicht so richtig Freunde.
Heute in der Schule sollten wir dann einen "Lotto Rechner" schreiben.
Unser Lehrer schrieb uns das meiste an der Tafel vor und wir durften abschreiben.
Mein eigentliches Problem ist nun, dass ich zuhause weiter arbeiten soll und mein Vista 64 Bit das TP nicht mag.
Zur nächsten Woche sollen wir die ausgegebenen Zahlen sortieren lassen.
Hierzu habe ich auch schon diverse Verfahren gefunden. Unser Lehrer riet uns zum "Bubble Sort".
Hierzu fand ich hier in der Code-Library diesen Link: http://www.delphipraxis.net/internal...ect.php?t=6237
Nun weiß ich jedoch nicht, wie ich das 1. in Turbo Pascal übersetzen kann und 2. testen kann ich es leider auch nicht, da es bei mir nicht funktioniert.
Hier mal den Source aus der Schule:
Code:
program lottozahlen;
uses crt;
var lotto:array [1..6] of integer;
    i:integer;

procedure ziehung;
Begin

  for i:=1 to 6 do
  Begin
  lotto[i]:=1+random(49); {1+0-48}
  End;
End;

Begin
Textbackground(Black);Textcolor(white);
  clrscr;
  randomize;
  ziehung;
  if (lotto[1]=lotto[2]) or (lotto[1]=lotto[3]) or (lotto[1]=lotto[4])
  or (lotto[1]=lotto[5]) or (lotto[1]=lotto[6]) or (lotto[2]=lotto[3])
  or (lotto[2]=lotto[4]) or (lotto[1]=lotto[5]) or (lotto[2]=lotto[6])
  or (lotto[3]=lotto[4]) or (lotto[3]=lotto[5]) or (lotto[3]=lotto[6])
  or (lotto[4]=lotto[5]) or (lotto[4]=lotto[6]) or (lotto[5]=lotto[6])
  then ziehung
  else         {Vor else nie ein Simikolon :-)}
Begin
  gotoxy(28,25);

  for i:=1 to 6 do
  Begin
  write(lotto[i],' ');
  End;
End;
  readkey;
End.
Ich hoffe, dass jemand von euch mir weiterhelfen kann. In 1-2 Wochen werden wir dann hoffentlich mit Delphi anfangen, denn das läuft Flüssig auf meinem Pc :-).

MfG,
Christian

Klaus01 9. Feb 2010 17:49

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Guten Abend,

schau mal hier

und die vielen or willst Du doch sicherlich nicht so lassen.
Wäre es nicht einfacher das Array nach der gezogenen Zahl zu durchsuchen?

Grüße
Klaus

Der.Kaktus 9. Feb 2010 17:50

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Hi,

also
erstens :solltest nicht nur "eine" Zahl ziehen sondern 6
zweitens:schau dir mal die Befehle Repeat Until an..die helfen dir da
drittens: nen Zaehler..der bei "doppelt auftretenden Zahlen evtl. "nicht" erhoeht wird in der Schleife.

P.S.: Turbopascal geht doch "Flott" auf sonem "neuen" rechner..kannste flink kompilieren *ggg*

crisbinfranke 9. Feb 2010 18:09

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von Klaus01
die vielen or willst Du doch sicherlich nicht so lassen.

Hauptsache es funktioniert.

Zitat:

Zitat von Der.Kaktus
solltest nicht nur "eine" Zahl ziehen sondern 6
zweitens:schau dir mal die Befehle Repeat Until an..die helfen dir da
drittens: nen Zaehler..der bei "doppelt auftretenden Zahlen evtl. "nicht" erhoeht wird in der Schleife.

P.S.: Turbopascal geht doch "Flott" auf sonem "neuen" rechner..kannste flink kompilieren *ggg*

Er zieht auch 6 Zahlen und nicht nur eine . Wurde von mir in der Schule getestet.
Bei doppel Zahlen macht er auch einen neuen Wurf, also alle Zahlen nochmal neu und zeigt die vorherigen nicht an.
Das einzigste was fehlt ist ebend die Sortierung von klein nach groß.
Ich hab einen "neueren" Rechner. Habe auch schon versucht eine VM in gang zu bringen, aber irgendwie wollte das nicht so wie ich.

MfG,
Christian

Klaus01 9. Feb 2010 18:16

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von crisbinfranke
Bei doppel Zahlen macht er auch einen neuen Wurf, also alle Zahlen nochmal neu und zeigt die vorherigen nicht an.

Damit ist aber nicht sichergestellt, dass bei der zweiten Ziehung alle Zahlen unterschiedlich sind.
Wäre es da nicht sinnvoller schon bei der Ziehung zu schauen ob eine Zahl schon gezogen wurde
und dann nur für diese Zahl einen weitere ziehen.
Das dann solange wiederholen bis alle 6 Zahlen unterschiedlich sind.

Grüße
Klaus

Der.Kaktus 9. Feb 2010 18:18

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von Klaus01
Zitat:

Zitat von crisbinfranke
Bei doppel Zahlen macht er auch einen neuen Wurf, also alle Zahlen nochmal neu und zeigt die vorherigen nicht an.

Damit ist aber nicht sichergestellt, dass bei der zweiten Ziehung alle Zahlen unterschiedlich sind.
Wäre es da nicht sinnvoller schon bei der Ziehung zu schauen ob eine Zahl schon gezogen wurde
und dann nur für diese Zahl einen weitere ziehen.
Das dann solange wiederholen bis alle 6 Zahlen unterschiedlich sind.

Grüße
Klaus

genau..er zieht 6 Zahlen..aber!!! wenn doppelte sind..wird nur!!! die erste behandelt und somit neu gezogen.

Namenloser 9. Feb 2010 18:19

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von crisbinfranke
Mein eigentliches Problem ist nun, dass ich zuhause weiter arbeiten soll und mein Vista 64 Bit das TP nicht mag.

Hast du mal versucht, TurboPascal in Dosbox zu installieren?

crisbinfranke 9. Feb 2010 18:22

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von Klaus01
Zitat:

Zitat von crisbinfranke
Bei doppel Zahlen macht er auch einen neuen Wurf, also alle Zahlen nochmal neu und zeigt die vorherigen nicht an.

Damit ist aber nicht sichergestellt, dass bei der zweiten Ziehung alle Zahlen unterschiedlich sind.
Wäre es da nicht sinnvoller schon bei der Ziehung zu schauen ob eine Zahl schon gezogen wurde
und dann nur für diese Zahl einen weitere ziehen.
Das dann solange wiederholen bis alle 6 Zahlen unterschiedlich sind.

Grüße
Klaus

Das wäre natürlich einfacher, aber ich hab keine Ahnung.
Wie gesagt, er hat uns "vorgeschrieben" und ein bisschen erklärt und wir haben "abgeschrieben" und Hasuaufgabe ist ebend die Sortierung einzubauen und weil das Programm ja nicht bei mir läuft ist das irgendwie nicht das gelbe vom Ei.

Zitat:

Zitat von NamenLozer
Zitat:

Zitat von crisbinfranke
Mein eigentliches Problem ist nun, dass ich zuhause weiter arbeiten soll und mein Vista 64 Bit das TP nicht mag.

Hast du mal versucht, TurboPascal in Dosbox zu installieren?

Nein noch nicht probiert. Werde ich mal testen.

MfG,
Peter

Klaus01 9. Feb 2010 18:26

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von crisbinfranke
Habe auch schon versucht eine VM in gang zu bringen, aber irgendwie wollte das nicht so wie ich.

Sollte doch funktionieren:
1. vmplayer laden und installieren
2. unter www.easyvmx.com Startdateien erstellen lassen
3. dos installieren
4. Turbo Pascal installieren

Grüße
Klaus

pluto47 9. Feb 2010 21:18

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Hallo Christian,

für Lottozahlen bietet sich der Datentyp Menge also "set of" an.
Durch das Auslesen mit der Abfrage "IN" erübrigt sich das Sortieren.

Delphi-Quellcode:
program lottozahlen;
uses crt;

type
  TLottozahl = 1..49;
  TLottotipp = set of TLottozahl;

var Lottozahl: TLottozahl;
    Lottotipp: TLottotipp;
    i:integer;

begin
  Lottotipp := [];                          { Der Lottotipp ist zunächst die Leere Menge }                 

  Randomize;
  for i:=1 to 6 do                          { Es werden 6 Lottozahlen gezogen }
    begin
      Repeat
        Lottozahl := Random(49)+1;          { Wird so lange wiederholt bis eine neue Zahl gefunden wird }
      Until not(Lottozahl in Lottotipp);
      Lottotipp := Lottotipp + [Lottozahl]; { Vereinigungsmenge aus Lottotipp und der neuen Lottozahl }
    end;

  for Lottozahl:=1 to 49 do
    begin
      if Lottozahl in Lottotipp then        { Sucht die gezogenen Zahlen der Größe nach heraus }
         write( Lottozahl , ' ' );
    end;
end.
Kann sein, dass noch einige Syntaxfehler enthalten sind, da ich den Code nicht mit Turbo-Pascal erstellt habe.

Amateurprofi 10. Feb 2010 00:19

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Hallo Christian,
schau dir doch mal auf ARD die Ziehung der Lottozahlen an.
Die Maschine hat 49 numerierte Kugeln, aus denen sie 6 Kugeln herausnimmt (eigentlich 7, denn sie zieht auch noch die Zusatzzahl).
Wenn die Maschine 1 Kugel "gezogen" hat, kann sie diese Kugel nicht noch einmal ziehen, weil Kugel nicht mehr in der Trommel ist.

"Deine" Ziehungsmaschine funktioniert so, daß sie eine Kugel aus der Trommel zieht, irgendwie notiert, daß diese Kugel "gezogen" wurde und dann die Kugel wieder in die Trommel wirft.
Dann zieht sie wieder eine Kugel, prüft, ob sie die schon vorher gezogen hatte und wiederholt das so lange bis sie zufällig eine Kugel erwischt, die noch nicht gezogen wurde.

Ich will nicht deine Hausaufgaben machen, aber ich hab dir mal die Ziehungsroutine so aufgeschrieben, daß sie in etwa so arbeitet wie die Ziehungsmaschine und habe sie ausgiebig kommentiert.
Ich hoffe, das hilft dir weiter.
Delphi-Quellcode:
var lotto:array [1..6] of integer;

procedure ziehung;
var zahlen:array[1..49] of integer;
    i,k,n:integer;
Begin
  // die Kugeln 1 is 49 in die Trommel füllen
  for i:=1 to 49 do zahlen[i]:=i;
  // Merken, daß 49 Kugeln in der Trommel sind
  n:=49;
  for k:=1 to 6 do
  Begin
    // Eine der NOCH VERFÜGBAREN Kugeln auswählen
    i:=random(n)+1;
    // Die ausgewählte Kugel in den Behälter für gezogene Zahlen tun
    lotto[k]:=zahlen[i];
    // Den Platz, auf dem bisher die gezogene Kugel lag, mit der
    // bisher letzten noch verfügbaren Kugel auffüllen
    zahlen[i]:=zahlen[n];
    // Anzahl der noch verfügbaren Kugeln um 1 senken.
    dec(n);
  End;
End;

Wolfgang Mix 10. Feb 2010 19:43

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
@Amateurprofi:
Dein Code ist natürlich produktiver als der vom Lehrer, aber der hat sich hoffentlich
Gedanken gemacht, warum er das so vorgestellt hat :)
Wenn ich Post #1 richtig gelesen habe, liegen ja 6 unsortierte Zahlen bereits vor,
die Christian ja "nur noch" sortieren muß.
Beispiele dazu gibt es ja genug, z.B. in der CodeLib oder hier im thread weiter oben.

mani64 10. Feb 2010 21:05

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Hallo crisbinfranke,

in deinem Code ist noch ein kleiner Fehler:
Delphi-Quellcode:
if (lotto[1]=lotto[2]) or (lotto[1]=lotto[3]) or (lotto[1]=lotto[4])
  or (lotto[1]=lotto[5]) or (lotto[1]=lotto[6]) or (lotto[2]=lotto[3])
  or (lotto[2]=lotto[4]) or (lotto[1]=lotto[5]) or (lotto[2]=lotto[6]) // es muss in der Mitte heißen: lotto[2]=lotto[5]
  or (lotto[3]=lotto[4]) or (lotto[3]=lotto[5]) or (lotto[3]=lotto[6])
  or (lotto[4]=lotto[5]) or (lotto[4]=lotto[6]) or (lotto[5]=lotto[6])
  then ziehung
Wie klappt es inzwischen mit der Sortierung?

Amateurprofi 10. Feb 2010 21:44

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Zitat:

Zitat von Wolfgang Mix
@Amateurprofi:
Dein Code ist natürlich produktiver als der vom Lehrer, aber der hat sich hoffentlich
Gedanken gemacht, warum er das so vorgestellt hat :)
Wenn ich Post #1 richtig gelesen habe, liegen ja 6 unsortierte Zahlen bereits vor,
die Christian ja "nur noch" sortieren muß.
Beispiele dazu gibt es ja genug, z.B. in der CodeLib oder hier im thread weiter oben.

Hallo Wolfgang,
Von 6 Zahlen, die bereits unsortiert vorliegen kann ich nichts entdecken.

Der Code den Christian in der Schule erhalten hat besteht aus dem Hauptprogramm und einer Prozedur "Ziehung".
Die Prozedur "Ziehung" stellt 6 Zufallszahlen aus dem Bereich 6..49 in das Array "Lotto".
Das Hauptprogramm macht in etwa folgendes
Delphi-Quellcode:
Ziehung;
if (nicht alle 6 Zahlen unterschiedlich) then Ziehung;
Ausgabe der 6 Zahlen;
Oh, gerade kommt mir der Gedanke, daß du mit den 6 bereits vorliegenden Zahlen, die Zahlen meinen könntest, die die Prozedur "Ziehung" liefert.Und gerde

Bei der Prüfung (die mit den vielen ORs) ist übrigens dem Lehrer (oder Christian) ein Fehler unterlaufen.
Es wird nicht geprüft, ob Lotto[2]=Lotto[5] ist. Statt dessen wird 2 Mal geprüft, ob Lotto[1]=Lotto[5] ist.
Und, wie in #5 schon von Klaus01 erwähnt, ist natürlich nicht sichergestellt das im Falle eines Falles die zweite Ziehung 6 unterschiedliche Zahlen bringt.
Tatsächlich ist es so, daß in ca. 27 % der Fälle bei der ersten Ziehung Duplikate auftreten und bei ca. 7 % auch die zweite Ziehung "in die Hose geht". (Habs 100 Mio Mal durchlaufen lassen und gezählt.... Natürlich mit korrekter Prüfung.
Gut, wenn der Lehrer so prüft, wie er Programme schreibt, dann merkt er das nicht.

Meinen Code habe ich hier eigentlich nur reingestellt, weil der vorgegebene Code offensichtlich nicht korrekt arbeitet.
Daß C. als Hausarbeit das Sortieren zu machen hat.... Tja, das meinte ich als ich schrieb, daß ich nicht seine Hausaufgaben machen will.

Gerade sehe ich, daß da schon jemand den Fehler bei der "OR"-Sammlung gesehen hat - egal, ich laß das jetzt so.

crisbinfranke 16. Feb 2010 15:13

Re: [Suche]Hilfe bei Turbo Pascal Lottozahl Generator
 
Tut mir leid, dass ich mich jetzt erst zu alledem äußere.
Heute stand ja wieder Informatik auf dem Stundenplan.
Vielen dank für alle Antworten.
Programm läuft, so wie es soll.
Ich hatte das Gefühl, dass mein Lehrer sich gefreut hat, dass ich mich um Hilfe bemüht habe.

MfG,
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 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