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

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

Восстановить пароль Регистрация
 
 
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 19:21     Функции и их вызов. Подскажите #1
Учусь в колледже и по программированию задали программу написать, котоаря бы брала четырёхзначные числа, делила бы их на две части (допустим 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;
}
Благодарю. Никак не могу разобраться что к чему, как они между собой связываются
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 19:21     Функции и их вызов. Подскажите
Посмотрите здесь:

C++ Вызов функции
C++ Вызов функции
Вызов функции C++
C++ Вызов функции
Вызов функции в возврате значения функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для 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.
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.
Про типы данных и константы с переменными я знаю, но мне интересно именно каким боком все эти функции пристыковываются к мейну и начинают с ним совместно работать? Я там в комментариях в строчках кода указал непонятные моменты. И как понять "Возвращает значение переменной?"
Folko
 Аватар для 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);
}
вроде так...
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?

Как бы ты свою функцию потом вызвал в мейне? Я вот не понимаю как вызывать? Не понимаю что к чему обращается и как это делать правильно..
Folko
 Аватар для 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'а не имеют ничего общего между собой. Просто они так названы, что бы обозначить их вспомогательную роль
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? И как потом это взаимодействует с функцией мейн?

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

Добавлено через 51 секунду
Цитата Сообщение от Deeve Посмотреть сообщение
Почему здесть не if (kv(i)==i)
спроси у автора который позабыл как функцию обозвал
Folko
 Аватар для 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;
}
вы понимаете, что тут происходит?
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
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
так понятнее?
а цикл в этой функции нафиг не нужен
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; - локальные константы или переменные в данной функции. Так?
Folko
 Аватар для 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 продолжает выполнение
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" будут постоянно меняться. Хз.
Folko
 Аватар для 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
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
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, которые перемножаются и дают квадрат в итоге.
* * }
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:15  [ТС]     Функции и их вызов. Подскажите #16
А как бы вы эту программу написали? Можете свои варианты выложить?

То, что вы, Фолько, объяснили - очень тяжело сообразить. Видимо у меня где-то брешь в понимании самых простейших моментов. Я учусь не в России, и не на родном языке - много чего могу не уловить из обучения. Вот только узнал, что первой читается функция мейн. До этого было непонятно как программа считывает всё. Думал сверху вниз.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
03.11.2013, 21:16     Функции и их вызов. Подскажите #17
Цитата Сообщение от Deeve Посмотреть сообщение
Мейн имеет 2 константы - int a и int b, которые равны 3.
переменные!!!!!
отличие в том что в переменных можно менять значения в константах нельзя
Цитата Сообщение от Deeve Посмотреть сообщение
Есть функция td. Только я не понимаю что в ней происходит. Что такое эти буквы а, но предположу, что вместо первых подставится a и b, а с типа будет равно td(a+b), но останестя тогда одна неизвестная и "c" с "td" будут постоянно меняться. Хз.
из за того что ты обозвал переменные так коряво вот и возникают непонятки
a в майне и a в td это РАЗНЫЕ переменные
Цитата Сообщение от Deeve Посмотреть сообщение
СЛовами я любую задачу могу описать, но вот записать так, чтобы работало - не выходит.
вот и описывай
предлагаю такой подход
пишешь листинг из одних коментариев
например
C++
1
2
3
4
// создать переменную1 и присвоить ей 5
// создать переменную2 и присвоить ей 7
//создать  переменную сумма
// сложить пременную1 и переменную2 результат в сумму
потом начинаешь кодировать свои коментарии

C++
1
2
3
4
5
6
7
8
// создать переменную1 и присвоить ей 5
int var1=5;
// создать переменную2 и присвоить ей 7
int var2=7;
//создать  переменную сумма
int summ;
// сложить пременную1 и переменную2 результат в сумму
summ=var1+var2
со временем начнешь уже в уме создавать структуру программы
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:17  [ТС]     Функции и их вызов. Подскажите #18
То есть в c будет записано число 56
Почему так?

Разве не 56(4+3) т.е. 56*7 т.е. 392 ?
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:19     Функции и их вызов. Подскажите #19
Deeve, если что, мой ник читается Фолко, а не Фолько)
А решение я уже приводил:
C++
1
2
3
4
5
6
7
8
9
10
int func(int a)
{
return ((int)a/100)+((int)a%100)*((int)a/100)+((int)a%100);
}
 
int main(){
for (int i = 1000; i<10000; i++)
if (func(i) == i) cout << "Число " << i << " подходит!" << endl;
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 21:20     Функции и их вызов. Подскажите
Еще ссылки по теме:

C++ Вызов функции
Вызов функции C++
Вызов функции в параметре другой функции C++

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

Или воспользуйтесь поиском по форуму:
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:20  [ТС]     Функции и их вызов. Подскажите #20
со временем начнешь уже в уме создавать структуру программы
Я так и делаю, Бро, только я не могу правильно записать всё потом уже в программу, чтобы всё работало и взаимодействовало. Как записать переменные и константы я знаю. И там у него именно константы ведь. int a = 3, int b = 4. Они не меняются, а всегда равны 3 и 4.

Мне большую сложность являет собой состыковка мейна с другими функциями. Что значат ретурны всякие, ещё и с названием функции, либо буквой какой-нибудь, а потом ещё и в скобках что-то написано. Это же важно всё, а я этого не могу понять.
Yandex
Объявления
03.11.2013, 21:20     Функции и их вызов. Подскажите
Ответ Создать тему
Опции темы

Текущее время: 13:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru