Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Bahan Ajar Berpikir Logis dan Algoritmik, Papers of Computer Programming

Matakuliah dasar pemrograman, berisi materi materi pengenalan mata kuliah dasar pemrograman

Typology: Papers

2019/2020

Uploaded on 10/28/2020

meilinda-estevani
meilinda-estevani 🇮🇩

5

(4)

2 documents

Partial preview of the text

Download Bahan Ajar Berpikir Logis dan Algoritmik and more Papers Computer Programming in PDF only on Docsity! BA 10 TI1014 1 BUKU I BAHAN AJAR Berfikir Logis dan Algoritmik MATA KULIAH DASAR-DASAR PEMROGRAMAN Penyusunan Bahan Ajar Dalam Kurikulum Berbasis Kompetensi (Kurikulum 2007) ini dibiayai dari DIPA Politeknik Negeri Bandung Kementerian Pendidikan Nasional Tahun Anggaran 2010 Disusun oleh : Ade Chandra Nugraha, S.Si, MT NIP. 132 231 592 PROGRAM STUDI DIPLOMA III TEKNIK INFORMATIKA JURUSAN TEKNIK KOMPUTER DAN INFORMATIKA POLITEKNIK NEGERI BANDUNG 2010 i HALAMAN PENGESAHAN 1. Identitas Bahan Ajar a. Judul Bahan Ajar : Berfikir logis dan algoritmik b. Mata Kuliah / Semester : Dasar-dasar Pemrograman / 1 c. SKS (T-P)/ Jam (T – P) : 4 (2 – 2) / 7 (3 – 4) d. Jurusan : Teknik Komputer dan Informatika e. Program Studi : D3 Teknik Informatika f. Nomor Kode Mata Kuliah : TI 1014 2. Penulis Penulis 1 a. Nama : Ade Chandra Nugraha, S.Si, MT b. NIP : 132 231 592 c. Pangkat / Golongan : Penata Muda Tkt 1 / III b d. Jabatan Fungsional : Asisten Ahli e. Program Studi : D3 Teknik Informatika f. Jurusan : Teknik Komputer dan Informatika Penulis 2 : N/A Bandung, Juli 2010 Mengetahui, Ketua KBK Penulis 1, Joe Lian Min, M.Eng Ade Chandra Nugraha, S. Si, MT NIP. 132 140 889 NIP. 132 231 592 Menyetujui, Ketua Program Studi D3 Teknik Informatika Irwan Setiawan, S.Si, MT NIP. 198004192005011002 iv 2.3.1 Operasi Assignment .............................................................................................. 20 2.3.2 Operasi Read/Write .............................................................................................. 22 2.4 KESIMPULAN ........................................................................................................ 24 2.5 LATIHAN ................................................................................................................ 25 BAB III STRUKTUR PROSES ........................................................................................... 28 3.1 STRUKTUR PRIMITIF ........................................................................................... 29 3.1.1 Sequence (berurutan) ........................................................................................... 29 3.1.2 Selection (pemilihan) ............................................................................................ 29 3.1.3 Repetition (perulangan) ........................................................................................ 30 3.2 DOKUMENTASI STRUKTUR PROSES ............................................................... 30 3.2.1 Flowchart (Bagan Alir) ........................................................................................ 31 3.2.2 Pseudocode ........................................................................................................... 35 3.3 KESIMPULAN ........................................................................................................ 43 3.4 LATIHAN ................................................................................................................ 44 BAB IV FILE MANIPULASI .............................................................................................. 50 4.1 KONSEP FILE ......................................................................................................... 51 4.2 KONSEP FILE SEDERHANA ................................................................................ 52 4.3 OPERASI PRIMITIF TERHADAP SIMPLE-FILE ..................................................... 53 4.3.1 Read (Atau Membaca) .......................................................................................... 53 4.3.2 Write (atau menulis) ............................................................................................. 53 4.3.3 Rewind (atau menggulung) ................................................................................... 53 4.4 EFEK OPERASI PRIMITIF SIMPLE-FILE : .......................................................... 54 4.5 KONDISI END OF FILE .......................................................................................... 54 4.6 ALGORITMA MANIPULASI FILE ....................................................................... 55 4.7 KESIMPULAN ........................................................................................................ 57 BAB V STRUCTURED PROGRAMMING ....................................................................... 58 5.1 HIRARKI PROGRAM ............................................................................................. 59 5.2 PROCEDURE VS FUNCTION ................................................................................. 60 5.3 HUBUNGAN ANTAR MODUL. ............................................................................ 60 5.4 JENIS PARAMETER ............................................................................................... 63 5.5 PARAMETER-PASSING ........................................................................................ 63 5.6 VARIABEL LOKAL DAN VARIABEL GLOBAL ................................................ 64 v 5.7 SIFAT REKURSIF ................................................................................................... 65 5.8 ABSTRACT DATA TYPE (ADT) ........................................................................... 66 5.9 CONTOH MODUL PROGRAM ............................................................................. 74 5.10 KESIMPULAN ........................................................................................................ 78 5.11 LATIHAN ................................................................................................................ 78 vi DAFTAR ISTILAH File : Kumpulan data yang tersimpan dalam media “secondary storage”. Final State : keadaan akhir, merupakan penterjemahan tujuan program Initial State : keadaan awal, merupakan titik tolak dari sebuah program. p/l : Perangkat lunak, yaitu komponen/elemen sistem komputasi yang tidak dapat dijamah secara fisik. Merupakan bagian sistem komputasi hasil implementasi dari logika pemrograman. ix DESKRIPSI MATA KULIAH Identitas Mata Kuliah a. Judul Mata Kuliah : Dasar-dasar Pemrograman b. Nomor Kode / SKS : TI 1014 / 4 c. Semester / Tingkat : 1 / I d. Prasyarat : Ilmu matematika SMA e. Jumlah Jam / Minggu : 7 Ringkasan Topik / Silabus Berpikir logis dibutuhkan dalam menyelesaikan suatu permasalahan. Solusi yang sistematis akan mengoptimalkan langkah kerja. Keterbatasan manusia menuntut adanya peran alat (computer) dalam membantu menyelesaikan permasalahan di bidang informatika. Agar komputer dapat berperan dalam menyelesaikan permasalahan di dunia nyata, tentunya perlu diturunkan langkah kerja / proses yang sistematis sehingga Final State dapat dicapai dari Initial State yang didefinisikan. Pembahasan dimulai dengan membiasakan diri untuk berpikiran logis, detil dan sistematis. Dilanjutkan dengan cara pendokumentasian pola pikir tersebut kedalam format baku dunia informatika. Algoritma yang disusun ditambah dengan kemampuan memahami syntaks dalam bahasa pemrograman tertentu akan memudahkan coding untuk mengimplementasikan perangkat lunak aplikasi yang sesuai dengan kebutuhannya. Optimalisasi dan pemikiran akan sifat reusability dari algoritma yang dibuat menuntut adanya pemahaman modularitas program yang memecah program menjadi beberapa sub program dengan tujuan yang spesifik. Setalah mahasiswa dapat mendokumentasikan algoritma dari proses-proses sederhana, maka di phase berikut mahasiswa mulai diberikan pemahaman terkait dengan bahasa pemrograman tertentu dengan pendekatan terstruktur, dimulai dari x keyword dalam bahasa pemrograman, struktur program sampai dengan pembuatan modul program yang memudahkan pembuatan program besar secara teamwork. Diharapkan dengan kemampuan mahasiswa untuk meng coding modul-modul generic – seperti counting, summing, searching dan sorting - dapat menjadi modal dalam pembuatan algoritma dan implementasi program yang memiliki kemampuan lebih kompleks. Kompetensi yang Ditunjang Kompetensi yang ditunjang oleh mata kuliah Dasar-dasar pemrograman adalah berpikir logis dan algoritmik, Menganalisis kebutuhan perangkat lunak, merancang perangkat lunak, mengembangkan perangkat lunak, serta mendokumentasikan perangkat lunak. Tujuan Pembelajaran Umum Setelah menyelesaikan matakuliah ini, mahasiswa dapat mengenal metode pemecahan masalah dan pengembangan algoritma melalui pendekatan yang taat aturan; mengetahui abstraksi proses dan data; mengetahui dan dapat merancang, meng- coding, men-debugging, melakukan testing dan menyusun dokumentasi program menggunakan gaya pemrograman yang baik; serta dapat menerapkan keterkaitan dan hirarki program; sehingga dapat memberikan dasar bagi studi lanjut dalam kajian ilmu komputer. Tujuan Pembelajaran Khusus Setelah menyelesaikan matakuliah ini, mahasiswa dapat berfikir logis dan terstruktur dalam rangka memberikan alternatif solusi bagi permasalahan yang diberikan, khususnya dalam proses komputasi. Pemberian alternatif solusi untuk komputasi dapat didukung oleh adanya struktur proses dan struktur data yang dipilih. Mahasiswa juga harus mampu menguraikan dan mendokumentasikan alternatif solusi menggunakan sequential statement (pseudocode) atau menggunakan diagram flowchart. Setelah mengikuti mata kuliah ini mahasiswa diharapkan : • mampu mengungkapkan suatu masalah dan penyelesaiannya dalam bentuk yang terstruktur • mengetahui dan memahami aspek aspek penting pemrograman komputer. xi • memahami dan menguasai unsur unsur dasar pembentuk sebuah program komputer. • memahami dan menguasai algoritma algoritma dasar. • dapat membuat algoritma sederhana yang tipikal. • dapat memecahkan permasalahan dengan paradigma prosedural dan menuliskan spesifikasi serta algoritmanya tanpa tergantung pada suatu bahasa pemrograman. • memahami penggunaan I/O device dan operasi terhadapnya • mampu menterjemahkan suatu notasi algoritmik kedalam suatu bahasa pemrograman tertentu untuk kemudian mengeksekusinya 2 1.1 PROGRAM Pengertian Umum Program Program adalah kumpulan "OPERASI" ( atau langkah kerja ) yang tersusun dengan aturan tertentu, dinyatakan melalui "bahasa" tertentu, dimaksudkan untuk dilakukan oleh suatu "pelaksana" tertentu, untuk mencapai suatu "keadaan akhir" yang diinginkan, bertolak dari "keadaan awal" tertentu pula. ASPEK KUNCI PADA SEBUAH PROGRAM. Dalam sebuah program dapat diidentifikasi beberapa aspek kunci berikut : Tabel 1. Aspek Kunci sebuah Program FINAL STATE atau keadaan akhir, merupakan penterjemahan tujuan program ybs. INITIAL STATE atau keadaan awal, merupakan titik tolak program ybs. OPERASI langkah langkah kerja dalam program. STRUKTUR aturan hubungan dan susunan operasi operasi. PELAKSANA atau lazim disebut PEMROSES, yang menjalankan setiap operasi dalam program. BAHASA aturan untuk menyatakan operasi dan struktur. 1.1.1 Initial State dan Final State Beberapa hal yang harus diperhatikan saat mendefinisikan dan menetapkan Initial dan Final State dari sebuah program adalah : • identifikasi dan deskripsi initial dan final state memegang peranan penting pada proses pembuatan program. • suatu program bisa salah, gagal atau menimbulkan ekses yang tidak diharapkan karena kesalahan si pembuat program dalam identifikasi initial dan atau final state. 3 1.1.2 Struktur Pada Sebuah Program Pengertian struktur pada suatu program adalah "established relationship" ( keterkaitan yang dimapankan ) antara 2 atau lebih bagian dari suatu program ( operasi adalah bagian terkecil dari suatu program ). Struktur dapat dibedakan dalam 2 kelompok besar sbb : • PARALEL : lebih dari 1 operasi dilakukan secara serentak. • NON-PARALEL : tidak ada 2 operasi/lebih yg dilakukan serentak. Pada masalah pemrograman komputer struktur paralel dianggap "advanced" (tidak akan dibahas pada kesempatan ini). Sedangkan kelompok struktur Non-Paralel terdiri dari 3 kategori sbb : Sequence : atau urutan, suatu operasi dilakukan setelah operasi lain. Selection : atau pilihan, hanya boleh dilaksanakan satu diantara beberapa operasi. Repetition : atau pengulangan, operasi dilakukan terus menerus sampai suatu kondisi tertentu. Pengertian struktur mencakup pula aspek hirarki diantara program s/d operasi : operasi ⇒ himpunan operasi ⇒ super himpunan operasi ⇒ ....dst s/d ⇒ program atau program ⇒ subprogram ⇒ sub-sub-program ⇒ ...dst s/d operasi 1.1.3 Operasi dan Pelaksana Operasi adalah "Action" yang menghasilkan "Effect". Yang dimaksud dengan effect ialah suatu perubahan state tertentu. Dengan kata lain : Operasi harus menghasilkan perubahan dari suatu state ke state lainnya. Operasi harus bersifat "well-defined", yang berarti : diketahui secara definitif • OBJEK yang dikenainya, dan 4 • (PERUBAHAN) STATE yang dihasilkannya OPERASI PRIMITIF adalah operasi yang tidak perlu diurai lebih lanjut. Beberapa hal yang berkaitan dengan OPERASI PRIMITIF : • level operasi primitif tergantung pada karakteristik pelaksana (pintar atau bodohnya ). • makin tinggi level pemrograman, maka makin kompleks operasi primitif dan objek yang dikenainya. • makin tinggi level pemrograman, maka makin banyak kemudahan yang tersedia bagi pemrogram, dan makin manusiawi bentuk interaksi pemrogram dan pelaksana. • makin rendah level pemrograman, maka proses pembuatan program makin : time- consuming, effort-consuming. 1.1.4 Bahasa Dalam sebuah program, bahasa dapat diterjemahkan sebagai : • himpunan aturan untuk menyatakan state ( kondisi ), operasi, objek dan struktur. • secara implisit setiap "bahasa" disusun berdasarkan anggapan tertentu mengenai karakterisitik pelaksana, oleh karena itu : ada kategorisasi bahasa menurut level dan spesialisasi bidang masalah. 1.2 PROGRAM - KOMPUTER Program komputer adalah program yang pelaksananya adalah komputer. Komputer pada dasarnya adalah pemroses logika elementer (biner), dengan objek nilai biner (octal/hexadecimal) yang merepresentasi-kan data atau objek arsitektural komputer ybs. Dengan kata lain, dalam pemrogramannya hanya boleh dipergunakan : 1. operasi logika elementer (And, or, not) 2. objek nilai biner/ octal/ hexadecimal 7 • bahasa generasi ke 5 ( "5th generation language" ) : dibuat program program yang sangat membantu sehingga pembuatan program komputer bersifat "hampir- otomatik", artinya sang "pemrogram" sebenarnya hanya membuat spesifikasi saja, program komputernya sendiri dibuatkan oleh program lain. 1.2.4 Perbandingan Karakteristik Aras Bahasa Sebagai kesimpulan dapat diperlihatkan sebuah perbandingan karakteristik bahasa pemrograman seperti di bawah ini: Tabel 2. Karakteristik bahasa pemrograman aras/ level operasi spesifik objek operasi spesifik rendah logika biner seperti and, or, shitf-left, shift-right dalam bentuk kode biner/ heksadesimal nilai biner/ heksadesimal, alamat memori, register CPU dan alamat I/O port dalam kode biner/ heksadesimal menengah idem diatas tapi dalam kode mnemonic kode mnemonic dari suatu nilai atau register CPU Tinggi matematis seperti : +, -, sinus dsb., baca dan tulis I/O, semuanya dalam kode mnemonic kode mnemonic yang mewakili : variabel atau file yang berisi nilai tertentu Dari kesimpulan di atas, maka bandingan coding yang dapat dilakukan dalam sebuah "program" untuk menambahkan 2 buah nilai adalah sebagai berikut : Tabel 3. Perbandingan Coding Level bentuk "program" penjelasan Rendah A1A601 0306A801 A3AA01 A1 adalah kode hex untuk operasi salin ke register AX dari memori, 01A6 adalah alamat memori data yang disalin 0306 adalah kode hex untuk operasi penambahan ke register AX dengan nilai dari memori, 01A8 adalah alamat memori data yang ditambahkan A3 adalah kode hex untuk operasi salin dari register AX ke memori, 01AA adalah alamat memorinya. 8 Level bentuk "program" penjelasan Menengah MOV AX,word ptr DAT:a ADD AX,word ptr DAT:b MOV word ptr DAT:c,AX salin nilai yang ditunjuk oleh pointer DAT:a register AX kalikan nilai yang ditunjuk oleh pointer DAT:b ke register AX salin isi register AX ke alamat yang ditunjuk oleh pointer DAT:c Tinggi c:=a*b; kalikan isi variabel a dengan isi variabel b, hasilnya ada di variabel c 1.3 ALGORITMA Ragam Bahasa Pemrograman Meskipun ada pengelompokkan lingkungan dan bahasa pemrograman seperti tersebut diatas, akan tetapi bahasa pemrograman tetap sangat beragam. Ada bahasa pemrograman yang meskipun termasuk aras tinggi, akan tetapi tetap mempunyai operasi-operasi yang sebenarnya bersifat aras menengah, bahkan rendah. Adapula bahasa pemrograman yang dibuat khusus untuk keperluan tertentu, misalnya : untuk pemodelan matematis saja, atau untuk keperluan pengolahan file saja, dsb. Setiap bahasa tersebut mempunyai aturan penulisannya masing masing, satu sama lain mungkin sangat berbeda. Aturan tersebut disebut sebagai syntax. Melihat kenyataan di atas maka dirasakan perlu untuk sedikit banyak melepaskan diri dari pengaruh keragaman bahasa, terutama pada kegiatan studi serta perancangan program. Dengan demikian perhatian dapat difokuskan pada aspek logika yang terkandung di dalam program komputer. Dua buah program komputer yang ditulis dengan bahasa yang berbeda, mungkin saja sebenarnya merupakan terapan dari suatu logika-pemrograman yang tepat sama. Notasi Dan Arti Algoritma Usaha untuk menuliskan kandungan logika saja sudah barang tentu menuntut adanya suatu notasi tertentu yang bersifat cukup umum, harus bersifat 9 seperti notasi-notasi pada ilmu matematik. Sampai saat ini belum ada keseragaman pada penggunaan notasi seperti yang diharapkan. Bentuk representasi sebuah program dalam notasi seperti yang diharapkan di atas disebut sebagai algoritma. Kata ini baru muncul di Webster's New World Dictionary mulai tahun 1957. Sebelumnya hanya dijumpai kata "algorism" yang berarti: melakukan proses aritmatika dengan menggunakan numerik Arab. Sebutan ini berasal dari abad pertengahan dimana aritmatika umum dilakukan dengan 2 cara : dengan cara abacus atau dengan cara algorism. Studi sejarah membuktikan bahwa kata algorism berasal dari nama seorang pengarang buku Abu Jafar Mohammad ibnu Musa al-Khowarizmi (yang berarti ayah Jafar, Mohammad, anak Musa, berasal dari Khowarizmi suatu kota yang sekarang disebut Khiva di kawasan Uni Soviet dekat perbatasan Iran; hidup sekitar tahun 825). Ia menulis buku yang berjudul "Kitab al Jabr w'al-muqabala", yang berisi aturan restorasi dan reduksi. Kata aljabar yang kita kenal berasal dari nama buku ini. Menurut para akhli bahasa, secara berangsur angsur kata algorism ini berubah bentuk dan bergeser artinya. Seperti dijumpai pada suatu kamus matematik tua terbitan Jerman yang berjudul "Vollstandiges Matematisches Lexicon" ( diterbitkan di Leipzig pada 1747 ), algorithmus diartikan sebagai : semua hal mengenai perhitungan yang melibatkan operasi kali, bagi, tambah dan kurang. Sedangkan dalam bahasa Latin kata algoritma muncul pertama kali sesuai penemuan Leibnitz, dimana algorithmus infinitesimalis dipergunakan dengan arti : cara perhitungan dengan menggunakan nilai kecil yang berjumlah tak hingga seperti pada cara yang dipergunakan oleh Leibnitz. Pada sekita tahun 1950 kata algoritma paling sering dikaitkan dengan "algoritma Euclid" ialah suatu langkah langkah perhitungan untuk menentukan Pembagi Persekutuan Terbesar dari 2 buah bilangan. Menurut Ellis Horowitz , Algoritma didefinisikan sbb : a precise method useable by computer for the solution of a problem. An algorithm is composed of a finite set of steps, each of which may required one or more operations . Saat ini kata algoritma diartikan sebagai : 12 • Menghitung jumlah spidol berdasarkan warna; • Menghitung jumlah mahasiswa dan mahasiswi di kelas; • Mencari mahasiswi yang berkacamata dan berasal dari luar pulau Jawa; • Transaksi pengambilan uang melalui ATM. Post Test v Sebutkan tahapan proses untuk satu kegiatan rutin yang biasa dilakukan, dengan mengidentifikasi Initial State, Final State dan struktur proses yang terkait. v Definisi program komputer yang mahasiswa pahami. v Apa perbedaan program komputer dan algoritma ? 13 BAB II KONSEP DATA DAN VARIABEL Tujuan Pembelajaran Umum : Memberikan pengetahuan terkait dengan peran data dan jenisnya dalam penyusunan algoritma serta menguasai operasi Assignment. Setelah menyelesaikan pembahasan ini, mahasiswa : • Memahami perbedaan data dan informasi. • Dapat mengidentifikasi Tipe data yang tepat untuk menyelesaikan permasalahan komputasi. Tujuan Pembelajaran Khusus : Setelah menyelesaikan pembahasan ini, mahasiswa : 1. Dapat membedakan pengertian data dan informasi; 2. Dapat mengidentifikasi type data yang tepat dalam merumuskan pemecahan permasalahan tertentu; 3. Dapat membedakan penggunaan konstanta dan variabel; 4. Mengetahui struktur dan jenis data serta cara penulisannya dalam algoritma; 5. Dapat menggunakan operasi Assignment dengan tepat dan mengetahui apakah operasi tersebut sahih atau tidak. 6. Dapat menuliskan operasi primitif yang melibatkan I/O device. Pre Test v Sebutkan perbedaan data dan informasi. v Uraikan bagaimana komputer dapat mengenal dan menyimpan data untuk kebutuhan otomatisasi! v Sebutkan tipe data yang sudah diketahui, baik dari bahasa pemrograman maupun ilmu matematika. 14 2.1 KONSEP DATA Arti Data Dan Informasi Data adalah rekaman mengenai fakta : sesuatu yang benar benar ada, atau ide : sesuatu yg dibayangkan, hanya ada dalam pikiran manusia. Data dapat menyangkut : event / peristiwa, serta konsep baik berupa benda, objek, jenis dan propertinya. Menurut Langeford ( 1977 ) Informasi adalah tambahan pengetahuan yang diperoleh dari data. Berarti informasi bersifat subjektif, sedangkan data bersifat objektif. Software komputer digital selalu berhubungan dengan kreasi/constructor, operasi, akses, dan destructor suatu struktur data dalam kaitan penyelesaian masalah. Penyelesaian masalah, komputasinya dikaterogikan sebagai : matematis, grafik, text, voice, image, dan multimedia. Dalam istilah komputer, data merupakan nama yang diberikan pada suatu item yang dapat dioperasikan oleh program komputer. Setiap item data yang digunakan dalam suatu program mempunyai beberapa atribut berikut : 1. Alamat (address) 2. Nilai (value) yang berkaitan dengan representasi dan interpretasi 3. Sekumpulan operasi yang diberlakukan terhadap data 4. Pengenal (identifier) yang menyatukan alamat, nilai, dan operasi Nature atribut tersebut diwujudkan dalam bentuk tipe dari suatu item data. Tipe data merupakan algoritma yang berfungsi menginterpretasikan nilai bit string menjadi nilai yang representatif sesuai dengan tipe data yang didefinisikan. Pada umumnya tipe data dikategorikan sebagai (a). tipe data primitif : integer, real, boolean, character, dan pointer; (b) tipe data komposit : array, string, record, enumerasi, set, dan list; dan (c) user defined data types. 17 Representasi tipe data konglomerat/non primitif dapat berupa Array, struktur/record, dan Linked List. Masing-masing type data memiliki operasi yang dapat diberikan, seperti operasi matematis untuk type numerik, operasi logika (and, or, not, xor) untuk type boolean dan “ord” serta “chr” untuk type alphanumerik. 2.2 KONSEP VARIABEL 2.2.1 Konstanta dan Variabel Dalam konsep pemrograman dikenal pengertian konstanta dan variabel. Konstanta ialah data yang nilainya tidak dapat berubah/diubah, atau konstan sedangkan Variabel ialah data yang nilainya dapat diubah-ubah melalui operasi yang diberikan kepada variabel tersebut. Variabel harus diberi nama (atau disebut juga label), dan referensi terhadapnya dilakukan dengan menyebut namanya. Aturan penamaan variabel beragam tergantung pada bahasa pemrograman yang dipergunakan. Dalam algoritma biasanya aturan penamaan ini dianggap bebas, selama tidak menimbulkan kerancuan. Referensi terhadap konstanta bentuknya tergantung dari jenis datanya, sebagai contoh : 26 adalah konstanta nilai numerik bulat ( integer ) 26.0 adalah konstanta nilai numerik pecahan ( real ) "A" adalah konstanta lambang alfanumerik tunggal ( karakter ) TRUE adalah konstanta nilai logika "SANDRA" adalah konstanta deretan lambang alfanumerik ( string ) 2.2.2 Jenis Variabel Jenis variabel dipandang melalui 2 cara sesuai dengan jenis datanya atau sesuai dengan strukturnya : dikenal berbagai jenis struktur, akan tetapi untuk sementara hanya diperkenalkan struktur primitif tunggal dan array ( barisan, atau deretan nilai sejenis ). 18 Pada algoritma definisi dapat dilakukan melalui kata kata biasa, sedangkan dalam lingkungan pemrograman harus dilakukan melalui aturan aturan penulisan yang ada. Deklarasi data dimaksudkan untuk memperkenalkan suatu item data. Dalam lingkungan bahasa pemrograman JAVA, C, PASCAL, Visual BASIC dilakukan dengan cara mengasosiasikan identifier item dengan suatu tipe data. Sebagai contoh, deklarasi tipe data dalam beberapa bahasa pemrograman dapat dituliskan sebagai berikut : int integerItem; (JAVA, C) var integerItem : integer; (PASCAL) DIM integerItem AS integer (Visual BASIC) Sintak deklarasi di atas memiliki makna bahwa dideklarasikan data integerItem yang bertipe int (integer/ bilangan asli). Deklarasi item data dapat dilakukan dalam program utama, maupun dalam sub program (prosedur, dan fungsi). Misalnya s adalah variabel integer, t adalah array integer yang memiliki 10 elemen, dan p adalah pointer ke suatu nilai integer; maka cara deklarasi tipe data dalam bahasa PASCAL adalah : var s : integer; t : array[1..8] of integer; p : ^integer; Sedangkan dalam bahasa C : int s,t[8],*p; 2.2.3 Variabel Non-Primitif Ada 2 cara pendefinisian variabel non-primitif , yaitu dengan terlebih dahulu mendefinisikan jenis data non-primitifnya, baru kemudian mendefinisikan variabel ybs. Atau langsung mendefinisikan variabel ybs. Sebagai contoh cara pertama : 3. didefinisikan jenis data non-primitif sbb : nama jenis data adalah anu yang terdiri dari 2 bagian sbb : • bagian ke 1 disebut satu berjenis integer, dan 19 • bagian ke 2 disebut dua berjenis karakter. 4. kemudian didefinisikan variabel x yang berjenis anu. Pelaksanaan cara definisi tersebut dalam bahasa PASCAL adalah: type anu = record satu : integer; dua : char; end; var x : anu; Hal yang sama jika di coding dalam bahasa C adalah: typedef struct { int satu; char dua; } anu; var anu x ; Contoh cara kedua : langsung didefinisikan suatu variabel dengan nama x yang terdiri dari 2 sub variabel sbb : • sub-variabel ke 1 disebut satu berjenis integer, dan • sub-variabel ke 2 disebut dua berjenis karakter. Pelaksanaan definisi seperti ini dalam bahasa PASCAL adalah sbb : var x : record satu : integer; dua : char; end; 2.3 OPERASI PRIMITIF Operasi adalah suatu proses untuk mengubah keadaan (state) variabel dari keadaan awal (initial state) ke keadaan akhir (final state). Jenis operasi dibagi 22 • x adalah array integer yang mempunyai 5 buah elemen, • y adalah array karakter yang mempunyai 4 buah elemen, • t adalah variabel integer yang nilai = 2, Maka operasi operasi dibawah ini tidak sahih : (operasi-1) x[t] ← x[t+4] + 3 (operasi-2) y[t] ← y[t] + 3 (operasi-3) x[t] ← y[t] Penjelasan : • operasi-1 : x[t+4] berarti x[6] karena t=2, karena x hanya berelemen 5 berarti x[6] tidak ada ! • operasi-2 : y adalah array karakter oleh karena itu y[t], dalam hal ini y[2] tidak dapat ditambahkan dengan nilai bilangan bulat 3. • operasi-3 : y[t] yang berjenis karakter tidak dapat disalinkan ke x[t] yang berjenis integer ! Catatan : v pada lingkungan pemrograman tersedia cara-cara yang sahih (biasanya memakai fungsi) untuk melakukan konversi nilai dari suatu jenis data ke jenis data lain. v ada lingkungan pemrograman yang menerapkan aturan yang tegas mengenai jenis operator dan penyalinan data yang diijinkan terhadap setiap jenis data, ada pula yang agak lunak. Penerapan aturan yang keras biasa disebut dengan sifat "strong-typed", sedangkan penerapan yang agak longgar disebut sebagai "weak-typed". Bahasa Pascal termasuk jenis strong-typed sedangkan bahasa C termasuk weak-typed. 2.3.2 Operasi Read/Write Agar program komputer dapat berinteraksi dengan lingkungan di luar komputer, maka selain operasi Assignment, operasi primitif yang dapat diberikan dalam algoritma adalah operasi yang melibatkan peralatan masukan dan keluaran 23 (I/O device). Contoh dari Input Device adalah keyboard, mouse, scanner, barcode reader dll, sedangkan output device dapat berupa layar monitor atau printer. I/O device harus dibedakan dari file/storage device, I/O device tidak memiliki fungsi untuk “mengingat” sedangkan File/storage device memiliki fungsi untuk “mengingat”. Operasi Read Operasi Read /“Membaca” adalah operasi yang menerima data dari Input device dan menampungnya dalam variabel tertentu. Bentuk umum operasi Read adalah : READ (Input Device) V1 [, V2, …, Vn] Input Device dapat berupa : Keyboard, Mouse, Joystick, dll V1 … Vn adalah variabel penampung nilai hasil proses input, minimal satu buah. Tanda [ … ] menunjukkan bahwa V2, V2, … Vn boleh digunakan seperlunya (optional). Contoh : Jika A adalah variabel bertipe boolean dan ingin dilakukan operasi entry terhadap nilai logika ke variabel A melalui keyboard, maka operasinya : READ (Keyboard) A Operasi READ dianggap sahih jika type data yang dimasukkan oleh user / sistem lain sama dengan type data yang dimiliki oleh variabelnya. Operasi Write Operasi Write /“Menulis” adalah operasi untuk mengirimkan data yang ditampung dalam variabel tertentu ke Output device. Bentuk umum operasi Write adalah : WRITE (Output Device) [V1 , V2, …, Vn] Output Device dapat berupa : Monitor, Printer, dll 24 V1 … Vn adalah variabel penampung nilai yang akan dikeluarkan, Tanda [ … ] menunjukkan bahwa V1, V2, … Vn boleh digunakan seperlunya (optional). Selain variabel, operasi write juga digunakan untuk menampilkan suatu nilai ke alat output secara langsung. Contoh operasi baca dan tulis : Read (keyboard) N // Membaca nilai dan ditampung oleh variabel N i ← 1 while ( i ≤ N) do write (layar) i // Tampilkan ke layar monitor nilai variabel i Read (keyboard) X(i) //Entry kan nilai X(i) dari keyboard i ← i+1 endwhile 2.4 KESIMPULAN Poin penting untuk dipahami: • Komputer dapat membantu proses automatisasi jika diberikan alur proses dan adanya manipulasi data yang terkait. • Proses transformasi data menjadi informasi membutuhkan struktur proses yang dirangkai dari berbagai operasi primitif. • Operasi primitif dalam algoritma terdiri dari operasi assignment dan operasi read/write yang melibatkan input/output device. • Operasi assignment membutuhkan syarat sahih yang didukung oleh pemahaman konsep data dan variabel. • Data ditampung dalam memory komputer pada proses komputasi, melalui identifikasi alamat, nilai dan representasi, identifier serta operasi yang dapat diberikan. • Berdasarkan operasi dan nilai/representasi data yang dapat diberikan, maka data dikelompokkan sesuai dengan tipe datanya. Jenis data terdiri atas tipe data elementer dan tipe data komposit/bentukan. • Tipe data elementer terdiri dari nilai numerik, lambang alphanumerik, nilai boolean / logika dan pointer (penunjuk alamat data). • Tipe data komposit adalah tipe data yang disusun dari satu atau beberapa tipe data elementer yang dapat merepresentasikan satu kesatuan fakta atau ide. 27 d) b ← c + a e) d(2) ← e = “E” Post Test v How do you design software to control a computer? v How do you organise large amounts of information for efficient computation? 28 BAB III STRUKTUR PROSES Tujuan Pembelajaran Umum : Memberikan pengetahuan secara komprehensif tentang ‘struktur proses yang dapat dibentuk untuk memberikan alternatif solusi’. Setelah menyelesaikan pembahasan ini, mahasiswa : • Memahami dasar dan jenis struktur proses. • Dapat mengidentifikasi struktur proses yang tepat untuk menyelesaikan permasalahan tertentu Tujuan Pembelajaran Khusus : Setelah menyelesaikan pembahasan ini, mahasiswa : 1. Dapat mengkategorikan struktur yang tepat dalam penyelesaian suatu permasalahan baik menggunakan : • Struktur sequence, • Struktur selection,maupun • Struktur repetition 2. Memahami penggambaran struktur primitif dalam flowchart. 3. Mampu menguraikan struktur proses menggunakan notasi sequential atau pseudocode. 4. Mampu mengkonversikan logika proses dari notasi flowchart ke pseudocode dan sebaliknya. 5. Dapat menyusun struktur proses secara logis dan dapat ditelusuri (tracing). Pre Test v Sebutkan tahapan proses logis untuk satu proses komputasi. v Identifikasi pengetahuan mahasiswa tentang struktur proses (non paralel). 29 3.1 STRUKTUR PRIMITIF Struktur primitif adalah : struktur yang tidak dapat dinyatakan melalui struktur lainnya (tidak dapat diuraikan lagi). Struktur primitif merupakan komponen dasar pembentukan struktur algoritma. Menurut Bohm dan Jacopini terdapat 3 macam struktur primitif non paralel (= struktur sequential), yaitu : • Sequence adalah suatu operasi atau kelompok operasi yang dilaksanakan setelah operasi atau kelompok operasi lain. Pada struktur ini, setiap instruksi akan dijalankan (dieksekusi) satu demi satu secara berurutan, mulai dari instruksi yang pertama sampai dengan instruksi yang terakhir. • Selection adalah struktur yang memilih satu atau beberapa kelompok operasi untuk dilaksanakan berdasarkan hasil evaluasi terhadap suatu kondisi. • Repetition adalah struktur yang melakukan satu operasi atau beberapa kelompok operasi untuk dilaksanakan berulang-ulang berdasarkan hasil evaluasi terhadap suatu kondisi. 3.1.1 Sequence (berurutan) Struktur Sequence merupakan struktur kontrol algoritmik yang paling sederhana. Sequence adalah sederetan instruksi primitif dan / atau aksi yang akan dilaksanakan / dieksekusi oleh komputer berdasarkan urutan penulisannya. Initial state dari sequence adalah state awal yang harus dipenuhi dan Final State dari Sequence adalah final state setelah instruksi/aksi terakhir dilakukan. 3.1.2 Selection (pemilihan) Struktur Selection biasa dikenal dengan istilah Analisa Kasus. Analisa Kasus adalah konstruktor terpenting dalam Algoritma, melalui analisa kasus dimungkinkan untuk membuat teks yang sama dalam program namun menghasilkan eksekusi yang berbeda-beda. Untuk mendefinisikan analisa kasus perlu diidentifikasi Kondisi (berupa ekspresi yang menghasilkan true/false) dan Aksi yang akan dilaksanakan jika kondisi yang dipasangkan dengan aksi tersebut terpenuhi. Konstruksi dari suatu 32 dalam sebuah program komputer secara logis, sedangkan detailed computer program flowchart digunakan oleh programmer untuk menggambarkan instruksi program komputer lebih terinci dalam bahasa tingkat tinggi. Flowchart untuk ketiga struktur proses yang telah diuraikan di sub bab sebelumnya dapat digambarkan sebagai berikut : Mulai Instuksi atau kelompok instruksi yang ke - 1 Selesai Instuksi atau kelompok instruksi yang ke - 2 Instuksi atau kelompok instruksi yang ke - 3 Gambar 4. Flowchart untuk sequence proses Pada struktur sequence di atas, setiap instruksi akan dijalankan (dieksekusi) satu demi satu secara berurutan, mulai dari instruksi yang pertama sampai dengan instruksi yang terakhir. Operasi 1 Kondisi ? Operasi 2 True False Gambar 5. Flowchart untuk proses selection Dalam struktur proses selection, akan dipilih satu atau beberapa kelompok operasi untuk dilaksanakan berdasarkan hasil evaluasi terhadap suatu kondisi. Struktur proses repetition adalah struktur proses yang melakukan satu operasi atau beberapa kelompok operasi untuk dilaksanakan berulang-ulang berdasarkan hasil evaluasi terhadap suatu kondisi. 33 Ada dua struktur primitif untuk perulangan yang dapat digambarkan oleh flowchart, yaitu : 1. Struktur Do While, yaitu struktur perulangan yang : • Dilakukan selama kondisi TRUE; • Dilakukan minimal 0 kali (tidak ada perulangan) Kondisi ? Operasi TRUE FALSE Gambar 6. Flowchart untuk do-while 2. Struktur Repeat - Until , yaitu struktur perulangan yang : • Dilakukan sampai kondisi TRUE • Dilakukan minimal 1 kali Operasi Kondisi ? TRUE FALSE Gambar 7. Flowchart untuk repeat-until Contoh penggambaran Program Logic Flowchart dan Detailed Computer Program Flowchart untuk menghitung dan menampilkan nilai rata-rata dari sekumpulan data yang dientrikan dapat digambarkan dalam gambar di halaman berikut. 34 Mulai Berikan nilai awal untuk Variabel TOTAL Entri data nilai dari keyboard Hitung TOTAL Data sudah habis? Hitung rata-rata Tampilkan nilai rata- rata ke layar Selesai Ya tidak Mulai TOTAL ß 0 i ß1 Read (Keyboard) N Read (Keyboard) Nilai TOTAL ß TOTAL + Nilai i ß i + 1 i <= N ? Rata ß TOTAL/N Write (Layar) Rata Selesai tidak Ya Program Logic Flowchart Detailed Computer Program Flowchart Gambar 8. Flowchart untuk menghitung dan menampilkan nilai rata-rata 37 • Blok 1 Pencabangan Digunakan untuk kasus sangat khusus, yaitu hanya satu kasus. Sintak/ pseudocode yang dapat digunakan adalah : If < ekspresi logika > Then Blok Operasi {kumpulan operasi yang dikerjakan jika kondisi terpenuhi} Endif Jika <ekspresi logika> bernilai True, maka Blok Operasi akan dieksekusi/dikerjakan. Jika <ekspresi logika> bernilai False, maka Blok Operasi tidak akan dieksekusi/dikerjakan. Blok Operasi dapat berupa operasi tunggal (single statement) atau kumpulan operasi (compound statement) Contoh penggunaan pencabangan 1 kasus : Program MIN_2_BIL { Dibaca 2 buah nilai untuk kemudian ditampilkan nilai dan statusnya} Kamus A, B : integer Algoritma : Mulai Read (Keyboard) A Read (KeyBoard) B IF A < B THEN Write (Monitor) “ A lebih kecil dari B ” Write (Monitor) “ Nilai A : “, A Write (Monitor) “ Nilai B : “, B ENDIF Selesai • Blok 2 Pencabangan Digunakan untuk kasus khusus, yaitu dua kasus komplementer. Sintak/ pseudocode yang dapat digunakan adalah : IF <ekspresi logika> THEN Blok Operasi 1 {kumpulan operasi yang dikerjakan jika kondisi terpenuhi} ELSE Blok Operasi 2 {kumpulan operasi jika kondisi tidak terpenuhi} ENDIF 38 Jika <ekspresi logika> bernilai True, maka Blok Operasi 1 akan dieksekusi/dikerjakan. Jika <ekspresi logika> bernilai False, maka Blok Operasi 2 akan dieksekusi/dikerjakan. Blok Operasi dapat berupa operasi tunggal (single statement) atau kumpulan operasi (compound statement) Catatan : Hati-hati dalam memakai “else” yang berarti kondisi implisit yang merupakan negasi dari ekspresi logika yang ada di balik kondisi. Penulisan kondisi “else” secara eksplisit sangat disarankan Contoh penggunaan pencabangan kasus komplementer : Program MENCARI_MAX {Dibaca dua buah bilangan a dan b (integer), kemudian cari yang nilainya lebih besar, kemudian tampilkan nilai yang lebih besar } Kamus a,b,Max : integer Algoritma : Mulai Read (keyboard) a, b If (a > b) Then Max ß a Else Max ß b Endif Write (layar) Max Selesai • Nested If (If bersarang) Sintak/ pseudocode yang dapat digunakan adalah : If <kondisi1> Then if <kondisi 2> Then Blok Operasi 1 {kumpulan operasi yang dikerjakan jika kondisi 1 & 2 terpenuhi} Else Blok Operasi 2 {kumpulan operasi yang dikerjakan jika kondisi 1 terpenuhi, tapi kondisi 2 tidak terpenuhi} End if Else {kumpulan operasi jika kondisi 1 tidak terpenuhi} Endif 39 Jika <kondisi1> bernilai True, maka <kondisi 2> akan diperiksa dan jika <kondisi2> bernilai True, maka Blok Operasi 1 dieksekusi/dikerjakan. Jika <kondisi2> bernilai False tetapi <kondisi 1> bernilai True, maka bagian ELSE / Blok Operasi 2 yang akan dieksekusi /dikerjakan. Operasi IF yang bersarang (nested) boleh bentuk IF yang manapun (IF di bagian THEN, atau IF di bagian ELSE), serta blok Operasi dapat berupa operasi tunggal (single statement) atau kumpulan operasi (compound statement). Contoh penggunaan Nested If : Program MEMBANDINGKAN_2_BIL {Dibaca dua buah bilangan a dan b (integer), kemudian dibandingkan serta ditampilkan status antara ke dua bilangan tersebut} Kamus A,B : integer Algoritma : Mulai Read (Keyboard) A, B IF A < B THEN Write (Monitor) “ A lebih kecil dari B ” ELSE IF A > B THEN Write (Monitor) “ A lebih besar dari B ” ELSE Write (Monitor) “ A sama dengan B ” EndIF ENDIF Write (Monitor) “ Nilai A : “, A Write (Monitor) “ Nilai B : “, B Selesai Struktur Repetition Operasi Repetition (Loop) adalah operasi yang berfungsi untuk mengulang Blok Operasi. Proses Loop dibangun oleh empat elemen : Initial Loop, Final Loop, Next Step, dan Blok Operasi. Untuk struktur repetition, pseudocode mengenal tiga bentuk instruksi sbb: • While … do Operasi pengulangan ini dilakukan dengan memeriksa syarat pengulangan terlebih dahulu, jika diperoleh kondisi TRUE, maka blok operasi dalam pengulangan akan dilakukan sampai diperoleh kondisi / final loop = FALSE. 42 Perbedaan logika dari struktur pengulangan While ... Do dan Repeat-Until adalah : Tabel 4. Perbedaan Logika dalam struktur Pengulangan Pembeda Bentuk (1) : While do…Endwhile Bentuk (2) : Repeat … Until Jumlah Minimal Pengulangan terhadap Blok operasi 0 kali 1 kali Pengulangan dilakukan selama Kondisi True False Pengulangan berakhir jika Final Loop False True • For Pengulangan bentuk ketiga ini biasa disebut dengan pengulangan terbilang atau pengulangan berdasarkan pencacah, sedangkan bentuk(1) dan (2) dikenal dengan pengulangan berdasarkan Kondisi pengulangan Sintak/ pseudocode yang dapat digunakan adalah : FOR (Initial loop TO Final Loop, Next Step) DO Blok Operasi {Kumpulan instruksi yang diulang} ENDFOR Catatan : Pencacah adalah harga yang diberikan dalam initial Loop sampai Final Loop, misalnya (i ← 1 to 10, i ← i+1). Tipe data pencacah harus suatu nilai yang terdefinisi suksesor (nilai selanjutnya) dan predecesor (nilai sebelumnya). Setelah pelaksanaan Loop selesai, harga yang tersimpan pada variabel pencacah tidak terdefinisi/tidak pasti, sehingga jika hendak dipakai harus diinisialisasi kembali. Biasanya Blok Operasi akan diulang secara otomatis (tidak diperlukan Next Step) karena nilai suksesor dan predecesor diketahui dalam range tertentu ; namun dalam implementasi di bahasa pemrograman tertentu bisa saja diberikan Next Step. 43 Contoh penggunaan pengulangan bentuk for adalah : Program TampilA {Memberi harga terhadap variabel A kemudian menampilkan Isinya sebanyak 10 kali} Kamus A : Integer Algoritma : Mulai FOR (A ß 1 TO 10, A ß A + 1) DO Write (Layar) A ENDFOR Selesai Panduan Pembuatan Struktur Repetition 1. Cari urutan atau caranya berurut (keterurutan yang diinginkan), sehingga akan menghasilkan Initial Loop, Next Step dan Final Loop 2. Definisikan bagaimana dan dimana nilai keterurutan harus berubah, akan mengindikasikan operasi apa yang akan diberikan dalam Blok Operasi dan Next Step 3. Identifikasi berapa jumlah variabel yang dibutuhkan 4. Lakukan proses yang berulang untuk melihat dan menentukan point 1 dan 2 di atas. 3.3 KESIMPULAN Poin penting untuk dipahami: • Struktur Proses Non Paralel yang terdiri atas sequence (proses berturutan), selection (pemilihan) dan repetition (perulangan); • Sebuah program komputer memungkinkan dipakainya ketiga struktur yang sudah dibahas, baik sequence, selection maupun Repetition; dengan posisi dapat saling terpisah antar satu struktur dengan struktur lainnya ataupun ada suatu struktur di dalam struktur yang lain (biasa dikenal dengan compound structure); • Variasi dan penerapan struktur proses sangat tergantung pada kebutuhan alternatif solusi yang diberikan untuk permasalahan yang diberikan; • Fungsi dari struktur proses adalah agar Algoritma dapat mencapai state yang diinginkan, dengan kata lain algoritma harus benar, selain itu juga Algoritma harus memperhitungkan kemungkinan sesuai dengan asumsi masalah; 44 • Notasi yang digunakan pada struktur proses bukan alat untuk merancang, tetapi alat komunikasi/dokumentasi; • Penggunaan notasi flowchart kurang baik, karena lebih sukar melihat struktur secara keseluruhan; • Pemakaian flowchart yang tidak hati-hati merangsang “pola-fikir” yang melanggar prinsip “struktur”; • Algoritma harus mencapai state seperti yang diinginkan, dengan kata lain algoritma harus benar; • Algoritma harus memperhitungkan kemungkinan sesuai dengan asumsi masalah; • Algoritma yang baik dipilih dari beberapa algoritma yang benar (jadi pertama- tama harus ada dulu beberapa algoritma yang benar !!) 3.4 LATIHAN a. Telusuri dan tentukan final state dari notasi flowchart di bawah ini ! Mulai k <= 10 m <= 3 Selesai k k + 1 k 1 m 1 .F. .T. m m+1 .F..T. C(k) k C(k) C(k-3) Gambar 9. Latihan Flowchart b. Periksalah salah atau benarnya algoritma algoritma dibawah ini. Kemudian pilihlah jawaban yang paling benar dari soal 1 s/d 4. 47 B ← 0 repeat if (n Mod 2) = 0 then A ← A + Bil[n] else B ← B + Bil[n] endif n ← n + 1 until n > 100 (a) mempermudah pembuatan program (b) menghitung nilai variabel n, A, B dan isi setiap elemen array Bil. (c) mengisi setiap elemen array Bil. (d) menghitung jumlah elemen array Bil yang bernilai ganjil dan jumlah elemen array Bil yang bernilai genap (e) menghitung jumlah total nilai dari elemen ganjil dan jumlah total nilai dari elemen genap array Bil . Algoritma-10 m ← 1 n ← 2 while m < 8 do while (P[n] = P[m]) do Q[n] ← Q[m] n ← n + 1 endwhile m ← n n ← n + 1 endwhile 9. Array karakter P mempunyai 8 elemen dengan nilai : {a,a,b,b,b,c,c,d}, sedangkan array karakter Q juga mempunyai 8 elemen dengan nilai : {A,B,C,D,E,F,G,H}. Setelah algoritma-10 selesai dijalankan maka isi array Q adalah : (a) {A,A,C,C,C,E,E,G} (b) {a,a,b,b,b,c,c,d} (c) {A,a,B,b,b,C,c,D} (d) {A,A,C,C,C,F,F,H} (e) bukan salah satu jawaban di atas. c. Melengkapi Algoritma M adalah sebuah array integer berdimensi 2 dengan ukuran 4 baris dan 4 kolom, mula mula berisi nilai sbb : Kolom 1 2 3 4 baris 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 4 13 14 15 16 Akan dibuat sebuah algoritma untuk menukarkan isi M sehingga keadaan akhirnya adalah sbb : kolom 1 2 3 4 baris 1 1 5 9 13 2 2 6 10 14 3 3 7 11 15 4 4 8 12 16 Algoritma tersebut belum selesai, bentuknya ( tidak lengkap ) adalah sbb : Algoritma-ZZZ brs ← 1 while (brs<5) | do operasi-A | while kondisi-1 | | X ← M[brs][klm] | | M[brs][klm] ← M[klm][brs] 48 | | operasi-B | | klm ← klm + 1 | endwhile | brs ← ekspresi-1 endwhile Lengkapilah algoritma-ZZZ tersebut diatas dengan cara menjawab pertanyaan pertanyaan berikut ini. 10. Operasi-A adalah : a. brs ← brs + 1 b. brs ← brs + klm c. klm ← brs + 1 d. klm ← brs e. bukan salah satu jawaban diatas. 11. Operasi-B adalah : a. M[klm][brs] ← X b. M[klm][brs+1] ← X c. M[klm][brs] ← M[brs][klm] d. M[klm][brs] ← M[X}[brs] e. bukan salah satu jawaban diatas. 12. Kondisi-1 adalah : a. brs < klm b. klm < 5 c. klm < brs d. klm = brs + 1 e. bukan salah satu jawaban diatas. 13. Ekspresi-1 adalah : a. klm + 1 b. brs + 2 c. brs + kolom d. brs + 1 e. bukan salah satu jawaban diatas. 49 14. Algoritma diatas akan lebih efisien jika kondisi dibelakang while yang pertama ( yang paling atas, atau brs<5) diganti dengan : a. klm<brs b. klm<4 c. brs<klm d. brs<4 e. bukan salah satu jawaban diatas. d. Diketahui bahwa x adalah array integer, i, j dan n adalah variabel integer. Keempat variabel tersebut telah berisi nilai tertentu sebelum algoritma dijalankan. Buat Algoritma Sehingga Diperoleh Array/Matriks X Yang Berisi : {5,10,15,20,25} Post Test v Telusuri algoritma yang tidak memiliki BUG v Telusuri algoritma yang memiliki ‘BUG’. v Buatlah algoritma generik, seperti menukar dua bilangan, mencari nilai maksimal dari 2 buah bilangan, mencari nilai maksimal dari 3 buah bilangan, mencari nilai maksimal dari N buah bilangan. v Pelajari algoritma searching, sorting dan merging data dalam sebuah Array. 52 * Waktu untuk melakukan "reorganisasi" Struktur File dapat dikelompokan menjadi 6 struktur di bawah ini : Pile, Sequential, Index Sequential, Indexed, Hashed/Direct dan Multi-Ring. Untuk pembahasan lebih lanjut dalam perkuliahan ini hanya digunakan organisasi file sequential (sering disebut sebagai “SIMPLE FILE”). 4.2 KONSEP FILE SEDERHANA File terdiri dari kumpulan Record (analogi = 1 baris) Record terdiri dari satu atau lebih Field (analogi = 1 kolom) Setiap Field berisi satu jenis data Satu kali Read file, maka terbaca 1 record data. Contoh : Terdapat satu file dengan isi : FILE X Field 1 Field 2 Field 3 Record 1 ABDUL Jln. ABC 17 Record 2 ANI Jln. Dago 19 Record 3 SANDRA KPAD 18 ... ... ... ... Record n ... ... ... Selain penyeragaman record seperti telah dicontohkan di atas, mungkin ada penambahan pengaturan urutan record. Jika ada aturan pengurutan tertentu, maka file tersebut disebut “SORTED”. Sorted dan Key Field : Perhatikan 3 contoh file berikut : File A File B File C 1 P 22 8.0 1 A 33 2.5 1 T 44 6.2 2 A 33 2.5 2 K 11 9.7 2 P 22 8.0 3 M 55 7.2 3 M 55 7.2 3 M 55 7.2 4 K 11 9.7 4 P 22 8.0 4 K 11 9.7 5 T 44 6.2 5 T 44 6.2 5 A 33 2.5 • File A : Tidak ada aturan pengurutan record; • File B : Record terurut dari kecil ke besar menurut isi field-1, kita katakan bahwa : File B sorted ascending dengan key field ke 1. • File C : Record terurut dari besar ke kecil menurut isi field-1, kita katakan bahwa: File C sorted descending dengan key field ke 1. 53 4.3 OPERASI PRIMITIF terhadap SIMPLE-FILE 4.3.1 Read (Atau Membaca) • Menyalin isi suatu record kedalam 1 atau lebih variabel. Jumlah variabel atau struktur variabel identik dengan struktur record. • Syntaks untuk membaca tanpa nomor record (operasi sequential) : Read (Nama_file) Var1, Var2, ... • Syntaks untuk membaca dengan nomor record: Read (Nama_file, Record_ke) Var1, Var2, ... 4.3.2 Write (atau menulis) • Menyalin isi 1 atau lebih variabel kedalam suatu record. • Syntaks untuk menulis tanpa nomor record (operasi sequential) : Write (Nama_file) Var1, Var2, ... • Syntaks untuk menulis dengan nomor record: Write (Nama_file, Record_ke) Var1, Var2, ... 4.3.3 Rewind (atau menggulung) Mengembalikan posisi seperti pada saat awal file akan mulai diproses (pada record ke 1) Syntak yang digunakan : Rewind (Nama_file) Pada hampir semua bahasa pemrograman dikenal operasi membuka (Open) dan menutup (Close) file. Secara konseptual logika algoritma, kedua operasi ini sebenarnya bisa diabaikan, karena sifatnya yang pseudo file operation. 54 4.4 EFEK OPERASI PRIMITIF SIMPLE-FILE : Misalkan ada FILE-X dengan struktur record : KODE PROPINSI NAMA PROPINSI dengan isi file seperti terwakili oleh tabel sebagai berikut : Record 1 A1 AAA 2 A2 BBB 3 B7 KKK 4 B2 FFF pada saat awal “pointer” file menunjuk posisi awal record ke-1, maka jika ada operasi Read (File-X) x, y ; efeknya adalah variabel x bernilai “A1” dan y bernilai “AAA”, serta “pointer” menunjuk posisi awal record ke-2. Pada pembahasan algoritma ini, operasi simple-file bersifat “Record- wise”, yaitu sekali baca 1 record penuh. 4.5 KONDISI END OF FILE Biasa disingkat EOF (Nama File); Berfungsi untuk menunjukkan apakah pointer penunjuk record di file sudah berada di record terakhir (akhir file). Keluarannya berisi nilai TRUE atau FALSE. EOF versi Pascal : • Bernilai TRUE tepat sesudah operasi read record terakhir dilaksanakan; • Bernilai TRUE jika file “kosong” EOF versi Non Pascal (Cobol, Basic, C, dll): • Bernilai TRUE sesudah operasi read gagal (tidak ada record); • Bernilai FALSE jika file “kosong”, dan akan bernilai TRUE sesudah usaha melaksanakan Read pertama. Contoh Penggunaan : Repeat ⏐ read(File_x) a,b,c ⏐ write(Layar) a,b,c Until EOF (File_x) 57 Read(file_propinsi)vkls, vnm, vjk Write(layar)vkls, vnm Endwhile End Procedure tampil isi file() // Asumsi : EOF versi Non Pascal Variable lokal Vnm bertype char[50] { Digunakan untuk menampung field nama dari file Mhs_jtk} Variabel lokal Vkls bertype char[2] { Digunakan untuk menampung field kelas dari file Mhs_jtk } Variabel lokal Vjk bertype char { Digunakan untuk menampung field jenis kelamin dari file Mhs_jtk } begin rewind(file Mhs_jtk) Repeat Read(Mhs_jtk) vkls, vnm, vjk If Not EOF(file Mhs_jtk) Then Write(layar) vkls, vnm endif Until EOF(file Mhs_jtk) End Atau begin Rewind(file Mhs_jtk) Read(file mhs_jtk) vkls, vnm, vjk While Not EOF(File Mhs_jtk) do Write(layar) vkls, vnm Read(file Mhs_jtk) vkls, vnm, vjk EndWhile end 4.7 KESIMPULAN Poin penting untuk dipahami: • Perbedaan penyimpanan data di variabel dan File • Konsep file sederhana beserta operasi primitif nya • Kondisi End Of File dan penerapannya Post Test v Sebutkan perbedaan kondisi EOF antara versi Pascal dan versi Non Pascal! v Buatlah algoritma yang melibatkan file, baik untuk Insert data, counting data, sorting data dan menampilkan isi file. 58 BAB V STRUCTURED PROGRAMMING Tujuan Pembelajaran Umum : Memberikan pengetahuan tentang ‘bagaimana mendekomposisi program sehingga meningkatkan reusability dan memudahkan penelusuran program’ serta ‘membuat program secara team’. Setelah menyelesaikan pembahasan ini, mahasiswa : • Mampu membuat sub program yang dapat melayani satu fungsi spesifik sehingga program lebih terstruktur • Mampu mendekomposisi algoritma menjadi sub program yang reusable sehingga program lebih mudah ditelusuri, mudah dikembangkan dan memiliki ketergantungan yang optimal. Tujuan Pembelajaran Khusus : Setelah menyelesaikan pembahasan ini, mahasiswa : 1. Mampu mengidentifikasi retensi variabel sehingga dapat membedakan variabel lokal dan global serta efek penggunaannya. 2. Mampu menyusun dan menuliskan passing parameter yang tepat sesuai dengan bentuk sub program dan kebutuhannya 3. Mampu mengetahui adanya sifat recurence dari sub program. 4. Dapat menyebutkan unsur pembentuk ADT dan dapat menyusun ADT sederhana. 5. Mengulas dan memperdalam implementasi pemrograman modular melalui ADT, sehingga mahasiswa lebih memahami peran modular programming Pre Test v Sebutkan keuntungan dari modular programming! v Sebutkan jenis sub program beserta perbedaannya! v Sebutkan jenis parameter dan bagaimana proses passing nya! 59 5.1 HIRARKI PROGRAM Structured programming: A technique for organizing and coding computer programs in which a hierarchy of modules is used, each having a single entry and a single exit point, and in which control is passed downward through the structure without unconditional branches to higher levels of the structure. Program terdiri atas kumpulan MODUL yang saling berhubungan. Struktur program bukan saja hasil dari algoritma yang ada didalam modulnya, akan tetapi juga merupakan semacam "abstraksi" hubungan antar modulnya. MODUL : bagian dari program/algoritma yang merupakan suatu unit dengan tujuan yang spesifik. Beberapa keuntungan pembuatan program secara Modular • Reusable, karena modul yang memiliki tujuan sama dapat dipakai berulang kali; • Meningkatkan produktivitas programmer, karena program akan diutarakan dalam uraian global terlebih dahulu untuk kemudian didetilkan sesuai peran dari programmer; • Partisi permasalahan, sehingga lebih sederhana dan dapat diimplementasikan oleh beberapa programmer secara paralel; • Kemudahan Debug/Test dan Traceability, sehingga hasil penelitian menunjukkan bahwa pemrograman modular ini mempercepat waktu penyelesaiannya. Istilah istilah yang serupa tapi tak sama : • PROCEDURE : biasa dipergunakan dalam konteks algoritma, dipergunakan juga dalam bahasa PASCAL. • FUNGSI : dipergunakan dalam bahasa PASCAL untuk menyatakan unit yang "menghasilkan" 1 buah nilai saja. • SUB-PROGRAM : dipergunakan dalam bahasa FORTRAN. • RUTIN/SUB-RUTIN : dipergunakan dalam bahasa FORTRAN. 62 Modul yang berfungsi mencari posisi nilai maksimum pada sebuah array input : - nama array objek - jumlah elemen output : - posisi nilai maksimum Gambar 10. Black box model untuk pemodulan Misalkan modul ybs diberi nama MAX, dengan asumsi bahwa : • input : array objek bernama x dengan t buah elemen • output : posisi maksimum di var p maka pada algoritma akan berubah sbb : UTAMA ⏐ { cari posisi nilai maksimum pada array a} ⏐ MAX(a,n,j) ⏐ { cari posisi nilai maksimum pada array b} ⏐ MAX(b,m,k) ⏐ { kalikan keduanya } ⏐ z ← a(j)*b(k) end UTAMA MAX( x,t,p) ⏐ p ← 1 ⏐ i ← 2 ⏐ while (i ≤ t) ⏐ ⏐ do if x(p)< x(i) ⏐ ⏐ ⏐then p ← i ⏐ ⏐ ⏐else ⏐ ⏐ endif ⏐ ⏐ i ← i + 1 ⏐ endwhile end MAX Perjanjian Penulisan Modul Perhatikan Perjanjian Penulisan Modul Yang Dipergunakan : • Setiap Modul Dimulai Dengan Nama Modul Dan Asumsi Nama Input Serta Output (Jika Ada), Diakhiri Dengan End Diikuti Nama Modul; Semua Diberi Garis Bawah. • Ada Garis Penghubung Awal Definisi Dan Akhir Definisi Sebuah Modul. Dari ilustrasi Diatas Dapat Disimpulkan Bahwa Hubungan Elementer Antar Modul Adalah Sbb : • Ada Modul Yang Memanggil Atau "Calling Module" (Dalam Ilustrasi Ialah Modul Utama) • Ada Modul Yang Dipanggil Atau "Called Module" (Dalam Ilustrasi Ialah Modul Max ) • Calling Module Memasok Parameter Ke Called Module (Dalam Ilustrasi Ialah Array,Jumlah Elemen) • Called Module Memberikan Hasil Dengan 2 Cara (Prosedur Atau Fungsi Dalam Pascal) Keadaan Tersebut Sering Digambarkan Melalui Diagram Hubungan Disamping. MODUL YANG MEMANGGIL -array -jumlah elemen -posisi nilai maks (Calling Module) MODUL YANG DIPANGGIL (Called Module) Gambar 11. Structured Chart 63 5.4 JENIS PARAMETER Untuk membuat dan mengimplementasikan suatu Modul dalam program / algoritma dimungkinkan adanya variabel atau konstanta yang dikirim dari modul pemanggil ke modul yang dipanggil untuk dieksekusi dalam suatu Modul, peran tersebut biasa dikenal dengan sebutan PARAMETER. Jenis Parameter dapat diklasifikasikan menjadi : • Parameter Formal, yaitu nama-nama variabel (list nama) yang dipakai dalam mendefinisikan suatu procedure. List nama ini akan diasosiasikan terhadap variabel lain pada saat pemanggilan. Berdasarkan ketentuan nilainya terbagi menjadi : Parameter Input, Parameter Output dan Parameter Input / Output. • Parameter Aktual, yaitu nama-nama informasi yang dipakai ketika procedure dipakai (“dipanggil”). Dapat berupa nama atau harga, tetapi harus berupa nama jika parameter tersebut adalah parameter output. Sesuai dengan jenis parameter formal (yang sudah didefinisikan), maka pemanggilan parameter aktual memiliki sifat, jika o Parameter Input harus terdefinisi nilainya o Parameter Output tidak perlu terdefinisi nilainya, tetapi justru setelah pemanggilan procedure akan dimanfaatkan oleh instruksi berikutnya; o Parameter Input/Output harus terdefinisi nilainya dan nilai baru yang diperoleh akan dimanfaatkan oleh instruksi berikutnya. 5.5 PARAMETER-PASSING Pada ilustrasi diatas pada saat pemanggilan modul MAX dari modul UTAMA, harus ada "pengoperan" nilai parameter array objek dan jumlah elemen. Demikian pula pada saat modul MAX selesai menjalankan fungsinya, harus ada "pengoperan" hasil yang berupa posisi nilai maksimum didalam array objek. Pengoperan nilai dapat dilakukan melalui 2 cara : passing by value atau passing by address. • Passing by value : pada saat pemanggilan MAX(a,n,j) maka nilai a(1) s/d a(n) disalinkan ke x(1) s/d x(n), dan nilai n serta j disalinkan ke t serta p. Demikian 64 pula pada saat pemanggilan MAX(b,m,k) akan terjadi pengoperan seperti ini. Perhatikan bahwa setelah modul MAX selesai tidak terjadi penyalinan nilai apapun, sehingga nilai j pada modul UTAMA tidak berubah. • Passing by address : pada saat pemanggilan MAX(a,n,j) tidak terjadi penyalinan nilai seperti diatas. Yang terjadi adalah bahwa alamat array x disamakan dengan alamat array a., demikian pula alamat t disamakan dengan alamat n, dan alamat j disamakan dengan alamat p. Dengan demikian maka referensi terhadap nilai x(1) akan sama dengan referensi terhadap nilai a(1) dst. Maka jika pada modul MAX ada perubahan nilai, maka perubahan nilai tersebut akan dibawa sampai ke modul UTAMA. Berdasarkan uraian tersebut, jelas bahwa jika yang terjadi ialah passing by value maka modul MAX harus berbentuk FUNGSI. Karena jika bentuknya PROSEDUR, nilai var j pada modul UTAMA tidak akan terisi pada saat pemanggilan modul MAX. Pada konteks algoritma secara umum tidak dianggap perlu untuk membedakan kedua jenis parameter passing tersebut ! Masalah parameter-passing ini baru perlu ditinjau pada level pembuatan program. 5.6 VARIABEL LOKAL DAN VARIABEL GLOBAL Variabel lokal adalah variabel yang hanya dikenal dalam lingkup sebuah modul saja, sedangkan variabel global adalah variabel yang dikenal oleh semua modul yang ada. Variabel global dapat digunakan untuk menampung nilai nilai yang dipergunakan baik pada modul pemanggil maupun modul yang dipanggil. Akan tetapi sebaiknya tidak dipergunakan untuk menggantikan mekanisme passing parameter ( kekecualian ada untuk beberapa kasus khusus ). Jika prinsip ini dilanggar maka besar kemungkinan timbulnya semacam "kericuhan" dalam program ybs. 67 dari suatu persoalan dalam terminologi yang lebih mudah dimengerti oleh manusia, namun sulit dipresentasikan langsung oleh mesin riil. Selain itu melalui ADT juga terjadi penyembunyian informasi (information hiding) sehingga seolah-olah kesulitan dari model data maupun model proses disembunyikan dari penggunanya. Contoh struktur data abstrak (ADT) yang standar di dalam bidang informatika diantaranya: List Linier, Multi Linked List, Antrian (Queue), Tumpukan (Stack), Pohon (tree) dan Graph. Selain itu juga beberapa data bentukan dapat diimplementasikan melalui konsep ADT ini. Beberapa tipe data yang dapat dibentuk melalui ADT adalah tipe data Titik, Garis, Bidang datar, Date, Time, dll. Implementasi ADT Date dalam bahasa C #ifndef date_h #define date_h #include "Boolean.h" /***************************/ /* Type data */ /***************************/ /* Kamus */ typedef struct { int Tgl; int Bln; int Thn;} date; /***************************/ /* S P E S I F I K A S I */ /***************************/ /*********** Operasi Primitif ************/ void CreateDate (date * D); /* Constructor Membentuk sebuah DATE, dengan nilai default adalah 01/01/1900 */ /******* Selector komponen **********/ int GetTgl (date D); /* Mengambil bagian Tgl dari date */ int GetBln (date D); /* Mengambil bagian Bln dari date */ int GetThn (date D); /* Mengambil bagian Thn dari date */ /****** Pengubah komponen ******/ void SetTgl (int NewTgl, date * D); /* Memberi nilai untuk Tgl */ 68 void SetBln (int NewBln, date * D); /* Memberi nilai untuk Bln */ void SetThn (int NewThn, date * D); /* Memberi nilai untuk Thn */ /****** Kelompok Interaksi dengan I/O device, BACA/TULIS ******/ void BacaDate (date * D); /* Membentuk DATE dari iTgl, iBln dan iThn yang dibaca dari keyboard */ boolean isValid(date D); /* Memeriksa apakah suatu tanggal valid, yaitu dengan memperhatikan batas akhir per bulan */ void PrintObj (date D); /* Print nilai D dengan format dd/mm/yyyy */ /****** Operator Relasional ******/ boolean isKabisat (date D); /* Memeriksa apakah suatu tanggal adalah kabisat; Dipakai untuk bulan == 2 saja */ /***** Predikat lain *******/ int TglAkhir (date D); /* Memberikan tanggal terakhir dari sebuah bulan */ void DateBefore (date D); /* Menampilkan tanggal sebelumnya dari sebuah Date I.S = Tanggal tertentu diketahui F.S = Tanggal sebelumnya diketahui Hal yang perlu diketahui : Batas akhir tiap bulan dan jika jan, thn-1 */ void NextDate (date D); /* Menampilkan tanggal berikutnya dari sebuah Date I.S = Tanggal tertentu diketahui F.S = Tanggal berikutnya diketahui Hal yang perlu diketahui : Batas akhir tiap bulan dan jika des, thn+1 */ void SelisihDate (date D1, date D2); /* Menampilkan selisih dua tanggal I.S = 2 buah Tanggal tertentu diketahui F.S = Tampil selisih dua buah tanggal Asumsi : 1 tahun = 365 hari */ #endif 69 /* File : ADTDate.cpp */ /* Deskripsi : Unit untuk keperluan ADT Date */ /* Pembuat : Ade Chandra */ /***************************/ /* BODY PRIMITIF DATE */ /***************************/ #include <stdio.h> #include <math.h> #include "date.h" /*********** Operasi Primitif ************/ void CreateDate (date * D) /* Constructor Membentuk sebuah DATE, dengan nilai default adalah 01/01/1900 */ { SetTgl (01, &(* D)); SetBln (01, &(* D)); SetThn (1900, &(* D)); } /******* Selector komponen **********/ int GetTgl (date D) /* Mengambil bagian Tgl dari date */ { return(D.Tgl); } int GetBln (date D) /* Mengambil bagian Bln dari date */ { return(D.Bln); } int GetThn (date D) /* Mengambil bagian Thn dari date */ { return(D.Thn); } /****** Pengubah komponen ******/ void SetTgl (int NewTgl, date * D) /* Memberi nilai untuk Tgl */ { (* D).Tgl = NewTgl; 72 } else SetTgl(GetTgl(D)-1, &D); printf(" adalah tanggal :"); PrintObj(D); } void NextDate (date D) /* Menampilkan tanggal berikutnya dari sebuah Date I.S = Tanggal tertentu diketahui F.S = Tanggal berikutnya diketahui Hal yang perlu diketahui : Batas akhir tiap bulan dan jika des, thn+1 */ { printf ("Setelah tanggal : "); PrintObj(D); if ((GetBln(D) == 12) && (GetTgl(D) == TglAkhir(D))) { SetThn(GetThn(D)+1,&D); SetBln(1, &D); SetTgl(1, &D); } else if (GetTgl(D) == TglAkhir(D)) { SetBln(GetBln(D)+1, &D); SetTgl(1, &D); } else SetTgl(GetTgl(D)+1, &D); printf(" adalah tanggal :"); PrintObj(D); } void SelisihDate (date D1, date D2) /* Menampilkan selisih dua tanggal I.S = 2 buah Tanggal tertentu diketahui F.S = Tampil selisih dua buah tanggal Asumsi : 1 tahun = 365 hari */ { int d = 0, a = 0, i; boolean besar = false; printf ("Selisih antara "); PrintObj(D1); printf (" dan "); PrintObj(D2); // Jika tgl dan bulannya sama 73 if ((GetTgl(D1) == GetTgl(D2)) && (GetBln(D1) == GetBln(D2))) d = (GetThn(D2) - GetThn(D1)) * 365; else { if (GetBln(D2) < GetBln(D1)) { d = (GetThn(D2) - GetThn(D1) - 1) * 365; besar = true; } else d = (GetThn(D2) - GetThn(D1)) * 365; if (GetBln(D2) == GetBln(D1)) d = d + GetTgl(D2) - GetTgl(D1); else d = d + GetTgl(D2) + (TglAkhir(D1)-GetTgl(D1)); i = GetBln(D1) + 1; while (i < GetBln(D2)) { SetBln(i, &D1); a = a + TglAkhir(D1); i++; } if (besar) a = -a; d = d + a; } printf (" adalah %d hari\n", d); } /* Nama Program : Testdate.cpp Deskripsi : Driver untuk menggunakan unit ADT Date yang ada di date.h dan date.cpp Pembuat : Ade Chandra */ #include <stdio.h> #include <conio.h> #include "date.h" /* P R O G R A M U T A M A */ int main() { date D1, D2, D3, D4; char lagi = 'y'; /* Algoritma : Procedure yang isi bodynya call thd semua feature yang ada */ for (;;) 74 { clrscr; CreateDate (&D1); printf ("\nHasil CreateDate (&D1), maka D1 bernilai : "); PrintObj (D1); SetTgl(27, &D2); SetBln(12, &D2); SetThn(1972, &D2); printf("Setelah perintah Set dilakukan, maka D2 bernilai : "); PrintObj (D2); BacaDate (&D3); printf("Setelah perintah BacaDate(&D3), maka D3 bernilai : "); PrintObj (D3); /* Test terhadap operator Relasional */ if (GetBln(D3) == 2) { if (isKabisat(D3)) printf("Tahun %4d adalah tahun kabisat\n", GetThn(D3)); else printf("Tahun %4d bukan tahun kabisat\n", GetThn(D3)); } DateBefore (D3); NextDate (D3); BacaDate (&D4); printf("Setelah perintah BacaDate(&D4), maka D4 bernilai : "); PrintObj (D4); printf("\n"); SelisihDate(D3, D4); printf("\n\nCoba lagi ? (y/t) "); lagi = getch(); if (lagi == 't' || lagi == 'T') break; } return 0; } 5.9 CONTOH MODUL PROGRAM Algoritma Search Function LinSearch (a:arrX; n,k:integer;) à integer; // Tujuan mencari posisi elemen pertama di array A[1..n] yang bernilai = k // Nilai yang dikembalikan adalah posisi elemen di array A // Jika tidak ditemukan, maka nilai kembalian = n+1 // Parameter a dan k adalah parameter input sesuai type yang didefinisikan // Array a adalah objek tempat mencari; k adalah kriteria searching 77 Var i : integer; // index dari array hasil merge Begin {merge semua isi array a dan b} {assert: m>0 ∧ n>0 ∧ a[1..m]terurut ∧ b[1..n] terurut} i := 1; {invariant: setelah iterasi ke-i a[1..i-1] merge dengan b[1..j-1] dan disimpankan ke c[1..k-1] yang terurut juga ∧ i<=m+1 ∧ j<=n+1 ∧ k<=m+n+1} While i<=m do Begin If a[i] <= b[j] then Begin C[k] := a[i]; i := i+1; end else Begin C[k] := b[j]; j := j+1; end; k := k+1; End {assert: c[1..k-1] terurut ∧ c disusun dari elemen array a[1..m] dan b[1..j- 1] ∧ k<=m+n+1 ∧ j<=n+1} End; Procedure mergecopy (a,b:arrX; var c:arrX; m,n:integer); Var i : integer; {posisi awal array a} j : integer; {posisi current di array b} k : integer; {posisi current di array c yang menjadi tujuan merge} Begin {merge a[1..m] dengan b[1..n] } {assert: m>0 ∧ n>0 ∧ a[1..m] terurut ∧ b[1..n] terurut} i := 1; j := 1; k := 1; if a[m] <= b[i] then begin {array a[m] <= b[1])} copy(a,i,m,c,k); copy(b,j,n,c,k); end else begin {merge semua elemen a kemudian sisa elemen array b} shortmerge(a,b,c,m,j,k); copy(b,j,n,c,k); end {assert: c[1..m+n] terurut ∧ array c terbentuk dari array a dan b} End; Procedure merge (a,b:arrX; var c:arrX; m,n:integer); Begin {merge array a[1..m] dan b[1..n] ke array c[1..m+n], dengan memperhatikan array mana yang menjadi awal proses merge} If a[m] < b[n] then mergecopy(a,b,c,m,n); Else mergecopy(b,a,c,n,m); End; 78 5.10 KESIMPULAN Poin penting untuk dipahami: • Program yang modular adalah program yang dibagi-bagi menjadi modul-modul yang terdefinisi dengan baik. • Setiap modul harus jelas definisi dan ruang lingkupnya, supaya dapat dipanggil secara independent. • Pembagian program besar dalam modul-modul akan mempermudah pembagian kerja di antara beberapa pemrogram. Penulisan dalam modul-modul juga memudahkan pembacaan program oleh manusia, karena satu modul memiliki satu spesifikasi tertentu. 5.11 LATIHAN Konsep Modullar Programming Uraikan dan jelaskan setiap pertanyaan di bawah ini : • Definisi Modullar Programming • Keutamaan dan manfaat penerapan Modullar Programming • Perbedaan Procedure dan Function. • Definisi Parameter Actual dan Parameter Formal. • Perbedaan Passing Parameter by Address dan Passing Parameter by Value. • Perbedaan Variabel Lokal dan Variabel Global Untuk pseudocode di bawah ini, silakan lakukan tracing dan tuliskan hasilnya! Modul Utama {A variabel lokal, Array bertype integer dengan maks elemen 8} Begin DecToBiner (206, A) EndModul Utama Procedure DecToBiner(D, B) {Procedure untuk konversi Bil Desimal ke bilangan biner Asumsi : 0 ≤ nilai desimal ≤ 255 D : parameter input bertype integer; B : parameter output bertype array integer dengan maksimal elemen = 8 i : variabel lokal bertype integer} Begin for (i ← 1 to 8) do B[i] ← 0 Endfor If D > 0 Then i ß 8 while (i > 0 and D > 0) do B[i] ← D mod 2 79 D ß D div 2 i ß i - 1 EndWhile Endif EndProcedure DecToBiner Apakah final state dari algoritma di bawah ini ? Modul Utama {A, B variabel lokal, bertype integer} Begin A ß 75 B ß -100 SWAP (A, B) EndModul Utama Procedure SWAP (X, Y) {X : parameter output bertype integer dengan passing parameter by address; Y : parameter input bertype integer dengan passing parameter by value; Temp : Variable local bertype integer; } Begin Temp ß X X ß Y Y ß Temp EndProcedure Swap Melengkapi Algoritma Alat hitung (ALU (Aritmethic Logical Unit)) yang ada di dalam mesin komputer hanya mengenal operasi tambah (+) dan kurang (-). Semua perintah matematik yang berhubungan dengan proses kali, bagi, pangkat, akar diterjemahkan/dihitung dengan menggunakan proses tambah dan kurang. Contoh untuk melaksanakan perintah perkalian bilangan 2 dengan 5, dilakukan dengan cara menambahkan bilangan 2 dengan 2 sebanyak 5 kali (2 * 5 = 2 + 2 + 2 + 2 + 2). Berikut ini adalah algoritma yang belum selesai (belum lengkap) dalam bentuk modular untuk melakukan proses perkalian dua buah bilangan bulat dengan proses penjumlahan. Diketahui Bil, pengali, hasil adalah variabel global bertipe integer Algoritma-XXX Procedure kali(b,p,h) { b,p parameter input passing by value bertipe integer. h parameter output passing by address/reference bertipe integer. bp, n variabel lokal bertipe integer. } bp ← p 82 o Mencari posisi nilai minimal dalam 100 nilai data. • Menghitung (counting) jumlah bilangan negatif dari 10 bilangan yang dientrykan. • Menjumlahkan (Summing) 100 bilangan ganjil pertama. • Mengurutkan (sorting) 100 bilangan secara descending. • Menggabungkan (merging) 2 array bilangan (yang terurut) menjadi 1 array yang terurut. • Konversi Bilangan Desimal ke bilangan Biner. • Deret Fibonacci. • Mencari Factorial dari suatu Nilai. Post Test v Sebutkan tahapan proses untuk satu kegiatan rutin yang biasa dilakukan, dengan mengidentifikasi Initial State, Final State dan struktur proses yang terkait. v Definisi program komputer yang mahasiswa pahami. v Apa perbedaan program komputer dan algoritma ? 83 DAFTAR PUSTAKA 1. Aho, Hopcroft, Ullman, 1987. Data Structures and Algorithms, Prentice Hall. 2. Budiseno, Sayid Ir. , 1994. Diktat Kuliah Algoritma dan Pemrograman, Bandung: Jurusan Teknik Komputer 3. Cormen, Leiserson, Rivest 1990. Introduction to Algorithms, Mc.Graw Hill. 4. Dromey, R.G. 1982. How to Solve it by Computer, Prentice-Hall. 5. Knuth,D.E. 1973. Fundamental Algorithms, 2nd Edition, Addison-Wesley. 6. Munir, Rinaldi 1998. Algoritma dan Pemrograman, Buku 1 dan 2, Bandung: Teknik Informatika ITB. 7. Wirth., N. 1986. Algorithm + data structures = Program, Prentice Hall. 84 LAMPIRAN
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved