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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 17:14   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Восклицание Подсчет количества цифр и их занесение в StringGrid

добрый вечер! Суть проблемы изложил во вложение. Прошу вас, посмотрите . Предполагаю, что цикл возможно будет таким:
Код:
var
 i,j: integer;
begin
 for i:=0 to Form1.SG1.ColCount do
 for j:=0 to Form1.SG1.RowCount do
 begin
   if Form1.SG1.Cell[i,j] = '1' then
   begin
     Form1.SG3.Cell[0,0]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '2' then
   begin
     Form1.SG3.Cell[0,1]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '3' then
   begin
     Form1.SG3.Cell[0,2]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '4' then
   begin
     Form1.SG3.Cell[1,0]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '5' then
   begin
     Form1.SG3.Cell[1,1]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '6' then
   begin
     Form1.SG3.Cell[1,2]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '7' then
   begin
     Form1.SG3.Cell[2,0]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '8' then
   begin
     Form1.SG3.Cell[2,1]:=Что написать здесь?;
   end;

   if Form1.SG1.Cell[i,j] = '9' then
   begin
     Form1.SG3.Cell[2,2]:=Что написать здесь?;
   end;
 end;
end;
Понимаю, что скорее всего мой вариант цикла - это извращение, но если есть возможность сделать по-другому, то как? Заранее благодарен за помощь.
Изображения
Тип файла: jpg Безымянный.jpg (46.3 Кб, 138 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.12.2009, 19:56   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Например так
Код:
var
  q, k, i, j: integer;
  s: string;
begin
  for i := 0 to stringgrid1.RowCount - 1 do
  for j := 0 to stringgrid1.ColCount - 1 do
  begin
    s := stringgrid1.Cells[i, j];
    for k := 1 to length(s) do
    begin
      q := strtoint(s[k]);
      if q <> 0 then
      stringgrid3.Cells[(q - 1) div 3, (q - 1) mod 3] := stringgrid3.Cells[(q - 1) div 3, (q - 1) mod 3] + s[k]
    end;
  end;
end;
Потом пустые ячейки заполнить словом нет

Последний раз редактировалось eoln; 27.12.2009 в 20:01. Причина: 1 => 3
eoln вне форума Ответить с цитированием
Старый 27.12.2009, 20:16   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

eoln, Спасибо за код конечно, но я что-то не могу понять что он делает . Результат его работы во втором вложении. В третьей таблице (SG3) должно быть именно количество видов цифр.
Вот Ваш код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  q, k, i, j: integer;
  s: string;
begin
  for i := 0 to Form1.SG1.RowCount - 1 do
  for j := 0 to Form1.SG1.ColCount - 1 do
  begin
    s := Form1.SG1.Cells[i, j];
    for k := 1 to Length(s) do
    begin
      q := StrToInt(s[k]);
      if q <> 0 then
      Form1.SG3.Cells[(q - 1) div 3, (q - 1) mod 3] := Form1.SG1.Cells[(q - 1) div 3, (q - 1) mod 3] + s[k]
    end;
  end;
end;
Изображения
Тип файла: png Безымянный.png (4.3 Кб, 94 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.12.2009, 20:40   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Form1.SG3.Cells[(q - 1) div 3, (q - 1) mod 3] := Form1.SG1.Cells[(q - 1) div 3, (q - 1) mod 3] + s[k]
Тут у вас неточность при переименовывании
Если интересует именно количество, то так
Код:
var
  q, k, i, j: integer;
  s: string;
begin
  for i := 0 to 2 do for j := 0 to 2 do SG3.Cells[i, j] := '0';
  for i := 0 to Form1.SG1.RowCount - 1 do
  for j := 0 to Form1.SG1.ColCount - 1 do
  begin
    s := Form1.SG1.Cells[i, j];
    for k := 1 to Length(s) do
    begin
      q := StrToInt(s[k]);
      if q <> 0 then
      SG3.Cells[(q - 1) div 3, (q - 1) mod 3] :=
        inttostr(strtoint( SG3.Cells[(q - 1) div 3, (q - 1) mod 3]) + 1)
    end;
  end;
  for i := 0 to 2 do for j := 0 to 2 do if SG3.Cells[i, j] = '0' then SG3.Cells[i, j] := 'нет';
end;
eoln вне форума Ответить с цитированием
Старый 27.12.2009, 20:55   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  CellLen: Integer;
  i, j, l: Integer;
  tmp: String;
  Res: array [1..9] of Byte;
begin
  for i := 0 to 9 do Res[i] := 0;
  for j := 0 to StringGrid1.RowCount - 1 do
    for i := 0 to StringGrid1.ColCount - 1 do
    begin
      CellLen := Length(StringGrid1.Cells[i, j]);
      tmp := StringGrid1.Cells[i, j];
      for l := 1 to CellLen do
        Inc(Res[StrToInt(tmp[l])]);
    end;

    l := 1;
    for j := 0 to 2 do
      for i := 0 to 2 do
      begin
        if Res[l] = 0 then StringGrid3.Cells[i, j] := 'Нет'
        else StringGrid3.Cells[i, j] := IntToStr(Res[l]);
        Inc(l);
      end;
end;
Код отладочный, его еще можно оптимизировать ))
Изображения
Тип файла: png strgrid.PNG (5.2 Кб, 99 просмотров)

Последний раз редактировалось psycho-coder; 27.12.2009 в 20:58.
psycho-coder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества совпадений в таблице aval Microsoft Office Excel 8 08.11.2009 21:50
Подсчет количества в Excel срочно!!! Kunia Microsoft Office Excel 5 03.02.2009 07:31
Подсчет количества открытий файла Maxx Microsoft Office Excel 6 27.01.2009 16:53
Подсчет общего количества студентов NikolayGVB Microsoft Office Excel 4 19.01.2009 19:10
Подсчет количества и частоты Ensoph Помощь студентам 6 08.05.2008 10:16