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

Нахождение комплексных корней методом Ньютона - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шифр Вернама. Дешифровка http://www.cyberforum.ru/cpp-beginners/thread853912.html
Помогите написать дешифратор для Шифра Вернама или укажите ошибку в моём дешифраторе: #include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() {
C++ Динамические структуры. Составить программу, которая содержит информацию о книгах в библиотеке Составить программу, которая содержит информацию о книгах в библиотеке. Сведения о книгах включают: Номер УДК; Фамилию и инициалы автора; Название; Год издания; Количество экземпляров данной книги в библиотеке; Программа должна обеспечивать: Начальное формирование данных обо всех книгах в библиотеке в виде дво-ичного дерева; Добавление данных о книгах, вновь поступающих в... http://www.cyberforum.ru/cpp-beginners/thread853910.html
Выбор учебника для подготовки к олимпиаде АЦМ C++
Какой лучше подойдет для прочтения перед олимпиадой по программированию АЦМ?
Изменить указатель в функции C++
Совсем запутался. мне нужно что бы после выхода из функции указатель wsadr был изменен, и менять внутри переменные по указателю. char rl1 ; char *sadr =(char*) MapViewOfFile(sfilemp, FILE_MAP_READ, 0, 0, 0); char *wsadr = sadr; cr(&wsadr); //wsadr здесь должен быть изменен void cr(char **sadr) {
C++ Удаление элемента из vector http://www.cyberforum.ru/cpp-beginners/thread853889.html
Здорова! Пытаюсь удалить элемент из vector<string>, но чото ошибку выдает и я вообще не пойму что за ошибка. Вот код который ошибку выводит: //ydalenie elementov nachinayuchixc9 na a vector<string>::iterator It; for(It=vec.begin();It!=vec.end();++It) { if((*It)=='a') vec.erase(It);//ydal9et element na kotorui ykazuvaet iterator
C++ В неориентированном графе посчитать количество компонент связности 2. Компоненты связности В неориентированном графе посчитать количество компонент связности. В графе нет петель и кратных ребер. Формат входного файла Во входном файле записаны сначала два числа N и M, задающие соответственно количество вершин и количество ребер (1≤N≤100, 0≤M≤10000), а затем перечисляются ребра. Каждое ребро задается номерами вершин, которые оно соединяет. Формат выходного... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
02.05.2013, 14:11     Нахождение комплексных корней методом Ньютона
Вот корректное на мой взгляд решение.
CComplex.h
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <cmath>
#include <iostream>
using namespace std;
 
class CComplex
{
public :
    double _re;
    double _im;
    CComplex();
    CComplex(double re, double im);
    CComplex(const CComplex &pCopy);
 
    CComplex conjugate();
    double complexfabs();
    
    CComplex operator + (CComplex pAdd);
    CComplex operator - (CComplex pAdd);
    CComplex operator * (CComplex pMul);
    CComplex operator / (CComplex pDiv);
 
    CComplex uintpower(unsigned int n);
    friend ostream& operator << (ostream &out, const CComplex pVal)
    {
        out<<pVal._re<<(pVal._im < 0 ? " - " : " + ")<<fabs(pVal._im)<<"j";
        return out;
    }
};
 
CComplex::CComplex()
{
    _re = _im = 0;
}
 
CComplex::CComplex(double re, double im)
{
    _re = re;
    _im = im;
}
 
CComplex::CComplex(const CComplex &pCopy)
{
    _re = pCopy._re;
    _im = pCopy._im;
}
 
CComplex
CComplex::conjugate()
{
    CComplex pThis = (*this);
    pThis._im *= -1;
    return pThis;
}
 
double CComplex::complexfabs()
{
    return _re*_re + _im*_im;
}
 
CComplex
CComplex::operator +(CComplex pAdd)
{
    CComplex pThis = (*this);
    pThis._re += pAdd._re;
    pThis._im += pAdd._im;
    return pThis;
}
 
CComplex
CComplex::operator - (CComplex pAdd)
{
    CComplex pThis = (*this);
    pThis._re -= pAdd._re;
    pThis._im -= pAdd._im;
    return pThis;
}
 
CComplex
CComplex::operator *(CComplex pMul)
{
    CComplex pThis = (*this);
    pThis._re = _re*pMul._re - _im*pMul._im;
    pThis._im = _re*pMul._im + _im*pMul._re;
    return pThis;
}
 
CComplex
CComplex::operator / (CComplex pDiv)
{
    CComplex pThis = (*this);
    double divider = pDiv.complexfabs();
    pThis = pThis*pDiv.conjugate();
    pThis._re /= divider;
    pThis._im /= divider;
    return pThis;
}
 
CComplex
CComplex::uintpower(unsigned int n)
{
    CComplex pThis = CComplex(1, 0);
    for(unsigned int i = 0; i < n; i++)
        pThis = pThis*(*this);
    return pThis;
}
main.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
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
91
92
93
94
95
#include "CComplex.h"
 
template <class T>
bool SafeInput//безопасный ввод
(
    const char * msg,//сообщение которое будет сопутствовать вводу
    T &val
);
//Для вычислений
CComplex  f(CComplex z, unsigned int n);
CComplex df(CComplex z, unsigned int n);
 
int main()
{
    unsigned int n;
    unsigned int i;
    int iChoise= 0;
    bool bWork = true;
    double err = 0;
    CComplex z;
    while( bWork )
    {
        cout<<"\t***MENU***"<<endl;
        cout<<"1 - solve z^n + 1 == 0"<<endl;
        cout<<"0 - exit"<<endl;
        if(!SafeInput("Your choise : ", iChoise))
            cout<<"Incorrect input"<<endl;
        else
        switch( iChoise )
        {
            case 1 :
                cout<<"Enter initial root z value : "<<endl;
                if(!SafeInput("Re : ", z._re))
                    cout<<"Incorrect input"<<endl;
                else
                if(!SafeInput("Im : ", z._im))
                    cout<<"Incorrect input"<<endl;
                else
                if(!SafeInput("Enter power n : ", n))
                    cout<<"Incorrect input"<<endl;
                else
                if(!SafeInput("Calc error : ", err))
                    cout<<"Incorrect input"<<endl;
                else
                {
                    for(i = 0; f(z, n).complexfabs() > err; i++)
                    {
                        z = z - f(z, n) / df(z, n);
                        cout<<"\r iteration : "<<i + 1<<" root : "<<z<<" error : "<<f(z, n).complexfabs();
                    }
                    z = z - f(z, n) / df(z, n);
                    cout<<"\r iteration : "<<i + 1<<" root : "<<z<<" error : "<<f(z, n).complexfabs()<<endl;
                }
                break;
            case 0 :
                bWork = false;
                break;
            default:
                cout<<"Unsupported key"<<endl;
                break;
        }
    }
    return 0;
}
 
template <class T>
bool SafeInput
(
    const char * msg,//сообщение которое будет сопутствовать вводу
    T &val
)
{
    bool bOk = true;//Флаг успешного ввода
    cout<<msg;//Вывод на экран сопутствующего сообщения
    //Проверка на корректный ввод должна содержать не только if(!(cin>>val) )
    //но и проверку на то что строка более не содержит символов т.е cin.get() != '\n'
    if(!(cin>>val) || cin.get() != '\n')
        bOk = false;
    if(!bOk)
    {
        cin.clear();//Сброс флагов ошибок
        cin.sync();//Очистка буфера ввода
    }
    return bOk;
}
 
CComplex f(CComplex z, unsigned int n)
{
    return z.uintpower(n) + CComplex(1, 0);
}
 
CComplex df(CComplex z, unsigned int n)
{
    return CComplex(n, 0)*z.uintpower(n - 1);
}
Миниатюры
Нахождение комплексных корней методом Ньютона  
 
Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru