Форум программистов, компьютерный форум 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)
Я придумал методом перебора, как работает не понимаю, но компилируется хоть, мануалы читал - подобного не нашёл.
Как в таком случае присваивать значения стат. переменным внутри функции?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 21:48     Необходимо переделать функцию #21
Цитата Сообщение от Diserted Посмотреть сообщение
почему я на выходе получаю 11, если у меня return b, а не a?
точно не понимаете что происходит. Я бы посоветовал подтянуть знания по функциям и ссылкам.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 21:51  [ТС]     Необходимо переделать функцию #22
Цитата Сообщение от Croessmah Посмотреть сообщение
точно не понимаете что происходит. Я бы посоветовал подтянуть знания по функциям и ссылкам.
да, я с самого начала писал что не понимаю, и прошу пример как это реализовать.
игде не видел ничего похожего.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 21:52     Необходимо переделать функцию #23
Цитата Сообщение от Diserted Посмотреть сообщение
да, я с самого начала писал что не понимаю, и прошу пример как это реализовать.
игде не видел ничего похожего.
Вы не понимаете как работают ссылки, а значит нужно открыть учебник, почитать, решить пару задач, пока на поймете, что материал усвоен и Вы понимаете с чем есть эти самые ссылки
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
03.12.2012, 22:03  [ТС]     Необходимо переделать функцию #24
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы не понимаете как работают ссылки, а значит нужно открыть учебник, почитать, решить пару задач, пока на поймете, что материал усвоен и Вы понимаете с чем есть эти самые ссылки
прочитал уже раз 5, не нашёл как это может мне помочь, и не нашёл подобных примеров.
Что именно смотреть?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
03.12.2012, 22:09     Необходимо переделать функцию #25
Цитата Сообщение от Diserted Посмотреть сообщение
Что именно смотреть?
Что-то на подобии "что такое ссылка", "возвращение ссылки", "работа с ссылками"
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 23:01     Необходимо переделать функцию #26
вот что-то есть. Но не дотягивает.
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
29
30
31
32
33
34
#include <iostream>
 
const double y = 3.;
const int cnt = 5;
 
double &f()
{
    static int count = cnt;
 
    static double a, b, c;
    static double mean;
 
    (--count > 3 ? a : --count > 1 ? b : c ) = (double)((int64_t)f);
    std::cout << count << '\n';
    std::cout << "a = " << a << '\n';
    std::cout << "b = " << b << '\n';
    std::cout << "c = " << c << '\n';
 
 
    return (count > 3 ? a : count > 1 ? b : count >= 0 ? c : (mean = (a + b + c)/y + (double)!(count = cnt) ));
}
 
int main()
{
    double x = 3;
    f() = x;
    x = 4;
    f() = x;
    x = 2;
    f() = x;
    std::cout << f() << '\n';
    
    return 0;
}
переписала. Но все равно не работает как надо.

Добавлено через 16 минут
ахахах))) решение такое простое. сейчас напишу.

Добавлено через 3 минуты
ой нет. я перепутала.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.12.2012, 23:02     Необходимо переделать функцию #27
Задание бессмысленное. Как может функция предоставлять доступ к среднему арифметическому?
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
03.12.2012, 23:10     Необходимо переделать функцию #28
я все таки подозреваю что это должен быть метод класса, а не функция в понимании структурного программирования.

Добавлено через 42 секунды
Цитата Сообщение от Toshkarik Посмотреть сообщение
Как может функция предоставлять доступ к среднему арифметическому?
да. меня тоже очень взволновали эти требования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2012, 00:57     Необходимо переделать функцию
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Diserted
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 15
04.12.2012, 00:57  [ТС]     Необходимо переделать функцию #29
Жесть-то какая.
Ладно, всем спасибо за внимание, скажу девушке чтоб сказала преподу что не смогла, я сделал всё что мог

Добавлено через 1 час 33 минуты
И в итоге мне далти такое решение -

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
29
30
#include <iostream>
#include <cstdlib>
using namespace std;
 
double &f()
{
static double var1 = 0, var2 = 0, var3 = 0; 
static double var4=0;
if (var4 != var1)
{
var4=(var1+var2+var3)/3;
var3=var2;
var2=var1;
var1=var4;
}
return var1;
}
int main()
{
cout << f() << endl;
f()=23;
f()=12;
cout<<f() << endl;
cout<<f()<<endl;
f()=2;
f()=-5;
cout<<f()<<endl;
system("pause");
return EXIT_SUCCESS;
}
Не понимаю как оно работает, но работает.
Yandex
Объявления
04.12.2012, 00:57     Необходимо переделать функцию
Ответ Создать тему
Опции темы

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