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

создание ф-ии с плавающим кол-вом аргументов неизвестного типа. (С / С++) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка односвязного списка http://www.cyberforum.ru/cpp-beginners/thread539320.html
Помогите пишу курсач сделал все ф-ции кроме сортировки в голову не приходит как что не пробовал без результатно( прошу помочь( уже как неделю сижу в тупике( и не могу уже оформлять курсовую из-за этой ф-ции( Задание : Сортировка книг данного автора по полю год издания вот код : #include "stdafx.h" #include <string> #include <iostream> #include <fstream> #include <conio.h>
C++ Динамический класс Ребята, помогите с задачей, реализовать динамический класс-очередь. с методами: add - dobavlenie v nachalo pop - ydalenie elementa print - vuvod isemty - proverka na pystoty num -koli4estvo http://www.cyberforum.ru/cpp-beginners/thread539312.html
Стек и работа с ним C++
Добрый вечер! Мне дали задания: 1. Написать функцию для удаления всех элементов с четными номерами из односвязного списка 2. Написать функцию для добавления элемента в «середину» двусвязного списка 3. Написать функцию для добавления элемента в стек 4. Написать функцию для вывода информационных полей всех элементов двусвязного списка Номер 3 Я написала функцию, посмотрите пожалуйста -...
Как удалить файл или изменить его тип C++
Всем привет! Подскажите мне пожалуйста как удалить в с++; То есть допустим пользователь указал путь и расширение файла а программа удаляет этот файл или изменяет расширение на любое другое ну допустим *.doc на *.mytype?
C++ Помогите найти ошибку: копирование массивов http://www.cyberforum.ru/cpp-beginners/thread539274.html
Привет отзывчивым, у меня проблема, не пойму почему не копируется массив... смотрите в 49 строчку #include <iostream> using namespace std; void main() { int n,m,x=0,y=0,i,j; cout<<"matrix"<<endl; cin>>n>>m;
C++ Олимпиада по программированию 28 апреля государственный тур олимпиада по программированию (в Армении), и я готовлюсь к олимпиаде. Прошу вас, если несложно дайте задач порешать. И если можно дать ссылки на описания алгоритмов (ну например Дейкстры, быстрое преоброзавание Фурье, и т.д.) и задачи на эти тематики. подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.04.2012, 13:28     создание ф-ии с плавающим кол-вом аргументов неизвестного типа. (С / С++)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
 
/*
 * Определяет макросы, необходимые для перебора необязательных аргументов
 */
#include <stdarg.h>
 
enum ArgType
{
    INT = 1,
    DOUBLE = 2,
    END_OF_LIST = 0
};
 
/* Функция, принимающая неопределённое количество аргументов. Здесь для
 * идентификации аргументов предназначен обязательный массив с их типами, в
 * printf для этого используется форматная строка (в которой с каждым типом
 * сопоставлен спецификатор типа %type)
 */
double average(enum ArgType *args, ...)
{
    double sum = 0.0;
    int count = 0;
    
    /*
     * Указатель на очередной необязательный параметр
     */
    va_list ap;
    
    /*
     * Инициализируем указатель. Поскольку нам известен тип (а значит, и размер)
     * последнего обязательного параметра, то указательн а первый необязательный
     * параметр инициализируется адресом &args + 1
     */
    va_start(ap, args);
    
    /*
     * Перебираем необязательные параметры с учётом форматного массива
     */
    while (args[count] != END_OF_LIST)
    {
        /*
         * Выбираем тип параметра
         */
        switch (args[count])
        {
        case INT:
            /*
             * Макрос va_arg просто интерпретирует sizeof(int) байт, начиная с
             * адреса ap, как значение типа int (в общем случае того типа,
             * который передан макросу вторым аргументом), а также смещает
             * указатель ap на размер этого типа
             */
            sum += (double)va_arg(ap, int);
            
            break;
            
        case DOUBLE:
            sum += va_arg(ap, double);
            
            break;
            
        default:
            va_end(ap);
    
            return sum / count;
            
            break;
        }
        
        ++count;
    }
    
    /*
     * Необходимо завершить перебор необязательных параметров
     */
    va_end(ap);
    
    return sum / count;
}
 
int main(void)
{
    /*
     * В printf вместо args используется форматная строка, в которой вперемешку
     * с обычными символами идут специальные спецификаторы, по одному на каждый
     * стандартный тип
     */
    enum ArgType args[] = {INT, DOUBLE, INT, INT, DOUBLE, END_OF_LIST};
    
    printf("%lf\n", average(args, 1, 2.5, 3, 4, 5.5));
    
    return 0;
}
 
Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru