Sunday, January 6, 2013

Program C Metode Biseksi

Program di bawah ini merupakan program penyelesaian non linear menggunakan metode biseksi.
Flowchart Program :

Source Code :


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <windows.h>


void input(int *a,int *b,int *c,int *d,int *e,float *xn, float *xn1,float *error);
float hitungxmid(float xn, float xn1);
float hitungfxn(float a,float b, float c, float d,float e,float xn);
float hitungfxn1(float a,float b, float c, float d,float e,float xn1);
float hitungfxmid(float a,float b, float c, float d,float e,float xmid);
void switchval(float *xn, float*xn1,float*xmid,float*fxn,float*fxmid);
void output(float *xn,float *xn1,float *xmid,float *fxn,float *fxn1,float *fxmid,int *count);

//FUNGSI UTAMA
int main(){
    char repeat;
    do{
    SetConsoleTitle("Created By Herdian");
    int a,b,c,d,e,count=1;
    float xn, xn1,error,xmid,fxn,fxn1,fxmid;
 
    system("cls");
 
    printf("\t\t\tPROGRAM BISEKSI\n\n");
    input(&a,&b,&c,&d,&e,&xn,&xn1,&error);
 
    while(fabs(xn1-xn)>= error){
    xmid=hitungxmid(xn,xn1);
    fxn=hitungfxn(a,b,c,d,e,xn);
    fxn1=hitungfxn(a,b,c,d,e,xn1);
    fxmid=hitungfxmid(a,b,c,d,e,xmid);
    output(&xn,&xn1,&xmid,&fxn,&fxn1,&fxmid,&count);
    switchval(&xn,&xn1,&xmid,&fxn,&fxmid); count++;
    }
    printf("Ingin Mengulang Program ? <Y/N>"); repeat=getch();
    }while(repeat=='y'||repeat=='Y');
}

//FUNGSI INPUT
void input(int *a,int *b,int *c,int *d,int *e,float *xn, float *xn1,float *error){

printf("f(x)= (a)x^4 + (b)x^3 + (c)x^2 + (d)x + e\n");
printf("\nINPUT:\n");
printf("a = "); scanf("%d",a); fflush(stdin);
printf("b = "); scanf("%d",b); fflush(stdin);
printf("c = "); scanf("%d",c); fflush(stdin);
printf("d = "); scanf("%d",d); fflush(stdin);
printf("e = "); scanf("%d",e); fflush(stdin);
printf("\ninputkan xn, xn+1 dan batas error\n");
printf("xn   = "); scanf("%f",xn); fflush(stdin);
printf("xn+1 = "); scanf("%f",xn1); fflush(stdin);
printf("batas error = "); scanf("%f",error); fflush(stdin);

}
//FUNGSI HITUNG XMID
float hitungxmid(float xn, float xn1){
float xmid;
xmid = (xn + xn1)/2;
return(xmid);  
}

//FUNGSI HITUNG F(xn)
float hitungfxn(float a,float b, float c, float d,float e,float xn){
float fxn;
fxn = ((a*pow(xn,4))+(b*pow(xn,3))+(c*pow(xn,2))+(d*xn)+e);
return (fxn);
}

//FUNGSI HITUNG F(xn+1)
float hitungfxn1(float a,float b, float c, float d,float e,float xn1){
float fxn1;
fxn1 = ((a*pow(xn1,4))+(b*pow(xn1,3))+(c*pow(xn1,2))+(d*xn1)+e);
return (fxn1);
}

//FUNGSI HITUNG F(xmid)
float hitungfxmid(float a,float b, float c, float d,float e,float xmid){
float fxmid;
fxmid = ((a*pow(xmid,4))+(b*pow(xmid,3))+(c*pow(xmid,2))+(d*xmid)+e);
return (fxmid);
}

//FUNGSI MENUKAR NILAI
void switchval(float *xn, float*xn1,float*xmid,float*fxn,float*fxmid){
if((*fxn) * (*fxmid) < 0 ) {*xn1 = *xmid; }
else if ((*fxn) * (*fxmid) > 0 )*xn = *xmid;
}

//FUNGSI OUTPUT
void output(float *xn,float *xn1,float *xmid,float *fxn,float *fxn1,float *fxmid,int *count){
if(*count==1){
printf("ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ\n");
printf("no    xn       xn+1      xmid      f(xn)      f(xn+1)    f(xmid) \n");
printf("ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ\n");}
printf("%0d   %f  %f  %f  %f  %f   %f  \n",*count,*xn,*xn1,*xmid,*fxn,*fxn1,*fxmid);

}