Форум программистов, компьютерный форум CyberForum.ru

Ряд Тейлора и цикл for - C++

Восстановить пароль Регистрация
 
Lenigradec
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 3
02.03.2011, 19:50     Ряд Тейлора и цикл for #1
Приветствую. У меня дана задача вычислить значение функции F(x) заданной рядом Тейлора, точность вычислений 10^-6, Х вводится с клавиатуры. Пишу в пиратской "Виндоус Визуал Студия 2010 ПРО - С++"
Вобщем вот что у меня получилось...

module1.cpp ошибка в этом модуле.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "modules.h"
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#define EPS 1.e-6
 
namespace Modules
{
    void module2 ()
    {           
        fflush (stdin);
        setlocale ( LC_ALL, "Russian" );
        system ("cls");
        time_t d;
        time (&d);
        printf ("%s\n", ctime (&d));
        printf ("________________________________________________________________________________\n");
        float x, y, sum;
        int cx, i, n;
        printf ("Введите x : ");
        cx = scanf ("%f", &x);
        if (cx != 1)
        {
            printf ("Ошибка! Вводите только цифры!\n");
        }
        for (n = 0; fabs (y) > EPS && n < 500; n ++)
        {
            y = (pow ((-1.), n) * pow (x, (2 * n))) / ((n - 1) * n);
            sum += y;
        }
        printf ("\nF (x) = %f\n", sum);
        printf ("\ny = %f\n", y);
        printf ("\nВычисления завершены. Пересчитать? Да - 1 / Нет - 2\n");
        i = getche ();
        switch (i)
        {
            case '1': Modules::module2 (); break;
            case '2': return;
            default: system ("cls"); printf ("Ошибка!\n\n");
        }
    }
}
modules.h тут нету ошибок.
C++
1
2
3
4
5
6
7
8
9
#ifndef modulesH
#define modulesH
 
namespace Modules
{
    void module1 ();
    void module2 ();
}
#endif
kpz13.cpp тут нету ошибок.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "modules.h"
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
using namespace Modules;
 
int main (int, char *adress [])
{   
    while (1)
    {
        setlocale ( LC_ALL, "Russian" );
        system ("cls");
        time_t d;
        time (&d);
        printf ("%s\n", ctime (&d)); printf ("%s\n", adress [0]);
        printf ("________________________________________________________________________________\n"
        "Выберите номер задания:\n\n"
        "Задание № 1 (Вычислить Z)\n"
        "Задание № 2 (Вычислить F(x) заданной рядом Тейлора)\n"
        "Задание № 3 (Вычислить 20 значений функции F(x))\n"
        "Задание № 4 (Значения F(x) представить в экспоненциальном  виде)\n"
        "Задание № 5 (Вычисления с массивом)\n"
        "Задание № 6 (Сформировать массив M * N)\n"
        "Завершить работу - 0\n\nВведите номер задания: ");
        int i;
        i = getche ();
        switch (i)
        {
            case '1': Modules::module1 (); break;
            case '2': Modules::module2 (); break;
            case '0': exit (0);
            default: system ("cls"); printf ("Ошибка! Введите номер!\n\n");
        }
    }
    return 0;
}
Вот ошибки которые он мне выдаёт... При построении.
Run-Time Check Failure #3 - The variable 'y' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'sum' is being used without being initialized.
Неправильные ответы "-1.#INFOO" и "-1.#IDFOO"

