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

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

Помогите пожалуйста...
нужно решить задачку и я не понимаю, как при сортировке двумерного массива переставлять столбцы целиком...
то есть как производится сортировка массива в массиве...
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

По какому признаку производится сортировка?
Ни что так не ограничивает фантазию программиста, как компилятор...
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

в каждом столбце нужно посчитать среднее арифметическое и затем переставить столбцы по возрастанию этого среднего арифметического
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вот процедура, меняющая местами столбцы 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 - одномерный массив с размерностью, равной резмерности столбца.
Ни что так не ограничивает фантазию программиста, как компилятор...
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

спасибо... сейчас попробую сделать....
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

я все-таки запуталась... не получается правильно применить эту сортировку... все время ошибки выдает..(((
вот основа программы... а как туда засунуть сортировку эту? помогите, плииз....

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

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.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Нужно объявить массив B1 как B1:Array [1..N,1..M] of integer; и массив A как Array [1..N] of integer;.
В процедуре замены нужно заменить A1 на B1, A2 на A.
Ни что так не ограничивает фантазию программиста, как компилятор...
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

ок, это я поняла)
но у меня немножко в другом проблема...
я когда после этих циклов ставлю условие...

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

и... я не совсем понимаю, что вместо idx1 и idx2 писать....
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

Вместо idx1 и idx2 подставляются номера переставляемых столбцов
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

srarifm здесь вообще как Integer объявлено.
Можно, конечно, составить массив средних арифметических, но тогда элементы в нем тоже придется перемещать, лучше просто просчитывать его в процедуре сортировки.
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить