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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2014, 19:38   #1
Kate21143
Новичок
Джуниор
 
Регистрация: 10.06.2014
Сообщений: 1
По умолчанию Дана целочисленная матрица размера MXN. Найти ее столбцы, все элементы которых различны.Эти столбцы должны закрашиваться.

Дана целочисленная матрица размера MXN. Найти ее столбцы, все элементы которых различны.Эти столбцы должны закрашиваться.
Вот мой код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    strngrd1: TStringGrid;
    txt1: TStaticText;
    edt1: TEdit;
    txt2: TStaticText;
    edt2: TEdit;
    btn1: TButton;
    mmo1: TMemo;
    btn2: TButton;
    BitBtn1: TBitBtn;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  n,m,i,j:Integer;
  a: array[1..100,1..100] of integer;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
        n:=StrToInt(Edt1.Text);
        m:=StrToInt(Edt2.Text);
        Strngrd1.RowCount:=n;
        Strngrd1.ColCount:=m;
        for i:=1 to m do
        for j:=1 to n do
        begin
          a[i,j]:=random(100);
          Strngrd1.Cells[i-1,j-1]:=IntToStr( a[i,j] );
        end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
    Randomize;
    FillChar(a,SizeOf(a),0);
end;

procedure TForm1.btn2Click(Sender: TObject);
Var
i,j,x,t,k: integer;
str: Array [1..100] of
Boolean;
rec:Trect;
begin
    Mmo1.Clear;
    FillChar(str,sizeof(str),false);
    for i:=1 to m do
      Begin
       j:=1;
       t:=0;
       while (j<n) and (t<>1) do
        Begin
         for k:=i+1 to n do if  a[k,j] = a[i,j]  then t:=1;
          inc(j);
        end;
        if ( t <> 1 ) then str[i]:=true;
      end;
      Mmo1.Lines[0]:='Cтолбцы все элементы,которых различны следующие:' ;
      for i:=1 to m do
      if str[i]=true then Mmo1.Lines.add('Столбец номер -' + IntToStr(i));
      for i:=0 to n do
       for j:=0 to m do
        begin
            StrnGrd1.Canvas.Brush.Color:=clYellow;
 rec:=StrnGrd1.cellrect(j,i);
 strnGrd1.Canvas.FillRect(rec);
 StrnGrd1.Font.color:=clBlack;
 StrnGrd1.Canvas.TextOut(Rec.left+2,rec.top+2,StrnGrd1.cells[j,i]);
        end;
end;

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

end.

Последний раз редактировалось Stilet; 10.06.2014 в 19:44.
Kate21143 вне форума Ответить с цитированием
Старый 10.06.2014, 19:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не нравится мне твой код...
Предложу свое видение:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids;

type

  { TForm1 }

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
  private
    { private declarations }
  public
    { public declarations }
  end;
const
  n=4;m=4;
var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var i,j,k:integer;s:string;
begin
  with StringGrid1 do begin
    FixedRows:=0;FixedCols:=0;Align:=alClient;
    for i:=0 to RowCount-1 do begin
      for j:=0 to ColCount-1 do begin
        s:=IntToStr(Random(10));
        Cells[j,i]:=s;
        if i=0 then Objects[j,0]:=TObject(0) else
          for k:=i-1 downto 0 do
           if Cells[j,k]=s then begin
             Objects[j,0]:=TObject(1);
           end;
      end;
    end;
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
  with TStringGrid(Sender) do begin
    if integer(Objects[aCol,0])<>1 then begin
      Canvas.Brush.Color:=clRed;
      Canvas.FillRect(aRect);
      Canvas.TextRect(aRect,0,0,Cells[aCol,aRow]);
    end;
  end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2014, 07:54   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Можно из этой темы подогнать
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция. целочисленная квадратная матрица порядка N. Найти номера строк, все элементы которых четные. SsAn Паскаль, Turbo Pascal, PascalABC.NET 11 24.12.2013 21:35
Дана целочисленная матрица m*n. Найти количество ее строк, все элементы которых различны. slovetskii Паскаль, Turbo Pascal, PascalABC.NET 8 24.10.2013 17:29
Дана матрица действительных чисел A размера MxN, элементы строк которой упорядочиваются по неубыванию. Получить одномерный массив Tramchik Паскаль, Turbo Pascal, PascalABC.NET 7 23.06.2013 13:08
Упорядочить по убыванию столбцы матрицы, все элементы которых присутствуют в массиве. Gluck231 Помощь студентам 0 19.01.2012 09:59
Найти кол-во её стобцов,все элементы которых различны. Delphi. Flashcherry Помощь студентам 1 21.03.2009 00:46