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

Поправьте код... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, какая из фигур имеет большую площадь http://www.cyberforum.ru/cpp-beginners/thread90260.html
1) в стене существует квадратное отверстие N на N см. Имеется кирпич с измерениями a,b,c. определить пройдёт ли он в отверстие или нет. если подавать его можно параллельно стенкам отверстия. 2)...
C++ Замена символа пробела на заданную строку здрасти, со строками у меня как то плохо все, как заменить все символы пробелов на строку " !##! "? int main() { char probel = ' '; char Buf; FILE *file; file = fopen("in.txt", "w");... http://www.cyberforum.ru/cpp-beginners/thread90258.html
Карточная игра из книги Лафоре C++
помогите плиз с парой вопросов. заранее спасибо.(2 вопроса в комментариях) // cardaray.cpp // класс игральных карт #include <iostream> #include <cstdlib> #include <ctime> using namespace std; ...
C++ Текстовый файл
Помогите пожалуйста, как посчитать пробелы в строке? Вот пример открытия файла: #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { FILE *f; char file; char p;
C++ Функция и эхо контроль http://www.cyberforum.ru/cpp-beginners/thread90221.html
Даны положительные действительные числа А, Х, Е(epsilon). В последовательности У1,У2,... ,образованной по закону У0=А; Уi=1/2(Уi-1 +Х/Уi-1) , i=1,2,3,4........? (i, i-1 --индексы У) найти первый...
C++ Поиск. Бинарный поиск Ребятушки, а это опять я :) Задали индивидуальное задание " Бинарный поиск " Препод сказал, сделать простейшую программку с методом бинарного поиска) Я опять :( искала в инете, а там одна... подробнее

Показать сообщение отдельно
Johni
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 21

Поправьте код... - C++

27.01.2010, 21:07. Просмотров 395. Ответов 2
Метки (Все метки)

Помогите поправить код...не пойму в чем ошибка....программы разложения в ряд ln(x+1)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "iostream"
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <math.h> 
 
//using CharToOemA func to convert ANSI to OEM
char bufRus[256];
char* Rus(const char* text)
    {
        CharToOemA(LPCSTR(text), bufRus);
        return bufRus;
    }
 
char* Rus(const char* text);
 
int _tmain(int argc, _TCHAR* argv[])
{
        double dXbegin, dXend, dXstep, N, E;//, N1=1, i=1.0;
        printf(Rus("Программа вычисления функции ln(x+1), заданной рядами Тейлора\n"));
        printf(Rus("и вывода в столбец значений ф-ии на интервале [x1;x2]\n"));
        printf(Rus("с шагом dx и заданной точностью E.\n"));
        printf(Rus("x лежит в диапазоне (-1;1]\n"));
        printf(Rus("Введите начало интервала, конец интервала, число шагов(N), точность вычислений.\n"));
        printf("x1, x2, N, E = ?\n");
        scanf("%lf%lf%lf%lf", &dXbegin, &dXend, &N, &E);
        
        if (    dXbegin < -1e300        // Проверка на диапазон значений вводимых чисел
                ||      dXbegin > 1e300
                ||      dXend < -1e300
                ||      dXend > 1e300
                ||      N < 1
                ||      N > 1e300
                ||      E < 0
                ||      E > 1e300)
        {
                printf(Rus("Вне диапазона\n"));
                getch();
                return 0;
        }
        if ( dXbegin > dXend )
        {
                printf(Rus("Начало интервала больше чем его конец, корректирую...\n"));
                //обойдемся без дополнительного ввода новой переменной
                dXbegin = dXbegin + dXend;      // {a = a0 + b0, b = b0}
                dXend   = dXbegin - dXend;      // {a = a0 + b0, b = a0}
                dXbegin = dXbegin - dXend;      // {a = b0, b = a0}
 
        }
        dXstep=fabs(dXend-dXbegin)/N;
        for (double x=dXbegin, i, y; x <= dXend; x+=dXstep)
        {
                if ( x <= -1 || x > 1)
                {
                        printf(Rus("Значение функции в точке x=(%lf) не существует(задано условием)\n"), x);
                        continue;
                }
 
                for (double i=1, minus=-1, y=0, N=1; E < fabs(N/i); i++)
                {
                                if (i == 1)                     //т.к. знакочередующаяся последовательность, пришлось пропустить
                                        {                       //программу через последовательное выполнение
                                                N*=x;           //чтобы понять причину некорректного результата ...
                                                y+=(N/i);       //итог: проверка условия в случае i == 1
                                                continue;       //далее знак меняется нормально
                                        }
                                else
                                        {
                                        //minus*=-1.0;          //после первой итерации становится +, потом -...
                                        N*=minus*x;             //следующий член ряда
                                        y+=(N/i);               //сумма
                                        if (E > fabs(N/i))
                                                {
                                                        printf("i=%lf\n", i);
                                                        printf(Rus("В точке x=[%.10lf]\ty=[%.10lf]\n"), x, y);
                                                }
                                        if (i > 10000000)
                                                {
                                                        printf(Rus("Количество итераций превысило 10,000,000 - прерываем цикл\n"));
                                                        printf(Rus("В точке x=[%.10lf]\ty=[%.10lf]\n"), x, y);
                                                        break;
                                                }
                                        }
                }
        }
        printf("E=[%e]\nN=[%lf]\ndXbegin=[%lf]\ndXend=[%lf]\n", E, N, dXbegin, dXend);
        getch();
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru