{ Programm 7.16 von Rene' Scholz } program counter (input,output); uses crt; const Alp = ['A'..'Z' , 'a'..'z']; type woerter = ^worte; worte = record wort : string; count : integer; next : woerter; end; var erstes,voriges, aktuelles : woerter; dat : text; { procedure cls; begin writeln( chr(27), '[2J', chr(27), '[;H' ); end; } function next_bs :char; var bs : char; begin bs:=' '; while not ( eof(dat) or (bs in Alp) ) do read(dat,bs); if not (bs in Alp) then bs:=' '; next_bs:=bs; end; function lese_wort :string; var hs:string; bs:char; i:integer; begin i:=1;hs:=''; bs:=next_bs; if bs<>' ' then while (bs in Alp) do begin hs[i]:=bs; read(dat,bs); i:=i+1; end; hs[0]:=chr(i-1); { VAX : hs.length:=0; } lese_wort:=hs; end; { of lese_wort } function zaehle( wort : string):integer; var count : integer; mw : string; begin count:=0; mw:=''; while not eof(dat) do begin mw:=lese_wort; if mw=wort then count:=count+1; end; zaehle:=count; end; { of function zaehle } procedure look_for_w ( w:string ); begin if erstes^.next=NIL then begin new(aktuelles); aktuelles^.wort :=w; aktuelles^.count :=1; aktuelles^.next :=NIL; voriges^.next:=aktuelles; voriges:=aktuelles; end else begin aktuelles:=erstes^.next; while (aktuelles^.wort <> w ) and (aktuelles^.next <> NIL ) do aktuelles:=aktuelles^.next; if aktuelles^.wort = w then aktuelles^.count:=aktuelles^.count + 1 else begin new(aktuelles); aktuelles^.wort :=w; aktuelles^.count :=1; aktuelles^.next :=NIL; voriges^.next:=aktuelles; voriges:=aktuelles; end; end; end; { of procedure look_for_w } function haeufigstes_wort (var nh:integer ; var max_w:string) :boolean; var z : char; wort : string; { hier Speicherung des gelesenen Wortes des Files } i,count : integer; monoton : boolean; begin i:=0; new(aktuelles); erstes:=aktuelles; erstes^.wort:=''; erstes^.count:=0; erstes^.next:=NIL; aktuelles:=erstes; voriges:=erstes; wort:=lese_wort; while wort<>'' do begin look_for_w(wort); wort:=lese_wort; end; { alle Woerter in Liste eingelesen } aktuelles:=erstes^.next; { jetzt schauen, welches wort am haeufigsten ist } nh:=aktuelles^.count; max_w:=aktuelles^.wort; while aktuelles^.next <> NIL do begin aktuelles:=aktuelles^.next; count:=aktuelles^.count; if count >=nh then begin if count>nh then begin nh :=aktuelles^.count; max_w :=aktuelles^.wort; monoton:=false; end else monoton:=true; end; end; haeufigstes_wort:=monoton; end; procedure haeufige_woerter(h :integer); var ls,i : integer; st : string; weiter : string[1]; begin; i:=5; clrscr; writeln(' Es gibt mehrere Woerter', 'mit gleicher max. Haeufigkeit : '); writeln;writeln;writeln; aktuelles:=erstes; repeat aktuelles:=aktuelles^.next; if aktuelles^.count=h then begin if i=22 then begin writeln; write(' Hit ENTER for more '); readln(weiter); clrscr; i:=1; end; st:=aktuelles^.wort; ls:=length(st); while (ls<25) do begin st:=st + ' '; ls:=ls+1; end; writeln(st, ' : ',aktuelles^.count :4); i:=i+1; end; until ( aktuelles^.next = NIL ); end; procedure show_all_words ; { Alle Woerter mit ihrer Anzahl zeigen } var i,ls : integer; weiter : string[1]; st : string; begin i:=5; clrscr; writeln(' Anzeige der Haeufigkeiten aller Woerter '); writeln;writeln;writeln; aktuelles:=erstes; if erstes^.next <> NIL then repeat if i=22 then begin writeln; write(' Hit ENTER for more '); readln(weiter); clrscr; i:=1; end; aktuelles:=aktuelles^.next; st:=aktuelles^.wort; ls:=length(st); while (ls<25) do begin st:=st + ' '; ls:=ls+1; end; writeln(st, ' : ',aktuelles^.count :4); i:=i+1; until aktuelles^.next=NIL; end; { Main } var datei,wt,weiter :string; hw :integer; mono :boolean; begin wt:='';hw:=0;weiter:=''; clrscr; writeln(' Programm : Haeufigkeit von Woertern in einem File '); writeln;writeln; writeln('Geben Sie das gewuenschte File ein , Enter == "Zitate.txt" ! '); write(' File ? '); readln(datei); if datei='' then datei:='zitate.txt' else if pos('.',datei)=0 then datei:=datei + '.pas'; writeln(' File ---> ',datei); assign(dat,datei); writeln;writeln; write('Geben Sie das fragliche Wort ein : '); readln(wt); reset(dat); writeln;writeln; if wt<>'' then writeln('Das Wort "' ,wt, '" kam insgesamt ', zaehle(wt), ' mal vor . '); writeln;writeln; write(' Hit ENTER for more '); readln(weiter); writeln(' ** plaese wait a minute ** '); if wt<>'' then reset(dat); mono:=haeufigstes_wort(hw,wt); if not mono then begin writeln;writeln; writeln(' Das haeufigste Wort ist: "', wt, '" . Es kam insgesamt ', hw , ' mal vor .' ) end else haeufige_woerter(hw); writeln;writeln; write(' Hit ENTER for more '); readln(weiter); show_all_words; writeln;writeln; write(' Hit ENTER for End '); readln(weiter); close(dat); clrscr; writeln(' By. '); end.