Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

а как правильно выполнять арифмитические действия в StringGrid? [D6, Win2k]


PTE ©   (2002-06-03 12:37:00) 

а как правильно выполнять арифмитические действия в StringGrid если нужно складывать и умножать данные по отдельным ячейкам?


Катерина   (2002-06-03 15:50:00) [1]

Пришлите код, лучше на e-mail, т.к. на формум сегодня не выйду


PTE   (2002-06-03 15:20:00) [2]

Всё равно ошибка осталась


Катерина   (2002-06-03 14:47:00) [3]

Можно и так, без try...

var c1,c2, S,S1 : real; code1, code2, i :integer;
begin
S := 0;
with StringGrid1 do
for i := 1 to 9 do
begin
val(cells[1,i],c1,code1);
val(cells[2,i],c2,code2);
if (code1 = 0) and (code2 = 0) then
begin
S1 := c1*c2;
S := S + S1;
cells[3,i] := FormatFloat("0.000",S1);
end else
cells[3,i] := "";
end;

StringGrid1.cells[3,10] := FormatFloat("0.000",S*20/120);

end;


Катерина   (2002-06-03 14:38:00) [4]

Приведенный код делает то же самое, что и Ваш, только, если в ячейке не число (пусто или посторонние символы), то в результат ничего не пишется и число не учавствует в суммировании.


PTE   (2002-06-03 14:29:00) [5]

так получается мне это условия для каждой ячейке описать нужно? а потом после каждой писать код арифметики?
А может можно как-то проще типа присвоить по умолчанию всем ячейкам 0, и тогда будет все считать нормально или я не прав?


Катерина   (2002-06-03 14:28:00) [6]

Или так:

var S,S1 : real; i :integer;
begin
S := 0;
with StringGrid1 do
for i := 1 to 9 do
try
S1 := StrToFloat(cells[1,i])*StrToFloat(cells[2,i]);
S := S + S1;
cells[3,i] := FormatFloat("0.000",S1);
except
else
cells[3,i] := "";
end;

StringGrid1.cells[3,10] := FormatFloat("0.000",S*20+120);

end;



AFROLOV   (2002-06-03 14:27:00) [7]


> Игорь Шевченко © (03.06.02 14:13)
> if Length(Trim(Cells[Col,Row])) <> 0 then
> Делать то, что нужно

Надо бы еще проверять является ли строка числом.


Игорь Шевченко   (2002-06-03 14:13:00) [8]

if Length(Trim(Cells[Col,Row])) <> 0 then
Делать то, что нужно


PTE   (2002-06-03 14:04:00) [9]

как приравнять значение из ячейки к компоненту Lable я сделал, а вот как решить вопрос с ошибкой? Она выскакивает если только не заполнены ячейки по которым происходят ар.действия


PTE   (2002-06-03 13:47:00) [10]

Произвожу арифметические действия в ячейках
procedure TForm1.Button15Click(Sender: TObject);
begin
with StringGrid1 do
cells[3,1]:=
FormatFloat("0.000",StrToFloat(cells[1,1])* StrToFloat(cells[2,1]));
with StringGrid1 do
cells[3,2]:=
FormatFloat("0.000",StrToFloat(cells[1,2])* StrToFloat(cells[2,2]));
.......
with StringGrid1 do
cells[3,10]:=
FormatFloat("0.000",(StrToFloat(cells[3,1])+ StrToFloat(cells[3,2])
+StrToFloat(cells[3,3])+StrToFloat(cells[3,4])+ StrToFloat(cells[3,5])
+StrToFloat(cells[3,6])+StrToFloat(cells[3,7])+ StrToFloat(cells[3,8]))
*20/120);
end;
Все полученные значения я должен умножить на 20 и разделить на 120, если в ячейках у меня данные введены, то все нормально, но если я ввожу не все данные программа вываливается в ошибку, как это исправить?
И ещё вопрос как можно приравнять значение из ячейки к компоненту Lable?


PTE   (2002-06-03 13:02:00) [11]

огромное человеческое спасибо


Катерина   (2002-06-03 12:48:00) [12]

with StrGrid do
cells[i3,j3]):= FormatFloat("0.000",StrToFloat(cells[i1,j1])+ StrToFloat(cells[i2,j2]));


Примерно так.


Игорь Шевченко   (2002-06-03 12:47:00) [13]

Преобразовывать текстовое представления Cells[Col,Row] в числа и выполнять арифметические действия с числами.


Наверх

Титульная страница Поиск, карта сайта Написать письмо