1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
1

Функции с переменным числом параметров

10.01.2011, 00:59. Показов 1346. Ответов 7
Метки нет (Все метки)

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
#include <iostream.h>
#include <conio.h>
 
int max(int k,...)
{
int *p=&k;
int maxi;
 
 
    for(;k!=0;k--)
    {
        if (maxi<(*p))
        {
            maxi=(*p);
        }
        p++;
    }
return maxi;
}
 
void main()
{
clrscr();
cout << "\nmax (8, 3, 5) = " << max (8, 3, 5);
cout << "\nmax (2, 9, 6) = "<< max (2, 9, 6);
cout << "\nmax (7, 4, 10, 11) = "<< max (7, 4, 10, 11);
getch();
}
подскажите, пожалуйста, в чем проблема ?

результат программы
max (8, 3, 5) = 335
max (2, 9, 6) = 9
max (7, 4, 10, 11) = 335
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2011, 00:59
Ответы с готовыми решениями:

Функции с переменным числом параметров
Прошу помочь знатоков С++ в решении задачи, т.к. только начал изучать данный язык. Решить...

Функции с переменным числом параметров
Функция должна принимать переменное количество аргументов, последним из которых является 0, и...

Функции с переменным числом параметров
Написать функцию prost с переменным числом параметров, которая находит все простые числа из...

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

7
Эксперт С++
3211 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 01:07 2
пример:
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
/* va_start example */
#include <stdio.h>
#include <stdarg.h>
 
void PrintFloats ( int amount, ...)
{
  int i;
  double val;
  printf ("Floats passed: ");
  va_list vl;
  va_start(vl,amount);
  for (i=0;i<amount;i++)
  {
    val=va_arg(vl,double);
    printf ("\t%.2f",val);
  }
  va_end(vl);
  printf ("\n");
}
 
int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}
1
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
10.01.2011, 01:35  [ТС] 3
спасибо, конечно
но пока не могу понять чем этот пример может помочь

мне надо сделать с помощью указателей и ссылок , я так понимаю в них проблема что выводит такой результат , а пример сделан без их использования (
0
Эксперт С++
3211 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 01:48 4
Цитата Сообщение от LAans Посмотреть сообщение
не могу понять чем этот пример может помочь
сочувствую

то, что вы пишите - это Си вариант. а в Си, как известно, единственный способ получить доступ к списку аргументов - использовать va_start, va_list, va_arg, va_end.

так что курите, батенька.

Добавлено через 1 минуту
вам случаем не массив в функцию передавать нужно?
0
Диссидент
Эксперт C
27208 / 16962 / 3748
Регистрация: 24.12.2010
Сообщений: 38,147
10.01.2011, 02:57 5
LAans, в твоем коде нет начального присвоения maxi
1
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.01.2011, 03:22 6
niXman, Правда единственный? Серьезно?
Ммм... Но честно говоря не знаю как на это будет реагировать Си. На codepad.org реагирует странно


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void foo(int t,...)
{
    int* p=&t;
    while(*(p) != 0)
        printf("%d\n", *(p++));
}
 
int main(void)
{
    foo(1,2,3,4,5,6,7,0);
    return 0;
}
2
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
10.01.2011, 03:25 7
niXman, серьёзно, батенька, Вы что то напутали)
Вот мой вариант...сто лет в C++ (а тем более в его подмножестве C) не практиковался)))

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
#include <iostream>
using namespace::std;
 
int max(int k, ...) {   
    int amount = k; /* первый аргумент нашей функции - количество
                       передаваемых в неё аргументов */
    
    // проверка количества аргументов                  
    if(k < 1) {
      cout << "Usage: max( number_of_arguments, arg1, arg2, ... [argN] )" << endl;
      return 0;
    }
                       
    int *p = &k;
    p++; // указываем на первый аргумент, после аргумента - количества
    
    int maxi = *p; /* по умалчанию присваиваем максимальное
                      значение - первый из всех аргументов */
        
    for(int i = 0; i < amount; i++) {
      if(maxi < *p) {
        maxi = *p;
      }
      
      p++;
    }
    
    return maxi;
}
 
int main() {
  cout << "max (8, 3, 5) = " << max(3, 8, 3, 5) << endl;
  cout << "max (2, 9, 6) = "<< max(0) << endl;
  cout << "max (7, 4, 10, 11) = "<< max(4, 7, 4, 10, 11) << endl;
  
  return 0;
}
2
Эксперт С++
3211 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 12:14 8
ForEveR, G-Cat, в данном случае вы правы. я всего дважды писал реализацию функции с переменным числом аргументов, и оба раза, как сказано в документации, с использованием va_start, va_list, va_arg, va_end.

но остается не ясным вопрос о переносимости такого кода.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2011, 12:14
Помогаю со студенческими работами здесь

Функции с переменным числом параметров
помогите доработать пожалуйсто Написать функцию kvadr с переменным числом параметров, ...

Функции с переменным числом параметров
функции с переменным числом параметров в качестве параметра форматная строка,как задать это дело в...

Функции с переменным числом параметров
Подскажите как работают функции с переменным числом параметров, как их составлять. Почитал немного...

Функции с переменным числом параметров
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по...

Функции с переменным числом параметров
Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int...

Функции с переменным числом параметров
Добрый день, уважаемые знатоки С++! Подскажите пожалуйста, что не правильно в моем коде? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru