Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Нужно произвести циклический сдвиг (http://www.tehnari.ru/f41/t93317/)

Ford 23.12.2013 18:26

Нужно произвести циклический сдвиг
 
Мне нужно произвести циклический сдвиг столбцов таблицы на заданное число позиций.
Цитата:

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, Min_Max: 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
begin
for j:=1 to Sti do
begin
write('Enter the value a[',i,',',j,'] ');
readln (Ati[i,j]);
end;
end;
end;

if z=2 then
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;
readln;
END; {Table_Inp}


begin
d:=-1;
s:=-1;

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);
Readln;
end.

Vladimir_S 23.12.2013 20:58

Цитата:

Сообщение от Ford (Сообщение 984036)
Мне нужно произвести циклический сдвиг столбцов таблицы на заданное число позиций.

Ну что уж тут поделаешь, раз нужно... Получите, мистер Форд:
Код:

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.


Ford 23.12.2013 22:03

Большое спасибо


Часовой пояс GMT +4, время: 17:05.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.