Лекція 9 Організація програм, що включають діалог з користувачем



Скачати 39.09 Kb.
Дата конвертації05.03.2017
Розмір39.09 Kb.
Лекція 9

Організація програм, що включають діалог з користувачем.

Інтерактивні програми повинні містити меню з перерахуванням всіх існуючих варіантів вибору. При цьому в меню необхідно включити назви або номери клавіш, що беруть участь у виборі варіанту.
Приклад побудови кругової і стовпчикової діаграм.
Program Dialog;

{ Підключаємо стандартні модулі}

Uses Graph, Crt;

Var


gd, gm : integer;{ оголошуємо змінні для іціалізацiї графіки }

ch: char; { змінна, що зберігає код натиснутої клавіші }


{ Описуємо процедури, але для наочності ми їх приведемо нижче }
{ Початок основної програми }

BEGIN
{ Ініціалізація графіки }

Gd :=detect;

Initgraph (gd, gm,’ ‘);


{ Процес, що повторюється, для вибору варіанту }

Repeat
{ Очищення екрану від попередньої інформації }

Clrscr;
{ Виведення меню на екран }

Outtextxy(100,100, ‘1 - Кругова діаграма’);

Outtextxy(100,120, ‘2 - Стовпчикова діаграма’);

Outtextxy(100,140, ‘3 - Вихід’);


{ Очікування натиснення клавіші }

Ch := readkey;


{ Вибір процедури Krug або процедури Stolb }

Case Ch of

‘ 1’ : Krug;

‘ 2’ : Stolb ;


{ Передбачений вихід з меню при натисненні на клавішу 3 }

Until Ch = ‘ 3’;


{ Закривається графічний режим і програма завершує роботу }

Closegraph;

End.

Procedure Krug;



Const n=7; f= round(360/n)-20;
Var

i : byte;

StartAngle, EndAngle : integer;

SText, St : string;

FillInfo : array[1..n+1] of FillSettingsType;

Angle : array [1..n+1] of byte;

k,k1 : integer;
Function Rad(A : Real) : Real;

Begin


Rad:=Pi*A/180;

End; { Rad }


Begin

Clrscr;


randomize;

For I:=1 to n+1 do

Begin

SetFillStyle(random(9)+2,random(14)+2);



GetFillSettings(FillInfo[i]);

End;


For i:=1 to n do

Begin


StartAngle:=0;

Angle[i]:=StartAngle+f+random(19);


StartAngle:=EndAngle;

End;


SetTextJustify(CenterText,CenterText);

StartAngle:=0;

For i:=1 to n do

Begin


SetFillStyle(FillInfo[i].Pattern,FillInfo[i].Color );

SetColor(FillInfo[i].Color);

EndAngle:=StartAngle+Angle[i+1];

PieSlice(GetMaxX div 2, GetMaxY div 2, StartAngle, EndAngle, 200);

str(round(Angle[i]/360*100), St);

St:=St+'%';

SetColor(White);

{вывод текста}

IF (200-TextWidth(St))*Sin(Rad(Angle[i]))>TextWidth(St) THEN

OutTextXY(GetMaxXdiv 2+Round((200-TextWidth(St))*Cos(Rad(StartAngle+Angle[i]/2))),

GetMaxY div 2+-Round((200-TextWidth(St))*Sin(Rad(StartAngle+Angle[i]/2))),St)

ELSE


Begin

OutTextXY(GetMaxX div 2+Round((200+TextWidth(St))*Cos(Rad(StartAngle+Angle[i]/2))),

GetMaxY div 2+Round((200+TextWidth(St))*Sin(Rad(StartAngle+Angle[i]/2))),St);

End;
StartAngle:=EndAngle;

End;

SetFillStyle(FillInfo[n+1].Pattern,FillInfo[n+1].Color );



SetColor(FillInfo[n+1].Color);

PieSlice(GetMaxX div 2, GetMaxY div 2, StartAngle,360, 200);

str(round((360-StartAngle)/360*100), St);

St:=St+'%';

SetColor(White);

IF (200-TextWidth(St))*Sin(Rad(360-StartAngle))>TextWidth(St) THEN

OutTextXY(GetMaxX div 2+Round((200-TextWidth(St))*Cos(Rad(StartAngle+(360-StartAngle)/2))),

GetMaxY div 2-Round((200-TextWidth(St))*Sin(Rad(StartAngle+(360-StartAngle)/2))),St)


ELSE


Begin

OutTextXY(GetMaxX div 2+Round((200+TextWidth(St))*Cos(Rad(StartAngle+(360-StartAngle)/2))),

GetMaxY div 2+Round((200+TextWidth(St))*Sin(Rad(StartAngle+(360-StartAngle)/2))),St);

End;


End; { Кінець процедури Krug }

Procedure Stolb;

Const

sY=100;


sX=30;

n=10; { стрілки}

f=2; g=45; {позначки}

Month : Array[0..11] OF String = ('Jan','Feb','March','Apr','May','June',

'July','Aug','Sep','Oct','Nov','Dec');
Var

Y0, X1, Y1, X2, Y2, X3, Y3, X4, Y4, Y : integer;

i, col : byte;

cc, num : integer;

SText : string;
Begin

{ визначення вiсей координат}

X1:=sX;

Y1:=ABS(sY-150);



X2:=sX;

Y2:=GetMaxY-sY;

X3:=GetMaxX-50;

Y3:=GetMaxY-Sy;

cc:=(g+20) div 3;
{ промальовування вiсей координат}

Line(X1,Y1,X2,Y2);

Line(X2,Y2,X3,Y3);

{ промальовування стрілок}

Line(round(X1-n*0.2),Y1+n,X1,Y1);

Line(round(X1+n*0.2),Y1+n,X1,Y1);

Line(X3-n,round(Y3-n*0.2),X3,Y3);

Line(X3-n,round(Y3+n*0.2),X3,Y3);

{ промальовування позначок}

num:=abs(Y2-Y1) div g;

For i:=1 to num-1 do

Begin


Line(X2-f, Y2-g*i, X2+f, Y2-g*i);

str(i*10, SText);

OutTextXY(X2-f-20, Y2-g*i, SText);

End;
num:=abs(X2-X3) div g;

For i:=1 to num-1 do

Line(X2+g*i, Y2-f, X2+g*i, Y2+f);


{ промальовування стовпців}

randomize;

col:=Blue;

SetColor(col);

SetFillStyle(9,col);

SetTextStyle(DefaultFont, VertDir, 1);

SetTextJustify(CenterText, CenterText);

For i:=0 to 11 do

Begin

Y:=GetMaxY-Y1-Sy-random(GetMaxY-Y1-sY-30)+1+Y1;



SetColor(White);

Bar(X2+g*i+3, Y, X2+g*i+cc, Y2-3);


{ виведення тексту}

Str(GetMaxY-sY-Y, SText);

If abs(Y-Y2)<2*textWidth(SText) then

OutTextXY((X2+g*i+3+X2+g*i+cc) div 2, Y-30 ,SText )

else

OutTextXY((X2+g*i+3+X2+g*i+cc) div 2, (Y+Y2) div 2,SText );



End;
col:=LightBlue;

SetColor(col);

SetFillStyle(9,col);

For i:=0 to 11 do


Begin


Y:=GetMaxY-Y1-Sy-random(GetMaxY-Y1-sY-30)+1+Y1;

SetColor(white);

Bar(X2+g*i+5+cc, Y, X2+g*i+2*cc, Y2-3);
{ виведення тексту}

Str(GetMaxY-sY-Y, SText);

If abs(Y-Y2)<2*textWidth(SText) then

OutTextXY((X2+g*i+5+cc+X2+g*i+2*cc) div 2 +TextHeight(SText), Y-30 ,SText )

else

OutTextXY((X2+g*i+5+cc+X2+g*i+2*cc) div 2, (Y+Y2) div 2,SText );



End;
SetTextJustify(LeftText, TopText);

SetTextStyle(DefaultFont, HorizDir, 1);

For i:=0 to 11 do

OutTextXY(X2+g*i+7,Y2+19,month[i]);



readln;

End; { Кiнець процедури Stolb }


База даних захищена авторським правом ©lecture.in.ua 2016
звернутися до адміністрації

    Головна сторінка