Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
1

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

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

Author24 — интернет-сервис помощи студентам
Учусь в колледже и по программированию задали программу написать, котоаря бы брала четырёхзначные числа, делила бы их на две части (допустим 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2013, 19:21
Ответы с готовыми решениями:

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...

Вызов функции из другой функции и обратно. Общие переменные функций
Всем привет. Заранее напишу, что я ещё только изучаю программирование В данной программе...

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

Вызов функции из другой функции после нажатия на кнопку
Помогите, пожалуйста! Никак не могу понять почему не запускается функция d() Полный код: &lt;script...

29
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
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
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
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
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
03.11.2013, 20:46 8
Цитата Сообщение от Deeve Посмотреть сообщение
Никак не могу разобраться что к чему, как они между собой связываются
Цитата Сообщение от Deeve Посмотреть сообщение
Я взял похожий код из интернета, немного его переписал.
и долго будешь разбираться
здесь ошибка на ошибке
плюс еще функция которая обозвана не так обзывается плюс имя функции равно имени переменной
разбиратся с этим кодом себе дороже, проще новый написать

Добавлено через 51 секунду
Цитата Сообщение от Deeve Посмотреть сообщение
Почему здесть не if (kv(i)==i)
спроси у автора который позабыл как функцию обозвал
0
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
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
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
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
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 1
03.11.2013, 20:57 12
Deeve, int a это значение, которое вы даете функции. Зачастую функция создается, что бы обработать какие то данные. Вот именно эти данные вы передаете ей в скобках при вызове. Эти данные в самой функции тоже должны храниться в каких то переменных. А назвали ее а просто так
в вашем найденном коде из функции main вызывается sum1, потом из sum1 вызывается kv (сама sum1 приостанавливает работу), kv возвращает значение и sum1 продолжает работать. Потом и она возвращает значение в функцию main и main продолжает выполнение
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
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
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
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
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
03.11.2013, 21:15  [ТС] 16
А как бы вы эту программу написали? Можете свои варианты выложить?

То, что вы, Фолько, объяснили - очень тяжело сообразить. Видимо у меня где-то брешь в понимании самых простейших моментов. Я учусь не в России, и не на родном языке - много чего могу не уловить из обучения. Вот только узнал, что первой читается функция мейн. До этого было непонятно как программа считывает всё. Думал сверху вниз.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
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
со временем начнешь уже в уме создавать структуру программы
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
03.11.2013, 21:17  [ТС] 18
То есть в c будет записано число 56
Почему так?

Разве не 56(4+3) т.е. 56*7 т.е. 392 ?
0
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 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;
}
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 20
03.11.2013, 21:20  [ТС] 20
со временем начнешь уже в уме создавать структуру программы
Я так и делаю, Бро, только я не могу правильно записать всё потом уже в программу, чтобы всё работало и взаимодействовало. Как записать переменные и константы я знаю. И там у него именно константы ведь. int a = 3, int b = 4. Они не меняются, а всегда равны 3 и 4.

Мне большую сложность являет собой состыковка мейна с другими функциями. Что значат ретурны всякие, ещё и с названием функции, либо буквой какой-нибудь, а потом ещё и в скобках что-то написано. Это же важно всё, а я этого не могу понять.
0
03.11.2013, 21:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2013, 21:20
Помогаю со студенческими работами здесь

Вызов массива, сформированной в одной функции с другой функции
Здравствуйте! Есть разрабатываемое решение - состоящее из main.cpp и array.cpp Main - выражает...

Вызов функции визуал бейсика из функции явы скрипта
Как такое соорудить, есть например две наипростецкие функции: &lt;% function base() h11='123' base...

Вызов анимации в коде подскажите
Как вызвать анимацию в коде чтоб при беге проигрывалась анимация бега а при прыжке анимация прыжка?...

Не работает без указателя вызов функции в функции
int AmountOfSquares(int **Array) { NumberOfSquares++; for (i = iTempTwo + 1;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru