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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 23:33   #1
Dem6
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 24
По умолчанию Поиск минимального и максимального элемента в двухмерном массиве.

Поиск минимального и максимального єлемента в двухмерном массиве. Найдиные элементы выделить цветом.
Код:
nit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormShow(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: integer;
begin
  with StringGrid1 do
   for j := 1 to ColCount - 1 do
      for i := 1 to RowCount - 1 do
         Cells[j, i] := IntToStr(Random(100));
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var t,min:integer;
    i,j: integer;
begin
min:=StrToInt(StringGrid1.Cells[1,1]);
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.ColCount-1 do
  begin
    t:=StrToInt(StringGrid1.Cells[i,j]);
    if t < min then
      min:=t;
      Canvas.Brush.Color := clRed; // ïåíçåëü ÷åðâîíèé
      Canvas.FillRect(Rect);       // çàìàëüîâêà ïðÿìîêóòíèêà
      Canvas.Font.Color := clYellow; // ïåðî æîâòå
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]); // âèâ³ä òåêñòó
 end;
end;

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
for i:=1 to 4 do begin
StringGrid1.Cells[i,0]:=inttostr(i);
end;
for i:=1 to 4 do begin
StringGrid1.Cells[0,i]:=inttostr(i);
end;
end;

end.
Для начале я решил сделать для минимального элемента.
Проект запускается и виснет, вот что выскакивает
Dem6 вне форума
Старый 27.11.2009, 23:58   #2
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

на какой строчке ошибка
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума
Старый 28.11.2009, 00:02   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Идем по шагам и натыкаемся либо тут
Код:
min:=StrToInt(StringGrid1.Cells[1,1]);
либо тут
Код:
 t:=StrToInt(StringGrid1.Cells[i,j]);
на пустую ячейку или ячейку, содержащую букливицы.

А еще вот эта конструкция вызывает, мягко говоря, недоумение:
Код:
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.ColCount-1 do
mihali4 вне форума
Старый 28.11.2009, 00:26   #4
Dem6
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 24
По умолчанию

А как можно обойти эти скользкие места? А делаю с такой самой логикой как на паскале
Dem6 вне форума
Старый 28.11.2009, 00:31   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

TryStrToInt function
Ну, а для "конструкции"
Код:
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
И еще. Когда копируете код из Дельфи, переключайтесь в Дельфи на русский язык - тогда комменты будут выглядеть нормально, а не "крякозябрами"
mihali4 вне форума
Старый 28.11.2009, 16:41   #6
Dem6
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 24
По умолчанию

Я поменял, но все ровно выскакивает та же ошибка.
Я сделал так, и все заработало, значит проблема в этих строчка, вот только какая??
Код:
begin
//min:=StrToInt(StringGrid1.Cells[1,1]);
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
  begin
//    t:=StrToInt(StringGrid1.Cells[i,j]);
//    if t < min then
//      min:=t;
Dem6 вне форума
Старый 28.11.2009, 17:06   #7
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

Код:
procedure MinMax();
var
      i,j,t,min,max: Integer;
begin
min:=StrToInt(StringGrid1.Cells[1,1]);
max:=min;
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
  begin
    t:=StrToInt(StringGrid1.Cells[i,j]);
    if (t<min) then min:=t
    else
    if (t>max) then max:=t   
   end;
end;
Перед запуском убедитесь, что все ячейки в нужном вам диапазоне (1->RowCount и 1->ColCount) содержат целые числа!!!

Последний раз редактировалось mihali4; 29.11.2009 в 19:16.
Adamrus вне форума
Старый 28.11.2009, 17:33   #8
Dem6
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 24
По умолчанию

Спасибо, Adamrus, за ваши старание!
Я сделал таким способом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
begin
  with StringGrid1 do
   for j := 1 to ColCount - 1 do
      for i := 1 to RowCount - 1 do
         Cells[j, i] := IntToStr(Random(100));
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
a:   array[1..5,1..5] of Integer;
i:   integer;
   J:Integer;
   max: real;
   min: real;
   rez: real;
begin
 For I:=1 To StringGrid1.ColCount-1 Do
    For J:=1 To StringGrid1.RowCount-1 Do
       If  StringGrid1.cells [i,J]<>'' then
          a[i,J]:= StrToInt(StringGrid1.cells [i,J]);
          max:=a[1,1];
  min:=a[1,1];
  For I:=1 To StringGrid1.ColCount-1 Do
    For J:=1 To StringGrid1.RowCount-1 Do
       Begin
         IF a[i,J] > max  Then  max:= a[i,J];
         IF a[i,j] < min  Then  min:= a[i,j];
       end;
       label1.Caption:='Минимальный элемент массива: ' + FloatToStr(min) + #13 +
       'Максимальный элемент массива: ' + FloatToStr(max) + #13 ;

end;
А как мне эти ячейки закрасить?

Может кто примерно скажет, это сделать?

Последний раз редактировалось Stilet; 30.11.2009 в 12:19.
Dem6 вне форума
Старый 29.11.2009, 18:27   #9
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

один вопрос в одной теме. По закраске ищи в инете Цветные ячейки в StringGrid.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума
Старый 30.11.2009, 20:17   #10
Dem6
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 24
По умолчанию

Код:
 For I:=1 To StringGrid1.ColCount-1 Do
            For J:=1 To StringGrid1.RowCount-1 Do

  begin
        if StringGrid1.Cells[ACol,ARow] = max
    then StringGrid1.Canvas.Brush.color := 12;
    if StringGrid1.Cells[ACol,ARow] = min
    then StringGrid1.Canvas.Brush.color := 13;
Ошибка
Код:
[Error] Unit1.pas(69): Incompatible types: 'String' and 'Real'
[Error] Unit1.pas(71): Incompatible types: 'String' and 'Real'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Dem6 вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск максимального отрицательного элемента в массиве Tomoa Microsoft Office Excel 6 27.11.2009 15:10
Нахождение минимального элемента в массиве [Паскаль] pionerka Помощь студентам 4 03.11.2009 16:02
Поиск максимального элемента в массиве Alexus999 Помощь студентам 8 08.06.2009 19:47
Поиск максимального и минимального элемента массива(с существенным дополнением) Dayterius Паскаль, Turbo Pascal, PascalABC.NET 6 20.05.2009 11:37
Поиск минимального (максимального) элемента массива Radamant Помощь студентам 10 24.12.2008 17:44