Показать сообщение отдельно
Старый 23.12.2013, 20:58   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070