Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> String Grid, Упорядочить строки матрицы  
V
    Опции темы
Dvix
Дата 10.5.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



 дана матрица размером n*m. Упорядочить её строки по возрастанию суммы их элементов.
Размерность вводится пользователем в Edit.
Как Упорядочить её строки по возрастанию суммы их элементов?

Код

Edit1.Text:=FloatToStr(n);
Edit2.Text:=FloatToStr(m);
for i := 1 to N do
for j := 1 to N do
A[i, j]:=StrToFloat(StringGrid1.Cells[j,i]);




Это сообщение отредактировал(а) Dvix - 10.5.2008, 18:21
PM MAIL   Вверх
almagnit
Дата 10.5.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 3.4.2008

Репутация: нет
Всего: 7



На стадии ввода массива, формируешь одномерный массив, записывая суммы строк каждой строки, а

потом сортируя полученный массив переставляешь местами элементы строки соответствующей 

номеру ячейки в третьем массиве.

Могу написать на чем угодно, но на Паскале программировал еще в школе и даже на олимпиаду 

ездил (не безуспешно  smile ) однако как язык он мне не нравиться поэтому листинг не сделаю, если 

будет желание тогда подробнее опишу алгоритм или могу дать листинг на другом языке.
PM MAIL ICQ   Вверх
THandle
Дата 10.5.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Если я правильно понял задание, то вот:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Edit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  A : array of array of integer;
  n : integer = 5;

implementation

{$R *.dfm}



function SumLine(num : integer) : integer;
var
  i : integer;
begin
  result := 0;
  for i := 0 to n - 1 do
    result := result + A[num, i];
end;


procedure swap(first, second : integer);
var
  i, tmp : integer;
begin
  for i := 0 to n - 1 do
    begin
      tmp := A[first, i];
      A[first, i] := A[second, i];
      A[second, i] := tmp;
    end;
end;

procedure BubbleSort;
var
  i, j : integer;
begin
  for i := 0 to n - 1 do
    for j := 1 to n - i - 1 do
      if SumLine(j - 1) > SumLine(j) then
        swap(j - 1, j);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if TryStrToInt(Edit1.Text, n) then
    begin
      SetLength(A, n, n);
      StringGrid1.ColCount := n;
      StringGrid1.RowCount := n;
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : integer;
begin
  for i := 0 to n - 1 do
    for j := 0 to n - 1 do
      A[i, j] := StrToInt(StringGrid1.Cells[i, j]);
  BubbleSort;
  for i := 0 to n - 1 do
    for j := 0 to n - 1 do
      StringGrid1.Cells[i, j] := IntToStr(A[i, j]);
end;

end.



Правда сортирует не строки, а столбцы, спешил и соответственно намудрилsmile
Ну там переделать не трудно.

В аттаче сам проект.
 smile 

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  stringgridsort.rar 189,37 Kb
PM   Вверх
Dvix
Дата 10.5.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



это массив а с целым типом:
A : array of integer;

а это что? объясни.
Код

A : array of array of integer;


Это сообщение отредактировал(а) Dvix - 10.5.2008, 21:17
PM MAIL   Вверх
THandle
Дата 10.5.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Dvix, динамический двумерный массив.

Статический объявляется так:

Код

var
  a : array [0..MAX, 0..MAX] of integer;


PM   Вверх
Dvix
Дата 11.5.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



Огромное СПС. Про статические двумерные массивы я знал, про динамические в первый раз слышу. Но передо мной стоит задача написать этот же код, без EditChange, по нажатию кнопки.


Это сообщение отредактировал(а) Dvix - 11.5.2008, 13:34
PM MAIL   Вверх
THandle
Дата 11.5.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Dvix, не за что. А какие проблемы? Кидаешь еще одну кнопку на форму, создаешь обработчик OnClick, и пишешь в него вот этот код:

Код

  if TryStrToInt(Edit1.Text, n) then
    begin
      SetLength(A, n, n);
      StringGrid1.ColCount := n;
      StringGrid1.RowCount := n;
    end;

PM   Вверх
Dvix
Дата 11.5.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



Ещё раз огромное СПС.
Со строками разобрался,  но вот ещё проблема:по возрастанию суммы их элементов?

Это сообщение отредактировал(а) Dvix - 11.5.2008, 13:54
PM MAIL   Вверх
THandle
Дата 11.5.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Цитата(Dvix @  11.5.2008,  14:46 Найти цитируемый пост)
и ничего не происходит. Необходимо удалить Edit1Change?


Очисти от кода Edit1Change:

Код

procedure TForm1.Edit1Change(Sender: TObject);
begin
end;



Далее в Edit1 вводишь число и тыкаешь на эту кнопку. Колво столбцов и строк должно изменится если введено число.


Цитата(Dvix @  11.5.2008,  14:46 Найти цитируемый пост)
как упорядочить её строки по возрастанию суммы их элементов?

В точности наоборот) Тут столбцы сортирует) поменяй строки со столбцами)


На счет этого, если не разберешься напишу вечером(если буду еще в здравом умеsmile), ну или завтраsmile
PM   Вверх
Dvix
Дата 14.5.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
THandle
Дата 15.5.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Цитата(Dvix @  11.5.2008,  14:46 Найти цитируемый пост)
Со строками разобрался,  но вот ещё проблема:по возрастанию суммы их элементов?


Цитата(Dvix @  14.5.2008,  10:41 Найти цитируемый пост)
необходимо упорядочить строки матрицы по возрастанию их наибольших элементов.


Так что? Суммы всех элементов строки или же по возрастанию максимальных? Если первое, то оно там и реализовано...
PM   Вверх
Dvix
Дата 15.5.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



второе:
Цитата

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



Это сообщение отредактировал(а) Dvix - 15.5.2008, 19:22
PM MAIL   Вверх
THandle
Дата 15.5.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Измени вот эту вот функцию:

Код

function SumLine(num : integer) : integer;
var
  i : integer;
begin
  result := 0;
  for i := 0 to n - 1 do
    result := result + A[num, i];
end;


На:

Код

function SumLine(num : integer) : integer;
var
  i : integer;
begin
  result := A[num, 0];
  for i := 1 to n - 1 do
    if A[num, i] > result then
      result := A[num, i];
end;


ну и название функции поменяй, как понравится, а то так не информативно получится smile 
PM   Вверх
Dvix
Дата 15.5.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 10.5.2008
Где: Yaroslavl

Репутация: нет
Всего: нет



огромное спасибо.
PM MAIL   Вверх
THandle
  Дата 15.5.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Не за что. Если вопрос решен, то пометь тему как решенную smile 
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.