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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 10:27   #1
Вероника92
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 35
По умолчанию Заполнение stringgrid

изначально stringgrid размерностью m на n, m не равно n. он заполняется случайными числами.далее нужно из этого stringgrid сделать stringgrid размерностью m на m и пустые ячейки заполнить нулями.как это реализовать в delphi?
Вероника92 вне форума Ответить с цитированием
Старый 22.10.2014, 10:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Выставить ColCount:=m;
Потом в двойном цикле (таком же как и заполнение) записать символ '0' в пустые ячейки.
Циклы заполнения исходной таблицы у тебя уже есть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 11:30   #3
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Я в тебя верю!
Даже не думай использовать ctrl+c/ctrl+v
Код:
procedure TForm1.Button1Click(Sender: TObject);
 Var
  m, n, i, k: integer;

begin
  m:=m.text;
  n:=n.Text;
  Grid.ColCount:=m;
  Grid1.RowCount:=n;
  Grid1.FixedCols:=0;
  Grid1.FixedRows:=0;
  Grid1.Height:=Grid.RowHeights[0]*(Grid.RowCount+1);
  Grid.Width:=Grid.ColWidths[0]*(Grid.ColCount+1);
  Randomize;
  Begin
   for i := 0 to m-1 do
     for k := 0 to n-1 do
       Grid.Cells[i, k]:=inttostr(random(100));
  End;
  Grid.RowCount:=m;
  Grid.Height:=Grid.RowHeights[0]*(Grid.RowCount+1);
end;
Заполнить нулями оставшиеся пустые ячейки ты сможешь самостоятельно, если разберешь код
— Двери есть везде. Просто нужно знать, как в них войти.

Последний раз редактировалось Foreseen; 22.10.2014 в 11:33.
Foreseen вне форума Ответить с цитированием
Старый 22.10.2014, 14:05   #4
Вероника92
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 35
По умолчанию

Код:
for i:=1 to n do
 begin
  k:=0;
  j:=1;
  while(j<=n)and(k=0) do
  if strtoint(strngrd1.cells[j-1,i-1])<0 then k:=1
  else inc(j);
  if k=1 then
   begin
    min:=strtoint(strngrd1.cells[0,i-1]);
    for j:=1 to n do
    if min> strtoint(strngrd1.cells[j-1,i-1])then
    min:=strtoint(strngrd1.cells[j-1,i-1]);
    for j:=1 to n do
    strngrd2.cells[j-1,i-1]:=inttostr(strtoint(strngrd1.cells[j-1,i-1])-min)
   end
  else
  for j:=1 to n do
  strngrd2.cells[j-1,i-1]:=inttostr(strtoint(strngrd1.cells[j-1,i-1]))
 end;
   for i:=1 to n do
    for j:=1 to n do
    c[i,j]:=strtoint(strngrd2.Cells[j-1,i-1]);
for i:=1 to n do
    for j:=1 to n do
      x[i,j]:=0;
      L:=0;

      VengMethod(C, X, L);

  for i:=1 to n do
    for j:=1 to n do
      strngrd3.Cells[j-1,i-1]:=IntToStr(x[i,j]);
      L:=0;
    for i:=1 to n do
    begin
    for j:=1 to n do
    if StrToInt(strngrd3.cells[j-1,i-1])=1 then
      l:=l+strtoint(strngrd1.cells[j-1,i-1])
    end;
     edt1.Text:=IntToStr(L);
end;
если оставлять просто заполнение то все правильно делает,а с дальнейшей работой вылетает.может вы увидите в чем проблема
Вероника92 вне форума Ответить с цитированием
Старый 22.10.2014, 14:41   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Текст ошибки при вылете в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 15:06   #6
Вероника92
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 35
По умолчанию

Код:
procedure TForm6.btn1Click(Sender: TObject);
var j,i,k,min:Integer;
begin
  m:=se1.Value;
  Edt1.Text:='';
  SetLength(C, n+1, n+1); // â íóëåâûõ ñòîëáöå è ñòðîêå ñîäåðæèòñÿ êîë-âî íóëåé
                          // â ñîîòâåòñòâóþùèõ ñòðîêàõ è ñòîëáöàõ
  SetLength(X, n+1, n+1);
   strngrd1.colCount:=m;
   strngrd2.colCount:=m;
   strngrd3.colCount:=m;
   for j:=1 to m do
   for i:=m-n to m do
   strngrd1.Cells[j-1,i-1]:=inttostr(0);
  for i:=1 to m do
 begin
  k:=0;
  j:=1;
  while(j<=m)and(k=0) do
  if strtoint(strngrd1.cells[j-1,i-1])<0 then k:=1
  else inc(j);
  if k=1 then
   begin
    min:=strtoint(strngrd1.cells[0,i-1]);
    for j:=1 to m do
    if min> strtoint(strngrd1.cells[j-1,i-1])then
    min:=strtoint(strngrd1.cells[j-1,i-1]);
    for j:=1 to m do
    strngrd2.cells[j-1,i-1]:=inttostr(strtoint(strngrd1.cells[j-1,i-1])-min)
   end
  else
  for j:=1 to m do
  strngrd2.cells[j-1,i-1]:=inttostr(strtoint(strngrd1.cells[j-1,i-1]))
 end;
   for i:=1 to m do
    for j:=1 to m do
    c[i,j]:=strtoint(strngrd2.Cells[j-1,i-1]);
for i:=1 to m do
    for j:=1 to m do
      x[i,j]:=0;
      L:=0;

      VengMethod(C, X, L);

  for i:=1 to m do
    for j:=1 to m do
      strngrd3.Cells[j-1,i-1]:=IntToStr(x[i,j]);
      L:=0;
    for i:=1 to m do
    begin
    for j:=1 to m do
    if StrToInt(strngrd3.cells[j-1,i-1])=1 then
      l:=l+strtoint(strngrd1.cells[j-1,i-1])
    end;
     edt1.Text:=IntToStr(L);
end;
project project1.exe raised exception class econverterror with message is not a valid integer value
Вероника92 вне форума Ответить с цитированием
Старый 22.10.2014, 15:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Такое может выдавать strtoint.
Замени его на strtointdef()
Например:
Код:
StrToIntDef(strngrd3.cells[j-1,i-1],0)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение stringgrid влад1991 Общие вопросы Delphi 0 03.04.2013 22:29
Заполнение StringGrid Новичёк_Delphi Помощь студентам 3 09.12.2012 13:53
Stringgrid. Заполнение))) Anna-anna Общие вопросы Delphi 2 03.05.2010 22:31
Заполнение StringGrid Альбертъ Общие вопросы Delphi 2 24.07.2009 13:42
Заполнение StringGrid из Edit Инна Помощь студентам 13 03.05.2007 13:44