All pastes #979715 Raw Edit

Someone

public text v1 · immutable
·published 2008-04-10 15:30 UTC
rendered paste body
/*
Öåë : Òîâà å ïðîãðàìà íàìèðàùà êîðåí íà ïðîèçâîëíî âúâåäåíà ôóíêöèÿ è íåéíèòå ãðàíèöè èçïîëçâàéêè ìåòîäà íà ðàçïîëîâÿâàíåòî.
Àâòîð : Õðèñòîìèð Íåäÿëîâ Èâàíîâ. 
Êîìïèëàòîð : Dev-C++ . ÎÑ : Windows Vista .
Äàòà : 10 àïðèë 2008ã. 
*/

using namespace std;
#include <iostream>
#include <math.h>

     double IntervalHigh,
            IntervalLow,
            Tochnost = 0.000001;

int PoziciaNaUravnenieto = 0;

char Uravnenie[ 129 ],
     Element[ 129 ];

void PrintHeader();
void VzemiInterval();
void VzemiUravnenie();
void VzemiTochnost();
void NamiraneNaKoren();
char VzemiElement();
double F( double x);
double PresmetniElement( double x );

int main()
{
     char Answer[ 129 ] = { 'Y', 0 };
     while( ( Answer[ 0 ] == 'Y' ) || ( Answer[ 0 ] == 'y' ) )
   {
     PrintHeader();
	 VzemiUravnenie();
	 VzemiInterval();
	 VzemiTochnost();
	 system("pause");
     NamiraneNaKoren();
     system("pause");
     Answer[ 0 ] = 0;
     printf( "\n\n\n" );
  
  while( strlen( Answer ) != 1 )
     {
           printf( "Iskate li da prodyljite s nova zadacha? (Y=Yes) :" );
            gets( Answer );
     }
   }
     return 1;
}

void PrintHeader()                                                                                       //Èíôîðìàöèîííà ÷àñò ÷àñò
{
    printf( "\n\nTazi programa namira koren na f(x)=0 po metoda na razpoloviavaneto\n\n\n"              
            "Avtor: Hristomir Neialkov Ivanov\n""Studnet v: Burgaski svoboden universitet\n"
            "Specialnost: Informatika i komputyrni nauki\nFakulteten nomer: 0731007\nKurs: I-vi\n\n" );
}

void VzemiUravnenie()                                                                                    //Âúâåæäàíå è ïðîâåðêà äúëæèíàòà íà âúâåäåíàòà ôóíêöèÿ
{
    Uravnenie[ 0 ] = 0;                                                                                

    while( strlen( Uravnenie ) < 2 )
    {
        printf( "\nVyvedete jelanata funkciq f(x)=" );
        gets( Uravnenie );
        if( strlen( Uravnenie ) < 2 )
            printf( "\n\7Uravnenieto trqbva da byde pone 2 simvola!\n\n" );
    }
}

void VzemiInterval()                                                                                     //Âúâåæäàíå è ïðîâåðêà íà èíòåðâàëèòå íà ôóíêöèïòà
{
    char VremenenNiz[ 129 ],
         Done = 0;
    while( !Done )
    {
        Done = 1;
        VremenenNiz[ 0 ] = 0;
        while( !strlen( VremenenNiz ) )
        {
            printf( "\nVyvedete dolnata granica na intervala za tyrsene: " );
            gets( VremenenNiz );
        }
        IntervalLow = atof( VremenenNiz );
        VremenenNiz[ 0 ] = 0;
        while( !strlen( VremenenNiz ) )
        {
            printf( "Vyvedete gornata granica na intervala za tyrsene: " );
            gets( VremenenNiz );
        }
        IntervalHigh = atof( VremenenNiz );                                                                   
        if( IntervalLow == IntervalHigh )
        {
            Done = 0;
            printf( "\n\7Gornata i dolnata granica na intervala syvpadat. Molq, vyvedete novi granici.\n" );
        }
        if( IntervalLow > IntervalHigh )
        {
            Done = 0;
            printf( "\n\7Dolnata granica na intervala e po-golqma ot gornata. Molq, vyvedete novi granici.\n" );
        }
    }

}    

void VzemiTochnost()                                                                                      //Âúâåæäàíå íà òî÷íîñò èëè çàïàçâàíå íà ïðåäâàðèòåëíî çàäàäåíàòà                                                                             //
{
    char VremenenNiz[ 129 ];
    printf( "\nShte byde izpolzvana standartna tochnost %1.6f\n"
            "Vyvedete tochnost, koqto iskate da se izpolva\n"
            "ili natisnete ENTER za zapazvane na standartnata: ", Tochnost );
    gets( VremenenNiz );
    if( ( atof( VremenenNiz ) ) &&
        ( atof( VremenenNiz ) > 0 ) )
        Tochnost = atof( VremenenNiz );
    printf( "\nIzpolzvana tochnost: %1.6f\n\n", Tochnost );
}

void NamiraneNaKoren()                                                                                     //Èç÷èñëÿâàíå íà âúâåäåíàòà ôóíêöèÿ è íàìèðàíå íà êîðåí
{      
     double low = IntervalLow,
            high = IntervalHigh,
            middle, value;
      
    while( 1 )
    {
        middle = low + ( high - low ) / 2;
        value = F(low)*F(high);
        printf( "Interval: %2.6f : %2.6f;\n x=%2.6f, Rezultat: %f2,6\n", low, high, middle, value );

        if( fabs( value ) < Tochnost )
        {
            printf( "\nKorenyt e: %2.6f\n", middle );
            break;;
        }

        if( high == low )
        {
            printf( "\nNqma koren v posocheniq interval!\7\n" );
            break;
        }

        if( F(low)*F(middle) < 0 )
            high = middle;
        else
            low = middle;
    }
}

double F(double x)
{        
    double VyrniStoinost = 0;
    PoziciaNaUravnenieto = 0;
    while( VzemiElement() )
        VyrniStoinost += PresmetniElement( x );
    return VyrniStoinost;
}

double PresmetniElement( double x )
{
    double Temp = 0,
           VyrniStoinost = 0;
    int    Loop = 1,
           Exponent = 0;
  
    if( ( Element[ 1 ] >= '0' ) && ( Element[ 1 ] <= '9' ) )
    {
        for(; Loop < strlen( Element ); Loop++ )
        {
            if( ( Element[ Loop ] < '0' ) || ( Element[ Loop ] > '9' ) )
                break;
            if( !Temp )
                Temp = Element[ Loop ] - 48;
            else
                Temp = Temp * 10 + Element[ Loop ] - 48;
        }
    }

    if( ( Element[ Loop ] == 'x' ) || ( Element[ Loop ] == 'X' ) )
    {
        if ( Element[ Loop + 1 ] == '^' )
        {
            for( Loop += 2; Loop < strlen( Element ); Loop++ )
            {
                if( ( Element[ Loop ] < '0' ) || ( Element[ Loop ] > '9' ) )
                    break;
                if( !Exponent )
                    Exponent = Element[ Loop ] - 48;
                else
                    Exponent = Exponent * 10 + Element[ Loop ] - 48;
            }
        }
        else
            Exponent = 1;
    }

    if( Temp )
        VyrniStoinost = Temp;
    else
        VyrniStoinost = 1;

    if( Exponent )
        VyrniStoinost *= pow( x, Exponent );

    if( Element[ 0 ] == '-' )
        VyrniStoinost = -VyrniStoinost;

    return VyrniStoinost;
}

char VzemiElement()
{
    char VyrniStoinost = 0,
         VremenenNiz[ 2 ] = { 0, 0 };
    Element[ 0 ] = 0;

    if( !PoziciaNaUravnenieto )
    {
        if( Uravnenie[ 0 ] == '-' )
        {
            strcat( Element, "-" );
            PoziciaNaUravnenieto++;
        }
        else
        {
            strcat( Element, "+" );
            if( Uravnenie[ 0 ] == '+' )
                PoziciaNaUravnenieto++;
        }
    }
    else
    {
        if( ( Uravnenie[ PoziciaNaUravnenieto ] == '+' ) ||
            ( Uravnenie[ PoziciaNaUravnenieto ] == '-' ) )
        {
            VremenenNiz[ 0 ] = Uravnenie[ PoziciaNaUravnenieto ];
            strcat( Element, VremenenNiz );
            PoziciaNaUravnenieto++;
        }
    }
    for(; PoziciaNaUravnenieto < strlen( Uravnenie ); PoziciaNaUravnenieto++ )
    {
        if( ( Uravnenie[ PoziciaNaUravnenieto ] == '+' ) || ( Uravnenie[ PoziciaNaUravnenieto ] == '-' ) )
            break;
        VremenenNiz[ 0 ] = Uravnenie[ PoziciaNaUravnenieto ];
        strcat( Element, VremenenNiz );
        VyrniStoinost = 1;
    }
    return VyrniStoinost;
}