Permasalahan
Bagaimana program
menghitung beda, suku pertama, suku ke - n, dan jumlah suku ke - n, serta menampilkan
deret aritmatika dan geometri?
Solusi
A.
Deret Aritmatika
1. Pengertian
Deret
aritmatika adalah jumlah suku-suku dari suatu barisan aritmatika.
2. Menentukan
beda
Misal:
Suku ke-x = k
Suku ke-y
= l
Un
= a + ( n - 1 ) b
k
= a + ( x – 1 ) b
l
= a + ( y – 1 ) b
a
= k – ( x – 1 ) b
l
= k - ( x – 1 ) b + ( y – 1 ) b
l
= k – bx + by
bx
– by = k – l
b
( x – y ) = k – l
b =
3. Menentukan
suku pertama
k
= a + ( x – 1 ) b
k
= a + ( x – 1 )
a
= k – ( x – 1 )
4. Menentukan
suku ke – n
Un
= a + ( n - 1 ) b
5. Menentukan
jumlah suku ke – n
6. Menampilkan
deret aritmatika
B.
Deret Geometri
1.
Pengertian deret geometri
Deret geometri
adalah jumlah dari beberapa suku pada deret geometri.
2. Suku ke-n barisan
geometri adalah
3.
Rasio deret geometri adalah
4.
Suku pertama deret geometri adalah
5.
Menentukan suku ke-n deret geometri
6.
Menentukan jumlah suku ke-n deret geometri
7.
Menampilkan deret geometri
Uj=e*ri
Algoritma
1.
Mulai program
2.
Cetak “ Deret Aritmatika atau deret Geometri”
3.
Jika t= =1, kerjakan langkah 4, jika tidak lanjut ke
langkah 19
4.
Input nilai aritmatika
5.
Kerjakan b=(k-l)/(x-y)
6.
Cetak b
7.
Kerjakan a=k-(x-1)*b
8.
Cetak a
9.
Tanyakan Un yang dicari
10. If(n<=0) , Jika
benar cetak “input tidak boleh negatif atau 0. Jika salah, lanjut ke langkah
berikutnya.
11. Kerjakan Un =
a+(n-1)b
12. Cetak Un
13. Kerjakan Sn=
* (a+Un)
14. Cetak Sn
15. Identifikasikan for
(i=1;i<n;i++)
16. Kerjakan Ui = a+(i*b)
17. Cetak Ui
18. Identifikasikan
while (z = =’y’||z = = ‘Y’), jika benar kembali ke langkah 4, jika salah lanjut
ke langkah 36
19. Jika t= = 2,
kerjakan langkah 20
20. Input nilai
geometri
21. Kerjakan g =
, h=
, r = pow(g, h)
22. Cetak r
23. Kerjakan v = c – 1,
m = pow ( r , v), e =
24. Cetak e
25. Tanyakan Uq yang
akan dicari
26. Kerjakan o = Uq – 1
, p = pow ( r, o) , q = pow (r , Uq) ,Ug = e * p
27. Cetak Ug
28. Kerjakan Sg = e * (1
- q) / (1 - r)
29. Jika (1-r)=0, cetak
nilai tidak terdefinisi, jika salah lanjut ke langkah berikutnya
30. Cetak Sg
31. Identifikasikan for
(i = 0; i< Uq ;i++)
32. Kerjakan Uj = e *
(pow(r , i))
33. Cetak Uj
34. Identifikasikan (z
==’y’||z==’Y’)
35. Program kembali ke
awal atau tidak
36. Program selesai
Flowchart
C Source Code
#include<math.h>
#include<stdio.h>
void main()
{
float
t,x,k,y,l,b,a,n,Un,Sn,Ui,i,z,c,Ux,d,Uy,g,h,r,v,m,e,Uq,o,p,q,Ug,Sg,Uo,Uz,Uj,j;
printf(" Deret aritmatika atau
geometri?\n\n");
printf("\n\n 1. Deret
aritmatika.\n");
printf("\n\n 2. Deret geometri.\n\n");
printf("\n Menu yang Anda pilih =
");
scanf("%f",&t);
do
if(t==1)
{
do
{
system("cls");
{
printf(" ###
Program deret aritmatika
###\n\n");
printf(" a.Suku ke berapa : ");
scanf("%f",&x);
printf(" berapa nilainya: ");
scanf("%f",&k);
printf("\n b.Suku ke berapa : ");
scanf("%f",&y);
printf(" berapa nilainya: ");
scanf("%f",&l);
b=(k-l)/(x-y);
printf("\n\n =>Bedanya adalah
%f\n\n",b);
a=k-(x-1)*b;
printf(" =>Suku pertama adalah
%f\n\n",a);
printf(" Berapa suku ke-n yang akan
dicari: ");
scanf("%f",&n);
if(n<=0)printf(" Input tidak boleh
negatif atau 0",n);
else
{
Un=a+(n-1)*b;
printf("\n Nilainya adalah
%f\n",Un);
Sn=n/2*(a+Un);
printf(" Jumlah deretnya adalah
%f\n",Sn);
printf("\n Deret aritmatikanya
adalah: ");
a=a;
printf("%f+",a);
for(i=1;i<n;i++)
{
Ui=a+(i*b);
printf("%f+",Ui);
}
}
}
printf("\n\n");
printf(" Apakah anda ingin mengulangi?\n
Tekan (y/t)");
z=getch();
printf("\n\n");
}
while(z=='y'||z=='Y');
}
else if(t==2)
{
system("cls");
printf(" ### Program Deret Geometri ###\n\n");
printf("
a. Suku ke berapa : ");
scanf("%f",&c);
printf(" berapa nilainya: ");
scanf("%f",&Ux);
printf("
b. Suku ke berapa : ");
scanf("%f",&d);
printf(" berapa nilainya: ");
scanf("%f",&Uy);
g=Uy/Ux;
h=1/(d-c);
r=pow(g,h);
printf("\n => Rasionya adalah
%f",r);
v=c-1;
m=pow(r,v);
e=Ux/m;
printf("\n => Suku pertama adalah
%f\n",e);
printf("\n Berapa suku yang akan dicari:
");
scanf("%f",&Uq);
o=Uq-1;
p=pow(r,o);
q=pow(r,Uq);
Ug=e*p;
printf("\n Nilai suku yang dicari adalah
%f\n",Ug);
Sg=e*(1-q)/(1-r);
if((1-r)==0)printf(" Hasil jumlah
deretnya tidak terdefinisi");
else
{
printf(" Jumlah deretnya adalah
%f\n\n",Sg);
printf(" Deret Geometrinya adalah:
");
for(j=0;j<Uq;j++)
{
Uj=e*(pow(r,j));
printf(" %f+",Uj);
}
}
printf("\n\n");
printf(" Apakah anda ingin mengulangi?\n
Tekan (y/t)");
z=getch();
printf("\n\n");
}
else
{
printf("Nomor yang anda masukan tidak ada
dalam menu\n");
system("pause");
}
while(z=='y'||z=='Y');
eliminasi Gauss
#include <stdio.h>
#define MAX 20
void gauss2(double a[MAX][MAX], double b[MAX], int, int, double x[MAX]);
void cetak(double a[MAX][MAX], double b[MAX], int);
void hasil(double a[MAX][MAX], double b[MAX], int);
main(){
double a[MAX][MAX], b[MAX], x[MAX];
int dimensi, baris, kolom, flag;
char z;
do{
system("cls");
printf("Masukkan dimensi : ");
scanf("%d", &dimensi);
printf("masukkan koefisien matriks :\n");
for(baris=1; baris<=dimensi; baris++){
for(kolom=1; kolom<=dimensi; kolom++){
printf("a(baris[%d],kolom[%d]) : ", baris, kolom);
scanf("%lf", &a[baris][kolom]);
}
}
printf("\nmasukkan vektor hasil :\n");
for(baris=1; baris<=dimensi; baris++){
printf("b(baris[%d]) : ", baris);
scanf("%lf", &b[baris]);
}
cetak(a, b, dimensi);
printf("\nTekan sembarang tombol untuk memulai perhitungan\n");
getch();
gauss2(a, b, dimensi, flag, x);
if(flag!=0){
printf("\nTekan sembarang tombol untuk memulai perhitungan nilai x\n");
getch();
hasil(a, b, dimensi);
}
printf("\n\nNgulangi lagi ?(y/t) >");
z=getch();
printf("\n\n");
}while(z=='y'||z=='Y');
}
void gauss2(double a[MAX][MAX], double b[MAX], int dimensi, int flag, double x[MAX]){
double pivot1, pivot2;
int pos, baris, kolom;
flag = 1;
for(pos=1; pos<=dimensi; pos++){
pivot1 = a[pos][pos];
if(pivot1 == 0){
flag=0;
printf("pivot pada a[%d][%d] bernilai nol, tidak ada penyelesaian", pos, pos);
break;
}
else{
for(kolom=1; kolom<=dimensi; kolom++)
a[pos][kolom]=a[pos][kolom]/pivot1;
b[pos]=b[pos]/pivot1;
cetak(a, b, dimensi);
for(baris=pos; baris<=dimensi; baris++){
if(baris+1<=dimensi){
pivot2 = a[baris+1][pos];
for(kolom=1; kolom<=dimensi; kolom++)
a[baris+1][kolom]=a[pos][kolom]*(-pivot2)+a[baris+1][kolom];
b[baris+1]=b[pos]*(-pivot2)+b[baris+1];
cetak(a, b, dimensi);
}
}
}
}
}
void cetak(double a[MAX][MAX], double b[MAX], int dimensi){
int baris, kolom;
printf("\n");
for(kolom=1; kolom<=dimensi; kolom++)
printf(" a%d ", kolom);
printf(" b \n");
for(baris=1; baris<=dimensi; baris++){
for(kolom=1; kolom<=dimensi; kolom++)
printf("%6.2lf", a[baris][kolom]);
printf("%6.2lf\n", b[baris]);
}
}
void hasil(double a[MAX][MAX], double b[MAX], int dimensi){
int pos, kolom, i;
double x[MAX], temp;
x[dimensi]=b[dimensi]/a[dimensi][dimensi];
for (pos=dimensi-1;pos>=1;pos--){
temp=b[pos];
for(kolom=pos+1;kolom<=dimensi;kolom++)
temp=temp-a[pos][kolom]*x[kolom];
x[pos]=temp/a[pos][pos];
}
printf("\n\nHASILNYA ADALAH\n");
printf("----------\n");
printf("| I | X(I) |\n");
printf("----------\n");
for (i=1;i<=dimensi;i++)
{
printf("|");
printf("%5d", i);
printf("\t |");
printf("%15lf |\n", x[i]);
}
printf("----------\n");
system ("pause");
}
eliminasi Gauss
#include <stdio.h>
#define MAX 20
void gauss2(double a[MAX][MAX], double b[MAX], int, int, double x[MAX]);
void cetak(double a[MAX][MAX], double b[MAX], int);
void hasil(double a[MAX][MAX], double b[MAX], int);
main(){
double a[MAX][MAX], b[MAX], x[MAX];
int dimensi, baris, kolom, flag;
char z;
do{
system("cls");
printf("Masukkan dimensi : ");
scanf("%d", &dimensi);
printf("masukkan koefisien matriks :\n");
for(baris=1; baris<=dimensi; baris++){
for(kolom=1; kolom<=dimensi; kolom++){
printf("a(baris[%d],kolom[%d]) : ", baris, kolom);
scanf("%lf", &a[baris][kolom]);
}
}
printf("\nmasukkan vektor hasil :\n");
for(baris=1; baris<=dimensi; baris++){
printf("b(baris[%d]) : ", baris);
scanf("%lf", &b[baris]);
}
cetak(a, b, dimensi);
printf("\nTekan sembarang tombol untuk memulai perhitungan\n");
getch();
gauss2(a, b, dimensi, flag, x);
if(flag!=0){
printf("\nTekan sembarang tombol untuk memulai perhitungan nilai x\n");
getch();
hasil(a, b, dimensi);
}
printf("\n\nNgulangi lagi ?(y/t) >");
z=getch();
printf("\n\n");
}while(z=='y'||z=='Y');
}
void gauss2(double a[MAX][MAX], double b[MAX], int dimensi, int flag, double x[MAX]){
double pivot1, pivot2;
int pos, baris, kolom;
flag = 1;
for(pos=1; pos<=dimensi; pos++){
pivot1 = a[pos][pos];
if(pivot1 == 0){
flag=0;
printf("pivot pada a[%d][%d] bernilai nol, tidak ada penyelesaian", pos, pos);
break;
}
else{
for(kolom=1; kolom<=dimensi; kolom++)
a[pos][kolom]=a[pos][kolom]/pivot1;
b[pos]=b[pos]/pivot1;
cetak(a, b, dimensi);
for(baris=pos; baris<=dimensi; baris++){
if(baris+1<=dimensi){
pivot2 = a[baris+1][pos];
for(kolom=1; kolom<=dimensi; kolom++)
a[baris+1][kolom]=a[pos][kolom]*(-pivot2)+a[baris+1][kolom];
b[baris+1]=b[pos]*(-pivot2)+b[baris+1];
cetak(a, b, dimensi);
}
}
}
}
}
void cetak(double a[MAX][MAX], double b[MAX], int dimensi){
int baris, kolom;
printf("\n");
for(kolom=1; kolom<=dimensi; kolom++)
printf(" a%d ", kolom);
printf(" b \n");
for(baris=1; baris<=dimensi; baris++){
for(kolom=1; kolom<=dimensi; kolom++)
printf("%6.2lf", a[baris][kolom]);
printf("%6.2lf\n", b[baris]);
}
}
void hasil(double a[MAX][MAX], double b[MAX], int dimensi){
int pos, kolom, i;
double x[MAX], temp;
x[dimensi]=b[dimensi]/a[dimensi][dimensi];
for (pos=dimensi-1;pos>=1;pos--){
temp=b[pos];
for(kolom=pos+1;kolom<=dimensi;kolom++)
temp=temp-a[pos][kolom]*x[kolom];
x[pos]=temp/a[pos][pos];
}
printf("\n\nHASILNYA ADALAH\n");
printf("----------\n");
printf("| I | X(I) |\n");
printf("----------\n");
for (i=1;i<=dimensi;i++)
{
printf("|");
printf("%5d", i);
printf("\t |");
printf("%15lf |\n", x[i]);
}
printf("----------\n");
system ("pause");
}
No comments:
Post a Comment