Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2015, 22:41   #1
Rybi
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 18
По умолчанию Матрица

Вопрос такой, перемещать матрицу получается, но не могу понять как задать перемещение максимального элемента в верхний угол, помогите пожалуйста, горит практическая (матрица вещественная), заранее спасибо
Код:
unit Unit3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm3 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
  a:array[0..4,0..4] of integer;
implementation
 
{$R *.dfm}
 
procedure TForm3.Button1Click(Sender: TObject);
var
  j,i,k,m:integer;
  s : String;
begin
  Randomize;
 
  for i:=0 to 4 do
  for j:=0 to 4 do
  Begin
    StringGrid1.Cells[j,i]:=IntToStr(Random(100)-50);
    StringGrid2.Cells[j,i]:=StringGrid1.Cells[j,i];
  End;
 
  k:=StrToIntDef(Edit1.Text,0) Mod 5;
  m:=StrToIntDef(Edit2.Text,0) Mod 5;
 
  for i:=0 to 4 do
  Begin
    s:=StringGrid2.Cells[i,m];
    StringGrid2.Cells[i,m]:=StringGrid2.Cells[i,k];
    StringGrid2.Cells[i,k]:=s;
  End;
end;
 
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  If Not (Key In ['0'..'9',#8]) Then Key:=#0;
end;
Rybi вне форума Ответить с цитированием
Старый 24.11.2015, 00:39   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Сообщение от Rybi Посмотреть сообщение
Вопрос такой, перемещать матрицу получается, но не могу понять как задать перемещение максимального элемента в верхний угол, помогите пожалуйста, горит практическая (матрица вещественная), заранее спасибо[CODE]
А какие проблемы?
Циклом найди максимальный элемент и затем зная его индексы перемести в "верхний угол".
P.S. Если очень сильно "горит и припекает", то есть и платные разделы форума.
northener вне форума Ответить с цитированием
Старый 24.11.2015, 00:46   #3
Rybi
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 18
По умолчанию

максимальный циклом, я уже нашла, проблема перестановки в верхний угол, как присвоить значения данному элементу, да их может быть несколько поэтому и сложность.
Rybi вне форума Ответить с цитированием
Старый 24.11.2015, 01:50   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Сообщение от Rybi Посмотреть сообщение
максимальный циклом, я уже нашла, проблема перестановки в верхний угол, как присвоить значения данному элементу, да их может быть несколько поэтому и сложность.
Какому элементу?
northener вне форума Ответить с цитированием
Старый 24.11.2015, 01:59   #5
Rybi
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 18
По умолчанию

Максимальному, их ведь может быть несколько)
Rybi вне форума Ответить с цитированием
Старый 24.11.2015, 02:10   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Сообщение от Rybi Посмотреть сообщение
Максимальному, их ведь может быть несколько...
Тогда уточняй задачу у препода. Что и как нужно делать, если максимальных элементов более одного. Этот вопрос никак к нашему форуму не относится.
northener вне форума Ответить с цитированием
Старый 24.11.2015, 02:14   #7
Rybi
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 18
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Тогда уточняй задачу у препода. Что и как нужно делать, если максимальных элементов более одного. Этот вопрос никак к нашему форуму не относится.
вы меня не поняли, но не буду вдаваться в объяснения, ибо получу обычную мораль.
Rybi вне форума Ответить с цитированием
Старый 24.11.2015, 07:25   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Rybi Посмотреть сообщение
вы меня не поняли, но не буду вдаваться в объяснения, ибо получу обычную мораль.
Нет, это Вы нас не поняли.
Что нужно делать, если максимальных элементов несколько - это должен решить ваш преподаватель. Или, на крайний случай, Вы сами должны это решить.
Мы же, всего навсего, пытаемся добиться от Вас, ЧТО Вы пытаетесь сделать.
Пока это выяснить не удалось!

Ну вот, допустим, дана такая матрица
1 2 4 8
7 3 2 1
9 4 5 6
2 9 9 4

что должно получиться в итоге, после "установки в верхний угол" ?

p.s. а вообще, переставить два элемента проще простого.
сначала ищете индексы расположения максимального элемента:
Код:
IndexRowMax := 0;
IndexColMax := 0;
for i:=0 to n do
  for j:=0 to n do
    if a[i,j]>a[IndexRowMax, IndexColMax] then begin
     IndexRowMax := i; IndexColMax := j
   end
а потом меняете местами элемент матрицы a[0,0] и элемент матрицы a[IndexRowMax, IndexColMax]:
Код:
  temp := a[0,0];
  a[0,0] := a[IndexRowMax, IndexColMax];
  a[IndexRowMax, IndexColMax] := temp
вот и всё.

Последний раз редактировалось Serge_Bliznykov; 24.11.2015 в 07:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2015, 13:08   #9
Rybi
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Нет, это Вы нас не поняли.
Что нужно делать, если максимальных элементов несколько - это должен решить ваш преподаватель. Или, на крайний случай, Вы сами должны это решить.
Мы же, всего навсего, пытаемся добиться от Вас, ЧТО Вы пытаетесь сделать.
Пока это выяснить не удалось!

Ну вот, допустим, дана такая матрица
1 2 4 8
7 3 2 1
9 4 5 6
2 9 9 4

что должно получиться в итоге, после "установки в верхний угол" ?

p.s. а вообще, переставить два элемента проще простого.
сначала ищете индексы расположения максимального элемента:
Код:
IndexRowMax := 0;
IndexColMax := 0;
for i:=0 to n do
  for j:=0 to n do
    if a[i,j]>a[IndexRowMax, IndexColMax] then begin
     IndexRowMax := i; IndexColMax := j
   end
а потом меняете местами элемент матрицы a[0,0] и элемент матрицы a[IndexRowMax, IndexColMax]:
Код:
  temp := a[0,0];
  a[0,0] := a[IndexRowMax, IndexColMax];
  a[IndexRowMax, IndexColMax] := temp
вот и всё.
я об этом и говорила, не будут ли вступать в конфликт несколько макс элементов, при перестановке. Сразу было понятно, что их может быть несколько, поэтому и спросила, вот.
Rybi вне форума Ответить с цитированием
Старый 25.11.2015, 13:21   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
не будут ли вступать в конфликт несколько макс элементов
не будут. Элементы массива - это всего навсего адресуемые ячейки в памяти.
Они друг с другом не конфликтуют.

А вот как скажется наличие (возможное) более одного максимума на выполнении задания - это Вам (или вашему преподавателю, которому Вы будете сдавать код) решать.
Варианты есть разные.
например, код, который я предложил, в случае нескольких максимумов возьмёт самый первый из них (если просматривать матрицу по строками слева направо).
т.е. для предложенного мною примера результатом будет такой массив:
Код:
9 2 4 8
7 3 2 1
1 4 5 6
2 9 9 4
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Матрица Александр1993 Помощь студентам 0 22.06.2011 21:30
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Матрица hexx Фриланс 6 04.03.2010 16:32
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11