Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Функции в функциях
Stanislaw
Отправлено: 27 Января, 2014 - 23:30:42
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013  
Репутация: 2




Есть максимум вложенности функций?Конструкции типа:
function summa()
{
function suma()
{
function sma()
{
..........
}
}
}
возможен ли вызов внутренних функций из основного блока программы?
 
 Top
Kibor
Отправлено: 28 Января, 2014 - 02:59:40
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8098
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Вложенность не ограничена...
Но этот код не верный вообще.

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


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

function summa()
{
suma();
}

function suma()
{
sma();
}

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


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

Отовсюду можно. Смотрите примеры.
 
 Top
Stanislaw
Отправлено: 04 Февраля, 2014 - 13:06:29
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013  
Репутация: 2




 Kibor пишет:
Вложенность не ограничена...
Но этот код не верный вообще.

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


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

function summa()
{
suma();
}

function suma()
{
sma();
}

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


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

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




я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы. И если да то какова степень максимальной вложенности
 
 Top
Kibor
Отправлено: 04 Февраля, 2014 - 13:51:36
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8098
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Stanislaw пишет:
я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы

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

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

И еще... Из основного тела программы нельзя использовать даже переменные объявление которых в функции, так как объявленные переменные в функции будут видно только в ней.
 
 Top
Stanislaw
Отправлено: 05 Февраля, 2014 - 04:16:16
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013  
Репутация: 2




 Kibor пишет:
 Stanislaw пишет:
я имел ввиду можно ли внутри функции объявлять функцию и пользоваться ей из основного тела программы

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

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

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


Объявленная внутри функции функция работает.А нужна она,как и любая функция(процедура),чтобы не повторять код,а вынести не могу из-за объявленных переменных,которые должны быть внутри функции. Простите за тавтологию. Язычок
 
 Top
Kibor
Отправлено: 05 Февраля, 2014 - 04:23:10
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8098
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Приведите упрощенный такой код - разберемся что и как работает.
С переменными...
 
 Top
Stanislaw
Отправлено: 05 Февраля, 2014 - 05:02:02
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013  
Репутация: 2




 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;}
}

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



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8098
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Вот упрощенный..

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);
}
 
 Top
Zireael
Отправлено: 12 Декабря, 2017 - 12:17:35
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4398
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
func (123, 456);
func (789);

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

Логичнее при втором вызове функции получить -842150451, а не результат предыдущего вызова.
 
 Top
Kibor
Отправлено: 12 Декабря, 2017 - 12:39:29
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8098
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Логично не отходить от синтаксиса.
Если принимает 2 параметра надо передавать 2

..

Память выделяется один раз, а не при каждом вызове функции. Потом просто используется в этой функции.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by