Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачи с матрицами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dead.MorozZ
Помогите с задачкой справиться PlzZ:
1. Заменить
 Минимальный элемент в каждой строке на противоположный по знаку;
 Все элементы первых трех столбцов на их квадраты;
 Все симметричные элементы квадратной матрицы на нули.
2. Поменять местами
 Средние столбцы;
 Средние строки с первой и последней;
 Средние столбцы со вторым и предпоследним;
 Средние строки;
 Первый максимальный и последний минимальный элементы;
 В каждой строке первый отрицательный и последний положительный;
 Первую строку и строку, в которой находится первый нулевой элемент;
 Вторую и предпоследнюю строки;
 Первую строку с последней строкой, вторую – с предпоследней и так далее;
volvo
To: Dead.MorozZ
Ты бы поиском сначала воспользовался. Ибо решать уже решенное (да еще и с таким количеством заданий) - nea.gif Вот если будут КОНКРЕТНЫЕ вопросы, тогда задавай...
Dead.MorozZ
Может ссылку даш, а то найти не могу. А вопросы чувствую скоро появятсяsmile.gif
volvo
Ну, например, при использовании вот этого:
FAQ: Как задать матрицу, чтобы быстро поменять местами...
все это:
Цитата
2. Поменять местами
 Средние столбцы;
 Средние строки с первой и последней;
 Средние столбцы со вторым и предпоследним;
 Средние строки;

делается одной строкой (!!!), я имею в виду каждый пункт - одна строка...
Dead.MorozZ
Oбъясните, пожаловста, в подробностях как работает процедура по обмену строк (Swap_rows)
volvo
А какие тебе еще подробности? Как поменять местами 2 числа, знаешь (через дополнительную переменную)? Ну, так для Паскаля разницы между числом и строкой/столбцом (при том описании, которое я предложил) НЕТУ...
klem4
надо поменять строку p со строкой q :

проходим по всем столбцам митрицы и меняем местами соответствующие элементы...


for j := 1 to m do begin
temp := x[q,j];
x[q,j]:= x[p,j];
x[p,j]:= temp;
end;
Dead.MorozZ
Volvo как исправить твою прогу с FAQ, чтоб в матрице появлялись и отрицательные элементы?javascript:emoticon(':wacko:')
smilie
klem4
Неужели так трудно догадаться ? Это конечно зависит он интеравала который тебе нужен, но можно например так :

x[i,j] := random(101) - 50;

будет интервал значений [-50..50];
Dead.MorozZ
Как найти максимальный элемент в строке/столбе??
volvo
To: Dead.MorozZ
Или ты начнешь пользоваться поиском и читать, а не бегло просматривать то, что написано в FAQ-е, или эта тема плавно переместится в мусорку. Поиск сразу же выдает 3 страницы ссылок, неужели кто-то должен искать ЗА ТЕБЯ?

Вот тут смотри: FAQ: решения: МАТРИЦЫ, МАССИВЫ (Задача №7) Принцип поиска по строке/столбцу такой же...
Dead.MorozZ
To: volvo
как в твоей проге одновременно менять местами и столбы и строки??
volvo
Цитата
как в твоей проге одновременно менять местами и столбы и строки??

Гораздо проще, чем кажется:
const
size_row = 10; { число строк }
size_col = 10; { число столбцов }

type { это - матрица из строк }
tvector = array[1 .. size_col] of integer;
tVecmatrix = array[1 .. size_row] of tvector;

{ меняем строки местами }
procedure swap_rows(var mx: tVecmatrix;
const i, j: integer);
var T: tvector;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

type { это - матрица из столбцов }
trow = array[1 .. size_row] of integer;
tRowmatrix = array[1 .. size_col] of trow;

{ меняем столбцы местами }
procedure swap_cols(var mx: tRowmatrix;
const i, j: integer);
var T: trow;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

{ печатаем (матрицу СТРОК !!!) }
procedure print(var mx: tVecmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
begin
for j := 1 to size_col do
write(mx[i][j]:4);
writeln
end;
end;

{ преобразуем матрицу строк -> матрицу столбцов }
procedure convert_vr(mv: tVecmatrix; var mr: tRowmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
for j := 1 to size_col do
mr[j, i] := mv[i, j];
end;
{ обратное преобразование }
procedure convert_rv(mr: tRowmatrix; var mv: tVecmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
for j := 1 to size_col do
mv[i, j] := mr[j, i];
end;


var
mx: tVecmatrix;
mr: tRowmatrix; { для промежуточных вычислений }
i, j: integer;

begin
for i := 1 to size_row do
for j := 1 to size_col do
mx[i][j] := random(100); { заполняем матрицу }

writeln('before:'); print(mx); { начальная матрица }

swap_rows(mx, 1, 5); { меняем 1 и 5 СТРОКИ местами }

convert_vr(mx, mr); { преобразуем в матрицу столбцов }
swap_cols(mr, 1, 5); { меняем местами 1 и 5 столбцы }
convert_rv(mr, mx); { и возвращаем назад -> матрицу строк }

writeln('after:'); print(mx); { полученная матрица }
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.