| 
| 
 | Вопрос # 5 346/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Задание такое: (по массивам) Найти наибольший и наименьший элементы прямоугольной матрицы и поменять их местами.
 Не могу понять где прописал что то не так, меняет местами цифры не правильно, на форме расположены StringGrid, две кнопки, в первой кнопке прописан код на генерацию цифр, а во второй непосредственно код на перестановку элементов.
 Приложение:Переключить в обычный режим unit U_F_1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Grids; type  TF_1 = class(TForm)    StringGrid1: TStringGrid;    Button1: TButton;    E_3: TEdit;    L_3: TLabel;    L_com_3: TLabel;    L_4: TLabel;    B_2: TButton;    procedure Button1Click(Sender: TObject);    procedure B_2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  F_1: TF_1;const n=6;varm:array[1..n,1..n]of integer;    i,j,index,k,max,buf:integer; implementation {$R *.dfm}  procedure TF_1.Button1Click(Sender: TObject);{const n=6;varm:array[1..n,1..n]of integer;    i,j,index,k,max,buf:integer;  }begin randomize; for i:=1 to n do begin   for j:=1 to n do    begin    m[i,j]:=random(10);    StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[i,j], ffFixed, 2, 0);       end;   end;max:=m[1,1];index:=1;for i:=1 to n doif m[i,i]>max then begin  max:=m[i,i];  index:=i;   end;  end; procedure TF_1.B_2Click(Sender: TObject);{const n=6;varm:array[1..n,1..n]of integer;    i,j,index,k,max,buf:integer;  }begin max:=m[1,1];index:=1;for i:=1 to n doif m[i,i]>max then begin  max:=m[i,i];  index:=i; end;repeatk:=StrToInt(E_3.Text);until k in [1..n];if index<>k thenfor i:=1 to n do  begin   buf:=m[index,i];   m[index,i]:=m[k,i];   m[k,i]:=buf;  end;for i:=1 to n do   begin  for j:=1 to n do    //StringGrid1.Cells[i-1,j-1] := inttostr(m[i,j]);  StringGrid1.Cells[i-1,j-1] := FloatToStrF(m[i,j], ffFixed, 2, 0);  end;end; 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: почему местами меняется все подряд?
 |  
|   | 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, 10:14 [#14]:не пойму почему в случайном порядке числа заменяются, а должны заменяться со строчкой с максимальным значениением главной диаганали на строчку которую ввожу в edit. |  
|   | bugmenot (статус: 3-ий класс), 1 июня 2011, 12:07 [#15]:почему матрица of integer, а в StringGrid попадает с помощью FloatToStr? O_o виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Силиванов (статус: Посетитель), 1 июня 2011, 12:12 [#16]:исправил на inttostr, но всё равно так же |  
|   | 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 (статус: Посетитель), 4 июня 2011, 00:46 [#20]:А чего тут помогать то?) Задачка то вроде как простая) Найти максимальный элемент на диагонали. Поменять местами строки   That will be, you and do not learn, if never will try! ^__^ |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |