Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу оптимизировать!!!

16K
20 августа 2007 года
Rezus666
46 / / 15.08.2007
Помогите, знаю что код можно сократить, не могу сообразить как это сделать
Код:
Boolean RazrNewGodi =True, RazrNewGod = True;
int i,j;
AnsiString NLF;
for (i=1;i<13;i++)
{
        NLF = IntToStr(i)+Label3->Caption;
        StringGrid1->Cols->SaveToFile(NLF);
}
i=0;
while (i < Memo2->Lines->Count)
{
        if(Memo2->Lines->Strings == MaskEdit2 -> Text)
        {
                Label5 -> Caption = "Данные по этому году уже занесены, для просмотра или корректировки используйте возможность <<Загрузить данные ... года>>";
                RazrNewGodi = False;
        }
        i++;
}
        if (StrToInt(DateTimeToStr(Date()).Delete(1,6))<StrToInt(MaskEdit2->Text))
                {
                RazrNewGod = False;
                Label5 -> Caption = "Нельзя внести данные до наступления увказанного вами года";
                }
        if (RazrNewGod == True && RazrNewGodi == True)
        {
                for (i=0;i<13;i++)
                        for (j=0;j<21;j++)
                        {
                        StringGrid1->Cells[j] = "";
                        }
                for (i=1;i<13;i++)
                        StringGrid1->Cells[0]= i;
                        //StringGrid1->Rows[5]->Text = "-----------------------";
                for (i=0;i<13;i++)
                        StringGrid1->Cells[5] = "-----------------------------";
                StringGrid1->Cols[0]->LoadFromFile("ColDDR");
                for (i=1;i<13;i++)
                {
                NLF = IntToStr(i)+(MaskEdit2 -> Text);
                StringGrid1->Cols->SaveToFile(NLF);
                }
        }
12K
20 августа 2007 года
__AleXX__
133 / / 02.04.2007
Можно чуть так:
а вообще сложно понять что куда, понимания назначения переменных :))
хоть бы комменты какие были

Код:
Boolean RazrNewGodi =True, RazrNewGod = True;
int i,j;
AnsiString NLF;
for (i=1;i<13;i++)
{
        NLF = IntToStr(i)+Label3->Caption;
        StringGrid1->Cols->SaveToFile(NLF);
}
i=0;
while (i < Memo2->Lines->Count)
{
        if(Memo2->Lines->Strings == MaskEdit2 -> Text)
        {
                Label5 -> Caption = "Данные по этому году уже занесены, для просмотра или корректировки используйте возможность <<Загрузить данные ... года>>";
                RazrNewGodi = False;
        }
        i++;
}
        if (StrToInt(DateTimeToStr(Date()).Delete(1,6))<StrToInt(MaskEdit2->Text))
                {
                RazrNewGod = False;
                Label5 -> Caption = "Нельзя внести данные до наступления увказанного вами года";
                }
        if (RazrNewGod == True && RazrNewGodi == True)
        {
                for (i=1;i<13;i++)
                {
                        for (j=1;j<21;j++)
                        {
                               StringGrid1->Cells[j] = "";
                        }
                        StringGrid1->Cells[0]= i;
                        StringGrid1->Cells[5] = "-----------------------------";
                }
                StringGrid1->Cols[0]->LoadFromFile("ColDDR");
                for (i=1;i<13;i++)
                {
                         NLF = IntToStr(i)+(MaskEdit2 -> Text);
                         StringGrid1->Cols->SaveToFile(NLF);
                }
        }
16K
20 августа 2007 года
Rezus666
46 / / 15.08.2007
Фишка всего кода в том что он должен создавать группу фаилов с данными за указаный юзером год (на форме создаются пустые ячеики в которые юзер вносит данные),но запрещается вводить уже забитые годы (пр. 2006,2007) и будущие (2008, 2009 ...)
92
21 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
во блин дожили... свой код не можем оптимизировать.... это 5!

а дальше что будет?
16K
21 августа 2007 года
Rezus666
46 / / 15.08.2007
Не смейся ты бы в больнице, без сетки и без возможности её проведения, по 12 часов вдень, на 67 машин, с юзерами-эксперементаторами. Глянул бы сколько времени ты вспоминал как пишеться "print".
263
21 августа 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Rezus666
Не смейся ты бы в больнице, без сетки и без возможности её проведения, по 12 часов вдень, на 67 машин, с юзерами-эксперементаторами. Глянул бы сколько времени ты вспоминал как пишеться "print".


Код рабочий?? Проц не грузит? Время выполнения не критично?? Тогда ..если не можешь сам оптимизировать свой код - оставь как есть..
Была бы какая-то типовая задача - одно дело, а тут.. легче заново его переписать, чем в твоем разбираться.. Даже комменты не написал..

92
21 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
koltaviy, +1.

Rezus666, я не смеюсь. И не надо мне объяснять что такое работа :) и про 12 часов в день, и про 20 тоже ) ну да не будем спорить. ты бы лёг, выспался 1 ночь, а с утра бы на свежую голову глянул. и было бы всё гут.

ЗЫ: цикл while можно на for заменить, заодно и строчек несколько сэкономит. не знаю как тебе, но мне for приятнее было бы видеть в таком коде... имхо.

ЗЗЫ: и прислушайся к совету выше ;)
16K
21 августа 2007 года
Rezus666
46 / / 15.08.2007
Ладно с коментами скосячил:( , да и вобщем сечас занимаюсь тем что полностью переписываю код, так что спосибо тем кто откликнулся и помог.
305
21 августа 2007 года
Kashuk
385 / / 21.02.2003
Цитата: __AleXX__
Можно чуть так:
а вообще сложно понять что куда, понимания назначения переменных :))
хоть бы комменты какие были

Код:
Boolean RazrNewGodi =True, RazrNewGod = True;
int i,j;
AnsiString NLF;
for (i=1;i<13;i++)
{
        NLF = IntToStr(i)+Label3->Caption;
        StringGrid1->Cols->SaveToFile(NLF);
}
i=0;
while (i < Memo2->Lines->Count)
{
        if(Memo2->Lines->Strings == MaskEdit2 -> Text)
        {
                Label5 -> Caption = "Данные по этому году уже занесены, для просмотра или корректировки используйте возможность <<Загрузить данные ... года>>";
                RazrNewGodi = False;
        }
        i++;
}
        if (StrToInt(DateTimeToStr(Date()).Delete(1,6))<StrToInt(MaskEdit2->Text))
                {
                RazrNewGod = False;
                Label5 -> Caption = "Нельзя внести данные до наступления увказанного вами года";
                }
        if (RazrNewGod == True && RazrNewGodi == True)
        {
                for (i=1;i<13;i++)
                {
                        for (j=1;j<21;j++)
                        {
                               StringGrid1->Cells[j] = "";
                        }
                        StringGrid1->Cells[0]= i;
                        StringGrid1->Cells[5] = "-----------------------------";
                }
                StringGrid1->Cols[0]->LoadFromFile("ColDDR");
                for (i=1;i<13;i++)
                {
                         NLF = IntToStr(i)+(MaskEdit2 -> Text);
                         StringGrid1->Cols->SaveToFile(NLF);
                }
        }



Мне кажется, что лучшей оптимизацией будет создание нормальной БД, а не ещё раз создавать велосипед, и гонять данные с грида в файл…

12K
21 августа 2007 года
__AleXX__
133 / / 02.04.2007
Цитата: Kashuk
Мне кажется, что лучшей оптимизацией будет создание нормальной БД, а не ещё раз создавать велосипед, и гонять данные с грида в файл…



А почему меня цитировать???

Конечно лучше БД.
А если человеку нужно, например, быстро сделать и он не знает как работать с БД?
Кроме того нужен, я так понимаю, сервак , который будет твои запросы обрабатывать и непосредственно сохранять и читать из базы :)) а его (сервак) еще надо выбрать - вот еще один аспект, который нужно изучить.

Хотя с базой данных - это вариант получше, тут я согласен.
Но - кому что.

Я б например вообще на нете писал, там всё гораздо проще, и работа с базой и дизайн и вообще.

16K
21 августа 2007 года
Dimasm
6 / / 29.04.2006
i=0;
while (i < Memo2->Lines->Count)
{
..
i++;
}
можно заменить
i=-1;
while (i++ < Memo2->Lines->Count)
{
..
}

StrToInt(DateTimeToStr(Date()).Delete(1,6))
- это можно рассчитать один раз при запуске программы

for (i=0;i<13;i++) - у тебя известно, сколько циклов
попробуй
StringGrid1->Cells[0][0] = "";
StringGrid1->Cells[0][1] = "";
StringGrid1->Cells[0][2] = "";
StringGrid1->Cells[0][3] = "";
...

for (i=1;i<13;i++)
StringGrid1->Cells[0]= i;
можно без этого цикла, заполняй i тамже где и очищаешь StringGrid
...

вот не пойму... это у тебя при каждом нажатии клавиши выполняется?
если да - то это неверный подход..
даже перечисленное выше не даст нужного "ускорения"
нужно раскидывать код по разным событиям
12K
21 августа 2007 года
__AleXX__
133 / / 02.04.2007
Цитата: Dimasm
i=0;
while (i < Memo2->Lines->Count)
{
..
i++;
}
можно заменить
i=-1;
while (i++ < Memo2->Lines->Count)
{
..
}



А не проще использовать for ?

16K
21 августа 2007 года
Rezus666
46 / / 15.08.2007
что касается БД я то это умею, но в заказе именно "плоские фаилы" будь они не ладны!!!!Вот иприходится изобретать велосипед!!!!!!!
263
22 августа 2007 года
koltaviy
816 / / 16.12.2004
Цитата: __AleXX__

..
Я б например вообще на нете писал, там всё гораздо проще, и работа с базой и дизайн и вообще.


Сильно сказано!! Особенно про дизайн!! :D

2.0K
29 августа 2007 года
WidowMaker
212 / / 05.04.2005
Цитата: Rezus666
что касается БД я то это умею, но в заказе именно "плоские фаилы" будь они не ладны!!!!Вот иприходится изобретать велосипед!!!!!!!


Такой велосипед каждый программист когда нибудь, да написал в своей жизни ( и не один), и ничего, живой...
Не буду вдаваться в советы по проектированию, уже прозвучали оринтировки. Скажу конкретно по коду:
1. для проверки наличия года цикл не нужен, используй IndexOf списка строк.
2. не надо каждый раз вычислять год (имхо, да и делаешь ты это извратно, см. что-то вроде Year), достаточно сохранить это значение во время запуска;
не думаю что пользователь продержится в одном сеансе твоего приложения больше года;)
3. попробуй для очистки использовать Text списков строк (например Cols->Text), проверить не могу

Не удержусь от замечания по оформлению: выделяй логически обособленные куски кода в отдельные ф-ции.

ЗЫ: по поводу определиться с сервером, то не надо прикалываться над человеком;), Rezus666 выбирай любой

Цитата:
Я б например вообще на нете писал, там всё гораздо проще, и работа с базой и дизайн и вообще.


мда... дизайн там и вправду простой-простой, как грабли ;)

309
29 августа 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
2. не надо каждый раз вычислять год (имхо, да и делаешь ты это извратно, см. что-то вроде Year), достаточно сохранить это значение во время запуска;
не думаю что пользователь продержится в одном сеансе твоего приложения больше года


Вполне может - если запустит программу в конце декабря, то закончит в начале январа прошлого года :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог