program slovnik; {$APPTYPE CONSOLE} uses SysUtils; const MaxPocSlov = 20; MaxDelkaSlova = 10; var Slova : array[1..MaxPocSlov]of string; Pocet : array[1..MaxPocSlov]of integer; Stat : array[1..MaxDelkaSlova]of integer; PocetSlov,i : integer; veta : string; znak : char; Function Vyskyt(kde:string;co:char):integer; {vrati prvni vyskyt znaku "co" ve stringu "kde" nebo nulu} var i:integer; begin for i:=1 to Length(kde) do if kde[i]=co then begin Vyskyt:=i;Exit end; Vyskyt:=0 end; Function NajdiSlovo(slovo:string):integer; {vrati prvni vyskyt "slova" v poli slov "Slova" nebo nulu} var i:integer; begin for i:=1 to PocetSlov do if slovo=Slova[i] then begin NajdiSlovo:=i;Exit end; NajdiSlovo:=0 end; Procedure Zpracuj(slovo:string); {zaradi "slovo" a prislusne upravi pole "Slova" a "Pocet"} var kolikate:integer; begin kolikate:=NajdiSlovo(slovo); if (kolikate>0) then Pocet[kolikate]:= Pocet[kolikate]+1 else begin PocetSlov:=PocetSlov+1; Slova[PocetSlov]:=slovo; Pocet[PocetSlov]:=1 end end; procedure Rozdel(veta:string); {rozdeli "vetu" na slova ktera nasype do pole "Slova", kazde slovo jen jednou, pocet opakovani do pole "Pocet"} var slovo:string; i,delka : integer; begin i:=1; delka:=Length(veta); PocetSlov:=0; repeat while (i<=delka) and (veta[i]=' ') do i:=i+1; slovo:=''; while (i<=delka) and (veta[i]<>' ') do begin slovo:=slovo+veta[i];i:=i+1 end; Zpracuj(slovo) until (i>delka) end; procedure Rozdel2(veta:string); {rozdeli "vetu" na slova ktera nasype do pole "Slova", kazde slovo jen jednou, pocet opakovani do pole "Pocet"} var slovo:string; i : integer; begin PocetSlov:=0; if veta[1]<>' ' then slovo:=''+veta[1]; for i:=2 to Length(veta) do if veta[i-1]<>' ' then if veta[i]<>' ' then slovo:=slovo+veta[i] else Zpracuj(slovo) else if veta[i]<>' ' then slovo:=''+veta[i]; if veta[Length(veta)]<>' ' then Zpracuj(slovo) end; begin write('Zadej vetu: '); readln(veta); Rozdel2(veta); writeln; writeln('POCTY SLOV'); for i:= 1 to PocetSlov do writeln(Slova[i],' ',Pocet[i]); write('Zadej znak: '); readln(znak); writeln; writeln('POCTY SLOV OBSAHUJICI ZNAK ',znak); for i:= 1 to PocetSlov do if Vyskyt(Slova[i],znak)>0 then writeln(Slova[i],' ',Pocet[i]); for i:= 1 to PocetSlov do Stat[Length(Slova[i])]:=Stat[Length(Slova[i])]+Pocet[i]; writeln; writeln('STATISTIKA DELEK SLOV'); for i:= 1 to MaxDelkaSlova do if Stat[i]>0 then writeln('delka ',i,' pocet ',Stat[i]); readln end.