Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 19
1

Найти в каждой строке матрицы элемент с наименьшим значением

31.03.2010, 09:58. Показов 1690. Ответов 7
Метки нет (Все метки)

Пожалуйста, помогите найти ошибку....
Задание такое: Дана матрица вещественных чисел. Найти в каждой строке элемент с наименьшим значением, а затем среди этих чисел выбрать наибольшее. Указать индексы найденного элемента. Удалить из матрицы строку и столбец, на пересечении которых располагается найденный элемент. Использовать компоненты StringGrid, PageControl.
У меня почему-то индеексы не правильно выводятся и соответсвенно строка и столбец не правильно удаляются. Вот код программы для кнопки:


Код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
procedure TForm1.Button2Click(Sender: TObject);
type TMat= array [1..5, 1..5] of real;
     TVec= array [1..5] of real;
var a, c: TMat;
    b: TVec;
    z,i, j, ic, jc, k, imax, jmax: byte;
    max, min: real;
 
begin
 
 
    if RadioButton1.Checked then z:=3;
    if RadioButton2.Checked then z:=4;
    if RadioButton3.Checked then z:=5;
    for i:=1 to z do
    for j:=1 to z do
      a[i, j]:=StrToFloat(StringGrid1.Cells[j-1, i-1]);
 
 
    k:= 1;
      for i:= 1 to z do
        begin
        min:= a[i,1];
            for j:= 2 to z do
              if min>a[i,j] then min:= a[i,j];
              b[k]:= min;
              inc(k);
         end;
        max:= b[1];
            for j:= 1 to k-1 do if max<b[i] then max:= b[i];
             for i:= 1 to z do
              for j:= 1 to z do
                if a[i,j]= max then
                      begin
                      max:= a[i,j];
                      imax:= i;
                      jmax:= j;
                      Label3.Caption:='Индексы максимального элемента из наименьших в каждой строке:'+FloatTostr(imax)+'строка, '+FloatTostr(jmax)+'столбец';
 
                      end;
 
                      i:= 1;
                       for ic:= 1 to z do
                       begin
                           j:= 1;
                           if ic= imax then i:= i+1;
                            for jc:= 1 to z do
                            begin
                                if jc= jmax then j:= j+1;
                                c[ic,jc]:= a[i,j];
                            inc(j);
                            end;
                       inc(i);
                      end;
                      for ic:= 1 to z-1 do
                      begin
                          for jc:= 1 to z-1 do
                          StringGrid2.Cells[jc-1,ic-1]:=FloatToStr(c[ic,jc]);
                      end;
 
                     end; 
end.
0
Вложения
Тип файла: rar Лаб 5.rar (204.2 Кб, 29 просмотров)
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2010, 09:58
Ответы с готовыми решениями:

В каждой строке матрицы выбрать элемент с наименьшим значением
Дана действительная матрица размера N*M, все элементы которой различны. В каждой строке выбирается...

В каждой строке матрицы выбрать элемент с наименьшим значением, затем среди этих чисел выбрать наибольшее
Помогите решить, пожалуйста. Проболел эту тему, теперь не знаю как решить.. Вот задачка: Пусть...

В каждой строке матрицы выбрать элемент с наименьшим значением
Дана действительная матрица размера N x M, все элементы которой различны. В каждой строке...

В каждой строке матрицы выбрать элемент с наименьшим значением
Задана вещественная матрица размерности пхт, все элементы которой различны. В каждой строке выбрать...

7
165 / 82 / 32
Регистрация: 05.02.2010
Сообщений: 318
31.03.2010, 12:37 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
        const n=3; m=3;  w=3;
type              arr=array[1..n,1..m] Of integer;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mas: arr;
    i, j, i1, j1, i2, j2, i3, j3: Integer;
    s, t, s1, t1, s2, t2:Integer;
  min, min1, min2, max: Integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=1; t:=1;
Randomize;
              min:=high(Random(100));
              min1:=high(Random(100));
              min2:=high(Random(100));
 
                                    max:=low(Random(100));
for i:=1 to n do
 for j:=1 to m do  begin
     mas[i,j]:=Random(10);
      stringgrid1.Cells[i,j]:=IntToStr(mas[i,j]);end;
 
                     begin
                     for i1:=1 to n do
                             if min>=mas[i1,1] then begin  min:=mas[i1,1];
                             s:=i1; t:=1; edit1.Text:=((IntToStr(t))+':'+(IntToStr(s))); end;end;
 
                          begin
                         for i2:=1 to m do
                             if min1>=mas[i2,2] then begin  min1:=mas[i2,2];
                             s1:=i2; t1:=2; edit2.Text:=((IntToStr(t1))+':'+(IntToStr(s1)));end; end;
 
                              begin
                         for i3:=1 to w do
                             if min2>=mas[i3,3] then begin  min2:=mas[i3,3];
                             s2:=i3; t2:=3; edit3.Text:=((IntToStr(t2))+':'+(IntToStr(s2)));end; end;
 
 
 
                                    if (min>min1) and (min>min2) then  begin
                                        edit4.Text:=((IntToStr(t))+':'+(IntToStr(s)));  end;
                                    if (min1>min) and (min1>min2) then  begin
                                            edit4.Text:=((IntToStr(t1))+':'+(IntToStr(s1)));  end;
                                     if (min2>min) and (min2>min1) then  begin
                                            edit4.Text:=((IntToStr(t2))+':'+(IntToStr(s2)));  end;
 
end;
end.
Добавлено через 2 минуты
Напиши пожалуйста водробнее про PageControl(спс)
1
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 19
31.03.2010, 13:26  [ТС] 3
Про PageControl: нужно на разных вкладках разместить таблицу ввода и таблицу вывода

Добавлено через 42 минуты


Спасиба, но у меня эта программка не работает. И нужно полученную матрицу выводить в другой StringGrid.
0
165 / 82 / 32
Регистрация: 05.02.2010
Сообщений: 318
31.03.2010, 20:39 4
Понял тебе еще нужно удаление всавить , найденного элемента , а прога работать должна если я сделаю, PageControl, сможешь доделать ?
0
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 19
31.03.2010, 20:47  [ТС] 5
Цитата Сообщение от Фоат Посмотреть сообщение
Понял тебе еще нужно удаление всавить , найденного элемента , а прога работать должна если я сделаю, PageControl, сможешь доделать ?
Думаю, смогу)) Заранее спасибо!
0
165 / 82 / 32
Регистрация: 05.02.2010
Сообщений: 318
02.04.2010, 00:24 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Добрался и до вас ,

Добавлено через 3 часа 27 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
          const m=4;
type  arr=  array[1..m, 1..m] of Integer;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  c:array[1..m] of Integer;
  A:arr;
   B: array[1..m-1, 1..m-1] of integer;
 
 
  min, max: Integer;
   k, n, i, j: 1..m;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
Begin
 
Memo1.Lines.Clear;
Randomize;
For i:=1 to m do
For j:=1 to m do     Begin
A[i,j]:=Random(100);
StringGrid1.Cells[i,j]:=Inttostr(A[i,j]);
end;         
 
For j:=1 to m do
                Begin
                min:=1000;
                For i:=1 to m do
                               Begin
                               if A[i,j]<min then
                               begin
                               min:=A[i,j];
                               c[j]:=min;
                               end;
                               end;
                end;
            max:=-100;
For j:=1 to m do
               Begin
               StringGrid2.Cells[j,1]:=Inttostr(c[j]);end;
 
 
 
  For j:=1 to m do
               Begin if c[j]>max then begin max:=c[j]; end;  End;
               Memo1.Lines.Add('Ìàêñ èç ìèí '+'  '+Inttostr(max));
 
For i:=1 to m do
For j:=1 to m do     Begin
if A[i,j]=max then begin  k:=i; n:=j;end;  End;
 Memo1.Lines.Add('ß÷åéêà ìàêñ äëÿ óäàëåíèÿ '+'   '+Inttostr(k)+':'+Inttostr(n));
 
 
 
 
  for i:=1 to n-1 do
     begin
       for j:=1 to k-1 do B[i,j]:=A[i,j];
       for j:=k to m-1 do  B[i,j]:=A[i,j+1];
   end;
 
for i:=n to m-1 do
     begin
          for j:=1 to k-1 do B[i,j]:=A[i+1,j];
       for j:=k to m-1 do  B[i,j]:=A[i+1,j+1];
   end;
 
   for i:=1 to m-1 do
       begin
       for j:=1 to m-1 do   Begin
 
           Stringgrid3.Cells[i,j]:=InttoStr(B[i,j]); end;  end;
  end;
 
end.
Добавлено через 2 минуты
Осталось дело за малым
Напишешь свой контрол Пейдж и поехали!
Жаль что вас не застал
Ых, если, что исходник есть
Жду комментарий, если вам угодил, тогда все Ок!
1
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 19
02.04.2010, 08:56  [ТС] 7
Спасибо Вам ОГРОМНОЕ, Фоат!!!!!!! Вы меня так выручили!!! Всё отлично работает)))
0
165 / 82 / 32
Регистрация: 05.02.2010
Сообщений: 318
02.04.2010, 16:59 8
Цитата Сообщение от Ulena Посмотреть сообщение
Спасибо Вам ОГРОМНОЕ, Фоат!!!!!!! Вы меня так выручили!!! Всё отлично работает)))
Это хорошо что все хорошо!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2010, 16:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

В каждой строке матрицы выбрать элемент с наименьшим значением
Помогите написать программу Дана действительная матрица размером n x m, все элементы которой...

В каждой строке матрицы выбрать элемент с наименьшим значением
дана действ. матрица размерностью mxn, все элементы которой различны. В каждой строке выбирается...

В каждой строке матрицы выбрать элемент с наименьшим значением
Парни плз умляю помогите с зада4ей: Дана действительная матрица n*m, все элементы которой...

В каждой строке матрицы выбирать элемент с наименьшим значением
Дана действительная матрица размером n x m, все элементы которой различны. В каждой строке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.