|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Результаты опроса: Оптимизация процедуры | |||
1 вариант | 1 | 100.00% | |
2 вариант | 1 | 100.00% | |
а предлогаю | 1 | 100.00% | |
а лучше вот так | 1 | 100.00% | |
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 1. Вы ещё не голосовали в этом опросе |
|
Опции темы | Поиск в этой теме |
29.04.2008, 08:20 | #1 |
Регистрация: 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 ... |
29.04.2008, 08:31 | #2 |
Участник клуба
Регистрация: 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); ... |
29.04.2008, 11:50 | #3 |
Регистрация: 29.04.2008
Сообщений: 5
|
Спасибо
Спасибо, немогли бы если Вам не трудно по подробнее расписать процедуру
|
29.04.2008, 13:23 | #4 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
А что расписывать. Берем любой кусок кода (по-моему они у вас все одинаковые) и делаем изменяемые значения параметрами процедуры:
Код:
'StringGrid'+intToStr(k) поищите на форуме по слову FindComponent Последний раз редактировалось alexBlack; 29.04.2008 в 13:36. |
29.04.2008, 15:11 | #5 |
Регистрация: 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); |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите оптимизировать! | 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 |