Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103

is not valid integer value

16.10.2013, 10:05. Показов 2741. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть Stringgrid из 9 столбцов(Группа, Фамилия, Математика, Физика, ОАиП, ООП, БД, уч в общ жизни, Стипендия)
Делаю расчет стипендии в последнем столбце. Запускаю цикл на проверку значений с 3 столбца и второй стоки(там числа), все компилируется, но когда наживаю Рассчитать стипендию, то выдает ошибку is not valid integer value, как я понимаю он не находит числовых значений в StringGrid-е, но там у меня числа, и пустых строк нет.
У кого какие идеи? В чем проблема?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i, j, k5, k4, k3: integer;
  s: double;
begin
s:=StrToFloat(Edit1.Text);
for i:=3 to stringgrid1.ColCount do
  begin
  for j:= 2 to stringgrid1.RowCount do
    begin
    k5:=0;
    k4:=0;
    k3:=0;
    if strtoint(stringgrid1.Cells[i,j]) = 5 then k5:=k5+1
    else if strtoint(stringgrid1.Cells[i,j]) = 4 then k4:=k4+1
    else if strtoint(stringgrid1.Cells[i,j]) = 3 then k3:=k3+1;
    if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[8,i])=1) then
    begin
        stringgrid1.Cells[9,i]:=FloatToStr(s+s/2);
    end
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[8,i])=0) then
    begin
        stringgrid1.Cells[9,i]:=FloatToStr(s+s/4);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then
    begin
        stringgrid1.Cells[9,i]:=FloatToStr(s);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[8,i])=1) then
    begin
        stringgrid1.Cells[9,i]:=FloatToStr(s);
    end
    else stringgrid1.Cells[9,i]:='Нет';
 
    end;
  end;
end;
Миниатюры
is not valid integer value  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2013, 10:05
Ответы с готовыми решениями:

is not a valid integer value
Delphi 7 Имеется такой код в потоке procedure TMyThread.Execute; var c: integer; begin error_acc := false; i:= 1;

'' is not a valid integer value.
при запуске скомпилированной программы выходит '' is not a valid integer value. запускаю через делфи выделяет красным и останавливает...

'' is not a valid integer value
Понятно, что что-то не целое число, но вот как это исправить..:? Беру любое число из Edit.6 и складываю его с элементами Combobox'a,...

13
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
16.10.2013, 10:09
Первая колонка(столбец) в гриде имеет индекс = 0. Последняя - ColCount(RowCount)-1
0
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 10:15  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Первая колонка(столбец) в гриде имеет индекс = 0. Последняя - ColCount(RowCount)-1

изменил, но все равно таже ошибка

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i, j, k5, k4, k3: integer;
  s: double;
begin
StringGrid1.ColCount:=9;
s:=StrToFloat(Edit1.Text);
for i:=2 to stringgrid1.ColCount-1 do
  begin
  for j:= 1 to stringgrid1.RowCount-1 do
    begin
    k5:=0;
    k4:=0;
    k3:=0;
    if strtoint(stringgrid1.Cells[i,j]) = 5 then k5:=k5+1
    else if strtoint(stringgrid1.Cells[i,j]) = 4 then k4:=k4+1
    else if strtoint(stringgrid1.Cells[i,j]) = 3 then k3:=k3+1;
    if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=1) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s+s/2);
    end
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=0) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s+s/4);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[7,i])=1) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s);
    end
    else stringgrid1.Cells[8,i]:='Нет';
 
    end;
  end;
end;
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 10:22
roma88gruzd88, если Вы используете преобразование к целочисленному типу только для проверки, то измените все такие преобразования:
Delphi
1
... strtoint(stringgrid1.Cells[i,j]) = 5 ...
на
Delphi
1
...stringgrid1.Cells[i,j] = '5' ...
0
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 10:30  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
roma88gruzd88, если Вы используете преобразование к целочисленному типу только для проверки, то измените все такие преобразования:
Delphi
1
... strtoint(stringgrid1.Cells[i,j]) = 5 ...
на
Delphi
1
...stringgrid1.Cells[i,j] = '5' ...
ошибка исчезла но появилась новая проблема, не работает цикл
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=1) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s+s/2);
    end
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=0) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s+s/4);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s);
    end
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[7,i])=1) then
    begin
        stringgrid1.Cells[8,i]:=FloatToStr(s);
    end
    else stringgrid1.Cells[8,i]:='Íåò';
в последнем столбце выдает у всех одинаковый результат(хотя данные разные), а во второй строке вообще пусто(
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 10:42
roma88gruzd88, обратите внимание, что в одном случае мы используете счетчик цикла i первым аргументом при определении нужной ячейки, а в другом - вторым:
stringgrid1.Cells[i,j] и stringgrid1.Cells[7,i]
0
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 10:45  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
roma88gruzd88, обратите внимание, что в одном случае мы используете счетчик цикла i первым аргументом при определении нужной ячейки, а в другом - вторым:
stringgrid1.Cells[i,j] и stringgrid1.Cells[7,i]
я это уже заметил и исправил) но все равно пишет одинаковые значения в последний столбец
Вложения
Тип файла: rar Вариант 6.rar (211.2 Кб, 4 просмотров)
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 10:49
roma88gruzd88, опишите условие задачи. Как нужно начислять стипендию?
1
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 10:52  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
roma88gruzd88, опишите условие задачи. Как нужно начислять стипендию?

