9.6. Противопожарные требования
К помещению, в котором располагается
вычислительный центр предъявляются требования:
1) здание, в котором предусмотрено
размещение ЭВМ, должно быть 1 степени огнестойкости;
2) все виды кабельных коммуникаций должны
быть проложены в металлических газовых трубах;
3) подпольные пространства под
съемными полами должны быть разделены несгораемыми перегородками;
По пожароопасности зоны данное помещение относится к классу П-IIa. Для ликвидации пожаров помещение
вычислительного центра площадью 40 кв. м. должно располагать одним
углекислотным огнетушителем типа ОУ-2, ОУ-5, или ОУ-8.
Для своевременного обнаружения, оповещения и принятия мер быстрой
ликвидации пожара в помещении необходима установка дымовых пожарных извещателя.
При установке извещателя на высоте 4 м и площади помещения 40 кв. м. достаточно
одного дымового извещателя.
9.7. Организация рабочего места пользователя при работе с терминалом
1) При организации рабочего места с терминалом на одного пользователя
необходимо выделять не меньше б кв. метров. Высота юмещения должна быть не
меньше 4 метров.
2) Помещение обязательно должно
оборудоваться огнетушителем, сигнализацией и телефоном (и городским и местным).
3) Помещение должно быть оборудовано
одноместными столами и мягкими стульями с меняющимися по высоте сиденьями и
спинками стула. Столы должны иметь длину не менее 0.7 метра и ширину,
обеспечивающую место перед клавиатурой 0.3 метра.
4) Разрешающая
способность человеческого глаза составляет примерно 0.3 мм на расстоянии 500
мм. Благоприятная для обозрения площадь лежит в пределах 500-700 мм. Для
зрительного распознавания алфавитно-цифровых знаков необходим растр размером
5-7 точек, поэтому ширина и высота линий изображения этих знаков должна быть не
менее 1.5 мм при удалении 500 мм и 2.9 мм при удалении 700 мм от работающего.
Угол обзора по вертикали составляет 15. В положении сидя этот угол не превышает
15 относительно горизонтали. Оптимальное расстояние от глаз до экрана монитора
0.6-0.7 м., допустимое не менее 0.5 метра. Рассматривать информацию на экране
ближе 0.5 метра не рекомендуется.
5) Требуемая и допустимая контрастность элементов рабочего места снизу
ограничена возможностью распознавания, а сверху допускаемой освещенностью,
исключающей ослепление работающего. В поле зрения работающего контрастность
должна быть в пределах от 8:1 до 15:1. При этом исключается наличие глянцевых
поверхностей, создающих блики и отражающий свет. Уменьшению усталости и
повышению удобства обслуживания способствует определенное размещение коммуникаций
работающего с машиной.
Метрологическое обеспечение осуществляется на основе положений ГОСТ
12.0.005-84 "Метрологическое обеспечение в области безопасности труда.
Основные положения" /М., 1984/, системы стандартов безопасности труда,
санитарных норм и правил Минздрава СССР и др.
Приборы для контроля опасных и вредных производственных факторов
представлены в
Измеряемая величина единица измерений
|
Рабочие средства измерений
|
Погрешность
|
тип
|
диапазон
|
частотный
|
динамический
|
1. Температура, С и относительная влажность
воздуха, %
|
Аспирационный психометр MB-4M
|
-
-
|
-31 . . .
51 С
10 . . .
100 %
|
+0,1 С
+5%
|
2. Скорость движения воздуха, м/с
|
Термометр, электроанемометр TAM-1
|
-
|
0,1 . . .
5 м/с
|
+2,1
м/с
|
3. Уровень звукового давления в октавных
полосах частот, дБ
|
вшв-ооз
|
10 . . .
20000 Гц
|
25 . . .
140 дБ
|
+1 дБ
|
4. Освещенность, лк.
|
Люксметр Ю-116 мкм
|
0,38. . .
0,72 мкм
|
5 . . .
100000 лк
|
+10 %
|
5. Массовая концентрация пыли, мг/куб.м
|
Радиоизотопный пылемер ПРИЗ-2
|
-
|
0,1 . . .
100 иг/м
|
+20 %
|
ЗАКЛЮЧЕНИЕ
В результате разработки данной дипломной
работы написана программа для обучения работе в графическом режиме. Программа
предназначена для студентов младших курсов Санкт-Петербургской государственной
академии аэрокосмического приборостроения и знакомит их с графическими
средствами языка Turbo-Pascal 6.0/7.0.
Программа содержит семь разделов для
изучения:
1) Программирование графических режимов.
2) Управление курсором и полем рисования.
3) Формирование прямолинейных монохромных
изображений.
4) Управление цветом и стилем изображений.
5) Программирование цветных криволинейных
изображений.
6) Формирование графических текстов.
7) Программирование озвученных динамических
сцен.
Программа позволяет индивидуально, в удобном
для каждого обучаемого темпе , изучать работу с компьютером в графическом
режиме. Изучаемый материал представлен в программе наглядно, теоретический
материал сопровожден необходимыми иллюстрациями, что делает его более понятным.
Предусмотрена возможность повторного изучения материала. В процессе обучения
производится контроль приобретенных знаний в виде Контрольных вопросов. При
ответах на контрольные вопросы студенту выставляются оценки, которые
регистрируются и могут быть выведены на экран в любой момент работы с
программой. Имеется возможность разъяснения студенту его ошибок в случае
наличия таковых. После ответа на каждый вопрос на экран выводится комментарий,
содержащий оценку в форме "правильно/неправильно" и в случае неверного
ответа пояснения сущности ошибки. Продолжительность сеанса работы программы
составляет 45 минут.
Программа написана на языке Turbo-Pascal 7.0 и требует для
использования наличия персонального компьютера типа IBM, монитора типа EGA с графическим выводом 640x350 пиксел, 16 регистрами
палитры.
Разработанная программа полностью соответствует требованиям Технического
задания.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Брусенцов Н.П., Маслов С.П., Х.Рамиль Альварес Микрокомпьютерная
система обучения "Наставник". М.: Наука , 1990. 223 с.
2. Демушкин А7С7, КирилловА.И., Сливин Н.А., Чубров Е.В., Кривошеев А.О.,
Фомин С.С. Компьютерные обучающие программы // Информатика и образование, 1995.
N 3.
3. Казаков В.Г., Дорошквин А.А., Задорожный П.М., Князев Б.А. Лекционная
мультимедиа аудитория // Информатика и образование, 1995. N4.
4. Фаронов В.В. турбо паскаль: в 3 т. М.: Учебно-инженерный центр
"МВТУ-ФЕСТО ДИДАКТИК", 1992.Т.1: Основы турбо Паскаля. 286 с.
5. Епанешников A.M., Епанешников
В.А. Программирование в среде TURBO-PASCAL 7.O.M.: "ДИАЛОГ-МИФИ", 1995. 282 С.
6. Петров В.И. Графические средства алгоритмического языка TURBO-PASCAL : Методические указания к
выполнению лабораторных работ N 1,2 / ЛИАП.СПб., 1992. 33 с.
7. Петров В.И. Графические средства алгоритмического языка TURBO-PASCAL : Методические указания к
выполнению лабораторных работ N 3,4,5 / ЛИАП.СПб., 1992. 43 с.
8. Технико-экономическое обоснование исследовательских и инженерных
решений в дипломных проектах и работах: учебное пособие / под редакцией Минько
Э.В., Покровского А.В. /Свердловск Уральский университет, 1990. 144 с.
9. Евдокимов В.И. Охрана труда и окружающей среды: Методические указания
по дипломному проектированию / ЛИАП.Л., 1989. 34 с.
10. Евдокимов В.И., Козаченко В.И., Нейман Л.А., Румянцев В.В. Охрана
труда в приборо- и радиоаппаратостроении: Учебное пособие / СПГУАП. СПб., 1993.
81 с.
ПРИЛОЖЕИЕ 1
Текст программы
program GRAPHIC; {главная программа "Графика"}
uses Crt, Graph,
Dos, Strings, MYBOOK, RAZDEL1, RAZDEL2, RAZDEL3,
RAZDEL4 , RAZDEL5 , RAZDEL6 , RAZDEL7 ;
Type
Dlina=string[6Q];
var Gd,Gm:
integer;
Regime: byte;
NOMER3 , NOMER4 , NOMER5 , NOMER6 , NOMER7 : integer ;
Ball3 :array[l. .2} of integer; {переменные вывода
результатов} ball4 :array[l. .2] of integer; { работы по разделам}
ball5 :array[l. .2] of Integer;
ball6 :array[l. .2] of integer; ball7:array[l. .2] of integer; Itog :array[l, .2] of integer; {переменная накопления
результатов работы за сеанс}
tog:array[l. .2] of integer; {переменная вывода результатов
работы за сеанс}
К:аггау[1. .2] of integer; {переменная контролирующая число
обращений к процедурам рабочих модулей }
Dh: Char; {переменная для принятия символа с клавиатуры}
procedure
Windol; {введение }
Type Ann=record
PPl:char;
РР2:array [0. .69] of char;
end;
var FF:file of
Ann;
A: Ann;
St
:string[68];
label 1;
begin
Assign (FF, 'VEDEN. pas' ); {связь с файлом текста
введения}
{SI-}
Reset(FF);
{SI + }
IF lOResulto 0 then Writeln ('Heт файла VEDEN1);
ClearDevice;
OKNO; {процедура оформления экрана}
For N:=0 to 31 do {цикл вывода текста введения }
begin
Read(FF,A);
St:=StrPas(A.PP2);
case A.PP1 of {проверка наличия иллюстрации и их вывод}
‘ ‘: OutTextXY( 20 , 10*N+10 , St ) ;
‘0‘ : GoTo 1 ;
end;
end;
1:readkey;
Close(FF);
end;
procedure
Cursor(Flag:boolean); {Если Flag=True, то курсор видим;}
{ если Flag=False,TO невидим}
const
sizeCursor:word=0;
var Red:registers;
begin
with Red do
begin
if Flag then
begin
CX:=SizeCursor; {Восстановим старый размер курсора}
end
else
begin
BH:=0; {0-я страница дисплея}
АН:=03; {функция чтения размера и позиции курсора}
Intr($10,Red);
SizeCursor:=CX;{сохраняем размер курсора}
СН:=$20; {делаем курсор невидимым}
end;
АН:=01; {функция установки размера курсора}
Intr($10,Red);
end;
end;
procedure
SVETFON(C,F:byte); {установка цвета и фона}
begin
TextColor(C);
TextBackground(F)
end;
procedure
VERTIKALNOE_MENU(Kl,K2,Kp:byte;SS1,SS2,SS3,SS4,SS5,SS6,
SS7,SS8,SS9:dlina;Var Result:byte);
{процедура
создания окна меню}
Label Met;
Const Kr=9;
Var M:array[l..Kr]
of string[60];
I,T:byte;
Ch:char;
Fl:boolean;
begin
Cursor(False);
Fl:=True;
M[1]:=SS1;M[2]:=SS2;M[3]:=SS3;M[4]:=SS4;M[5]:=SS5;M[6]:=SS6;
M[7]:=SS7;M[8]:=SS8;M[9]:=SS9;
T:=Length(M[I]);
for I:=2 to Kp do
if
Length(M{I])>T then T:=Length(M[I]);
for l:=l to Kp do
begin
if 1=1 then SVETFON(1,13)
else SVETFON(13,1);
GoToXY(Kl,K2+i);
write(M[I]);
end;
SVETFON(13,1);
I:=l;
while Fl=True do
begin
Ch:=ReadKey;
if Ch=#13 then
Fl:=False;
if(Ch=#0) and
KeyPressed then
begin
Ch:=ReadKey;
case Ch of
#80: begin
GoToXY(Kl,K2+i);
SVETFON(13,1);
write(M[I]);
if i=(Kp+l) then
begin
I:=l;
SVETFON(3,l);
GoToXY(Kl,K2+l);
SVETFON(1, 13);
write(M[I]);
SVETFON(13,1);
goto Met;
end;
GoToXY(Kl,K2+I);
SVETFON(1,13);
write(M[I]);
SVETFON(13,1);
end;
#72: begin
if 1=1 then goto Met;
GoToXY(Kl,K2+I);
SVETFON(1371);
write(M[I]);
i:=I-1;
GoToXY(Kl,K2+I);
SVETFON(1,13);
write(M[I])
end
end;
Met:
end ;
end;
Result :=I;
SVETFON(13,1);
Cursor(True) ;
end;
begin {Начало основной программы}
GraphRegim;
SetTextStyle(0,0,5);
SetColor(12);
OutTextXY(40,50, 'Т Р А Ф И К А');
SetTextStyle(0,0,1);
SetColor(15);
OutTextXY(100,225,'Программа для обучения работе в графическом
режиме’);
OutTextXY(170,245,'Разработал Черноткач Р. И.');
OutTextXY(232,285,'СПГУАП');
OutTextXY{240,305,'2002’);
readkey;
SetTextStyle(0,0,l);
Windo1;
CloseGraph;
NOMER3:=0; {переменные, контролирующие доступ к разделам}
NOMER4:=0; {{ не более двух раз) за сеанс}
NOMER5:=0;
NOMER6:=0;
NOMER7:=0;
К[1]:=0;
К[2]:=0;
while True do
begin
TextBackground(3);
ClrScr;
Cursor(False);
GoToXY(15,5);
TextColor(l);
write('Какой раздел Вы хотели бы изучить?');
GoToXY(10,10);
VERTIKALNOE_MENU(10,10,9,
' Программирование графических режимов
' Управление курсором и полем рисования
' Формирование прямоллинейньгх монохромных изображений
' Управление цветим и стилем изображений
' Программирование цветных криволинейных изображений
' Формирование графических текстов
' Программирование озвученных динамических сцен
' Результаты Вашей работы
' Конец работы
Regime);
case Regime of
1:RAZDEL10;
2:RAZDEL20;
3:begin
NOMER3:=NOMER3+1;
If NOMER3<3 then
begin
RAZDEL30;
ball3[NOMER3]:=REZ3;
Itog[nomer3]:=Itog[nomer3]+ball3[nomer3];
K[nomer3]:=K[nomer3]+l;
end
end;
4: begin
NOMER4:=NOMER4+1;
If NOMER4<3 then
begin
RAZDEL40;
ball4[nomer4]:=rez4;
Itog[nomer4]:=Itog[nomer4]+ball4[nomer4];
K[nomer4]:=K[nomer4]+l;
end
end;
5:begin
NOMER5:=NOMER5+1;
If NOMER5<3 then
begin
RAZDEL50;
Ьа115[погаег5]:=rez5;
Itog[nomer5]:=Itog[nomer5]+ball5[nomer5];
K[nomer5]:=K[nomer5]+1;
end;
end;
6:begin
NOMER6:=NOMER6+1;
If NOMER6<3 then
begin
RAZDEL60;
ball6[nomer6]:=rez6; Itog[nomer6]:=Itog[nomer6]+ball6[nomer6]; K[nomer6]:=K[nomer6]+l;
end;
end
7:begin
NOMER7:=NOMER7+1;
IF NOMER7<3 then
begin
RAZDEL70;
ball7[nomer7]:=rez7;
Itog[nomer7]:=Itog[nomer7]+ball7[nomer7];
end;
end;
8:begin {вывод результатов работы}
If K[l]<>0 then
tog[l3:=Round(Itog[l]/K[1);
If K[2]<>0 then
tog[2]:=Round(Itog[2]/K[2]);
TextBackground(1);
ClrScr;
TextColor(12);
writeln;
Write('РЕЗУЛЬТАТЫ ВАШЕЙ РАБОТЫ’);
writeln;
writeln('l попытка 2 попытка':80);
writeln;
wtiteln('ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ
ИЗОБРАЖЕНИЙ');
writeln;
writeln(' УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЙ1);
writeln;
writeln('ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ
ИЗОБРАЖЕНИЙ');
writeln;
writeln(' ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ');
writeln;
writeln(' ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ
СЦЕН');
writeln;
writeln;
writeln(' ОЦЕНКА РАБОТЫ ЗА СЕАНС');
GotoXY(64,6); writeln(ball3[1]);
GoToXY(75,6); writeln(ball3[2]);
GoToXY(64,8); writeln(ball4[l]);
GoToXY(75,8); writeln(ball4[2]);
GoToXY(64,10); writeln(ball5[l]);
GoToXY(75,10); writeln(ball5[2]);
GoToXY(64,12); writeln(ball6[l]);
GoToXY(75,12); writeln(bal16[2]);
GoToXY(64,14); writeln(bal17[l]);
GoToXY(75,14); writeln(ball7[23)
GoToXY(64,18); writeln(tog[l]);
GoToXY(75,18); writeln(tog[2]);
readkey;
end;
9:begin
GraphRegim;
OKNO;
SetTextStyle{0,0,4);
SetColor(4);
OutTextXY(150,80,'Bы хотите');
OutTextXY(60,120,'закончить работу')
OutTextXY(100,160,'с программой?');
OutTextXY(230,280,'Y/N');
Dh:=ReadKey;
If (Dh='y') or (Dh='н') then
begin
Cursor(True);
ClrScr;
Halt
end
else
CloseGraph;
end;
end;
end;
CloseGraph;
end.
{$A+, B-, D+, E+,
F-, G-, I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
Unit RAZDEL1;
interface
uses Crt, Graph,
Dos, Strings, MYBOOK;
type An=record
P1:Char;
P2:array[0..69] of Char;
end;
var Fl:file of An ;
A: An;
Gd,Gm,Y,N:integer;
St:string[68];
procedure
RAZDEL10; {Обеспечение работы с разделом
"Программиро вание графических режимов"}
implementation
procedure
RAZDEL10;
Label 1;
begin
GraphRegim;
Assign(Fl,'RAZTEX1.pas');
{SI-}
Reset (Fl);
{SI+}
If lOResult <>0 then Writeln ('Нет файла RAZTEX1.pas');
Repeat;
ClearDevice;
OKNO;
Y:=10;
For N:=0 to 31 do
begin
Read(Fl,A);
St:=StrPas(A.P2);
case A.P1 of
' ':OutTextXY(20,Y*N+10,St);
'*':begin
SetColor{4);
OutTextXY(20,Y*N+10,St);
SetColor(l);
end;
'0':GoTo 1;
end;
end;
1: readkey;
until A.P1='O';
Close(Fl);
CloseGraph;
end;
begin
end.
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M
16384,0,655360}
Unit RAZDEL2;
interface
uses
Crt,Graph,Dos,Strings,MYBOOK;
type An=record
P1:Char;
P2:array[0..69] of
Char;
end;
var F2:file of An
;
A:
An;
Gd,Gm,X,Y,N:integer;
St:string[68];
procedure RAZDEL20; {Обеспечение работы с
разделом "Управление
курсором и полем
рисования"}
implementation
procedure
RAZDEL20;
Label
1;
begin
GraphRegim;
Assign(F2,'RAZTEX2.pas');
{SI-}
Reset(F2);
{SI+}
If IOResult <> 0 then Writeln ('Нет
файла RAZTEX2.pas');
repeat
ClearDevice;
OKNO;
Y:=10;
For N:=0 to 31
do
begin
Read(F2,A);
St:=StrPas(A.P2);
case A.P1
of
'
':OutTextXY(20,Y*N+10,St);
'*':begin
SetColor(4);
OutTextXY(20,Y*N+10,St);
SetColor(1);
end;
'0':GoTo
1;
end;
end;
1: readkey;
until
A.P1='0';
Close(F2);
CloseGraph;
end;
begin
end.
Unit
RAZDEL3;
interface
uses
Crt,Graph,Dos,Strings,MYBOOK;
type An=record {Теоретическая часть
}
P1:Char; {переменная поля флагов:
конец файла, номер
иллюстрации, строка,
выделяемая цветом}
P2:array[0..69] of Char; {переменная
поля текста}
end;
type Ant=record {Текст
вопросов}
P1:Char; {переменная поля флагов:
конец файла, конец
вопроса, номер
иллюстрации}
P2:array[0..1] of Char; {переменная
номера вопроса}
P3:array[0..69] of Char; {переменная
поля текста}
end;
type Antr=record { Справки
}
P1:Char; {переменная поля флагов:
конец файла, конец вопроса,
номер
иллюстрации}
P2:array[0..1] of Char; {переменная
поля номера вопроса}
P3:array[0..0] of Char; {переменная
поля флагов: номера
справки,
конца справки}
P4:array[0..69] of Char; {переменная
поля текста}
P5:array[0..2] of Char; {переменная
поля оценки}
end;
var F3:file of An ; {переменные
теоретической части}
A:
An;
St:string[68];
Y,N:integer;
var F32:file of Ant; { переменные
вопросов}
At:Ant;
R1:string[2];
Z1:integer;
S:string[68];
var F33:file of Antr; {переменные
справок}
Atr:Antr;
R2:string[2];
R3:string[1];
Stt:string[68];
R4:string[2];
Z2,Z3,Z4:integer;
CH: Char; {переменная для принятия
символа с клавиатуры}
K,J,I:integer; {переменные
циклов}
M: array[0..3] of integer; {массив для
хранения четырех
выбранных
номеров вопросов}
Code:integer;
var R5:string[1]; {переменные вывода
результатов}
Z5:integer;
REZ3:Longint; {переменная
оценки}
procedure RAZDEL30; {Обеспечение работы с
разделом "Формирование
прямолинейных
монохромных изображений"}
implementation
const Mn:array[1..5] of
PointType=((X:460;Y:30),(X:590;Y:90),
(X:590;Y:120),(X:430;Y:120),(X:460;Y:30));
Mno:array[1..5] of
PointType=((X:460;Y:170),(X:590;Y:230),
(X:590;Y:260),(X:430;Y:260),(X:460;Y:170));
{Константы для формирование
иллюстраций к тексту теории}
const Ww:array[1..5] of
PointType=((X:390;Y:60),(X:510;Y:60),
(X:510;Y:260),(X:390;Y:260),(X:390;Y:60));
WWW:array[1..5] of
PointType=((X:380;Y:50),(X:520;Y:50),
(X:520;Y:270),(X:380;Y:270),(X:380;Y:50));
{Константы для формирования
иллюстраций к тексту вопросов}
procedure
RAZDEL30;
Label
0,1,2,3;
begin
REZ3:=6;
GraphRegim;
Assign(F3,'RAZTEX3.pas'); {Связь с
файлом теста теории}
{SI-}
Reset(F3);
{SI+}
If IOResult <> 0 then Writeln
('Нет файла RAZTEX3.pas');
repeat
OKNO;
Y:=10;
For N:=0 to 31 do {Цикл вывода текста
теории}
begin
Read(F3,A);
типа
string}
case A.P1 of {Иллюстрации к
тексту}
' ':
OutTextXY(20,Y*N+10,St);
'*':
begin
SetColor(4);
OutTextXY(20,Y*N+10,St);
SetColor(1);
end;
'щ':
begin
SetColor(4);
Line(460,120,593,120);
OutTextXY(460,160,'0');
OutTextXY(593,130,'(X,Y)');
SetColor(1);
end;
'2':begin
SetColor(4);
OutTextXY(460,160,'0
dX');
OutTextXY(600,180,'dY');
OutTextXY(550,200,'(dX,dY)');
Line(460,170,593,170);
Line(593,170,593,200);
Line(460,170,593,200);
SetColor(1);
end;
'3':begin
SetColor(4);
OutTextXY(430,245,'(X1,Y1)');
Line(460,260,593,285);
OutTextXY(580,270,'(X2,Y2)');
SetColor(1);
end;
'4':begin
SetBKColor(2);
SetColor(4);
Rectangle(460,40,590,90);
SetColor(1);
end;
'5':begin
SetFillStyle(1,4);
Bar(459,129,591,181);
SetFillStyle(8,5);
SetColor(4);
Bar(460,130,590,180);
SetColor(1);
end;
'6':begin
SetFillStyle(6,5);
SetColor(4);
Bar3D(460,240,590,300,20,true);
SetCOLOR(1);
SetFillStyle(1,15);
SetBKColor(11);
end;
'7':begin
SetBKColor(15);
SetColor(4);
DrawPoly(5,Mn);
SetColor(1);
end;
'8':begin
SetColor(4);
SetFillStyle(11,5);
SetBKColor(15);
FillPoly(5,Mno);
SetColor(1);
SetFillStyle(1,15);
end;
'0':GoTo
0;
end;
end;
0:readkey;
ClearDevice;
OKNO;
until
A.P1='0';
Close(F3);
Assign(F32,'Joing.pas'); {связь с
файлом вопросов}
{SI-}
Reset(F32);
{SI+}
If IOResult<>0 then Writeln('Нет
файла Joing.pas');
Assign(F33,'Iod.pas'); {связь с файлом
справок}
{SI-}
Reset(F33);
{SI+}
If IOResult<>0 then Writeln('Нет
файла Iod.pas');
OKNO1; {заставка
"Контрольные вопросы"}
readkey;
ClearDevice;
Randomize; {Выбор четырех номеров
вопросов}
For J:=0 to 3 do
begin
1:I:=Random(10);
If I=0 then GOTO
1;
For K:=0 to J-1
do
begin
If M[k]=I then GOTO
1;
end;
M[J]:=I;
end;
repeat
OKNO;
begin
Read(F32,At);
R1:=StrPas(At.P2); {Преобразование
ASCIIZ-строки At.P2 в строку
типа
string}
Val(R1,Z1,Code); {Преобразование
символьного представления
номера вопроса в двоичную
форму}
Y:=20;
If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2])
or (Z1=M[3]) then
begin
repeat
S:=StrPas(At.P3); {Преобразование
ASCIIZ-строки At.P3 в строку
типа
string}
OutTextXY(20,Y,S); {Вывод текста
вопроса}
case At.P1 of {иллюстрации к
тексту вопросов}
'1':begin
DrawPoly(5,Ww);
DrawPoly(5,Www);
Bar3D(410,100,470,120,20,true);
Bar3D(410,120,470,250,20,false)
end;
'2':begin
Bar3D(200,250,300,300,30,true);
Bar3D(200,300,300,320,30,true)
end;
'3':begin
Line(380,150,550,190);
Line(380,190,550,190);
Line(380,230,550,190);
OutTextXY(375,140,'(X,Y)');
OutTextXY(375,170,'dY');
OutTextXY(555,190,'(X1,Y1)');
OutTextXY(375,200,'dY');
end;
end;
Y:=Y+10;
Read(F32,At);
until
At.P1='*';
2:OutTextXY(50,330,'ВВЕДИТЕ НОМЕР
ПРАВИЛЬНОГО ОТВЕТА ___');
CH:=ReadKey;
SetColor(4);
OutTextXY(320,325,CH);
SetColor(1);
readkey;
If(CH<>'1') and (CH<>'2')
and (CH<>'3') and (CH<>'4') then
begin
SetFillStyle(1,11);
Bar(318,320,327,340);
GoTo
2;
end
else
repeat
Read(F33,Atr);
R2:=StrPas(Atr.P2); {Преобразование
ASCIIZ-строки Atr.P2 в
строку типа
string }
Val(R2,Z2,Code); {Преобразование
символьного представления
номера вопроса в двоичную
форму}
If Z2=Z1
then
begin
repeat
If Atr.P3=CH
then
begin
Y:=100;
OKNO;
repeat
Stt:=StrPas(Atr.P4);
{Преобразование ASCIIZ-строки Atr.P4
в строку типа
string }
R5:=StrPas(Atr.P5);
{Преобразование ASCIIZ-строки Atr.P5
в строку типа
string }
Val(R5,Z5,Code); {Преобразование
символьного
представления
оценки в двоичную форму}
REZ3:=Round((REZ3+Z5)/2);
{Формирование оценки}
OutTextXY(20,Y,Stt); {Вывод
текста справки}
Y:=Y+10;
case Atr.P1 of
{иллюстрации к тексту справок}
'1':begin
Line(380,150,550,190);
MoveRel(380,190);
Line(380,190,550,190);
LineTo(550,190);
OutTextXY(555,190,'(X1,Y1)');
OutTextXY(370,140,'(X,Y)');
OutTextXY(390,200,'(X,Y+dY)');
end;
'2':begin
GOTOXY(100,190);
LineTo(100,190);
LineRel(30,40);
LineRel(0,80);
end;
'3':begin
GOTOXY(100,190);
LineTo(380,150);
LineRel(30,40);
LineRel(0,80);
end;
end;
Read(F33,Atr);
until
Atr.P3='*';
readkey;
GOTO
3;
end
else Read(F33,Atr);
until
Atr.P1='*';
end
until
Atr.P1='0';
end
else
3:
end;
until At.P1='0';
Close(F32);
Close(F33);
CloseGraph;
end;
begin
end.
Unit
RAZDEL4;
interface
uses Crt,Graph,Dos,Strings,MYBOOK;
type An = record
{Теория}
P1:Char; {Переменная
поля флага : конец файла, номер
иллюстрации}
P2:array[0..69] of char;
{Переменная поля текста}
end;
type Ant=record {Текст
вопросов}
P1:Char; {Переменная
поля флага:конец файла, номер иллюст-
рации,
конец вопроса}
P2:array[0..1] of Char;
{Переменная поля номера вопроса}
P3:array[0..69] of
Char; {Переменная поля текста вопроса}
end;
type Antr=record { Справки
}
P1:Char; {Переменная
поля флага:конец файла, конец вопроса,
номер
иллюстрации}
P2:array[0..1] of
Char; {Переменная поля номера вопроса}
P3:array[0..0] of Char;
{Переменная поля флага: номер справки
и конец справки}
P4:array[0..69] of
Char; {Переменная поля текста справки}
P5:array[0..2] of Char;
{Переменная поля оценки}
end;
var F4: file of An ;
{Переменные теории}
A:An;
N,Y:integer;
St:string[68];
var F32:file of Ant; {
Переменные вопросов}
At:Ant;
R1:string[2];
Z1:integer;
S:string[68];
var F33:file of Antr;
{Переменные справок}
Atr:Antr;
R2:string[2];
R3:string[1];
Stt:string[68];
R4:string[2];
Z2,Z3,Z4:integer;
CH: Char;{Переменная
для принятия символа с клвиатуры}
K,J,I:integer;
{Переменные циклов}
M: array[0..3] of
integer; {Массив для хранения черырех
выбранных номеров вопросов}
Code:integer;
var R5:string[1];
{переменные вывода результатов}
Z5:integer;
REZ4:Longint;
{переменная оценки}
procedure
RAZDEL40;
implementation
procedure
RAZDEL40;
Label
0,1,2,3;
begin
REZ4:=6;
GraphRegim;
Assign(F4,'RAZTEX4.pas');
{Связь с файлом текста теории}
{SI-}
Reset(F4);
{SI+}
If IOResult <> 0 then
Writeln ('Нет файла RAZTEX4.pas');
repeat
ClearDevice;
OKNO;
Y:=10;
For N:=0 to 31 do
{Вывод текста теории}
begin
Read(F4,A);
St:=StrPas(A.P2);
{Преобразование ASCIIZ-строки A.P2 в строку
типа
string}
OutTextXY(20,Y*N+10,St);
case A.P1
of
'*':begin
SetColor(4);
OutTextXY(20,Y*N+10,St);
SetColor(1);
end;
'1':begin
SetFillStyle(1,15);
Bar(350,45,600,340);
SetFillStyle(1,0);
Bar(350,45,600,65);
SetFillStyle(1,1);
Bar(350,65,600,85);
SetFillStyle(1,2);
Bar(350,85,600,105);
SetFillStyle(1,3);
Bar(350,105,600,120);
SetFillStyle(1,4);
Bar(350,120,600,135);
SetFillStyle(1,5);
Bar(350,135,600,150);
SetFillStyle(1,6);
Bar(350,150,600,165);
SetFillStyle(1,7);
Bar(350,165,600,185);
SetFillStyle(1,8);
Bar(350,185,600,200);
SetFillStyle(1,9);
Bar(350,200,600,215);
SetFillStyle(1,10);
Bar(350,215,600,235);
SetFillStyle(1,11);
Bar(350,235,600,255);
SetFillStyle(1,12);
Bar(350,255,600,275);
SetFillStyle(1,13);
Bar(350,275,600,295);
SetFillStyle(1,14);
Bar(350,295,600,315);
SetFillStyle(1,15);
Bar(350,315,600,340);
end;
'2':begin
SetBKColor(15);
SetFillStyle(1,15);
Bar(200,100,600,300);
SetFillStyle(2,2);
Bar(200,100,600,120);
SetFillStyle(3,2);
Bar(200,120,600,145);
Bar(200,145,600,168);
SetFillStyle(5,2);
Bar(200,168,600,190);
SetFillStyle(6,2);
Bar(200,190,600,210);
SetFillStyle(7,2);
Bar(200,210,600,228);
SetFillStyle(8,2);
Bar(200,228,600,246);
SetFillStyle(9,2);
Bar(200,246,600,264);
SetFillStyle(10,2);
Bar(200,264,600,282);
SetFillStyle(11,2);
Bar(200,282,600,300);
SetFillStyle(1,0);
end;
'0':GoTo
0
end;
end;
readkey;
0:until A.P1='0'
;
readkey;
Close(F4);
Assign(F32,'Joi.pas');
{связь с файлом вопросов}
{SI-}
Reset(F32);
{SI+}
If IOResult<>0 then
Writeln('Нет файла Joi.pas');
Assign(F33,'Iodi.pas');
{SI-}
Reset(F33); {связь с
файлом справок}
{SI+}
If IOResult<>0 then
Writeln('Нет файла Iodi.pas');
OKNO1;
{"Контрольные вопросы"}
readkey;
ClearDevice;
Randomize; {Выбор четырех
номеров вопросов}
For J:=0 to 3
do
begin
1:I:=Random(10);
If I=0 then GOTO
1;
For K:=0 to J-1
do
begin
If M[k]=I then GOTO
1;
end;
M[J]:=I;
end;
M[1]:=1;
repeat
OKNO;
begin
Read(F32,At);
R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в
строку типа string}
Val(R1,Z1,Code);
{Преобразование символьного представления
номера
вопроса в двоичную форму}
Y:=20;
If(Z1=M[0]) or (Z1=M[1])
or (Z1=M[2]) or (Z1=M[3]) then
begin
repeat
S:=StrPas(At.P3);
{Преобразование ASCIIZ-строки At.P3 в
строку типа string}
OutTextXY(20,Y,S);
{Вывод текста вопроса}
case At.P1
of
'
':begin
end;
end;
Y:=Y+10;
Read(F32,At);
until
At.P1='*';
OutTextXY(50,330,'ВВЕДИТЕ
НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');
2:CH:=ReadKey;
SetColor(4);
OutTextXY(320,325,CH);
SetColor(1);
readkey;
If(CH<>'1') and
(CH<>'2') and (CH<>'3') and (CH<>'4') then
begin
SetFillStyle(1,11);
Bar(318,320,327,340);
GoTo
2;
end
else
repeat
Read(F33,Atr);
R2:=StrPas(Atr.P2);
{Преобразование ASCIIZ-строки Atr.P2 в
строку типа string}
Val(R2,Z2,Code);
{Преобразование символьного представления
номера
вопроса в двоичную форму}
If Z2=Z1
then
begin
repeat
If Atr.P3=CH then
begin
Y:=100;
OKNO;
repeat
Stt:=StrPas(Atr.P4); {Преобразование ASCIIZ-строки Atr.P4 в
строку типа string}
R5:=StrPas(Atr.P5);
{Преобразование ASCIIZ-строки Atr.P5 в
строку типа string}
Val(R5,Z5,Code);
{Преобразование символьного представления
оценки в двоичную форму}
REZ4:=Round((REZ4+Z5)/2); {Формирование оценки }
OutTextXY(20,Y,Stt);
Y:=Y+10;
case Atr.P1
of
'
':begin
end;
end;
Read(F33,Atr);
until
Atr.P3='*';
readkey;
GOTO
3;
end
else Read(F33,Atr);
until
Atr.P1='*';
end
until
Atr.P1='0';
end
else
3:end;
until
At.P1='0';
Close(F32);
Close(F33);
CloseGraph;
end;
begin
end.
Unit
RAZDEL5;
interface
uses
Crt,Graph,Dos,Strings,MYBOOK;
type An =
record
P1:Char;
P2:array[0..69] of
char;
end;
type Ant=record {Текст
вопросов}
P1:Char;
P2:array[0..1] of
Char;
P3:array[0..69] of
Char;
end;
type Antr=record {
Справки }
P1:Char;
P2:array[0..1] of
Char;
P3:array[0..0] of
Char;
P4:array[0..69] of
Char;
P5:array[0..2] of
Char;
end;
var F5: file of An
;
A:An;
N,Y:integer;
St:string[68];
var F52:file of Ant; {
переменные вопросов}
At:Ant;
R1:string[2];
Z1:integer;
S:string[68];
V:char;
var F53:file of Antr;
{переменные справок}
Atr:Antr;
R2:string[2]; {поле
Ant.P1-номер вопроса}
R3:string[1]; {поле
Ant.P2-номер варианта ответа}
Stt:string[68];{поле
Ant.P3-текст справки}
R4:string[2]; {поле
Ant.P4- оценка}
Z2,Z3,Z4:integer;
CH: Char;
{номер варианта ответа}
K,J,I:integer;
M: array[0..3] of
integer;
Nom:Longint;
Code:integer;
var R5:string[1];
{переменные вывода результатов}
Z5:integer;
REZ5:Longint;
procedure
RAZDEL50;
implementation
procedure
RAZDEL50;
Label
0,1,2,3;
begin
REZ5:=0;
GraphRegim;
Assign(F5,'RAZTEX5.pas');
{SI-}
Reset(F5);
{SI+}
If IOResult <> 0
then Writeln ('Нет файла RAZTEX5.pas');
repeat
ClearDevice;
OKNO;
Y:=10;
For N:=0 to 31
do
begin
Read(F5,A);
St:=StrPas(A.P2);
case A.P1
of
'
':OutTextXY(20,Y*N+10,St);
'*':begin
SetColor(4);
OutTextXY(20,Y*N+10,St);
SetColor(1);
end;
'1':begin
SetColor(4);
Arc(500,150,0,278,30);
OutTextXY(490,140,'(X,Y)');
OutTextXY(500,150,'.');
SetColor(1);
end;
'2':begin
SetColor(4);
Circle(500,300,30);
OutTextXY(475,290,'(X,Y)');
OutTextXY(500,300,'.');
SetColor(1);
end;
'3':begin
SetBKColor(15);
SetColor(4);
Ellipse(500,100,0,278,50,25);
OutTextXY(490,90,'(X,Y)');
OutTextXY(500,100,'.');
SetColor(1);
end;
'4':
begin
SetColor(2);
Ellipse(500,180,10,270,50,30);
Line(500,135,460,225);
SetFillStyle(4,14);
FloodFill(455,180,2);
end;
'5':
begin
SetColor(4);
Ellipse(500,300,0,361,50,30);
FillEllipse(500,300,50,30);
SetFillStyle(1,15);
SetColor(1);
end;
'6':
begin
SetFillStyle(7,13);
PieSlice(500,120,0,120,50);
end;
'7':
begin
SetFillStyle(9,13);
Sector(500,200,0,270,50,30);
SetFillStyle(1,15);
end;
'8':begin
SetFillStyle(1,9);
Bar(250,100,600,200);
SetViewPort(250,100,600,200,true);
FloodFill(260,110,
1);
Randomize;
repeat
PutPixel(Random(GetMaxX),Random(GetMaxY),15);
Delay(15);
until
KeyPressed;
SetFillStyle(1,15);
SetViewPort(5,5,635,345,true);
end;
'9':
begin
Diogramma;
end;
'0':GoTo
0
end;
end;
0:readkey;
until
A.P1='0';
Close(F5);
Assign(F52,'Join.pas');
{связь с файлом вопросов}
{SI-}
Reset(F52);
{SI+}
If IOResult<>0 then
Writeln('Нет файла Join.pas');
Assign(F53,'Iodin.pas');
{SI-}
Reset(F53); {связь с
файлом справок}
{SI+}
If IOResult<>0 then
Writeln('Нет файла Iodin.pas');
OKNO1;
{"Контрольные вопросы"}
readkey;
ClearDevice;
Randomize; {Выбор
четырех номеров вопросов}
For J:=0 to 3
do
begin
1:I:=Random(6);
If I=0 then GOTO
1;
For K:=0 to J-1
do
begin
If M[k]=I then GOTO
1;
end;
M[J]:=I;
end;
repeat
OKNO;
begin
Read(F52,At); {
вывод текста вопросов и справок }
R1:=StrPas(At.P2);
Val(R1,Z1,Code);
Y:=20;
If(Z1=M[0]) or (Z1=M[1])
or (Z1=M[2]) or (Z1=M[3]) then
begin
repeat
S:=StrPas(At.P3);
OutTextXY(20,Y,S);
case At.P1
of
'2':begin
end
end;
Y:=Y+10;
Read(F52,At);
until
At.P1='*';
OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');
2:CH:=ReadKey;
SetColor(4);
OutTextXY(320,325,CH);
SetColor(1);
readkey;
If(CH<>'1') and
(CH<>'2') and (CH<>'3') and (CH<>'4') then
begin
SetFillStyle(1,11);
Bar(318,320,327,340);
GoTo
2;
end
else
repeat
Read(F53,Atr);
R2:=StrPas(Atr.P2);
Val(R2,Z2,Code);
If Z2=Z1
then
begin
repeat
If Atr.P3=CH
then
begin
Y:=100;
OKNO;
Stt:=StrPas(Atr.P4);
R5:=StrPas(Atr.P5); {формирование оценки}
Val(R5,Z5,Code);
REZ5:=Round((REZ5+Z5)/2);
OutTextXY(20,Y,Stt);
Y:=Y+10;
case Atr.P1
of
'1':begin
end;
'0':GoTo
3;
end;
Read(F53,Atr);
until
Atr.P3='*';
readkey;
GOTO
3;
end
else
Read(F53,Atr);
until
Atr.P1='*';
end
until
Atr.P1='0';
end
else
3:
end;
until
At.P1='0';
Close(F52);
Close(F53);
CloseGraph;
end;
begin
end.
Unit
RAZDEL6;
interface
uses
Crt,Graph,Dos,Strings,MYBOOK;
type An = record
{Теория}
P1:Char;
{Переменная поля флага : конец файла, номер
иллюстрации}
P2:array[0..69] of
char; {Переменная поля текста}
end;
type Ant=record {Текст
вопросов}
P1:Char;
{Переменная поля флага:конец файла, номер иллюст-
рации,
конец вопроса}
P2:array[0..1] of
Char; {Переменная поля номера вопроса}
P3:array[0..69] of
Char; {Переменная поля текста вопроса}
end;
type Antr=record { Справки
}
P1:Char; {Переменная
поля флага:конец файла, конец вопроса,
номер
иллюстрации}
P2:array[0..1] of
Char; {Переменная поля номера вопроса}
P3:array[0..0] of
Char; {Переменная поля флага: номер справки
и
конец справки}
P4:array[0..69] of
Char; {Переменная поля текста справки}
P5:array[0..2] of
Char; {Переменная поля оценки}
end;
var F6: file of An ;
{Переменные теории}
A:An;
Y,N,T1,T2,T3,T4:integer;
St:string[68];
var F62:file of Ant; {
переменные вопросов}
At:Ant;
R1:string[2];
Z1:integer;
S:string[68];
var F63:file of Antr;
{Переменные справок}
Atr:Antr;
R2:string[2];
R3:string[1];
Stt:string[68];
R4:string[2];
Z2,Z3,Z4:integer;
CH: Char;{Переменная
для принятия символа с клвиатуры}
K,J,I:integer;
{Переменные циклов}
M: array[0..3] of
integer; {Массив для хранения черырех
выбранных номеров вопросов}
Code:integer;
var R5:string[1];
{переменные вывода результатов}
Z5:integer;
REZ6:Longint;
{переменная оценки}
procedure RAZDEL60;
{Обеспечение работы раздела "Формирование
графических
текстов}
implementation
procedure
RAZDEL60;
Label
0,1,2,3;
begin
REZ6:=6;
GraphRegim;
Assign(F6,'RAZTEX6.pas');
{SI-}
Reset(F6);
{SI+}
If IOResult <> 0
then Writeln ('Нет файла RAZTEX6.pas');
repeat
ClearDevice;
OKNO;
For N:=0 to 31
do
begin
Read(F6,A);
St:=StrPas(A.P2);
{Преобразование ASCIIZ-строки A.P2 в строку
типа
string}
case A.P1
of
'
':OutTextXY(20,10*N+10,St);
'*':begin
SetColor(4);
OutTextXY(20,10*N+10,St);
SetColor(1);
end;
'1':begin
SetFillStyle(1,1);
Bar(10,30,630,338);
SetColor(15);
SetTextStyle(2,0,1);
OuttextXY(50,50,'TriplexFont, HorizDir, 15');
SetTextStyle(1,0,3);
SetColor(12);
OutTextXY(50,100,'DefaultFont, HorizDir, 12') ;
SetTextStyle(3,0,4);
SetColor(13);
OutTextXY(50,160,
'SmallFont, HorizDir, 13');
SetTextStyle(4,0,5);
SetColor(10);
OutTextXY(50,220,'SanSerifFont, HorizDir, 10');
SetTextStyle(0,0,3);
SetColor(14);
OutTextXY(50,300,'GothicFont, HorizDir, 14');
SetTextStyle(0,1,2);
SetColor(14);
OutTextXY(30,30,'DefaultFont,VertDir');
SetTextStyle(0,0,1);
SetColor(1);
end;
'2':begin
SetColor(4);
SetTextStyle(1,0,1);
SetUserCharSize(1,1,1,1);
OutTextXY(20,120,'Turbo-Pascal 7.0');
SetUserCharSize(3,2,3,2);
OutTextXY(20,160,'Turbo-Pascal 7.0');
SetUserCharSize(2,1,2,1);
OutTextXY(20,230,'Turbo-Pascal 7.0');
SetTextStyle(0,0,1);
SetColor(1);
end;
'3':begin
T1:=InstallUserFont('Goth');
T2:=InstallUserFont('sans');
T3:=InstallUserFont('trip');
T4:=InstallUserFont('bold');
If
GraphResult<grOK then
begin
OutTextXY(40,180,'Ошибка инсталляции');
readkey;
end;
SetFillStyle(1,1);
Bar(10,30,630,335);
SetTextStyle(T1,0,4);
SetColor(13);
OutTextXY(100,60,'Goth.chr,
HorizDir') ;
SetTextStyle(T2,0,4);
SetColor(10);
OuttextXY(100,110,'Sanse, HorizDir');
SetTextStyle(T3,0,4);
SetColor(4);
OutTextXY(100,170, 'Trip, HorizDir');
SetTextStyle(T4,0,4);
SetColor(14);
OutTextXY(100,230,'Bold, HorizDir');
SetTextStyle(0,1,2);
SetColor(15);
OutTextXY(45,35,'Goth.chr, VertDir');
SetTextStyle(0,0,1);
SetColor(1);
end;
'#':GoTo
0;
'0':GoTo
0
end;
end;
0:readkey;
until
A.P1='0';
Close(F6);
Assign(F62,'Jois.pas');
{связь с файлом вопросов}
{SI-}
Reset(F62);
{SI+}
If IOResult<>0 then
OutTextXY(50,100,'Нет файла Jois.pas');
Assign(F63,'Iodis.pas');
{SI-}
Reset(F63); {связь с
файлом справок}
{SI+}
If IOResult<>0 then
Writeln('Нет файла Iodis.pas');
OKNO1;
{"Контрольные вопросы"}
readkey;
ClearDevice;
Randomize; {Выбор
четырех номеров вопросов}
For J:=0 to 3 do
begin
1:I:=Random(10);
If I=0 then GOTO
1;
For K:=0 to J-1
do
begin
If M[k]=I then GOTO
1;
end;
M[J]:=I;
end;
M[1]:=1;
repeat
OKNO;
begin
Read(F62,At);
R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в
строку типа string}
Val(R1,Z1,Code);
{Преобразование символьного представления
номера вопроса в двоичную форму}
Y:=20;
If(Z1=M[0]) or (Z1=M[1])
or (Z1=M[2]) or (Z1=M[3]) then
begin
repeat
S:=StrPas(At.P3);
{Преобразование ASCIIZ-строки At.P3 в
строку типа string}
OutTextXY(20,Y,S);
{Вывод текста вопроса}
case At.P1
of
'
':begin
end;
end;
Y:=Y+10;
Read(F62,At);
until
At.P1='*';
OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');
2:CH:=ReadKey;
SetColor(4);
OutTextXY(320,325,CH);
SetColor(1);
readkey;
If(CH<>'1') and
(CH<>'2') and (CH<>'3') and (CH<>'4') then
begin
SetFillStyle(1,11);
Bar(318,320,327,340);
GoTo
2;
end
else
repeat
Read(F63,Atr);
R2:=StrPas(Atr.P2);
{Преобразование ASCIIZ-строки Atr.P2 в
строку типа string}
Val(R2,Z2,Code);
{Преобразование символьного представления
номера вопроса в двоичную форму}
If Z2=Z1
then
begin
repeat
If Atr.P3=CH
then
begin
Y:=100;
OKNO;
repeat
Stt:=StrPas(Atr.P4); {Преобразование ASCIIZ-строки Atr.P4
строку типа string}
R5:=StrPas(Atr.P5);
{Преобразование ASCIIZ-строки Atr.P5 в
строку типа string}
Val(R5,Z5,Code);
{Преобразование символьного представления
оценки в двоичную форму}
REZ6:=Round((REZ6+Z5)/2); {Формирование оценки }
OutTextXY(20,Y,Stt);
Y:=Y+10;
case Atr.P1
of
'
':begin
end;
end;
Read(F63,Atr);
until Atr.P3='*';
readkey;
GOTO
3;
end
else
Read(F63,Atr);
until
Atr.P1='*';
end
until
Atr.P1='0';
end
else
3:end;
until At.P1='0';
Close(F62);
Close(F63);
CloseGraph;
end;
begin
end.
Unit
RAZDEL7;
interface
uses
Crt,Graph,Dos,Strings,MYBOOK;
type An = record
{Теория}
P1:Char;
{Переменная поля флага : конец файла, номер
иллюстрации}
P2:array[0..69]
of char; {Переменная поля текста}
end;
type Ant=record
{Текст вопросов}
P1:Char;
{Переменная поля флага:конец файла, номер иллюст-
рации, конец вопроса}
P2:array[0..1]
of Char; {Переменная поля номера вопроса}
P3:array[0..69]
of Char; {Переменная поля текста вопроса}
end;
type Antr=record {
Справки }
P1:Char;
{Переменная поля флага:конец файла, конец вопроса,
номер
иллюстрации}
P2:array[0..1]
of Char; {Переменная поля номера вопроса}
P3:array[0..0]
of Char; {Переменная поля флага: номер справки
и конец справки}
P4:array[0..69]
of Char; {Переменная поля текста справки}
P5:array[0..2]
of Char; {Переменная поля оценки}
end;
var F7: file of An ;
{Переменные теории}
A:An;
N,Y,T:integer;
St:string[68];
var F72:file of Ant;
{ Переменные вопросов}
At:Ant;
R1:string[2];
Z1:integer;
S:string[68];
var F73:file of
Antr; {Переменные справок}
Atr:Antr;
R2:string[2];
R3:string[1];
Stt:string[68];
R4:string[2];
Z2,Z3,Z4:integer;
CH:
Char;{Переменная для принятия символа с клвиатуры}
K,J,I:integer;
{Переменные циклов}
M: array[0..3] of
integer; {Массив для хранения черырех
выбранных
номеров вопросов}
Code:integer;
var R5:string[1];
{переменные вывода результатов}
Z5:integer;
REZ7:Longint;
{переменная оценки}
var
Size:word;
pt:pointer;
u,Nn,xt,yt:integer;
procedure
RAZDEL70;
implementation
procedure
RAZDEL70;
Label
0,1,2,3;
begin
REZ7:=6;
GraphRegim;
Assign(F7,'RAZTEX7.pas'); {связь с файлом теории}
{SI-}
Reset(F7);
{SI+}
If IOResult <>
0 then Writeln ('Нет файла RAZTEX7.pas');
repeat
OKNO;
For N:=0 to 32
do
begin
Read(F7,A);
St:=StrPas(A.P2); {Преобразование ASCIIZ-строки A.P2 в строку
типа string}
case A.P1
of
' ':OutTextXY(20,10*N+10,St);
'*':begin
SetColor(4);
OutTextXY(20,10*N+10,St);
SetColor(1);
end;
'1':begin
For Nn:=0 to
3 do
begin
GetMem(pt,ImageSize(0,200,50,250));
GetImage(0,200,50,250,pt^);
u:=0;
while
u<(GetMaxX) do
begin
PutImage(u-1,150,pt^,1);
u:=u+8;
PutImage(u-1,150,pt^,1);
end;
Dispose(pt);
end;
end;
'2':begin
SetViewPort(10,50,630,330,true);
SetBKColor(0);
SetViewPort(20,60,620,320,true);
ClearViewPort;
SetBKColor(14); Sound(880); Delay(200); NoSound;
SetBKColor(12); Sound(698); Delay(200); NoSound;
SetBKColor(14); Sound(880); Delay(200); NoSound;
SetBKColor(12); Sound(698); Delay(200); NoSound;
SetBKColor(10);
Sound(934); Delay(200); NoSound;
SetBKColor(14); Sound(880); Delay(200); NoSound;
SetBKColor(13); Sound(784); Delay(400); NoSound;
SetBKColor(1); Sound(523); Delay(200); NoSound;
SetBKColor(9); Sound(523); Delay(200); NoSound;
SetBKColor(1); Sound(523); Delay(200); NoSound;
SetBKColor(2); Sound(587); Delay(100); NoSound;
SetBKColor(5); Sound(659); Delay(100); NoSound;
SetBKColor(4); Sound(699); Delay(200); NoSound;
SetBKColor(3); Sound(699); Delay(200); NoSound;
SetBKColor(4);
Sound(699); Delay(200); NoSound;
Delay(600);
SetViewPort(5,5,635,335,true);
SetBKColor(14);
ClearDevice;
OKNO;
End;
'#':GoTo
0;
'0':GoTo
0;
end;
end;
0:readkey;
until A.P1='0'
;
Close(F7);
Assign(F72,'Jos.pas'); {связь с файлом вопросов}
{SI-}
Reset(F72);
{SI+}
If IOResult<>0
then Writeln('Нет файла Jos.pas');
Assign(F73,'Ios.pas');
{SI-}
Reset(F73);
{связь с файлом справок}
{SI+}
If IOResult<>0
then Writeln('Нет файла Ios.pas');
OKNO1;
{"Контрольные вопросы"}
readkey;
ClearDevice;
Randomize;
{Выбор четырех номеров вопросов}
For J:=0 to 3
do
begin
1:I:=Random(7);
If I=0 then GOTO
1;
For K:=0 to J-1
do
begin
If M[k]=I then
GOTO 1;
end;
M[J]:=I;
end;
repeat
OKNO;
begin
Read(F72,At);
R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в
строку типа string}
Val(R1,Z1,Code);
{Преобразование символьного представления
номера
вопроса в двоичную форму}
Y:=20;
If(Z1=M[0]) or
(Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then
begin
repeat
S:=StrPas(At.P3);
{Преобразование ASCIIZ-строки At.P3 в
строку типа string}
OutTextXY(20,Y,S); {Вывод текста вопроса}
case At.P1
of
'
':begin
end;
end;
Y:=Y+10;
Read(F72,At);
until
At.P1='*';
OutTextXY(50,320,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');
2:CH:=ReadKey;
SetColor(4);
OutTextXY(320,310,CH);
SetColor(1);
readkey;
If(CH<>'1')
and (CH<>'2') and (CH<>'3') and (CH<>'4') then
begin
SetFillStyle(1,11);
Bar(318,290,327,320);
GoTo
2;
end
else
repeat
Read(F73,Atr);
R2:=StrPas(Atr.P2);
{Преобразование ASCIIZ-строки Atr.P2 в
строку типа string}
Val(R2,Z2,Code); {Преобразование символьного представления
номера вопроса в двоичную форму}
If Z2=Z1
then
begin
repeat
If Atr.P3=CH
then
begin
Y:=100;
OKNO;
repeat
Stt:=StrPas(Atr.P4); {Преобразование ASCIIZ-строки Atr.P4 в
строку типа string}
R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5 в
строку
типа string}
Val(R5,Z5,Code); {Преобразование символьного представления
оценки в двоичную форму}
REZ7:=Round((REZ7+Z5)/2); {Формирование оценки }
OutTextXY(20,Y,Stt);
Y:=Y+10;
case Atr.P1
of
'
':begin
end;
end;
Read(F73,Atr);
until
Atr.P3='*';
readkey;
GOTO
3;
end
else
Read(F73,Atr);
until
Atr.P1='*';
end
until
Atr.P1='0';
end
else
3:end;
until
At.P1='0';
Close(F72);
Close(F73);
CloseGraph;
end;
begin
end.
unit
MYBOOK;
interface
uses
Graph,Crt,Strings,Dos;
Type Dlina=string[10];
var
Ch:char;
Regime:byte;
c,Gd,Gm,i,x1,x2,y1,y2:integer;
ArcCoords:ArcCoordsType;
StAngle,dAngle,KRadius:word;
const OK:array[1..11] of
PointType= ((X:0;Y:0),(X:640;Y:0),
(X:640;Y:350),
(X:0;Y:350),(X:0;Y:8),(X:5;Y:8),
(X:5;Y:345),(X:635;Y:345),(X:635;Y:5),(X:0;Y:5),
(X:0;Y:0));
procedure
Diogramma;
procedure
OKNO;
procedure
OKNO1;
procedure
GraphRegim;
implementation
procedure
OKNO;
begin
SetColor(14);
DrawPoly(11,OK);
SetFillStyle(1,14);
FloodFill(635,2,14);
SetFillStyle(1,11);
Bar(6,6,634,344);
SetColor(1);
end;
procedure
OKNO1;
const OK:array[1..11] of
PointType= ((X:0;Y:0),(X:640;Y:0),
(X:640;Y:350),
(X:0;Y:350),(X:0;Y:8),(X:5;Y:8),
(X:5;Y:345),
(X:635;Y:345),(X:635;Y:5),(X:0;Y:5),
(X:0;Y:0));
begin
SetColor(14);
DrawPoly(11,OK);
SetFillStyle(1,14);
FloodFill(635,2,14);
SetFillStyle(1,11);
Bar(6,6,634,344);
SetColor(4);
SetTextStyle(0,0,6);
OutTextXY(50,100,'Контрольные');
OutTextXY(140,150,'вопросы');
SetTextStyle(0,0,1);
SetColor(1);
end;
procedure
Diogramma;
begin
SetViewPort(0,0,GetMaxX,GetMaxY,true);
SetColor(11);
SetLineStyle(0,0,3);
SetFillStyle(1,13);
PieSlice(170,210,0,359,120);
SetFillStyle(9,2);
PieSlice(170,210,0,30,120);
SetFillStyle(1,3);
Sector(170,210,0,359,80,120);
SetFillStyle(11,5);
Sector(170,210,0,270,80,120);
SetFillStyle(1,15);
Circle(480,210,120);
FloodFill(480,210,11);
StAngle:=0;
dAngle:=360 Div 16;
while(StAngle+dAngle)<360 do
begin
c:=random(14);
SetColor(c);
Arc(535,210,StAngle,StAngle+dAngle,40);
GetArcCoords(ArcCoords);
with ArcCoords
do
begin
KRadius:=Round(SQRT(SQR(Xend-600)+SQR(Yend-210)));
Circle(Xend,Yend,KRadius);
setfillstyle(1,c);
floodfill(xend-kradius+5,yend,c);
end;
StAngle:=StAngle+dAngle;
end;
end;
procedure
GraphRegim;
var
Gd,Gm:integer;
begin
Gd:=Detect;
InitGraph(Gd,Gm,'');
If GraphResult<>grOK
then Halt(1);
end;
begin
end.
Приложение 2
База данных
Для работы с
настоящей программой Вам необходимо знание языка
TURBO-PASCAL 7.0,
интегрированной среды, персонального компьютера
IBM PC.
Расширенный
алгоритмический язык TURBO-PASCAL7.0 в качестве гра-
фических средств
соддержит в арсенале два стандартных модуля:
Grt и Graph.
Модуль Grt
содержит процедуры и функции следующего назначения:
1.Процедуры задания режимов работы.
2.Полцедуры
управления цветом.
3.Процедуры и функции работы с экраном.
4.Функции работы с клавиатурой.
5.Процедуры управления звуком и др.
Процедуры
и функции модуля Graph имеют назначение:
1.Управление графическим режимом.
2.Управление экраном, окном, страницей.
3.Управление цветом и палитрой.
4.Работа с точками и линиями.
5.Построение
различных фигур.
6.Работа с текстом.
7.Обмен с памятью.
В настоящей
программе они скомпанованы для изучения в следующие
разделы:
1.Программирование графических режимов.
2.Управление курсором и полем рисования.
3.Формирование прямолинейных монохромных изображений
4.Управление цветом и стилем изображений.
5.Программирование цветных криволинейных изображений
6.Формирование графических текстов.
7.Программирование озвученных динамических сцен.
Первые два
раздела являются справочными, а остальные разделы
0
ПРОГРАММИРОВАНИЕ
ГРАФИЧЕСКИХ РЕЖИМОВ
Состав,
назначение и взаимное положение операторов управления
графическими
режимами в языке TURBO-PASCAL удобно рассматривать в
контексте структуры
характерной графической программы:
---------- program
<идентификатор> - заголовок программы.
I uses
Graph - используемые модули.
I
{Действия в текстовом режиме}.
I ------
InitGraph - инициализация графических средств
I I
{Действия в графическом режиме " по умолчанию".
I I
SetGraphMode - изменение графического режима.
I I
{Действия в новом графическом режиме}.
I I I--
RestoreCrtMode - временный переход в текстовому режиму.
I I I
{Действия в текстовом режиме}.
I I I->
SetGraphMode - возврат в графический режим.
I I
{Действия в графическом режиме}.
I I----->
CloseGraph
I
{Действия в текстовом режиме}.
I--------> end.
- завершение программы.
* proсedure InitGraph(var
GraphDriver:integer;
*
var GraphMode:integer;
*
DriverPath:string);
Инициализирует
графическую систему, устанавливает графический
режим, устанавливает
исходные значения текущего указателя, палитры,
цвета и т.д..
ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ
GraphDriver -
переменная, в которую необходимо записать код
требуемого графического драйвера или нуль, если
требуется автоматическое определение драйвера.
GraphMode -
переменная, в которую процедура помещает код
графического режима.
DriverPath -
строка, содержащая путь к драйверу (если строка
пустая, считается, что драйвер находится в текущем
каталоге).
В случае
аварийной ситуации процедура устанавливает код ошибки:
-2 - нет
графического адаптера;
-3 - нет
драйвера устройства;
-4 -
ошибка в драйвере;
-5 - нет
памяти для загрузки драйвера;
-10 -
недопустимый режим для выбранного драйвера.
* procedure
CloseGraph(без параметров);
Восстанавливает
текстовый режим работы дисплея,бывший до вызова
графической системы,
и освобождает динамическую память компьютера,
отведенную под
графический драйвер.
* procedure
SetGraphMode(Mode:integer);
Mode -
графический режим.Изменяет ранее используемый графи-
ческий режим либо
возвращает систему в прежний графический режим
после временного перехода
к текстовому режиму. Условием использо-
вания оператора
является сохранение в динамической области ОЗУ ранее
загруженного
графического драйвера.
ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ
* procedure
RestoreCrtMode(без параметров);
Восстанавливает
исходный текстовый режим дисплея без потери в
динамической области
ОЗУ програмы графического драйвера.
Имеется ряд
операторов для получения справок о текущем
графическом режиме:
* function
GetDriverName:string; -
Возвращает
строковое название
текущего графического адаптера.
* function
GetModeName(ModeNumber:integer):string -
Возвращает строковое название
требуемого графического режима.
* function
GetMaxMode:integer -
Возвращает максимальный номер
графического режима для текущего
адаптера.
* procedure
GetModeRange(GraphDriver:integer;
*
var LowMode,HighMode:integer); -
Выдает справку
о диапазоне номеров графических режимов задан-
ного графического
адаптера. Возвращаемые параметры LowMode и
HighMode означают
минимальный и максимальный номера графических
режимов,
соответственно.
* function
GetGraphMode:integer; -
Возвращает номер текущего графического режима.
ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ
* procedure
GetAspectRatio(var Xasp, Yasp:word); -
Возвращает в своих параметрах ввеличины
дискретов экрана по осям X и Y ,сооответственно.
0
УПРАВЛЕНИЕ КУРСОРОМ И
ПОЛЕМ РИСОВАНИЯ
В графическом
режиме также как и в текстовом положение выво-
димых на экран
данных в каждый момент времени определяется курcо-
ром. Однако, в
этом случае курсор невидим. При вхождении в гра-
фический режим с
помощью процедуры InitGraph курсор автоматически
помещается в левый
верхний угол экрана, фон экрана принимает первый
(черный) цвет
палитры. Для определения и изменения положения курсора
без рисования в
TURBO-PASCAL предусмотрены операторы MoveTo,MoveRel,
GetX,GetY.
* procedure MoveTo(x,y:integer);
где x,y - координаты
по горизонтали и вертикали соответственно
в отсчете от левого
верхнего угла экрана.
* procedure
MoveRel(Dx,Dy:integer);
Смещает курсор
без рисования относительно его текущего поло-
жения. Dx, Dy -
смещения курсора по координатам x и y.
* function GetX:
word;
Определяет для
курсора значение координаты X.
* function GetY:
word;
Определяет для
курсора значение координаты Y.
УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМ РИСОВАНИЯ
При управлении
положением курсора полезными оказываются также
справочные функции
GetMaxX и GetMaxY, которые возвращают координаты
самой правой и самой
нижней возможных графических позиций курсора,
соответственно, для
текущего графического драйвера и режима.
* procedure
ClearDevice;
Очищает экран
от следов предшествовавшего рисования и восста-
навливает исходные
параметры графики.
* procedure
SetViewPort(X1,Y1,X2,Y2:word;Clip:boolean);
Устанавливает
прямоугольное окно рисования с перемещением
курсора в левый
верхний угол окна. Параметры процедуры имеют следу-
ющий смысл:(X1,Y1) и
(X2,Y2) определяют соответствввенно координаты
левого верхнего и
правого нижнего углов окна, а Clip принимает
значение true при
необходимости отсечения изображения за границами
окна и false, когда
этого делать не надо .
* procedure
ClearViewPort;
Очищает текущее
окно, заполняя его первым цветом текущей
цветовой палитры, и
переводит курсор в левый верхний угол окна.
* procedure
GetViewSettings(var ViewPortType);
Возвращает
параметры активного окна просмотра в переменной
ViewPort. Тип
ViewPortType описан в модуле Graph.
0
ФОРМИРОВАНИЕ
ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
В данном разделе не
рассматривается управление
цветом и стилем
рисования и закрепляется за
фоном светло-серый,
а за курсором синий цвет.
* procedure
LineTo(X,Y:integer);
щ
Проводит отрезок
прямой от текущего положения
курсора к заданной
точке (X,Y).
* procedure
LineRel(Dx,Dy:integer);
2
Рисует отрезок
прямой по направлению к точке,
смещенной от
текущего положения курсора на рас-
стояние Dx и Dy по
осям OX и OY .
* procedure
Line(X1,Y1,X2,Y2:integer);
3
Проводит прямую
между точками (X1,Y1) и
(X2,Y2).
После выполнения
этой и последующих процедур
курсор возвращается
в предшествующее положение.
ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
* procedure
Rectangle(X1,Y1,X2,Y2:integer);
4
Строит контуры
прямоугольника с координатами
левого верхнего
(X1,Y1) и нижнего правого
(X2,Y2) углов.
* procedure
Bar(X1,Y1,X2,Y2:integer);
5
Строит
прямоугольник, закрашенный текущим цветом
и орнаментом
заполнения. (X1,Y1), (X2,Y2) -
координаты левого
верхнего и правого нижнего
углов
соответственно.
* procedure
Bar3D(X1,Y1,X2,Y2:integer;
*
Depth:word;Top:boolean)
6
Рисует аксонометрию
закрашенного по фасаду
прямоугольного
параллелепипеда.
(X1,Y1),(X2,Y2) -
координаты левого верхнего и
правого
нижнего углов
прямоугольного фасада.
Depth - ширина
боковой грани (отсчитывается по
годизонтали.
Top - признак
включения верхней грани.
ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
* procedure
DrawPoly(NumPoints:word;
*
var PolyPoints);
7Строит ломаную
линию.
NumPoints - число
вершин многоугольника
PolyPoints -
переменная без типа, содержащая
NumPoints+1 пар
координат вершин многоугольника
(первая и последняя
вершины должны совпадать).
* procedure
FillPoly(NumPoints:word;var PolyPoints);
8
Закрашивает
многоугольник текущим цветом и
орнаментом.
Параметры NumPoints и PolyPoints
именют тот же смысл
и тип, что и одноимеынные
параметры процедуры
DrawPoly.
0
01С ПОМОЩЬЮ КАКИХ
ПРОЦЕДУР МОЖНО НАИБОЛЕЕ РАЦИОНАЛЬНО ПОСТРОИТЬ
ОТРЕЗОК , ЕСЛИ
ИЗВЕСТНЫ КООРДИНАТЫ КОНЦОВ?
1 LineTo(X,Y);
Line(X1,Y1,X2,Y2);
2
Line(X1,Y1,X2,Y2);
DrawPoly(NumPoint,PolyPoints);
3 LineTo(X,Y);
Line(X1,Y1,X2,Y2);
DrawPoly(NumPoint,Poly Points);
4
Line(X1,Y1,X2,Y2);
*
02КАК ПОСТРОИТЬ
СТОЛБЧАТУЮ ДИАГРАММУ В ЗАРАНЕЕ СФОРМИРОВАННОЙ РАМКЕ?
1
1
Bar3D(X1,Y1,X2,Y2,Depth,true);
SetViewPort(X1,Y1,X2,Y2,false);
ClearViewPort;
Bar3D(X1,Y2,X2,Y3,Depth,false);
2
Bar3D(X1,Y1,X2,Y2,Depth,true);
SetViewPort(X1,Y1,X2,Y2,Depth,true);
ClearViewPort;
Bar3D(X1,Y1,X2,Y3,Depth,false);
3
Bar3D(X1,Y1,X2,Y2,Depth,true);
Bar3D(X1,Y2,X2,Y3,Depth,false);
4
Bar3D(X1,Y1,X2,Y2,Depth,true);
Bar3D(X1,Y2,X2,Y3,Depth,true);
*
03КАК НА ПОЛНОСТЬЮ
ЗАКРАШЕННОМ ЭКРАНЕ ПОЛУЧИТЬ НЕЗАКРАШЕННУЮ ПРЯМОУ-
ГОЛЬНУЮ ОБЛАСТЬ?
1
Bar(X1,Y1,X2,Y2);
SetViewPort(X1,Y1,X2,Y2,true);
ClearViewPort;
2
Bar(X1,Y1,X2,Y2);
3
Bar3D(X1,Y1,X2,Y2,Depth,true);
4 Bar3D(X1,Y1,X2,Y2,false);
*
04КАК ИСКЛЮЧИТЬ
ПОЯВЛЕНИЕ НА ЭКРАНЕ ЗАТЕНЯЕМЫХ КОНТУРОВ НИЖНЕГО
2 ПАРАЛЛЕЛЕПИПЕДА В
ОБЬЕМНОЙ СТОЛБЧАТОЙ ДИАГРАММЕ?
1 Использовать
процедуру Bar3D дважды. построенный верхний парал-
лелепипед
"закроет" автоматически верхнюю грань нижнего парал-
лелепипеда.
2 Установить
параметр Top=false в процедуре Bar3D при построении
нижнего
параллелепипеда.
3 Установить
параметр Top=false в процедуре Bar3D при построении
верхнего
параллелепипеда.
4 Построить
ломаную линию соответствующую контурам верхней грани
нижжнего
параллелепипеда с помощью процедуры DrawPole и закра-
сить его в
белый цвет с помощью процедуры FillPole.
*
05КАК НА ЭКРАНЕ
ЗАКРАСИТЬ БЕЛЫМ ЦВЕТОМ ОБЛАСТЬ, ОГРАНИЧЕННУЮ ЗВЕЗДОЙ?
1 Построить
звезду с помощью процедуры DrawPole(10,zve),где zve -
константа типа
PointType, является массивом координат вершин
фигуры и
содержит 10 элементов.
2 Использовать
процедуру DrawPole(10,zvez) , где константа zvez
содержит 11
элементов.
3 Применить
процедуру FillPole(10,zves), где константа zves содер-
жит 11
элементов.
4 Установить
цвет рисования белый и с помощью процедуры
FillPole(10,zves) построить звезду, закрашенную белым цветом.
*
06С ПОМОЩЬЮ КАКОЙ
ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ ВОЗМОЖНО УСТАНОВИТЬ СТРОКОВОЕ
НАЗВАНИЕ ТЕКУЩЕГО
ГРАФИЧЕСКОГО АДАПТЕРА?
1 Функция
GetDriverName;
2 Функция
GetModeName(ModeNumber);
3 Функция
GetMaxMode;
4 Процедура
GetModeRange(GraphDriver;LowMode,HighMode);
*
07СУЩЕСТВУЕТ ЛИ
ВОЗМОЖНОСТЬ ОПРЕДЕЛЕНИЯ ЗНАЧЕНИЯ КООРДИНАТ КУРСОРА.
1 Нет
2 Да, с
помощью функций GetX, GetY.
3 Да, с
помощью функций GetMaxX, GetMaxY.
4 Да, с
помощью функции MoveRel.
*
08С ПОМОЩЬЮ КАКОГО
ФРАГМЕНТА ПРОГРАММЫ МОЖНО ВЫВЕСТИ НА ЭКРАН
3 СЛЕДУЮЩУЮ
КАРТИНКУ? КУРСОР НАХОДИТСЯ В ТОЧКЕ (X1,Y1).
1
Line(X,Y,X1,Y1);
MoveRel(X,Y+dY);
Line(X,Y+dY,X1,Y1);
MoveRel(0,dY);
LineTo(X1,Y1);
2
LineTo(X1,Y1);
LineRel(0,dY);
LineRel(0,2dY);
3 LineTo(X,Y);
MoveRel(0,dY);
Line(X,Y+dY,X1,Y1);
MoveRel(0,dY);
Line(X,Y+2dY,X1,Y1);
4 LineTo(X,Y);
LineRel(0,dY);
LineRel(0,2dY);
*
09ГДЕ ПОМЕЩАЕТСЯ
КУРСОР И КАКОЙ ФОН ЭКРАНА УСТАНАВЛИВАЕТСЯ ПРИ
ВХОЖДЕНИИ В
ГРАФИЧЕСКИЙ РЕЖИМ С ПОМОЩЬЮ ПРОЦЕДУРЫ InitGraph?
1 Курсор
помещается в центр экрана и устанавливается черный
цвет фона
экрана.
2 Курсор
помещается в правый верхний угол экрана и устанав-
ливается
черный цвет фона экрана.
3 Курсор
помещается в левый верхний угол экрана и устанавлива-
ется черный
цвет фона экрана.
4 Курсор
помещается в левый верхний угол экрана и устанавлива-
ется белый
цвет фона экрана.
*
10С КАКОЙ ЧАСТОТОЙ
ОБНОВЛЯЕТ ЭКРАН КОНТРОЛЛЕР ДИСПЛЕЯ ПЭВМ IBM?
1 50-60
раз/сек
2 20-40
раз/сек
3 100-120
раз/сек
4 200 раз/сек
*
0
011Процедуру
LineTo(X,Y) можно использовать только в случае, когда 002
один из концов
отрезка совпадает с положением курсора.
*
2Ответ правильный.
Однако, применение процедуры DrawPoly в данном 004
случае не
является рациональным.
*
3Процедуру
LineTo(X,Y) можно использовать только в случае, когда один002
из концов отрезка
совпадает с положением курсора. Процедура DrowPoly
не является в
данном случае рациональной.
*
4Ответ
правильный. 005
*
*
021Отввет неверный.
Верхний параллелепипед будет иметь очищенную перед-002
нюю грань. Это
не требуется по условию задачи. При этом неверно
указаны параметры
процедуры Bar3D при построении второго параллеле-
пипеда.
*
2Неправильно
указаны параметры процедуры SetViewPort. Координаты окна002
отсчитываются от
левого верхнего угла экрана в то время как для про-
цедуры Bar3D от
левого верхнего угла окна.
*
3Ответ
правильный. 005
*
4Ответ не
точный.На экране появятся затененные контуры нижнего парал-003
лелепипеда.
*
*
031Ответ не
точный.Процедуры SetViewPort и ClearViewPort в данном слу- 003
чае
излишние,т.к.уже процедура Bar рисует прямоугольную область,
которую
закрашивает первым цветом палитры, если цвет не задан ранее
*
2Ответ
правильный 005
*
3Процедура Bar3D
рисует аксонометрию прямоугольного параллелепипеда,а002
не прямоугольную
область.
*
4Процедура Bar3D
рисует аксонометрию прямоугольного параллелепипеда,а002
не прямоугольную
область.
*
*
041Ответ неверный.
Процедура Bar3D рисует контуры аксонометрии закра- 002
шенного по фасаду
параллелепипеда. Боковая и верхняя грани не закра-
шиваются, т.о.
затемненная часть верхней грани нижнего параллелепи-
педа не исчезнет.
*
2Ответ
правильный. 005
*
3Ответ неверный.
Параметр Top процедуры Bar3D регулирует наличие или 002
отсутствие
верхней (а не нижней) левой грани аксонометрии.
*
4Ответ неверный.
Достаточно установить параметр Top=False процедуры 002
Bar3D.
Дополниетльные меры излишне.
*
*
051Ответ неверный.
Процедура DrawPoly построит звезду с одной невидимой002
гранью. Цвет
фигуры будет соответствовать цвету фона.
*
2Ответ неверный.
Цвет фигуры будет соответствовать цвету фона и будет002
белым только в
случае, когда фон экрана белый.
*
3Ответ
правильный. 005
*
4Ответ правильный.
Однако, закраска белым цветом возможна и 004
*
*
061Ответ
правильный. 005
*
2Ответ неверный.
Функция GetModeName возвращает строковое название 002
требуемого
графического режима для текущего адаптера.
*
3Ответ
неверный.Функция GetMaxMode возвращает максимальный номер 002
графического
режима для текущего адаптера.
*
4Ответ неверный.
Процедура GetModeRange выдает справку о диапазоне 002
номеров
графических режимов заданного графического адаптера.
*
*
071Ответ неверный.
Такая возможность существует. 002
*
2Ответ
правильный. 005
*
3Ответ неверный.
Данные процедуры возвращают максимально возможные 002
для текущего
драйвера и режима графические позиции курсора.
*
4Ответ неверный.
Процедура MoveRel смещает курсор относительно его 002
текущей позиции.
*
*
1081Ответ неверный.
Рисунок будет иметь следующий вид: 002
*
2 2Ответ
неверный.Рисунок будет иметь следующий вид: 002
*
3Ответ
правильный. 005
*
3 4Ответ неверный.
рисунок будет иметь следующий вид: 002
*
*
091Ответ
неверный. 002
*
2Ответ
неверный. 002
*
3Ответ правильный.
005
*
4Ответ
неверный. 002
*
*
101Ответ
правильный. 005
*
2Ответ
неверный. 002
*
3Ответ
неверный. 002
*
4Ответ
неверный. 002
*
*
0
УПРАВЛЕНИЕ ЦВЕТОМ И
СТИЛЕМ ИЗОБРАЖЕНИЙ
В данном
разделе мы рассмотрим возможности управления цветовой
палитрой и стилем
рисования.
* procedure
GetPalette(var PaletteType);
Возвращает
текущую плитру и количество цветов в ней. Применя-
ется только в
графическом режиме и только с драйверами EGA, EGA 64
и VGA.
* procedure
SetAllPalette(var Palette);
Меняет все
цвета палитры на заданные. Переменная без типа
Palette в первом
байте содержит число N- количество цветов в палитре
а в последующих N
байах - коды задаваемых цветов. Если задана вели-
чина -1, то исходный
цвет остается без изменений.
* procedure
SetPalette(NumberColor:word;Color:byte);
Изменяет один
из цветов палитры. NumberColor - порядковый
номер изменяемого
цвета. Color -код нового цвета.
* procedure
SetColor(Color:word);
Устанавливает
текущий цвет рисования.Color - код цвета либо
его имя. Возможные
значения параметра приведены на следующем экране
УПРАВЛЕНИЕ
ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
_____________________________________________________________________
Имя
Значение Назначение
--------------------------------------------------------------------
Black
0 черный
Blue 1
синий
Green
2 зеленый
Cyan
3 голубой
Red
4 красный
Magenta
5 фиолетовый
Brown
6 коричневый
LightGray
7 светло-серый
DarkGray 8 темно-серый
LightBlue
9 светло-синий
LightGreen
10 светло-зеленый
LightCyan
11 светло-голубой
LightRed
12 розовый
LightMagenta
13 светло-фиолетовый
Yellow
14 желтый
1White 15
белый
УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
* procedure
SetBKColor(Color:word);
Устанавливает
цвет фона рисования. Color - код или имя цвета.
Для получения
справок о кодах цветов, связанных с курсором и
фоном рисования,
используются функции:
function GetColor:word;
function GetBKColor:word;
Факторами,
определяющими стиль рисования, являются толщина и
способ выражения линий,
используемых в изображениях контурных линий
и линий закраски
замкнутых фрагментов рисунков.
* procedure
SetLineStyle(LineStyle:word; Pattern:word;
*
Thiekness:word);
Устанавливает
стиль контурных линий и их толщину. Параметр
LineStyle может
принимать следующие значения:
SolidLn = 0
___________________________________________________
DottedLn = 1
...................................................
CenterLn = 2
._._._._._._._._._._._._._._._._._._._._._._._._._ .
DashedLn = 3 _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
UserBitLn = 4 тип,
определяемый пользователем.
Когда
LineStyle=userBitLn, задается параметр Pattern - шаблон
линии - двухбайтовое
число, каждый бит которого равен 1, если оче-
редной пиксель
следует высветить, и 0 в противном случае.
Параметр
Thickness устанавливает толщину линий и может при-
нимать следующие
значения: NormWidth = 1 - тонкая линия
ThickWidth= 3 - толстая линия
УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
* procedure
GetLineSettings(var LineInfo:LineSettingsType);
Возвращает
параметры текущего стиля контурных линий. Тип
LineSettingsType
описан в модуле Graph как запись, поля которой:
LineStyle:word;
Pattern:word;
Thickness:word;,
имеют тот же смысл, что и одноименные параметры
процедуры
SetLineStyle.
* procedure
SetFillStyle[(Pattern:word;Color:word)];
Устанавливает
стандартные орнамент и цвет заполнения. "По умол-
чанию" закраска
белая сплошная. Параметр Color - установка цвета.
Возможные значения
параметра Pattern проиллюстрированы на следующем
экране.
* procedure
SetFillPattern(Pattern:FillPatternType;Color:word);
Задает
произвольный орнамент и цвет заполнения фигур.
Pattern - задаваемый
пользователем орнамент.
typeFillPatternType=array[1..8]
of byte;
Color - код цвета в
палитре.
* procedure
GetFillSettings(varFillInfo:FillSettingsType)
Возвращает код
и цвет стандартного образца закраски в пере-
менных Color и
Pattern соответственно.
УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
--------------------------------------------------------------------
Имя
Значение
--------------------------------------------------------------------
EmptyFill
0 Фоновым цветом
SolidFill
1 Заданным цветом
LineFill 2
LtSlashFill 3
SlashFill 4
BkSlashFill 5
LtBkSlashFill 6
HatchFill 7
XHatchFill 8
InterLeaveFill 9
WideDotFill 10
CloseDotFill 11
2 UserFill
12 Заполнение определяется пользователем
0--------------------------------------------------------------------
01С ПОМОЩЬЮ КАКОЙ
ПРОЦЕДУРЫ МОЖНО ВЫВЕСТИ НА ЭКРАН СПИСОК КОДОВ
ЦВЕТОВ НЕИЗВЕСТНОЙ
ВАМ ТЕКУЩЕЙ ЦВЕТОВОЙ ПАЛИТРЫ?
1
GetPalette(Palette);
1 2
SetPalette(NumberColor,Color);
3
SetAllPalette(Palette);
4
SetLineStyle(LineStyle,Pattern,Thickness);
*
02УСТАНОВИТЕ НА
ЧЕРНОМ ЭКРАНЕ КВАДРАТНОЕ ОКНО И ЗАКРАСЬТЕ ЕГО
СПЛОШНЫМ БИРЮЗОВЫМ
ЦВЕТОМ(3).
1
SetFillStyle(0,3);
Bar(X1,Y1,X1+d,Y1+d);
2
SetBKColor(0);
SetColor(3);
Bar(X1,Y1,X1+d,Y1+d);
3
SetBKColor(0);
SetFillStyle(0,3);
Bar(X1,Y1,X1+d,Y1+d);
4
SetFillStyle(0,3);
SetBKColor(0);
Bar(X1,Y1,X1+d,Y1+d);
*
03С ПОМОЩЬЮ КАКОГО
ФРАГМЕНТА ВОЗМОЖНО ЗАКРАСИТЬ ПРЯМОУГОЛЬНУЮ
ОБЛАСТЬ
КРАСНОГО(4) ЭКРАНА ЧАСТОЙ СЕТКОЙ(9) СИНЕГО ЦВЕТА(1)?
1
SetBKColor(4);
SetFillStyle(9,1,0);
Bar(X1,Y1,X2,Y2);
2
SetBKColor(4);
Rectangle(X1,Y1,X2,Y2);
SetFillStyle(9,1,0);
3
SetBKColor(4);
SetFillStyle(9,1);
Bar(X1,Y1,X2,Y2);
4 SetBKColor(4);
Bar(X1,Y1,X2,Y2);
SetFillStyle(9,1);
*
04ИМЕЕТСЯ ЛИ В ЯЗЫКЕ
TURBO PASCAL ВОЗМОЖНОСТЬ УСТАНАВЛИВАТЬ
ПРОИЗВОЛЬНЫЙ (ПО
ЖЕЛАНИЮ ПОЛЬЗОВАТЕЛЯ) ЦВЕТ РИСОВАНИЯ, СТИЛЬ И
ТОЛЩИНУ ЛИНИЙ
РИСОВАНИЯ?
1 Нет
2 Только цвет
3 Только стиль
линий
4 Только стиль
и толщину линий
*
05НАПИШИТЕ ПРОГРАММУ
РИСОВАНИЯ КОНТУРОВ ПРЯМОУГОЛЬНИКА ЛИНИЯМИ,
СОСТОЯЩИМИ ИЗ
ЧЕРЕДУЮЩИХСЯ ПАР ТОЧЕК И ТИРЕ.
1
GetLineStyle(0,0,1);
Rectangle(X1,Y1X2,Y2);
2
SetLineStyle(4,$3,1);
Rectangle(X1,Y1,X2,Y2);
3
SetLineStyle(4,3,1);
Rectangle(X1,Y1,X2,Y2);
4
SetLineStyle(0,13,1);
Rectangle(X1,Y1,X2,Y2);
*
06КАК ОБЕСПЕЧИТЬ
ЗАКРАСКУ КАКОЙ-ЛИБО ОБЛАСТИ ЭКРАНА КРАСНЫМ(4)
ЦВЕТОМ 25%
ЯРКОСТИ?
1
SetFillPatern(1,2,4,8,1,2,4,8);
2
SetFillPatern(1,2,4,8,1,2,4,8;4);
3
SetFillPatern(11,22,44,88,11,22,44,88);
4
SetFillPatern(11,22,44,88,11,22,44,88;4);
*
07КАКАЯ ИЗ
НИЖЕУКАЗАННЫХ ПРОЦЕДУР УСТАНАВЛИВАЕТ СТАНДАРТНЫЕ
ОБРАЗЦЫ ЗАКРАСКИ И
ИХ ЦВЕТА?
1 SetFillStyle(Pattern:word;Color:word);
2
SetFillPatern(Pattern:FillPatternType;Color:Word);
3
GetFillSettings(var FillInfo:FillSettingsType);
4
SetLineStyle(LineStyle:Word;Pattern:Word;Thickness:Word);
*
08С ПОМОЩЬЮ КАКОЙ
ПРОЦЕДУРЫ МОЖНО ЗАМЕНИТЬ НУЛЕВОЙ,ЧЕРНЫЙ, ЦВЕТ
ПАЛИТРЫ НА
ДЕВЯТЫЙ, СВЕТЛО-ГОЛУБОЙ?
1
SetAllPalette;
2 SetColor;
3 SetPalette;
4 GetPalette;
*
09НАПИШИТЕ ПРОГРАММУ
ЗАМЕНЫ ЦВЕТА НЕИЗВЕСТНОГО СТАНДАРТНОГО СТИЛЯ
ЗАКРАСКИ НА ЦВЕТ
X.
1 Color:=X;
SetFillStyle(Pattern,Color);
2
GetFillSettings;
Color:=X;
SetFillStyle(Pattern;Color);
3
GetFillSettings;
Color:=X;
SetFillPattern(Pattern;Color);
4
GetFillSettings;
Color:=X;
SetFillStyle(Color;Pattern);
*
10НАПИШИТЕ ПРОГРАММУ
РИСОВАНИЯ НА КРАСНОМ(4) ЭКРАНЕ ГОЛУБОГО(9)
ОКНА, ЗАКРАШЕННОГО
КЛЕТКОЙ СИНЕГО ЦВЕТА(1).
1
SetBKColor(4);
SetFillStyle(7,1);
Bar(X1,Y1,X2,Y2);
2
SetBKColor(4);
Bar(X1,Y1,X2,Y2);
SetFillStyle(7,1);
Bar(X1,Y1,X2,Y2);
3
SetBKColor(4);
SetFillStyle(1,9);
Bar(X1,Y1,X2,Y2);
SetFillStyle(7,1);
Bar(X1,Y1,X2,Y2);
4
SetFillStyle(9,1);
Bar(X1,Y1,X2,Y2);
SetFillStyle(7,1);
SetBKColor(4);
*
0
011Ответ
правильный. 005
*
2Ответ неверный.
Процедура SetPalette изменяет один из цветов палитры002
*
3Ответ неверный.
Процедура SetAllPalette изменяет цвета палитры. 002
*
4Ответ неверный.
Процедура SetLineStyle устанавливает стиль 002
контурных линик и
их толщину.
*
*
021Ответ
правильный. 005
*
2Ответ неверный.
Процедура SetColor задает цвет рисования. но не 002
закрашивает
фигуры.
*
3Ответ неверный.
Нет необходимости устанавливать черный цвет, т.к. 003
он автоматически
устанавливается при вхождении в графический режим.
*
4Ответ неверный.На
черном экране, установленном процедурой SetBKColor002
будет виден лишь
белый контур квадрата.
*
*
031Ответ
неверный.Ошибка в написании параметров процедуры SetFillStyle.002
*
2Ответ неверный.
Результатом выполенния данного фрагмента будет 002
красный
экран.Ошибка в написании параметров процедуры SetFillStyle.
*
3Ответ
правильный. 005
*
4Ответ неверный.
Стиль и цвет закраски необходимо установить до 002
построения
фигуры.
*
*
041Ответ неверный. В
языке имеется возможность устанавливать 002
произвольный (по
желанию пользователя) стиль контурных линий с
помощью процедуры
SetLineStyle(LineStyle,Pattern,Thickness).
При этом параметр
LineStyle устанавливается в значение UserBitLn(4)
а параметр
Pattern представляет собой битовую строку, определяющую
стиль изображения
кнтурных линий. Возможности установить призволь-
ный цвет
рисования нет.
*
2Ответ неверный. В
языке имеется возможность устанавливать 002
произвольный (по
желанию пользователя) стиль контурных линий с
помощью процедуры
SetLineStyle(LineStyle,Pattern,Thickness).
При этом параметр
LineStyle устанавливается в значение UserBitLn(4)
а параметр
Pattern представляет собой битовую строку, определяющую
стиль изображения
кнтурных линий. Возможности установить призволь-
ный цвет
рисования нет.
*
3Ответ
правильный. 005
*
4Ответ неверный. В
языке имеется возможность устанавливать 002
произвольный (по
желанию пользователя) стиль контурных линий с
помощью процедуры
SetLineStyle(LineStyle,Pattern,Thickness).
При этом параметр
LineStyle устанавливается в значение UserBitLn(4)
а параметр
Pattern представляет собой битовую строку, определяющую
стиль изображения
кнтурных линий. Возможности установить призволь-
ный цвет
рисования нет.
*
*
051Ответ неверный.
Процедура GetLineStyle не устанавливает стиль 002
контурных линий,
а возвращает их текущие параметры.
*
2Ответ правильный.
* 005
3Ответ неверный.
Параметр Pattern не может состоять из одной цифры, 002
т.к. его значение
- двухбайтовое число.
*
4Ответ неверный.
При установке стандартного стиля контурных линий 002
параметр Pattern
не задается.
*
*
061Ответ неверный.
Не указан параметр Color и элементы массива Pattern 002
являются
двухбайтовыми.
*
2Ответ неверный.
Элементы массива Pattern являются двухбайтовыми. 002
*
3Ответ неверный.
Не указан параметр Color. 002
*
4Ответ
правильный. 005
*
*
071Ответ
правильный. 005
*
2Ответ
неправильный. Процедура SetFillPattern позволяет программисту 003
ровать и
стандартный стиль с помощью той же процедуры.
*
3Ответ неверный. Эта
процедура возвращает код и цвет стандартного 002
образца закраски.
*
4Ответ неверный.
Процедура SetLineStyle устанавливает стиль контурных002
линий.
*
*
081Ответ неверный.
Данный способ замены одного цвета другим допустим, 004
но не рационален.
*
2Ответ неверный.
Процедура SetColor устанавливает текущий цвет 002
рисования.
*
3Ответ
правильный. 005
*
4Ответ неверный.
Процедура GetPalette выдает справку о текущей 002
цветовой палитре,
но не меняет цвета.
*
*
091Ответ неверный.
Параметр Color не следует устанавливать предвари- 002
тельно для
процедуры SetFillStyle. Процедура SetFillStyle устанав-
ливает
стандартный образец закраски и цвет.
*
2Ответ
правильный. 005
*
3Ответ неверный.
Процедура SetFillPattern устанавливает нестандартный002
стиль закраски.
*
4Ответ неверный.
Параметры процедуры SetFillStyle следует употреблять003
в обратном
порядке.
*
*
101Ответ
неверный.Фон прямоугольлника (X1,Y1,X2,Y2) будет красным. 002
*
2Ответ неверный.
Прямоугольник (X1,Y1,X2,Y2) будет по умолчанию 002
закрашен белым
цветом, а не голубым.
*
3Ответ
правильный. 005
*
4Ответ неверный.
Процедура SetBKColor закрасит экран красным цветом, 002
закрасив
прямоугольник.
*
*
0
ПРОГРАММИРОВАНИЕ
ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
В данном разделе
рассматриваются процедуры, позволяющие програм-
мировать изображение
криволинейных фигур из класса круговых и эллип-
тических дуг,
секторов, а также операторы формирования растровых
изображений и часто
используемые вспомогательные процедуры.
* procedure
Arc(X,Y:integer;StAngle,EndAngle,Radius:word);
1
Рисует против
часовой стрелки текущим
стилем и цветом дугу
окружности с центром (X,Y),
радиусом Radius от
начального угла StAngle до
конечного угла
AndAngle. Угловые параметры
задаются в градусах.
* procedure
CetArcCords(var ArcCoords:ArcCoordsType);
Возвращает в
переменной ArcCoords координаты концов дуги,
проведенной
последней командой Arc.Тип ArcCoordsType описан в
модуле Graph как
запись, значения полей которой аналогичны значению
параметров процедуры
Arc.
* procedure
Circle(X,Y:integer;Radius:word);
2
Строит контуры
окружности радиуса Radius с
центром (X,Y),
заданным ранее цветом и стилем
рисования.
ПРОГРАММИРОВАНИЕ
ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
* procedure
Ellipse (X,Y:integer;
*
StAngle,EndAngle,XRadius,YRadius:word);
3
Строит
текущим стилем и цветом дугу
эллписа с центром
(X,Y), начальным StAngle
и конечным EndAngle
углами, двумя полуосями
XRadius и YRadius.
* procedure
FloodFill(X,Y,Border:word);
Обеспечивает
закраску ограниченной
области, в которую
входит точка (X,Y) , по
образцу,
установленному предварительно
процедурой
SetFillStyle либо SetFillPattern.
Параметр Border
определяет код цвета,
ограничивающего
закрашиваемую область.
* procedure
FillEllipse(X,Y:integer;XRadius, YRadius:word);
Закрашивает
область эллипса,используя
предварительно
установленные стиль и цвет закраски.
Значения параметров
аналогичны значениям параметров
процедуры Ellipse.
4
5
ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
* prosedure
PieSlice(X,Y:integer;
*
StAngle,EndAngle,Radius:word);
6
Строит и
закрашивает круговой сектор
установленным стилем
и цветом. Параметры имеют
тот же смысл и тип,
что и одноименные параметры
процедуры Arc.
* procedure
Sector(X,Y:integer;
*
StAngle,EndAngle,XRadius,YRadius:word);
7
Рисует и
закрашивает эллиптический сектор,
используя текущие
стиль и цвет рисования и зак-
раски. Параметры
имеют тот же смысл и тип что
и одноименные
параметры процедуры Ellipse.
* procedure
Randomize;
Инициализирует
встроенный генератор случайных чисел сллучайным
значением,
получаемым от системного таймера компьютера. Описана в
модуле System .
Число, получаемое в результате работы генератора,
хранится в
предописанной переменной RandSeed. Присваивая ей конкрет-
ные значения можно
получать каждый раз заданную последовательность
случайных чисел.
ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
* function
Random(Rande:word):word;
Возвращает
случайное число. Переменная Rande должна быть выра-
жением целого типа,
а результатом будет случайное число X длиной в
слово в диапазоне
0=<X<Rande. Если Rande=<0, Random возвращает 0.
Если параметр
функции не задан вовсе, то результатом будет
вещественное число в
диапазоне 0=<X<1.
* procedure
Delay(Time:word);
Выполняет
задержку на заданное число миллисекунд, описана в
модуде Crt.
* function
KeyPressed:boolean;
Возвращает
значение true, если на клавиатуре нажата
какая-либо
символьная клавиша, и false - в противном случае. Описана
в модуле Crt.
* procedure
PutPixel(X,Y:integer;Color:word);
Рисует на
экране в позиции (X,Y) точку цвета Color. Опивана в
модуле Graph.
* procedure
GetPixel(X,Y:integer):word;
Возвращает
код цвета заданной точки растра (X,Y).
ПРОГРАММИРОВАНИЕ
ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
В качестве
примера использования функции PutPixel продемон-
стрируем возможность
формирования "звездного неба" до нажатия любой
символьной клавиши.
.............
Randomize;
repeat
PutPixel(Random(GetMaxX),
Random(GetMaxY),
Red);
Delay(50);
until KeyPressed;
.............
Приведем еще
один пример использования процедур и функций,
описанных в данном
разделе.На следующем экране Вы можете наблюдать
эллиптическую
диаграмму с выделенными секторами различного стиля и
цвета закраски, а
также кардиоиду, представленную семейством окруж-
ностей, проходящих
через общею точку опорной окружности и с центрами
в концах равных
элементов, составляющих опорную окружность. Цвета
элементов опорной
окружности и окружностей кардиоиды назнача-
ются случайным
образом.
8
9
ПРОГРАММИРОВАНИЕ ЦВEТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ
0
01НАРИСУЙТЕ ПРОГРАММУ
РИСОВАНИЯ НА ЖЕЛТОМ(14) ЭКРАНЕ КРИВОЛИНЕЙНОЙ ЦИФРЫ 8 СИНЕГО(1) ЦВЕТА.
1
SetBKColor(14);
SetColor(1);
Circle(X,Y;Radius);
Circle(X,Y+d;Radius+d);
2
SetBKColor(1);
SetColor(14);
Circle(X,Y;Radius);
Circle(X,Y;Radius+d);
3 SetBKColor(14);
SetColor(1);
Arc(X,Y;0,360,Radius);
Arc(X,Y+d;0,360,Radius);
4
SetBKColor(1);
SetColor(14);
Arc(X,Y;0,360,Radius);
Arc(X,Y+d;0,360,Radius);
*
02НАПИШИТЕ ПРОГРАММУ
ФОРМИРОВАНИЯ НА ЧЕРНОМ ЭКРАНЕ КРАСНОЙ ЦИФРЫ 5 С КРИВОЛИНЕЙНОЙ НИЖНЕЙ И
ПРЯМОЛИНЕЙНОЙ ВЕРХНЕЙ ЧАСТЯМИ.
1 SetColor(4);
GoToXY(X,Y);
Arc(X+d,Y+d,0,180,K+d);
Arc(X,Y+d,0,90,d);
Arc(X+d,Y+d+k,0,180,k);
2 SetColor(4);
Line(X,Y,X+d,Y);
Line(X,Y,X,Y+d);
Arc(X+k,Y+k,0,90,k);
Arc(X+k,Y+k,270,360,k);
3 SetColor(4);
Line(X,Y,X+d,Y);
Line(X,Y,X,Y+d);
Arc(X+k,Y+k,0,180,k);
4 SetColor(4);
Line(X,Y,X-d,Y);
Line(X-d,Y,X-d,Y+d);
Circle(X-d,Y+d+k,k);
*
03НАПИШИТЕ ПРОГРАММУ
, ОБЕСПЕЧИВАЮЩУЮ ФОРМИРОВАНИЕ НА ЧЕРНОМ ЭКРАНЕ ЭЛЛИПСА СО СЛУЧАЙНЫМ ЦВЕТОМ
ЗАКРАСКИ.
1 Randomize;
SetFillStyle(0,15);
Ellipse(X,Y,0,359,a,b);
FloodFill(X,Y,Random(14);
2
SetFillStyle(0,15);
Ellipse(X,Y,0,359);
FloodFill(X,Y,Random(14);
3
SetFillStyle(0,15);
Randomize(15);
Ellipse(X,Y,0,359,a,b);
FloodFill(X,Y,Random);
4
SetFillStyle(0,15);
Randomize;
Ellipse(X,Y,a,b);
FloodFill(X,Y);
*
04КАК ПРАВИЛЬНО
ЗАДАТЬ УГЛОВЫЕ ПАРАМЕТРЫ ПРОЦЕДУРЫ Arc?
1 В радианах. Их
значения не должны превышать 2пи.
2 В радианах. Их
значения не должны превышать пи.
3 В градусах. Их
значения не должны превышать 360 градусов.
4 В градусах. Их
значения не должны превышать 180 градусов.
*
05В КАКОМ МОДУЛЕ
ОПИСАНА ПРОЦЕДУРА RANDOMIZE?
1 Graph.
2 Crt .
3 Dos.
4 System.
*
06С ПОМОЩЬЮ КАКОЙ
ПРОЦЕДУРЫ МОЖНО НАРИСОВАТЬ НА ЭКРАНЕ ТОЧКУ
ОПРЕДЕЛЕННОГО
ЦВЕТА?
1 PutPixel.
2 KeyPressed.
3 GetPixel.
4 Delay.
*
0
ФОРМИРОВАНИЕ
ГРАФИЧЕСКИХ ТЕКСТОВ
В данном разделе
мы рассмотрим возможность графического изобра-
жения текстовых
символов, управление типом шрифта, направлением
вывода, размерами и
пропорциями символов, пространственной привязкой
текстовых строк к
положению курсора и другими возможностями формиро-
вания графических
текстов.
* procedure
SetTextStyle(Font,Direction:word;
*
CharSize:CharSizeType);
Устанавливает
стиль стандартного шрифта Font(один растровый -
DefaultFont(0), и
четыре штриховых - TriplexFont(1),SmallFont(2),
SanSerifFont(3),
GothicFont(4)), направление текстовой строки
Direction
(HorizDir(0) - слева направо, VertDir(1) - снизу вверх),
размер символов
CharSize (коэффициент увеличения от 1 до 10).
В случае
растрового шрифта каждый текстовый символ формируется
на основе матрицы
8*8 элементов разложения. Штриховые шрифты опреде-
ляются серией
векторов. Обычно штриховые шрифты хранятся в отдельных
файлах на системном
диске и при обращении к процедуре загружаются в
динамически
определяемую память компьютера автоматически.
"По
умолчанию", т.е. без обращения к данной процедуре
автоматически
устанавливается растровый шрифт, горизонтальный вывод
и единичный размер
символов.
На следующем
экране Вы можете наблюдать примеры стандартных
шрифтов. После
названия каждого из них через запятую указан коэффи-
циент увеличения.
#
1
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
#
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
* procedure
SetUserCharSize(MultX,DivX,MultY,DivY:word);
Используется
после установки штрихового шрифта с целью измене-
ния пропорций
символов. Отношение MultX/DivX -коэффициент масштаби-
рования обычной
ширины используемого архивного штрихового шрифта.
2MultY/DivY -
коэффициент масштабирования высоты шрифта.
#
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
* function
TextHeight(TextString:strig):word;
Возвращает
высоту заданной текстовой строки TextString в элемен-
тах
изображения(пикселах) с учетом всех установок, выполненных ранее
процедурами
SetTextStyle и SetUserCharSize .
* function
TextWidth(TextString:string):word;
Возвращает
ширину заданной текстовой строки TextString при тех
же условиях, что и
функция TextHeight.
* procedure
SetTextJustify(Horiz,Vert:word);
Обеспечивает
привязку выводимого графического текста к теку-
щему положению
курсора. Параметры процедуры описаны в модуле Graph
как константы и
могут принимать следующие значения:
Horiz: LeftText =0
- левым краем строки к курсору
CenterText=1
- симметрично к курсору
RightText =2
- правым краем строки к курсору
Vert: BottomText =0
- строка над курсором
CenterText =1
- симметрично к курсору
TopText =2
- строка под курсором
По
"умолчанию" устанавливается параметр привязки выводимого
графического текста
соответствующий обращению SetTextJustify(0,2);.
#
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
* procedure
OutText(TextString:string);
Выводит на
экран последовательность символов, начиная с текущей
позиции, которая
меняется только если текст выводится горизонтально
с левым
выравниванием. Если текст не помещается в графическое окно,
он либо вообще не
высвечивается ("грубый" шрифт, принятый по умолча-
нию), либо
высвечивается частично("гладкий" шрифт).Текущий цвет
текста задается
процедурой SetColor . параметры шрифта - процедурами
SetTextStyle
SetTextJustify.Коэффициенты увеличения ширины и высоты
штриховых шрифтов
можно задать процедурой SetUserCharSize. Ширину и
высоту строки
определяют с помощью функций TextWidth TextHeight.
* procedure
OutTextXY(X,Y:integer;TextString);
Выводит на
экран последовательность символов начиная с позиции
(X,Y) и возвращает
курсор в положение, предшествующее обращению к
данной процедуре.
* procedure
GetTextSettings(var TextInfo:TextSettingsType);
Возвращает
текущий тип текстового шрифта,его направление, раз-
мер,параметры
горизонтального и вертикального выравнивания, установ-
ленные ранее
процедурами SetTextStyle и SetTextJustify,либо по умол-
чанию при вхождении
в графический режим. Тип TextSettingsType описан
в модуле Graph как
запись, поля которой - Font,Direction:word;
CharSize:CharSizeType;
Horiz,Vert:word; - по смыслу и типу аналогич-
ны одноименныым
параметрам процедур SetTextStyle и SetTextJustify.
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
В языке
Turbo-Pascal предусмотрена возможность использовать
новые штриховые
шрифты,не входящие в систему фирмы Borland Interna-
tional, но
совместимых с этой системой по файловой форме представле-
ния. Для этого
необходимо файлы новых шрифтов, которые должны иметь
расширение .chr,
предварительно загрузить в каталог, содержащий файл
Turbo.exe
интегрированной среды Turbo-Pascal, а в прикладной
программе
использовать функцию InstallUserFont.
* function
InstallUserFont(NewFont:string):integer;
Инсталлирует
новый штриховой шрифт, т.е.вводит во внутреннюю
таблицу шрифтов имя
файла нового шрифта NewFont и возвращает номер
этого шрифта в
указанной таблице для использования в качестве значе-
ния параметра Font
процедуры SetTextStyly.
Внутренняя
таблица может содержать до 10 имен шрифтов, из
которых 4
стандартных в ней содержатся постоянно. В файловой системе
лабораторных
компьютеров содержатся файлы 4 нестандартных штриховых
шрифтов с именами:
Bold.chr, Goth.chr, Sans.chr,Trip.chr.
Если
внутренняя таблица штриховых шрифтов переполнена, то
функция возвращает
значение 0 и, следовательно, устанавливается
стандартный
растровый шрифт. Для сброса внутренней таблицы шрифтов в
исходное положение
можно заново перезапустить операционную систему.
На следующем
экране Вы можете наблюдать примеры четырех нес-
тандартных штриховых
шрифтов, упомянутых в данном разделе.
#
ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ
3
0
01КАКИЕ ВОЗМОЖНОСТИ ,
СВЯЗАННЫЕ С НАПРАВЛЕНИЕМ ВЫВОДА ТЕКСТОВОЙ
ИНФОРМАЦИИ, ДАЕТ
ГРАФИЧЕСКИЙ РЕЖИМ?
1 Возможен
только горизонтальный вывод.
2 Возможен как
горизонтальный так и вертикальны выводы.
3
Горизонтальный, вертикальный и вывод по горизонтали.
4 Имеется
возможность горизонтального вывода для всех шрифтов и
для
растрового - вывод по вертикали.
*
02УСТАНАВЛИВАЮТСЯ ЛИ
ТИП СТАНДРАТНОГО ШРИФТА, НАПРАВЛЕНИЕ ТЕКСТОВОЙ
СТРОКИ И РАЗМЕР
СИМВОЛОВ ОДНОЙ ПРОЦЕДУРОЙ?
1 Нет. Эти
параметры устанавливаются разными процедурами:
InstallUserFont; - стандартный шрифт
TextWidth; -
размер символов
OutText; -
направление вывода
2 Да. Эти
параметры устанавливаются с помощью одной процедуры,
3 Да.
Перечисленные параметры устанавливаются с помощью процедуры
SetTextStyle;
4 Нет. В языке
нет возможности устанавливать шрифт, направление
строке и
размер символов.
*
03МОЖНО ЛИ ИЗМЕНИТЬ
ПРОПОРЦИИ СИМВОЛОВ ЛЮБОГО ШРИФТА И ЕСЛИ МОЖНО, ТО
С ПОМОЩЬЮ КАКОЙ
ПОЦЕДУРЫ?
1 Нет. Пропорции
символов предусмотрены шрифтом и изменить их
нельзя .
2 Можно. С
помощью процедуры SetUserCharSize .
3 Можно изменить
пропорции только штрихового шрифта с помощью
процедуры
SetUserCharSize.
4 Можно. С
помощью процедуры SetTexStyle.
*
04ЧЕМ ОТЛИЧАЮТСЯ
ПРОЦЕДУРЫ OutText и OutTextXY?
1 Ничем. Они
полностью аналогичны.
2 Процедуры
отличаются привязкой выводимого текста.
3 Процедуры
отличаются привязкой выводимого текста и положением
курсора после
выполнения процедур.
4 Процедура
OutText осуществляет вывод символьной строки с
текущего
положения курсора, а процедура OutTextXY обеспечивает
привязку
графического текста без его вывода.
*
05СОСТАВИТЬ
ПРОГРАММУ ВЫВОДА СЛОВА "ПРОГРАММА" ПО НИЖНЕЙ КРОМКЕ БЕЛОГО ЭКРАНА
РАСТРОВЫМ ШРИФТОМ ЗЕЛЕНОГО (2) ЦВЕТА РАЗМЕРА 6.
1
SetBkColor(15);
SetColor(2);
SetTextStyle(1,0,6);
OutTextXY(0,GetMaxY,'ПРОГРАММА');
2
SetBkColor(15);
SetColor(2);
SetTextStyle(0,1,6);
OutTextXY(GetMaxX,0,'ПРОГРАММА');
3
SetBkColor(15);
SetColor(2);
SetTextStyle(0,6,1);
OutTextXY(0,GetMaxY,'ПРОГРАММА');
4
SetBkColor(15);
SetColor(2);
SetTextStyle(0,0,6);
OutTextXY(0,GetMaxY,'ПРОГРАММА');
*
06СОСТАВИТЬ
ПРОГРАММУ ГОРИЗОНТАЛЬНОГО ВЫВОДА СЛОВА "КЛАСС" В ВИДЕ
СТРОКИ ДЛИНОЙ 300
ПИКСЕЛОВ С ИСПОЛЬЗОВАНИЕМ ГОРИЗОНТАЛЬНО
ДЕФОРМИРОВАННОГО
СТАНДАРТНОГО ШТРИХОВОГО ШРИФТА SanserifFont
КРАСНОГО (4) ЦВЕТА
РАЗМЕРА 10.
1 SetColor(4);
SetTextStyle(SanSerifFont,HorizDir,10);
K:=TextWidth('КЛАСС');
SetUserCharSize(300,K,1,1);
2 SetColor(4);
SetTextStyle(SanSerifFont,VertDir,10);
K:=TextWidth('КЛАСС');
SetUserCharSize(300,K,1,1);
3 SetColor(4);
SetTextStyle(SanSerifFont,Horizdir,10);
K:=TextHeight('КЛАСС');
SetUserCharSize(1,1,300,K);
4 SetColor(4);
SetTextStyle(HorizDir,SanSerifFont,10);
K:=TextWidth('КЛАСС');
SetUserCharSize(300,K,1,1);
*
07СОСТАВИТЬ
ПРОГРАММУ ВЕРТИКАЛЬНОГО ВЫВОДА СЛОВА "ПАСКАЛЬ" В ВИДЕ
СТОЛБЦА ШИРИНОЙ 80
ПИКСЕЛОВ, ИСПОЛЬЗУЯ ВЕРТИКАЛЬНО-ДЕФОРМИРОВАННЫЙ СТАНДАРТНЫЙ ШТРИХОВОЙ ШРИФТ
SmallFont СИНЕГО(1) ЦВЕТА РАЗМЕРА 5.
1
SetTextStyle(SmallFont,0,5);
SetColor(1);
L:=TextHight('ПАСКАЛЬ');
SetUserCharSize(1,1,80,L);
OutTextXY(10,200,'ПАСКАЛЬ');
2
SetTextStyle(SmallFont,1,5);
SetColor(1);
L:=TextHight('ПАСКАЛЬ');
SetUserCharSize(80,L,1,1);
OutTextXY(10,200,'ПАСКАЛЬ');
3
SetTextStyle(SmallFont,1,5);
SetColor(1);
L:=TextHeight('ПАСКАЛЬ');
SetUserCharSize(1,1,80,L);
OutText('ПАСКАЛЬ');
4
SetTextStyle(1,5,SmallFont);
SetColor(1);
L:=TextHeight('ПАСКАЛЬ');
SetUserCharSize(1,1,80,L);
OutText('ПАСКАЛЬ');
*
08СКОЛЬКО
НЕСТАНДАРТНЫХ ШРИФТОВ МОЖНО ИСПОЛЬЗОВАТЬ ПРИ РАБОТЕ С ГРАФИ ЧЕСКИМИ ТЕКСТАМИ?
1 Сколько
угодно.
2 11 шрифтов.
3 Столько,
сколько файлов нестандартных шрифтов содержится в
Вашем
компьютере.
4 В
Turbo-Pascal не предусмотрена возможность использования
шрифтов , не
входящих в систему фирмы Borland International.
*
09СКОЛЬКО ИМЕН
РАЗЛИЧНЫХ ШРИФТОВ МОЖЕТ СОДЕРЖАТЬ ВНУТРЕННЯЯ ТАБЛИЦА ШРИФТОВ И СКОЛЬКО ИЗ НИХ
НЕСТАНДАРТНЫХ?
1 Не более 6,
из них нестандартных - не более 2.
2 Не более 10,
из них нестандартных - не более 6.
3 Не более 11,
из них нестандартных - не более 7.
4 Не более 10,
из них нестандартных - не более 4.
*
10КАКАЯ ПРОЦЕДУРА
ИНСТАЛЛИРУЕТ НОВЫЙ ШТРИХОВОЙ ШРИФТ?
1
InstallUserFont;
2
GetTextSettings.
3
SetUserCharSize.
4
SetTextJustify.
*
0
011Ответ неверный. В Turbo-Pascal имеется возможность не
только 002
горизонтального ,
но и вертикального вывода.
*
2Ответ
правильный. 005
*
3Ответ неверный. В
языке нет возможности вывода графического текста 002
в направлении по
горизонтали.
*
4Ответ неверный.
Ограничений на тип шрифта для осуществления 002
вертикального
вывода нет.
*
*
021Ответ неверный.
Перечисленные процедуры выполняют другие функции. 002
*
2Ответ неверный.
Процедура InstallUserFont инсталлирует новый 002
нестандартный
шрифт.
*
3Ответ
правильный. 005
*
4Ответ неверный.
Такая возможность есть. 002
*
*
031Ответ неверный.
Пропорции символов увличить можно. 002
*
2Ответ
неточный.Процедура SetUserCharSize изменяет пропорции символов004
после установки
штрихового шрифта процедурой SetTextStyle.
*
3Ответ правильный.
005
*
4Ответ неверный.
Процедура SetTextStyle устанавливает тип шрифта, но 002
не устанавливает
пропорции символов.
*
*
041Ответ неверный.
Эти процедуры отличаются привязкой выводимого текста002
и положением
курсора после их выполнения.
*
2Ответ неполный.
Процедуры отличаются не только привязкой выводимого 004
графического
текста, но и положением курсора после их выполнения
*
3Ответ
правильный. 005
*
4Ответ неверный.
Обе процедуры обеспечивают вывод символьной строки, 002
однако отличаются
местом привязки выводимой строкви и положением
курсора после их
выполнения.
*
*
051Ответ неверный.
Чтобы вывести строку растровым шрифтом следует 002
параметры
процедуры SetTextStyle выбрать иначе.
*
2Ответ неверный.
Параметры процедуры SetTextStyle указывают на то, 002
что строка будет
выведена не по нижней кромке, а вертикально, снизу
вверх. Кроме того
координаты начальной точки вывода в процедуре
OutTextXY
соответствуют правому верхнему углу экрана и значит
надпись не будет
выведена.
*
3Ответ неверный.
Неверно указаны параметры процедуры SetTextStyle 002
Стандартного
шрифта с номером 6 не существует.
*
4Ответ
правильный. 005
*
*
061Ответ
правильный. 005
*
2Ответ неверный.
Данный фрагмент программы будет обеспечивать не 002
горизонтальный, в
вертикальный вывод текста .
*
3Ответ неверный.
Данный фрагмент программы будет обеспечивать не 002
горизонтальную, а
вертикальную деформацию вывдимой строки.
*
4Ответ неверный.
Ошибка в употреблении параметров процедуры 002
SetTextStyle.
*
*
071Ответ неверный.
Строка, выводимая с помощью данного фрагмента прог- 002
раммы будет
располагаться горизонтально, а не вертикально как тре-
бует задание.
*
2Ответ неверный.С
помощью данного фрагмента программы будет проведена002
горизонтальная
деформация относительно первоначальной высоты
символов.
*
3Ответ
правильный. 005
*
4Ответ неверный.
Неправильно указаны значения параметров процедуры 002
SetTextStyle.
*
*
081Ответ неверный.
Использовать можно столько нестандартных шрифтов, 002
сколько файлов с
такими шрифтами содержится в Вашем компьютере.
*
2Ответ неверный.
Использовать можно стольконестандартных шрифтов, 002
сколько файлов с
такими шрифтами содержится в Вашем компьютере.
*
3Ответ
правильный. 005
*
4Ответ неверный .
Такая возможность имеется . 002
*
*
091Ответ неврный.
Таблица может содержать до 10 шрифтов, из них 6 002
нестандартных.
*
2Ответ
правильный. 005
*
3Ответ неверный.
Таблица может содержать до 10 шрифтов, из них 6 002
нестандартных.
*
4Ответ неверный.
Таблица может содержать до 10 шрифтов, из них 6 002
нестандартных.
*
*
101Ответ
правильный. 005
*
2Ответ неверный.
Процедура GetTextSettings возвращает текущий тип 002
текстового
шрифта.
*
3Ответ неверный.
Процедура SetUserCharSize используется для изменения002
пропорций
символов.
*
4Ответ неверный.
Процедура SetTextJustify обеспечивает привязку 002
выводимого текста
к текущему положению курсора.
*
*
0
ПРОГРАММИРОВАНИЕ
ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
В данном
разделе Вы ознакомитесь с возможностями компьютера
в области
мультипликации, т.е. созданием эффекта движения статичес-
ких изображений.
Этот эффект
можно достич используя динамическую и видеопамять
компьютера,
одноканальный звукогенератор, возможность сдвига и нало-
жение изображений.
Динамическая память используется для сохранения
образа подвижного
обьекта и ,возможно, образа фона изображения и не
связывает
пргограммиста с предопределенными размерами сохраняемых
фрагментов экрана.
Эффект движения
создается циклическим уничтожением обьекта в
старом положении и
выводом его образа из динамической памяти на
экран в новое
положение. Уничтожение осуществляется либо заменой
соответствующего
фрагмента экранного изображения образом фона из
динамической памяти,
либо наложением на него образа такого же обь-
екта из динамической
памяти с проведением поразрядной логической
операции
суммирования по mod 2.
Имеется
возможность создания изображения одновременно на двух
страницах
видеобуфера и таким образом осуществлять мгновенную смену
изображений на
экране дисплея.
Рассмотрим процедуры,
обеспечивающие эти возможности.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* function
ImageSize(X1,Y1,X2,Y2:word):word;
Возвращает
число байт,необходимых для сохранения прямоугольлной
области экранного
изображения.Параметры (X1,Y1),(X2,Y2) задают соот-
ветственно
координаты левого верхнего и правого нижнего узлов сохра-
няемой области
экрана. Определяемый обьем памяти включает в себя
обьем растрового
образа сохраняемой области экрана и два двухбайтных
слова, используемые
для хранения ширины Width=X2-X1+1 и высоты
heidht=Y2-Y1+1 этой
области.
Если обьем
памяти, необходимый для сохранения области экрана,
превышает или равен
64К, то функция возвращает значение 0, а вспомо-
гательная функция
GraphResult возвращает значение - 11(константа
grError). Учитывая,
что в системе Turbo-Pascal при использовании
графического
адаптера EGA независимо от графического режима полному
экрану соответствует
дисплейная страница обьемом 128К. Указанное
ограничение по
памяти эквивалентно ограничению площадей сохраняемых
областей до 1/2
площади экрана.
Для сохранения
фрагмента экрана в динамической памяти компью-
тера необходимо
создать соответствующую динамическую переменную. Это
делает процедура
GetMem.
* procedure GetMem(var
p:pointer; Size:word);
Создает новую
динамическую переменную размера Size, которая
указывает размер
динамической области в байтах, и помещает адрес
начала этого блока
памяти в ссылочную переменную p, совместимую по
типу со всеми другими
типами указателей.
На новую
динамическую переменную можно ссылаться через указа-
тель р^. Наибольший
размер блока, который можно разместить единовре-
менно, составляет 65
521 байт, наименьший - 1 байт.
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
Если
динамическая область не фрагментирована, например в нача-
ле программы,
последовательные вызовы данной процедуры возвращают
соседние блоки
памяти. Когда в динамической области недостаточно
места для размещения
новой переменной, возникает ошибка времени вы-
полнения программмы.
Чтобы избежать этого можно использовать следу-
ющую функцию.
* function
MaxAvail:longint;
Возвращает
размер наибольшего непрерывного свободного блока,
имеющегося в
динамической области памяти компьютера в текущий
момент.
* procedure
GetImage(X1,Y1,X2,Y2:word;var BitMap);
Сохраняет в
динамической памяти растровый образ заданной
прямоугольной
области экрана. Параметры (X1,Y1),(X2,Y2) - координаты
левого верхнего и
правого нижнего узлов сохраняемой области экрана.
BitMap -
нетипизированный параметр, указывающий на динамическую пе-
ременную хранения
рассматриваемого изображения,которая создается
предварительно
процедурой GetMem.
Приведем
фрагмент программы, в которой обеспечивается сохране-
ние в динамической
памяти прямоугольной области экрана с координа-
тами левого верхнего
угла (50,50) и правого нижнего угла (100,100):
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
.......
var p:pointer;
Size:word;
begin {тело программы}
........
Size:=ImageSize(50,50,100,100);
If
MaxAvail<Size then begin RestoreCrtMode;
writeln('Мало динамической памяти');
Halt(1)
end
else
begin GetMem(p,Size);
GetImage(50,50,100,100,p^);
end;
........
end. {конец программы}
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure
PutImage(X,Y:integer; var BitMap;BitBlt:word);
Выводит в
заданное место экрана хранимое в динамической памяти
растровое
изображение и при необходимости определенным образом ком-
бинирует его с
предшествующим экранным изображением.
(X,Y) -
Координаты верхнего левого угла размещения на экране
выводимого прямоугольного образа.
BitMap -
Указывает на динамическую переменную хранения выводи-
мого
изображения.
BitBlt - Определяет
поточечную операцию между имеющимся и
выводимым изображениями и может принимать значения
следующих операций:
NormalPut = 0; -
простое замещение - исходное изображение замещается
выводимым
XORPut = 1; -
сложение по модулю 2 - коды цветов одноименных то-
чек складываются по модулю 2
Например, если
точку с цветом 4(красный) вывести в точку с
цветом 4(красный),
то на экране получим точку с цветом, код которого
соответствует
значению следующего выражения:
4(10)+4(10) =
0100(2)+0100(2) = 0000(2) = 0(10) ,
т.е. получим точку
черного цвета.
OrPut = 2; -
поразрядная операция ИЛИ - выполняется поточечная
операция ИЛИ
Например,
4(10) или 4(10)=0100(2)или 0100(2)=0100(2)=4(10),
т.е. получим точку
того же цвета.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
AndPut = 3 -
поразрядная операция И - выполняется поточечная
операция И
Например,
4(10)&4(10)=0100(2)&0100(2)=0100(2)= 4(10),
т.е. получим точку
того же цвета.
NotPut = 4 -
замещение с поразрядной инверсией - полное замещени ис-
ходного изображения в области вывода
предварительно инвертированным выво-
Например,
точка с цветом 4(10) будет заменена точкой с цветом
- ----
4(10)=
0100(2) = 1011(2) = 11(10) - светло-бирюзовый
Процедура
никогда не выполняет отсечения выводимого изображе-
ния на границах
текущего окна просмотра,если при этом оно не выходит
за границы экрана.
Если же выходит, то изображение не выводится
вовсе, если это
левая верхняя или правая границы экрана,и отсекается
если это нижняя
часть.
При
неоднократном использовании динамической памяти с разными
динамическими
переменными она бысто "засоряется" и становится непри-
годной к использованию.
Чтобы этого избежать следует регулярно унич-
тожать
использованные динамические переменные. Для этого существует
в модуле Sistem
процедура Dispose.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure
Dispos(varp:pointer);
Уничтожает
динамическую переменную, на которую указывает р и
возвращает
освобожденную память в пул динамической памяти системы.
После использования
данной процедуры значение ссылочной переменной
становится
неопределенным и обращение р^ приводит к ошибке.Необходи-
мо вновь создать
динамическую переменную.
Приведем пример
программы, которая создает эффект движения по
экрану обьекта в
области 50*50 пикселов, первоначально размещенного
у левой границы
экрана, к его правой границе:
.......
var p:pointer;
I:integer;
......
begin
......
GetMem(p,ImageSize(0,50,50,100)); {выделение динамической памяти}
GetImage(0,50,50,100,p^); {сохранение обьекта в памяти}
for I:=1 to
(GetMaxX-50) do {перемещение обьекта}
begin
PutImage(I-1,50,p^,XORPut);{уничтожение обьекта в прежнем
состоянии}
PutImage(I-1,50,p^,NormalPut);{копирование обьекта в новое
end; состояние
Dispose(p); {освобождение памяти}
......
end.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
1 Проиллюстрируем
приведенный выше пример:
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure
SetActivePage(Page:word);
Направляет весь
последующий графический выод на страницу видео-
буфера, задаваемую
параметром Page. Эта страница может и не отобра-
жаться в это время
на экране дисплея. Таким образом обеспечивается
построение новых
изображений за счет времени просмотра текущих,чтобы
затем мгновенно
обновить экран и создать эффект движения.
Лабораторные
компьютеры поддерживают двухстраничную организацию
видеобуфера.
Страницы имеют номера 0 и 1 и графический вывод
по умолчанию
осуществляется на 0-ю страницу.
* procedure
SetVisualPage(Page:word);
Задает номер
Page отображаемой на экран дисплейной страницы
видеобуфера. По
умолчанию визуализируется страница, на которую нап-
равляется
графический вывод.
Приведем
пример программы, обеспечивающей создание эффекта
перемещения обьекта
как в предыдущем примере:
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
......
var:integer;
......
begin
......
{по умолчанию вывод и визуализация 0-страницы}
for I:=1
to(GetMaxX-50) do
{перемещение обьекта}
begin
Bar(I-1,50,I+50-1,100);
{формирование обьекта в (I-1)положении}
SetActivePage(1);
{установка вывода на 1-ю страницу}
ClearDevice;
{очистка 1 страницы}
Bar(I,50,I+50,100);
{формирование обьекта в I положении}
SetVisualPage(1);
{визуализация 1 страницы}
SetActivePage(0);
{установка вывода на 0-ю страницу}
ClearDevice;
{очистка 0-й страницы}
end;
......
end.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure
Sound(Frequency:word);
Включает
внутренний звукогенератор компьютера. Параметр
Frequency задает
частоту генерации однотонального звука в герцах
в диапазоне от 37 до
32767.
Частоты первой октавы нотного ряда
--------------------------------------------------------------------
Ноты До
Ре Ми Фа Соль Ля Си
--------------------------------------------------------------------
Частоты 523,3
587,3 659,3 698,5 784,0 880,0 987,7
--------------------------------------------------------------------
Частоты нот
каждой более высокой или низкой октавы прибли-
женно получаются
удвоением или делением на 2 частот одноименных нот
последующей или предыдущей
октавы соответственно.
Звуковой
генератор работает под управлением специальной мик-
росхемы-таймера и
центральный процессор после выполнения процедуры
Sound можежтж
продолжать вычислительный процесс одновременно с рабо-
той звукогенератора.
* procedure
NoSond;
Прекращает
работу звукогенератора. Приведем фрагмент программы
программы,
обеспечивающий воспроизведение ноты "До" в течение 3 сек.
...... Sound(523);
Delay(3000);
NoSound; ......
ПРОГРАММИРОВАНИЕ
ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
2 Приведем
пример использования описанных выше процедур.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* function
ReadKey:char;
Считывает
символ с клавиатуры не отображая его на экран. Если
перед обращением к
данной функции функция KeyPressed имела значение
true , то символ
считывается немедленно, в пртивном случае функция
ожидает нажатия
клавиши.
Обычные
алфавитно-цифровые клавиши возвращают однобайтные коды
в стандарте ASCII.
Специальные клавиши (управление курсором, Alt,
Ctrl и т.п. при
нажатии возвращают расширение, двухбайтные коды
ASCII. При нажатии
специальной клавиши функция возвращает сначала
нулевой символ
null,а затем расширенный код клавиши.
Нулевые символы
не могут быть получены никаким другим путем.
Этим обеспечивается
то, что следующим символом будет расширенный код
клавиши.
В качестве
расширения стандарт языка разрешает вставлять в
строку символов
управляющие символы, например #.
Приведем
фрагмент программы, в котором в переменную с именем Ch
считывается символ
или расширенный код клавиши и для переменой
FuncKey булевского
типа устанавливается значение true, если символ
является кодом
специальной клавиши:
......
Ch:=ReadKey;
If Ch<> # then
FuncKey:=False
else
begin
FuncKey:=true;
Ch:=ReadKey
end;
......
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure
SetWriteMode(WriteMode:integer);
Устанавливает
режим записи при вычерчивании линий с помощью
процедур
формирования прямолинейных изображений (кроме процедуры
Bar3D). Процедура
описана в модуле Craph. Параметр может принимать
следующие значения:
CopyPut = 0 -
простое замещение - вычерчиваемая линия "затирает" то,
что было на экране.
XORPut = 1 -
сложение по mod 2 - обеспечивается комбинирование вы-
водимой линии с экранным изображе-
нием на основе выполнения поточеч-
ной поразрядной операции суммиро-
вания по модулю2.
Важно, что два
одинаковых вывода на экран в режиме XORPut при-
ведут сначала к
стиранию линии на экране, а затем в восстановлению
исходного экранного
изображения.
0
01КАКОВЫ
ФУНКЦИИ ПРОЦЕДУРЫ ImageSize?
1 Создание новой динамической переменной.
2 Сохранение в динамической памяти растрового образа заданной
прямоугольной области экрана.
3 Возвращение числа байт, необходимых для сохранения прямоугольной
области экранного изображения.
4 Вывод в заданное место экрана хранимого в динамической памяти
растрового изображения.
*
02КАКОЕ
СУЩЕСТВУЕТ ОГРАНИЧЕНИЕ ПО ПЛОЩАДИ СОХРАНЯЕМЫХ В ДИНАМИЧЕСКОЙ ПАМЯТИ ОБЛАСТЕЙ
ЭКРАНА?
1 Ограничений нет.
2 Не более одного экрана.
3 Не более 1/2 экрана.
4 Не более 1/4 экрана.
*
ОЗТРЕБУЕТСЯ
ЛИ КОНТРОЛИРОВАТЬ РАЗМЕР СВОБОДНОЙ ДИНАМИЧЕСКОЙ ПАМЯТИ?
1 Да. С помощью функции MaxAvail.
2 Да. С помощью процедуры GetMem.
3 Нет, не требуется. Размер динамической памяти не ограничен.
4 Да, требуется. Контроль осуществляется с помощью процедуры Dispose.
*
04КАКОГО
ЦВЕТА БУДЕТ ВЫВЕДЕНО ИЗОБРАЖЕНИЕ ТОЧКИ НА ЭКРАНЕ, ЕСЛИ ТОЧКУ КРАСНОГО (4)
ЦВЕТА ЗАМЕСТИТЬ С ПОМОЩЬЮ ПРОЦЕДУРЫ Putlmage
(X,Y,p~,XORPut) точкой синего (1) цвета?
1 Черного (0).
2 Светло-бирюзового(11).
3 Красного (4).
4
Малиновый(5).
*
05КАКУЮ
ОРГАНИЗАЦИЮ ВИДЕОБУФЕРА ПОДДЕРЖИВАЮТ ЛАБОРАТОРНЫЕ КОМПЬЮТЕРЫ IBM PC С АДАПТЕРОМ EGA ПРИ ИСПОЛЬЗОВАНИИ ЯЗЫКА TURBO-PASCAL?
1 Одностраничную.
2 Двухстраничную.
3 Трехстраничную.
4 Четырехстраничную.
*
06С ПОМОЩЬЮ
КАКОЙ ПРОЦЕДУРЫ УСТАНАВЛИВАЕТСЯ СТРАНИЦА ВИДЕОБУФЕРА, НА КОТОРУЮ НАПРАВЛЯЕТСЯ
ПОСЛЕДУЮЩИЙ ГРАФИЧЕСКИЙ ВЫВОД?
1 SetVisualActivePage
2 SetWriteMode
3 Dispose
4 SetActivePage
*
07КАКОВЫ
ФУНКЦИИ ПРОЦЕДУРЫ SetWriteMode?
1 Считывание символа с клавиатуры не отображая его на экран.
2 Установка режима записи при вычерчивании линий с помощью процедур
формирования прямолинейных изображений.
3 Устанавливает номер страницы видеобуфера, на которую осуществляется
последующий графический вывод.
4
устанавливает номер визуализируемой страницы видеобуфера.
*
О
011Ответ неверный. Эту функцию осуществляет
процедура GetMem. 002
*
2Ответ неверный. Эту функцию
осуществляет процедура GetImage. 002
*
3Ответ
правильный. 005
*
4Ответ неверный. Эту функцию
осуществляет процедура PutImage. 002
*
*
021Ответ неверный. Объем памяти,
необходимый для сохраненеия области 002 экрана, не должен быть равен или
превышать 64К, что соответствует 1/2 площади экрана.
*
2Ответ неверный. Объем памяти,
необходимый для сохраненеия области 002 экрана, не должен быть равен или
превышать 64К, что соответствует 1/2 площади экрана.
*
3Ответ
правильный. 005
*
4Ответ неверный. Объем памяти,
необходимый для сохраненеия области 002 экрана, не должен быть равен или
превышать 64К, что соответствует 1/2 площади экрана.
*
*
031Ответ првильный. Функция MaxAvail
возвращает наибольший непрерывный 005 свободный блок, имеющийся в динамической
области памяти в текущий момент.
*
2Ответ неверный. Контроль требуется,
однако, процедура GetMem 003 выполняет другие функции.
*
3Ответ неверный. Если в динамической
области недостаточно места для 002 размещения новой переменной, возникает
ошибка времени выполнения программы. Чтобы этого избежать следует пользоваться
функцией MaxAvail, которая возвращает размер наибольшего непрерывного
свободного блока динамической области памяти.
*
4Ответ неверный. контроль требуется, но
с помощью функции MaxAvail. 003
*
*
041Ответ неверный. При использовании в
качестве значения параметра 002 BitBlt константы XORPut коды цветов точек
складываются по модулю 2:
4(10) + 1(10) = 0100(2) + 0001(2) = 0101(2)
= 5(10)
*
2Ответ неверный. При использовании в
качестве значения параметра 002
BitBlt константы XORPut коды цветов
точек складываются по модулю 2:
4(10) + 1(10) = 0100(2) + 0001(2)
= 0101(2) = 5(10)
*
3Ответ неверный. При использовании в
качестве значения параметра 002 BitBlt константы XORPut коды цветов точек
складываются по модулю 2:
4(10) + 1(10) = 0100(2) + 0001(2)
= 0101(2) = 5(10)
*
4Ответ
правильный. 005
*
*
051Ответ неверный. Эти компьютеры имеют
двухстраничную организацию 002 видеобуфера.
*
2Ответ правильный.
005
*
3Ответ неверный. Эти компьютеры имеют
двухстраничную организацию 002 видеобуфера.
*
4Ответ неверный. Эти компьютеры имеют
двухстраничную организацию 002 видеобуфера.
*
*
061Ответ неверный. процедура SetVisualPage
задает номер отображаемой на 002 экран дисплейной страницы видеобуфера.
*
2Ответ неверный. Процедура SetWriteMode
выполняет другие функции. 002
*
3Ответ неверный. Процедура Dispose
выполняет другие функции. 002
*
4Ответ
правильный. 005
*
*
071Ответ неверный. Процедура SetWriteMode
устанавливает режим записи 002 при вычерчивании линий с помощью процедур
формирования прямоугольных изображений.
*
2Ответ
правильный. 005
*
3Ответ неверный. Процедура SetWriteMode
устанавливает режим записи 002 при вычерчивании линий с помощью процедур
формирования прямоугольных изображений.
*
4Ответ неверный. Процедура SetWriteMode
устанавливает режим записи 002 при вычерчивании линий с помощью процедур
формирования прямоугольных изображений.
*
*
0
Приложение
3
Экранные
формы