Senin, 16 November 2009

Contoh Soal LOOPING

Statement While

int bil=1;
while(bil<=5)
cout< ++bil; bil = bil + 1

Bil = 1 Bil<=5 Cetak bil Bil= bil + 1
1 1<=5 1 2
2 2<=5 2 3
3 3<=5 3 4
4 4<=5 4 5
5 5<=5 5 6
6 6<=5

Output: 12345


Statement Do….While

int bil=2;
do
coutwhile (bil>=10);

Bil=2 Cetak bil Bil + 2 Bil>=10 Y/T
2 2 4 4>=10 T
4 4 6 6>=10 T
6 6 8 8>=10 T
8 8 10 10>=10 T
10 10 12 12>=10 Y

output: 2 4 6 8 10

Latihan-latihan 2

Soal no.5

#include
Void main()
{
int I,N;
N = 10;
X = 10;
T = 0;
While (T<=100);
{
T = T + N;
N = N + X;
X = X + 5;
}
Printf (“\n%i,”T);
}

N=10 X=10 T=0 T<=100 Y/T T =T+N N =N+X X=X+5 Cetak T
10 10 0 0<=100 Y 10 20 15
20 15 10 10<=100 Y 30 35 20
35 20 30 30<=100 Y 65 55 25
55 25 65 65<=100 Y 120 80 30
80 30 120 120<=100 T 120

Output: 120

Soal n0.6

#include
Void main()
{
int I,N;
N = 10;
X = 10;
T = 0;
While (T<=100);
{
T = T + N;
Printf (“\n%i,”T);
N = N + X;
X = X + 5;
}
}

N=10 X=10 T=0 T<=100 Y/T T =T+N Cetak T N =N+X X=X+5
10 10 0 0<=100 Y 10 20 15
20 15 10 10<=100 Y 30 30 35 20
35 20 30 30<=100 Y 65 65 55 25
55 25 65 65<=100 Y 120 120 80 30
80 30 120 120<=100 T

Output: 10 30 65 120


Soal Nested FOR

Soal no.1

