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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2012, 19:07   #1
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию "" Is not valid integer value.

Доброго времени суток. Требуется помощь. Нужно чтобы кто-то по свежему подкинул мысль, в чём же может быть проблема.
Если кратко то, по нажатию кнопки
Код:
Button2Click
я получаю матрицу ( не заполненную ) необходимых мне размеров и пронумерованную в фиксированных столбцах.
Ввод элементов осуществляется непосредственно в матрицу.
После ввода по нажатию клавиши
Код:
Button3Click
осуществляется реализованный алгоритм ... но по большей части он осуществляется для квадратных матриц, если же ввожу NxM матрицу то постоянно выбивает ошибку "" Is not valid integer value.
У меня отсюда возникает логический вопрос что я не ввёл? Или может я не так матрицу задал ... собственно сижу ломаю голову.

На заметку:
Когда мне выбивает матрицу то она получается именно тех размеров которых надо, заполняется тоже без проблем, а вот когда нажимаю кнопку то сразу выбрасывает ошибку.

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 i, j, rows, columns: integer;
begin
  rows:=StrToInt(Edit1.Text);
  columns:=StrToInt(Edit2.Text);
  StringGrid1.RowCount:=rows+1;
  StringGrid1.ColCount:=columns+1;

  for i := 0 to StringGrid1.ColCount do StringGrid1.Cells[i,0]:=IntTostr(i);
    for i := 0 to StringGrid1.RowCount do StringGrid1.Cells[0,i]:=IntTostr(i);

  if (Edit1.Text<>' ') and (Edit2.Text<>' ') then StringGrid1.Visible:=true else
  StringGrid1.Visible:=False;

end;

...
procedure TForm1.Button3Click(Sender: TObject);
var
....
begin

k:=StrToInt(Edit3.Text);
rows:=StrToInt(Edit1.Text);
columns:=StrToInt(Edit2.Text);
StringGrid1.RowCount:=rows+1;
Stringgrid1.ColCount:=columns+1;

     for i := 1 to StringGrid1.RowCount-1 do
        for j := 1 to StringGrid1.ColCount-1 do
           a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);

str:=1;
  for j:=1 to columns do vector_A[j]:=a[str,j];

 Memo1.Lines.Add(' ');
 for j:=1 to columns do
     Memo1.lines.Add(IntToStr(vector_A[j]));

 max_a:=vector_A[1];index_a:=1;
 for j:=1 to columns do begin
     if Vector_A[j] > max_a then index_a:=j;
 end;

 for i:=1 to rows do vector_B[i]:=a[i,index_a];
Заранее благодарен за помощь.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 06.10.2012, 19:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты не хочешь самостоятельно путем пошаговки понять где на каком операторе получается ошибка и почему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2012, 19:21   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  for i := 0 to StringGrid1.ColCount do StringGrid1.Cells[i,0]:=IntTostr(i);
    for i := 0 to StringGrid1.RowCount do StringGrid1.Cells[0,i]:=IntTostr(i);
1. Циклы должны быть до ColCount-1 и RowCount-1
2. 1-ый цикл заполняет все ячейки первой строки
3. 2-ой - все ячейки первого столбца
Код:
 a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
допустим i=2 и j=2. Ячейка не заполнена. StrToInt завершится аварийно

И Stilet прав, пошаговая трассировочка уже давно бы прояснила ситуацию
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2012, 19:27   #4
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Трассировал, но ни намёка на ошибку
Уже где-то с третьей попытки заметил что программа что то продолжает присваивать, но там были пустые значения.

Я извиняюсь что забыл про это написать.

-------

Пробежался ещё раз трассировкой, получилсась ерунда.
то есть ввожу скажем матрицу 3х2

3 9
9 2
9 6

По результатам трассировки
оно мне просматривает элементы
11 12 13 14
24
21 22 23 24
34
31
( выше указаны индексы )
Теперь задаюсь вопросом что же надо изменить.
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 06.10.2012 в 19:53. Причина: Данные по трассировке.
Leshii вне форума Ответить с цитированием
Старый 06.10.2012, 20:12   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

StrToIntDef используй и не парься.
Человек_Борща вне форума Ответить с цитированием
Старый 08.10.2012, 09:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
     for i := 1 to StringGrid1.RowCount-1 do
        for j := 1 to StringGrid1.ColCount-1 do
           a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
Вы явно забыли о том, что в этом идиотском StringGrid первый индекс - это номер столбца, второй - номер строки. А у Вас наоборот.
попробуйте так:
Код:
     for i := 1 to StringGrid1.RowCount-1 do
        for j := 1 to StringGrid1.ColCount-1 do
           a[i,j]:=StrToInt(StringGrid1.Cells[ j, i ]);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "Expecting a valid name" для оператора "<" в JScript Ратибор Редоран JavaScript, Ajax 0 15.12.2011 14:38
" is not valid integer value. Stringgrid в массив midletarket Помощь студентам 1 14.12.2010 14:34
Периодически выскакивает ошибка "not valid integer value" Dux Общие вопросы Delphi 11 07.10.2010 18:37
Ошибка(оконная а не компилятора) "is not a valid integer value" sinobithug Помощь студентам 6 14.08.2010 22:49
GetTickCount, ошибка "is not a valid integer value" Zeraim Общие вопросы Delphi 3 26.01.2010 19:11