Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
#1

Функции и их вызов. Подскажите - C++

03.11.2013, 19:21. Просмотров 750. Ответов 29
Метки нет (Все метки)

Учусь в колледже и по программированию задали программу написать, котоаря бы брала четырёхзначные числа, делила бы их на две части (допустим 3025 делила бы на 30 и 25), складывала эти две полученные части и квадрат этой суммы давал бы это число т.е. (30+25)*(30+25)=3025 и программа должна была найти такие четырехзначные числа, квадрат суммы двух частей которых давал бы это число. Я взял похожий код из интернета, немного его переписал. Как бы всё понятно, кроме того - как эти функции подключены? Как мне самому подключить функции, если я напишу что-то подобное? у меня нет проблем написать сами функции самому, но вот вызвать их в мейне - проблема. Не понятные места помечаю комментарием

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdlib>
#include <iostream>
 
using namespace std;
int kv(int a) // что дает нам имя и int a? Почему int a?
{
    a*=a;
    return a; // почему возвращаемся в a? Что значит возвращение в a?
}
int sum1 (int a) // опять этот Int a, и имя непонятное
{
    int sum=0;
    while (a>0)
    {
        sum+=a%100; 
        a=a/100; // значение a меняется в итоге и возвращается в kv и там умножается? А где сохраняется тогда первый a? Ведь у 4-значного числа 2 части. Одна a и вторая a, которые перемножаются и дают квадрат в итоге.
    }
    return kv(sum); // почему возвращаемся к kv? Типа дальше решать будет всё kv функция?
}    
int main(int argc, char *argv[])
{
    int a, sum; // тут только все константы и переменные, которые уже использовались?
    for (int i=1000;i<9999;i++)
    if (sum1(i)==i)               // вот тут больше всего непонятно. Почему sum(i)?
    cout<<"Podhodiashee chislo = "<<i<<endl;
    system ("PAUSE");
    return EXIT_SUCCESS;
}
Благодарю. Никак не могу разобраться что к чему, как они между собой связываются
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции и их вызов. Подскажите (C++):

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int &amp;ref){...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Вызов функции в параметре другой функции - C++
программа: #include &lt;iostream&gt; using namespace std; struct E { E() {} }; void f(const E&amp; e)

Вызов функции в возврате значения функции - C++
Есть функция: int function1(a) { ...... return function2(function1(b),function1(c)); } Как работает такая хитрая система?

вызов функции из под функции - C++
Добрый вечер. Такая ситуация: есть функция, назовем ее MainThreadFunc. Как можно сделать так, чтобы любая другая функция, которую я напишу,...

Вызов функции - C++
Написать вызов функции для строковых переменных, помогите!

29
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 19:25 #2
Deeve,
C++
1
2
3
4
5
int kv(int a) // что дает нам имя и int a? Почему int a?
{
    a*=a;
    return a; // почему возвращаемся в a? Что значит возвращение в a?
}
int - это тип возвращаемого значения. int a это передача в функцию целочисленного числа, a - взятое от балды имя. можно было t, d, numb и что то иное. И оно возвращает значение переменной a

а вот эту строку
C++
1
int a, sum; // тут только все константы и переменные, которые уже использовались?
я не понял. В main не используются ни a, ни sum.
0
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 19:29  [ТС] #3
Цитата Сообщение от Deeve Посмотреть сообщение
return kv(sum);
И почему тут kv(SUM) ? Именно sum, а не A?

Добавлено через 1 минуту
Цитата Сообщение от Folko Посмотреть сообщение
Deeve,
C++
1
2
3
4
5
int kv(int a) // что дает нам имя и int a? Почему int a?
{
    a*=a;
    return a; // почему возвращаемся в a? Что значит возвращение в a?
}
int - это тип возвращаемого значения. int a это передача в функцию целочисленного числа, a - взятое от балды имя. можно было t, d, numb и что то иное. И оно возвращает значение переменной a

а вот эту строку
C++
1
int a, sum; // тут только все константы и переменные, которые уже использовались?
я не понял. В main не используются ни a, ни sum.
Про типы данных и константы с переменными я знаю, но мне интересно именно каким боком все эти функции пристыковываются к мейну и начинают с ним совместно работать? Я там в комментариях в строчках кода указал непонятные моменты. И как понять "Возвращает значение переменной?"
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 19:39 #4
Deeve,
C++
1
2
3
4
5
6
7
8
9
10
int sum1 (int a) // опять этот Int a, и имя непонятное
{
    int sum=0;
    while (a>0)
    {
        sum+=a%100; 
        a=a/100; // значение a меняется в итоге и возвращается в kv и там умножается? А где сохраняется тогда первый a? Ведь у 4-значного числа 2 части. Одна a и вторая a, которые перемножаются и дают квадрат в итоге.
    }
    return kv(sum); // почему возвращаемся к kv? Типа дальше решать будет всё kv функция?
}
вот здесь, как я понял, от числа a отжирается остаток от деления на 100 (двухзначное число как раз) и прибавляется к sum. То есть в sum к окончанию цикла хранится сумма двух частей 4-значного числа. Затем эта сумма передается в kv, где умножается сама на себя. И потом результат возвращается в main

Добавлено через 2 минуты
Deeve, возвращает в прямом смысле. Вызывая функцию, она вернет вам какое то значение (если она должна возвращать)
Пример: int t = sqrt(9);
Вы вызвали функцию извлечения корня, передали ей число. Она возвращает значение (в данном примере 3). Теперь t будет равно 3.

Добавлено через 5 минут
Deeve, да и как то странно он сделал, я бы наверно реализовал так...
C++
1
2
3
4
int func(int a)
{
return ((int)a/100)+((int)a%100)*((int)a/100)+((int)a%100);
}
вроде так...
1
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 19:55  [ТС] #5
Цитата Сообщение от Folko Посмотреть сообщение
Deeve,
вот здесь, как я понял, от числа a отжирается остаток от деления на 100 (двухзначное число как раз) и прибавляется к sum. То есть в sum к окончанию цикла хранится сумма двух частей 4-значного числа. Затем эта сумма передается в kv, где умножается сама на себя. И потом результат возвращается в main
Хорошо, а как он заменяет sum буквой а? Ведь в первой функции a=a*a, где a это одна часть четырехзначного числа, а вторая а - это вторая часть, так откуда эти обе а берутся? Как sum превращается в a?

И вот я именно конкретно не понимаю как вызываются эти функции. Как-то написанно странно. Что значит

return SUM (int a), что значит то, что в скобках? К чему это обращается или что подставляет? И откуда он берет имя функции сразу после return?

Как бы ты свою функцию потом вызвал в мейне? Я вот не понимаю как вызывать? Не понимаю что к чему обращается и как это делать правильно..
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 20:01 #6
Deeve, свою функцию я бы вызвал так же, как у него:
C++
1
2
3
for (int i=1000;i<9999;i++)
    if (func(i)==i)               // вот тут больше всего непонятно. Почему sum(i)?
    cout<<"Podhodiashee chislo = "<<i<<endl;
воспринимайте переменные как удобное обращение к памяти компьютера. Сама переменная a используется для удобного обращения к области памяти, где хранится какое то число. Переменные, объявляемые в функциях, являются локальными, поэтому a в первой и a во второй функциях имеют разные значения. То есть когда пишут int func(int a) это означает не то что переменная а перемещается в функцию, а то, что функции передается некое число, которое будет храниться в переменной a.
Для наглядности приведу пример:
у меня есть программа с 10 функциями. И в четырех из них есть передаваемое значение int temp. Так вот все эти четыре temp'а не имеют ничего общего между собой. Просто они так названы, что бы обозначить их вспомогательную роль
0
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 20:43  [ТС] #7
for (int i=1000;i<9999;i++)
if (sum1(i)==i)
Почему здесть не if (kv(i)==i) ? По-идее последнее действие было (функция kv) - это найти квадрат sum+а

Добавлено через 4 минуты
Как в итоге a=*a получается из sum+=a%100 и a=a/100 ? Я понимаю, что sum = а%100, это a делим на 100 и то что за запятой - то и есть sum, а a/100 там просто делим на 100 - и целое число это и есть a. НО КАК "sum" превращается в a? Где это прописывается? И как они потом взаимодействуют с функцией kv? И как потом это взаимодействует с функцией мейн?

... Блин. Сложно.
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
03.11.2013, 20:46 #8
Цитата Сообщение от Deeve Посмотреть сообщение
Никак не могу разобраться что к чему, как они между собой связываются
Цитата Сообщение от Deeve Посмотреть сообщение
Я взял похожий код из интернета, немного его переписал.
и долго будешь разбираться
здесь ошибка на ошибке
плюс еще функция которая обозвана не так обзывается плюс имя функции равно имени переменной
разбиратся с этим кодом себе дороже, проще новый написать

Добавлено через 51 секунду
Цитата Сообщение от Deeve Посмотреть сообщение
Почему здесть не if (kv(i)==i)
спроси у автора который позабыл как функцию обозвал
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 20:50 #9
Deeve, омг. Вы по моему совсем не понимаете, как работают переменные.
смотрим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int td(int a)
{
return a*a+a;
}
 
int main()
{
int a = 3;
int b = 4;
int c = td(a+b);
return 0;
}
вы понимаете, что тут происходит?
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
03.11.2013, 20:51 #10
Цитата Сообщение от Deeve Посмотреть сообщение
Как в итоге a=*a получается из sum+=a%100 и a=a/100 ? Я понимаю, что sum = а%100, это a делим на 100 и то что за запятой - то и есть sum, а a/100 там просто делим на 100 - и целое число это и есть a.
не мучайся
попробуй описать словами алгоритм а потом поймешь код
и так как разделить 4значное число на два двухзначных
ААСС должно получится АА и СС
чтобы получить число АА нужно разделить ААСС на 100 АА=ААСС/100
как получить число СС это остаток от деления на 100 числа ААСС СС =ААСС%100
так понятнее?
а цикл в этой функции нафиг не нужен
0
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 20:54  [ТС] #11
Так. Понял. Выполнение программы всегда начинается с функции main? Тогда выходит примерно такой вариант:
Main обращается к sum1, и тут же, отдельно sum1 обращается к kv

sum1 работает совместно с kv, и как бы являются одним целым - sum1, к которой main и обращается. так? Может не совсем правильно написал.

Тогда вопрос:
int func (int a)
int a, b, c;
int - тип данных, целые числа
func - имя функции, может быть любое
(int a) - ЧТО ЭТО?
int a, b, c; - локальные константы или переменные в данной функции. Так?
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 20:57 #12
Deeve, int a это значение, которое вы даете функции. Зачастую функция создается, что бы обработать какие то данные. Вот именно эти данные вы передаете ей в скобках при вызове. Эти данные в самой функции тоже должны храниться в каких то переменных. А назвали ее а просто так
в вашем найденном коде из функции main вызывается sum1, потом из sum1 вызывается kv (сама sum1 приостанавливает работу), kv возвращает значение и sum1 продолжает работать. Потом и она возвращает значение в функцию main и main продолжает выполнение
0
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 20:59  [ТС] #13
Цитата Сообщение от ValeryS Посмотреть сообщение
не мучайся
попробуй описать словами алгоритм а потом поймешь код
и так как разделить 4значное число на два двухзначных
ААСС должно получится АА и СС
чтобы получить число АА нужно разделить ААСС на 100 АА=ААСС/100
как получить число СС это остаток от деления на 100 числа ААСС СС =ААСС%100
так понятнее?
а цикл в этой функции нафиг не нужен
Как без цикла она проверит все числа от 1000 до 9999?

Как разделить четырехзначное число я понимаю. СЛовами я любую задачу могу описать, но вот записать так, чтобы работало - не выходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int td(int a)
{
return a*a+a;
}
 
int main()
{
int a = 3;
int b = 4;
int c = td(a+b);
return 0;
}
- не совсем понимаю, что тут происходит. Но попробую предположить:
Мейн имеет 2 константы - int a и int b, которые равны 3.

Есть функция td. Только я не понимаю что в ней происходит. Что такое эти буквы а, но предположу, что вместо первых подставится a и b, а с типа будет равно td(a+b), но останестя тогда одна неизвестная и "c" с "td" будут постоянно меняться. Хз.
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:02 #14
Цитата Сообщение от Deeve Посмотреть сообщение
Как без цикла она проверит все числа от 1000 до 9999?

Как разделить четырехзначное число я понимаю. СЛовами я любую задачу могу описать, но вот записать так, чтобы работало - не выходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int td(int a)
{
return a*a+a;
}
 
int main()
{
int a = 3;
int b = 4;
int c = td(a+b);
return 0;
}
- не совсем понимаю, что тут происходит. Но попробую предположить:
Мейн имеет 2 константы - int a и int b, которые равны 3.

Есть функция td. Только я не понимаю что в ней происходит. Что такое эти буквы а, но предположу, что вместо первых подставится a и b, а с типа будет равно td(a+b), но останестя тогда одна неизвестная и "c" с "td" будут постоянно меняться. Хз.
td получит значение 7 (потому что 3+4), которое будет храниться в переменной a. td возвращает значение 7*7+7 = 56. То есть в c будет записано число 56
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
03.11.2013, 21:05 #15
Цитата Сообщение от Deeve Посмотреть сообщение
Как без цикла она проверит все числа от 1000 до 9999?
я имел ввиду цикл в функции
Цитата Сообщение от Deeve Посмотреть сообщение
while (a>0)
* * {
* * * * sum+=a%100;
* * * * a=a/100; // значение a меняется в итоге и возвращается в kv и там умножается? А где сохраняется тогда первый a? Ведь у 4-значного числа 2 части. Одна a и вторая a, которые перемножаются и дают квадрат в итоге.
* * }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 21:05
Привет! Вот еще темы с ответами:

Вызов функции - C++
Здравствуйте! Не могу вызвать функцию, объясните причину. template &lt;typename T&gt; void Calc_etalon (QDir &amp; DirTxt) { ...

Вызов функции - C++
Здравствуйте! Такая задача:Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все элементы, совпадающие...

Вызов функции - C++
#include &quot;stdafx.h&quot; #include &lt;locale&gt; #include &lt;iostream&gt; using namespace std; class Bankomat { public: Bankomat(){}; ...

Вызов функции - C++
Помогите пожалуйста решить завтра зачет, а задачу не могу решить последнюю. Составить программу формирования элементов массивов Х, У и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
03.11.2013, 21:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru