Вниз
Скачать: CL | DM;

Двумерный массив,задача   Найти похожие ветки 

 
петрович07   (2008-01-06 00:42) [0]

Мастера скажите как быть, решаю задачу вроде простую,но реализация вызывает проблемы.
Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов.

Как матрица используется грид, эт условие такое.

У меня какие мысли создать еще один грид с двумя столбцами,в первый столбец записывать суммы, а во второй соответствующие индексы строк.
Далее пройтись циклом по первому столбцу и строки поменять.
Мне кажется мой алгоритм поршивый, какие будут у кого мысли, если можете то предложите свой вариант, буду очень признателен.
Спасибо!!!


 
homm ©   (2008-01-06 00:48) [1]

Мысль одна: Грид не предназначен для хранения данных, от которых нужно узнать сумму. Постановка поршивая. Так и так переводить во внутренний масив из чесел, работать с ним.


 
DVM ©   (2008-01-06 00:48) [2]


> У меня какие мысли создать еще один грид с двумя столбцами,
> в первый столбец записывать суммы, а во второй соответствующие
> индексы строк.

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


 
turbouser ©   (2008-01-06 00:51) [3]

Не надо еще одного грида. Достаточно одного DrawGrid
Задача элементарная, так что решать ее придется самому.


 
петрович07   (2008-01-06 23:25) [4]

вот что получилось,но есть проблема с сортировкой строк. помогите

var
 sum, i, j, b, c: integer;
 A: array of byte;
 a_size: byte;
begin
 sum := 0;

 a_size := 4;
 SetLength(A, a_size);

 for j := 1 to StringGrid1.RowCount - 1 do
 begin
   for i := 1 to StringGrid1.ColCount - 1 do
   begin
     sum := sum + StrToInt(StringGrid1.Cells[i, j]);
   end;
   A[j - 1] := sum;
   sum := 0;
 end;

/сортировка сумм элементов строк
 for i := 0 to a_size-1 do
   for j := 0 to a_size-1 do
   begin
     if j + 1 > a_size-1 then Break;
     b := A[j];
     c := A[j + 1];
     if c < b then
     begin
       A[j] := c;
       A[j + 1] := b;
     end;
   end;


 
петрович07   (2008-01-06 23:25) [5]

вот что получилось,но есть проблема с сортировкой строк. помогите

var
 sum, i, j, b, c: integer;
 A: array of byte;
 a_size: byte;
begin
 sum := 0;

 a_size := 4;
 SetLength(A, a_size);

 for j := 1 to StringGrid1.RowCount - 1 do
 begin
   for i := 1 to StringGrid1.ColCount - 1 do
   begin
     sum := sum + StrToInt(StringGrid1.Cells[i, j]);
   end;
   A[j - 1] := sum;
   sum := 0;
 end;

/сортировка сумм элементов строк
 for i := 0 to a_size-1 do
   for j := 0 to a_size-1 do
   begin
     if j + 1 > a_size-1 then Break;
     b := A[j];
     c := A[j + 1];
     if c < b then
     begin
       A[j] := c;
       A[j + 1] := b;
     end;
   end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.016 c
15-1198777130
Petr V. Abramov
2007-12-27 20:38
2008.02.03
про спам


4-1182958417
sergeii
2007-06-27 19:33
2008.02.03
как можно послать локальному активному пользователю сообщение


15-1198911358
VAD*Anti Gopn!k
2007-12-29 09:55
2008.02.03
Электрогитара и компьютер.


15-1198473529
Kolan
2007-12-24 08:18
2008.02.03
Хотят заставить сделать интерпритатор, я упираюсь &amp;#133 :)


2-1199569366
петрович07
2008-01-06 00:42
2008.02.03
Двумерный массив,задача




   Наверх