Страница 1 из 3

Сортировка столбцов ТР

Добавлено: 22 май 2008, 19:48
Anuta
Помогите пожалуйста...
нужно решить задачку и я не понимаю, как при сортировке двумерного массива переставлять столбцы целиком...
то есть как производится сортировка массива в массиве...

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 19:57
MOTOCoder
По какому признаку производится сортировка?

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 20:02
Anuta
в каждом столбце нужно посчитать среднее арифметическое и затем переставить столбцы по возрастанию этого среднего арифметического

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 20:11
MOTOCoder
Вот процедура, меняющая местами столбцы idx1 и idx2.
[syntax='Delphi']
procedure Exchange(Idx1,Idx2:integer);
var
I:integer;
begin
for i:=1 to n do
A2:=A1[Idx2,i];
for i:=1 to N do
A1[Idx2,i]:=A1[Idx1,i];
for i:=1 to N do
A1[Idx1,i]:=A2;
end;
[/syntax]

A1-матрица, A2 - одномерный массив с размерностью, равной резмерности столбца.

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 20:13
Anuta
спасибо... сейчас попробую сделать....

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 23:33
Anuta
я все-таки запуталась... не получается правильно применить эту сортировку... все время ошибки выдает..(((
вот основа программы... а как туда засунуть сортировку эту? помогите, плииз....

Код: Выделить всё

Program anuta;
uses crt;
const n=5; m=7;
type A1=array [1..5] of integer;
     B1=array [1..7] of A1;
     C1=array [1..7] of integer;
var  srarifm,i,j,sum: integer;
     a:A1; b:B1; c:C1;
begin
clrscr;
  randomize;
  for i:=1 to n do begin
     for j:=1 to m do begin
       b[i,j]:=random(10);
       Write (b[i,j]:4);
     end; writeln; end;
  for j:=1 to m do begin
     sum:=0;
     srarifm:=0;
       for i:=1 to n do begin
           sum:=sum+b[i,j];
           srarifm:=sum div n;
       end;
    write ('srarifm [',j,']= ',srarifm:5);
    writeln; end;
   readln;
end.

Re: Сортировка столбцов ТР

Добавлено: 22 май 2008, 23:50
MOTOCoder
Нужно объявить массив B1 как B1:Array [1..N,1..M] of integer; и массив A как Array [1..N] of integer;.
В процедуре замены нужно заменить A1 на B1, A2 на A.

Re: Сортировка столбцов ТР

Добавлено: 23 май 2008, 00:36
Anuta
ок, это я поняла)
но у меня немножко в другом проблема...
я когда после этих циклов ставлю условие...

if srarifm [j]>srarifm[j+1]
он мне ошибку выдает....

и... я не совсем понимаю, что вместо idx1 и idx2 писать....

Re: Сортировка столбцов ТР

Добавлено: 23 май 2008, 11:17
Хыиуду
Если srarifm - функция, выдающая среднее арифметическое элементов столбца, то аргумент надо писать в круглых скобках, а не квадратных. А если это массив, то его все равно придется пересчитывать после перестановки столбцов

Вместо idx1 и idx2 подставляются номера переставляемых столбцов

Re: Сортировка столбцов ТР

Добавлено: 23 май 2008, 19:45
MOTOCoder
srarifm здесь вообще как Integer объявлено.
Можно, конечно, составить массив средних арифметических, но тогда элементы в нем тоже придется перемещать, лучше просто просчитывать его в процедуре сортировки.