info link

computer, education, technology, information, properti, job vacation, healt, sport, software, hardware, downloading.


Recent Video

Tampilkan postingan dengan label Algoritma Pemrograman. Tampilkan semua postingan

Algoritma Dasar

Penulisan Algoritma


Penulisan algoritma tidak tergantung dari spesifikasi bahasa pemograman dan komputer yang mengeksekusinya. Notasi algoritma bukan notasi bahasa pemograman, tetapi dapat diterjemahkan ke dalam berbagai bahasa pemograman. Berikut adalah contoh notasi algoritma
  • Notasi yang dinyatakan dalam kalimat deskriptif

Dengan otasi ini , deskriptif setiap langkah dijelaskan dengan bahasa yang jelas. Notasi ini cocok untuk algoritma yang pendek. Tapi untuk masalah algoritma yang panjang, notasi ini jelas kurang effektif. Selain itu pengkonversian notasi algoritma ke notasi bahasa program cendrung agak susah.
Contoh:
Algoritma mencari luas persegi panjang ;
Diketahui panjang dan lebar sebuah persegi panjang. Carilah luas dan keliling persegi panjang.

Deskripsi :
1. Input panjang persegi panjang.
2. Input lebar persegi panjang.
3. Cari luas persegi panjang dengan rumus; panjang kali lebar.
4. Cari keliling persegi panjang dengan rumus; dua kali sisi panjang ditambah dua kali sisi lebar.
5. Keluarkan luas dan keliling sebagai output..
6. Penghitungan selesai.
  • Flow chart
Flow chart atau bagan alir merupakan gambar atau bagan yang memperlihatkan urutan dan hubungan antar proses beserta instruksinya. Gambaran ini dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu. Sedangkan hubungan antar proses digambarkan dengan garis penghubung.
Flowchart ini merupakan langkah awal pembuatan program. Dengan adanya flowchart urutan poses kegiatan menjadi lebih jelas. Jika ada penambahan proses maka dapat dilakukan lebih mudah. Setelah flowchart selesai disusun, selanjutnya pemrogram (programmer) menerjemahkannya ke bentuk program dengan bahasa pemrograman.
Notasi penulisan algoritma dengan flow chart cocoknya untuk algoritma yang pendek. Sementara untuk masalah algoritma yang panjang, notasi ini kurang effektif dan penkorversian notasi algoritma ke notasi bahasa pemograman cendrung agak sukar.

Sekian dulu postingan saya kali ini, pada kesempatan berikut saya akan melanjutkan pembahasan tentang notasi penulisan algoritma(flowchar & pseudo code):
  • Simbol-simbol flowchart
  • Contoh flow chart program sederhana
  • Contoh penulisan yang dinyatakan dengan Pseudo code.

Algoritma Dan Program

 Algoritma dan Program
Program adalah kumpulan pernyataan komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ditulis dengan menggunakan bahasa pemrograman. Jadi bisa disebut bahwa program adalah suatu implementasi dari bahasa pemrograman. Beberapa pakar memberi formula bahwa :
Program = Algoritma + Bahasa (Struktur Data)
Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, demikian juga sebaliknya.
Pembuatan algoritma mempunyai banyak keuntungan di antaranya :
  • Pembuatan atau penulisan algoritma tidak tergantung pada bahasa pemrograman manapun, artinya penulisan  algoritma independen dari bahasa pemrograman dan komputer yang melaksanakannya.
  • Notasi algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman.
  • Apapun bahasa pemrogramannya, output yang akan dikeluarkan sama karena algoritmanya sama.
