Задать вопрос
  • Как посчитать 5 погрешностей?

    @im_noob Автор вопроса
    Wataru, относительную просто на число 100 домножить?
    Да, я не понимаю, что он хочет. Что происходит в printf из-за чего ошибка?
    Так получается? Теперь выводит то, что нужно, но погрешность везде по нулям.
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    double MyExp(double x, double eps);
    int main()
    {
        double eps=1, x, d=0, d1=0;
        int n, i;
        printf("x=");
        scanf_s("%lf", &x);
        for (i = 0; i < 5; i++) {
            printf("\nresult = %lf eps=%f \n", MyExp(x, eps), eps *= 0.1);
            printf("\nbibliotechnoe znachenie   = %lf", exp(x));
            d = abs(MyExp(x, eps) - exp(x));
            d1 = abs(MyExp(x, eps) - exp(x)) / exp(x) * 100;
            printf("\nabsolytnya pogresnost' = %lf otnositelnay pogresnost' = %lf\n", d, d1);
        }
        _getch();
        return 0;
    }
     
    double MyExp(double x, double eps)
    {
        double a = 1, n,s;
        n = s = 0;
        while (fabs(a) > eps)
        {
            s += a;
            a *= x / ++n;
        }
        return s;
    }

    Вывод:
    x=5

    result = 148.309568 eps=0.100000

    bibliotechnoe znachenie = 148.413159
    absolytnya pogresnost' = 0.000000 otnositelnay pogresnost' = 0.000000

    result = 148.402917 eps=0.010000

    bibliotechnoe znachenie = 148.413159
    absolytnya pogresnost' = 0.000000 otnositelnay pogresnost' = 0.000000

    result = 148.412355 eps=0.001000

    bibliotechnoe znachenie = 148.413159
    absolytnya pogresnost' = 0.000000 otnositelnay pogresnost' = 0.000000

    result = 148.413108 eps=0.000100

    bibliotechnoe znachenie = 148.413159
    absolytnya pogresnost' = 0.000000 otnositelnay pogresnost' = 0.000000

    result = 148.413147 eps=0.000010

    bibliotechnoe znachenie = 148.413159
    absolytnya pogresnost' = 0.000000 otnositelnay pogresnost' = 0.000000
  • Как посчитать 5 погрешностей?

    @im_noob Автор вопроса
    Wataru, препод требует все писать в одной строке. Мол так читабельнее. Поэтому
    printf("\nresult = %lf eps=%f pogresnost' = %lf", MyExp(x, eps),d, eps*=0.1);
    выглядит таким образом.
    Скажите, пожалуйста, погрешность записана правильно?
    int main()
    {
        double eps=0.1, x, d=0, d1=0;
        int n, i;
        printf("x=");
        scanf_s("%lf", &x);
        for (i = 0; i < 5; i++) {
            printf("\nresult = %lf eps=%f absolytnya pogresnost' = %lf otnositelnay pogresnost' = %lf\n", MyExp(x, eps), d, d1, eps *= 0.1);
            printf("\nbibliotechnoe znachenie   = %lf", exp(x));
            d = abs(MyExp(x, eps) - exp(x)); //абсолютная погрешность
            d1 = abs(MyExp(x, eps) - exp(x)) / exp(x) * 1; // относительная погрешность 
        }
        _getch();
        return 0;
    }
  • Как посчитать 5 погрешностей?

    @im_noob Автор вопроса
    Wataru, по заданию: eps=0.1 множится для вывода 5 погрешностей, но я не понимаю: мне нужно найти относительную и абсолютную погрешность, как мне это осуществить?
    Я знаю, что абсолютная считается a=b-b1; (условно скажем так)
    а относительная в физике считается a=b/b1*100%
    а тут как ее записать?
    double MyExp(double x, double eps);
    int main()
    {
        double eps=0.1, x,d;
        int n, i;
        printf("x=");
        scanf_s("%lf", &x);
        for (i = 0; i < 5; i++ ) {
            printf("\nresult = %lf eps=%f pogresnost' = %lf", MyExp(x, eps),d, eps*=0.1);
            printf("\nbibliotechnoe znachenie   = %lf", exp(x));
            d = MyExp(x, eps) - exp(x);
     
        }
        _getch();
        return 0;
    }

    Вывод: x=5

    result = 148.402917 eps=0.010000

    bibliotechnoe znachenie = 148.413159
    result = 148.412355 eps=0.001000

    bibliotechnoe znachenie = 148.413159
    result = 148.413108 eps=0.000100

    bibliotechnoe znachenie = 148.413159
    result = 148.413147 eps=0.000010

    bibliotechnoe znachenie = 148.413159
    result = 148.413159 eps=0.000001

    bibliotechnoe znachenie = 148.413159
  • Как посчитать 5 погрешностей?

    @im_noob Автор вопроса
    Так?
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    double MyExp(double x, double eps);
    int main()
    {
        double eps=0.1, x,d;
        int n, i;
        printf("x=");
        scanf_s("%lf", &x);
        for (i = 0; i < 5; i++ ) {
            printf("\nresult = %lf eps=%f\n", MyExp(x, eps), eps*=0.1);
            printf("\nbibliotechnoe znachenie   = %lf", exp(x));
            d = MyExp(x, eps) - exp(x);
            printf("\nraznicta = %lf", d);
        }
        _getch();
        return 0;
    }
     
    double MyExp(double x, double eps)
    {
        double a = 1, n,s;
        n = s = 0;
        while (fabs(a) > eps)
        {
            s += a;
            a *= x / ++n;
        }
        return s;
    }
  • С: Объясните вторую часть задания?

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

    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    int Sum(int n, int x); // перегрузка функции
    
    int main()
    {
        int n, x; // переменные
        printf("n="); //ввод n
        scanf_s("%d", &n); // считать n
        printf("x=");// ввод x
        scanf_s("%d", &x); //считать х
        srand(time(NULL)); //функция рандома
        printf("\nsum=%d", Sum(n, x)); // вызов функции
        _getch(); // задержка экрана
        return 0;
    }
    int Sum(int n, int x)
    {
        int max_s = 0; // максимальная сумма цифр числа последовательности
        int sum = 0;// сумма =0
      
        for (int i = 0; i < n; i++)
        {
            int a = rand() % (x + 1); //функция объявления рамок рандома
            printf("%d ", a); //печать а 
          
        }
            while (n > 0) // подсчет суммы цифр числа типа n=465=4+6+5=15
            {
                sum += n % 10; // подсчет суммы цифр числа
                n /= 10;
            }
            if (sum > max_s) { //поиск в последовательности максимальной суммы
                max_s = sum; //для вывода максимальной суммы последовательности
        
        }
        printf("\nMaxSum=%d  ", max_s); // вывод макс. суммы последовательности
        return sum;
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Wataru, Не в коем случае. Хочу самостоятельно разобраться.
    Я уточнил задание: Необходимо отдельно сделать функцию, которая вычисляет сумму цифр натурального числа (например 345=3+4+5=12). А дальше по условию нужно ввести последовательности и найти в ней (с помощью функции) число с самой большой суммой цифр.

    Вот что я написал, но теперь у меня проблема в последовательности не то ищется.

    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    int Sum(int n, int x);
    
    int main()
    {
        int n, x;
        int max;
        printf("n=");
        scanf_s("%d", &n);
        printf("x=");
        scanf_s("%d", &x);
        srand(time(NULL));
    
        printf("\nsum=%d", Sum(n, x));
        _getch();
        return 0;
    }
    int Sum(int n, int x)
    {
        int m;
        int max_s = 0;
        int MaxSum = 0;
        int sum = 0;
        for (int i = 0; i < n; i++)
        {
            m = n;
      
            int a = rand() % (x + 1);
            printf("%d ", a);
          
        }
        while (n > 0)
        {
            sum += n % 10;
            n /= 10;
        }
        if (sum > max_s) {
            max_s = sum;
            MaxSum = m;
        }
        printf("\nMaxSum=%d  ", MaxSum);
        return sum;
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Я написал такой код, но в сумме и в максимальной сумме получаются одинаковые ответы

    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    int Sum( int n, int x);
     
    int main()
    {
        int n, x;
        int max;
       printf("n=");
       scanf_s("%d", &n);
            printf("x=");
        scanf_s("%d", &x);
        srand(time(NULL));
     
        printf("sum=%d", Sum(n,x)); 
        _getch();
        return 0;
    }
    int Sum(int n, int x)
    {
        int sum = 0;
     
        for (int i = 0; i < n; i++)
        {
            int a = rand() % (x + 1);
            printf("%d  ", a);
            while (a > 0)
            {
                sum += a % 10;
                a /= 10;
            }
        }
     
        //
     
        int MaxSum = 0;
     
        for (int i = 0; i < sum; i++)
        {
            if (sum > MaxSum)
            {
                MaxSum = sum;
            }
            else if (sum < 0)
            {
                sum = 0;
            }
            printf("MaxSum=%d  ", MaxSum);
            return sum;
        }
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Wataru, Как-то так? Но я не понимаю, как все организовать в одной функции:

    int sum = arr;
        int tempsum = 0;
        for (int i = 0; i <sum; i++) {
            tempsum += arr[i];
            if (tempsum > sum)
                sum = tempsum;
            if (tempsum < 0)
                tempsum = 0;
        }
        return sum;


    Вот полный код:
    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    int Sum( int n, int x,int arr[]);
    
    int main()
    {
        int n, x;
     
       printf("n=");
       scanf_s("%d", &n);
            printf("x=");
        scanf_s("%d", &x);
        srand(time(NULL));
      
        printf("sum=%d", Sum(n,x,arr[])); // здесь ошибка
        _getch();
        return 0;
    }
    int Sum(int n, int x, int arr[])
    {
        int sum = 0;
        int max = 0;
        for (int i = 0; i < n; i++)
        {
            int a = rand() % (x + 1);
            printf("%d  ", a);
            while (a > 0)
            {
                sum += a % 10;
                a /= 10;
            }
        }
        return sum;
    
        //
        int sum = arr;
        int tempsum = 0;
        for (int i = 0; i <sum; i++) {
            tempsum += arr[i];
            if (tempsum > sum)
                sum = tempsum;
            if (tempsum < 0)
                tempsum = 0;
        }
        return sum;
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Wataru, Так получается? Ответ вроде правильный. А как теперь найти элемент последовательности с наибольшей суммой?

    int Sum(int n, int x)
    {
        int sum = 0;
        int max = 0;
        for (int i = 0; i < n; i++)
        {
            int a = rand() % (x + 1);
            printf("%d  ", a);
            while (a > 0)
            {
                sum += a % 10;
                a /= 10;
            }
        }
        return sum;
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Я написал, но у меня не получается посчитать именно сумму последовательности. Не то выходит.


    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    int Sum( int n, int x);
    
    int main()
    {
        int n, x;
       printf("n=");
       scanf_s("%d", &n);
            printf("x=");
        scanf_s("%d", &x);
        srand(time(NULL));
      
        printf("sum=%d", Sum(n,x));
        _getch();
        return 0;
    }
    int Sum(int n, int x)
    {
        int sum = 0;
    
        for (int i = 0; i < n; i++)
        {
            int a = rand() % (x + 1);
            printf("%d  ", a);
    
            for (int i = 0; i <= n; i++) {
    
                sum = sum + a;
            }
    
    
    
        }
    }
  • С: Объясните вторую часть задания?

    @im_noob Автор вопроса
    Wataru, к сожалению это полное задание. Препод дал это задание и не отвечает на сообщения. Вообще непонятно, что нужно искать
  • Операции AND, OR, XOR Как проверить биты?

    @im_noob Автор вопроса
    Спасибо за объяснение! Теперь все понятно.
  • Операции AND, OR, XOR Как проверить биты?

    @im_noob Автор вопроса
    Adamos, очень смешной комментарий. Оставьте этот юмор при себе.
  • С: Где ошибка в коде?

    @im_noob Автор вопроса
    Wataru, элементы, которые идут после m при условии, если m равняется члену вводимой последовательности
  • С: Где ошибка в коде?

    @im_noob Автор вопроса
    if (go < 0) sum += a; так должно быть?
  • U% не работает. Почему ответ всегда ноль?

    @im_noob Автор вопроса
    Разобрался, перед !!isdigit надо так
  • U% не работает. Почему ответ всегда ноль?

    @im_noob Автор вопроса
    Wataru, попробовал переписать, вроде написал все правильно. Ответ все равно ноль
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h> 
    unsigned foo(char* src)
    {
        int  total = 0;
        for (int idx = 1; *src; src++)
        {
            if ((src[idx] >= "0") && (src[idx] <= '9') && (*src% 2) == 0) {
                total++;
            }
        }
        return total;
    }
    int main()
    {
        char symbols[] = "lkdrjvf9ei48r4hjrfwh74h827h34r0239r34jt93o84rtj";
            printf("Digits on even places found=%d", foo(symbols));
        return 0;
    }
  • U% не работает. Почему ответ всегда ноль?

    @im_noob Автор вопроса
    Wataru, да, действительно там, где вы вставляли ответ 9, а в visual studio ответ 0.
    Я попробовал через %d и %u
    Все равно ноль
  • U% не работает. Почему ответ всегда ноль?

    @im_noob Автор вопроса
    даже в онлайн компиляторе ответ 0
    https://ideone.com/zjlLjS

    что не так?
  • Где у меня ошибка при выводе порядковых номеров?

    @im_noob Автор вопроса
    Wataru, Попробовал переделать, но теперь ответ всегда ноль
    Вроде правильная функция же?
    #include <stdio.h>
    #include <ctype.h>
     
    unsigned foo(char* src)
    {
        unsigned total = 0;
        for (unsigned idx = 0; *src; src++)
            total += (++idx & 1) & isdigit(*src);
        return total;
    }
    int main()
    {
        char symbols[] = "lkdrjvf9ei48r4hjrfwh74h827h34r0239r34jt93o84rtj";
            printf("Digits on even places found=%u\n", foo(symbols));
        return 0;
    }