0% found this document useful (0 votes)
46 views

Variadic Functions in C

The document defines variadic functions in C to calculate the sum, minimum, and maximum of a variable number of integer arguments. It tests the functions by randomly generating arrays of 3, 5, and 10 elements and checking if the sum, min, and max calculations match the expected outputs. The main function runs the tests for different numbers of arguments and prints whether the answers are correct or wrong.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views

Variadic Functions in C

The document defines variadic functions in C to calculate the sum, minimum, and maximum of a variable number of integer arguments. It tests the functions by randomly generating arrays of 3, 5, and 10 elements and checking if the sum, min, and max calculations match the expected outputs. The main function runs the tests for different numbers of arguments and prints whether the answers are correct or wrong.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

//Variadic functions in C - Hacker Rank Solution

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MIN_ELEMENT 1
#define MAX_ELEMENT 1000000
int sum(int count, ...)
{
va_list arr;
int t = 0;
va_start(arr, count);
while(count--){
t += va_arg(arr, int);
}
return t;
}

int min(int count, ...)


{
va_list arr;
int mn = MIN_ELEMENT;
va_start(arr, count);
while(count--){
if(mn > va_arg(arr, int))
mn = va_arg(arr, int);
}
return mn;
}

int max(int count, ...)


{
va_list arr;
int mx = MAX_ELEMENT;
va_start(arr, count);
while(count--){
if(mx < va_arg(arr, int))
mx = va_arg(arr, int);
}
return mx;
}

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;
}

You might also like