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

Перегрузка функции int double - C++

Восстановить пароль Регистрация
 
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
20.11.2014, 19:21     Перегрузка функции int double #1
Напишите функцию max с переменным количеством параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров определяется с помощью первого параметра функции. Проблема: не правильно выводит минимальное значение.

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
50
51
#pragma hdrstop
#pragma argsused
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include <conio.h>
#pragma argsused
 
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    double minimum(char z, int k, ...);
 
    cout << "\nminimum('1',4.2,5.2,7.3) = " <<
    minimum ('1',4.2,5.2,7.3);
 
    cout << "\nminimum('i',10,45,345,25,256,345,745) = " <<
    minimum ('i',10,45,345,25,256,345,745);
 
    getch();
}
 
double minimum(char z, int k, ...)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
if (z== 'i')
{
    int* pi = &k + 1;
    int min = *pi;
 
    for(; k; k--, pi++)
    min = min > *pi ? *pi : min;
    return (int)min;
}
 
if (z=='1')
{
    double *p1 = (double*)(&k+1);
    double  min = *p1;
    for (; k; k--, p1++)
    min = min > *p1 ?  *p1 : min;
    return (double)min;
}
getch();
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
20.11.2014, 22:14     Перегрузка функции int double #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double minimum(int k, ...)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
if (k == 1) return k < *(&k + 1) ? k : *(&k + 1);
 
if (k == 2)
{
    double *n1 = (double*)(&k + 1);
    double *n2 = n1 + 1;
    return *n1 < *n2 ? *n1 : *n2;
}
getch();
}
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
20.11.2014, 23:33  [ТС]     Перегрузка функции int double #3
Все равно для Double не правильно выводит минимальный элемент.
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
20.11.2014, 23:58     Перегрузка функции int double #4
А, я забыл про цикл. Надо добавить.
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 00:32  [ТС]     Перегрузка функции int double #5
Что-то опять ничего.
true_bugmaker
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
21.11.2014, 02:25     Перегрузка функции int double #6
а зачем первый аргумент в апострофах?

Добавлено через 56 минут
нужно как-то так

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
#include <stdarg.h>
#include <iostream>
 
 
int minimum (char type, int n, ...) {
        va_list ap;
        double md, ad;
        int mi, ai;
 
        va_start (ap, n);
 
 
        if ('i' == type) {
                mi = va_arg (ap, int);
                while (--n) {
                        ai = va_arg (ap, int);
                        if (mi > ai) mi = ai;
                }
        } else {
                md = va_arg (ap, double);
                while (--n) {
                        ad = va_arg (ap, double);
                        if (md > ad) md = ad;
                }
        }
        va_end (ap);
        return ('i' == type) ? mi : md;
}
 
int main (int argc, char * argv []) {
        std::cout << "minimum('i') = " << minimum ('i', 10, 10,45,345,25,256,345,745,100,5,7) << std::endl;
        std::cout << "minimum('d') = " << minimum ('d', 10, 10.,45.,345.,25.,256.,345.,745.,100.,5.,7.) << std::endl;
 
        return 0;
}
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 08:29  [ТС]     Перегрузка функции int double #7
Спасибо, все отлично. Но как сделать, чтобы выводило все число, а не только целую часть??
true_bugmaker
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
21.11.2014, 15:26     Перегрузка функции int double #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
исправить так, это мой просчёт
C++
1
double minimum (char type, int n, ...) {
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 15:58     Перегрузка функции int double
Еще ссылки по теме:

C++ double в int
C++ int* to double*
C++ LONG VS DOUBLE / INT VS FLOAT
C++ Shot int b long double
Вывести элементы массива, находящихся между его min и max. Перегрузка функций для int и double C++

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

Или воспользуйтесь поиском по форуму:
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 15:58  [ТС]     Перегрузка функции int double #9
Спасибо большое, все работает как надо.
Yandex
Объявления
21.11.2014, 15:58     Перегрузка функции int double
Ответ Создать тему
Опции темы

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