Разработать функцию с переменным числом параметров для вычисления выражения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, разработать функцию с переменным числом параметров (x1, x2, x3, x4, ...), которая вычисляет значение выражения: - известно, что количество параметров функции парная.

Решение задачи: «Разработать функцию с переменным числом параметров для вычисления выражения»

textual
Листинг программы
double Chartoint(char* );
 
    double func2(char *type, ...)
    {
        char *t = type, key = 1;
        void *i = &type + 1;
        int counter = 0;
        int sum1 = 0, sum2 = 0;
        for (; *(t) != '\0'; t++)
        {
            if (key == 1)
            {
                if (*(t) == '0'){
                    sum1 = sum1 * Chartoint(*(char**)i);
                    i = (char**)i + 1;
                }
                else{
                    sum1 = sum1 * *((int*)i);
                    i = (int*)i + 1;
                }
            }
            else
            {
                if (*(t) == '0') {
                    sum2 *= Chartoint(*(char**)i);
                    i = (char**)i + 1;
                }
                else {
                    sum2 *= *((int*)i);
                    i = (int*)i + 1;
                }
            }
            key = -key;
            counter++;
        }
        if (counter % 2 == 0)
        {
            double rez = (double)sum1 - sum2;
            printf("\nСума для другого варіанту рівна %.2lf", rez);
            return (sum1-sum2);
        }
        puts("Error");
    }
 
 
    double Chartoint(char *ch)
    {
        double sum = 0.0;
        char*p = ch;
        for (; *(p) != '\0'; p++)
        {
            sum = sum * 10 + (*(p)-48);
        }
        return sum;
    }

Объяснение кода листинга программы

Список элементов кода:

  1. *double Chartoint(char );** - объявление функции Chartoint для преобразования строки в целое число.
  2. *double func2(char type, ...)** - объявление функции func2 с переменным числом аргументов.
  3. *char t = type;** - инициализация переменной t для хранения символов строки type.
  4. *void i = &type + 1;** - инициализация указателя i для работы с аргументами функции func2.
  5. int counter = 0; - инициализация переменной counter для подсчета количества пар чисел.
  6. int sum1 = 0, sum2 = 0; - инициализация переменных sum1 и sum2 для хранения сумм чисел.
  7. *for (; (t) != '\0'; t++)** - цикл по всем символам строки type.
  8. if (key == 1) - проверка, является ли текущий символ '0'.
  9. *if ((t) == '0')** - проверка, является ли текущий символ '0'.
  10. sum1 = sum1 Chartoint((char)i);** - умножение sum1 на результат функции Chartoint для текущего аргумента.
  11. i = (char)i + 1;** - увеличение указателя i для перехода к следующему аргументу.
  12. else - если текущий символ не '0'.
  13. *sum1 = sum1 ((int)i);** - умножение sum1 на текущее целое число.
  14. *i = (int)i + 1;** - увеличение указателя i для перехода к следующему аргументу.
  15. else - если текущий символ не '0'.
  16. sum2 = Chartoint((char)i);** - умножение sum2 на результат функции Chartoint для текущего аргумента.
  17. i = (char)i + 1;** - увеличение указателя i для перехода к следующему аргументу.
  18. key = -key; - смена значения переменной key на противоположное.
  19. counter++; - увеличение переменной counter на единицу.
  20. if (counter % 2 == 0) - проверка, является ли counter четным числом.
  21. double rez = (double)sum1 - sum2; - вычисление разности sum1 и sum2 и сохранение результата в переменной rez.
  22. printf(\nСума для другого варіанту рівна %.2lf, rez); - вывод значения переменной rez на экран.
  23. return (sum1-sum2); - возврат разности sum1 и sum2 из функции.
  24. *charp = ch;** - инициализация указателя p для работы со строкой ch.
  25. *for (; (p) != '\0'; p++)** - цикл по всем символам строки ch.
  26. sum = sum 10 + ((p)-48); - вычисление значения числа, представляющего текущий символ.
  27. return sum; - возврат значения переменной sum из функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы