Помощь - Поиск - Пользователи - Календарь
Полная версия: Перестановка рядком в матрице
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DruiD
Характеристикой ряда целочисленной матрицы назовём сумму его отрицательных чётных элементов. Переставляя рядки заданной матрицы, расположить их соответственно к убыванию характеристик.
Алена
В поиск... Еще на этой странице есть подобная тема, ты уже опять задаешь этот вопрос...
DruiD
Я создал одномерный массив записей В, в котором в 1 поле записываю значение сумм, во 2 поле- индекс строчки в двумерном массиве А. Потом сортирую значения сумм в поле массива записей . Подскажи мне как в новую двумерную матрицу записать строчки в порядке возрастания, используя поле индексов в массиве записей В.
const n=4; m=5;
type ccc=record
z:integer;
n:integer;
end;
var d,s:integer; A,c:array[1..n,1..m]of integer; i,j:byte;B:array[1..n]of ccc;
bb:array[1..n]of integer;
begin
for i:=1 to n do
for j:=1 to m do
begin
writeln('vvedi el ',i,' i ',j,' ');
readln (A[i,j]);
end;
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
if (not odd(A[i,j])) and (A[i,j]<0) then inc(s,A[i,j]);
B[i].z:=s; B[i].n:=i;
end;
for i:=1 to n do
write(' ',B[i].z);
writeln;
for j:=1 to n-1 do
for i:=1 to n-1 do
if B[i].z<B[i+1].z then begin d:=b[i].z; b[i].z:=b[i+1].z; B[i+1].z:=d; end;

Алена
Не надо создавать ничего лишнего... Смотри, вот "пузырек" работающий с обычным массивом:

Type
arrType = Array[1 .. n] Of Integer;

Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If ar[Pred(j)] > ar[j] Then Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;


А если сделать:
type
TVector = array[1 .. size_col] of Integer;
TMatrix = array[1 .. size_row] of TVector;

Function F(Vec: TVector): Integer;
begin
{
Здесь находим сумму отрицательных четных элементов Vec (т.е. ряда матрицы),
и возвращаем ее как результат функции
}
end;

Procedure Bubble(Var ar: TMatrix; n: integer);
Var
i, j: Integer;
T: TVector;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If F(ar[Pred(j)]) > F(ar[j]) Then Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;

, то что получится, как ты думаешь?
DruiD
Идею понял, но решение чёто не получается :
const n=4; m=5;
type TVector = array[1 .. m] of Integer;
TMatrix = array[1 .. n] of TVector;
Function F(Vec: TVector): Integer;
var i:byte; s:integer;
begin
for i:=1 to m do
if (not odd(Vec[i])) and (Vec[i]<0) then inc(s,Vec[i]);
f:=s;
end;
Procedure Bubble(Var ar: TMatrix);
Var i, j: Integer;
T: TVector;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If F(ar[Pred(j)]) > F(ar[j]) Then Begin
T:= ar[Pred(j)]; ar[Pred(j)] := ar[j];
ar[j] := T
End
End;
var a,c:array[1..n,1..m] of integer; b:Tmatrix; i,j:byte;
begin
for i:=1 to n do
for j:=1 to m do
begin
writeln('vvedi el ',i,' i ',j,' ');
readln (A[i,j]);
end;
for i:=1 to n do
for j:=1 to m do
B[i][j]:=A[i,j];
bubble(b);
for i:=1 to n do
for j:=1 to m do
c[i,j]:=b[i][j];
for i:=1 to n do begin writeln;
for j:=1 to m do
Write(' ',c[i,j]); end;
readln
end.

T i m e
Задача помоему элементарная... Находим характеристику каждого ряда и по ним сортируем ряды, да хоть тем же пузырьком и всё тут. ТЫ всё правильно понял. Даже мудрить ничего не надо... Короче, если так нужен полный код - могу написать попозже... yes2.gif
volvo
Цитата
Задача помоему элементарная...
А по-моему, написание COM-сервера - элементарная задача. А ты справишься?

Цитата
Короче, если так нужен полный код

То есть, код в посте №4 полным по твоему высокому мнению НЕ является?

DruiD,
извини, ты FAQ прочел? Матрицу ввести не можешь? Вывести не можешь? А это, между прочим, вот отсюда:
Массивы. Матрицы. Типичные задачи.

А теперь расскажи, ДЛЯ КОГО это все пишется, если тебе и таким как ты - каждый раз подавай ПОЛНЫЙ код? Допишешь сам, раз идею понял...

P.S. А переменные, кстати, обнулять перед использованием нужно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.