Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Помогите найти ошибку, суть задачи заключается в нахождении значения функции, заданной с помощью ряда Тейлора(условие прикрепил). Правильно выводит только при 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 Кб, 11 просмотров)
Тип файла: jpg Консоль.jpg (37.1 Кб, 1 просмотров)
axel__ вне форума   Ответить с цитированием
Старый 27.05.2015, 12:22   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

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

Цитата:
Сообщение от 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 Кб, 0 просмотров)
Тип файла: jpg 12333.jpg (35.0 Кб, 0 просмотров)

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

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

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

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

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

Цитата:
Сообщение от 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, 14:11   #8
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru