Selasa, 29 Maret 2011

contoh program Algoritma

#include <iostream.h>
#include <conio.h>

void cetak_array(int A[], int n) {
    for (int i=0; i<n; i++)
        cout << "Nilai indeks ke-[" << i << "] adalah " << A[ i ] << endl;
    getch(); 
}

void main() {
    int A[10] = {1,2,3,4,5,6,7,8,9,10};
    int n = 10;
    cout << "Nilai array asal : ";
    cetak_array(A, n);
    cout << "Setelah dikurangi 1 menjadi : " << endl;
    for (int i=0; i<n; i++)
        cout << "Nilai indeks ke-[" << i << "] adalah " << A[ i ]-1 << endl;       
    getch();
    cout << "Nilai array dicetak kembali" << endl;
    cetak_array(A, n);
    cout << "Ternyata tidak berubah. Perhatikan perbedaannya " << endl;   
    for (int i=0; i<n; i++)
        cout << "Nilai indeks ke-[" << i << "] adalah " << A[ i ]-- << endl;       
    cout << "Nilai array dicetak kembali" << endl;
    cetak_array(A, n);
}

Senin, 21 Maret 2011

tugas kelompok

Algoritma Pengambilan Tabungan di Bank

Mengambil Uang di Bank
A. Pergi ke Bank dengan membawa buku tabungan
B. Ambil formulir penarikan tabungan
C. Isi formulir penarikan berdasarkan informasi dibuku tabungan
D. Isi Jumlah Nominal dengan angka
E. Isi Jumlah Nominal terbilang
F. Ambil nomor urut antrian
G. Menunggu Teller memanggil
H. Menyerahkan buku tabungan dan formulir penarikan
I. Teller menyerahkan uang dan buku tabungan
J. Selesai
1. algoritma dan program untuk mencari titik tengah sebuah garis yang ujung titiknya adalah A(x1,y1)   dan B(x2,y2).


Analisis:
Inputan berupa garis A(x1, y1) ,B(x2, y2)
Output yang diminta adalah untuk mencetak titik tengah dari sebuah garis T(Tx, Ty)
Data Requirements:
Problem input: x1, x2 ,y1, y2
Problem output: titik tengah
Relevant formulas: titik tengah T={x1+x2)/2  ,  (y1+y2)/2}
Prosedur :
Setelah mengidentifikasi problem dari input dan output, maka langkah- langkah untuk memecahkan masalah adalah:
1. Masukkan x1
2. Masukkan x2
3. Masukkan y1
4. Masukkan y2
5. hitung titik tengah garis x dengan rumus  “x1+x2)/2”
6. hitung titik tengah garis y dengan rumus “y1+y2)/2”
7. tampilkan T(x1+x2)/2 ,  y1+y2)/2)
ALgoritma refinement:
Menghitung titik tengah  T={ x1+x2)/2   ,  (y1+y2)/2}
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x1,x2,y1,y2;
cout<<”menghitung titik Tengah sebuah garis yang ujung”<<endl;
cout<<”titiknya adalah A(x1,y1) dan B(x2,y2)”<<endl;
cout<<endl;
cout<<”masukkan nilai x1 : “;
cin>>x1;
cout<<”masukkan nilai x2 : “;
cin>>x2;
cout<<”masukkan nilai y1 : “;
cin>>y1;
cout<<”masukkan nilai y2 : “;
cin>>y2;
cout<<endl;
cout<<”nilai dari garis X adalah : “<<(x1+x2)/2<<endl;
cout<<”nilai dari garis Y adalah : “<<(y1+y2)/2<<endl;
cout<<endl;
cout<<”titik tengahnya adalah : (“<<(x1+x2)/2<<”,”<<(y1+y2)/2<<”)”<<endl;
system(“PAUSE”);
return EXIT_SUCCESS;
}

2. algoritma dan program untuk memisahkan bilangan integer yang kurang dari 1000 menjadi komponen- komponennya.
Logika:
Kita mau mengetes apakah angka yang dimasukkan adalah ratusan, puluhan, atau satuan. Karena hanya itu saja jenis – jenis angka yang akan kita cari dalam program yang kita buat ini.
Pada waktu pertama kali kita “mengetes” bilangan tersebut, kita mencoba menguji:
1.       Apakah bilangan itu adalah ratusan?
Seperti yang kita ketahui,dalam pengucapan nama bilangan itu tentu saja harus dari bilangan terbesarnya lalu kemudian berurutan sampai yang terkecil. Misalnya 1217 dibaca seribu dua ratus tujuh belas. Nah, bilangangan terbesarnya adalah ribuan. Tapi karena program yang kita buat ini di batasi dengan nilai terbesarnya adalah ratusan, maka bilangan pertama yang diuji adalah “apakah bilangan itu adalah ratusan?”
  • jika tidak, maka bilangan itu dites apakah bilangan itu adalah puluhan.
  • jika ya, maka “bagian ratusan” bilangan itu diterjemahkan ke dalam kata – kata lalu sisanya (puluhan ke bawah).
