Turbo Pascal для начинающих




Задача 219


{ Обрабатывает результаты контрольной работы
и отражает их в виде диаграммы } uses Crt, Graph;
( возвращает изображение дробного числа} function RealToStr(r: real; n,m: integer): string; var
st: string; begin
Str(r:n:m,st); RealToStr:=st; end;
const
{ подсказка при вводе исходных данных и
подпись рядом с прямоугольником легенды } mes: array[2..5] of string[10] =
Сдвоек1,'троек','четверок','пятерок');
var
array[2..5] of integer; { количество пятерок, четверок,
integer;
array[2..5] of real;
троек и двоек } { всего оценок } { процент каждой оценки
array[2..5] of integer; { высоты столбиков диаграмм }
integer; { номер максимального эл-та массива п integer; { индекс массива }
х,у: integer; { координаты левого нижнего угла столбика диаграммы }
grDriver:integer; { драйвер }
grMode:integer; { графический режим }
grPath:string; { место расположения драйвера }
ErrCode:integer; { результат инициализации граф.
begin
( ввод исходных данных }
TextBackground(Blue);
TextColor(LightGray) ;
ClrScr;
writeln('Обработка результатов контрольной работы');
writeln('Введите исходные данные:');
for i:=5 downto 2 do begin
write(mes[i],' -> '); readln(n[i]); end;
for i:=2 to 5 do s:=s+n[i]; { всего оценок }
{ вычислим процент каждой оценки } for i:=2 to 5 do p[i]:=(n[i]/s)*100;
{ вычислим высоту каждого столбика диаграммы, } { но сначала определим, каких оценок больше } т:=5; { пусть больше всегоусть количеству оценок, которых больше, соответствует столбик высотой 200 пикселей. Вычислим высоты остальных столбиков. }
for i:=5 downto 2 do
. h[i]:=Round( (200/n[m])*n[i] );
{ обработка выполнена, строим диаграмму }
grDriver := VGA; { режим VGA}
grMode:=VGAHi; { разрешение 640x480}
grPath:='e:\tp\bgi'; { драйвер, файл EGAVGA.BGI, находится
в каталоге e:\tp\bgi } InitGraph(grDriver, grMode,grPath); ErrCode := GraphResult; if ErrCode <> grOk then begin
writeln('Ошибка инициализации графического режима.1); writeln(',njM завершения работы программы ',
'нажмите <Enter>'); readln; Halt (l^-
{ строим диаграмму }
OuttextXY(40,50,'Результаты контрольной работы'); Rectangle(40,80,170,310);
х:=50; у:=300; { левый нижний угол первого столбика } { столбики диаграммы } for i:=5 downto 2 do begin
SetFillStyle(SolidFill,i);
Bar(x,y,x+10,y-h[i]); { столбик }
{ OutTextXY(x,y-h[i]-10,RealToStr(p[i],5,2)+'%');
x:=x+20; end;
{ численные значения } x:=50;
for i:=5 downto 2 do begin
SetFillStyle(SolidFill,i);
{Bar(x,y,x+10,y-h[i]); { столбик }
OutTextXY(x,y-h[i]-10,RealToStr(p[i],5,1)+'%');
x:=x+20; end;
{ легенда } х:=200;у:=100; for i:=5 down to 2 do begin
SetFillStyle(SolidFill,i); Bar(x,y,x+20,y+10); { столбик } OutTextXY(x+25,y,raes[i]); y:=y+20; end; readln; CloseGraph; end. { Выводит круговую диаграмму }
uses Graph;
const
N=4; ( количество категорий }
name: array[1..N] of
string[10]=('Книги','Журналы','Канцтовары','Прочее'); var
kol: array[1..N] of real,
dol: array[l..N] of real;
sum: real; al,a2: integer; x,y: integer; st: string; i: integer;
{ количество для категории }
{ доля категории в общем
количестве }
{ общее кол-во по всем категориям { угол начала и конца сектора } ( координаты вывода легенды } { изображение числа }
grDriver:integer; { драйвер }
grMode:integer; { графический режим }
grPath:string; { место расположения драйвера }
ErrCode:integer; { результат инициализации граф. режима }
begin
grDriver := VGA; { режим VGA} grMode:=VGAHi; ( разрешение 640x480} grPath:='e:\tp\bgi'; ( драйвер, файл EGAVGA.BGI, находится
в каталоге e:\tp\bgi }
tGraph(grDriver, grMode,grPath); ErrCode := GraphResult; if ErrCode о grOk then begin
. writeln('Ошибка инициализации графического режима.');
writeln('Для завершения работы программы ', 'нажмите <Enter>');
readln;
Halt(l); end;
{ ввод исходных данных }
writeln('Введите количество по каждой категории'); sum:=0;
for i:=l to N do begin
write(name[i],' ->'); readln(kol[i]); sum:=sum+kol[i]; end;
f вычислим долю каждой категории в общей сумме } for i:=l to N do
]:=kol[i]/sum*100;
{ строим диаграмму } al:=0; ( от оси ОХ }
x:=350; y:=100; { левый верхний угол области легенды } for i:=l to N do begin
{ сектор }
a2:=al+Round(3.6*Dol[i]); { 1% - 3.6 градуса }
if a2 > 360 then a2:=360;
SetFillstyle(SolidFill,i);
PieSlice(200,200,al,a2,100);
al:=a2; { следующий сектор - от конца текущего }
{ легенда }
Ваг(х,у,х+30,у+10);
Rectangle(х,у,х+30,у+10);
str(dol[i]:6:1,at);
OutTextXY(x+50,y,name[i]+' -'
y:=y+20; end;
readln; CloseGraph; end.









Начало    Назад    Вперед




Книжный магазин