# include <iostream.h>
# include <stdlib.h>
# include <string.h>
# include <stdio.h>
# include <conio.h>
# include <math.h>
constint max_size=13;
int n=0;
int top=-1;
int error_flag=0;
longdouble xn[max_size]={0};
longdouble fx[max_size]={0};
char Sx[max_size][100]={NULL};
char Dsx[max_size][100]={NULL};
char D2sx[max_size][100]={NULL};
char Stack[30][30]={NULL};
char Postfix_expression[max_size][30][30]={NULL};
/*************************************************************************//*************************************************************************///------------------------ Funcion Prototypes -------------------------///*************************************************************************//*************************************************************************/void push(constchar *);
void convert_ie_to_pe(constchar *,constint);
constchar* pop( );
constlongdouble evaluate_postfix_expression(constlongdouble,constint);
void show_screen( );
void clear_screen( );
void get_input( );
void get_polynomials( );
void get_first_derivatives( );
void get_second_derivatives( );
void check_condition_1( );
void check_condition_2( );
void check_condition_3( );
void check_condition_4( );
void check_condition_5( );
void check_natural_boundry_conditions( );
void check_clamped_boundry_conditions( );
void show_result( );
/*************************************************************************//*************************************************************************///------------------------------ main( ) ------------------------------///*************************************************************************//*************************************************************************/int main( )
{
clrscr( );
textmode(C4350);
show_screen( );
get_input( );
get_polynomials( );
get_first_derivatives( );
get_second_derivatives( );
check_condition_1( );
if(!error_flag)
check_condition_2( );
if(!error_flag)
check_condition_3( );
if(!error_flag)
check_condition_4( );
if(!error_flag)
check_condition_5( );
show_result( );
getch( );
return 0;
}
/*************************************************************************//*************************************************************************///------------------------ Funcion Definitions ------------------------///*************************************************************************//*************************************************************************//*************************************************************************///-------------------------- show_screen( ) ---------------------------///*************************************************************************/void show_screen( )
{
cprintf("\n********************************************************************************");
cprintf("***************************- -*************************");
cprintf("*--------------------------- ");
textbackground(1);
cprintf(" Cubic Spline Functions ");
textbackground(8);
cprintf(" -------------------------*");
cprintf("***************************- -*************************");
cprintf("*-****************************************************************************-*");
for(int count=0;count<42;count++)
cprintf("*-* *-*");
gotoxy(1,46);
cprintf("*-****************************************************************************-*");
cprintf("*------------------------------------------------------------------------------*");
cprintf("********************************************************************************");
gotoxy(1,2);
}
/*************************************************************************///------------------------- clear_screen( ) ---------------------------///*************************************************************************/void clear_screen( )
{
for(int count=0;count<37;count++)
{
gotoxy(5,8+count);
cout<<" ";
}
gotoxy(1,2);
}
/*************************************************************************///-------------------------- push(const char*) ------------------------///*************************************************************************/void push(constchar* Operand)
{
if(top==(max_size-1))
{
cout<<"Error : Stack is full."<<endl;
cout<<"\n Press any key to exit.";
getch( );
exit(0);
}
else
{
top++;
strcpy(Stack[top],Operand);
}
}
/*************************************************************************///------------------------------ pop( ) -------------------------------///*************************************************************************/constchar* pop( )
{
char Operand[40]={NULL};
if(top==-1)
{
cout<<"Error : Stack is empty."<<endl;
cout<<"\n Press any key to exit.";
getch( );
exit(0);
}
else
{
strcpy(Operand,Stack[top]);
strset(Stack[top],NULL);
top--;
}
return Operand;
}
/*************************************************************************///-------------- convert_ie_to_pe(const char*,const int) --------------///*************************************************************************/void convert_ie_to_pe(constchar* Expression,constint index)
{
char Infix_expression[100]={NULL};
char Symbol_scanned[30]={NULL};
push("(");
strcpy(Infix_expression,Expression);
strcat(Infix_expression,"+0)");
int flag=0;
int count_1=0;
int count_2=0;
int equation_length=strlen(Infix_expression);
if(Infix_expression[0]=='(')
flag=1;
do
{
strset(Symbol_scanned,NULL);
if(flag==0)
{
int count_3=0;
do
{
Symbol_scanned[count_3]=Infix_expression[count_1];
count_1++;
count_3++;
}
while(count_1<=equation_length &&
Infix_expression[count_1]!='(' &&
Infix_expression[count_1]!='+' &&
Infix_expression[count_1]!='-' &&
Infix_expression[count_1]!='*' &&
Infix_expression[count_1]!='/' &&
Infix_expression[count_1]!='^' &&
Infix_expression[count_1]!=')');
flag=1;
}
elseif(flag==1)
{
Symbol_scanned[0]=Infix_expression[count_1];
count_1++;
if(Infix_expression[count_1]!='(' &&
Infix_expression[count_1]!='^' &&
Infix_expression[count_1]!='*' &&
Infix_expression[count_1]!='/' &&
Infix_expression[count_1]!='+' &&
Infix_expression[count_1]!='-' &&
Infix_expression[count_1]!=')')
flag=0;
if(Infix_expression[count_1-1]=='(' &&
(Infix_expression[count_1]=='-' ||
Infix_expression[count_1]=='+'))
flag=0;
}
if(strcmp(Symbol_scanned,"(")==0)
push("(");
elseif(strcmp(Symbol_scanned,")")==0)
{
while(strcmp(Stack[top],"(")!=0)
{
strcpy(Postfix_expression[index][count_2],pop( ));
count_2++;
}
pop( );
}
elseif(strcmp(Symbol_scanned,"^")==0 ||
strcmp(Symbol_scanned,"+")==0 ||
strcmp(Symbol_scanned,"-")==0 ||
strcmp(Symbol_scanned,"*")==0 ||
strcmp(Symbol_scanned,"/")==0)
{
if(strcmp(Symbol_scanned,"^")==0)
{ }
elseif(strcmp(Symbol_scanned,"*")==0 ||
strcmp(Symbol_scanned,"/")==0)
{
while(strcmp(Stack[top],"^")==0 ||
strcmp(Stack[top],"*")==0 ||
strcmp(Stack[top],"/")==0)
{
strcpy(Postfix_expression[index][count_2],pop( ));
count_2++;
}
}
elseif(strcmp(Symbol_scanned,"+")==0 ||
strcmp(Symbol_scanned,"-")==0)
{
while(strcmp(Stack[top],"(")!=0)
{
strcpy(Postfix_expression[index][count_2],pop( ));
count_2++;
}
}
push(Symbol_scanned);
}
else
{
strcat(Postfix_expression[index][count_2],Symbol_scanned);
count_2++;
}
}
while(strcmp(Stack[top],NULL)!=0);
strcat(Postfix_expression[index][count_2],"=");
count_2++;
}
/*************************************************************************///----- evaluate_postfix_expression(const long double,const int) ------///*************************************************************************/constlongdouble evaluate_postfix_expression(
constlongdouble x,constint index)
{
longdouble function_value=0;
int count_1=-1;
char Symbol_scanned[30]={NULL};
do
{
count_1++;
strcpy(Symbol_scanned,Postfix_expression[index][count_1]);
if(strcmp(Symbol_scanned,"^")==0 ||
strcmp(Symbol_scanned,"*")==0 ||
strcmp(Symbol_scanned,"/")==0 ||
strcmp(Symbol_scanned,"+")==0 ||
strcmp(Symbol_scanned,"-")==0)
{
char Result[30]={NULL};
char Operand[2][30]={NULL};
strcpy(Operand[0],pop( ));
strcpy(Operand[1],pop( ));
longdouble operand[2]={0};
longdouble result=0;
char *endptr;
for(int count_2=0;count_2<2;count_2++)
{
int flag=0;
if(Operand[count_2][0]=='-')
{
int length=strlen(Operand[count_2]);
for(int count_3=0;count_3<(length-1);count_3++)
Operand[count_2][count_3]=Operand[count_2][(count_3+1)];
Operand[count_2][count_3]=NULL;
flag=1;
}
if(strcmp(Operand[count_2],"x")==0)
operand[count_2]=x;
elseif(strcmp(Operand[count_2],"e")==0)
operand[count_2]=2.718282;
elseif(strcmp(Operand[count_2],"sinx")==0)
operand[count_2]=sinl(x);
elseif(strcmp(Operand[count_2],"cosx")==0)
operand[count_2]=cosl(x);
elseif(strcmp(Operand[count_2],"tanx")==0)
operand[count_2]=tanl(x);
elseif(strcmp(Operand[count_2],"lnx")==0)
operand[count_2]=logl(x);
elseif(strcmp(Operand[count_2],"logx")==0)
operand[count_2]=log10l(x);
else
operand[count_2]=strtod(Operand[count_2],&endptr);
if(flag)
operand[count_2]*=-1;
}
switch(Symbol_scanned[0])
{
case'^' : result=powl(operand[1],operand[0]);
break;
case'*' : result=operand[1]*operand[0];
break;
case'/' : result=operand[1]/operand[0];
break;
case'+' : result=operand[1]+operand[0];
break;
case'-' : result=operand[1]-operand[0];
break;
}
gcvt(result,25,Result);
push(Result);
}
elseif(strcmp(Symbol_scanned,"=")!=0)
push(Symbol_scanned);
}
while(strcmp(Symbol_scanned,"=")!=0);
char Function_value[30]={NULL};
char *endptr;
strcpy(Function_value,pop( ));
function_value=strtod(Function_value,&endptr);
return function_value;
}
/*************************************************************************///----------------------------- get_input( ) --------------------------///*************************************************************************/void get_input( )
{
do
{
clear_screen( );
gotoxy(6,9);
cout<<"Number of Distinct Data Points :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(27,13);
cout<<"[ min. n = 3 | max. n = 12 ]";
gotoxy(6,12);
cout<<"Enter the max. number of distinct data points = n = ";
cin>>n;
if(n<3 || n>12)
{
gotoxy(12,25);
cout<<"Error : Wrong Input. Press <Esc> to exit or any other key";
gotoxy(12,26);
cout<<" to try again.";
n=int(getche( ));
if(n==27)
exit(0);
}
}
while(n<3 || n>12);
clear_screen( );
gotoxy(6,9);
cout<<"Data Points & Values of Function :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(25,12);
cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
gotoxy(25,13);
cout<<"³ x ³ f(x) ³";
gotoxy(25,14);
cout<<"ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´";
gotoxy(25,15);
cout<<"³ ³ ³";
for(int count_1=0;count_1<n;count_1++)
{
gotoxy(25,(wherey( )+1));
cout<<"³ ³ ³";
gotoxy(25,(wherey( )+1));
cout<<"³ ³ ³";
}
gotoxy(25,(wherey( )+1));
cout<<"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
gotoxy(25,15);
for(int count_2=0;count_2<n;count_2++)
{
gotoxy(25,(wherey( )+1));
gotoxy(27,wherey( ));
cin>>xn[count_2];
gotoxy(43,(wherey( )-1));
cin>>fx[count_2];
}
gotoxy(25,43);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ get_polynomials( ) -------------------------///*************************************************************************/void get_polynomials( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Cubic Polynomials :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(6,12);
cout<<"Note : Write the Polynomials with proper Braces e.g; 2x+3 as (2*x)+3.";
gotoxy(10,15);
for(int count=0;count<(n-1);count++)
{
gotoxy(10,(wherey( )+1));
cout<<"S"<<count<<"(x) = ";
gotoxy(wherex( ),wherey( ));
cin>>Sx[count];
convert_ie_to_pe(Sx[count],count);
}
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///---------------------- get_first_derivatives( ) ---------------------///*************************************************************************/void get_first_derivatives( )
{
clear_screen( );
gotoxy(6,9);
cout<<"First Derivatives :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(6,12);
cout<<"Note : Write the function with proper Braces e.g; 2x+3 as (2*x)+3.";
gotoxy(10,15);
for(int count=0;count<(n-1);count++)
{
gotoxy(10,(wherey( )+1));
cout<<"S'"<<count<<"(x) = ";
gotoxy(wherex( ),wherey( ));
cin>>Dsx[count];
}
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///--------------------- get_second_derivatives( ) ---------------------///*************************************************************************/void get_second_derivatives( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Second Derivatives :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(6,12);
cout<<"Note : Write the function with proper Braces e.g; 2x+3 as (2*x)+3.";
gotoxy(10,15);
for(int count=0;count<(n-1);count++)
{
gotoxy(10,(wherey( )+1));
cout<<"S\""<<count<<"(x) = ";
gotoxy(wherex( ),wherey( ));
cin>>D2sx[count];
}
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ check_condition_1( ) -----------------------///*************************************************************************/void check_condition_1( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Condition-I :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(12,12);
cout<<"S is a Cubic Polynomial, denoted by Si, on the interval [xi,xi+1]";
gotoxy(6,14);
cout<<"for each i=0,1,2,...,n-1.";
gotoxy(10,15);
for(int count=0;count<(n-1);count++)
{
gotoxy(10,(wherey( )+2));
cout<<"S"<<count<<"(x) = "<<Sx[count]<<" , "<<xn[count]<<"óxó"<<xn[(count+1)];
}
gotoxy(10,(wherey( )+3));
cout<<"*** Condition-I proved.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ check_condition_2( ) -----------------------///*************************************************************************/void check_condition_2( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Condition-II :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"S(xi) = f(xi) , for each i=0,1,2,...,n";
longdouble sx=0;
gotoxy(10,14);
for(int count=0;count<n;count++)
{
sx=0;
if(count==(n-1))
sx=evaluate_postfix_expression(xn[count],(count-1));
else
sx=evaluate_postfix_expression(xn[count],count);
gotoxy(10,(wherey( )+2));
cout<<"S("<<xn[count]<<") = "<<sx;
gotoxy(35,wherey( ));
cout<<"f("<<xn[count]<<") = "<<fx[count];
gotoxy(60,wherey( ));
if(sx==fx[count])
cout<<", Ok";
else
{
cout<<", Failed";
error_flag=1;
break;
}
}
gotoxy(10,(wherey( )+3));
if(!error_flag)
cout<<"*** Condition-II proved.";
else
cout<<"*** Condition-II failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ check_condition_3( ) -----------------------///*************************************************************************/void check_condition_3( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Condition-III :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"Si(xi+1) = Si+1(xi+1) , each for i=0,1,2,...,n-2";
longdouble six=0;
longdouble sip1x=0;
gotoxy(10,14);
for(int count=0;count<(n-2);count++)
{
six=0;
sip1x=0;
six=evaluate_postfix_expression(xn[(count+1)],count);
sip1x=evaluate_postfix_expression(xn[(count+1)],(count+1));
gotoxy(10,(wherey( )+2));
cout<<"S"<<count<<"("<<xn[(count+1)]<<") = "<<six;
gotoxy(35,wherey( ));
cout<<"S"<<(count+1)<<"("<<xn[(count+1)]<<") = "<<sip1x;
gotoxy(60,wherey( ));
if(six==sip1x)
cout<<", Ok";
else
{
cout<<", Failed";
error_flag=1;
break;
}
}
gotoxy(10,(wherey( )+3));
if(!error_flag)
cout<<"*** Condition-III proved.";
else
cout<<"*** Condition-III failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ check_condition_4( ) -----------------------///*************************************************************************/void check_condition_4( )
{
for(int count_1=0;count_1<n;count_1++)
{
for(int count_2=0;count_2<30;count_2++)
strset(Postfix_expression[count_1][count_2],NULL);
convert_ie_to_pe(Dsx[count_1],count_1);
}
clear_screen( );
gotoxy(6,9);
cout<<"Condition-IV :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"S'i(xi+1) = S'i+1(xi+1) , for each i=0,1,2,...,n-2";
longdouble six=0;
longdouble sip1x=0;
gotoxy(10,14);
for(int count_3=0;count_3<(n-2);count_3++)
{
six=0;
sip1x=0;
six=evaluate_postfix_expression(xn[(count_3+1)],count_3);
sip1x=evaluate_postfix_expression(xn[(count_3+1)],(count_3+1));
gotoxy(10,(wherey( )+2));
cout<<"S'"<<count_3<<"("<<xn[(count_3+1)]<<") = "<<six;
gotoxy(35,wherey( ));
cout<<"S'"<<(count_3+1)<<"("<<xn[(count_3+1)]<<") = "<<sip1x;
gotoxy(60,wherey( ));
if(six==sip1x)
cout<<", Ok";
else
{
cout<<", Failed";
error_flag=1;
break;
}
}
gotoxy(10,(wherey( )+3));
if(!error_flag)
cout<<"*** Condition-IV proved.";
else
cout<<"*** Condition-IV failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///------------------------ check_condition_5( ) -----------------------///*************************************************************************/void check_condition_5( )
{
for(int count_1=0;count_1<n;count_1++)
{
for(int count_2=0;count_2<30;count_2++)
strset(Postfix_expression[count_1][count_2],NULL);
convert_ie_to_pe(D2sx[count_1],count_1);
}
clear_screen( );
gotoxy(6,9);
cout<<"Condition-V :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"S\"i(xi+1) = S\"i+1(xi+1) , for each i=0,1,2,...,n-2";
longdouble six=0;
longdouble sip1x=0;
gotoxy(10,14);
for(int count_3=0;count_3<(n-2);count_3++)
{
six=0;
sip1x=0;
six=evaluate_postfix_expression(xn[(count_3+1)],count_3);
sip1x=evaluate_postfix_expression(xn[(count_3+1)],(count_3+1));
gotoxy(10,(wherey( )+2));
cout<<"S\""<<count_3<<"("<<xn[(count_3+1)]<<") = "<<six;
gotoxy(35,wherey( ));
cout<<"S\""<<(count_3+1)<<"("<<xn[(count_3+1)]<<") = "<<sip1x;
gotoxy(60,wherey( ));
if(six==sip1x)
cout<<", Ok";
else
{
cout<<", Failed";
error_flag=1;
break;
}
}
gotoxy(10,(wherey( )+3));
if(!error_flag)
cout<<"*** Condition-V proved.";
else
cout<<"*** Condition-V failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///--------------- check_natural_boundry_conditions( ) -----------------///*************************************************************************/void check_natural_boundry_conditions( )
{
for(int count_1=0;count_1<n;count_1++)
{
for(int count_2=0;count_2<30;count_2++)
strset(Postfix_expression[count_1][count_2],NULL);
convert_ie_to_pe(D2sx[count_1],count_1);
}
clear_screen( );
gotoxy(6,9);
cout<<"Natural Boundry Conditions :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"S\"(x0) = S\"(xn) = 0";
longdouble d2sx0=0;
longdouble d2sxn=0;
d2sx0=evaluate_postfix_expression(xn[0],0);
d2sxn=evaluate_postfix_expression(xn[(n-1)],(n-2));
gotoxy(10,16);
cout<<"S\"("<<xn[0]<<") = "<<d2sx0;
gotoxy(10,18);
cout<<"S\"("<<xn[(n-1)]<<") = "<<d2sxn;
gotoxy(10,22);
if(d2sx0==0 && d2sxn==0)
{
cout<<"S\"("<<xn[0]<<") = S\"("<<xn[(n-1)]<<") = 0 , Ok";
error_flag=4;
}
else
{
cout<<"S\"("<<xn[0]<<") != S\"("<<xn[(n-1)]<<") != 0 , Failed";
error_flag=2;
}
gotoxy(10,25);
if(error_flag==4)
cout<<"*** Natural or Free Boundry Conditions proved.";
else
cout<<"*** Natural or Free Boundry Conditions Failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///--------------- check_clamped_boundry_conditions( ) -----------------///*************************************************************************/void check_clamped_boundry_conditions( )
{
for(int count_1=0;count_1<n;count_1++)
{
for(int count_2=0;count_2<30;count_2++)
strset(Postfix_expression[count_1][count_2],NULL);
convert_ie_to_pe(Dsx[count_1],count_1);
}
clear_screen( );
gotoxy(6,9);
cout<<"Clamped Boundry Conditions :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
cout<<"S'(x0) = f'(x0) && S'(xn) = f'(xn)";
longdouble dfx0=0;
longdouble dfxn=0;
longdouble dsx0=0;
longdouble dsxn=0;
gotoxy(6,16);
cout<<"Enter the value of f'(x0) = ";
cin>>dfx0;
gotoxy(6,18);
cout<<"Enter the value of f'(xn) = ";
cin>>dfxn;
dsx0=evaluate_postfix_expression(xn[0],0);
dsxn=evaluate_postfix_expression(xn[(n-1)],(n-2));
gotoxy(10,22);
cout<<"S'("<<xn[0]<<") = "<<dsx0;
gotoxy(10,24);
cout<<"S'("<<xn[(n-1)]<<") = "<<dsxn;
gotoxy(10,28);
if(dsx0==dfx0)
{
cout<<"S'("<<xn[0]<<") = f'("<<xn[0]<<") , Ok";
error_flag=5;
}
else
{
cout<<"S'("<<xn[0]<<") != f'("<<xn[0]<<") , Failed";
error_flag=3;
}
gotoxy(10,30);
if(dsxn==dfxn)
{
cout<<"S'("<<xn[(n-1)]<<") = f'("<<xn[(n-1)]<<") , Ok";
error_flag=5;
}
elseif(dsxn!=dfxn)
{
cout<<"S'("<<xn[(n-1)]<<") != f'("<<xn[(n-1)]<<") , Failed ";
error_flag=3;
}
gotoxy(10,33);
if(error_flag==5)
cout<<"*** Clamped Boundry Conditions proved.";
else
cout<<"*** Clamped Boundry Conditions Failed.";
gotoxy(25,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///--------------------------- show_result( ) --------------------------///*************************************************************************/void show_result( )
{
clear_screen( );
gotoxy(6,9);
cout<<"Result :";
gotoxy(6,10);
cout<<"ÍÍÍÍÍÍÍÍ";
gotoxy(10,12);
if(error_flag==1)
cout<<"The given function is not a Cubic Spline.";
else
{
if(error_flag==0)
cout<<"The given function is a Cubic Spline.";
elseif(error_flag==2)
cout<<"The given function is a Cubic Spline but not Natural Spline.";
elseif(error_flag==3)
cout<<"The given function is a Cubic Spline but not Clamped Spline.";
elseif(error_flag==4)
cout<<"The given function is a Natural Cubic Spline.";
elseif(error_flag==5)
cout<<"The given function is a Clamped Cubic Spline.";
gotoxy(6,19);
cout<<"Nature of Spline Function :";
gotoxy(6,20);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(8,23);
cout<<"Press :";
gotoxy(10,25);
cout<<"- <N> to Test for Natural Cubic Spline";
gotoxy(10,27);
cout<<"- <C> to Test for Clamped Cubic Spline";
gotoxy(10,29);
cout<<"- <Esc> to Exit";
gotoxy(6,32);
cout<<"Enter your choice : ";
char Choice=getch( );
if(Choice=='N' || Choice=='n')
{
check_natural_boundry_conditions( );
show_result( );
}
elseif(Choice=='C' || Choice=='c')
{
check_clamped_boundry_conditions( );
show_result( );
}
else
{
cout<<"Esc";
exit(0);
}
}
gotoxy(1,2);
}