Beberapa hal yang perlu diperhatikan dalam membuat algoritma :
  • Teks algoritma berisi deskripsi langkah-langkah penyelesaian masalah. Deskripsi tersebut dapat ditulis dalam notasi apapun asalkan mudah dimengerti dan dipahami.
  • Tidak ada notasi yang baku dalam penulisan teks algoritma seperti notasi bahasa pemrograman. Notasi yang digunakan dalam menulis algoritma disebut notasi algoritmik.
  • Setiap orang dapat membuat aturan penulisan dan notasi algoritmik sendiri. Hal ini dikarenakan teks algoritma tidak sama dengan teks program. Namun, supaya notasi algoritmik mudah ditranslasikan ke dalam notasi bahasa pemrograman tertentu, maka sebaiknya notasi algoritmik tersebut berkorespondensi dengan notasi bahasa pemrograman secara umum.
  • Notasi algoritmik bukan notasi bahasa pemrograman, karena itu pseudocode dalam notasi algoritmik tidak dapat dijalankan oleh komputer. Agar dapat dijalankan oleh komputer, pseudocode dalam notasi algoritmik harus ditranslasikan atau diterjemahkan ke dalam notasi bahasa pemrograman yang dipilih. Perlu diingat bahwa orang yang menulis program sangat terikat dalam aturan tata bahasanya dan spesifikasi mesin yang menjalannya.
  • Algoritma sebenarnya digunakan untuk membantu kita dalam mengkonversikan suatu permasalahan ke dalam bahasa pemrograman.
  • Algoritma merupakan hasil pemikiran konseptual, supaya dapat dilaksanakan oleh komputer, algoritma harus ditranslasikan ke dalam notasi bahasa pemrograman. Ada beberapa hal yang harus diperhatikan pada translasi tersebut, yaitu :
a.  Pendeklarasian variabel
Untuk mengetahui dibutuhkannya pendeklarasian variabel dalam penggunaan bahasa pemrograman apabila    tidak semua bahasa pemrograman membutuhkannya.
b.  Pemilihan tipe data
Apabila bahasa pemrograman yang akan digunakan membutuhkan pendeklarasian variabel maka perlu hal ini dipertimbangkan pada saat pemilihan tipe data.
c.  Pemakaian instruksi-instruksi
Beberapa instruksi mempunyai kegunaan yang sama tetapi masing-masing memiliki kelebihan dan kekurangan yang berbeda.
d.  Aturan sintaksis
Pada saat menuliskan program kita terikat dengan aturan sintaksis dalam bahasa pemrograman yang akan digunakan.
e.  Tampilan hasil
Pada saat membuat algoritma kita tidak memikirkan tampilan hasil yang akan disajikan. Hal-hal teknis ini diperhatikan ketika mengkonversikannya menjadi program.
f.  Cara pengoperasian compiler atau interpreter.
Bahasa pemrograman yang digunakan termasuk dalam kelompok compiler atau interpreter.

Struktur


Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah satu kesatuan.
Contoh sebuah struktur adalah informasi data tanggal, yang berisi: tanggal, bulan dan tahun.

Mendeklarasikan Struktur
Contoh pendefinisian tipe struktur adalah sebagai berikut:
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
};
yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga buah elemen (field) berupa : tanggal, bulan dan tahun. Pendefnisian dan pendeklarasian struktur dapat juga ditulis sebagai berikut:
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
} tgl_lahir;

Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai berikut
struct nama_tipe_struktur
{
tipe field1;
tipe field2;
.
.
tipe fieldn;
}variabel_struktur1, ... , variabel_strukturM;
Masing-masing tipe dari elemen struktur dapat berlainan. Adapun variabel_struktur1 sampai dengan variabel_strukturM menyatakan bahwa variabel struktur yang dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara variable struktur dipisahkan dengan tanda koma

Keunggulan dan Kelemahan Array


Keunggulan array adalah sebagai berikut:
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemenelemen tetangga, baik elemen pendahulu atau elemen penerus
3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga, maka penggunaan penyimpanannya sangat efisien

Kelemahan array adalah sebagai berikut:
Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut:
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit diubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi terus-menerus, maka representasi statis
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan

Menyebut Angka

Ok, akhirnya sampai di sini juga. Program berikut adalah program untuk menyebut angka dalam bentuk kalimat mulai dari 1 sampai jutaan. Misalnya angka 123 menjadi “seratus dua puluh tiga”, dst. Berikut ini salah satu contoh kodenya:

#include <iostream>
using namespace std;

void first (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 second (int n) {
      int bul, sisa;
      bul = n / 10;
      sisa = n % 10;

      if (bul == 0)
            first (sisa);

      else if (bul == 1) {
            if (sisa <= 1)
                  first (n);

            else {
                  first (sisa);
                  cout << "belas ";
            }
      }

      else {
            first (bul);
            cout << "puluh ";
            first (sisa);
      }
}

void third (int n) {
      int bul, sisa;
      bul = n / 100;
      sisa = n % 100;

      if (bul == 0)
            second (sisa);

      else if (bul == 1) {
            if (sisa == 0)
                  cout << "seratus ";

            else {
                  cout << "seratus ";
                  second (sisa);
            }
      }

      else {
            first (bul);
            cout << "ratus ";
            second (sisa);
      }
}

void fourth (int n) {
      int bul, sisa;
      bul = n / 1000;
      sisa = n % 1000;

      if (bul == 0)
            third (sisa);

      else if (bul == 1) {
            if (sisa == 0)
                  cout << "seribu ";

            else {
                  cout << "seribu ";
                  third (sisa);
            }
      }

      else {
            third (bul);
            cout << "ribu ";
            third (sisa);
      }
}

void fifth (int n) {
      int bul, sisa;
      bul = n / 1000000;
      sisa = n % 1000000;

      if (bul == 0)
            fourth (sisa);

      else if (bul == 1) {
            if (sisa == 0)
                  cout << "satu juta ";

            else {
                  cout << "satu juta ";
                  fourth (sisa);
            }
      }

      else {
            third (bul);
            cout << "juta ";
            fourth (sisa);
      }
}

void main () {
      int n = 1;
      while (n == 1) {
            int num1;
     
            do {
                  cout << "";
                  cin >> num1;
            } while (num1 < 1);

            fifth (num1);
            cout << "\n";
      }
}



Logika:
Kita mau mengetes apakah angka yang dimasukkan adalah jutaan, ribuan, ratusan, puluhan, atau satuan. Karena pada dasarnya hanya itu saja jenis – jenis angka yang ada (tidak termasuk milyaran dan triliunan dan yang lebih besar, karena tipe int tidak dapat menjangkau bilangan – bilangan tersebut).
Pada waktu pertama kali kita “mengetes” bilangan tersebut, kita mencoba menguji:
1.      Apakah bilangan itu adalah jutaan?
Pertama – tama, mungkin ada yang bertanya mengapa bagian ini dimasuki terlebih dahulu? Secara logisnya, dari cara pengucapannya, dalam mengucapkan nama bilangan, tentu saja yang akan diucapan adalah bilangan terbesarnya lalu berurut sampai yang terkecil. Misalnya, 1.234 dibaca seribu dua ratus tiga puluh empat. Maka, dari besarnya angka yang dapat dimasukkan ke dalam program, jutaan merupakan “porsi” yang terbesar. Maka yang paling pertama diuji adalah “apakah bilangan itu adalah jutaan?”.
·        jika tidak, maka bilangan itu dites apakah bilangan itu adalah ribuan.
·        jika ya, maka “bagian jutaan” bilangan itu diterjemahkan ke dalam kata – kata lalu sisanya (ratusan ribu ke bawah) dicek lagi pada fungsi untuk bilangan ribuan.
2.      Apakah bilangan itu ribuan?
·        Jika tidak, maka bilangan itu akan dites apakah bilangan itu adalah ratusan.
·        Jika ya, maka “bagian ribuan” dari bilangan itu diterjemahkan lalu sisanya dimasukkan di bagian ratusan.
3.      Apakah bilangan itu ratusan?
·        Jika tidak, maka bilangan itu akan dites apakah bilangan itu adalah puluhan.
·        Jika ya, maka “bagian ratusan” dari bilangan itu diterjemahkan lalu sisanya dimasukkan ke dalam fungsi puluhan.
4.      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). Itu sebenarnya “kerjaaan” saya, yang membuatnya supaya programnya bisa diulang terus menerus (silahkan edit sendiri kalau mau merubahnya) J. 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 jutaan. 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 1.000.000 adalah 0 (nol), maka bisa dipastikan bahwa n bukanlah bilangan jutaan.
·        Jika hasil bulat dari pembagian n dengan 1.000.000 adalah 1 dan sisanya adalah 0 (nol), maka n pastilah 1.000.000 (satu juta).
·        Jika hasil bulat dari pembagian n dengan 1.000.000 lebih besar dari 1, maka bilangan tersebut pastilah lebih atau sama dengan 2.000.000. Maka hasil bulat pembagian tersebut, dimasukkan ke dalam third (karena nilai maksimal dari bilangan jutaan adalah ratusan juta), lalu di cetak kata “juta ”, dan kemudian sisanya dimasukkan ke dalam fourth (karena ada kemungkinan sisanya bernilai ribuan)
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 second, ada sebuah kondisi dimana jika hasil bulat dari pembagian adalah 1, dan jika sisanya lebih besar dari 1, maka sisanya akan dimasukkan ke dalam first dan selanjutnya di cetak kata “belas ”. Jadi misalnya, angkanya adalah 19, sisanya tentu saja adalah 9. Angka 9 di first, 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), ‘tul ga? 