А это при компиляции module2.cpp...
1>------ Построение начато: проект: Kyrsovik, Конфигурация: Debug Win32 ------
1>Построение начато 02.03.2011 16:27:14.
1>ClCompile:
1> module2.cpp
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(18): warning C4996: 'ctime': This function or variable may be unsafe. Consider using ctime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 10.0\vc\include\time.inl(86): см. объявление "ctime"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(23): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): см. объявление "scanf"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(30): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(36): warning C4996: 'getche': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getche. See online help for details.
1> d:\program files\microsoft visual studio 10.0\vc\include\conio.h(129): см. объявление "getche"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(28): warning C4700: использована неинициализированная локальная переменная "y"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\kyrsovik\kyrsovik\module2.cpp(31): warning C4700: использована неинициализированная локальная переменная "sum"
1>
1>Построение успешно завершено.
1>
1>Затраченное время: 00:00:01.03
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========
Половина ерунда, но проблемы с инициализацией...
Помогите добиться правильного вычисления плс. И что это за ошибки как их предотвратить в будущем.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 19:50     Ряд Тейлора и цикл for
Посмотрите здесь:

вычислить функцию с помощью разложения в ряд.(Ряд Тейлора) C++
C++ Ряд Тейлора С++
C++ Ряд Тейлора
C++ Вычисление функции через разложение в ряд (Ряд Тейлора)
C++ Ряд Тейлора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lenigradec
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 3
02.03.2011, 21:24  [ТС]     Ряд Тейлора и цикл for #2
http://cs10167.vkontakte.ru/u1344353...y_1a056ed9.jpg
Вот само задание...
Миниатюры
Ряд Тейлора и цикл for  
Lenigradec
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 3
03.03.2011, 01:06  [ТС]     Ряд Тейлора и цикл for #3
Извиняюсь, там не точное задание) Вот точное.

Ряд Тейлора и цикл for
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 01:01     Ряд Тейлора и цикл for #4
Нету идей? Тут проблема в цикле for, но я не знаю что тут неправильно... И я плохо понимаю вот такое подключение #define EPS как оно работает. Можно заменить на const float eps = 0.000001;

C++
1
2
3
4
5
6
7
8
9
10
11
float x, y, sum;
int n;
printf ("Введите x : ");
scanf ("%f", &x);
for (n = 0; fabs (y) > EPS && n < 500; n ++)
{
        y = (pow ((-1.), n) * pow (x, (2 * n))) / ((n - 1) * n);
        sum += y;
}
printf ("\nF (x) = %f\n", sum);
printf ("\ny = %f\n", y);
Как мне вот этот цикл написать правильно?

Добавлено через 7 часов 52 минуты
Может что то не понятно? Совсем помочь не кто не может?

Добавлено через 50 минут
Ну я вроде разобрался с инициализацией... И факториал прикрутил... Инициализируем:
C++
1
float y = 0; //тип переменная присвоение нуль;
Но теперь результат вычислений тоже стал 0.000000...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "modules.h"
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
//#define EPS 1.e-6
 
namespace Modules
{
    int fact (int n)
    {
        int result = 1;
        for (int i = n; i >= 1; i --)
        {
            result *= i;
        }
        return result;
    }
    void module2 ()
    {           
        fflush (stdin);
        setlocale ( LC_ALL, "Russian" );
        system ("cls");
        time_t d;
        time (&d);
        printf ("%s\n", ctime (&d));
        printf ("________________________________________________________________________________\n");
        float x, y = 0, sum = 0, eps = 0.00001;
        int cx, i, n;
        printf ("Введите x : ");
        cx = scanf ("%f", &x);
        if (cx != 1)
        {
            printf ("Ошибка! Вводите только цифры!\n");
        }
        for (n = 0; fabs (y) > eps && n < 500; n ++)
        {
            y = (pow ((-1.), n) * pow (x, (2 * n))) / fact (n);
            sum += y;
        }
        printf ("\nF (x) = %f\n", sum);
        printf ("\ny = %f\n", y);
        printf ("\nВычисления завершены. Пересчитать? Да - 1 / Нет - 2\n");
        i = getche ();
        switch (i)
        {
            case '1': Modules::module2 (); break;
            case '2': return;
            default: system ("cls"); printf ("Ошибка!\n\n");
        }
    }
}
Засада какая то...
Yandex
Объявления
04.03.2011, 01:01     Ряд Тейлора и цикл for
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru