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

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

Восстановить пароль Регистрация
 
 
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 20:14     Необходимо переделать функцию #1
Подскажите, пожалуйста, весь инет обгуглил, подобного не нашёл.

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

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)
Я придумал методом перебора, как работает не понимаю, но компилируется хоть, мануалы читал - подобного не нашёл.
Как в таком случае присваивать значения стат. переменным внутри функции?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 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? однозначное соответствие предполагает закономерность, которую ты скрыл от публики.
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 например, дальше разберусь.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 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;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 20:29     Необходимо переделать функцию #5
Цитата Сообщение от Diserted Посмотреть сообщение
функции присваевается значение способом f()=6 например, дальше разберусь.
Это делается в main. Ваша функция возвращает ссылку на переменную и уже в main ей присваивается значение.
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 ей присваивается значение.
сорри, не понимаю.
можно пример?
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 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;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 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;
}
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;
}
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 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;
}
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;
}
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;
}
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;
}
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;
}
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 21:07     Необходимо переделать функцию #15
Цитата Сообщение от Diserted Посмотреть сообщение
'uint64_t' : undeclared identifier
да. Всё тяжело
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:08  [ТС]     Необходимо переделать функцию #16
Цитата Сообщение от activnaya Посмотреть сообщение
да. Всё тяжело
я там само задание сверху написал, может вообще не в ту степь лезу?
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 21:11     Необходимо переделать функцию #17
Цитата Сообщение от Diserted Посмотреть сообщение
я там само задание сверху написал, может вообще не в ту степь лезу?
в ту. Единственно что доставляет неудобство, так это неточность ТЗ, а именно: значения переменных гарантированно не равны прошлому среднему арифметическому. Это значит что надо выполнять проверки, а при первом вызове проверять как бы не с чем. Поэтому условимся что начальное среднее арифметическое равно 0 и при первом вызове ни одна из переменных не равна 0. Сейчас придумаем что-то.
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:19  [ТС]     Необходимо переделать функцию #18
Цитата Сообщение от activnaya Посмотреть сообщение
в ту. Единственно что доставляет неудобство, так это неточность ТЗ, а именно: значения переменных гарантированно не равны прошлому среднему арифметическому. Это значит что надо выполнять проверки, а при первом вызове проверять как бы не с чем. Поэтому условимся что начальное среднее арифметическое равно 0 и при первом вызове ни одна из переменных не равна 0. Сейчас придумаем что-то.
да эт я сам напишу, мне главное чтоб статическим переменным значения передавались
в данный момент этого не происходит.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.12.2012, 21:31     Необходимо переделать функцию #19
Diserted, что значит не происходит? Во всех примерах данной темы это как раз и происходит. Вы или не поняли задания или не понимаете что происходит при f() = number;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 21:43     Необходимо переделать функцию
Еще ссылки по теме:

Как переделать через функцию?( C++
Переделать функцию с помощью шаблонов C++
C++ Переделать кусок программы в функцию

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

Или воспользуйтесь поиском по форуму:
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?
Yandex
Объявления
03.12.2012, 21:43     Необходимо переделать функцию
Ответ Создать тему
Опции темы

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