program kooditabel; {programm koostab kooditabeli} uses crt,graph; type andmed=record alg:string[30]; k:array [1..30] of string[30]; end; label uuesti; label valesti; var a,i,j,m,nr : word; {loendamismuutujad} algfail,loppfail:file of andmed; textifail:text; kirje:andmed; b,kordub,c:boolean; l,x:char; nimi, uusnimi, dir:string; procedure algus; type pointtype=record x,y:integer; end; var nelinurk:array[1..4] of pointtype; d,m:integer; begin d:=detect; initgraph(d, m, ''); cleardevice; setfillstyle(1,2); nelinurk[1].x:=round(getmaxX/2-200); nelinurk[1].y:=round(getmaxY/2-100); nelinurk[2].x:=round(getmaxx/2+200); nelinurk[2].y:=round(getmaxy/2-100); nelinurk[4].x:=round(getmaxx/2-200); nelinurk[4].y:=round(getmaxy/2+100); nelinurk[3].x:=round(getmaxx/2+200); nelinurk[3].y:=round(getmaxy/2+100); fillpoly(4,nelinurk); settextstyle(4,0,4); outtextxy(280,200,'KOODITABEL'); outtextxy(200,240,'Jtkamiseks vajuta suvalist klahvi.'); readkey; cleardevice; end; procedure vana; label vale; var abi:andmed; vfail, jatka :string; vanafail:file of andmed; begin vale: writeln('Kirjuta faili nimi, mida soovid kasutada.'); write('(See peaks asuma default kataloogis.) :'); readln(vfail); assign(vanafail,vfail); {$I-} reset(vanafail); {$I+} if IOResult>0 then begin write('Sellist faili ei ole, kas jtkad? (j/e) '); readln(jatka); if jatka='j' then goto vale else halt; end; assign(algfail,'file0.dat'); rewrite(algfail); seek(vanafail,0); while not eof(vanafail) do begin read(vanafail,abi); for j:=1 to 30 do abi.k[j]:=''; write(algfail,abi); end; close(vanafail); close(algfail) end; procedure teekood(i:integer); var taht:string; n:word; begin with kirje do begin k[i]:=''; for a:=1 to nr do begin if l='s' then n:=random(38); if l='t' then n:=random(28); if l='n' then n:=random(10)+28; case n of 0 : taht:='a'; 1 : taht:='b'; 2 : taht:='c'; 3 : taht:='d'; 4 : taht:='e'; 5 : taht:='f'; 6 : taht:='g'; 7 : taht:='h'; 8 : taht:='i'; 9 : taht:='j'; 10 : taht:='k'; 11 : taht:='l'; 12 : taht:='m'; 13 : taht:='n'; 14 : taht:='o'; 15 : taht:='p'; 16 : taht:='q'; 17 : taht:='r'; 18 : taht:='s'; 19 : taht:='z'; 20 : taht:='t'; 23 : taht:='u'; 24 : taht:='v'; 25 : taht:='w'; 26 : taht:='x'; 27 : taht:='y'; 28 : taht:='8'; 29 : taht:='9'; 30 : taht:='0'; 31 : taht:='1'; 32 : taht:='2'; 33 : taht:='3'; 34 : taht:='4'; 35 : taht:='5'; 36 : taht:='6'; 37 : taht:='7'; end; kirje.k[i]:=concat(k[i],taht); end; end; end; function koodesaabteha(koodisuurus:word;koodkoosneb:char):word; var saab:word; markidearv,loeb:word; begin case koodkoosneb of 'n' : markidearv:=10; 't' : markidearv:=28; 's' : markidearv:=38; end; saab:=1; for loeb:=0 to koodisuurus-1 do saab:=saab*(markidearv-loeb); koodesaabteha:=saab; end; procedure viga; begin clrscr; window(1,1,80,25); repeat gotoXY(30,10); textcolor(green+blink); write('STJUPID JUUSER ERROR!'); sound(698); delay(1000); nosound; until keypressed; clrscr; gotoXY(20,10); TextColor(14); { Yellow = 14 } TextBackground(Blue); writeln('Sorry, aga niipalju koode lihtsalt ei saa teha!'); gotoXY(18,14); write('Vajuta ENTER, kontrolli andmeid ja proovi uuesti!'); readln; halt; end; function kontroll(m,mitmeskood,mitmeskirje:word):boolean; {Kontroll, kas kood ei kordu} var abi:andmed; vordlekirjenr,vordlekoodnr:word; kordub:boolean; begin {kontrollin kirjesiseselt} kordub:=false; vordlekoodnr:=1; while (vordlekoodnr'' then begin if ((j*m)/(koodesaabteha(nr,l))>0.9) and (l<>'n') then viga; if ((j*m)/(koodesaabteha(nr,l))>1) and (l='n') then viga; for i:=1 to m do begin uuesti: teekood(i); if ((j=1) and (i>1)) or (j>1) then begin c:=kontroll(m,i,j); if (c=true) then goto uuesti; end; end; write(loppfail,kirje); j:=j+1; end else b:=true; if (x='j') and (eof(algfail)=true) then b:=true; end; if x='j' then close(algfail); close(loppfail); clrscr; write('Kas soovid andmetest tekstifaili? (j/e)'); readln(x); if x='j' then teetext; GetDir(0,dir); writeln('Koodid leiad failist ',dir,'\file2.txt.'); write('Kas soovid andmefaili ka edaspidi kasutada? (j/e)'); readln(x); if x='j' then begin write('Pane failile nimi (*.dat) : '); valesti: readln(nimi); uusnimi:=nimi+'.dat'; rename(loppfail,uusnimi); if IOResult>0 then begin write('Selline fail on juba olemas. Anna uus nimi: '); goto valesti; end; writeln('Edaspidi saad kasutada faili ',dir,'\',uusnimi,'.'); end; writeln('L6petamiseks vajuta ENTER.'); readln; end.