Написать программу зачисления студентов группы Х на стипендию. Студент, получивший все оценки «5» и активно участвующий в общественной работе, зачисляется на повышенную стипендию (доплата 50%), не активно участвует – доплата 25%. Студенты, получившие «4» и «5», зачисляются на обычную стипендию. Студент, получивший одну оценку «3», но активно занимающийся общественной работой, также зачисляется на стипендию, в противном случае зачисление не производится. Индекс группы вводится с терминала.
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 11:06
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i, j, k5, k4, k3: integer;
  s: double;
begin
StringGrid1.ColCount:=9;
s:=StrToFloat(Edit1.Text);
for i:=1 to stringgrid1.RowCount-1 do
  begin
    k5:=0;
    k4:=0;
    k3:=0;
 
    for j:= 2 to stringgrid1.ColCount-1 do
      begin
        if stringgrid1.Cells[j,i] ='5' then k5:=k5+1
        else if stringgrid1.Cells[j,i] = '4' then k4:=k4+1
        else if stringgrid1.Cells[j,i] = '3' then k3:=k3+1;
      end;
    if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/2)
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=0) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/4)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else stringgrid1.Cells[8,i]:='0';
  end;
end;
1
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 11:11  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i, j, k5, k4, k3: integer;
  s: double;
begin
StringGrid1.ColCount:=9;
s:=StrToFloat(Edit1.Text);
for i:=1 to stringgrid1.RowCount-1 do
  begin
    k5:=0;
    k4:=0;
    k3:=0;
 
    for j:= 2 to stringgrid1.ColCount-1 do
      begin
        if stringgrid1.Cells[j,i] ='5' then k5:=k5+1
        else if stringgrid1.Cells[j,i] = '4' then k4:=k4+1
        else if stringgrid1.Cells[j,i] = '3' then k3:=k3+1;
      end;
    if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/2)
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=0) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/4)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else stringgrid1.Cells[8,i]:='0';
  end;
end;



спасибо большое) не первый раз выручаешь)


еще вопрос. можно ли как-то сделать так, чтобы количество строк в stringgrid автоматически становилось таким, сколько строк всего в нем записано?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 11:28
Цитата Сообщение от roma88gruzd88 Посмотреть сообщение
можно ли как-то сделать так, чтобы количество строк в stringgrid автоматически становилось таким, сколько строк всего в нем записано?
В событии OnShow формы увеличьте значение RowCount на 1.
Delphi
1
StringGrid1.RowCount := Count+1;
Кстати, зачем вам дублирующие друг друга действия в событиях OnShow и OnCreate вашей формы?
1
7 / 7 / 1
Регистрация: 28.04.2013
Сообщений: 103
16.10.2013, 11:41  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
В событии OnShow формы увеличьте значение RowCount на 1.
Delphi
1
StringGrid1.RowCount := Count+1;
Кстати, зачем вам дублирующие друг друга действия в событиях OnShow и OnCreate вашей формы?
я уже убрал)
модифицировал немного код, чтобы стипендия начислялась только по определенной группе, но он зависает не глянете?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i, j, x, k5, k4, k3: integer;
  s: double;
begin
for x:= 1 to stringgrid1.RowCount-1 do
while stringgrid1.Cells[0,x]=edit2.Text do
begin
StringGrid1.ColCount:=9;
s:=StrToFloat(Edit1.Text);
for i:=1 to stringgrid1.RowCount-1 do
  begin
    k5:=0;
    k4:=0;
    k3:=0;
    for j:= 2 to stringgrid1.ColCount-1 do
      begin
        if stringgrid1.Cells[j,i] ='5' then k5:=k5+1
        else if stringgrid1.Cells[j,i] = '4' then k4:=k4+1
        else if stringgrid1.Cells[j,i] = '3' then k3:=k3+1;
      end;
    if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/2)
    else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[7,i])=0) then stringgrid1.Cells[8,i]:=FloatToStr(s+s/4)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[7,i])=1) then stringgrid1.Cells[8,i]:=FloatToStr(s)
    else stringgrid1.Cells[8,i]:='Нет';
  end;
end;
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.10.2013, 11:53
roma88gruzd88, ерунду Вы написали. Нужно всего лишь вставить в проверенном коде после строки
Delphi
1
for i:=1 to stringgrid1.RowCount-1 do
строку
Delphi
1
if stringgrid1.Cells[0,i]=edit2.Text then
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2013, 11:53
Помогаю со студенческими работами здесь

is not a valid integer value
Помогите! пишет ошибку, ошибка в этой части m:=Random(100); for i:=0 to StringGrid1.RowCount-1 do for j:=0 to...

is not valid integer value :(
Что тут не так? procedure TForm3.Button3Click(Sender: TObject); var a:array of integer; i,k:integer; buf:Integer; begin ...

. is not a valid integer value
не знаю правильно ли я все сделала но я вложила в тему 2 скриншота. Один пример, один что выходит у меня. Вот листинг программы : unit...

Is not valid integer value
private { Private declarations } public { Public declarations } end; var key:byte; i,y,n:integer; Form1:...

is not a valid integer value
Ведомости о движении поездов: номер поезда,направление (пункт отправки - пункт назначения), тип поезда, время отправления, стоимость...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru