Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как улучшить программу? 
:(
    Опции темы
JackYF
Дата 25.5.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(adLucem @  25.5.2007,  16:59 Найти цитируемый пост)
Я думаю эту программу ничто не сделает ни читабельной ни расширяемой кроме переписывания.


smile
В общем-то, согласен - см. мой первый пост в этой теме. Замечание было локальное.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
m1kle
Дата 30.5.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Разбиваю функцию Action() на много маленьких функций, но им придется передавать кучу параметров, что делать?
PM MAIL WWW MSN   Вверх
bsa
Дата 30.5.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(m1kle @ 30.5.2007,  13:09)
Разбиваю функцию Action() на много маленьких функций, но им придется передавать кучу параметров, что делать?

Подумать, может ты неправ ;-)
PM   Вверх
m1kle
Дата 30.5.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Bsa, не, это точно, мне же самому удобнее будет, еще можно как я понял улучшить код, делаю вот такие штуки, вместо старых ифов:
Код

(x > 0 ? x + 1 : x -1); 

Только не понимаю какой символ за что отвечает, если можно, поясните.
Вот по типу этих ифов, наверняка есть какие другие хитрости, я знаю их множество, очень они мне нужны, посветите, пожалуйста.

Это сообщение отредактировал(а) m1kle - 30.5.2007, 17:25
PM MAIL WWW MSN   Вверх
nickless
Дата 30.5.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(m1kle @  30.5.2007,  16:21 Найти цитируемый пост)
мне же самому удобнее будет

Удобнее передавать кучу параметров?

Цитата(m1kle @  30.5.2007,  16:21 Найти цитируемый пост)
(x > 0 ? x + 1 : x -1); 

И чем это лучше if-а? На две буквы короче?

ИМХО код должен быть прежде всего легок для чтения и понимания людьми, удобен в использовании (12 параметров этому не способствуют), а потом уже эффективен и.т.д Причем если код прост, понятен и удобен, то он скорее всего уже эффективен (я не имею ввиду использование плохих алгоритмов итд).

Если действительно хочешь улучшить код, то это
Цитата(bsa @  30.5.2007,  12:39 Найти цитируемый пост)
Подумать, может ты неправ ;-) 

очень хороший совет smile 
Тут дело не в хиртостях "по типу этих ифов", а в всём дизайне, подумай как можно упростить код так, что бы не было необходимости передавать много параметров и писать длинные вложенные циклы с кучей if-ов (это называется "спагетти-код").
Например передавай ссылку на структуру, меняй в специализированных функциях только нужные переменные, а не все сразу.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
m1kle
Дата 31.5.2007, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



nickless
1) Разбить большую функцию на много маленьких, помойму это очень удобно и разумно.
2) "Хитрости" тоже для удобства, и уменьшения длинны кода ( если он не длинный, с ним легче имхо работать ).
3) А насчет структур. А что плохого в передаче многих парметров. Стрктуры это уменьшение эффективности программы(время выполнения кода), и куча лишних строчей.

Можешь раскритиковать, буду только благодарен ( я новечок в этом деле )
PM MAIL WWW MSN   Вверх
MAKCim
Дата 31.5.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(nickless @  30.5.2007,  18:54 Найти цитируемый пост)
И чем это лучше if-а? На две буквы короче?

а вот кстати проверил и получил такие результаты
Код

void foo(int number) {
    int value = number > 0 ? 1: 0;
}

Код

push ebp
mov ebp, esp
sub esp, 16
cmp dword [ebp + 8], 0
setg al
movz eax, al
mov dword [ebp - 4], eax
leave
ret

Код

void foo(int number) {
    int value;
    if (number > 0)
        value = 1;
    else value = 0;
}

Код

    push ebp
    mov ebp, esp
    sub esp, 16
    cmp dword [ebp + 8], 0
    jle L2
    mov dword [ebp - 4], 1
    jmp L5
L2:
    mov dword [ebp - 4], 0
L5:
    leave
    ret

разница налицо  smile

Добавлено через 2 минуты и 53 секунды
Цитата(m1kle @  31.5.2007,  02:40 Найти цитируемый пост)
А насчет структур. А что плохого в передаче многих парметров. Стрктуры это уменьшение эффективности программы(время выполнения кода), и куча лишних строчей.

будешь когда-нибудь на WinAPI писать ( smile ) - поймешь, что куча параметров - это не сильно здорово, мягко говоря


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 31.5.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(MAKCim @ 31.5.2007,  09:13)
а вот кстати проверил и получил такие результаты
Код
void foo(int number) {
    int value = number > 0 ? 1: 0;
}
Код
push ebp
mov ebp, esp
sub esp, 16
cmp dword [ebp + 8], 0
setg al
movz eax, al
mov dword [ebp - 4], eax
leave
ret

Неудачный пример.
Лучше попробовать такой:
Код
int foo(int number1, int number2) {
    int value = number > 0 ? number1 : number2;
    return value;
}

Так как в твоем случае компилятор серьезную оптимизацию сделал. Замена 0 на 1 по флагу через:
Код
setg al
movz eax, al
Думаю, что заменить 1234 на 4321 таким же образом у него вряд ли получится.  smile 
PM   Вверх
fish9370
Дата 31.5.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: -1
Всего: 1



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

1. нарисовать блок схему (в крупных проектах она просто необходима, чтобы не сойти с ума)
2. перейти к Объектно Ориентированному Программированию (ООП)

по блок схеме легко находить уязвимые места и это позволит абстрагироваться от кода, позволит сосредоточится на идеи.. это важняк!! не ленись делать блок схемы.. это так же важно как и комментарии..
первое приемущество ООП над структурированным программированием заключается в ИНКАПСУЛЯЦИИ данных в один объект, что повысит как читабельность так и управляемость.. и к тому же ты сможешь размножать эти объекты в любом количестве.. потом тебе на помощь придет НАСЛЕДОВАНИЕ и ПОЛИМОРФИЗМ, может, тоже придет..

учи ООП.. важняк!! ;)

Это сообщение отредактировал(а) fish9370 - 31.5.2007, 20:54


--------------------
undefined
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 31.5.2007, 09:34 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



bsa, 
это все понятно, я не спорю
Цитата(bsa @  31.5.2007,  09:28 Найти цитируемый пост)
Неудачный пример.

пример этот показательный и тривиальный: по сути на пустом месте в одном случае - оптимизация, во втором - работа через одно место  smile 

Это сообщение отредактировал(а) MAKCim - 31.5.2007, 09:39


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nickless
Дата 31.5.2007, 20:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(MAKCim @  31.5.2007,  08:13 Найти цитируемый пост)
вот кстати проверил и получил такие результаты

Я тоже решил проверить, только со включенной оптимизацией  smile 
Код
int foo(int a)
{
    int value;
    if (a > 0)
        value = 71;
    else
        value = 80;
    return value;
}

int bar(int a)
{
    int value;
    value = a > 0 ? 71: 80;
    return value;
}

Код
gcc -O2 -S -fverbose-asm main.c -o main.s

Код
foo:
    pushl   %ebp    #
    xorl    %eax, %eax  # value
    movl    %esp, %ebp  #,
    cmpl    $0, 8(%ebp) #, a
    popl    %ebp    #
    setle   %al #, value
    leal    71(%eax,%eax,8), %eax   #, value
    ret

bar:
    pushl   %ebp    #
    xorl    %eax, %eax  # value
    movl    %esp, %ebp  #,
    cmpl    $0, 8(%ebp) #, a
    popl    %ebp    #
    setle   %al #, value
    leal    71(%eax,%eax,8), %eax   #, value
    ret

И никакой разницы smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Dronchik
  Дата 11.6.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



Цитата

учи ООП.. важняк!! ;)

 smile 
И ещё СТЛ.



--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.