IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Циклический Здвиг в матрице, Помогите решить плиз...
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Произвести циклический здвиг столбцов двух мерного массива k раз, где k простое число
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, и что? Задание как задание... Где твои собственные попытки решения, где ход мыслей, что и как хочешь сделать, но не получается?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


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.


Сообщение отредактировано: dae-woo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


dae-woo, вы хоть компилировать пробовали??? попробуйте.

Добавлено через 11 мин.
обмен можна сделать так: сохранить в одномерном массиве столбец (k ый, на место которого будет ставиться следующий) - что вы и сделали, а потом все остальные просто перемещать на к столбцов в сторону. главное разобраться чтобы не выйти за края массива.

Добавлено через 2 мин.
тут должно быть еще хорошее решение с помощью move, но к сожалению я с ним работать не умею.
volvo, если не тяжело, покажите еще раз как это делается.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






И не лень мне играться
Вот эта компилится good.gif
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 Учите русский язык и поиск по форуму для вас заработает good.gif blum.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата(Хе-хе @ 10.10.2009 2:17) *

{А вот тут ваши действия}
end.



всмысле мои действия?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(amega)
тут должно быть еще хорошее решение с помощью move, но к сожалению я с ним работать не умею.
В принципе, тут и Move ни разу не нужен, если задать матрицу "фортрановским способом", как массив столбцов. Тогда со столбцами можно работать как с любой другой переменной, безо всяких Move... Вот тут глянь: Как задать матрицу, чтобы быстро поменять местами ее столбцы ?

Цитата
всмысле мои действия?
Ну, процедуры тебе показали, тебе осталось их ВЫЗВАТЬ... Это ты уже сам как-нибудь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


спасибо good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 7:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name