Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.02.2011, 08:11
Farmokolog Farmokolog вне форума
Прохожий
 
Регистрация: 13.02.2011
Сообщения: 5
Репутация: 10
По умолчанию Delphi - StringGrid

Подскажите пожалуйста в чем тут проблема не могу сделать чтобы в ячейках пересчитывал и дробные числа
если заменить integer на real то происхдит ошибка.
Код:
procedure TMainForm.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
  var
    a,b,y:array [1..7] of integer;
    j,summ:integer;
begin
for j:=1 to 7 do
if not TryStrToint(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;
for j:=1 to 7 do
if not TryStrToint(StringGrid1.Cells [2,j],B[j]) then
B[j]:=0;
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=intToStr(Y[j]);
end;
end;
Ответить с цитированием
  #2  
Старый 13.02.2011, 08:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну вы сами указываете дельфи использовать только целые числа, вот он и отбрасывает дробную часть. Используйте Real, TryStrToFloat, StrToFloat
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 13.02.2011, 08:52
Farmokolog Farmokolog вне форума
Прохожий
 
Регистрация: 13.02.2011
Сообщения: 5
Репутация: 10
По умолчанию

я про это и пишу что если заменяю то вся процедура не работает.
Код:
procedure TMainForm.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
  var
    a,b,y:array [1..7] of real;
    j,summ: real;
begin

for j:=1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;

for j:=1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [2,j],B[j]) then
B[j]:=0;
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=FloatToStr(Y[j]);
end;
end;

Не работает (((
в чем проблем? помогите.
Ответить с цитированием
  #4  
Старый 13.02.2011, 12:05
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

А какую ошибку пишет?
Как вариант можнт быть, что разделителем дробной и целой части у тебя точка стоит, а Delphi больше заятую любит.

P.S. Если я правильно понял суть задачи, что весь код можно заменить на
Код:
for i:=1 to 7 do
try;
stringgrid1.cells[3,i]:=floattostr(strtofloat(stringgrid1.cells[1,i])*strtofloat(stringgrid1.cells[2,i]));
except stronggrid1.cells[3,i]:='0';
end;

Последний раз редактировалось Nikitiy_II, 13.02.2011 в 12:30.
Ответить с цитированием
  #5  
Старый 13.02.2011, 13:26
Farmokolog Farmokolog вне форума
Прохожий
 
Регистрация: 13.02.2011
Сообщения: 5
Репутация: 10
По умолчанию

расскажу проблему в краце у меня таблица 3 строки и 7 столбцов надо что бы сумма 1 и 2 столбца писалась в 3 столбце при этом если в какую то ячейку вдруг не ввели данные или данные введены не корректно то в ту ячейку ставился 0 то есть суммы третьего столбца той строки становилась
0.
Ответить с цитированием
  #6  
Старый 13.02.2011, 13:39
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Так нечего велосипед изобретать, смысл использовать 3 одноуровневых массива.... мой код тебе подойдет в самый раз...

P.S. Индексация Строк и Столбов StringGrid начинается с "0" , то цикл будет у тебя

Код:
for i:=0 to 6 do

И еще, если тебе сумму надо найти, так чего ты умножаешь значения?

--------------------------
И если ты так хочешь, чтоб твой код работал, то индекс j должен быть не real, а integer!

Последний раз редактировалось Nikitiy_II, 13.02.2011 в 13:50.
Ответить с цитированием
  #7  
Старый 13.02.2011, 14:06
Farmokolog Farmokolog вне форума
Прохожий
 
Регистрация: 13.02.2011
Сообщения: 5
Репутация: 10
По умолчанию Заработало

Все большое спасибо за помощь разобрался, выкладываю готовый рабочий код вдруг кому пригодиться.
Код:
procedure TMainForm.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  a, b, y: array [1..7] of Double;
  summ: Double;
  j: Integer;
begin

for j:= 1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;

for j:=1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [2,j],B[j]) then
B[j]:=0;
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=FloatToStr(Y[j]);
end;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025