2.       Apakah bilangan itu puluhan?
  • Jika tidak, maka bilangan itu akan dimasukkan ke dalam fungsi terakhir, fungsi satuan.
  • Jika  ya, maka “bagian puluhan” dari bilangan itu akan diterjemahkan dan kemudian sisanya dimasukkan ke dalam fungsi satuan.
Penjelasan kode:
Pertama – tama, perlu kita perhatikan bahwa sudah “disiapkan” sebuah perulangan di sana (while).Pada fungsi utama, seperti yang kita lihat, kita ingin supaya masukan kita mempunyai nilai paling tidak sama dengan satu. Lalu setelah itu, kita memasukkan input tersebut pada bagian ratusan. Caranya mirip dengan bagaimana kita menerjemahkan angka – angka ke dalam kata – kata. Prosesnya dapat kita lihat pada kondisi – kondisi pada fungsi tersebut.
  • Jika hasil bulat dari pembagian n dengan 100 adalah 0 (nol), maka bisa dipastikan bahwa n bukanlah bilangan ratusan.
  • Jika hasil bulat dari pembagian n dengan 100 adalah 1 dan sisanya adalah 0 (nol), maka n pastilah 100.
  • Jika hasil bulat dari pembagian n dengan 100 lebih besar dari 1, maka bilangan tersebut pastilah lebih atau sama dengan 200. Maka hasil bulat pembagian tersebut, dimasukkan ke dalam ratusan, lalu di cetak kata “ratus”.
Pada fungsi – fungsi yang lainnya juga dibuat dengan cara seperti itu hingga akhirnya pada bagian satuan dari bilangan tersebut. Hanya saja, jika kita perhatikan pada fungsi puluhan, ada sebuah kondisi dimana jika hasil bulat dari pembagian adalah 1, dan jika sisanya lebih besar dari 1, maka sisanya akan dimasukkan ke dalam pengenalan dan selanjutnya di cetak kata “belas”. Jadi misalnya, angkanya adalah 19, sisanya tentu saja adalah 9. Angka 9 di pengenalan, akan menghasilkan kata “sembilan “ di layar. Lalu ditambah dengan kata “belas “, maka hasilnya adalah “sembilan belas “. Jadi, kita tidak usah membuat case untuk “belas – belas” yang lain selain 11 (sebelas).

#include <cstdlib>
#include <iostream>
using namespace std;
void pengenalan (int n) {
switch (n) {
case 1: cout << “satu “; break;
case 2: cout << “dua “; break;
case 3: cout << “tiga “; break;
case 4: cout << “empat “; break;
case 5: cout << “lima “; break;
case 6: cout << “enam “; break;
case 7: cout << “tujuh “; break;
case 8: cout << “delapan “; break;
case 9: cout << “sembilan “; break;
case 10: cout << “sepuluh “; break;
case 11: cout << “sebelas “; break;
default: break;
}
}
void puluhan (int n) {
int bil, sisa;
bil = n / 10;
sisa = n % 10;
if (bil == 0)
pengenalan (sisa);
else if (bil == 1) {
if (sisa <= 1)
pengenalan (n);
else {
pengenalan (sisa);
cout << “belas “;
}
}
else {
pengenalan (bil);
cout << “puluh “;
pengenalan (sisa);
}
}
void ratusan (int n) {
int bil, sisa;
bil = n / 100;
sisa = n % 100;
if (n >= 1000)
cout<<”melewati batas ketentuan”;
else if (bil == 0)
puluhan (sisa);
else if (bil == 1) {
if (sisa == 0)
cout << “seratus “;
else {
cout << “seratus “;
puluhan (sisa);
}
}
else {
pengenalan (bil);
cout << “ratus “;
puluhan (sisa);
}
}
int main () {
int n = 1;
while (n == 1) {
int num1;
do {
cout << “”;
cin >> num1;
} while (num1 < 1);
ratusan (num1);
cout << endl;
}
}

3. algoritma dan program untuk menghitung determinan matriks berordo 2×2
Algoritma:
-deklarasi
Input (integer) = a,b,c,d.
Input (integer) = determinan.
-Deskripsi
Read [a,b,c,d]
Rumus determinan = (a x d)-(b x c)
Write hasil determinan
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a,b,c,d,determinan;
cout<<”nilai a : “;
cin>>a;
cout<<”nilai b : “;
cin>>b;
cout<<”nilai c : “;
cin>>c;
cout<<”nilai d : “;
cin>>d;
cout<<endl;
determinan=(a*d)-(b*c);
cout<<”nilai determinan matriksnya adalah : “<<determinan<<endl;
system(“PAUSE”);
return EXIT_SUCCESS;
}

