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

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННО БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ

 ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Учебный Центр Информационных Технологий «Информатика»

Лабораторная работа №4

«Функции с переменным количеством параметров. Функция, как тип данных» по дисциплине «Информатика и программирование 2 часть»

Направление подготовки: 230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»

Выполнил слушатель:

Вариант: №3

Дата сдачи: 11.06.2016

Преподаватель:

Новосибирск, 2016г.


1.  Цель

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

2.  Вариант задания

Разработать функцию с переменным количеством параметров. Для извлечения параметров из списка использовать технологию программирования областей памяти переменного формата.

Вариант №3. Последовательность переменных различных типов. Перед каждой переменной находится целая переменная - идентификатор типа: 1-целое, 2-длинное целое, 3-вещественнное, 0-конец последовательности. Функция возвращает сумму значений параметров.

3.  Анализ задачи и алгоритм

1) Анализ задачи

Входные данные: переменное количество данных типов int, long и double

Результат: сумма всех данных типов int, long и double

Метод решения: с помощью макропараметров получим все переданные значения различных типов данных и просуммируем их.

2) Алгоритм решения задачи

В параметрах функции сначала будем передавать идентификатор типа данных, потом само значение, и так переменное число раз, после переданных данных ставится 0, который говорит что больше данных нет.

При реализации самой функции  будем использовать макропараметры (библиотека stdarg.h), которые позволяют прочитать из области памяти необходимые значения данных, необходимо указать только тип этих данных.

В реализации функции будет доступен только один параметр – идентификатор типа данных, с помощью его считываем само значение, потом считываем следующий идентификатор и так до тех пор, пока идентификатор не будет равен 0, что говорит, что больше параметров нет.


4.  Описание программной реализации

1)  Используемые переменные

va_list marker – маркер на макропараметр;

double result – переменная, в которую записывается результат

2)  Используемые функции (процедуры)

double Sum(int id, ...)

Аргументыпроцедуры:

int id – идентификатор типа для первого переданного значения;

… – указывает на переменное количество параметров

Принцип работы: с помощью макропараметров получаем все переданные значения данных и суммируем их

Возвращаемое значение: сумма всех переданных данных различных типов таких, как int, long и double.

5.  Пример работы программы

Для демонстрации работы функции с переменным количество параметров будем указывать значения этих параметров в main()

Тест №1

printf("5 + 10L + 4.90 = %.2lf\n", Sum(1, 5, 2, 10L, 3, 4.9, 0));

В данном случае в функцию передали значение 5 типа int, значение 10 типа long, значение 4,9 типа double и функция корректно подсчитала сумму.

Тест №2

printf("5.3 + 7L + 5.5 + 3 = %.2lf\n", Sum(3, 5.3, 2, 7L, 3, 5.5, 1, 3, 0));

В данном случае в функцию передали значение 5,3 типа double, значение 7 типа long, значение 5,5 типа double, значение 3 типа int и функция корректно подсчитала сумму.

Тест №3

printf("2L + 4L + 7.7 = %.2lf\n", Sum(2, 2L, 2, 4L, 3, 7.7, 0));

В данном случае в функцию передали значение 2 типа long, значение 4 типа long, значение 7,7 типа double и функция корректно подсчитала сумму.


6.  Выводы

В ходе выполнения лабораторной работы были рассмотрены функции с переменным количеством параметров и реализация таких функций с помощью макропараметров (библиотека stdarg.h).

В реализованной функции подсчитывается сумма всех переданных данных типов int, long, double. Первым параметров передается идентификатор типа, потом само значение и так переменное число раз, последним параметром передается идентификатор со значением 0, что говорит о том, что больше данных нет.

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


Приложение 1. Исходный код

#include <stdio.h>

#include <stdarg.h>

#include <locale.h>

double Sum(int id, ...)

{

va_list marker;

double result = 0.0;

va_start(marker, id);

while(id)

{

switch(id)

{

case 1:

result += va_arg(marker, int);

break;

case 2:

result += va_arg(marker, long);

break;

case 3:

result += va_arg(marker, double);

break;

}

id = va_arg(marker, int);

}

va_end(marker);

return result;

}

void main()

{

setlocale(LC_ALL, "Russian");

printf("5 + 10L + 4.90 = %.2lf\n", Sum(1, 5, 2, 10L, 3, 4.9, 0));

printf("5.3 + 7L + 5.5 + 3 = %.2lf\n", Sum(3, 5.3, 2, 7L, 3, 5.5, 1, 3, 0));

printf("2L + 4L + 7.7 = %.2lf\n", Sum(2, 2L, 2, 4L, 3, 7.7, 0));

getchar();

}

Похожие материалы

Информация о работе