Program C++ Untuk Mencari Rumus Suku ke-n & Jumlah Suku ke-n Arithmatika Bertingkat
Assalamualaikum wr. wb. Baiklah Kali ini penulis akan membagikan program c++ untuk mencari rumus suku ke-n dan jumlah suku ke-n dari suatu barisan arithmatika bertingkat. Pada program ini penulis menggunakan rumus yang menghasilkan output rumus suku ke-n dan jumlah suku ke-n yang sudah disederhanakan.
Baiklah tanpa basa-basi lagi berikut programnya :
#include<iostream> #include<stdlib.h> using namespace std; double Faktorial( double a){ double b = 1; for ( int i = 2; i <= a; i++){b = b*i;} return b; } //Modulo untuk tipe data double double DMOD( double a, double b){ long c = 1; double d = 1; c = a/b; d = a/b; return b*(d - c); } double Combination( double a, double b){ return Faktorial(a)/(Faktorial(a-b)*Faktorial(b));} double Pangkat( double a, double b){ double c = 1; for ( int i = 1;i <= b; i++){c = c*a;} return c; } int main(){ data: long i, j, l = 0, n = 0, t = 1, T = -1; char ques; bool c = 1, d = 1; double v = 0, w = 0, z = 0, y = 0, k = 0, r = 1, u = 1; double V = 0, N = 0, Y = 0; double *X = 0; double *Q = 0; double *S = 0; double *U = 0; double *x = 0; double *q = 0; cout<< "\n============ ARITHMATIKA BERTINGKAT ============" <<endl; cout<< "Apakah tingkat dari barisan tersebut sudah diketahui? (y/t)" ;cin>>ques; if (ques== 'y' ){ cout<< "Masukan tingkat barisan arithmatika tersebut." <<endl; cout<< "Tingkat = " ;cin>>t; U = new double [t+2]; X = new double [t+1]; Q = new double [t+1]; S = new double [t+2]; x = new double [t+2]; q = new double [t+2]; cout<< "Masukan nilai U-1 sampai U-" <<t+2<<endl; for (i=0;i<=t+1;i++){ cout<< "U-" <<i+1<< " = " ;cin>>U[i]; } } else if ( ques== 't' ){ cout<< "\nMasukan nilai dari suku-suku barisan tersebut." <<endl; for ( int i=0;i<t;i++){ delete []U;U=0; U = new double [t]; cout<< "U-" <<t<< "=" ;cin>>U[t - 1]; if (t>1){ for (j=0;j<t-1;j++){ U[j]=S[j]; } } delete []S;S=0; S = new double [t]; for (j=0;j<t;j++){ S[j]=U[j]; } v=0; for (j=0;j<t;j++){ v=Combination(t-1,j)*U[j]-v; } if (v==0){ cout<< "Sudah cukup?(y/t)" ;cin>>ques; if (ques == 'y' ){ delete []S;S=0; t=t-2; goto selesai; } } t++; } selesai: X = new double [t+1]; Q = new double [t+1]; S = new double [t+2]; x = new double [t+2]; q = new double [t+2]; } //proses pencarian rumus suku ke-n for (w=t+1;w>=1;w--){ //setel ulang nilai variabel, karena nilainya tidak akan tersetel ulang sendiri n=t-w;v=0;z=0;k=0;r=1; for (i=0;i<w;i++){v=Combination(w-1,i)*U[i]-v;} for (i=w;i<=t;i++){ //setel ulang nilai variabel y dan u y=0;u=1; for (j=1;j<=w;j++){y=Combination(w-1,j-1)*Pangkat(j,i)-y;} for (j=0;j<t-w+1;j++){ if (j!=n){u=u*Q[j];}} k=(y*X[n])*u+k; r=Q[n]*r; n--; } X[l]=v*r-k; Q[l]=Faktorial(w-1)*r; //proses penyederhanaan pecahan agar tidak terlalu memakan digit angka c=1;d=1; if (X[l]<0){ X[l]*=-1; c=0; } else if (X[l]==0){Q[l]=1;} if (Q[l]<0){ Q[l]*=-1; d=0; } if (X[l]<=Q[l]){v=X[l];} else if (Q[l]<X[l]){v=Q[l];} for (z=2;z<=v;z++){ if ((DMOD(Q[l],z)==0)&&(DMOD(X[l],z)==0)){ Q[l]/=z; X[l]/=z; if (X[l]<=Q[l]){v=X[l];} else if (Q[l]<X[l]){v=Q[l];} } if ((DMOD(Q[l],z)==0)&&(DMOD(X[l],z)==0)){z--;} } if (c==0){X[l]*=-1;} if (d==0){Q[l]*=-1;} l++; } //Proses pencarian rumus jumlah suku ke-n for (i=0;i<=t+1;i++){ if (i==0){ S[i]=U[i]; } else { S[i]=U[i]+S[i-1]; } } l=0; for (w=t+2;w>=1;w--){ //setel ulang nilai variabel, karena nilainya tidak akan tersetel ulang n=t-w+1;v=0;z=0;k=0;r=1; for (i=0;i<w;i++){v=Combination(w-1,i)*S[i]-v;} for (i=w;i<=t+1;i++){ //setel ulang nilai variabel y dan u y=0;u=1; for (j=1;j<=w;j++){y=Combination(w-1,j-1)*Pangkat(j,i)-y;} for (j=0;j<t-w+2;j++){ if (j!=n){u*=q[j];}} k=y*x[n]*u+k; r=q[n]*r; n--; } x[l]=v*r-k; q[l]=Faktorial(w-1)*r; //proses penyederhanaan pecahan agar tidak terlalu memakan digit angka c=1;d=1; if (x[l]<0){ x[l]*=-1; c=0; } else if (x[l]==0){q[l]=1;} if (q[l]<0){ q[l]*=-1; d=0; } if (x[l]<=q[l]){v=x[l];} else if (q[l]<x[l]){v=q[l];} for (z=2;z<=v;z++){ if ((DMOD(q[l],z)==0)&&(DMOD(x[l],z)==0)){ q[l]/=z; x[l]/=z; if (x[l]<=q[l]){v=x[l];} else if (q[l]<x[l]){v=q[l];} } if ((DMOD(q[l],z)==0)&&(DMOD(x[l],z)==0)){z--;} } if (c==0){x[l]*=-1;} if (d==0){q[l]*=-1;} l++; } rumus: cout<< "\nBarisan Arithmatika\t\t=" ; for (i=0;i<t+2;i++){ cout<<U[i]; if (i<t+1){cout<< "," ;} } T=-1; //Proses penampilan rumus suku ke-n cout<< "\nRumus Suku ke-n\t\t\t=" ; w=t; for (i=0;i<t+1;i++){ if (X[i]!=0){ if ((i>=1)&&((X[i]>0)||(Q[i]!=1))&&(T!=-1)){ cout<< "+" ; } if ((X[i]==1)&&(Q[i]==1)&&(i==t)){ cout<< "1" ; } else if ((Q[i]!=1)){ cout<< "(" <<X[i]<< "/" <<Q[i]<< ")" ; } else if ((Q[i]==1)&&(X[i]!=1)){ cout<<X[i]; } if (i<t){ cout<< "n" ; if (i<t-1){ cout<< "^" <<w; } if (T==-1){ T=w; } } } w--; } //Proses penampilan rumus jumlah suku ke-n cout<< "\nRumus Jumlah Suku ke-n\t\t=" ; T=-1; w=t+1; for (i=0;i<t+2;i++){ if (x[i]!=0){ if ((i>=1)&&((x[i]>0)||(q[i]!=1))&&(T!=-1)){ cout<< "+" ; } if ((x[i]==1)&&(q[i]==1)){ cout<< "" ; } if ((x[i]==1)&&(q[i]==1)&&(i==t+1)){ cout<< "1" ; } else if ((q[i]!=1)){ cout<< "(" <<x[i]<< "/" <<q[i]<< ")" ; } else if ((q[i]==1)&&(x[i]!=1)){ cout<<x[i]; } if (i<t+1){ cout<< "n" ; if (i<t){ cout<< "^" <<w; } if (T==-1){ T=w-1; } } } w--; } if ((ques == 'y' )&&(t!=T)){ cout<< "\nTingkat yang benar adalah\t=" <<T; } else { cout<< "\nTingkat\t\t\t\t=" <<T; } cin.ignore(); cout<< "\n\nTekan \"ENTER\" untuk pergi ke-menu pilihan" ; cin.get(); system( "cls" ); menu: l=0; cout<< "\n======= Tentukan Pilihan Anda =======" ; cout<< "\n1. Mencari Suku Ke-n." ; cout<< "\n2. Mencari Jumlah Suku Ke-n." ; cout<< "\n3. Mengganti Rumus Arithmatika." ; cout<< "\n4. Melihat Rumus." ; cout<< "\n5. Exit/Keluar." ; cout<< "\n=====================================" ; cout<< "\nPilihan=" ;cin>>l; system( "cls" ); if (l==1){ cout<< "====== U-n ======" <<endl; cout<< "Masukan nilai n." <<endl; cout<< "n\t=" ;cin>>N; Y=t;V=0; for (i=0;i<t+1;i++){ V=(X[i]/Q[i])*Pangkat(N,Y)+V; Y--; } cout<< "U-" <<N<< "\t=" <<V; cout<< "\n=================" <<endl; } else if (l==2){ cout<< "====== S-n ======" <<endl; cout<< "Masukan nilai n." <<endl; cout<< "n\t=" ;cin>>N; Y=t+1;V=0; for (i=0;i<t+2;i++){ V=(x[i]/q[i])*Pangkat(N,Y)+V; Y--; } cout<< "S-" <<N<< "\t=" <<V; cout<< "\n=================" <<endl; } else if (l==3){ //Membebaskan memori yang telah dipesan delete []X; delete []U; delete []x; delete []S; delete []Q; delete []q; Q=0;q=0;x=0;S=0;U=0;X=0; goto data; } else if (l==4){ goto rumus; } else if (l==5){ goto keluar; } else { cin.ignore(); cout<< "Pilihan Salah Tekan \"ENTER\" Untuk Ke-menu Pilihan." ; cin.get(); system( "cls" ); goto menu; } cin.ignore(); cout<< "\nTekan \"ENTER\" Untuk Ke-menu pilihan." ; cin.get(); system( "cls" ); goto menu; keluar: delete []X; delete []U; delete []x; delete []S; delete []Q; delete []q; Q=0;q=0;x=0;S=0;U=0;X=0; return 0; } |
DEMO
Dalam program c++ tersebut penulis sudah menambahkan berbagai macam fitur untuk memudahkan user. Salah satunya yaitu pilihan untuk mencari rumus arithmatika bertingkat tersebut tanpa perlu mencari tingkat dari barisannya. Lalu penulis juga menambahkan fitur untuk mencari nilai suku ke-n dan jumlah suku ke-n sehingga user akan semakin mudah untuk mencari nilainya.
Baik itu saja dari penulis, semoga postingan ini dapat membantu, terimakasih sudah berkunjung di blog saya..
0 Response to "Program C++ Untuk Mencari Rumus Suku ke-n & Jumlah Suku ke-n Arithmatika Bertingkat "
Posting Komentar