Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
24 Апрель 2024, 05:30:56
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Страниц  :   Вниз
  Печать  
Автор Тема: удалить!  (Прочитано 1509 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« : 23 Ноябрь 2012, 17:08:43 »

Программа для решения нелинейных уравнений методом ньютона(метод касательных), не до конца работает, почему-то, после ввода на консоли погрешности, она перестает работать, не могу разобраться в чем дело.

#include <StdAfx.h>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include<iostream>
using namespace std;
double a[4]={0},
       b[3]={0},
       c[2]={0},
       prec=0.00001;
double minim=0, maxim=0;
void Hello(void);
void Input();
void Derivative();
void Calculation();
double Calc_Fun(double);
double Calc_First(double);
double Calc_Second(double);
int main()
{
     Hello();
     Input();
     Derivative();
     Calculation();
     return 0;
}
void Hello(void)
{
     cout<<"Programma dlja rescenija uravneniy metodom Nyutona.\n\n";
}
void Input()
{
     cout<<"Uravnenie imeet vid"<<endl
         <<"a1*x^3+a2*x^2+a3*x+a4=0"<<endl<<endl;
     for (int i=0;i<4;i++)
     {
          cout<<"Vvedite znachenie koeficienta a["<<i+1<<"] : ";
          cin>>a ;
     }
     cout<<endl<<"Neobhodimo ukazat' intervly poiska resceniya."<<endl
               <<"Vvedite nizhnyuu granicu poiska : ";
     cin>>minim;
     cout<<"Vvedite verhnyuu granicu poiska : ";
     cin>>maxim;
     while(minim==maxim||minim>maxim)
     {
          cout<<"\n Nizhnyaa granica dolzhna byt' men'sce verhney i ne mozhet byt' ravna ey  ."<<endl
              <<"Povtorite vvod nizhney granicy : ";
          cin>>minim;
          cout<<"Povtorite vvod verhney granicy : ";
          cin>>maxim;
     }
     cout<<"Vvedite dopustimuyu pogreshnost' : ";
     cin>>prec;
}
void Derivative()
{
     b[0]=a[0]*3;
     b[1]=a[1]*2;
     b[2]=a[2];
     c[0]=b[0]*2;
     c[1]=b[1];
     cout<<"\n\n\n"
         <<"Ishodnoe uravnenie imeet vid : \n\n"
         <<a[0]<<"x^3+("<<a[1]<<")x^2+("<<a[2]<<")x+("<<a[3]<<")=0\n\n"
         <<"Pervaya proizvodnaya imeet vid : \n\n"
         <<"f'(x)="<<b[0]<<"x^2+("<<b[1]<<")x+("<<b[2]<<")\n\n"
         <<"Vtoraya proizvodnaya imeet vid  : \n\n"
         <<"f''(x)="<<c[0]<<"x+("<<c[1]<<")\n\n";
}
void Calculation()
{
     double x=0, m=0;
     cout<<"-------------------------------------------------"<<endl
         <<"|      Xn       |     f(Xn)     |   |f(Xn)|/m   |"<<endl
         <<"-------------------------------------------------"<<endl;
     if (abs(Calc_Fun(minim))*abs(Calc_Second(minim))>0) x=minim;
     else x=maxim;
     if (Calc_First(minim)>Calc_First(maxim)) m=abs(Calc_First(maxim));
     else m=abs(Calc_First(minim));
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<x;
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<Calc_Fun(x);
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<(fabs(Calc_Fun(x))/m);
     cout<<"|\n";
     while((fabs(Calc_Fun(x))/m)>prec)
     {
          x=(x-(Calc_Fun(x)/Calc_First(x)));
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<x;
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<Calc_Fun(x);
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<fabs(Calc_Fun(x))/m;
          cout<<"|\n";
     }
     cout<<"-------------------------------------------------";
}
double Calc_Fun(double x)
{
     return (a[0]*x*x*x+a[1]*x*x+a[2]*x+a[3]);
}
double Calc_First(double x)
{
     return (b[0]*x*x+b[1]*x+b[2]);
}
double Calc_Second(double x)
{
     return (c[0]*x+c[1]);
}
« Последнее редактирование: 26 Ноябрь 2012, 18:32:15 от Al4enok » Записан
RILLey_ELf
Гость
« Ответ #1 : 23 Ноябрь 2012, 17:24:00 »

cin>>a;
вот это неверно
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #2 : 23 Ноябрь 2012, 17:57:21 »

cin>>a;
вот это неверно
в проге cin >>a(i), это просто здесь недопечаталось почему-то.
« Последнее редактирование: 23 Ноябрь 2012, 18:17:31 от Al4enok » Записан
RILLey_ELf
Гость
« Ответ #3 : 23 Ноябрь 2012, 18:54:25 »

квадратные скобки должны быть
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #4 : 23 Ноябрь 2012, 19:40:19 »

квадратные скобки должны быть
я знаю, так и есть, здесь не отражается почему-то, поэтому и заменила круглыми скобками
Записан
RILLey_ELf
Гость
« Ответ #5 : 23 Ноябрь 2012, 19:47:05 »

какие данные вводите?
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #6 : 23 Ноябрь 2012, 21:17:42 »

какие данные вводите?
например: а1=2; а2=3; а3=4; а4=5; нижняя граница 0, верхняя 1, погрешность 0.00001, как только жму Enter - на мгновение появляется результат какой-то, который я не успеваю даже запомнить, и сразу же пропадает консоль. По идее еще должно выводиться полученное уравнение и ее производная, но ничего нет(((
Записан
RILLey_ELf
Гость
« Ответ #7 : 24 Ноябрь 2012, 14:00:07 »

http://codepad.org/ZCly9dSg
Смотрите вот ваша программа (код изменился только входными данными, чтобы они по умолчанию были)
И она работает и всё нормально выдаёт.

Может попробуйте паузу в конце вывода? Возможно программа работает как надо и выводит то, что надо. Но после отработки окно закрывается и вы просто не видите результат.
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #8 : 24 Ноябрь 2012, 17:57:54 »

http://codepad.org/ZCly9dSg
Смотрите вот ваша программа (код изменился только входными данными, чтобы они по умолчанию были)
И она работает и всё нормально выдаёт.

Может попробуйте паузу в конце вывода? Возможно программа работает как надо и выводит то, что надо. Но после отработки окно закрывается и вы просто не видите результат.
Да, после отработки окно закрывается и я не вижу результат, об этом я и писала.  Уже не знаю что и делать и как поставить на паузу((((
« Последнее редактирование: 24 Ноябрь 2012, 19:28:25 от Al4enok » Записан
Hackett
Почетный гродненец
*****

Репутация: +61/-0
Offline Offline

Пол: Мужской
Сообщений: 1920


Rock On!

Просмотр профиля
« Ответ #9 : 24 Ноябрь 2012, 20:41:34 »

1) Например, запускайте ваш скомпилированный файл из консоли
2) Например, добавьте в самом конце cin после вывода результата
Записан

Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #10 : 24 Ноябрь 2012, 21:23:40 »

1) Например, запускайте ваш скомпилированный файл из консоли
2) Например, добавьте в самом конце cin после вывода результата
Увы, ничего у меня не получается  Грустный на мгновение выводит результат, возможно правильный и сразу же закрывается, остается только отладка.
Записан
DimaFromGrodno
Настоящий гродненец
****

Репутация: +172/-2
Offline Offline

Пол: Мужской
Сообщений: 875

Просмотр профиля Email
« Ответ #11 : 25 Ноябрь 2012, 23:03:40 »

Вы вообще в какой среде пишете? (может стесняется человек лишние cin тыкать в код  Смеющийся)

А вообще, не советывал бы я вам так double сравнивать
Записан
RILLey_ELf
Гость
« Ответ #12 : 25 Ноябрь 2012, 23:16:41 »

про double сравнение ничего страшного учитывая, что оно в ИЛИ с оператором больше.
конечно лучше сразу одним оператором записать, но и так работать будет

добавляйте в конце

char c; cin >> c;

если после этого не будет останавливаться - то только отладкой - проблема конкретно в вашем компиляторе (кстати что за он? )
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #13 : 26 Ноябрь 2012, 10:49:52 »

Работаю в среде Visual Studio 2010

Добавлено: 26 Ноябрь 2012, 10:53:49
про double сравнение ничего страшного учитывая, что оно в ИЛИ с оператором больше.
конечно лучше сразу одним оператором записать, но и так работать будет

добавляйте в конце

char c; cin >> c;

если после этого не будет останавливаться - то только отладкой - проблема конкретно в вашем компиляторе (кстати что за он? )
Возможно глупый вопрос, но где именно в конце добавить char c; cin >> c;Непонимающий Обеспокоенный
Записан
Hackett
Почетный гродненец
*****

Репутация: +61/-0
Offline Offline

Пол: Мужской
Сообщений: 1920


Rock On!

Просмотр профиля
« Ответ #14 : 26 Ноябрь 2012, 11:04:16 »

....
void Calculation()
{
     double x=0, m=0;
     cout<<"-------------------------------------------------"<<endl
         <<"|      Xn       |     f(Xn)     |   |f(Xn)|/m   |"<<endl
         <<"-------------------------------------------------"<<endl;
     if (abs(Calc_Fun(minim))*abs(Calc_Second(minim))>0) x=minim;
     else x=maxim;
     if (Calc_First(minim)>Calc_First(maxim)) m=abs(Calc_First(maxim));
     else m=abs(Calc_First(minim));
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<x;
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<Calc_Fun(x);
     cout<<"|";
     cout.width(15);cout.precision(10);
     cout<<(fabs(Calc_Fun(x))/m);
     cout<<"|
";
     while((fabs(Calc_Fun(x))/m)>prec)
     {
          x=(x-(Calc_Fun(x)/Calc_First(x)));
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<x;
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<Calc_Fun(x);
          cout<<"|";
          cout.width(15);cout.precision(10);
          cout<<fabs(Calc_Fun(x))/m;
          cout<<"|
";
     }
     cout<<"-------------------------------------------------";
     СЮДА НАПРИМЕР
}
...
Все же почитайте какую-нибудь книгу по c++

Добавлено: 26 Ноябрь 2012, 11:06:18
Работаю в среде Visual Studio 2010
Вроде если запускать в дебаг моде, то пишет в свою консоль... Нету сейчас под рукой VS2010 с крестами
Записан

Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #15 : 26 Ноябрь 2012, 11:21:43 »

Огромное всем спасибо!!!!! Улыбка Улыбка Улыбка Получилось!!!!!!
Записан
RILLey_ELf
Гость
« Ответ #16 : 26 Ноябрь 2012, 11:23:34 »

жалко, что вы не понимаете, где конец _вашей_ программы Грустный
дальше будет только хуже.
Записан
Al4enok
Молодой Гродненец
*

Репутация: +0/-0
Offline Offline

Сообщений: 23


Просмотр профиля Email
« Ответ #17 : 26 Ноябрь 2012, 18:38:46 »

жалко, что вы не понимаете, где конец _вашей_ программы Грустный
дальше будет только хуже.
я прекрасно понимаю, где конец моей программы, и также понимаю что до хорошего программиста мне еще далеко))
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2024, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,154 секунд. Запросов: 19.