```Contributor: STEVE ROGERS

{
JL>  #2: Another thing, I've got this cool Lotto program where I would like to
>  a date file where the user can enter the weeks winning lotto numbers, then
>  after a collection of weeks is made (say 10), the computer will read all t
>  numbers in the file and compile a list of the most frequently ocurring num
>  and print them out to the screen. I'm having trouble reading from and writ
>  to the file. (I'll tackle the list compiling once that is straightened out
>  help?

Oh Boy, Lotto programs, the concept is pregnant with possibilities!
Ever wonder why someone with a lotto program would sell it and not
just win all the lottos? :)

Ok, you want a frequency analyzer. Here's a start that will let you
enter numbers and give a frequency table of all the numbers to date
(hey, this is kinda fun, maybe I'll go into the lottery seminar
bidness. Look out, Becky Paul!):
}

{\$i-}
uses
crt;

const
MAX = 49;

type
tFreqArray= array[0..MAX] of word;

var
freqArray : tFreqArray;

{----------------------}
procedure InitFreqArray;
{ Read data file into array. If not found, zero all accumulators. }

var
FreqF : file of tFreqArray;

begin
assign(FreqF,'lotto.dat');
reset(FreqF);
if (ioresult=0) then begin
close(freqF);
end else fillchar(FreqArray,sizeof(FreqArray),0);
end;

{----------------------}
procedure SaveFreqArray;
var
FreqF : file of tFreqArray;

begin
assign(FreqF,'lotto.dat');
rewrite(FreqF);
write(Freqf,freqArray);
close(freqF);
end;

{----------------------}
procedure PrintFrequencyTable;

type
tPickRec=record
Number : byte;
Freq : word;
end;
tPickArray=array[0..MAX] of tPickRec;

var
PickArray : tPickArray;

{-----------}
procedure SortPickArray;

{-----------}
procedure Swap(One,TheOther : byte);
var
tmp : tPickRec;

begin
tmp:= PickArray[One];
PickArray[One]:= PickArray[TheOther];
PickArray[TheOther]:= tmp;
end;

{----------}
var
i,j,min : byte;

begin
for i:= 0 to pred(MAX) do begin
min:= i;
for j:= succ(i) to MAX do
if (PickArray[j].freq > PickArray[min].freq) then  min:= j;
if (min>i) then Swap(i,min);
end;
end; {SortPickArray}

{--------}
var
i : byte;

begin
for i:= 0 to MAX do with PickArray[i] do begin
Number:= i;
Freq:= FreqArray[i];
end;

SortPickArray;
clrscr;
writeln;
writeln('Frequency Table:');
for i:= 0 to 9 do
writeln(PickArray[i].Number   :7,': ',PickArray[i].Freq   :5,' ',
PickArray[i+10].Number:7,': ',PickArray[i+10].Freq:5,' ',
PickArray[i+20].Number:7,': ',PickArray[i+20].Freq:5,' ',
PickArray[i+30].Number:7,': ',PickArray[i+30].Freq:5,' ',
PickArray[i+40].Number:7,': ',PickArray[i+40].Freq:5,' ');

end; {PrintFrequencyTable}

{----------------------}
procedure GetLottoNumbers;
var
OneNumber : byte;
Test : integer;
s : string;

begin
PrintFrequencyTable;
repeat
writeln;
write('Enter lotto number (<=',MAX,', Enter to quit): ');
if (s<>'') then begin
val(s,OneNumber,test);
if (test=0) then begin
inc(FreqArray[OneNumber]);
PrintFrequencyTable;
end;
end;
until (s='');

end; {GetLottoNumbers}
begin
InitFreqArray;
GetLottoNumbers;
SaveFreqArray;
end.
              ```