patsu4ok
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору program SDA_V2; uses Crt; const m=15; n=10; type vector = array [1..m,1..n] of char; var A: vector; procedure fillVector(var arr:vector; m:integer; n:integer); var i,j: byte; begin for i:=1 to m do for j:=1 to n do arr[i,j]:= '*'; end; procedure showVector(arr:vector; m:integer; n:integer); var i,j: Integer; begin GotoXY(1,14); TextColor(Black); for i:=1 to m do begin for j:=1 to n do write (arr[i,j]); writeln; end; end; procedure vectorWalk(var a:vector; rows:Integer; cols:Integer); var i,j,p,k,min: integer; flag:shortint; begin flag:=99; TextBackground(Blue); TextColor(White); if rows<cols then begin min:=rows; if min mod 2 =1 then flag:=1; end; if cols<rows then begin min:=cols; if min mod 2 =1 then flag:=0; end; if cols=rows then begin min:=rows; if min mod 2 =1 then flag:=-1; end; k:=min div 2; for p:=1 to k do begin Delay(200); GotoXY(p,rows-p+1); for j:=p to cols-p+1 do begin write(a[rows-p+1,j]); Delay(200); end; Delay(200); for i:=rows-p downto p do begin GotoXY(cols-p+1,i); write(a[i,cols-p+1]); Delay(200); end; Delay(200); for j:=cols-p downto p do begin GotoXY(j,p); write(a[p,j]); Delay(200); end; Delay(200); for i:=p+1 to rows-p do begin GotoXY(p,i); write(a[i,p]); Delay(200); end; end; if flag=1 then begin { row<col} GotoXY(k+1,rows-k); for j:=k+1 to cols-k do begin Delay(200); write(a[k+1,j]); end; end; if flag=0 then begin { col<row } for i:=rows-k downto k+1 do begin GotoXY(cols-k,i); write(a[i,cols-k]); Delay(200); end; end; if flag=-1 then write(a[k+1,k+1]); { row=col } GotoXY(1,rows+1); writeln; end; Begin TextBackground(White); ClrScr; fillVector(A,m,n); { showVector(A,m,n); } vectorWalk(A,m,n); TextBackground(Black); TextColor(White); write('.'); readln; END. Как изменить , чтобы обход начинался снизу вверх справа по столбцу?? |