Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
1

Необходимо переделать функцию

03.12.2012, 20:14. Просмотров 830. Ответов 28
Метки нет (Все метки)

Подскажите, пожалуйста, весь инет обгуглил, подобного не нашёл.

Есть такой код -

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
#include <iostream>
 #include <cstdlib>
 using namespace std;
 
 double &f(void)
 {
 static double a,b,c;
 return a;
 }
 
 int main()
 {
 
 cout << f() << ", ";
 f() = 23;
 f() = 12;
 cout << f() << ", ";
 cout << f() << ", ";
 f() = 2;
 f() = -5;
 cout << f() << '.';
 
 system("pause");
 return EXIT_SUCCESS;
 
 }
Условия - main{} не трогать.
Функция должна быть без параметров.
Сделать чтоб при
f() = 23;
a становилась 23
дальше при f() = 12;
b становилась 12
c соответственно 2 дальше, а потом заново - a -5

Вот так написать - double &f(void)
Я придумал методом перебора, как работает не понимаю, но компилируется хоть, мануалы читал - подобного не нашёл.
Как в таком случае присваивать значения стат. переменным внутри функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 20:14
Ответы с готовыми решениями:

Необходимо переделать программу,чтобы список формировался рандомными числами
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include...

необходимо переделать программу, чтобы вместо обычных массивов были динмические
всем заранее спасибо :friends: # include &quot;iostream&quot; # include &lt;math.h&gt; #...

Переделать процедуру в функцию
Доброго времени суток! Выполнил условие программы, но оформлена она должна быть...

Нужно переделать функцию С++
Нужно переделать функцию, ну или решить через рекурсию. Задача состоит в том,...

Переделать функцию c указателем на int, на функцию с указателем на void
Есть рабочий код qsort для int: void qsort(int *base, int n) { //...

28
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 20:23 2
Diserted, подозреваю что надо f() реализовать как метод класса, и перегрузить &operator=.

Добавлено через 1 минуту
Цитата Сообщение от Diserted Посмотреть сообщение
Сделать чтоб при
f() = 23;
a становилась 23
дальше при f() = 12;
b становилась 12
c соответственно 2 дальше, а потом заново - a -5
с чего это 'c' должна быть соответственно 2? однозначное соответствие предполагает закономерность, которую ты скрыл от публики.
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 20:26  [ТС] 3
Цитата Сообщение от activnaya Посмотреть сообщение
Diserted, подозреваю что надо f() реализовать как метод класса, и перегрузить &operator=.

Добавлено через 1 минуту

с чего это 'c' должна быть соответственно 2? однозначное соответствие предполагает закономерность, которую ты скрыл от публики.
задачка с первого курса, кажется классы ещё не проходили.
на a-b-c можно пока забить, просто дать пример когда статической переменной внутри функции присваевается значение способом f()=6 например, дальше разберусь.
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 20:28 4
Выложи полный текст ТЗ.

Добавлено через 45 секунд
Цитата Сообщение от Diserted Посмотреть сообщение
просто дать пример когда статической переменной внутри функции присваевается значение способом f()=6 например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
double &f()
{
    static double a, b, c;
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
 
    std::cout << f();
 
    return 0;
}
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,563
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 20:29 5
Цитата Сообщение от Diserted Посмотреть сообщение
функции присваевается значение способом f()=6 например, дальше разберусь.
Это делается в main. Ваша функция возвращает ссылку на переменную и уже в main ей присваивается значение.
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 20:36  [ТС] 6
Цитата Сообщение от activnaya Посмотреть сообщение
Выложи полный текст ТЗ.

Добавлено через 45 секунд

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
double &f()
{
    static double a, b, c;
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
 
    std::cout << f();
 
    return 0;
}
Ну так это тоже самое, что у меня.
выводит он 23, но переменная a не становится 23.
а мне как раз это нужно.

Добавлено через 33 секунды
Цитата Сообщение от Croessmah Посмотреть сообщение
Это делается в main. Ваша функция возвращает ссылку на переменную и уже в main ей присваивается значение.
сорри, не понимаю.
можно пример?
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 20:43 7
Цитата Сообщение от Diserted Посмотреть сообщение
Ну так это тоже самое, что у меня.
выводит он 23, но переменная a не становится 23.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int &f()
{
    static int a = (int)f;
    return a;
}
 
int main()
{
    int x = 23;
    f() = x;
    std::cout << f() << '\n';
    x = 12;
    f() = x;
    std::cout << f() << '\n';
    x = 2;
    f() = x;
    std::cout << f() << '\n';
 
    return 0;
}
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,563
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 20:50 8
сорри, не понимаю.
можно пример?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
double &f()
{
    static double a=5;
     std::cout<<"Function f: a = "<<a<<"\n";
    return a;
}
 
int main()
{
    double x = 23;
    f() = x; 
    std::cout <<"Function main: return f = "<<f()<<"\n";
    f() = 34; 
    std::cout <<"Function main: return f = "<< f()<<"\n";
    std::cin.get();
    return 0;
}
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 20:55  [ТС] 9
проблема та же -

C++
1
2
3
4
5
int &f()
{
    static int a = (int)f,b=0;
    return b;
}
выводит то же самое что и

C++
1
2
3
4
5
int &f()
{
    static int a = (int)f;
    return a;
}
Вот задание, может я просто не так объясняю:

Напишите функцию без параметров, имеющую три статические переменные, которые хранят значения последних трех присвоенных чисел (то есть выражение f() = … должно записывать выражение справа от знака “=” в какую-либо статическую переменную функции f, начальные значения статических переменных равны нулю). Функция должна предоставлять доступ к среднему арифметическому этих трех переменных. Гарантируется, что записываемые значения никогда не будут равны текущему значению среднего арифметического. Например, после вызова
C++
1
2
3
4
5
6
7
8
cout << f() << ", ";
f() = 23;
f() = 12;
cout << f() << ", ";
cout << f() << ", ";
f() = 2;
f() = -5;
cout << f() << '.';
на экран будут выведены числа:
0, 11.6667, 11.6667, 3.

Цитата Сообщение от activnaya Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int &f()
{
    static int a = (int)f;
    return a;
}
 
int main()
{
    int x = 23;
    f() = x;
    std::cout << f() << '\n';
    x = 12;
    f() = x;
    std::cout << f() << '\n';
    x = 2;
    f() = x;
    std::cout << f() << '\n';
 
    return 0;
}
Добавлено через 1 минуту
сорри, не так меня поняли, посмотрите задание.
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
double &f()
{
    static double a=5;
     std::cout<<"Function f: a = "<<a<<"\n";
    return a;
}
 
int main()
{
    double x = 23;
    f() = x; 
    std::cout <<"Function main: return f = "<<f()<<"\n";
    f() = 34; 
    std::cout <<"Function main: return f = "<< f()<<"\n";
    std::cin.get();
    return 0;
}
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 20:55 10
вот так наглядно будет. Осторожно! рекурсия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
double &f()
{
    static double a = (double)((uint64_t)f);
    std::cout << "i'm f(). a = " << a << '\n';
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 12;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 2;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
 
    return 0;
}
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:00  [ТС] 11
'uint64_t' : undeclared identifier

Цитата Сообщение от activnaya Посмотреть сообщение
вот так наглядно будет. Осторожно! рекурсия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
double &f()
{
    static double a = (double)((uint64_t)f);
    std::cout << "i'm f(). a = " << a << '\n';
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 12;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 2;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
 
    return 0;
}
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:01  [ТС] 12
'uint64_t' : undeclared identifier

Цитата Сообщение от activnaya Посмотреть сообщение
вот так наглядно будет. Осторожно! рекурсия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
double &f()
{
    static double a = (double)((uint64_t)f);
    std::cout << "i'm f(). a = " << a << '\n';
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 12;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 2;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
 
    return 0;
}
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:02  [ТС] 13
'uint64_t' : undeclared identifier

Цитата Сообщение от activnaya Посмотреть сообщение
вот так наглядно будет. Осторожно! рекурсия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
double &f()
{
    static double a = (double)((uint64_t)f);
    std::cout << "i'm f(). a = " << a << '\n';
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 12;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 2;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
 
    return 0;
}
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:03  [ТС] 14
'uint64_t' : undeclared identifier

Цитата Сообщение от activnaya Посмотреть сообщение
вот так наглядно будет. Осторожно! рекурсия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
double &f()
{
    static double a = (double)((uint64_t)f);
    std::cout << "i'm f(). a = " << a << '\n';
    return a;
}
 
int main()
{
    double x = 23;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 12;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
    x = 2;
    f() = x;
    std::cout << "i'm main. f() = " << f() << '\n';
 
    return 0;
}
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 21:07 15
Цитата Сообщение от Diserted Посмотреть сообщение
'uint64_t' : undeclared identifier
да. Всё тяжело
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:08  [ТС] 16
Цитата Сообщение от activnaya Посмотреть сообщение
да. Всё тяжело
я там само задание сверху написал, может вообще не в ту степь лезу?
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 21:11 17
Цитата Сообщение от Diserted Посмотреть сообщение
я там само задание сверху написал, может вообще не в ту степь лезу?
в ту. Единственно что доставляет неудобство, так это неточность ТЗ, а именно: значения переменных гарантированно не равны прошлому среднему арифметическому. Это значит что надо выполнять проверки, а при первом вызове проверять как бы не с чем. Поэтому условимся что начальное среднее арифметическое равно 0 и при первом вызове ни одна из переменных не равна 0. Сейчас придумаем что-то.
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:19  [ТС] 18
Цитата Сообщение от activnaya Посмотреть сообщение
в ту. Единственно что доставляет неудобство, так это неточность ТЗ, а именно: значения переменных гарантированно не равны прошлому среднему арифметическому. Это значит что надо выполнять проверки, а при первом вызове проверять как бы не с чем. Поэтому условимся что начальное среднее арифметическое равно 0 и при первом вызове ни одна из переменных не равна 0. Сейчас придумаем что-то.
да эт я сам напишу, мне главное чтоб статическим переменным значения передавались
в данный момент этого не происходит.
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
03.12.2012, 21:31 19
Diserted, что значит не происходит? Во всех примерах данной темы это как раз и происходит. Вы или не поняли задания или не понимаете что происходит при f() = number;
0
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:43  [ТС] 20
Цитата Сообщение от Toshkarik Посмотреть сообщение
Diserted, что значит не происходит? Во всех примерах данной темы это как раз и происходит. Вы или не поняли задания или не понимаете что происходит при f() = number;
Хм, давайте посмотрим.

Делаем

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 int &f()
{
    static int a = (int)f,b=0;
    return b;
}
 
int main()
{
f() = 11;
std::cout << f() << '\n';
return 0;
}
почему я на выходе получаю 11, если у меня return b, а не a?
0
03.12.2012, 21:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 21:43

Переделать функцию с помощью шаблонов
оформить в виде шаблона функции,использующие эти шаблоны для типов int, float,...

Нужно из массива переделать в функцию
Добрый день господа программисты, помогите переделать из массива в функцию,...

Перегруженную функцию переделать в виртуальную
Сам как не знаю сделать пожалуйста помогите)) Есть перегруженная функция, нужно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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