Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Вопрос по функциям

Страниц (2): [1] 2 »
 

1. Stanislaw - 27 Января, 2014 - 15:30:42 - перейти к сообщению
Есть максимум вложенности функций?Конструкции типа:
function summa()
{
function suma()
{
function sma()
{
..........
}
}
}
возможен ли вызов внутренних функций из основного блока программы?
2. Kibor - 27 Января, 2014 - 18:59:40 - перейти к сообщению
Вложенность не ограничена...
Но этот код не верный вообще.

Наверно Вы имели в виду то?


 Цитата:
summa();
///////////////////////////////

function summa()
{
suma();
}

function suma()
{
sma();
}

function sma()
{
//////
}


Так пожалуйста..
 Stanislaw пишет:
возможен ли вызов внутренних функций из основного блока программы?

Отовсюду можно. Смотрите примеры.
3. Stanislaw - 04 Февраля, 2014 - 05:06:29 - перейти к сообщению
 Kibor пишет:
Вложенность не ограничена...
Но этот код не верный вообще.

Наверно Вы имели в виду то?


 Цитата:
summa();
///////////////////////////////

function summa()
{
suma();
}

function suma()
{
sma();
}

function sma()
{
//////
}


Так пожалуйста..
 Stanislaw пишет:
возможен ли вызов внутренних функций из основного блока программы?

Отовсюду можно. Смотрите примеры.




я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы. И если да то какова степень максимальной вложенности
4. Kibor - 04 Февраля, 2014 - 05:51:36 - перейти к сообщению
 Stanislaw пишет:
я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы

Какой смысл этих действий?

Нет. Не только в Кибор но и нигде.
Функции объявляются только вне функции. Использовать можно везде.

И еще... Из основного тела программы нельзя использовать даже переменные объявление которых в функции, так как объявленные переменные в функции будут видно только в ней.
5. Stanislaw - 04 Февраля, 2014 - 20:16:16 - перейти к сообщению
 Kibor пишет:
 Stanislaw пишет:
я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы

Какой смысл этих действий?

Нет. Не только в Кибор но и нигде.
Функции объявляются только вне функции. Использовать можно везде.

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


Объявленная внутри функции функция работает.А нужна она,как и любая функция(процедура),чтобы не повторять код,а вынести не могу из-за объявленных переменных,которые должны быть внутри функции. Простите за тавтологию. Язычок
6. Kibor - 04 Февраля, 2014 - 20:23:10 - перейти к сообщению
Приведите упрощенный такой код - разберемся что и как работает.
С переменными...
7. Stanislaw - 04 Февраля, 2014 - 21:02:02 - перейти к сообщению
 Kibor пишет:
Приведите упрощенный такой код - разберемся что и как работает.
С переменными...


function otvet(int x1, int y1,int x2,int y2)
{
int PosX_0[512];int PosY_0[512];
int n,zzz,kk,oo,otvet;
int m=0;
int m1[512][512],m2[512][512];

function blok()
{
if (n>0)
{
aaaa:
m++;
m1[1][m]=PosX_0[n-1];
m1[2][m]=PosY_0[n-1];
m1[3][m]=zzz;
n--;
if (n>0) {goto aaaa;}
}
}
n=findimage(6, #I_0[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=0;blok();
n=findimage(6, #I_1[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=1;blok();
n=findimage(6, #I_2[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=2;blok();
n=findimage(6, #I_3[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=3;blok();
n=findimage(6, #I_4[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=4;blok();
n=findimage(6, #I_5[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=5;blok();
n=findimage(6, #I_6[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=6;blok();
n=findimage(6, #I_7[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=7;blok();
n=findimage(6, #I_8[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=8;blok();
n=findimage(6, #I_9[0][0], 0, #PosX_0[0], #PosY_0[0], x1,y1,x2,y2, w);
zzz=9;blok();
if (m==1){return m1[3][1];}
if (m==2){return m1[3][1]+m1[3][2]*10;}
if (m==3){return m1[3][1]+m1[3][2]*10+m1[3][3]*100;}
}

это кусок,нужны картинки-они вынесены в глобальные чтоб не грузить при каждом вызове функции,основной смыл,думаю,виден - сначало создается программа работающая,тестируется,а после может быть использована в качестве функции без серьезной переделки,выносом некоторых переменных в глобальные и объединение кода в функцию. и так несколько раз возможно...
8. Kibor - 04 Февраля, 2014 - 21:29:28 - перейти к сообщению
Вот упрощенный..

CODE:
otvet();


function otvet()
{
int n=55;

function blok()
{
messagebox (n);
}

n=2;
blok();
}

Работает...


Я бы сделал так ...

CODE:
otvet();

function otvet()
{
int n=55;
n=2;
blok(n);
}

function blok(int n)
{
messagebox (n);
}
9. Zireael - 12 Декабря, 2017 - 04:17:35 - перейти к сообщению
CODE:
func (123, 456);
func (789);

function func(int a1, int a2)
{
messagebox(a2);
}

Логичнее при втором вызове функции получить -842150451, а не результат предыдущего вызова.
10. Kibor - 12 Декабря, 2017 - 04:39:29 - перейти к сообщению
Логично не отходить от синтаксиса.
Если принимает 2 параметра надо передавать 2

..

Память выделяется один раз, а не при каждом вызове функции. Потом просто используется в этой функции.

Powered by ExBB FM 1.0 Final