Pliks 0 Napisano 10 Czerwca 2014 Udostępnij Napisano 10 Czerwca 2014 (edytowane) Witam, od jakiegoś czasu chcę stworzyć program do generowania liczb losowych lotto w Turbo Pascalu, w taki sposób, żeby losował mi 6 liczb z 49, szeregował je od najmniejszej do największej i zapisywał do pliku w takim formacie nazwy np. : 2014-4-30_13;20;54 najpierw udało mi się stworzyć plik, którynie sortuje w kolejności od najmniejszej do największej, ale zapisuje do pliku pod odpowiednią nazwą: program zadanie4; uses dos,crt; var a,i,j,p:byte; z:char; tab:array[1..6] of byte; spr:boolean; plik2:text; opis: String; KoniecPetli: boolean; procedure losujzapisz; {poczatek procedury losujzapisz} begin clrscr; randomize; Begin assign(plik2, 'd:\lot.txt'); rewrite(plik2); spr:=false; for p:=1 to 1 do begin for i:=1 to 6 do begin repeat spr:=false; a:=random(49)+1; for j:=1 to i do begin if a=tab[j] then spr:=true; end; until spr<>true; tab[i]:=a; write(plik2, tab[i],' '); writeln(tab[i],' '); end; end; writeln(plik2); write('Liczby zapisane do pliku txt: '); for i:=1 to 6 do write(tab[i],' '); close(plik2); readln; End; end; {koniec procedury losujzapisz} procedure dopisz; {porczatek procedury dopisz} var a,i,j: byte; Begin assign(plik2, 'd:\lot.txt'); append(plik2); randomize; spr:=false; begin for i:=1 to 6 do begin repeat spr:=false; a:=random(49)+1; for j:=1 to i do begin if a=tab[j] then spr:=true; end; until spr<>true; tab[i]:=a; write(plik2, tab[i],' '); writeln(tab[i],' '); end; end; writeln(plik2); write('Liczby zapisane do pliku txt: '); for i:=1 to 6 do write(tab[i],' '); close(plik2); end;{koniec procedury dopisz} procedure wybierz; {poczatek procedury wybierz} begin z:= Readkey; if z=#27 then exit; Writeln('Wtamy w programie Lotto.'); Write('Wcisnij enter aby wylosowac i dopisac lub escape aby zakonczyc.'); begin readln(z); repeat z:=ReadKey; if z=#27 then exit; read; dopisz; until z = #27; end; end; {koniec procedury wybierz} procedure zapisdaty; const dni:array[0..6] of string=('Niedz','Pon','Wto','Sro','Czw','Pia','Sob'); var plik: text; var godz, min, sek, sek100, rr, mm, dd, dztyg: word; var g2,m2,s2, rr2, mm2, dd2: String; begin clrscr; getdate(rr, mm, dd, dztyg); Str(rr,rr2); writeln(rr2); Str(mm,mm2); writeln(mm2); Str(dd,dd2); writeln(dd2); gettime(godz, min, sek, sek100); Str(godz,g2); writeln(g2); Str(min,m2); writeln(m2); Str(sek,s2); writeln(s2); rename(plik2, 'D:\' +rr2+'-'+mm2+'-'+dd2+'_'+g2+';' +m2+';' +s2+ '.txt' ); end; {kod glowny} begin repeat z:= Readkey; if z=#27 then exit; losujzapisz; wybierz; until z = #27; zapisdaty; clrscr; end. po jakimś czasie stworzyłem program który zapisuje w kolejności rosnącej liczby do tablicy: program sortowanie; uses dos, crt; const n = 6; type tablica = array[1..n] of byte; var plik: text; procedure sortowanie_babelkowe(var tab : tablica); var i, j, tmp: byte; begin for i:=1 to n-1 do for j := i+1 to n do if tab[i] > tab[j] then begin tmp := tab[i]; tab[i] := tab[j]; tab[j] := tmp; end; end; procedure wyswietl(tab : tablica); var i : byte; plik: text; begin assign (plik, 'D:\lotor.txt'); append(plik); begin for i := 1 to n do write(plik, tab[i],' '); writeln; end; writeln(plik); write('Liczby zapisane do pliku txt: '); for i:=1 to n do write(tab[i],','); close(plik); end; procedure uzupelnij(var tab : tablica); var a,i,j,p : integer; spr: boolean; begin randomize; spr:=false; for p:=1 to 1 do begin for i:=1 to n do begin repeat spr:=false; a:=random(49)+1; for j:=1 to i do begin if a=tab[j] then spr:=true; end; until spr<>true; tab[i]:=a; write( tab[i],' '); end; {procedure zapisz; Begin assign(plik2, 'd:\lotos.txt'); rewrite(plik2); spr:=false; for p:=1 to 1 do begin for i:=1 to n do begin repeat spr:=false; a:=random(49)+1; for j:=1 to i do begin if a=tab[j] then spr:=true; end; until spr<>true; tab[i]:=a; write(plik2, tab[i],' '); } end; end; procedure nowy; var plik: text; Begin assign(plik, 'D:\lotor.txt'); rewrite(plik); close(plik); end; procedure zapisdaty; const dni:array[0..6] of string=('Niedz','Pon','Wto','Sro','Czw','Pia','Sob'); var plik: text; var godz, min, sek, sek100, rr, mm, dd, dztyg: word; var g2,m2,s2, rr2, mm2, dd2: String; begin clrscr; getdate(rr, mm, dd, dztyg); Str(rr,rr2); writeln(rr2); Str(mm,mm2); writeln(mm2); Str(dd,dd2); writeln(dd2); gettime(godz, min, sek, sek100); Str(godz,g2); writeln(g2); Str(min,m2); writeln(m2); Str(sek,s2); writeln(s2); rename(plik, 'D:\' +rr2+'-'+mm2+'-'+dd2+'_'+g2+';' +m2+';' +s2+ '.txt' ); end; var tab : tablica; z: char; begin nowy; repeat z:= Readkey; if z=#27 then exit; uzupelnij(tab); {wyswietl(tab);} sortowanie_babelkowe(tab); wyswietl(tab); readln; until z = #27; zapisdaty; end. ale nie działa z kolei zapis pliku pod nazwą w formacie daty i czasu utworzenia pliku, tak jakbym chciał...ma ktoś pomysł jak to dobrze zaimplementować do kodu? Z góry dzięki za pomoc. Pozdrawiam. Edytowane 10 Czerwca 2014 przez Pliks Cytuj Link to post Share on other sites
Luki91 157 Napisano 10 Czerwca 2014 Udostępnij Napisano 10 Czerwca 2014 (edytowane) Dlaczego zamiast tworzyć plik od razu z prawidłową nazwą, tworzysz najpierw plik "lotor.txt", a dopiero później zmieniasz jego nazwę na prawidłową? Procedura zapisdaty ma swoją zmienną plik i nie ma informacji o tym pliku, który stworzyłeś. Edytowane 10 Czerwca 2014 przez Luki91 Cytuj Link to post Share on other sites
Pliks 0 Napisano 10 Czerwca 2014 Autor Udostępnij Napisano 10 Czerwca 2014 (edytowane) Dlaczego zamiast tworzyć plik od razu z prawidłową nazwą, tworzysz najpierw plik "lotor.txt", a dopiero później zmieniasz jego nazwę na prawidłową? Procedura zapisdaty ma swoją zmienną plik i nie ma informacji o tym pliku, który stworzyłeś. bo jak robię procedurę dopisania nowego wiersza do pliku używając append, to muszę podać nazwę pliku, i jaką mam podac nazwę, skoro plik jest utworzony z datą i czasem w nazwie? albo po prostu nie wiem jak to sprytnie obejść? Edytowane 10 Czerwca 2014 przez Pliks Cytuj Link to post Share on other sites
Luki91 157 Napisano 10 Czerwca 2014 Udostępnij Napisano 10 Czerwca 2014 (edytowane) Możesz zwyczajnie zapisać tą nazwę do zmiennej Ale tak nawiasem mówiąc, cała struktura tego programu jest moim zdaniem błędna. Piszesz procedury w miejscach, gdzie powinieneś użyć funkcji. Budowa takiego programu powinna wyglądać następująco: 1) Masz: - funkcję zwracającą nazwę pliku w oparciu o aktualną datę i czas - funkcję zwracającą tablicę liczb - funkcję przyjmującą tablicę i zwracającą posortowaną tablicę (lub procedurę sortującą w miejscu, to obojętne) - procedurę przyjmującą nazwę pliku oraz tablicę, która zapisuje liczby z tablicy do pliku o danej nazwie 2) Kroki: - pobierasz nazwę pliku do zmiennej - pobierasz tablicę liczb do zmiennej - sortujesz tablicę (za pomocą procedury bądź funkcji) - wywołujesz procedurę zapisującą do pliku przekazując nazwę pliku i posortowaną tablicę Każdy problem najlepiej dzielić na mniejsze i właśnie to uzyskujesz tym sposobem. Poza tym logiczny, spójny kod dużo łatwiej zrozumieć i zdebugować. W twoim kodzie problem jest posiekany na zbyt wiele niepasujących do siebie kawałków, stąd problemy Edytowane 10 Czerwca 2014 przez Luki91 1 Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.