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

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

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

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

03.11.2013, 19:21. Просмотров 738. Ответов 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;
}
Благодарю. Никак не могу разобраться что к чему, как они между собой связываются
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++
Написать вызов функции для строковых переменных, помогите!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:15  [ТС] #16
А как бы вы эту программу написали? Можете свои варианты выложить?

То, что вы, Фолько, объяснили - очень тяжело сообразить. Видимо у меня где-то брешь в понимании самых простейших моментов. Я учусь не в России, и не на родном языке - много чего могу не уловить из обучения. Вот только узнал, что первой читается функция мейн. До этого было непонятно как программа считывает всё. Думал сверху вниз.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
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;
}
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:20  [ТС] #20
со временем начнешь уже в уме создавать структуру программы
Я так и делаю, Бро, только я не могу правильно записать всё потом уже в программу, чтобы всё работало и взаимодействовало. Как записать переменные и константы я знаю. И там у него именно константы ведь. int a = 3, int b = 4. Они не меняются, а всегда равны 3 и 4.

Мне большую сложность являет собой состыковка мейна с другими функциями. Что значат ретурны всякие, ещё и с названием функции, либо буквой какой-нибудь, а потом ещё и в скобках что-то написано. Это же важно всё, а я этого не могу понять.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
03.11.2013, 21:22 #21
Folko,
ты бы хот по строчкам описал
а то окончательно запутаешь

Добавлено через 1 минуту
Цитата Сообщение от Deeve Посмотреть сообщение
И там у него именно константы ведь. int a = 3, int b = 4. Они не меняются, а всегда равны 3 и 4.
могут и поменятся
у констант присутствует слово const и больше ничего ты в неё не запишешь
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:25 #22
Deeve, объясняю на пальцах. Вы подходите к автомату с шоколадками, суете туда червонец, ждете и вам выпадает шоколадушка вот и тут также. int c = f(a+b) объявляет целочисленную переменную c и присваивает ей значение, которое нам выдаст функция f. А что происходит в функции f? Она получает число 7 (ведь а = 3, b = 4, то есть f(a+b) эквивалентно f(7)), затем выполняет с переменной а (где хранится это самое переданное число 7) необходимые операции и возвращает некоторое число, в нашем случае 56. Ну и поскольку с = f(7), то после вызова функции у нас переменная c будет равна 56
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:25  [ТС] #23
Цитата Сообщение от Folko Посмотреть сообщение
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;
}
Я скомпилировал твой код - не работает нормально. Показывает все числа, которые оканчиваются на 99

Но ты всё-равно объясни зачем ты это всё написал в return? Почему именно туда? Что значит каждый раз (int) перед решением, что будут целые числа?

У тебя выходит, что вместо a всегда будут подставляться значения i и проверяться?
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:27 #24
ValeryS,

Не по теме:

хм, и наверно еще не стоило сразу возвращать через return

ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
03.11.2013, 21:27 #25
Цитата Сообщение от Deeve Посмотреть сообщение
Что значат ретурны всякие, ещё и с названием функции, либо буквой какой-нибудь, а потом ещё и в скобках что-то написано.
прочитай что нибудь про функции
имя может быть любым какое придумаешь
перед именем стоит что функция возвращает тип или если ничего не возвращает то void
в скобочках аргументы которые нужны для работы функции
return выход из функции

на житейском языке попытаюсь объяснить
ты говоришь "Вася, сосчитай мне 3 плюс 5"
Вася считает и говорит тебе 8
так вот Вася это функция
3 и 5 это аргументы
8 это возвращаемое значение
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:31 #26
Deeve, return - это, грубо говоря, команда, которая возвращает значение и заканчивает работу функции. То есть return 0 в функции main означает, что она вернет программе, вызвавшей ее, число 0. (int) это я на всякий случай сделал представление числа в целочисленном формате, без плавающей точки.
В переменную а при вызове функции будет записываться переданное значение. Само собой, если мы делаем func(i) то мы передаем в функцию число, которому равна переменная i на данный момент
Deeve
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 13
03.11.2013, 21:37  [ТС] #27
Цитата Сообщение от Folko Посмотреть сообщение
Deeve, return - это, грубо говоря, команда, которая возвращает значение и заканчивает работу функции. То есть return 0 в функции main означает, что она вернет программе, вызвавшей ее, число 0. (int) это я на всякий случай сделал представление числа в целочисленном формате, без плавающей точки.
В переменную а при вызове функции будет записываться переданное значение. Само собой, если мы делаем func(i) то мы передаем в функцию число, которому равна переменная i на данный момент

И в этой функции все неизвестные, допустим "a" будут равняться этому "i"? А если неизвестных несколько? Допустим в функции есть int a, b, c; , а i тогда куда подставится?
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
03.11.2013, 21:40 #28
Deeve, если функция будет int func(int a, int b, int c), то тогда вызывать ее придется уже не func(i), а func(i,3,4). То есть сколько вы входных параметров указали, столько и придется передавать при вызове. Вот в этом примере значение i запишется в а, 3 запишется в b, 4 запишется в с. Все прочие переменные в теле функции не получают значений извне, их вы задаете уже сами в теле функции
ntny
7 / 7 / 0
Регистрация: 17.06.2012
Сообщений: 168
03.11.2013, 22:18 #29
А есть мысли как найти искомое число вообще без цикла?
потому, что пробежать 9999 вариантов не очень вариант. Я пока не додумался.
Я правда и про деление на сто каюсь не сразу подумал.
Я бы сконвертил число в строку, разделил на две части, а потом эти две части обратно в число

Добавлено через 2 минуты
https://www.ozon.ru/context/detail/id/19710905/ автору советую скачать и почитать)
Там отлично по самым основам для легкого старта)
Пары глав хватит
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
03.11.2013, 22:26 #30
Цитата Сообщение от ntny Посмотреть сообщение
искомое число вообще без цикла?
abcd=(ab+cd)*(ab+cd)
abcd=ab2+2*ab*cd+cd2
ab2+2*ab*cd+cd2-abcd=0
решай
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 22:26
Привет! Вот еще темы с ответами:

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


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

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

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