Файл закрывается потому, что завершился кусок кода обработки данных. Далее идёт кусок визуализации результатов обработки.
MyABC и условие в if s[i] in ['a'..'z'] - это работа с типом МНОЖЕСТВО - set of char.
Я почти не работал с graph, только предполагаю.
Визуализация в графическом режиме.
1. Масштабирование по X и по Y
2. Рисование прямоугольников с заполнением.
Масштабирование.
1. По X
Пусть обрабатывались N=26 символов от 'a' до 'z'.
Тогда ширина каждого прямоугольника будет равна
dX:=(GetMaxX+1) div N
Но лучше рисовать диаграмму немного отступив от края экрана, например 5% слева и 5% справа. Таким образом, остаётся всего лишь 90% ширины и получим
dXshift:=( (GetMaxX+1)*5 ) div 100 {отступ от края экрана 5%}
dX:=( (GetMaxX+1) - dXshift - dXshift) div N {ширина каждого прямоугольника}
2. По Y
Среди значений массива (в нужном диапазоне символов от 'a' до 'z') ищется максимальный -
Amax.
Аналогично находим высоту максимального прямоугольника
dYshift:=( (GetMaxY+1)*5 ) div 100 {отступ от края экрана 5%}
dYmax:=(GetMaxX+1) - dYshift - dYshift
А высоты каждого рисуемого прямоугольника будут находиться
dY:=(a[i]*dYmax) div Amax
Рисование прямоугольников (псевдокод) с учётом что X возрастает слева направо, а Y сверху вниз
Код
for i:=ord('a') to ord('z') do
begin
dY:=(a[i]*dYmax) div Amax
Xstart:=dXshift+dX*( i-ord('a') )
Ystart:=(GetMaxY+1)-dYshift
Xstop:=Xstart+dX
Ystop:=Ystart-dY
прямоугольник(Xstart, Ystart, Xstop, Ystop) {кажется, bar или rectangle}
end;
Может быть, при вызове bar нужно будет поменять местами Ystart и Ystop, нужно установить цвета, стили заполнения. Я просто не знаю. Нужно пробовать.
Наверняка, в интернете вообще и на форуме в частности есть примеры построения диаграмм.
P.S. Препод от нас требовал не графическую диаграмму, а горизонтальную в текстовом режиме символами '*'.
Код
dYmax:=80
for i:=ord('a') to ord('z') do
begin
dY:=(a[i]*dYmax) div Amax
for Y:=1 to dY do
write('*');
writeln;
end;
В понедельник я уезжаю, больше помочь не смогу...