- •Задание № 4 по вычислительной практике
- •Процедуры управления графическим режимом
- •Функции управления графическим режимом
- •Управление цветом и палитрой Процедуры управления цветом и палитрой
- •Процедуры работы с линиями
- •Процедуры построения фигур из линий
- •Процедуры построения криволинейных фигур
- •Работа с текстом в графическом режиме Процедуры работы с текстом
- •Задание:
Работа с текстом в графическом режиме Процедуры работы с текстом
Procedure ...
SetTextStyle ( Font, Direction, CharSize : Word ) ; |
|
— |
устанавливает текущие тип шрифта, направление текста и размер символов. Font —тип шрифта. Direction —направление текста. CharSize —размер символов. |
OutTextXY ( x, y : Integer; TextString : String ) ; |
|
— |
выводит последовательность символов, начиная с заданных координат (x, y). x, y —исходные координаты. TextString —выводимый текст. |
Задание:
Используя графические возможности языка Паскаль написать программы, реализующие:
-
графическое представление результатов в виде а) круговых и б) «объемных» столбчатых диаграмм (в одной программе с просмотром по очереди, используя одинаковые исходные данные);
диаграммы должны быть размещены в выбранной части экрана при любых вводимых данных;
при этом дополнительно должны приводиться:
-
надписи на диаграммах или рядом с диаграммами (абсолютные числовые значения и их процентное соотношение);
-
сноски, поясняющие цвет каждого сектора или столбика диаграммы (смысловое содержание: страна, озеро и т.п.);
количество (от 2 до 8) и абсолютные значения числовых данных (а не их процентное соотношение) вводятся с клавиатуры — программа сама должна подсчитывать процентное соотношение и выбирать долю круга (сектор) в круговых диаграммах или масштаб (высоту столбиков и размещение столбиков по горизонтали) в столбчатых диаграммах по введенным абсолютным значениям;
смысловое наполнение придумать самостоятельно — предусмотреть 8 смысловых названий, например, в виде типизованной константы – строкового массива и при вводе с клавиатуры предложить ввести числовые данные для введенного предварительно количества первых из предусмотренных конкретных названий;
Program vp4_1;
Uses
graph, crt;
const
Topon=true;
topOff=false;
mas : array[1..8] of string = ('monitori','mishki','klaviatyri','kolonki' ,'modemi','fleshki','bloki','printeri');
Var
driver, mode, i, xc, yc, r ,sangle, k, alpha, xlv,ylv,xpn,ypn,x2x1, n : integer;
mag : array[1..8] of longint;
st,st1:string;
ang,ang_bef,ang_aft: word;
s , max : longint;
begin
clrscr;
Writeln( 'Vvvedite kolocgestvo ystroistv:' );
readln(n);
writeln( 'Vvedite skolko tovara ostalos:' );
for i:=1 to n do
begin
write(mas[i],'=');readln(mag[i])
end;
setviewport(0,0,300,300,true);
driver := detect;
initgraph( driver, mode, '' );
xc := getmaxx div 2;
yc := getmaxy div 2 ;
setactivepage(0);
R := 100; SAngle := 0; i := 1;
Ang_bef := 0; s:=0;
for k:=1 to n do s:=s+mag[k];
for k:=1 to n do
begin
Alpha := round(mag[k] / S * 360);
setcolor(i);
setfillstyle(1, i) ;
sector(Xc, Yc, SAngle, SAngle + Alpha, R, R);
Ang_Aft := Ang_bef+ROUND(mag[k]/s*360);
Ang := (Ang_bef+Ang_Aft) div 2;
str(mag[k],st);
str(round( mag[k]/s *100 ),st1);
settextstyle(0,0,1);
if (ang_aft <=90) or (ang_aft >=270) then
outTextXY(Xc+ROUND((r+20)*Cos(Ang/180*Pi)),yc-ROUND((r+20)*Sin(Ang/180*Pi)),st+'-' +st1+'%')
else
outTextXY(Xc+ROUND((r+30)*Cos(Ang/180*Pi))-40,yc-ROUND((r+20)*Sin(Ang/180*Pi)),st+'-' +st1+'%');
Ang_bef := Ang_Aft;
SAngle := SAngle + Alpha; i:= i + 1;
bar(Xc+200, Yc-250+(i-1)*20, Xc+220, Yc-250+(i-1)*20+15);
outtextxy(Xc + 230, Yc - 250 + 5 + (i - 1) * 20, mas[k]);
end;
readln;
clearviewport;
setactivepage(1);
max:=mag[1];
for k:=2 to n do if mag[k] > max then max := mag[k];
Xlv := 200; Ylv := 200; Xpn:= Getmaxx - 250; Ypn:= GetMaxY-70;
i:= 0;s:=0;
for k:=1 to n do s:=s+mag[k];
for k:=1 to n do
begin
setcolor( i+1 ); setfillstyle( 1,i );
x2x1:=round(Xlv+(i+1)*(Xpn-Xlv)/n)-round(Xlv+i*(Xpn-Xlv)/n);
bar3d(round(Xlv+i*(Xpn-Xlv)/n), Ypn,round(Xlv+(i+1)*(Xpn-Xlv)/n),round(Ypn-(Ypn-Ylv)/max*mag[k]), 15 ,topon);
str(mag[k],st);
str(round(mag[k]/s*100),st1);
settextstyle(0,1,1);
outTextXY(round(Xlv+20+i*(xpn-xlv)/n),ypn+5,st+'-' +st1+'%');
i:= i + 1;
bar(getMaxx-70, 50+(i-1)*20, getMaxx-50, 50+(i-1)*20+15);
settextstyle(0,0,1);
outtextxy(getMaxx-40, 50+(i-1)*20+8, mas[k]);
end;
setvisualpage(1);
readln;
closegraph
End.