Zufällig generierte Zahlen in Datei speichern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von OhLe, 23. Mai 2006 .

  1. 23. Mai 2006
    Hi Leute, ich habe folgendes Problem und zwar.... wie stelle ich es an, dass mein Programm nachdem 6 zahlen zufällig generiert wurden diese zahlen automatisch in eine datei mit aktuellem datum schreibt?
    Wie man daten in eine datei schreibt, weiß ich ja.... aber wie ist es mit zufälligen zahlen?

    Hier mein bisheriger Programmcode


    Code:
    Program Lottozahlengenerator; {Informatikprojekt von OhLe}
    
    uses crt,dos;
    
    var tip : array[1..49] of integer;
    Zahlen : array[1..49] of integer;
    a,b,c,d,e,x,y,zieh,
    counter,merk,treffer : string;{integer;}
    year,month,day,dayofweek : word;
    taste : char;
    datei : text;
    zeile : string;
    
    
    Procedure Intro;
    Var Textfeld : string;
    Begin
    Textfeld := 'Willkommen bei ihrer Lotto AG';
    textbackground(black);
    textcolor(Magenta);
    clrscr;
    gotoxy(5,5);
    for a :=1 to 29 do
    begin
    write(textfeld[a]);
    delay(50);
    end;
    delay(1000);
    End;
    
    
    Procedure Auswertung;
    begin
    clrscr;
    writeln('Die Zahlen vergangener Ziehungen');
    assign (datei,'C:Arbeitdaten.dat');
    reset (datei);
    if ioresult > 0 then begin
    writeln;
    write('Datei nicht gefunden! Bitte ?berpr?fen Sie, ob der Pfad stimmt');
    readkey;
    halt(0);
    end else
    while not eof(datei) do begin
    readln(datei,zeile);
    end;
    close(datei);
    readln;
    end;
    
    
    Procedure Tippen;
    Begin
    getdate(year,month,day,dayofweek);
    gotoxy(20,1);
    write(' Ziehung vom ');
    write(day,'.',month,'.',year);
    counter :=1;
    x :=10; y :=5;
    repeat gotoxy(x,y);
    write(counter,'. Tip : ');
    readln(a);
    y :=y+1;
    if (a <= 49) and (a >= 1) then
    if tip[a] <> 1 then
    begin
    tip[a] := 1;
    counter := counter+1;
    end
    else
    begin
    writeln('Entschuldigen Sie, aber Sie k”nnen jede Zahl nur einmal nehmen');
    y :=y+1;
    end
    else
    begin
    writeln('Ihr Tip muá im Bereich 1-49 liegen !!!');
    y :=y+1;
    end;
    until counter = 7;
    End;
    
    
    Procedure Ziehen; {Ziehung der Lottozahlen...}
    Begin
    counter :=0;
    for a :=1 to 49 do zahlen[a] :=0;
    randomize;
    repeat
    Zieh := random(48)+1;
    if zahlen[zieh] = 0 then
    begin
    zahlen[zieh] := 1;
    counter :=counter+1;
    end;
    until counter > 5;
    End;
    
    
    procedure Schein;
    Begin
    textcolor(magenta);
    write(' ',chr(201)); { linke obere Ecke}
    delay(100);
    for b:=1 to 6 do
    begin
    delay(50);
    for a:=1 to 6 do write(chr(205));
    write(chr(203));
    assign (datei,'C:Arbeitdaten.dat');
    append (datei);
    write(datei, Zahlen[b]);
    close (datei);
    end;
    for a :=1 to 6 do write(chr(205));
    writeln(chr(187)); { rechte obere Ecke}
    
    for a:=1 to 6 do
    begin
    delay(100);
    writeln(' ',chr(186),chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7);
    writeln(' ',chr(186),chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7);
    write(' ',chr(204)); { Ì }
    for b:=1 to 6 do
    begin
    delay(100);
    for c:=1 to 6 do write(chr(205));{ Í }
    write(chr(206)); { Î }
    end;
    for d:=1 to 6 do write(chr(205));
    writeln(chr(185)); { ¹ }
    end;
    
    
    writeln(' ',chr(186),chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7);
    writeln(' ',chr(186),chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7,chr(186):7);
    write(' ',chr(200)); { linke untere Ecke}
    for b:=1 to 6 do
    begin
    delay(100);
    for a:=1 to 6 do write(chr(205));
    write(chr(202)); { Ê }
    end;
    for a :=1 to 6 do write(chr(205));
    writeln(chr(188)); { rechte untere Ecke}
    
    (* Zahlenausgabe sowie Vergleich *)
    
    x :=17;
    y :=2;
    treffer :=0;
    for a:=1 to 49 do
    begin
    if (Zahlen[a] = 1) and (Tip[a] = 1) then
    begin
    Treffer := Treffer+1;
    textcolor(lightmagenta+blink);
    end else
    if zahlen[a] =1 then textcolor(blue) else
    if tip[a] = 1 then textcolor(green) else
    textcolor(white);
    gotoxy(x,y);
    write(a);
    x:= x+7;
    delay(100);
    if x > 59 then
    begin
    x :=17;
    y := y+3;
    end;
    (* Ende der Zahlenausgabe *)
    
    (* Ausgabe der Legende *)
    gotoxy(65,9);
    textcolor(white);
    writeln('Legende :');
    gotoxy(65,10);
    writeln('ÍÍÍÍÍÍÍÍÍ');
    gotoxy(65,11);
    textcolor(green);
    write('±±');
    textcolor(white);
    write(' = Ihr Tip ');
    gotoxy(65,12);
    textcolor(blue);
    write('±±');
    textcolor(white);
    write(' = Lottozahlen');
    gotoxy(65,13);
    textcolor(lightmagenta+blink);
    write('±±');
    textcolor(white);
    write(' = Treffer');
    (* Ende *)
    end;
    End;
    
    Procedure Auswert;
    Begin
    gotoxy(10,24);
    textcolor(lightmagenta);
    writeln(' Sie haben ',treffer,' Treffer !!');
    assign (datei,'C:Arbeitdaten.dat');
    read (zeile);
    append (datei);
    write (datei,zeile);
    close (datei);
    readln;
    End;
    
    
    Procedure Menu;
    Begin
    clrscr;
    writeln(' Treffen Sie bitte Ihre Wahl:');
    gotoxy(10,10);
    textcolor(yellow);
    write('L');
    textcolor(magenta);
    write('otto zahlen');
    gotoxy(40,10);
    textcolor(yellow);
    write('A');
    textcolor(magenta);
    write('uswertung der letzten Ziehungen');
    gotoxy(29,20);
    textcolor(yellow);
    write('E');
    textcolor(magenta);
    writeln('xit');
    Taste := readkey;
    taste :=upcase(taste);
    case taste of
    'L' : begin
    gotoxy(11,11);
    textcolor(white);
    write('Ziehung vom ....');
    delay(1000);
    clrscr;
    tippen;
    clrscr;
    ziehen;
    schein;
    auswert;
    end;
    'A' : begin
    gotoxy(41,11);
    textcolor(white);
    write('Auswertung verganger Ziehungen');
    delay(1000);
    auswertung;
    end;
    'E' : begin
    textcolor(magenta);
    clrscr;
    gotoxy (24,12);
    writeln('Vielen Dank f?r Ihren Besuch !!!');
    delay(3000);
    exit;
    end;
    end;
    End;
    
    
    BEGIN
    clrscr;
    Intro;
    while taste <> 'E' do
    Menu;
    END.
    
     
  2. 24. Mai 2006
    hat denn keiner ne idee? ich hatte inzwischen auch mal gegoogled.... und da hab ich was gefunden.... ich soll das schreiben einfach in ein array haun.... hab aber kein plan, wie ich das einbinden soll....
     
  3. 24. Mai 2006
    1) gewöhne dir mal das einrücken des codes an!
    2) gewöhne dir mal an, nicht alle variablen als globalen zu behandeln, sondern übergebe die gescheit an die proceduren!

    ->> ist nämlich beides bäääähhh...

    3) gebe den variablen bitte, bitte, bitte gescheite namen; durchgängig; und verfalle nicht in einen a,b,c rausch (die kann man für zählschleifen verwenden; aber dann auch nur i, j, n ... hat sich so eingebürgert )



    für dein problem hab ich jetzt mal folgende lösung:
    mach dir ein array für den bereich 1..9 vom typ integer oder word; iss egal...
    in der procedure ziehen kannst du dann im then ausgang der if-verzweigung zahlen[zieh]=0
    das array für 1..6 mit den gezogenen lottozahlen belegen; die plätze 7..9 sind dann für tag, monat und jahr... alles zusammen speicherst du dann in eine datei of integer / word...

    wenn du "records" kennst, dann geht das noch besser... <- wenn du da hilfe brauchst einfach melden;
     
  4. 24. Mai 2006
    zu 1. ) in meinem quelltext ist der code eingerückt, ka warum das forum das nicht übernommen hat....

    zu 2.) ich werde mich bessern

    zu 3.) krankheit von unserem informatiklehrer, der will das so haben... versteh auch nit warum...



    records kenn ich nit... kannst mir vllt. erstma ne erläuterung geben, wie das geht und so.... dann probier ich das in mein ding da einzubaun


    danke schonmal!


    EDIT:

    kannst du mir vllt. mal so kleines array zusammenfrickeln? ich komm damit grad überhaupt nicht klar...


    10ner Bewertung hast schonmal bekommen
     
  5. 27. Mai 2006
    bzgl. records kannst du dich mal hier informieren:
    http://www.db.informatik.uni-kassel.de/Help/pascal/einfuehrung/pas_rec.html

    Code:
    Procedure Ziehen; {Ziehung der Lottozahlen...}
    var gezogen: array[1..9] of integer; <-- 1 
    Begin
    counter :=0;
    for a :=1 to 49 do zahlen[a] :=0; 
    randomize;
    repeat
    Zieh := random(48)+1;
    if zahlen[zieh] = 0 then
    begin
    zahlen[zieh] := 1;
    gezogen[counter] := zieh; <-- 2 
    counter :=counter+1;
    end;
    until counter >= 6; <-- 3 
    
    gezogen[7] := day; <-- 4
    gezogen[8] := month;
    gezogen[9] := year;
    
    End;
    Anmerkungen;
    1-> definierung des arrays
    2-> hier wird das array mit der gezogenen zahl belegt
    3-> mach bitte hier das nächste mal >= endwert hin; so weiß man immer wann es endet; damit nicht aus irgendeinem grund die schleife zur endlosschleife wird (sprich die 6 wird durch irgendetwas übergangen), muss das > noch dazu
    4-> bei 4 wird das array eben mit den globalen variablen belegt (die du hoffentlich vorher belegt haben wirst; geschickter wäre es, diese in procedure ziehen nochmal zu belegen;

    tja... dann musst du das array noch in ne datei schreiben..

    ps: falls ich irgendwelchen php code noch reingemacht habe, so bitte ich es zu verzeihen, da es schon seeehr spät ist und ich grad nen langen php-coding-abend hinter mir hab!
     
  6. 29. Mai 2006
    ne kein php code drin


    einwandfrei die 10 hast du dir verdient..... nur ein problem hab ich jetzt noch.....



    Code:
    
    Procedure Auswertung;
     begin
     clrscr;
     writeln(' Sie befinden sich im Auswertungsmen?');
     writeln(' Hier erhalten Sie Informationen ?ber vergangene Ziehungen ');
     gotoxy(10,10);
     textcolor(yellow);
     write('V');
     textcolor(magenta);
     write('ergangene Ziehungen');
     gotoxy(40,10);
     textcolor(yellow);
     write('S');
     textcolor(magenta);
     write('tatistiken');
     gotoxy(29,20);
     textcolor(yellow);
     write('Z');
     textcolor(magenta);
     writeln('ur?ck');
     Taste := readkey;
     taste :=upcase(taste);
     case taste of
     'V' : begin
     gotoxy(11,11);
     textcolor(white);
     write('Die Zahlen der vergangenen Ziehungen, die gewonnen haben');
     delay(1000);
     clrscr;
     Auswertung_Zahlen;
     end;
     'S' : begin
     gotoxy(41,11);
     textcolor(white);
     write('Wie oft wurde jede Zahl gezogen?');
     delay(1000);
     {hinzuf?gen}
     end;
     'Z' : begin
     textcolor(magenta);
     gotoxy (24,12);
     write('Zur?ck zum Hauptmen?');
     delay(3000);
     {Menu;}
     end;
     end;
    End;
    
    Procedure Menu;
     Begin
     clrscr;
     writeln(' Treffen Sie bitte Ihre Wahl:');
     gotoxy(10,10);
     textcolor(yellow);
     write('L');
     textcolor(magenta);
     write('otto zahlen');
     gotoxy(40,10);
     textcolor(yellow);
     write('A');
     textcolor(magenta);
     write('uswertung der letzten Ziehungen');
     gotoxy(29,20);
     textcolor(yellow);
     write('E');
     textcolor(magenta);
     writeln('xit');
     Taste := readkey;
     taste :=upcase(taste);
     case taste of
     'L' : begin
     gotoxy(11,11);
     textcolor(white);
     write('Ziehung vom ....');
     delay(1000);
     clrscr;
     tippen;
     clrscr;
     ziehen;
     schein;
     auswert;
     end;
     'A' : begin
     gotoxy(41,11);
     textcolor(white);
     write('Auswertung verganger Ziehungen');
     delay(1000);
     Auswertung;
     end;
     'E' : begin
     textcolor(magenta);
     clrscr;
     gotoxy (24,12);
     writeln('Vielen Dank f?r Ihren Besuch !!!');
     delay(3000);
     {Hauptmenue;}
     end;
     end;
    End;
    
    Procedure Hauptmenue;
     Begin
     clrscr;
     writeln(' Treffen Sie bitte Ihre Wahl:');
     gotoxy(10,10);
     textcolor(yellow);
     write('P');
     textcolor(magenta);
     write('rojekt starten');
     gotoxy(40,10);
     textcolor(yellow);
     write('B');
     textcolor(magenta);
     write('eschreibungen');
     gotoxy(29,20);
     textcolor(yellow);
     write('E');
     textcolor(magenta);
     writeln('xit');
     Taste := readkey;
     taste :=upcase(taste);
     case taste of
     'P' : begin
     gotoxy(11,11);
     textcolor(white);
     write('startet den Lottozahlengenerator');
     delay(1000);
     clrscr;
     Menu;
     end;
     'B' : begin
     gotoxy(41,11);
     textcolor(white);
     write('Beschreibungen rund um das Projekt');
     delay(1000);
     {Beschreibungen hinzuf?gen}
     end;
     'E' : begin
     textcolor(magenta);
     clrscr;
     gotoxy (24,12);
     writeln('Bis zum n„chsten mal !!!');
     delay(3000);
     exit;
     end;
     end;
    

    anfangen tut alles mit der procedure hauptmenue.... so wenn ich dann nun ins menü gehe und dann auf auswertung (ruft er die procedure auswertung auf) und wieder zurück möchte in die procedure menu macht er das nicht..... (sprich das is das, was in {} steht..... hast du ne idee?
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.