#include
Void main()
{
int I.J;
for (I = 1, 1<=3;I++);
{
for(J=1;J<=5;J++);
{
Printf(“\n%i”,I);
}
}

I=1 I<=3 Y\T J=1 J<=5 Y\T Cetak I J++ I++
1 1<=3 Y 1 1<=5 Y 1 2
2 2<=5 Y 1 3
3 3<=5 Y 1 4
4 4<=5 Y 1 5
5 5<=5 Y 1 6
6 6<=5 T--------------------------> 2
2 2<=3 Y 1 1<=5 Y 2 2
2 2<=5 Y 2 3
3 3<=5 Y 2 4
4 4<=5 Y 2 5
5 5<=5 Y 2 6
6 6<=5 T--------------------------> 3
3 3<=3 Y 1 1<=5 Y 3 2
2 2<=5 Y 3 3
3 3<=5 Y 3 4
4 4<=5 Y 3 5
5 5<=5 Y 3 6
6 6<=5 T----------------------------> 4
4 4<=3 T

Output:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3


Soal no.2

#include
Void main()
{
int I.J;
for (I = 1, 1<=3;I++);
{
for(J=1;J<=5;J++);
{
Printf(“\n%i”,J);
}
}

I=1 I<=3 Y\T J=1 J<=5 Y\T Cetak J I++ J++
1 1<=3 Y 1 1<=5 Y 1 2
2 2<=3 Y 1 3
3 3<=3 Y 1 4
4 4<=3 T---> 2
1 1<=3 Y 2 2<=5 Y 2 2
2 2<=3 Y 2 3
3 3<=3 Y 2 4
4 4<=3 T---> 3
1 1<=3 Y 3 3<=5 Y 3 2
2 2<=3 Y 3 3
3 3<=3 Y 3 4
4 4<=3 T---> 4
1 1<=3 Y 4 4<=5 Y 4 2
2 2<=3 Y 4 3
3 3<=3 Y 4 4
4 4<=3 T---> 5
1 1<=3 Y 5 5<=5 Y 5 2
2 2<=3 Y 5 3
3 3<=3 Y 5 4
4 4<=3 T---> 6
6 6<=5 T

Output:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

Latihan-latihan

Soal no.1

#include
void main()
{
int I,N;
N=45;
I=1;
while(I<=5)
{
printf(“\n%i”,N);
N=N+5;
I=I+1;
}
}

N=45 I=1 I<=5 Y/T Cetak N N=N+5 I=I+1
45 1 1<=5 Y 45 50 2
50 2 2<=5 Y 50 55 3
55 3 3<=5 Y 55 60 4
60 4 4<=5 Y 60 65 5
65 5 5<=5 Y 65 70 6
70 6 6<=5 T

Output : 45 50 55 60 65

Soal no.2

#include
void main()
{
int I,N;
N=45;
I=1;
while(I<=5)
{
N=N+5;
I=I+1;
}
printf(“\n%i”,N);
}

N=45 I=1 I<=5 Y/T N=N+5 I=I+1 CetakN
45 1 1<=5 Y 50 2
50 2 2<=5 Y 55 3
55 3 3<=5 Y 60 4
60 4 4<=5 Y 65 5
65 5 5<=5 Y 70 6
70 6 6<=5 T

Output : 70

Soal no.3

#include
void main()
{
int I,N;
N=45;
I=1;
while(I<=5)
{
N=N+5;
printf(“\n%i”,N);
I=I+1;
}
}

N=45 I=1 I<=5 Y/T N=N+5 Cetak N I=I+1
45 1 1<=5 Y 50 50 2
50 2 2<=5 Y 55 55 3
55 3 3<=5 Y 60 60 4
60 4 4<=5 Y 65 65 5
65 5 5<=5 Y 70 70 6
70 6 6<=5 T

Output: 50 55 60 65 70

Soal no.4

#include
Void main()
{
int I,N;
N = 10;
I = 10;
While (N<=100);
{
N = N + I
Printf (“\n%i,”N);
I = I + 5;
}
}

N=10 I=1 N<=100 Y/T N = N + 1 Cetak N I = I + 5
10 10 10<=100 Y 20 20 15
20 15 15<=100 Y 35 35 20
35 20 20<=100 Y 55 55 25
55 25 25<=100 Y 80 80 30
80 30 30<=100 Y 110 110 35
110 35 35<=100 T

Output: 20 35 55 80 110

TUGAS LOGIKA 2

Latihan 5.7

1.Buatlah program untuk menghitung 10 deret bilangan genap :

#include
#include
#include
main()
{
char kode;
clrscr();
cout<<"program untuk menghitung 10 deret bilangan genap";
cout<<"masukan kode bilangan genap:";cin>>kode;
switch (kode)
{
case'a':
cout<<"2";
break;
case'b':
cout<<"2+4=6";
break;
case'c':
cout<<"2+4+6=12";
break;
case'd':
cout<<"2+4+6+8=20";
break;
case'e':
cout<<"2+4+6+8+10=30";
break;
case'f':
cout<<"2+4+6+8+10+12=42";
break;
case'g':
cout<<"2+4+6+8+10+12+14=54";
break;
case'h':
cout<<"2+4+6+8+10+12+14+16=70";
break;
case'i':
cout<<"2+4+6+8+10+12+14+16+18=88";
break;
case'j':
cout<<"2+4+6+8+10+12+14+16+18+20=110";
break;
default:
cout<<"hasil nilai deret angka genap";
break;
}
getch();
}

Output:
2+4+6+8+10+12+14+16+18+20=110

2. Buatlah program untuk menghitung 10 deret bilangan ganjil:

#include
#include
#include
main()
{
char kode;
clrscr();
cout<<"program untuk menghitung 10 deret bilangan ganjil";
cout<<"masukan kode bilangan ganjil:";cin>>kode;
switch (kode)
{
case'a':
cout<<"1";
break;
case'b':
cout<<"1+3=4";
break;
case'c':
cout<<"1+3+5=9";
break;
case'd':
cout<<"1+3+5+7=16";
break;
case'e':
cout<<"1+3+5+7+9=25";
break;
case'f':
cout<<"1+3+5+7+9+11=36";
break;
case'g':
cout<<"1+3+5+7+9+11+13=49";
break;
case'h':
cout<<"1+3+5+7+9+11+13+15=64";
break;
case'i':
cout<<"1+3+5+7+9+11+13+15+17=81";
break;
case'j':
cout<<"1+3+5+7+9+11+13+15+17+19=100";
break;
default:
cout<<"hasil nilai deret angka ganjil";
break;
}
getch();
}

Output:
1+3+5+7+9+11+13+15+17+19=100

TUGAS LOGIKA 1

Soal No 1.
#include
#include
#include
#include
#include
main()
{
int a;
clrscr();
for (a=1;a<=5;++a)
cout<<""<cout<<"\n";
for (a=1;a<=4;++a)
cout<<""<cout<<"\n";
for (a=1;a<=3;++a)
cout<<""<cout<<"\n";
for (a=2;a<=3;++a)
cout<<""<cout<<"\n";
for (a=1;a<=1;++a)
cout<<""<
cout<<"\n";
getch();
}
Hasil cetak:
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1





Soal no2

#include
#include
#include
main()
{
int a;
clrscr();
for (a=1;a<=5;++a)
cout<<""<
cout<<"\n";
for (a=6;a<=10;++a)
cout<<""<
cout<<"\n";
for (a=11;a<=15;++a)
cout<<""<
cout<<"\n";
getch();
}

Hasil cetak:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15



Soal no 3

#include
#include
#include
main()
{
int a;
clrscr();
for (a=1;a<=5;++a)
cout<<""<
cout<<"\n";
for (a=6;a<=9;++a)
cout<<""<
cout<<"\n";
for (a=10;a<=12;++a)
cout<<""<
cout<<"\n";
for (a=13;a<=14;++a)
cout<<""<
cout<<"\n";
for (a=15;a<=15;++a)
cout<<""<
cout<<"\n";
getch();
}

Hasil cetak:

1 2 3 4 5
6 7 8 9
10 11 12
13 14
15


Selasa, 10 November 2009

Struktur Rekursif

Struktur Rekursif

Rekursif adalah suatu proses dari suatu subprogram yang dapat berupa fungsi atau prosedur yang memanggil dirinya sendiri.
Perulangan Rekursif dan Perulangan Iteratif.
Perulangan rekursif merupakan salah satu metode didalam pemrograman yang mana dalam sebuah fungsi terdapat intruksi yang memanggil fungsi itu sendri, atau lebih sering disebut memanggil dirinya sendiri.

Perulangan iteratif merupakan perulangan yang melakukan proses perulangan terhadap sekelompok intruksi. Perulangan dilakukan dalam batasan syarat tertentu. Ketika syarat tersebut tidak terpenuhi lagi maka perulangan aka terhenti.

Persamaan :
1.Iteratif dan rekursif merupakan metode atau teknik didalam perulangan(looping)
2.Sama-sama memiliki bagian yang berfungsi sebagai batas dalam sebuah perulangan

Perbedaan :
Iteratif dalam melakukan perulangan membutuhkan suatu instruksi program seperti for, repeat until dan while do, sedangkan rekursi tidak memakai instruksi program seperti itu. Cukup dengan fungsi tersebut.

Procedure Rekursif;<--nama fungsi: rekursif.
Begin
Write(‘AMIK BSI ’);
Rekursif;<--fungsi bernama rekursif ini dikatakan
Sebagai fungsi rekursi karena dia memanggil
Dirinya sendiri
End;
Begin
Rekursif;
End.

Pada contoh diatas: sebuah fungsi/prosedur adalah sebuah proses.
Contoh fungsi rekursif diatas adalah sebuah proses, dan didalam fungsi rekursif tersebut terdapat perintah/proses yang mengerjakan/memanggil proses rekursif (memanggil dirinya sendiri),sehingga fungsi/prosedur rekursif ini dinamakan fungsi rekursi.
Pada contoh diatas proses rekursi ini tidak memiliki batas berhenti.
Untuk mengetahui contoh fungsi rekursif ini silahkan melihat pada slide perkuliahan.

Catatan:

Fungsi/prosedur dalam sebuah bahasa pemrograman disebut juga subrutin/sub program.
Subprogram ini berisi perintah –perintah khusus yang sering digunakan untuk proses pemrograman. Sehingga untuk menghindari penulisan kode program yang sering digunakan maka dibuatlah fungsi (subprogram).

Cara untuk menggunakan subprogram yaitu dengan memanggil nama_fungsi tersebut melalui blok program utama.
Contoh pemanggilan terdapat pada program faktorial.

FUNGSI FAKTORIAL
0! = 1
N! = N x (N-1)! Untuk N > 0

function faktorial(N:integer):integer;
var i:integer;
begin
if N = 0 then
begin
faktorial :=1;
exit;
end
else
faktorial := n * faktorial(n-1);

end;

begin
write('Masukan Bilangan = '); readln(Bil);
write('jumlah faktorial = ',faktorial(Bil));
readln;
end.
HASIL:
Masukan Bilangan = 5
jumlah faktorial = 120

-->MENARA HANOI
Ini merupakan salah satu permasalahan rekursif yang terkenak dan pertama kali ditemukan oleh seorang pendeta Budha di Hanoi, Vietnam yang kemudian konsep tersebut dikenal dengan konsep menara Hanoi (The Tower of Hanoi). Menurut legenda pendeta tersebut akan memindahkan 64 buah piringan yang tidak sama besarnya dari satu menara ke menara lainnya.Mungkin karena terlalu sulit, pendet Budha tersebut mengatakan bahwa menara-menara tersebut berhasil dipindahkan.
Seperti permasalahan tersebut, bahwa permasalahan pada konsep ini adalah bagaimana cara memindahkan sejumlah piringan dari satu menara ke menara lainnya dengan satu menara bantu, dengan besar piringan tidak sama dan hanya boleh dilakukan hanya 1 kali.

Tujuan permainan ini adalah memindahkan n buah piringan dari tonggak asal A melalui tonggak bantu B menuju tonggak tujuan C. dengan aturan piring yang lebuh kecil tidak boleh berada dipiringan yang lebih besar.



Bayangkan keadaan berikut:
Ada 3 tiang (a, b, c) tempat piringan dengan ukuran yang bervariasi dapat ditumpuk. Pada mulanya semua piringan ada di “a”. Tugasnya adalah Memindah semua piringan ke “c” dengan aturan sbb:

• pada satu saat hanya boleh memindah 1 piringan
• setiap perpindahan berupa pengambilan piringan teratas dari satu tiang dan memasukannya ketiang lain, diatas piringan lain yang mungkin sudah ada pada tiang tersebut.
• Tidak boleh meletakan piringan diatas piringan lain yang lebih kecil. (piringan yang lebih besar tidak boleh berada di atas piringan yang lebih kecil).
• pada setiap akhir pemindahan semua piringan harus berada di tiang

Untuk Penyelesaian masalah kita daftarkan terlebih dahulu langkah-langkah penyelesaiannya:
a.ketika kondisi piringan  N= 1
Piringan 1 dipindahkan dari A ke C.
b.N =2
-->Pindahkan piringan 1 dari A ke B
-->Pindahkan piringan 2 dari A ke C
-->Pindahkan piringan 1 dari B ke C

Dari langkah – langkah penyelesaian diatas, maka dapat disimpulkan :
Untuk memindahkan piringan dari tonggak asal (A) ke tonggak tujuan (C) maka piringan ke N harus berada di tonggak tujuan (C).
Sedangkan piringan ke 1 sampai dengan (N-1) harus berada ditonggak bantu(B).
Setelah piringan ke 1 s/d N-1 berada di B, Kemudian pindahkan piringan ke 1 sampai dengan N-1 dari tonggak bantu (B) ke tonggak tujuan (C).


Untuk menyelesaikan masalah tersebut dapat digunakan algoritma Rekursif :

uses crt;
procedure Hanoi(n:integer;asal,bantu,tujuan:char);
begin
if n=0 then exit;
hanoi(n-1,asal,tujuan,bantu);
writeln('. Pindahkan piringan ke ',n,' dari ',asal,' ke ',tujuan);
hanoi(n-1,bantu,asal,tujuan);
end;

var N : integer;

begin
clrscr;
write('Jumlah Piringan = ');
readln(N);
hanoi(N,'A','B','C');
readln;
end.
Hasil :
Jumlah Piringan = 4
. Pindahkan piringan ke 1 dari A ke B
. Pindahkan piringan ke 2 dari A ke C
. Pindahkan piringan ke 1 dari B ke C
. Pindahkan piringan ke 3 dari A ke B
. Pindahkan piringan ke 1 dari C ke A
. Pindahkan piringan ke 2 dari C ke B
. Pindahkan piringan ke 1 dari A ke B
. Pindahkan piringan ke 4 dari A ke C
. Pindahkan piringan ke 1 dari B ke C
. Pindahkan piringan ke 2 dari B ke A
. Pindahkan piringan ke 1 dari C ke A
. Pindahkan piringan ke 3 dari B ke C
. Pindahkan piringan ke 1 dari A ke B
. Pindahkan piringan ke 2 dari A ke C
. Pindahkan piringan ke 1 dari B ke C

Hasil 2 :
Jumlah Piringan = 3
. Pindahkan piringan ke 1 dari A ke C
. Pindahkan piringan ke 2 dari A ke B
. Pindahkan piringan ke 1 dari C ke B
. Pindahkan piringan ke 3 dari A ke C
. Pindahkan piringan ke 1 dari B ke A
. Pindahkan piringan ke 2 dari B ke C
. Pindahkan piringan ke 1 dari A ke C

Referensi :
http://jkw1.wordpress.com/
http://yusriel.wordpress.com/
Yulikuspartono.2004.Pengantar Logika dan Algoritma,Yogyakarta.

ARRAY(Larik)

"LARIK (ARRAY)"

Didalam Bahasa Pemrograman Pascal (juga di bahasa pemrog. Yang lain) memiliki berbagai macam tipe data.

Tipe data dikelompokkan menjadi :
1.Tipe data sederhana
2.Tipe data terstruktur
3.Tipe data enumerated
4.Tipe data Pointer

Di Pertemuan telah dibahas:
tipe data sederhana (integer, Boolean, real, string, char dsb).

@ Tipe data terstruktur
Didalam tipe data terstruktur dikenal ada 2 tipe data:
1.Larik (array)
2.Record.

Larik/ Array-->tIpe data terstruktur yang terdiri dari sejumlah komponene yang memepunyai tipe yang sam dan berjumlah tetap. Komponen tersebut disebut tipe komponen atau tipe basis.

Bentuk umum :
Nama _larik:array[tipe indeks] of tipe larik

Ciri-ciri Array :
-setiap elemen data array diacu melalui indeksnya
-karena elemen disimpan secara berurutan , indek array harus lah suatu tipe yang mempunyai keterurutan (ada suksesor dan predecessor).
Contoh bertipe data : integer, karakter atau tipe data enumerasi.

Jika indeks integer maka keterturutan indeks sesuai dengan urutan integer (0,1,2,3,4,5,6,..)
Jika indeks Karakter maka keterturutan indeks sesuai dengan urutan karakter (a,b,c,d,e ….).

contoh : x:array[1..11] of integer;
var gaji:array[5..10] of char;

DIMENSI LARIK /ARRAY

1. Larik dimensi 1-->larik yang memiliki 1 index
2. Larik Dimensi 2 atau lebih  larik yang memiliki indek > 1. (larik dengan banyak dimensi)

Pada bahasa pemrograman Pascal sangat memungkinkan kiat menggunakan larik dimensi tiga bahkan lebih.. Ini hnya dibatasi oleh kapasitas memori computer (RAM). Secar prinsip, larik lebih dari 2 penanganannya sama dengan larik dimensi 2.

Untuk deklarasi Array 1 dimensi ada pada contoh diatas.

Array dua dimensi mawakili suatu bentuk table atau matrik,yaitu indeks yang pertama menunjukkan baris dan indeks yang kedua dapat menunjukkan kolom baris atau matriks.

Untuk deklarasi Array 2 dimensi:

nama array=array[tipeindeks1,tipeindeks2] of tipe array

contoh :
A : array[1..3,1..2] of byte;

Sallah satu implemantasi array 2 dimensi ini digunakan untuk membuat program MATRIK (Aljabar Linear).

Contoh Matrik dengan ordo 2 x 2

A=1 5
2 4
Matrik A diatas adalah matrik dengan ordo 2x2 sehingga matrik tersebut memiliki elemen : A[1,1] = 1, A[1,2] = 5, A[2,1]= 2 dan A[2,2]=4.

Untuk membuat deklarasi tipe array dari kasus diatas (dalam Bahasa Pascal) :

Var A : array [1..2,1..2] of integer;

Untuk mengisi elemen matrik A diatas :

A[1,1] := 1;
A[1,2] := 5;
A[2,1] := 2;
A[2,2] := 4;

Untuk menampilkan isi elemen matrik A :
Write(A[1,1]);
Write(A[1,2]);
Write(A[2,1]);
Write(A[2,2]);

Selain cara diatas, untuk mengefisienkan penulisan kode program dalam menampilkan isi Matrik A, maka digunakan proses perulangan :

For i:=1 to 2 do
For j:=1 to 2 do
Write(A[i,j]);

DEKLARASI TIPE INDEKS

Index larik menunjukan maksimum banyaknya elemen dari larik itu sendiri.

CONTOH:

#Akan mendeklarasikan array gaji yang bertipe real, mempunyai 10 elemen dengan indexnya menggunakan tipe subjangkauan int, dan mempunyai batas bawah 1 dan batas atas 10.
Var Gaji : array[1…10] of real.

#Deklarasi indeks array bertipe subjangkauan integer

Type Batas = 1…100
Var Nilai : array[1..100] of integer;

# Deklarasi indeks array bertipe terbilang

Type Bulan = (jan…..desb);
Var penghasilan : array[Bulan] of integer