Помощь - Поиск - Пользователи - Календарь
Полная версия: Перестановка рядком в матрице
Форум «Всё о Паскале» > 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. А переменные, кстати, обнулять перед использованием нужно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.