Variadic functions are functions that take a variable number of arguments. In C programming, a variadic function will contribute to the flexibility of the program that you are developing.
The declaration of a variadic function starts with the declaration of at least one named variable and uses an ellipsis as the last parameter, e.g.
int printf(const char* format, ...);
In this problem, you will implement three variadic functions named sum(), min() and max() to calculate sums, minima, maxima of a variable number of arguments. The first argument passed to the variadic function is the count of the number of arguments, which is followed by the arguments themselves.
Example:
Input: 1
Output:
Sending following three elements: 15718 14246 21420 Your output is: Elements sum is 51384 Minimum element is 14246 Maximum element is 21420 Correct Answer Sending following five elements: 15718 14246 21420 23861 28151 Your output is: Elements sum is 103396 Minimum element is 14246 Maximum element is 28151 Correct Answer Sending following ten elements: 15718 14246 21420 23861 28151 8461 20332 18010 4253 17693 Your output is: Elements sum is 172145 Minimum element is 4253 Maximum element is 28151 Correct Answer
Approach
C
#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define MIN_ELEMENT 1#define MAX_ELEMENT 1000000int sum(int count, ...){int sum = 0;va_list values;va_start(values, count);for (int i = 0; i < count; i++){sum += va_arg(values, int);}va_end(values);return sum;}int min(int count, ...){int min = MAX_ELEMENT, test;va_list values;va_start(values, count);for (int i = 0; i < count; i++){test = va_arg(values, int);if (min > test){min = test;}}va_end(values);return min;}int max(int count, ...){int max = MIN_ELEMENT, test;va_list values;va_start(values, count);for (int i = 0; i < count; i++){test = va_arg(values, int);if (max < test){max = test;}}va_end(values);return max;}int test_implementations_by_sending_three_elements(){srand(time(NULL));int elements[3];elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;fprintf(stderr, "Sending following three elements:\n");for (int i = 0; i < 3; i++){fprintf(stderr, "%d\n", elements[i]);}int elements_sum = sum(3, elements[0], elements[1], elements[2]);int minimum_element = min(3, elements[0], elements[1], elements[2]);int maximum_element = max(3, elements[0], elements[1], elements[2]);fprintf(stderr, "Your output is:\n");fprintf(stderr, "Elements sum is %d\n", elements_sum);fprintf(stderr, "Minimum element is %d\n", minimum_element);fprintf(stderr, "Maximum element is %d\n\n", maximum_element);int expected_elements_sum = 0;for (int i = 0; i < 3; i++){if (elements[i] < minimum_element){return 0;}if (elements[i] > maximum_element){return 0;}expected_elements_sum += elements[i];}return elements_sum == expected_elements_sum;}int test_implementations_by_sending_five_elements(){srand(time(NULL));int elements[5];elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[3] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[4] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;fprintf(stderr, "Sending following five elements:\n");for (int i = 0; i < 5; i++){fprintf(stderr, "%d\n", elements[i]);}int elements_sum = sum(5, elements[0], elements[1], elements[2], elements[3], elements[4]);int minimum_element = min(5, elements[0], elements[1], elements[2], elements[3], elements[4]);int maximum_element = max(5, elements[0], elements[1], elements[2], elements[3], elements[4]);fprintf(stderr, "Your output is:\n");fprintf(stderr, "Elements sum is %d\n", elements_sum);fprintf(stderr, "Minimum element is %d\n", minimum_element);fprintf(stderr, "Maximum element is %d\n\n", maximum_element);int expected_elements_sum = 0;for (int i = 0; i < 5; i++){if (elements[i] < minimum_element){return 0;}if (elements[i] > maximum_element){return 0;}expected_elements_sum += elements[i];}return elements_sum == expected_elements_sum;}int test_implementations_by_sending_ten_elements(){srand(time(NULL));int elements[10];elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[3] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[4] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[5] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[6] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[7] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[8] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;elements[9] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;fprintf(stderr, "Sending following ten elements:\n");for (int i = 0; i < 10; i++){fprintf(stderr, "%d\n", elements[i]);}int elements_sum = sum(10, elements[0], elements[1], elements[2], elements[3], elements[4],elements[5], elements[6], elements[7], elements[8], elements[9]);int minimum_element = min(10, elements[0], elements[1], elements[2], elements[3], elements[4],elements[5], elements[6], elements[7], elements[8], elements[9]);int maximum_element = max(10, elements[0], elements[1], elements[2], elements[3], elements[4],elements[5], elements[6], elements[7], elements[8], elements[9]);fprintf(stderr, "Your output is:\n");fprintf(stderr, "Elements sum is %d\n", elements_sum);fprintf(stderr, "Minimum element is %d\n", minimum_element);fprintf(stderr, "Maximum element is %d\n\n", maximum_element);int expected_elements_sum = 0;for (int i = 0; i < 10; i++){if (elements[i] < minimum_element){return 0;}if (elements[i] > maximum_element){return 0;}expected_elements_sum += elements[i];}return elements_sum == expected_elements_sum;}int main(){int number_of_test_cases;scanf("%d", &number_of_test_cases);while (number_of_test_cases--){if (test_implementations_by_sending_three_elements()){printf("Correct Answer\n");}else{printf("Wrong Answer\n");}if (test_implementations_by_sending_five_elements()){printf("Correct Answer\n");}else{printf("Wrong Answer\n");}if (test_implementations_by_sending_ten_elements()){printf("Correct Answer\n");}else{printf("Wrong Answer\n");}}return 0;}
No comments:
Post a Comment