uses crt; const pikkus=37; var mass:array[0..pikkus-1,1..2] of integer; //paiskv„„rtuse arvutamine function paiskv(key:integer):integer; begin paiskv:=key mod pikkus; end; //massiivi t„itmine nullidega procedure reset; var i:integer; begin for i:=0 to pikkus-1 do begin mass[i,1]:=0; mass[i,2]:=0; end; end; //votme lisamine massiivi k.a. kustutamisele m„„ratud elemendi kohale //kollisiooni puhul liidetakse indeksile 1 kuni leitakse vaba koht. procedure aseta(key:integer); var i:integer; uuskoht:integer; begin if (mass[paiskv(key),1]=0) or (mass[paiskv(key),2]=-1) then begin mass[paiskv(key),1]:=key; mass[paiskv(key),2]:=0; end else begin uuskoht:=paiskv(key); while mass[uuskoht,1]<>0 do begin uuskoht:=uuskoht+1; end; mass[uuskoht,1]:=key; mass[paiskv(key),2]:=0; end; end; //votme otsimine massiivist, kui voti olemas tagastatakse tema index kui //votit pole tagastatakse -1 function otsi(key:integer):integer; var olemas:boolean; koht:integer; begin olemas:=false; if mass[paiskv(key),1]=key then begin olemas:=TRUE; otsi:=paiskv(key); end; if olemas=FALSE then begin koht:=paiskv(key); repeat if mass[koht,1]=key then begin olemas:=TRUE; otsi:=koht; end; koht:=koht+1; until (koht=0) or (koht>=pikkus); if olemas=FALSE then otsi:=-1; end; end; //votme kustutamine massiivist (tegelikult kll kustutamisele m„„ramine) //kui voti on olemas siis lisatakse massiivi teise veergu votme kohale -1 //funktsioon tagastab v„„rtuse true kui kustutamine onnestus voi v„„rtuse //false kui votit polnud. function kustuta(key:integer):boolean; var result:integer; begin result:=otsi(key); if result<>-1 then begin mass[result,2]:=-1; kustuta:=true; end else begin kustuta:=false; end; end; //protseduur kuvab koik massiivis olevad ning mitte kustutamisele kuuluvad votmed procedure kuva; var i:integer; begin for i:=0 to pikkus-1 do begin if (mass[i,1]<>0) and (mass[i,2]<>-1) then begin writeln('Index: ',i,' - voti: ',mass[i,1]); end; end; end; //funktsioon tagastab massiivis olevate mitte kustutamisele kuuluvate votmete arvu function loe:integer; var i:integer; begin loe:=0; for i:=0 to pikkus-1 do begin if (mass[i,1]<>0) and (mass[i,2]<>-1) then inc(loe); end; end; procedure menu; var key:char; voti:integer; result:boolean; begin repeat repeat clrscr; writeln(' VALI TEGEVUS '); writeln('---------------'); writeln('(L)isa voti'); writeln('(O)tsi votit'); writeln('(T)rki votmed'); writeln('(K)ustuta'); writeln('(V)„lju'); writeln(); writeln('NB! Veel on voimalik sisestada ',((pikkus-1)/3)-loe:0:0,' votit'); key:=readkey; until key in ['L','l','O','o','T','t','V','v','k','K']; case key of 'L','l': begin if ((pikkus-1)/3)-loe=0 then begin textcolor(red); writeln('Rohkem votmeid ei saa lisada!'); normvideo; readkey; end else begin write('Sisesta voti: '); readln(voti); if otsi(voti)<>-1 then begin textcolor(red); writeln('Votmed peavad olema unikaalsed!'); normvideo; readkey; end else begin aseta(voti); textcolor(green); writeln('Lisatud!'); readkey; normvideo; end; end; end; 'O','o': begin write('Sisesta voti: '); readln(voti); if otsi(voti)<>-1 then begin textcolor(green); writeln('Voti ',voti,' on olemas ja asub massiivis kohal ',otsi(voti),' !'); normvideo; end else begin textcolor(red); writeln('Voti ',voti,' puudub!'); normvideo; end; readkey; end; 'T','t': begin textcolor(green); clrscr; writeln('Massiivis asuvad votmed: '); writeln('-------------------------'); normvideo; kuva; readkey; end; 'K','k': begin write('Sisesta voti: '); readln(voti); result:=kustuta(voti); if result=true then begin textcolor(green); writeln('Voti ',voti,' on kustutatud !'); normvideo; end else begin textcolor(red); writeln('Voti ',voti,' puudub!'); normvideo; end; readkey; end; end; //case until (key='v') or (key='V'); end; begin clrscr; reset; menu; end.