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

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

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

 
 Ответить  Открыть новую тему 
> Подскажите, как правильно написать и оформить функции
сообщение
Сообщение #1


Новичок
*

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

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


Пусть дана вещественная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки размера n, так:
а) крест-накрест;
б) по часовой стрелке.
Для обмена четырех заданных фрагментов матрицы напишите функцию.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

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

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


Покажите, а что вы уже сделали.
Поймите и меня - нет желания плодить неграмотность.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Федосеев Павел @ 18.04.2016 22:19) *

Покажите, а что вы уже сделали.
Поймите и меня - нет желания плодить неграмотность.

Только сейчас заметила сообщение. Выдает ошибку, что "Индекс находился вне границ массива"
const n=2;
type matr=array[1..2*n,1..2*n] of integer;
var a:matr;
procedure vv_mas (var x:matr; s:string; f:boolean);
var i,j:integer;
begin
writeln(s);
for i:=1 to 2*n do
for j:=1 to 2*n do
readln (x[i,j]);
writeln;
for i:=1 to 2*n do
begin
for j:=1 to 2*n do
write (x[i,j]:3);
writeln;
end;
end;
procedure swap2 (var x:matr; s:string);
var i,j,a,b,c,d:integer;
begin
for i:=1 to 2*n do
for j:=1 to 2*n do
begin
a:=x[i,j];
b:=x[i,j+n-1];
c:=x[i+n-1,j+n-1];
d:=x[i+n-1,j];
x[i,j]:=d;
x[i,j+n-1]:=a;
x[i+n-1,j+n-1]:=b;
x[i+n-1,j]:=c;
end;
for i:=1 to 2*n do
begin
for j:=1 to 2*n do
write(x[i,j]:3);
writeln;
end;
end;
Begin
vv_mas (a, 'A:', true);
swap2(a, 'A:')
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

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

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


Вы молодец!
В swap2 несколько ошибок.
1. оба цикла по i и по j должны быть до n. Ведь мы перемещаем по часовой стрелке только один блок, а остальные перемещаются в ходе сдвига.
2. в индексах лишние вычитания 1.
Исправьте и всё заработает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

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

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


Я попробовал самостоятельно свои процедуры, но и вашу поправил.

Смотрите. В задании сказано, что числа действительные - т.е. real, а не integer. Для отладки я также использовал integer, но вам следует заменить.
const
n = 2;
n2 = 2 * n;
type
TType = integer;
matr = array[1..n2, 1..n2] of TType;

procedure Show(var M: matr);
var
i, j: integer;
begin
for i := 1 to n2 do
begin
for j := 1 to n2 do
Write(M[i, j]: 3);
writeln;
end;
end;

procedure vv_mas(var x: matr; s: string; f: boolean);
var
i, j: integer;
begin
writeln(s);
for i := 1 to n2 do
for j := 1 to n2 do
{readln(x[i, j]);}
x[i, j] := i * 10 + j;
writeln;
end;

procedure SwapAB(var A, B: TType);
var
t: TType;
begin
t := A;
A := B;
B := t;
end;

{перестановка крест-накрест}
procedure SwapX(x: matr);
var
i, j: integer;
begin
for i := 1 to n do
for j := 1 to n2 do
SwapAB(x[i, j], x[n + i, (n + j - 1) mod n2 + 1]);
Show(x);
end;

{перестановка по часовой стрелке}
procedure SwapC(x: matr);
var
i, j: integer;
t: TType;
begin
for i := 1 to n do
for j := 1 to n do
begin
SwapAB(x[i, j], x[i + n, j]);
SwapAB(x[i + n, j], x[i + n, j + n]);
SwapAB(x[i + n, j + n], x[i, j + n]);
end;
Show(x);
end;

procedure swap2(x: matr; s: string);
var
i, j, a, b, c, d: integer;
begin
for i := 1 to n do
for j := 1 to n do
begin
a := x[i, j];
b := x[i, j + n];
c := x[i + n, j + n];
d := x[i + n, j];
x[i, j] := d;
x[i, j + n] := a;
x[i + n, j + n] := b;
x[i + n, j] := c;
end;
for i := 1 to 2 * n do
begin
for j := 1 to 2 * n do
Write(x[i, j]: 3);
writeln;
end;
end;

var
a: matr;
begin
vv_mas(a, 'A:', True);
Show(a);
writeln('Перестановка исходной матрицы крест-накрест');
SwapX(a);
writeln('Перестановка исходной матрицы по часовой стрелке');
SwapC(a);
writeln('swap2');
swap2(a, '----A');
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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