uses CRT,graph; var gd,gm,x0,y0,w:integer; t: text; s: string; a: array [0..255] of byte; h, i,j,q,k:integer; b:array [1..2000] of real;{сколько вхождений каждой буквы} mx,mVertical:real; c:array [1..2000] of char; {сама букву} BEGIN clrscr; j:=1; k:=1; assign (t, 'int.pas'); reset (t); while not (eof (t)) do begin readln (t, s); for i := 1 to length (s) do begin s[i] := upcase(s[i]); {преобразуем букву в заглавную} inc (a[ord (s[i])]); if s[i] in ['A'..'Z'] then inc(h);{подсчет колличества всех вхождений всех встреч. букв} end; end; close (t); for i := 65 to 90 do if (a[i] <> 0) then begin inc(q); {сколько букв использованно} b[j]:=(a[i]/h); {записываем в массив относительную частоту буквы} c[k]:=chr(i);{записываем саму букву} inc(k); inc(j); writeln (chr(i), ' - ','частота-',( a[i]/h):3:3,', встречается раз -',a[i]); end; {----------diagramma------------------------} gd:=0; initgraph(gd,gm,''); w:=13;{ширина столбцов} x0:=15;{левый край диаграммы} y0:=420;{нижний край} mx:=b[1]; for j:=1 to q do if b[j]>mx then mx:=b[j];{находим максимум} mVertical:=(y0-40)/mx;{масштаб по вертикале} for j:=1 to q do begin setcolor(13);{цвет} Setfillstyle(5,12);{стиль заполнения } {рисуем параллелепипеды с заданной шириной,шагом и высотой соответственно значению частоты} Bar3d(x0+4*w*(j-1),y0-round(b[j]*mVertical),x0+w*(4*j-2),y0,15,topon); outtextXY(x0+4*w*(j-1),y0+20,c[j]);{выводим по низу буквы} str(b[j]:3:3,s);{преобразуем значение частоты в строку} outtextXY(x0+4*w*(j-1)+w-5,y0-round(b[j]*mVertical)-25,s);{выводим частоту выше столбика} end; readln; END.