Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 346

Раздел: Delphi » Прочее
/ вопрос открыт /

Приветствую, уважаемые эксперты!
Задание такое: (по массивам) Найти наибольший и наименьший элементы прямоугольной матрицы и поменять их местами.
Не могу понять где прописал что то не так, меняет местами цифры не правильно, на форме расположены StringGrid, две кнопки, в первой кнопке прописан код на генерацию цифр, а во второй непосредственно код на перестановку элементов.

Приложение:
  1. unit U_F_1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Grids;
  8.  
  9. type
  10. TF_1 = class(TForm)
  11. StringGrid1: TStringGrid;
  12. Button1: TButton;
  13. E_3: TEdit;
  14. L_3: TLabel;
  15. L_com_3: TLabel;
  16. L_4: TLabel;
  17. B_2: TButton;
  18. procedure Button1Click(Sender: TObject);
  19. procedure B_2Click(Sender: TObject);
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24. end;
  25.  
  26. var
  27. F_1: TF_1;
  28. const n=6;
  29. var
  30. m:array[1..n,1..n]of integer;
  31. i,j,index,k,max,buf:integer;
  32.  
  33. implementation
  34.  
  35. {$R *.dfm}
  36.  
  37.  
  38. procedure TF_1.Button1Click(Sender: TObject);
  39. {const n=6;
  40. var
  41. m:array[1..n,1..n]of integer;
  42. i,j,index,k,max,buf:integer; }
  43. begin
  44.  
  45. randomize;
  46.  
  47. for i:=1 to n do
  48. begin
  49.  
  50. for j:=1 to n do
  51.  
  52. begin
  53. m[i,j]:=random(10);
  54. StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[i,j], ffFixed, 2, 0);
  55.  
  56. end;
  57.  
  58.  
  59. end;
  60. max:=m[1,1];
  61. index:=1;
  62. for i:=1 to n do
  63. if m[i,i]>max then
  64. begin
  65. max:=m[i,i];
  66. index:=i;
  67.  
  68.  
  69. end;
  70.  
  71.  
  72. end;
  73.  
  74. procedure TF_1.B_2Click(Sender: TObject);
  75. {const n=6;
  76. var
  77. m:array[1..n,1..n]of integer;
  78. i,j,index,k,max,buf:integer; }
  79. begin
  80.  
  81. max:=m[1,1];
  82. index:=1;
  83. for i:=1 to n do
  84. if m[i,i]>max then
  85. begin
  86. max:=m[i,i];
  87. index:=i;
  88. end;
  89. repeat
  90. k:=StrToInt(E_3.Text);
  91. until k in [1..n];
  92. if index<>k then
  93. for i:=1 to n do
  94. begin
  95. buf:=m[index,i];
  96. m[index,i]:=m[k,i];
  97. m[k,i]:=buf;
  98.  
  99. end;
  100. for i:=1 to n do
  101. begin
  102. for j:=1 to n do
  103. //StringGrid1.Cells[i-1,j-1] := inttostr(m[i,j]);
  104. StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[i,j], ffFixed, 2, 0);
  105. end;
  106. end;
  107.  
  108. end.


Силиванов Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Силиванов (статус: Посетитель)
Вопрос отправлен: 30 мая 2011, 19:59
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Мережников Андрей

Здравствуйте, Силиванов!
Решение в прилагаемом файле. Будут вопросы - пишите.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 4 июня 2011, 10:10


Мини-форум вопроса

Всего сообщений: 21; последнее сообщение — 4 июня 2011, 09:42; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:22 [#1]:

почему:
1: ищете только по главной диагонали?
2: не ищете минимальный элемент?
3: почему местами меняется все подряд?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:26 [#2]:

Цитата (Силиванов):

k:=StrToInt(E_3.Text);

а это что такое?
bugmenot

bugmenot (статус: 3-ий класс), 30 мая 2011, 20:30 [#3]:

внимание на строки 63, 84
виконання програми розпочинається з того самого мiсця, де призупинилося.

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:33 [#4]:

да! и еще - прямоугольная матрица - не значит квадратная
Силиванов

Силиванов (статус: Посетитель), 30 мая 2011, 20:38 [#5]:

Сори, вот такое задание
Задана квадратная матрица. Поменять местами строку с максимальным элементом на главной диагонали со строкой с заданным
номером m.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:40 [#6]:

Цитата (Силиванов):

Сори, вот такое задание

сильно похоже на первоначальный вопрос
Силиванов

Силиванов (статус: Посетитель), 30 мая 2011, 20:42 [#7]:

Там ещё есть Edit, вот это как раз та строчка, где задаётся номер строки перестановки - k:=StrToInt(E_3.Text);
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:48 [#8]:

Цитата (Силиванов):

repeat k:=StrToInt(E_3.Text); until k in [1..n];

если в edit введете неподходящее значение, то здесь программа зациклиться и останавливать ее будете через три кнопки
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 30 мая 2011, 20:50 [#9]:

Цитата (Силиванов):

L_com_3.Caption:='Максимальный элемент'+#13+IntToStr(max); L_4.Caption:='Строка'+#13+IntToStr(index);

вот это надо вынести из цикла
Силиванов

Силиванов (статус: Посетитель), 31 мая 2011, 11:05 [#10]:

подскажите как исправить ошибку
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 31 мая 2011, 18:25 [#11]:

заменить
StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[i,j], ffFixed, 2, 0);
на
StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[j,i], ffFixed, 2, 0);

для StringGrid предусмотрена нумерация элементов (колонка, строка).
Силиванов

Силиванов (статус: Посетитель), 31 мая 2011, 22:27 [#12]:

не помогло, ребят помогите пож-та, достала меня эта задача и препад тоже
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 1 июня 2011, 05:41 [#13]:

что конкретно делается не так?
Силиванов

Силиванов (статус: Посетитель), 1 июня 2011, 10:14 [#14]:

не пойму почему в случайном порядке числа заменяются, а должны заменяться со строчкой с максимальным значениением главной диаганали на строчку которую ввожу в edit.
bugmenot

bugmenot (статус: 3-ий класс), 1 июня 2011, 12:07 [#15]:

почему матрица of integer, а в StringGrid попадает с помощью FloatToStr? O­_­o
виконання програми розпочинається з того самого мiсця, де призупинилося.

Силиванов

Силиванов (статус: Посетитель), 1 июня 2011, 12:12 [#16]:

исправил на inttostr, но всё равно так же
serox

serox (статус: Посетитель), 1 июня 2011, 20:29 [#17]:

Вообще не понятно чего ты ищешь в своем коде)
Зачем искать строку?) Вроде надо только поменять наименьший и наибольший элементы...
That will be, you and do not learn, if never will try! ^__^
Силиванов

Силиванов (статус: Посетитель), 1 июня 2011, 21:50 [#18]:

вот такое задание
Задана квадратная матрица. Поменять местами строку с максимальным элементом на главной диагонали со строкой с заданным номером m.
Силиванов

Силиванов (статус: Посетитель), 3 июня 2011, 20:10 [#19]:

никто не поможет?
serox

serox (статус: Посетитель), 4 июня 2011, 00:46 [#20]:

А чего тут помогать то?) Задачка то вроде как простая) Найти максимальный элемент на диагонали. Поменять местами строки :)
That will be, you and do not learn, if never will try! ^__^

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.02 сек.