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

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

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

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





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

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


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


Гость






Ну, и что? Задание как задание... Где твои собственные попытки решения, где ход мыслей, что и как хочешь сделать, но не получается?
 К началу страницы 
+ Ответить 
dae-woo
сообщение 9.10.2009 19:09
Сообщение #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 - 9.10.2009 19:20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 9.10.2009 21:06
Сообщение #4


Я.
****

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

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


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

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

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

Сообщение отредактировано: sheka - 9.10.2009 21:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Хе-хе
сообщение 10.10.2009 2:17
Сообщение #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
 К началу страницы 
+ Ответить 
dae-woo
сообщение 10.10.2009 11:41
Сообщение #6





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

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


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

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



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


Гость






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

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





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

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


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

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

 

- Текстовая версия 22.07.2025 20:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"