Lisensi Dokumen:
Copyright © 2003-2007 IlmuKomputer.Com



Menyebut Angka Terbalik

Menyebut Angka Terbalik

Kita mulai memasuki salah satu bagian favorit saya yaitu “mengkonversi” bilangan menjadi kalimat / kata – kata J. Kita memasuki dulu bagian yang mudahnya, menyebut angka dengan terbalik. Kali ini, kita meminta user untuk mengurangi  bilangan apa pun (yang lebih kecil dari 10.000) dengan 10.000. Misalnya, user memasukkan angka 3456, maka 10.000 – 3.456 tentu saja hasilnya = 6.544, tapi kita mengkonversinya dengan menjadikannya sebagai kalimat tapi dibaca terbalik. Jadi, tampilannya adalah: empat empat lima enam J.
Kodenya adalah:

#include <iostream>
using namespace std;

void sntce (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 0: cout << "nol "; break;
      default: break;
      }
}

void reverse (int n) {
      int zero, mod;
      zero = n / 10;
      mod = n % 10;

      if (zero == 0 && mod == 0)
            exit;

      else {
            sntce (mod);
            reverse (zero);
      }
}


void main () {
      int in, reduce;
      const int stay = 10000;

      do {
            cout << "";
            cin >> in;
      } while (in > 10000 || in < 1);

      reduce = stay - in;
      reverse (reduce);
      cout << "\n";
}
                 
Logika:
Dari input yang dimasukan oleh user, dikurangi dengan 10.000 lalu hasilnya mulai dari angka paling terakhir sampai dengan angka pertama dikonversi ke dalam bentuk angka. Cara untuk “mengambil” angka terakhir adalah dengan mengambil modulo / sisa bagi dari hasil pengurangan tersebut dibagi 10. Misalnya, hasilnya 6544 dibagi 10 tentu saja sisanya adalah 4. Kemudian hasil bulat dari 6544 dibagi 10 yang adalah 654 akan di bagi lagi dengan 10 dan akan menghasilkan angka 4. Dan hasil bulat dari 654 dibagi 10 yang adalah 65 kembali dibagi dengan 10 dan sisanya adalah 5. Kemudian yang terakhir, karena nilai 6 yang disimpan kemudian dibagi 10, dan sisanya pasti 6, maka 6 diambil.

