![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
Есть Stringgrid из 9 столбцов(Группа, Фамилия, Математика, Физика, ОАиП, ООП, БД, уч в общ жизни, Стипендия) Делаю расчет стипендии в последнем столбце. Запускаю цикл на проверку значений с 3 столбца и второй стоки(там числа), все компилируется, но когда наживаю Рассчитать стипендию, то выдает ошибку is not valid integer value, как я понимаю он не находит числовых значений в StringGrid-е, но там у меня числа, и пустых строк нет. У кого какие идеи? В чем проблема? Код:
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; |
|
#2
|
||||
|
||||
|
Ром, скажу откровенно, так считать - зло.
Но, в твоём случае можно использовать StrToIntDef(Строка, 0); Ноль будет возвращаться в том случае, если конвертировать строку не получится. Код:
for i:=3 to stringgrid1.ColCount-1 do // по всем предметам, кроме учебных работ
begin
for j:= 2 to stringgrid1.RowCount do // по всем ученикам
begin
ok := Boolean(StrToInt(stringgrid1.Cells[8,j]));
if stringgrid1.Cells[i,j] = '3' and ok then k := 1.00 // если появилась хоть одна тройка, но всё ок с общ работой, то степуха будет
else if stringgrid1.Cells[i,j] = '4' then k := 1.25 // если троек нет, но есть 4ка то степухе + 25%
else k := 1.5; // если ни 3ек ни 4ок и с работой ок то к степухе 50%
end;
stringgrid1.Cells[9,i] := FormatFloat('0.00', StrToFloat(Edit1.Text) * k);
end;
Последний раз редактировалось Uniq!, 16.10.2013 в 11:09. |
|
#3
|
||||
|
||||
|
Если эти данные из БиДе берутся, то лучше в запрос добавить подсчет суммы.
|
|
#4
|
|||
|
|||
|
Определьсь с индексами i,j; какой из них строка, а какой столбец.
в строке 16 - первый индекс i, второй j Код:
strtoint(stringgrid1.Cells[i,j]) в строке 19 - второй индекс i Код:
stringgrid1.Cells[9,i]:= по синтаксису Код:
property Cells[ACol, ARow: Integer]: string |