Произвести циклический здвиг столбцов двух мерного массива k раз, где k простое число
volvo
9.10.2009 2:45
Ну, и что? Задание как задание... Где твои собственные попытки решения, где ход мыслей, что и как хочешь сделать, но не получается?
dae-woo
9.10.2009 23:09
volvo вот можеш под править?
program lab_4; const cols=4; rows=3; k=3; type Array2D:array [1..rows] of array [1..cols] of double;
procedure enter(var m:Array2D; name:string); var i,j:integer; begin for i:=1 to rows do for j:=1 to cols do begin write(name,'[',i,',',j,']=? '); read(m[i,j]); end; end;
procedure print(m:Array2D; name:string); var i,j:integer; begin writeln('Array ',name,' = {'); for i:=1 to rows do begin write(' '); for j:=1 to cols do begin write(m[i,j],' '); end; writeln; end; writeln('}'); end;
procedure generate(var m:Array2D); var i,j:integer; begin for i:=1 to cols do for j:=1 to rows do m[i,j]:=1.0/(i+j-1.0); end;
procedure ShiftColumns(k : word; var arr : Array2D); procedure Shift(var arr : Array2D); var i,j:integer; tmp:double; begin for i:=1 to rows do begin tmp:=m[i,cols]; for j:=1 to cols-1 do begin m[i,j+1]:=m[i,j]; end; m[i,1]:=tmp; end; end; var i:integer; begin for i:=k downto 1 do Shift(arr); end;
begin end.
sheka
10.10.2009 1:06
dae-woo, вы хоть компилировать пробовали??? попробуйте.
Добавлено через 11 мин. обмен можна сделать так: сохранить в одномерном массиве столбец (k ый, на место которого будет ставиться следующий) - что вы и сделали, а потом все остальные просто перемещать на к столбцов в сторону. главное разобраться чтобы не выйти за края массива.
Добавлено через 2 мин. тут должно быть еще хорошее решение с помощью move, но к сожалению я с ним работать не умею. volvo, если не тяжело, покажите еще раз как это делается.
Хе-хе
10.10.2009 6:17
И не лень мне играться Вот эта компилится
program Arr2D; const cols=4; rows=3; k=3; type Array2D= array [1..rows] of array [1..cols] of double;
procedure enter(var m:Array2D; name:string); var i,j:integer; begin for i:=1 to rows do for j:=1 to cols do begin write(name,'[',i,',',j,']=? '); read(m[i,j]); end; end;
procedure print(m:Array2D; name:string); var i,j:integer; begin writeln('Array ',name,' = {'); for i:=1 to rows do begin write(' '); for j:=1 to cols do begin write(m[i,j],' '); end; writeln; end; writeln('}'); end;
procedure generate(var m:Array2D); var i,j:integer; begin for i:=1 to cols do for j:=1 to rows do m[i,j]:=1.0/(i+j-1.0); end; procedure ShiftColumns(k : word; var arr : Array2D); procedure Shift(var arr : Array2D); var i,j:integer; tmp:double; m:Array2D; begin for i:=1 to rows do begin tmp:=m[i,cols]; for j:=1 to cols-1 do begin m[i,j+1]:=m[i,j]; end; m[i,1]:=tmp; end; end; var i:integer; begin for i:=k downto 1 do Shift(arr); end;
begin {А вот тут ваши действия} end.
dae-woo Учите русский язык и поиск по форуму для вас заработает
dae-woo
10.10.2009 15:41
Цитата(Хе-хе @ 10.10.2009 2:17)
{А вот тут ваши действия} end.
всмысле мои действия?
volvo
10.10.2009 15:48
Цитата(amega)
тут должно быть еще хорошее решение с помощью move, но к сожалению я с ним работать не умею.
В принципе, тут и Move ни разу не нужен, если задать матрицу "фортрановским способом", как массив столбцов. Тогда со столбцами можно работать как с любой другой переменной, безо всяких Move... Вот тут глянь: Как задать матрицу, чтобы быстро поменять местами ее столбцы ?
Цитата
всмысле мои действия?
Ну, процедуры тебе показали, тебе осталось их ВЫЗВАТЬ... Это ты уже сам как-нибудь...
dae-woo
10.10.2009 16:37
спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.