Смекни!
smekni.com

Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x (стр. 16 из 24)

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);

St:=StrPas(A.P2); {Преобразование ASCIIZ-строки A.P2 в строку

типа 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);

SetFillStyle(4,2);

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;