Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2015, 11:12   #1
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию Ошибка в коде (С)

Помогите найти ошибку, суть задачи заключается в нахождении значения функции, заданной с помощью ряда Тейлора(условие прикрепил). Правильно выводит только при x=1 остальные значения не правильные(прикрепил скрин консоли) Соответственно при х=2 должно выводиться s=0,909; x=3 s=0,141 x=4 s=-0,756 x=5 s=-0,958, но выводиться не правильно, ошибка где-то с S, но не могу ее найти всяко разно пытался - не получается. Буду рад услышать ваши мысли.
Код:
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <math.h>
void main ()
{
    setlocale(LC_ALL,"rus");
    float dx, e, xn, s, a, xk, x, t;
    int n, k, b=1,f; 
    printf ("Введите точность е, х начальное, х конечное, шаг dx:\n");
    scanf ("%f %f %f %f", &e, &xn, &xk, &dx);
    printf ("---------------------------------------------------------\n");
    printf ("|Значение функции sin(x)                                |\n");
    printf ("|-------------------------------------------------------|\n");
    printf ("| х-значение |sin(x)-значение функции  | n - количество  |\n");
    printf ("| аргумента  |      в точке х          |просуммированных|\n");
    printf ("|            |                         |   членов ряда  |\n");
    printf ("|------------|-------------------------|----------------|\n");
    for ( x=xn; x<=xk; x=x+dx)
    {
        n=3;
        s=0;
        k=0;
        a=x;
        t=a;
        f=1;
        while (abs(a)>=e)
        {
            s=s+b*a;
            t=t*x*x;
        for (int p=1;p<=n;p++) 
        {
            f=f*p;
        }
            a=t/f;
            b=b*(-1);
            n=n+2;
            k=k+1;  
        }
        
            printf ("| %10.2f | %23.4f | %14d |\n", x, s, k);
            printf ("--------------------------------------------------------\n");
    }
    getch ();
}
Изображения
Тип файла: jpg Условие.jpg (16.5 Кб, 44 просмотров)
Тип файла: jpg Консоль.jpg (37.1 Кб, 142 просмотров)
axel__ вне форума Ответить с цитированием
Старый 27.05.2015, 11:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Могу порекомендовать свое решение: http://www.programmersforum.ru/showp...1&postcount=35
Только прирост делай на двойку, а не на единицу.
А вот в твоем коде я перед циклом факториала f бы обнулял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2015, 11:49   #3
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А вот в твоем коде я перед циклом факториала f бы обнулял.
Благодарю за помощь, обнулив факториал у меня правильно просчитались первые 3 значения при x=1,x=2,x=3 а дальше почему-то не правильно

Сейчас у меня выводит только 4 значения при x=1 x=2 x=3 x=4
хотя я пишу от 1 до 10 (но эти значения верные не учитывая знак)
Не могу понять где может быть ошибка
Изображения
Тип файла: jpg 12333.jpg (37.1 Кб, 135 просмотров)
Тип файла: jpg 12333.jpg (35.0 Кб, 133 просмотров)

Последний раз редактировалось Stilet; 27.05.2015 в 12:01.
axel__ вне форума Ответить с цитированием
Старый 27.05.2015, 12:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да наверное потому что факториал больше 9 уже в процессор не влезает )
Это же огогенное число получается. Не удивительно, я бы тоже подавился и слег с несварением )))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2015, 12:13   #5
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да наверное потому что факториал больше 9 уже в процессор не влезает )
Это же огогенное число получается. Не удивительно, я бы тоже подавился и слег с несварением )))
Точно об этом я и не подумал) Изменив int на long long int проблема решилась) И можно еще 1 вопрос, осталась проблема со знаками, как то не корректно они меняются, что нужно поменять чтоб выводилось правильное значение
При вводе разных значений - знаки меняются
Изображения
Тип файла: jpg 12333.jpg (39.5 Кб, 136 просмотров)
Тип файла: jpg 123222.jpg (44.7 Кб, 145 просмотров)

Последний раз редактировалось axel__; 27.05.2015 в 12:25.
axel__ вне форума Ответить с цитированием
Старый 27.05.2015, 12:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Со знаками я проблем не вижу. Хотя я бы писал не b=b*(-1); а b=-b;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2015, 13:01   #7
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Со знаками я проблем не вижу. Хотя я бы писал не b=b*(-1); а b=-b;
А почему тогда со скриншотов с этого поста http://programmersforum.ru/showpost....07&postcount=5
знак при х=2 разный(при вводе разного шага и точности) ?
При значениях x=1 x=2 x=3 x=4 x=5 должно получаться s=0,841 s=0,909 s=0,141 s=-0,756 s=-0,958 соответственно. В первом скриншоте значение при x=4 не соот-ет, на 2 скриншоте при x=2 и х=4
axel__ вне форума Ответить с цитированием
Старый 27.05.2015, 13:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Отладку нужно делать. Возможно у тебя переполнение идет из-за факториала.
Проведи трассировку и посмотри как операторы себя ведут. Я думаю что long long все равно не будет хватать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2015, 13:59   #9
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Отладку нужно делать. Возможно у тебя переполнение идет из-за факториала.
Проведи трассировку и посмотри как операторы себя ведут. Я думаю что long long все равно не будет хватать.
Ок, спасибо за помощь)
axel__ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде СергейАС Помощь студентам 1 23.10.2012 14:59
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде X_ALONE_X Паскаль, Turbo Pascal, PascalABC.NET 2 24.08.2011 18:40
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Cronos20 PHP 3 09.07.2010 23:31