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

Поиск:

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


Бывалый
*


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

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



У меня есть программа, но работать с ней мне совсем не удобно, есть ли какие то специальный способы, хитрости, как сделать код лучше.
К стати вот и сам код:
#include"TXLib.h"
// Используемые функции
Код

void Man(int x, int y, int width, int legs, int plechi, int hands, int headrad, COLORREF color , int nogi, int leg1n, int leg2n, int hand1, int hand2);
void Action();
void DelAll();
void m1();
void strela(int x, int y, int width, COLORREF color);
void DrawRamka();

int main() // Главная часть
{
    txTextCursor(false);
    txCreateWindow(1000, 720);
    Action();
    return 0;
}
// Все функции

void DrawRamka() // Рисование рамки
{
    txSetColor(TX_WHITE);
    txLine(2,   2,   998, 2);
    txLine(2,   2,   2,   700);
    txLine(2,   700, 998, 700);
    txLine(2,   701, 998, 701);
    txLine(998, 2,   998, 700);
}

void strela(int x, int y, int width, COLORREF color)
{
    txSetColor(color);
    txLine ( x, y, x+width, y );
    txLine ( x, y, x+width/3, y+3 );
    txLine ( x, y, x+width/3, y-3 );
}

void m1() // Надпись
{
    txSetColor(TX_LIGHTGRAY);
    txSelectFont ("Arial", 12);
    txTextOut (850, 708, "© .m1kle Studios 2007");
}

void DelAll() // Удалить все
{
    txSetFillColor(TX_BLACK);
    txCircle(500, 360, 1000);
}
void Man(int x, int y, int width, int legs, int plechi, int hands, int headrad, COLORREF color , int nogi, int leg1, int leg2, 
        int hand1, int hand2) // Рисование человека
{
    txSetColor(color);
    txSetFillColor(color);
    txLine ( x, y+nogi, x, y-width );
    txLine ( x, y+nogi, x-leg1, y+legs );
    txLine ( x, y+nogi, x+leg2, y+legs );
    txLine ( x, y-width/2, x-plechi, y-width/2 );
    txLine ( x, y-width/2, x+plechi, y-width/2 );
    txLine ( x-plechi, y-width/2, x-hand1, y+hands );
    txLine ( x+plechi, y-width/2, x+hand2, y+hands );
    txCircle ( x, y-width, headrad );
}

