Цитата:
Сообщение от Ford
Мне нужно произвести циклический сдвиг столбцов таблицы на заданное число позиций.
|
Ну что уж тут поделаешь, раз нужно... Получите, мистер Форд:
Код:
program tablica;
uses crt;
const
max_s= 50;
max_d= 50;
k=99;
TYPE
AR=array[1..max_d,1..max_s] of integer;
var
a:AR;
MVcol:ARRAY[1..max_s] of integer;
d,s,i,j,sh: integer;
PROCEDURE Table_Inp(Dti,Sti:INTEGER; VAR Ati:AR);
VAR
i,j,z:INTEGER;
BEGIN
repeat
clrscr;
writeln ('Choose the method of table infilling');
writeln ('1- from keyboard');
writeln ('2- random values');
readln (z);
until (z=1) or (z=2);
if z=1 then
begin
for i:=1 to Dti do
for j:=1 to Sti do
begin
write('Enter the value a[',i,',',j,'] ');
readln (Ati[i,j]);
end;
end
else
begin
randomize;
for i:=1 to Dti do
for j:=1 to Sti do
Ati[i,j]:=random (k);
end;
clrscr;
for i:=1 to Dti do
begin
for j:=1 to Sti do
write(Ati[i,j]:3);
writeln;
end;
writeln;
END; {Table_Inp}
PROCEDURE Table_Shift(Dti,Sti,DT:INTEGER; VAR Ati:AR);
VAR
i,j,z:INTEGER;
Bti:Ar;
BEGIN
for j:=1 to Sti do
begin
if j+DT>Sti then z:=(j+DT) mod Sti else z:=j+DT;
for i:=1 to Dti do Bti[i,z]:=Ati[i,j];
end;
Ati:=Bti;
for i:=1 to Dti do
begin
for j:=1 to Sti do
write(Ati[i,j]:3);
writeln;
end;
END; {Table_Shift}
begin
repeat
clrscr;
write('Enter the table length. Maximum value is ' ,max_d,' ');
readln(d)
until (d>=1) and (d<= max_d);
{clrscr; }
repeat
clrscr;
write('Enter the table width. Maximum value is ' ,max_s,' ');
readln(s)
until (s>=1) and (s<= max_s);
Table_Inp(d,s,a);
write('Enter the shift ');
readln(Sh);
Table_Shift(d,s,Sh,a);
Readln;
end.