Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как подменить константу переменной-параметром функции?

08.01.2018, 18:52. Показов 692. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.

Есть функция в теле которой используется следующая конструкция:
C++
1
static short arr[num];
компилятор требует чтобы num была бы константой, для этого глобально объявляю
C++
1
const short num = 15;
Можно ли сделать так, чтобы num был одним из параметров функции:
C++
1
float Avg(short val, short num);
(объявление параметра как <const short num> не срабатывает)
На всякий случай вот код:
Кликните здесь для просмотра всего текста
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
35
36
37
38
39
40
41
const short num = 15;
int rnd = 0;
char buf[200];
...
VOID CALLBACK MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    rnd = rand() % (31-20) + 20;  
    sprintf(buf,"Случайное число от 20 до 30 = %d", rnd); 
    SetWindowText(hLabel1, buf);  
 
    float res = Avg(rnd);
    sprintf(buf,"среднее = %2.1f", res);
    SetWindowText(hLabel3, buf);  
}
float Avg(short val, short num)
{
    float res = 0;
    static short count = 0; 
    static short arr[num];  
    static bool b = false;
    arr[count] = val;
    for(int i = 0; i < num; i++) res += arr[i];         
    // ------------------------------------DEBUG
    buf[0] = '\0';
    char str[10];
    for(int i = 0; i < num; i++)
    {
        sprintf(str,"%d, ",arr[i]);
        strcat(buf, str);
    }   
    SetWindowText(hLabel2, buf);
    // ------------------------------------DEBUG 
    count++;
    if (count > (num-1)) 
        {           
            count = 0;          
            b = true; // Мы имеем настоящее среднее значение (без нулей)
        }
    if (b) return res/(float)num;   
    return 0; // Пока не получено настоящее среднее значение - выводим ноль
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2018, 18:52
Ответы с готовыми решениями:

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

Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу?
То есть вообще непонятно ничё, вот, смотрите, этот пример не компилится: #include &lt;stdio.h&gt; class fee { public: //Не...

Как константу у диаграммы с делать переменной
нужно сделать чтобы Const A стала переменной через Random Program Diagrama; Uses crt, GraphAbc; Const A: array of integer = (10, 60,...

4
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.01.2018, 18:57
Нет.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.01.2018, 19:08  [ТС]
может кто поделится соображениями, как по-другому усреднять считываемый в цикле таймера параметр. Идеальный вариант: первый параметр (short) - считанный параметр, второй - количество усреднений (тоже short), возвращаемый результат float.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.01.2018, 19:15
Укажи конкретный размер массива с запасом. Или используй контейнер для накопления чисел.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.01.2018, 19:24
Ну можно сделать шаблон функции со static short'ом , а в твоей float Avg(short val, short num) - выбор среди массива указателей на инстансы шаблонных функций (который нужно будет где-то предварительно инициализировать). Тогда накопление будет производиться для всех значений num независимо в разные массивы, инициализированные для всех инстансов.

Если накопление нужно(можно) производить в один и тот же массив, то объявить
C++
1
static short arr[max_num];
и в функции производить сравнение num и max_num (с исключением / ещё чем - то, наподобие присвоения num = max_num, когда num > max_num)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2018, 19:24
Помогаю со студенческими работами здесь

Добавление переменной с параметром к функции
К формуле y=(sinx+2)/(3+cosx)*sum_{0}^{20}(a*{x}^{n})*z , где а=2n, если x&lt;=0.5 и a=n/2, если x&gt;0.5 z с параметром z=0.2(0.3)10 x с...

Как использовать константу вместо переменной в SQL запросе?
IF EXISTS(select * from tempdb..sysobjects where id = object_id('tempdb..#select1')) DROP TABLE #select1; SET TRANSACTION...

Как получить имя переменной, или преобразовать ее в строковую константу?
С#.Всем привет. Как получить имя переменной, или преобразовать ее в строковую константу

Как подменить определение функции после первого вызова без использования if и функторов
в разных модулях есть 2 синглетона, которым нужны ссылки друг на друга, один из них есстественно не сможет получить ссылку в момент...

Замена переменной на константу
Всем доброго времени суток, мне нужно сделать пару заданий, первое преобразовать выражение типа &quot;Expr&quot; в строку - я его сделал...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru