Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
1

Разработать функцию с переменным количеством параметров

21.01.2019, 00:04. Показов 1005. Ответов 11
Метки нет (Все метки)

Функция должна вернуть наименьшее из введенных значений.
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
42
43
44
45
46
47
48
49
#include <iostream>
#include <cstdlib> // для system
#include <cstdarg>
 
using namespace std;
 
long int F_1(long int n,...)
{
    
 
     long int * p = reinterpret_cast<long int *>(&n+1);
    long int min = 1000;
    while ( n-- ) {
        cout<<*p;
        if(min>*p)
        min = *p;
        ++*p;
    }
    return min;
 
}
 
int main() 
{ 
    setlocale(LC_ALL, "Russian");
    int arr[10]={};
    int choice=0,i;
    cout << "Введите числа(неотрицательны,чтобы прекратить ввод -1):" << endl;
    
     
    for(i=0;i<10;i++)
    {
        cin>>choice;
        if(choice==-1)
        {
            break;
        }
        else
        {
            arr[i]=choice;
        }
    }
    int x0=arr[0],x1=arr[1],x2=arr[2],x3=arr[3],x4=arr[4],x5=arr[5],x6=arr[6],x7=arr[7],x8=arr[8],x9=arr[9];
 
    int MIN=F_1(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);
    cout<<"Минимальное число введенно вами: "<<MIN<<endl;
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0; 
}
Добавлено через 32 секунды
Мне нужин результат так что не обрашайте внимания на костыли

Добавлено через 1 минуту
брал функцию с тем на форуме тут пытался модифицыровать под свою задачю
Не вышло
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2019, 00:04
Ответы с готовыми решениями:

Функции по переменным количеством параметров
нужна помощь по работе с такой функцией .. Искал в книге Страуструпа, не понял пример, помогите,...

Функция с переменным количеством параметров
Доброго времени суток! Я озадачился таким вопросом - как производится компиляция функций с...

Шаблон с переменным количеством параметров
У меня компилятор Visual Studio 2012, но не работает следующий код: #include &lt;iostream&gt;...

Функция с переменным количеством параметров
Здравствуйте, возникла вот такая проблема: создаю функцию с переменным кол-ом параметров. Пример...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
11
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.01.2019, 01:17 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T, typename... Args>
int min_func(T val, Args... args)
{
    if constexpr(sizeof...(args) == 1)
        return std::min(val, args...);
    else
        return std::min(val, min_func(args...));
}
 
. . . 
int MIN=min_func(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);
. . .
1
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 01:37  [ТС] 3
krolligator, неполучается запустить
0
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 01:38  [ТС] 4
вот
0
Миниатюры
Разработать функцию с переменным количеством параметров  
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.01.2019, 01:45 5
amoteo, ожидаемо, если не включена нужная версия стандарта, в которой поддерживаются variadic и constexpr.
1
Мозгоправ
1685 / 993 / 454
Регистрация: 01.10.2018
Сообщений: 2,081
Записей в блоге: 2
21.01.2019, 01:56 6
Лучший ответ Сообщение было отмечено amoteo как решение

Решение

Ваш поправленный вариант:
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
42
43
44
45
#include <iostream>
#include <cstdlib> // для system
 
using namespace std;
 
int F_1(int n, ...) {
 
 
    int *p = reinterpret_cast<int *>(&n + 1);
    int min = *p;
    while (n--) {
        cout << *p << ' ';
        if (min > *p)
            min = *p;
        ++p;
    }
    return min;
 
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int arr[10] = {};
    int choice = 0, i;
    int counter = 0;
    cout << "Введите числа(неотрицательны,чтобы прекратить ввод -1):" << endl;
 
 
    for (i = 0; i < 10; i++) {
        cin >> choice;
        if (choice == -1) {
            break;
        }
        else {
            arr[i] = choice;
            ++counter;
        }
    }
    int x0 = arr[0], x1 = arr[1], x2 = arr[2], x3 = arr[3], x4 = arr[4], x5 = arr[5], x6 = arr[6], x7 = arr[7], x8 = arr[8], x9 = arr[9];
 
    int MIN = F_1(counter, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9);
    cout << "\nМинимальное число введенно вами: " << MIN << endl;
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0;
}
Применять long int для счётчика аргументов функции не имеет смысла. Вам просто не хватит стека для такого количества параметров. А вообще корректнее для первого параметра использовать size_t.

И типы фактических параметров должны совпадать с типами, которые используются внутри функции с переменным количеством параметров. Вам просто повезло, что int и long int в msvc совпадают по размеру.

А вообще вариант варварский.

Вот более цивилизованный вариант функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdarg>
// ...
 
int F_2(size_t n, ...) {
    va_list args;
    va_start(args, n);
    int min = INT_MAX;
    int num;
    for (size_t i = 0; i < n; ++i) {
        num = va_arg(args, int);
        cout << num << ' ';
        if (min > num)
            min = num;
    }
    va_end(args);
    return min;
}
1
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 01:59  [ТС] 7
krolligator, а как включитьL0M, насчет long int указанно в заданию что сказад препод то и делаем
0
Мозгоправ
1685 / 993 / 454
Регистрация: 01.10.2018
Сообщений: 2,081
Записей в блоге: 2
21.01.2019, 02:10 8
krolligator, ну тогда уж всю эту байду можно сократить до
C++
1
int MIN = std::min_element(arr, arr + 10);

Правда проблема с "Разработать функцию"

Добавлено через 8 минут
Цитата Сообщение от amoteo Посмотреть сообщение
L0M, насчет long int указанно в заданию что сказад препод то и делаем

Не, можно оставить и long int для первого параметра. В неэкстремальных случаях оно не помешает.

А вот типы в переменном списке параметров должны чётко совпадать между фактически переданными и ожидаемыми функцией. У вас и массив, и безобразная куча переменных, которые фактически передаются в функцию, имеют тип int. Значит и в функции для них должен использоваться тип int.
1
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 02:11  [ТС] 9
L0M, ваш код хороший но не коркно при разных вводах работает
пару моих костылей(отдельно еше шлю в функцию кол-во элеметов) но всеравно есть бага если первый элемент самый маленький он его не распазнает (видимо нет сравнения)
0
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 02:14  [ТС] 10
L0M, Я честно пол тора часа пытался сам написать и гуглил и тыкал
Задания более высокого уровня я сделал за 20 минут а тут типа самое простое и портит нервы
0
Миниатюры
Разработать функцию с переменным количеством параметров  
-2 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 38
21.01.2019, 02:17  [ТС] 11
Ну мне впринцыпи тока сдать работает то главное правильные данные ввести))всем спс что выручили
0
Мозгоправ
1685 / 993 / 454
Регистрация: 01.10.2018
Сообщений: 2,081
Записей в блоге: 2
21.01.2019, 02:43 12
Цитата Сообщение от amoteo Посмотреть сообщение
L0M, ваш код хороший но не коркно при разных вводах работает
пару моих костылей(отдельно еше шлю в функцию кол-во элеметов) но всеравно есть бага если первый элемент самый маленький он его не распазнает (видимо нет сравнения)
В "вашем поправленном варианте" кода посмотрите функцию main. Я там тоже кое-что поправил (см. переменную counter).

У меня вроде всё работает правильно. Покажите набор данных, на которых мой вариант (любой) работает некорректно. Будем смотреть.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2019, 02:43

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Массив в функции с переменным количеством параметров
Добрый день. Не могу разобраться, как в функции с переменным количеством параметров сделать...

Функция суммы с переменным количеством параметров
На просторах форума нашёл код. Стало интересно посмотреть что выводят его отдельные части(отдельно...

Функция с переменным количеством параметров-оъектов
Нашел на форуме пример функции с переменным количеством int, подскажите как переписать ее для...

Функции с переменным количеством параметров в языке C ++
Реализовать функцию конкатенации (сцепления) произвольного количества C-строк с динамическим...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.