void Action() // Действие
{
//_______Параметры чела_______________________________________________________________
    int width     =12;       // Высота тела 12
    int legs      =20;       // Ноги 20
    int plechi    =2;        // Плечи
    int hands     =6;        // Руки
    int headrad   =3;        // Радиус головы
    COLORREF color=TX_YELLOW; // Цвет человека
    int nogi      =6;        // Ноги
    int leg1      =3;        // Наклон 1-й ноги
    int leg2      =3;        // Наклон 2-й ноги
    int hand1     =4;        // Наклон 1-й руки
    int hand2     =4;        // Наклон 2-й руки
//______Параметры чела_______________________________________________________________
    int    count =0;            // Счетчик
    int    x     =810;          // Изначальное расположение чела в длинну _
    int    y     =500;          // Изначальное расположение чела в высоту |
    int    speed =40;           // Скорость чела
    int    s;                   // Кнопка, нажатая пользователем
    int    rad   =leg1+count%6; // Радиус, для стены
    int    a     =0;            // Для действия
    int    razvar=0;            // Для разварота
    int    stat  =1;            // Статус, для прыжков и наклонов, если лишняя, убрать
    int    prig  =1;            // Статус, для прыжка
    int    tex   =0;            // Техническая переменная, для прыжков и наклонов
    int    activ =0;            // Стреляет ли стрела
    int    xstrel=1000;         // Координата X стрелы
    int    ystrel=0;            // Координата Y Стрелы
    int    points=0;            // Ваши очки
    y        -=legs;
    int    g;                   //Рандом, для стрел
    int    zeml=700;            //Земля, для будующих версий
    int    r=1;                 //Рандом, для стрелы
    int    ra=0;                //Технический рандом
    int    time=0;              //Время в игре
    int    tex2=0;              //Вторая тех. переменная
    int    tex3=0;              //Для приседания
         
    while(a==0)
    {
        txBegin();
        DelAll();
        if(kbhit() && s!=119 && s !=115)
            s=getch();
        if(s==97 && x/2-rad > 2 ) // Влево
        {
            x--;
            count++;
            Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3 );
        }
        if(s==100 && x+leg2+count%6 < 998) // Вправо
        {   
            x++;
            count++;
            Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3 );
        }
        if(s!=100 && s != 97 & s != 119 & s != 115)
        {
            Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3 );
        }
        if(activ==0)
        {
            g=random(2)+1;
        }
        if(g==2)
           ystrel=672;
        else
           ystrel=689;
        activ=1;
        ra=random®+0;  
        if(xstrel+50<x)
        {
            activ=0;
            xstrel=1000;
            points++;
            if(!(points%10))
               r++;
            if(speed>1)
               speed--;
        }
        else
           xstrel--;
    // DWN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if(s==115)
        {
            if(tex3 <= 9 && prig==1)
            {          
                y++;
                legs--;
                width--;
                tex3++;
                Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3 );
            }
        else
        {
            prig=2;
            tex3--;
            width++;
            y--;
            legs++;
            Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3 );
            if(tex3==0)
            {
                s=111;
                prig=1;
            }
        }
    }               
     if(y+legs>=zeml-24 && tex2==0) // UP
         tex=24; //Высота прыжка, сделать потом, чтобы цифру можно было изменять
     else
     {
         tex=-1;
         tex2=1;
     }
     if(y+legs==zeml)
         tex2=0;
     if(y+legs<zeml && s!= 119)
     {
         Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3);
         y+=2;
         if(y+legs==zeml-3)
             y++;
     }
     if(s==119)
     {
         if(tex>=0)
         {
             tex--;
             y--;
             count++;  
             Man(x, y, width, legs, plechi, hands, headrad, color, nogi, leg1+count%3, leg2+count%3, hand1+count%3, hand2+count%3);
         }
         else
         {
             s=111;
             tex=0;
         }
     }
     if (txGetPixel(xstrel+1, ystrel+ra) == color || txGetPixel(xstrel+2, ystrel+ra) == color)
     {
         freopen("Достижения.txt", "a+", stdout);
         time=time/1000;
         printf("Очки: %d\n Время: %d\n", points, time);
         break;
     }          
     m1();
     DrawRamka();
     strela(xstrel, ystrel+ra, 15, TX_ORANGE);
     txSleep(speed);
     time+=speed;
     txEnd();
     }
}


+
И еще желательно скажите мне ошибки, которые я туту допустил(т.е. те, где можно было сделать лучше )

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


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


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

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



Цитата(m1kle @  23.5.2007,  17:19 Найти цитируемый пост)
У меня есть программа, но работать с ней мне совсем не удобно, есть ли какие то специальный способы, хитрости, как сделать код лучше.


Способ, работающий в 99% случаев - переписать заново.

Цитата(m1kle @  23.5.2007,  17:19 Найти цитируемый пост)
К стати вот и сам код:

+1.

Цитата(m1kle @  23.5.2007,  17:19 Найти цитируемый пост)
void Man(int x, int y, int width, int legs, int plechi, int hands, int headrad, COLORREF color , int nogi, int leg1n, int leg2n, int hand1, int hand2);

Слишком много параметров функции, сделай передачу структуры в функцию.

Цитата(m1kle @  23.5.2007,  17:19 Найти цитируемый пост)
void Man(int x, int y, int width, int legs, int plechi, int hands, int headrad, COLORREF color , int nogi, int leg1n, int leg2n, int hand1, int hand2);
void Action();
void DelAll();
void m1();
void strela(int x, int y, int width, COLORREF color);
void DrawRamka();

Информативность имен страдает.

Слишком много констант в коде.

Комментарии к работе функций желательно переносить в раздел объявлений функций, а не описания их тел.

Дальше не осилил...



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


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


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

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



Цитата(m1kle @  23.5.2007,  16:19 Найти цитируемый пост)
способы, хитрости, как сделать код лучше

Для начала начни пользоваться тэгами "код", потому что читать невозможно.
А так на первый взгляд:
- функция Action длиной где-то на 90% кода - разделить на мелкие функции и передавать им нужные параметры
- в той же функции целый экран переменных - используй лучше структуры (и параметров меньше передавать надо будет)
- функция Man с 13(!) параметрами это жесть (см. пункт 2)



--------------------
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   Вверх
JackYF
Дата 23.5.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Да, кстати. Наверху в форме ответа есть кнопочка "код". Применяй ее, и твой код станет гораздо более читабельным для остальных форумчан.


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


Бывалый
*


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

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



Стоп, а как сделать передачу из структур в функции? (сорри за нубоватость, только начинаю. smile )
1,2, спасибо.
PM MAIL WWW MSN   Вверх
DigitSphinx
Дата 23.5.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что то типа :
Код

struct ForMult
{
    double a;
    double b;
}
double Mult(ForMult & Variable)
{
    return Variable.a * Variable.b;
}
main()
{
    ForMult VAR;
    VAR.a = 12.2;
    VAR.b = 13.3;
    double Result = Mult(VAR);
}



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 23.5.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Лучше так:
Код
struct ForMult
{
    double a;
    double b;
}
double Mult(const ForMult & Variable)
{
    return Variable.a * Variable.b;
}
main()
{
    ForMult VAR;
    VAR.a = 12.2;
    VAR.b = 13.3;
    double Result = Mult(VAR);

}

или так, если пишешь на Си:
Код
struct ForMult
{
    double a;
    double b;
}
double Mult(const ForMult *Variable)
{
    return Variable->a * Variable->b;
}
main()
{
    ForMult VAR;
    VAR.a = 12.2;
    VAR.b = 13.3;
    double Result = Mult( &VAR );

}
Для тех, кто разницы не видит - я добавил const в определение Mult().
PM   Вверх
m1kle
Дата 23.5.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Помойму структурами наоборот хуже будет, и долше.
Насчет остального согласен. А есть еще какие то хитрости
PM MAIL WWW MSN   Вверх
MAKCim
Дата 23.5.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



bsa, 
Код

double Mult(const struct ForMult *Variable)
{
    return Variable->a * Variable->b;
}

 smile 


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

PM MAIL   Вверх
JackYF
Дата 24.5.2007, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(m1kle @  23.5.2007,  22:31 Найти цитируемый пост)
Помойму структурами наоборот хуже будет, и долше.


13 (или сколько там...) параметров, которые передаются в функцию - не дело.
Все параметры запихни в одну структуру и передавай указатель на неё в функцию.



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


Бывалый
*


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

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



JackYF
Я не понял, а как стрктуру передать в функцию.
Значит создаю я стрктуру
Код

struct ForMult
{
 int x;
 intx;
}
// А потом передаю
int function(struct ForMult)
{
}

Может похоже на бред, но насколько я понял надо как то так.

Это сообщение отредактировал(а) m1kle - 24.5.2007, 11:55
PM MAIL WWW MSN   Вверх
bsa
Дата 24.5.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Точно. Это бред и есть. Тебе дали 100% рабочий вариант. Там все написано:
Код
struct ForMult
{
 int x;
 int y;
};

int function(const struct ForMult *fm)
{
    return fm->x * fm->y;
}

int main(int argc, char *args[])
{
     struct ForMult formult = {11, 12}; /* x = 11, y = 12 */
     int t;
     t = function( &formult );
....
     return 0;
}

PM   Вверх
m1kle
Дата 25.5.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А эти структуры хоть ускорят работу программы, а то столько текста, а толку 0.
PM MAIL WWW MSN   Вверх
JackYF
Дата 25.5.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(m1kle @  25.5.2007,  14:11 Найти цитируемый пост)
А эти структуры хоть ускорят работу программы, а то столько текста, а толку 0. 

Не думаю.

Они сделают ее более читабельной и расширяемой.



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


Шустрый
*


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

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



Читал - плакаль, ниасилил. Афтар выпей йаду.

(Прошу меня правильно понять - комментирую в том же стиле, в котором написана программа.)

Я конечно понимаю, что всем нужно с чего то начинать, но проблема не в том, что некоторые люди пишут, проблема в том, что они считают нужным это показывать другим людям (перефраз Чехова).

JackYF, Я думаю эту программу ничто не сделает ни читабельной ни расширяемой кроме переписывания.

PM MAIL ICQ   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0856 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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