Министерство Связи РФ СибГУТИ
вариант №26.
Выполнила: Юрова ИИ
Гр П-13
Проверила: Бах ОА
Дата:
Задачи.
1. Два пpоцесса: пеpвый читает инфоpмацию из файла (напpимеp, стихи или текст пpогpаммы) в буфеp, втоpой эту инфоpмацию из буфеpа выдает на экpан. Использовать скроллинг.
2. Два пpоцесса: один выполняет поиск всех последовательных пpостых чисел и заносит их в буфеp, втоpой осуществляет их вывод из буфеpа на экpан (по материалам лаб. работы №7).
3. Два пpоцесса: один генеpиpует случайные числа и выбиpает в буфеp те, котоpые являются полным квадpатом, втоpой выводит их из буфеpа на экpан (по материалам лаб. работы №7).
4. В огpаниченной области экpана pазместить движущийся объект (напpимеp, летающий и отpажающийся от гpаниц окна шаpик).
Procedure Ramka(x1,x2,y1,y2:integer)
Рисует рамки для всех процессов и меню. При вызове процедуры передаются параметры левого верхнего угла (х1), правого верхнего (х2), левого нижнего (у1) и правого нижнего угла (у2).
Procedure Process1
Генерирует квадраты чисел. Берем рандомом любое число (j) и проверяем, если round(sqrt(j))-sqrt(j)=0, то оно является полным квадратом и мы его заносим в буфер квадратов.
Procedure Process2
Осуществляет вывод занесенных в буфер полных квадратов.
Procedure Process3
Процедура считывает информацию из файла (пока не конец файла), за раз считывает 50 символов и передает управление другому процессу.
Procedure Process4
Процедура выводит считанный в буфер текст в заданном окне.
Procedure Process5(x1,x2,y1,y2:integer)
Процедура осуществляет движение объекта в заданном окне(параметры окна задаются при вызове процедуры).
Procedure Process6
Процедура осуществляет генерацию простых чисел. Поиск простого числа осуществляется путем проверки остатка от деления числа w на k, меняющегося от 2 до round(sqrt(w+1)). Если число простое, то оно заносится в буфер простых чисел.
Procedure Process7
Осуществляет вывод занесенных в буфер простых чисел.
Procedure New_KeyBoard
Процедура предназначена для того, чтобы работать с клавишами меню. При первом нажатии на клавишу процесс приостанавливает работу, при повторном нажатии – возобновляет.
Procedure New_Timer
Процедура проверяет, если Flag[n]=True, то n процесс становится активным.
Uses Crt, Dos;
Const b = 100;
b1= 100;
t = 50;
Var
Old_Timer: Procedure;
Old_KeyBoard: Procedure;
xx,yy,vx,vy,m,p,i,j,Kvant,Free,Free1,w,k,l: Integer;
n1,n2,X,Y,code,GoX,GoY,GoX1,GoY1: Integer;
fll:boolean;
F: File of Char;
Pn: Array [1..8] Of Boolean;
Flag: array [1..8] of Boolean;
Buffer_Sqrt: Array [1..b] Of Integer;
Buffer_Sim: Array [1..b] of Integer;
Buffer_Text: Array [0..t-1] Of Char;
Procedure Ramka(x1,x2,y1,y2:integer);
var i:integer;
begin
gotoxy(x1,y1);
write('Й');
for i:=x1+1 to x2-1 do
write('=');
write('»');
for i:=y1+1 to y2-1 do
begin
gotoxy(x1, i);
write('||');
gotoxy(x2, i);
write('||');
end;
gotoxy(x1,y2);
write('И');
for i:=x1+1 to x2-1 do
write('=');
write('ј');
end;
Procedure Process1;{gen sqr}
Begin
If Free = 0 Then Pn[1]:=False;
While Pn[1] and (Free>0) Do
Begin
j:=Random(500);
If round(sqrt(j))-sqrt(j)=0 then
Begin
i:=b+1-Free;
Buffer_Sqrt[i]:=j;
Free:=Free-1;
End;
End;
End;
Procedure Process2;{viv sqr}
Begin
Textcolor(9);
Ramka(50,73,2,12);
TextColor(LightMagenta);
GotoXY(61,3);
Writeln('Sqr');
If Free = b Then Pn[2]:=False;
While Pn[2] and (Free<b) Do
Begin
if GoX>65 then begin GoX:=52;inc(GoY); end;
if GoY=12 then GoY:=4;
i:=b-Free;
GotoXY(GoX,GoY);
Write(Buffer_Sqrt[i]:4);
Free:=Free+1;
GoX:=GoX+4;
Delay(10);
End;
End;
Procedure Process3;{read}
Begin
While (Pn[3]) do
If not eof(F) Then
Begin
If n2=n1 Then Begin Pn[3]:=False; Break; End;
Read(F,Buffer_Text[n2]);
n2:=(n2+1)mod(t);
End
Else
Begin
Close(F);
Reset(F);
If n2=n1 Then Begin Pn[3]:=False; Break; End;
Read(F,Buffer_Text[n2]);
n2:=(n2+1)mod(t);
End;
End;
Procedure Process4;{print}
Begin
Textcolor(10);
Ramka(44,73,13,25);
Window(45,14,71,24);
GotoXY(X,Y);
While (Pn[4]) do
Begin
If (n1+1)mod(t)=n2 Then Begin Pn[4]:=False; Break; End;
TextColor(White);
Write(Buffer_Text[n1]);
n1:=(n1+1)mod(t);
End;
X:=WhereX;
Y:=WhereY;
Window(1,1,80,25);
End;
Procedure Process5(x1,x2,y1,y2:integer);{object}
var i : integer;
begin
if (fll=not true) then
begin
xx:=x1+1;
yy:=y1+1;
TextColor(14);
ramka(x1,x2,y1,y2);
fll:=true;
end
else
begin
textcolor(0);
gotoxy(xx,yy);
write('_');
xx:=xx+vx;
yy:=yy+vy;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.