Penjelasan kode:
Pada bagian utama program, kita membuat beberapa variabel: reduce, in, dan stay. Variabel reduce sendiri berguna untuk menampung hasil pengurangan dari stay, yang telah kita beri nilai konstan dari awal yaitu 10.000. Tapi, kita mau mencegah agar user tidak memasukkan angka yang “tidak lazim” misalnya angka 0 atau 10.001 dan seterusnya. Maka,  kita memakai fungsi do...while (ini sebenarnya “favorit” saya, karena saya ingin selalu mencegah input yang tidak normal) dengan “aturan” bahwa tampilan tersebut (“”) akan selalu terulang bila user memasukkan angka yang lebih besar dari 10.000 atau lebih kecil dari 1. Kita lalu memasukkan reduce ke reverse, itulah akhir dari program utama. Lalu, seperti yang kita lihat di atas, ada 2 fungsi yang kita buat sejak awal: sntce dan reverse. sntce berfungsi untuk mengkonversi angka menjadi sebuah kata dengan fungsi switch, yang saya rasa sudah cukup jelas, bahwa jika inputnya (dalam hal ini adalah sisa bagi dari 10.000 dikurangi input dari user kemudian dibagi 10) adalah 1, maka yang ditampilkan adalah kata “satu”, bila 2, maka ditampilkan adalah “dua”, dst. Sedangkan reverse untuk menghitung hasil pengurangan dari 10.000 dikurangi dengan input dari user (in). Di sini kita memakai dua kondisi, yaitu jika hasil bulat dari n (reduce) dibagi 10 sama dengan 0 dan juga sisa bagi  (mod) sama dengan 0 (nol), dan kondisi di luat itu (tentu saja ini berarti bahwa masih ada bilangan yang harus di bagi 10 atau bisa saja masih ada sisa bagi yang harus di masukkan ke sntce). Jika yag terjadi adalah kondisi kedua, kita “melempar” variabel mod ke sntce (udah tau kan fungsinya?) lalu memangil kembali reverse dengan menggunakan zero sampai akhirnya tidak ada lagi yang bisa dibagi dan tidak ada lagi sisa pembagian.



Lisensi Dokumen:
Copyright © 2003-2007 IlmuKomputer.Com
 

Membuat Baris Ganda

Kali ini Anda diminta untuk membuat / menampilkan berapa banyak baris yang diminta oleh user tapi dengan menggandakan setiap baris yang dicetak di layar. Misalnya, jumlah baris yang diminta adalah 5, maka yang tercetak adalah:
11
2222
333333
44444444
5555555555



Maka kode yang saya buat adalah sebagai berikut:

#include <iostream>
using namespace std;

void main () {
      int in;
      cout << "banyaknya baris: ";
      cin >> in;

      for (int i = 1; i <= in; ++ i) {
            for (int j = 1; j <= i * 2; ++j) {
                  cout << i;
            }
            cout << "\n";
      }
}

Logika:
Logika yang digunakan di sini cukup mirip dengan cara kita mencetak segitiga siku –siku ke layar. Mungkin bisa dibilang ini masih ada “hubungan keluarga” dengan yang tadi J. Disini kita melakukan perulangan untuk mencetak baris yang diminta oleh user. Dalam melakukan perulangan tersebut, kita menampilkan baris yang dicetak pada saat itu. Misalnya jika baris yang sedang dicetak pada saat itu adalah baris kedua, maka yang ditampilkan adalah angka 2. Begitu seterusnya. Perhatikan bahwa angka – angka yang dicetak memiliki sebuah pola. Pada setiap baris yang sedang dicetak pola dari angka –angkanya adalah: baris yang sedang dicetak dikali 2. Misalnya pada baris pertama, jumlah angka / banyaknya  angka yang dicetak adalah 1 X 2 = 2 kali di cetak. Pada baris kedua, banyaknya baris yang di cetak adalah 2 X 2, dst. Hal ini berlanjut sampai baris yang diinginkan oleh user sudah tercetak.

Penjelasan kode:
Pada kode di atas, dibuat variabel untuk menampung berapa banyak baris yang diinginkan oleh user (in), just like usual J. Berdasarkan input dari user tersebut, kita membuat perulangan untuk mencetak baris – baris yang diinginkan user. Dalam perulangan ini, kita “menyisipkan” sebuah perulangan lagi untuk mencetak angka ke layar (dengan menggunakan variabel j). Perulangan ini dilakukan dengan kondisi j lebih kecil atau sama dengan i dikali 2. Dimana, i adalah baris yang sedang dikerjakan dan j adalah berapa banyak perulangan yang dilakukan dalam kondisi j lebih kecil atau sama dengan i.


Lisensi Dokumen:
Copyright © 2003-2007 IlmuKomputer.Com
free counters