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

Прата С. С++. Посчитать количество вызовов функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Soldier002
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 22:48     Прата С. С++. Посчитать количество вызовов функции #1
Всем привет!
Закончил раздел про встроенные функции, шаблоны, полиморфизм и ссылочные переменные.
Там в конце такое задание:
Напиши функцию. Один аргумент - адрес строки, выводит строку один раз. Если задан второй аргумент int!=0, функция выводит строку столько раз, сколько было осуществлено вызовов этой функции к моменту последнего вызова. (Обратите внимание, что количество выводимых строк не равно значению второго аргумента, оно равно числу вызовов функции к моменту последнего вызова)

Как выполнить последнее условие?! Помогите, не въезжаю. В голову пришла только глобальная переменная-счетчик, но это же надо решить, по идее, с помощью методов, изложенных в данной главе!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 22:48     Прата С. С++. Посчитать количество вызовов функции
Посмотрите здесь:

C++ Посчитать количество знаков препинания в тексте и вывести их количество.
Большое количество вызовов констр-ра и дестр-ра C++
Рекурсия, ряд Фибоначчи (определить количество рекурсивных вызовов функции) C++
Вычислите, используя рекурсию, выражение y=x+2*x^2+3*x^4+ ... для некоторого n (n – количество рекурсивных вызовов) C++
Указатели на функции (Прата) - не пойму, как это работает C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 22:56     Прата С. С++. Посчитать количество вызовов функции #2
это значит, что внутри функции должна быть static переменная-счетчик, которая будет увеличиваться при каждом вызове функции и которая будет таким образом хранить информацию о том, сколько раз вызывалась функция до этого
Soldier002
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 22:59  [ТС]     Прата С. С++. Посчитать количество вызовов функции #3
static? В моей книге это упоминается только как "Используйте static ... в старых реализациях для обеспечения совместимости"
Можете мне, пожалуйста, написать краткий пример?
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 23:03     Прата С. С++. Посчитать количество вызовов функции #4
это относилось к глобальным переменным.
там да, "новый" способ ограничить их область видимости одним файлом -- это помещение их в анонимное пространство имен, а старый способ -- пометить их с помощью ключевого слова static.

а если переменная -- локальная для функции, то слово static имеет другой смысл и в этом случае заменить static ничем нельзя. да и не нужно, потому что в этом случае ключевое слово static очень подходит по смыслу.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 23:17     Прата С. С++. Посчитать количество вызовов функции #5
Цитата Сообщение от Soldier002 Посмотреть сообщение
Можете мне, пожалуйста, написать краткий пример?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* old style
эта вункция видна только в данном файле
т.е. если проект состоит из нескольких(многих)
файлов, то каждый из них имеет право на собстевнныую
реализацию static type foo()
*/
static void foo ()
{
    std::cout << "i'm foo\n";
}
 
void bar ()
{
    /*
        эта переменная создастся однажды и будет
        существовать все время жизни программы
    */
    static int cout = 0;
    std::cout << "i'm bar\n";
}
Soldier002
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 23:26  [ТС]     Прата С. С++. Посчитать количество вызовов функции #6
Окей. Спасибо. Я теперь знаю, что такое static переменная
Но можно ли как-то решить мою задачу, не используя глобальные переменные?
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 23:34     Прата С. С++. Посчитать количество вызовов функции #7
Цитата Сообщение от Soldier002 Посмотреть сообщение
Но можно ли как-то решить мою задачу, не используя глобальные переменные?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int bar ()
{
    static int count = 0;
    std::cout << "i'm bar\n";
    ++count;
    return count;
}
 
int main()
{
 
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
 
    return 0;
}
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
08.12.2012, 23:39     Прата С. С++. Посчитать количество вызовов функции #8
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>
using namespace std;
 
void f(char *str, int n=0);
 
int main()
{
    f("String");
    f("String");
    f("String", 10);  // два раза напечатает строку
 
    return 0;
}
 
void f(char *str, int n)
{
    static int k;
    
    if (n != 0)
        for (int i=1; i<=k; i++)
            cout << str << endl;
    else
        cout << str << endl;
        
    k++;
}
Soldier002
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 23:47  [ТС]     Прата С. С++. Посчитать количество вызовов функции #9
Спасибо еще раз!
Но... почему не получается так, что эта static переменная каждый вызов функции заново объявляется?
Как я понимаю, она объявляется в самый первый вызов функции в статической памяти, а потом, так как нельзя объявить уже объявленную переменную, компилятор пропускает строчку "static int n = 0;"?
RayBor
2 / 2 / 0
Регистрация: 07.12.2012
Сообщений: 27
09.12.2012, 00:14     Прата С. С++. Посчитать количество вызовов функции #10
Цитата Сообщение от Soldier002 Посмотреть сообщение
Как я понимаю, она объявляется в самый первый вызов функции в статической памяти, а потом, так как нельзя объявить уже объявленную переменную, компилятор пропускает строчку "static int n = 0;"?
Вы правильно понимаете
Pyclann
Сообщений: n/a
15.01.2013, 00:56     Прата С. С++. Посчитать количество вызовов функции #11
Цитата Сообщение от activnaya Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int bar ()
{
    static int count = 0;
    std::cout << "i'm bar\n";
    ++count;
    return count;
}
 
int main()
{
 
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
    std::cout << bar() << '\n';
 
    return 0;
}
А без статик можно как-нибудь? в книжке статик со следующей главы, значит должно делаться без него...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 11:12     Прата С. С++. Посчитать количество вызовов функции
Еще ссылки по теме:

C++ Посчитать количество всех букв и количество вхождений каждой буквы
Посчитать с помощью функции количество букв и цифр в строке. C++
Избегая глобальных переменных напишите функцию, которая будет возвращать количество своих вызовов C++

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

Или воспользуйтесь поиском по форуму:
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
15.01.2013, 11:12     Прата С. С++. Посчитать количество вызовов функции #12
Цитата Сообщение от Pyclann Посмотреть сообщение
А без статик можно как-нибудь?
Можно через глобальную переменную отслеживать сколько раз была вызвана функция
Yandex
Объявления
15.01.2013, 11:12     Прата С. С++. Посчитать количество вызовов функции
Ответ Создать тему
Опции темы

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