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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2012, 21:46   #1
armrock
Пользователь
 
Регистрация: 04.08.2012
Сообщений: 27
По умолчанию Цикл на вычисление в StringGrid

Вот код, в котором я вычисляю с помощбю данных из ячеек ОДНОЙ СТРОКИ sringgrid и результат вношу в другую ячейку ЭТОЙ ЖЕ СТРОКИ.

ПОМОГИТЕ МНЕ НАПИСАТЬ ЦИКЛ что бы вычислять тоже самое только со всеми строками в stringgrid (их может быть разное кол-во). Спасибо!!!

Код:
procedure TForm4.BitBtn10Click(Sender: TObject);
var
a,b,c,f,n: real;
begin
a:=StrToFloat (StringGrid1.Cells [4,1]);
b:=StrToFloat (StringGrid1.Cells [5,1]);
f:=StrToFloat (StringGrid1.Cells [6,1]);
if a<=144 then begin
c:=a*b-a*b/100*f;
end
else
c:=(144*b+(a-144)*(b*2))-((144*b+(a-144)*(b*2))/100*f);
StringGrid1.Cells [stringgrid1.Col+7,stringgrid1.Row]:=FloatToStr (c);
end;
armrock вне форума Ответить с цитированием
Старый 05.08.2012, 21:49   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Какие вычисления нужно производить?
Число ячеек в строке фиксированное?
P.S.
Код:
for i:=0 to stringgrid1.rowcount-1
Базиля вне форума Ответить с цитированием
Старый 05.08.2012, 21:56   #3
armrock
Пользователь
 
Регистрация: 04.08.2012
Сообщений: 27
По умолчанию 111

Вычисления есть в коде, но это ерунда..мне главное цикл.
Число столбцов ФИКСИРОВАНОЕ, а строк может быть от 1 до сотен!


Но данные естественно должны браться вот сдесь
Код:
a:=StrToFloat (StringGrid1.Cells [4,1]);
b:=StrToFloat (StringGrid1.Cells [5,1]);
f:=StrToFloat (StringGrid1.Cells [6,1]);
КАЖДЫЙ РАЗ ИЗ СВОЕЙ СТРОКИ и РЕЗУЛЬТАТ ТОЖЕ В СООТВЕТСТВУЮЩУЮ СТРОКУ!!!!!!!

Последний раз редактировалось armrock; 05.08.2012 в 21:58.
armrock вне форума Ответить с цитированием
Старый 05.08.2012, 21:57   #4
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Ну вот, все что надо я уже описал:
Код:
for i:=0 to stringgrid1.rowcount-1
    begin
    a:=StrToFloat (StringGrid1.Cells [4,i]);
    b:=StrToFloat (StringGrid1.Cells [5,i]);
    f:=StrToFloat (StringGrid1.Cells [6,i]);
    {вычисления и все необходимые действия}
    end;
Базиля вне форума Ответить с цитированием
Старый 05.08.2012, 22:08   #5
armrock
Пользователь
 
Регистрация: 04.08.2012
Сообщений: 27
По умолчанию 111

ничего не понял....я тоже так сделал.....но вот что за проблема!! программа запускаеться но при нажатии на кнопку для расчёта появляеться ошибка..


там что то типо Convert Error with message "Часы' is not a valid floating point value'. Process stopped.

Часы - это одна из моих колонок, откуда беруться данные=((
armrock вне форума Ответить с цитированием
Старый 05.08.2012, 22:17   #6
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Как я понимаю часы это значение одной из ячеек. Это строка, вы пытаетесь строку привести к вещ. типу данных - разумеется ошибка будет
Полагаю вы обходите заголовок вашей таблицы.
Нумерование строк в стринггриде начинается с нуля, будьте внимательны
Измените начальный параметр цикла на 1.
Код:
for i:=1 to stringgrid1.rowcount-1
Базиля вне форума Ответить с цитированием
Старый 05.08.2012, 22:17   #7
armrock
Пользователь
 
Регистрация: 04.08.2012
Сообщений: 27
По умолчанию 1111

ННО всёравно чуть не так работает, Заносит результат последней строки в первую, а должен заносить результат каждой строки в соответствующую!

Последний раз редактировалось armrock; 05.08.2012 в 22:22.
armrock вне форума Ответить с цитированием
Старый 05.08.2012, 22:22   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Код:
StringGrid1.Cells [stringgrid1.Col+7,i]:=FloatToStr (c);
Базиля вне форума Ответить с цитированием
Старый 05.08.2012, 22:28   #9
armrock
Пользователь
 
Регистрация: 04.08.2012
Сообщений: 27
По умолчанию 111

Спасибо большое что помогаете!!!! ВСЁ РАБОТАЕТ!

Есть ещё один вопрос: а как сделать что бы оно считало все строки в которых всё заполнено, а те строки в которых не хватает нужных для вычисления данных не вычисляло. Сейчас если хоть одной данной нет, то не вычисляет вообще и ошибка.
armrock вне форума Ответить с цитированием
Старый 05.08.2012, 22:43   #10
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Нужно проверять ячейки на пустоту.
Один из вариантов:
Код:
for i:=1 to stringgrid1.rowcount-1    
  begin
    proverka:=false;
    if (StringGrid1.Cells [4,i]='') or (StringGrid1.Cells [5,i]='')  or  (StringGrid1.Cells [6,i])='') then
    proverka:=true;
    if proverka then
    StringGrid1.Cells [stringgrid1.Col+7,i]:='Для вычисления, заполните все ячейки!'
    else
     begin
     a:=StrToFloat (StringGrid1.Cells [4,i]);
     b:=StrToFloat (StringGrid1.Cells [5,i]);
     f:=StrToFloat (StringGrid1.Cells [6,i]);
     f:=StrToFloat (StringGrid1.Cells [6,i]);
    ...
     end;
  end;

Последний раз редактировалось Базиля; 05.08.2012 в 23:00.
Базиля вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stringgrid, таблица Word и цикл Максон11 Помощь студентам 2 26.04.2011 18:07
Цикл StringGrid Aleksandr69 Общие вопросы Delphi 5 11.12.2010 18:55
Странный цикл у меня в StringGrid artemavd Общие вопросы Delphi 14 25.07.2010 17:58
Цикл подстановки в Edit из StringGrid artemavd Общие вопросы Delphi 11 06.07.2010 10:21
StringGrid, вычисление суммы Gorin Компоненты Delphi 5 23.08.2007 19:44