int is_square(int y)
{  
    int x = 0;
    while (x<=y)
    {
        if (y==1 || y==0)
        {return 1;}
        else if ((x*x)==y)    
        {return 1;}
        else
        {
         x=x+1;
         continue;
        }
        
         
    }
    
       return 0;
}  
Над этим кодом я думал около двух дней и моя основная ошибка в не работоспособности кода в выявлений является то что я написал переменную в функций а не в аргументе .
Тоесть я написал:
int is_square()
{
  int x = 0;
  int y = read_int() 	//  read_int = Функция которая считывает целое число и его возвращает. (Источник - https://stepik.org)
}
Вместо:
int is_square(int y)
{  
    int x = 0;
}
И тут у меня логичный вопрос в чём разница? Я читаю однако до конца понимания не приходит , кажеться что в втором случае "y" Аргумент функций , а "x" переменная.
Заранее спасибо ! Кто обьяснит мне нубу что это такое и даст где можно почерпать информацию.

Answer

VuRdaLaK1337, в таком случае вот вам ответ. Если переменная записана в аргументах функции, то при стандартном вызове в C++ (_cdecl) все аргументы передаются через стэк. В случае, если вы объявляете переменную внутри функции, она может быть локальной - обнуляться при повторном вызове функции (не работает с массивами), либо статичной (при объявлении указано static). Статичная переменная в данном случае будет в области видимости этой функции, но при этом будет сохранять свои значения при повторном вызове. Пример:
#include <cstdio>

int a() {
	static int i = 0;
	printf("%d\n", i++);
	return i;
}

int main() {
	while(a() < 10);
	return 0;
}
0
Голосов: 0
rhiNo1922 - 1 year ago
Edited by
0
Голосов: 0
Очередной раз понимаю что я очень поспешный и гуглю плохо. Гуглил перед тем как задать вопрос 10 мин ответ не нашёл , Задал вопрос полистал пару минут и вуаля нашёл ответ. Всё просто Аргумент функций это его Аргумент , которые даётся из предыдущей функций либо Мейна либо еще где по крайней мере я так это понимаю , Переменную опеределяет только функция в котором она указана если мы говорим об локальной переменной , а в моём случае аргумент "y" нам давался из Мейна , и компилятор сам автоматом прописывает мейн мне остаётся написать только функцию определния квадрата. Надеюсь меня поняли :c
Если я что-то не правильно написал буду благодарен за исправление никак не претендую на истину. Просто высказал своё умозаключение.
0
Голосов: 0
Ev3nt - 1 year ago
Edited by
0
Голосов: 0
А не проще было подключить math.h | cmath и оттуда вызывать функцию sqrt?
0
Голосов: 0
rhiNo1922 - 1 year ago
0
Голосов: 0
А не проще было подключить math.h | cmath и оттуда вызывать функцию sqrt?
Всегда есть пути проще. Это зависит от навыков программиста как он запилит код быстрее , короче и тд. Я как видишь полный нуб. И это задание из курса , хотя стоило об этом упомянуть , спасибо что отписал.
1
Голосов: 1
Ev3nt - 1 year ago
Edited by
1
Голосов: 1
VuRdaLaK1337, в таком случае вот вам ответ. Если переменная записана в аргументах функции, то при стандартном вызове в C++ (_cdecl) все аргументы передаются через стэк. В случае, если вы объявляете переменную внутри функции, она может быть локальной - обнуляться при повторном вызове функции (не работает с массивами), либо статичной (при объявлении указано static). Статичная переменная в данном случае будет в области видимости этой функции, но при этом будет сохранять свои значения при повторном вызове. Пример:
#include <cstdio>

int a() {
	static int i = 0;
	printf("%d\n", i++);
	return i;
}

int main() {
	while(a() < 10);
	return 0;
}
0
Голосов: 0
rsfghd - 1 year ago
0
Голосов: 0
ничего не пон, а в чём проблема?
0
Голосов: 0
rhiNo1922 - 1 year ago
0
Голосов: 0
ничего не пон, а в чём проблема?
Ну я тут не понимаю разницы переменных которая выходит в качестве аргумента , и другой который объявляется внутри функций.

Ev3nt:
Я пока Стек не изучал , хотя знаю что это что-то связано с хранением памяти.В целом остальное понял. В будущем с более обширными знаниями вернусь к этому вопросу. Спасибо за ответ!
0
Голосов: 0
ScorpioT1000 - 1 year ago
Edited by
0
Голосов: 0
Работает с массивами и структурами, если передавать по значению, это вам не жасс. Небольшие структуры можно смело отправлять в стек
To leave a comment please sign in to the site.