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

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

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

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

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

Результаты опроса: Оптимизация процедуры
1 вариант 1 100.00%
2 вариант 1 100.00%
а предлогаю 1 100.00%
а лучше вот так 1 100.00%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 1. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2008, 08:20   #1
Cold Went
 
Регистрация: 29.04.2008
Сообщений: 5
Лампочка Помогите оптимизировать процедуру

ВЫручайте!!!
Как оптимизировать (уменьшить, улучшить) процеду. Надеюсь на помощь. В заранее СПАСИБО!

{===============Считаем сумму ячеек одних StringGrid-ов=========
====================и присваеваем ее ячейкам других StringGrid-ов}
//*********************************** *********************************Fi rst row
bez:=0;
for i:= 1 to 20 do
begin
if not(Length(StringGrid2.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid2.Cells[1,i]);//Считываем ячейку
StringGrid1.Cells[1,1]:= FloatToStr (bez / 20);//Выводим сумму в ячейке
end;
end;
bez:=0;
for i:= 1 to 20 do
begin
if not(Length(StringGrid4.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid4.Cells[1,i]);
StringGrid3.Cells[1,1]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 1 to 20 do
begin
if not(Length(StringGrid6.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid6.Cells[1,i]);
StringGrid5.Cells[1,1]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 1 to 20 do
begin
if not(Length(StringGrid8.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid8.Cells[1,i]);
StringGrid7.Cells[1,1]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 1 to 20 do
begin
if not(Length(StringGrid10.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid10.Cells[1,i]);
StringGrid9.Cells[1,1]:= FloatToStr (bez / 20);
end;
end;

//*********************************** ****************************** Second row
bez:=0;
for i:= 21 to 40 do
begin
if not(Length(StringGrid2.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid2.Cells[1,i]);
StringGrid1.Cells[1,2]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 21 to 40 do
begin
if not(Length(StringGrid4.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid4.Cells[1,i]);
StringGrid3.Cells[1,2]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 21 to 40 do
begin
if not(Length(StringGrid6.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid6.Cells[1,i]);
StringGrid5.Cells[1,2]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 21 to 40 do
begin
if not(Length(StringGrid8.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid8.Cells[1,i]);
StringGrid7.Cells[1,2]:= FloatToStr (bez / 20);
end;
end;
bez:=0;
for i:= 21 to 40 do
begin
if not(Length(StringGrid10.Cells[1,i]) = 0) then //Если ячейка не пуста
begin
bez:=bez + StrToFloat (StringGrid10.Cells[1,i]);
StringGrid9.Cells[1,2]:= FloatToStr (bez / 20);
end;
end;
//*********************************** ****************************** Third row
...
Cold Went вне форума Ответить с цитированием
Старый 29.04.2008, 08:31   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Оформить процедурой:

Что-то вида:
procedure summ(DestCol, DestRow, R1, R2:integer; SG1, SG2:TStringGrid)
...

DestCol, DestRow - координаты ячейки назначения
R1, R2 - диапазон ячеек
SG1, SG2 - StringGrid'ы

Потом просто вызывать

summ(1,1, 1,20, StringGrid1, StringGrid2);
...
alexBlack вне форума Ответить с цитированием
Старый 29.04.2008, 11:50   #3
Cold Went
 
Регистрация: 29.04.2008
Сообщений: 5
По умолчанию Спасибо

Спасибо, немогли бы если Вам не трудно по подробнее расписать процедуру
Cold Went вне форума Ответить с цитированием
Старый 29.04.2008, 13:23   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А что расписывать. Берем любой кусок кода (по-моему они у вас все одинаковые) и делаем изменяемые значения параметрами процедуры:

Код:
procedure summ(DC, DR, R1, R2:integer; SG1, SG2:TStringGrid)
begin
   bez:=0;
   for i:= R1 to R2 do begin
       if not(Length(SG2.Cells[1,i]) = 0) then //Если ячейка не пуста
       begin
           bez:=bez + StrToFloat (SG2.Cells[1,i]);//Считываем ячейку
       end;
   end;
   // Лучше вынести за цикл
   SG1.Cells[DC,DR]:= FloatToStr (bez / 20);//Выводим сумму в ячейке
Весь код можно заменить парой-тройкой циклов если обращаться к StringGrid по их именам:

'StringGrid'+intToStr(k)

поищите на форуме по слову FindComponent

Последний раз редактировалось alexBlack; 29.04.2008 в 13:36.
alexBlack вне форума Ответить с цитированием
Старый 29.04.2008, 15:11   #5
Cold Went
 
Регистрация: 29.04.2008
Сообщений: 5
По умолчанию Спаааасибо!!!

Благодарствую. Я не совсем Вас в начале понял. Я нашел некоторые комментарии по 'FindComponent' и вот что получилось.
сдесь описываем Function SumSG
function Sumsg(SG:TStringGrid; Col, Row, Count: integer):string;
var
bez: dooble;
i: integer;
begin
bez:=0;
for i:=0 to Count-1 do
if not(Length(SG.Cells[Col,Row+i]) = 0) then
bez:=bez + StrToFloat (SG.Cells[Col,Row+i]);
Result:=FloatToStr(bez / Count);
end;
.....
for i:= 1 to 5 do
for j:= 0 to k-1 do
TStringGrid (FindComponent('StringGrid'+IntToSt r (i*2-1)).Cells[1,j+1]:=
SumSG(TStringGrid (FindComponent( 'StringGrid'+IntToStr(i*2)), 1, 20*j+1, 20);
Cold Went вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите оптимизировать! Altera Общие вопросы Delphi 6 25.03.2008 20:09
Помогите оптимизировать HTML код после Publisher Гербера HTML и CSS 16 03.12.2007 11:46
помогите оптимизировать процедуру _XspeC_ Общие вопросы Delphi 12 08.04.2007 02:05
Помогите оптимизировать сайт Nadejda HTML и CSS 4 07.01.2007 21:04