Нужно чтобы пользователь вводил данные функции double func(double c) и её производной double func2(double c) с клавиатуры.
Вот сам код:
Код:
#include<iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double a,b,E;
double func(double c){
return c*c*c-2*c*c+3*c+5;
}
double func2(double c){
return 6*c-4;
}
//----funkcija vvoda znachenij----//
void enter(){
clrscr();
printf("Vvedite otrezok [a;b], kotorii na kotorom vi hotite najti koren':\n");
scanf("%lf %lf",&a,&b);
if(a>b)
{printf("\n\na ne mozhet bit' bolshe b\n");
getch();
enter();
}
if(a==b)
{printf("\n\nEto ne otrezok\n");
getch();
enter();
}
printf("\nVvedite Eps:\n");
scanf("%lf",&E);
}
//-----Funkcija podscheta----//
void m_hord(double c,double d){
double x,x1;
char i=0;
x1=0;
printf("\n\n<<<Metod Hord>>>");
while(fabs(b-a)>E) // vipolnjaem do teh por poka tochnost'//
{
i++;
x=a-(func(a)*(b-a))/(func(b)-func(a)); // rekurentnaja formula dljametoda hord//
printf("\n %d %lf %lf %lf %lf",i,x,func(x),x-c,func(c)-func(x));
printf("\n%lf",x1-x); //vivodim raznost' mezdu iteracijami//
if(fabs(x1-x)<=E) //proverjaem tochnost'iteracii//
{
x=x;
break;
}
if((func(x)*func(b))>0) //esli f ne menjaet znak nf otrezke,to eto metod
//s zakreplennoj tochkoj//
b=x; //suzhaem verhnij predel//
else
a=x;//suzhaem nizhnij predel//
x1=x;
}
printf("\n\nPriblizitelnii koren raven = %lf",x);
}
//-----proverka analiticheskogo sposoba otdelenija kornej-----//
int proverka(double a,double b){
if((func(b)*func(a))>0) //esli znaki na koncah odinakovie.to zdes' net kornej//
{
printf("Ottdelennii otrezok ne imeet kornei!!");
return 1;
}
else
return 0;
}
int prov_hord(double a,double b){
if((func(a)*func2(a)<0)) //pogreschnost' ne streemitsja k//
return 1;
else
return 0;
}
main(){
do
{ textbackground(BLACK);
textcolor(YELLOW);
clrscr();
char komanda;
char g;
clrscr();
{
cout<<" .::Rechenie uravnenija metodom hord::.\n\n";
cout<<" ЪДДДДДДДДДДДДДДї\n";
cout<<" Г ѓ«*ў*®Ґ ¬Ґ*о ґ\n";
cout<<" АДДДДДДДДДДДДДДЩ\n";
cout<<" ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї\n";
cout<<" і±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±і\n";
cout<<" ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ\n";
cout<<" і1. Reshit' urawnenie і\n";
cout<<" і0. ‚л室 і\n";
cout<<" АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ\n";
cout<<"\n\nЉ®¬**¤г©вҐ - ";
cin>>komanda;
if(komanda=='0') break;
switch(komanda)
{
case '1':
{
clrscr();
enter();
break;
}
default:
{
clrscr();
cout<<" ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·\n";
cout<<" є ЋиЁЎЄ*: *ҐўҐа*® ўўҐ¤Ґ** Є®¬**¤*! є\n";
cout<<" є ‚ўҐ¤ЁвҐ Є®¬**¤г Ё§ бЇЁбЄ* *Ё¦Ґ. є\n";
cout<<" УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ\n";
}
break;
}
}
if(prov_hord(a,b)){
m_hord(a,b);
}
else
printf("\nK dannomu promezutku ne primenim metod hord!!!");
getch();
if(proverka(a,b)){
m_hord(a,b);
printf("Ottdelennii otrezok ne imeet kornei!!");
}
} while(1);
return 0;
}