Kamis, 17 Maret 2011

Materi Algoritma

contoh program algoritma

contoh-program-algoritma

    #include<stdio.h>
    #include<graphics.h>

    void ikan(int,int,int,int);
    void setPixel(int,int);

    void main()
    {
    int x1,y1,x2,y2;
    int gd=DETECT,gm=0;
    initgraph(&gd,&gm,0);
    printf(“Masukkan koordinat titik x1 : \n “);
    scanf(“%d”,&x1);
    printf(“Masukkan koordinat titik y1: \n “);
    scanf(“%d”,&y1);
    printf(“Masukkan koordinat titik x2: \n”);
    scanf(“%d”,&x2);
    printf(“Masukkan koordinat titik y2: \n “);
    scanf(“%d”,&y2);
    initgraph(&gd,&gm,0);
    ikan(x1,y1,x2,y2);
    getch();
    closegraph();
    }

    void ikan(int x1,int y1,int x2,int y2)
    {
    int x,y;
    int dx, dy;
    int d;
    dy=y2-y1;
    dx=x2-x1;
    d = dx – 2 * dy;
    y = y1;
    for (x = x1; x <= x2; x++)
    {
    putpixel(x,y,4);
    if (d < 0)
    {
    y = y +1;
    d = d + 2*dx – 2*dy;
    }
    else
    {
    d = d – 2*dy;
    }
    }

    }

    void setPixel(int x,int y)
    {
    putpixel(x,y,4);
    }

Pentingnya Algoritma dalam Bahasa Pemrograman

Meskipun sudah dikatakan, bahwa sewaktu kita menyusun algoritma kita tidak perlu tahu bahasa pemrograman apa yang akan digunakan kelak, namun, untuk penulisan algoritma yang lebih efisien dan efektif, maka penggunaan sebagian perintah yang ada di dalam bahasa pemrograman perlu dilakukan juga.

Adapun perintah bahasa pemrograman yang paling sering digunakan untuk menyusun algoritma adalah bahasa pemrogrman yang terstrukutur, seperti Pascal, C, SNOBOL, PL/1, dan sebagainya.

Misalkan saja, untuk contoh berikut ini :

Langkah 1 : Beri nilai 10 ke variabel S
Maka, akan lebih mudah jika ditulis sebagai :
Langkah 1 : S := 10;

Belum lagi jika algoritma yang ditulis harus melakukan perulangan langkah ke langkah-langkah sebelumnya (looping).

10 Mulai I:= 1;
11 Lakukan perbandingan data ke I dengan data ke I+1
12 Jika data ke I+1 lebih kecil, maka tukar tempat keduanya
13 Tambahkan I dengan 1
14 Lakukan langkah 11 hingga langkah 13 selama nilai I < 10 15 selesai Tentu akan lebih ringkas jika kita tulis (perintah BASIC) : 10 For I= 1 to 10 20 If A(i) > A(I+1) then SWAP A(i), A(j)
30 next
40 end

Jadi terlihat, jika algoritma tersebut sederhana, maka penyusunan algoritma akan sama dengan penyusunan sebuah program (karena semua perintahnya sudah sesuai dengan kaidah penulisan di bahasa pemrogramannya). Apakah semuanya akan demikian ?.

Tentu saja tidak, misalkan, kita diminta untuk menentukan bilangan terkecil dari seratus buah bilangan yang akan dimasukkan ke komputer, ini masih dapat langsung dibuatkan programnya.

Algoritma (program)nya bisa kita susun sebagai berikut :
1 DIM A(100)
2 FOR M = 1 TO 100
3 INPUT A(M) : NEXT : KECIL = A(1)
4 FOR M = 2 TO 100
5 IF KECIL > A(M) THEN X = KECIL: KECIL = A(M) : A(M) = X
6 NEXT : PRINT KECIL : END

Tetapi, misalkan jika kita diminta untuk mengalihkan notasi infix menjadi postfix melalui stack, hal itu sulit untuk dilakukan. Algoritmanya bisa menggunakan gabungan kalimat dengan bahasa pemrograman, berikut contoh penggalannya.

Contoh :

1. Asumsi : deretan notasi infix dimasukkan ke dalam sebuah variabel array bernilai string, nama variabelnya D
2. S adalah variabel string untuk menyimpan susunan data di dalam stack
3. H adalah variabel string untuk menyimpan hasil
4. P = banyaknya elemen array
5. For I = 1 to p

If top(s) = empty then {top(s) adalah posisi atas stack)
if D(i) = operand then
H = D(i)
Else
S = S + D(i)
Top(s) = D(i)
Endif
Else
If D(i) = operator then
If derajat D(i) > derajat Top(s) then