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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 22:51   #1
Dmitri4
 
Регистрация: 23.05.2010
Сообщений: 6
Вопрос Поиск чисел в матрице

Не могу дописать программу, надеюсь на вашу помощь! Нужно посчитать количество чисел в матрице(повторяющиеся не считать). Заранее спасибо!

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Button1: TButton;
    Memo1: TMemo;
    StringGrid1: TStringGrid;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);

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

var
  Form1: TForm1;
a:array [1..10] of extended;
n,k,m,i,j,kol:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);   //Подсчет чисел
begin


memo1.lines.add('Количество ='+floattostr(kol));
end;

procedure TForm1.FormCreate(Sender: TObject); //Вывод матрицы
begin
n:=3;
k:=3;
Edit1.Text:=floattostr(n);
Edit2.Text:=floattostr(k);
StringGrid1.ColCount:=n+1;
StringGrid1.rowCount:=n+1;
StringGrid1.Cells[0,0]:='Массив';
    Randomize;
    for i:=1 to n do
    for j:=1 to k do
      begin
      stringGrid1.Cells[0,i]:='i='+Inttostr(i);
      StringGrid1.Cells[i,0]:='j='+Inttostr(i);
      end;
      end;



procedure TForm1.Button2Click(Sender: TObject);
var a:array[1..100,1..100] of integer;
begin
  for i:=1 to n+1 do
      for j:=1 to k+1 do
      begin
      stringGrid1.Cells[i,j]:=Inttostr(random(101));
      a[i,j]:=strtoint(stringgrid1.cells[i,j])
      end;

end;

end.

Последний раз редактировалось Dmitri4; 23.05.2010 в 22:56.
Dmitri4 вне форума Ответить с цитированием
Старый 23.05.2010, 23:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Решить эту задачу можно множеством разнообразных способов..
Например, такой алгоритм - для каждого числа проверяем, есть ли оно в матрице с координатами меньше текущих I и J - если есть, значит оно ранее обработано и мы его не считаем. Иначе - счётчик чисел увеличиваем на единицу.

А можно и сохранять все найденные числа (например в TStringList - там искать удобно
Примерно так:

пишу прямо на форуме, могут быть опечатки...
Код:
procedure TForm1.Button1Click(Sender: TObject);   //Подсчет чисел
var TS : TStringList;
   i,j,kol : integer;
   s : string;
begin
  TS := TStringList.Create;
   for i:=1 to n+1 do
     for j:=1 to k+1 do
      begin
         s := stringgrid1.cells[i,j];
         if TS.IndexOf(s)< 0 then TS.Append(s);
      end;
  kol := TS.Count;
  FreeAndNil(TS);
  memo1.lines.add('Количество ='+IntToStr(kol));
end;

Последний раз редактировалось Serge_Bliznykov; 23.05.2010 в 23:59. Причина: исправил опечатку в коде: вместо TName должно быть TS!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2010, 23:44   #3
Dmitri4
 
Регистрация: 23.05.2010
Сообщений: 6
По умолчанию

Serge_Bliznykov, прошу прощение, немного не понял. Что именно это за строчка?

Код:
if TS.IndexOf(s)< 0 then TName.Append(s);
Dmitri4 вне форума Ответить с цитированием
Старый 23.05.2010, 23:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вместо TName.Append разумеется должно быть TS.Append
вот и обещанная опечатка!

Цитата:
Код:
if TS.IndexOf(s)< 0 then TS.Append(s);
перевожу с машинного языка на русский - если очередное число (которое у нас в переменной s) не найдено в наборе данных TS, тогда сохраним это число s в нашем наборе TS.
после окончания цикла прохода по массиву stringgrid1 счётчик строк в TS и даст нам искомое количество различающихся чисел.

Последний раз редактировалось Serge_Bliznykov; 24.05.2010 в 00:02.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск подматрицы в матрице ArtInt Общие вопросы Delphi 3 14.04.2010 22:11
поиск повторяющихся элементов в матрице I_newbie Помощь студентам 2 15.03.2010 22:44
Поиск в матрице Nikolai17 Помощь студентам 3 04.12.2009 00:09
поиск нуля в матрице ciaonataha Общие вопросы C/C++ 13 31.03.2009 21:29
Нахождение чисел в матрице bpystep Помощь студентам 12 23.03.2009 00:31