Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/79: Рейтинг темы: голосов - 79, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5

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

08.12.2012, 22:48. Показов 15879. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Закончил раздел про встроенные функции, шаблоны, полиморфизм и ссылочные переменные.
Там в конце такое задание:
Напиши функцию. Один аргумент - адрес строки, выводит строку один раз. Если задан второй аргумент int!=0, функция выводит строку столько раз, сколько было осуществлено вызовов этой функции к моменту последнего вызова. (Обратите внимание, что количество выводимых строк не равно значению второго аргумента, оно равно числу вызовов функции к моменту последнего вызова)

Как выполнить последнее условие?! Помогите, не въезжаю. В голову пришла только глобальная переменная-счетчик, но это же надо решить, по идее, с помощью методов, изложенных в данной главе!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2012, 22:48
Ответы с готовыми решениями:

Посчитать количество рекурсивных вызовов
В коде программы определена следующая функция: int foo(int n) { if (n <= 0) return 1; return foo((n * 2) / 3) +...

Количество вызовов функции в цикле
Предположим цикл ниже выполняется 10 раз. Функция size() также будет 10 раз вызвана? for(int i = 0; v.size(); i++){}

Количество вызовов функции Аккермана
Необходимо реализовать подсчет количества итерационных вызовов функции Аккермана в Прологе. Функция Аккермана: ak(0,N,Val):-...

11
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 22:56
это значит, что внутри функции должна быть static переменная-счетчик, которая будет увеличиваться при каждом вызове функции и которая будет таким образом хранить информацию о том, сколько раз вызывалась функция до этого
1
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 22:59  [ТС]
static? В моей книге это упоминается только как "Используйте static ... в старых реализациях для обеспечения совместимости"
Можете мне, пожалуйста, написать краткий пример?
0
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 23:03
это относилось к глобальным переменным.
там да, "новый" способ ограничить их область видимости одним файлом -- это помещение их в анонимное пространство имен, а старый способ -- пометить их с помощью ключевого слова static.

а если переменная -- локальная для функции, то слово static имеет другой смысл и в этом случае заменить static ничем нельзя. да и не нужно, потому что в этом случае ключевое слово static очень подходит по смыслу.
0
 Аватар для activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 23:17
Цитата Сообщение от 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";
}
1
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 23:26  [ТС]
Окей. Спасибо. Я теперь знаю, что такое static переменная
Но можно ли как-то решить мою задачу, не используя глобальные переменные?
0
 Аватар для activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 23:34
Цитата Сообщение от 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;
}
1
 Аватар для v.a.l.i.d
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
08.12.2012, 23:39
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++;
}
1
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 5
08.12.2012, 23:47  [ТС]
Спасибо еще раз!
Но... почему не получается так, что эта static переменная каждый вызов функции заново объявляется?
Как я понимаю, она объявляется в самый первый вызов функции в статической памяти, а потом, так как нельзя объявить уже объявленную переменную, компилятор пропускает строчку "static int n = 0;"?
0
3 / 3 / 2
Регистрация: 07.12.2012
Сообщений: 30
09.12.2012, 00:14
Цитата Сообщение от Soldier002 Посмотреть сообщение
Как я понимаю, она объявляется в самый первый вызов функции в статической памяти, а потом, так как нельзя объявить уже объявленную переменную, компилятор пропускает строчку "static int n = 0;"?
Вы правильно понимаете
0
Pyclann
15.01.2013, 00:56
Цитата Сообщение от 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;
}
А без статик можно как-нибудь? в книжке статик со следующей главы, значит должно делаться без него...
 Аватар для v.a.l.i.d
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
15.01.2013, 11:12
Цитата Сообщение от Pyclann Посмотреть сообщение
А без статик можно как-нибудь?
Можно через глобальную переменную отслеживать сколько раз была вызвана функция
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2013, 11:12
Помогаю со студенческими работами здесь

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

Как уменьшить количество вызовов функции?
Как в цикле while уменьшить количество вызовов функции Coordinates, чтоб в нем было 2 вызова всего? void SortMatrix(int ** a, int n) { ...

непонятно считает количество вызовов рекурсивной функции
Помогите пожалуйста. не могу понять как он выводит переменную n, а именно почему во второй строчке ноль? если отслеживать пошагово, то с...

Рекурсия, ряд Фибоначчи (определить количество рекурсивных вызовов функции)
Здравствуйте, уважаемые форумчане ! Подскажите, пожалуйста, как определить количество рекурсивных вызовов функции ? Вот, собственно,...

Как посчитать количесвто вызовов compare(.)?
Допустим, есть что-то такое: ArrayList&lt;Student&gt; ar = new ArrayList&lt;Student&gt;(); Student st1 = new Student(&quot;Petrov&quot;,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru