#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. + Multi-Zitat Zitieren
#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.... + Multi-Zitat Zitieren
#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; + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren