Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.10.2011, 13:36
BinguelBinguel BinguelBinguel вне форума
Прохожий
 
Регистрация: 28.10.2011
Сообщения: 10
Репутация: 10
По умолчанию Проблемы с кодом!

Здравствуйте! В программировании совсем новичок и столкнулась с ним только в универе, поэтому появилась куча проблем. Начну по порядку.
В теории: написана программа(сырая, но все же), в которой можно регулировать размерность массива с клавиатуры, вводить свои числа, генерировать рандомные числа, и при нажатии на кнопку «найти минимум», она находит минимальное положительное значение и закрашивает ячейку.

На практике: с размерностью какой-то косяк, он хорошо виден на скрине:


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

Вот код:
Код:
unit Unit1_MxN;

interface

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

type

matr=array[1..10,1..10] of shortint;

  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   m,n: byte;
   min:integer;
implementation

{$R *.dfm}
 function randomreal (mini, max:single):single;

    begin
      randomreal:=mini+(max-mini)*random;
    end;
procedure TForm1.Button1Click(Sender: TObject);
begin
     m:= strtoint(edit1.Text);
     n:=strtoint(edit2.text);

     Stringgrid1.Height:= stringgrid1.defaultrowheight*(m+1)+m;
     stringgrid1.Width:= stringgrid1.DefaultColWidth*(n+1)+n;
     stringgrid1.Visible:= true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  for m:= 0 to 3 do
  for n:= 0 to 3 do
   stringgrid1.cells[n,m]:=inttostr(-127+random(255));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

procedure TForm1.Button4Click(Sender: TObject);

var
i:integer;
a:array[1..10] of integer;


begin

min:=1;
for i:= 2 to 10 do
 if (0 <= a[i]) and (a[i] < a[min]) then min:=i;

   end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if StringGrid1.Cells[acol,arow]<>'' then
   begin
if StrToInt(StringGrid1.Cells[acol,arow]) = min then
    begin
       StringGrid1.Canvas.Brush.Color:=clGreen;
       StringGrid1.Canvas.FillRect(Rect);
       StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[Acol,Arow]);
    end;
   end;
end;

end.
Ответить с цитированием
  #2  
Старый 28.10.2011, 15:12
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от BinguelBinguel
Здравствуйте! В программировании совсем новичок и столкнулась с ним только в универе, поэтому появилась куча проблем.

Могу посоветовать тебе выложить сюда архив с программой, так больше шансов, что форумчане тебе на все твои косяки укажут + подскажут по мелочам.
__________________
Google в помощь
Ответить с цитированием
  #3  
Старый 28.10.2011, 16:30
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Попробуй исправить эти функции так:
Код:
procedure TfMain.btn1Click(Sender: TObject);
begin
   m:= strtoint(e1.Text);
   n:=strtoint(e2.text);
   Stringgrid1.colcount := m;
   stringgrid1.rowcount := n;
end;

procedure TfMain.btn3Click(Sender: TObject);
var i, j : integer;
begin
  min := 130; // Чтобы при повторной прорисовке не выбирался минимальный
  for i:= 0 to m-1 do
    for j:= 0 to n-1 do
      stringgrid1.cells[i,j] := inttostr(-127+random(255));
end;

procedure TfMain.btn4Click(Sender: TObject);
var i, j, k, l : integer;
    a : array[1..10] of integer;
begin
  min := 130;
  for i := 0 to m-1 do
    for j := 0 to n - 1 do
      if (0 < strtoint(stringgrid1.cells[i,j])) and (strtoint(stringgrid1.cells[i,j]) < min) then
          min := strtoint(stringgrid1.cells[i,j]);
  StringGrid1.Repaint;
end;
Админ: Пользуемся тегами для оформления кода, иначе последуют санкции!

Последний раз редактировалось Admin, 28.10.2011 в 17:14.
Ответить с цитированием
  #4  
Старый 28.10.2011, 16:46
BinguelBinguel BinguelBinguel вне форума
Прохожий
 
Регистрация: 28.10.2011
Сообщения: 10
Репутация: 10
По умолчанию

_taddy, Ооооо, спасибо! *_* большое спасибо р.р так помогли!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025