Нарисовать квадрат в квадрате, что бы делил стороны на 0.08 — Pascal(Паскаль)

program lab2;
uses crt,graph;
const p=0.08;
type square=record
           x1,y1,x2,y2,x3,y3,x4,y4:integer;
           end;
     matr=array[1..20,1..40] of square;
//создадим матрицу квадратов
procedure CreateMatr(r,c,k1:byte;var a:matr);
var i,j:byte;
begin
for i:=1 to r do
for j:=1 to c do
 begin
  a[i,j].x1:=i*k1;a[i,j].y1:=j*k1;
  a[i,j].x2:=(i+1)*k1;a[i,j].y2:=j*k1;
  a[i,j].x3:=(i+1)*k1;a[i,j].y3:=(j+1)*k1;
  a[i,j].x4:=i*k1;a[i,j].y4:=(j+1)*k1;
 end;
end;
//прорисовка 1 квадрата
procedure DrawEl(s:square); {прорисовка квадрата}
begin
setcolor(5); line(s.x1,s.y1,s.x2,s.y2);
setcolor(9); line(s.x2,s.y2,s.x3,s.y3);
setcolor(13); line(s.x3,s.y3,s.x4,s.y4);
setcolor(1); line(s.x4,s.y4,s.x1,s.y1);
end;
//прорисовка матрицы
procedure DrawMatr(r,c:integer;var a:matr);
var i,j:byte;
begin
for i:=1 to r do
for j:=1 to c do
DrawEl(a[i,j]);
end;
procedure ToRight(var s:square); {квадрат крутится вправо}
begin
s.y1:=s.y1+round((s.y2-s.y1)*p); s.x1:=s.x1+round((s.x2-s.x1)*p);
s.y2:=s.y2+round((s.y3-s.y2)*p); s.x2:=s.x2+round((s.x3-s.x2)*p);
s.y3:=s.y3-round((s.y3-s.y4)*p); s.x3:=s.x3-round((s.x3-s.x4)*p);
s.y4:=s.y4-round((s.y4-s.y1)*p); s.x4:=s.x4-round((s.x4-s.x1)*p);
end;
procedure ToLeft(var s:square); {квадрат крутится влево}
begin
s.y1:=s.y1+round((s.y4-s.y1)*p); s.x1:=s.x1+round((s.x4-s.x1)*p);
s.y2:=s.y2-round((s.y2-s.y1)*p); s.x2:=s.x2-round((s.x2-s.x1)*p);
s.y3:=s.y3-round((s.y3-s.y2)*p); s.x3:=s.x3-round((s.x3-s.x2)*p);
s.y4:=s.y4+round((s.y3-s.y4)*p); s.x4:=s.x4+round((s.x3-s.x4)*p);
end;
 
{MainProg}
var m:matr;
    bx,by,k1,gd,gm:integer;
    k,i,j,n,r,c:byte;{n-кол. квадратов,r-rows,c-cols}
    choice:char;{для запроса}
begin
writeln('Настройки по умолчанию или нет (y/n)');
readln(choice);
case choice of
'y':begin
    r:=2;
    c:=3;
    n:=50;
    k1:=50;
    bx:=10;
    by:=10;
    end;
'n':begin
    writeln('Сколько раз прорисовывать квадрат?');
    readln(n);
    writeln('Введите кол. строк и кол. квадратов в строке');
    readln(r,c);
    writeln('Введите начальные координаты x и y и длину стороны квадрата');
    readln(bx,by,k1);
    end;
else
    begin
    writeln('Неправильный выбор');
    readln;
    halt;
    end;
end;{case}
gd:=0;
initgraph(gd,gm,'d:\bp\bgi');
CreateMatr(r,c,k1,m);//создаем
DrawMatr(r,c,m);//выводим начальные квадраты
for k:=1 to n-1 do
 begin
  delay(60);//задержка, у тебя 6000
  for i:=1 to r do
  for j:=1 to c do
  if odd(i) then ToRight(m[i,j])/нове координаты
  else ToLeft(m[i,j]);
  DrawMatr(r,c,m);//рисуем
 end;
readln
end.

Leave a Comment

58 − = 57