Lecture Notes Algoritma dan Pemrograman



dokumen-dokumen yang mirip
Sistem Berkas. Tujuan Pelajaran. Setelah mempelajari bab ini, Anda diharapkan :

PRAKTIKUM 3 DASAR PEMROGRAMAN C

BAB V FUNGSI Tujuan : 5.1 Dasar Fungsi

CSG2F3 Sistem dan Logika Digital (SLD) REPRESENTASI DATA. Tim Dosen SLD KK Telematika FIF Telkom University

Konsep Dasar Pemrograman Prosedural

MENGUBAH DATA ORDINAL KE DATA INTERVAL DENGAN METODE SUKSESIF INTERVAL (MSI) Oleh: Jonathan Sarwono

BAHAN AJAR ALGORITMA DAN PEMROGRAMAN I

Praktikum 2 Data File pada AWK

Tipe Data. Definisi Tipe Data

BAGIAN 1: M. F ACHRURROZI

Pendahuluan. Angka penting dan Pengolahan data

Bundel Pembahasan Soal Olimpiade Sains Informatika

Bab 3. Proses Proses POKOK BAHASAN: TUJUAN BELAJAR: 3.1 KONSEP PROSES

PERTIDAKSAMAAN LINEAR SATU VARIABEL. Sumber: Dok. Penerbit

BAB 4 Dasar-Dasar Pemrograman

Fungsi (Function) Pendahuluan. Objektif. Bahan Bacaan

PENERAPAN PROGRAM LINIER DALAM OPTIMASI BIAYA PAKAN IKAN DENGAN METODE SIMPLEKS (STUDI KASUS PT. INDOJAYA AGRINUSA MEDAN)

Draft Diktat Kuliah Dasar Pemrograman (Bagian Pemrograman Prosedural) Oleh : Inggriani Liem

Bab 5 Memasukkan Saldo Awal

Bab 10. Konsep Proses

Analisis SI dan SKL Mata Pelajaran Matematika SMP/MTs untuk Optimalisasi Tujuan Mata Pelajaran Matematika

BAB II TEORI DASAR KOMPRESI GAMBAR. berupa foto, bersifat analog berupa sinyal-sinyal video seperti gambar pada monitor

Konsep Deret & Jenis-jenis Galat

Struktur Data untuk Citra Digital dan Format Citra Bitmap

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

MODUL AJAR Program Pendidikan Jarak Jauh D3 Teknik Komputer dan Jaringan

OPERATING SYSTEM RAHMAD KURNIAWAN, S.T., M.I.T. UIN SUSKA RIAU

PRAKTIKUM 11 POINTER 1

Modul Visual FoxPro 6.0- AMIK Bina Sarana Informatika 0. Di susun oleh : Team Penyusun Modul Visual Foxpro. Akademi Manajemen Informatika & Komputer

Transkripsi:

Menukar Isi Dua Variabel (ed. ) / Lecture Notes Algoritma dan Pemrograman Menukar Isi Dua Variabel Thompson Susabda Ngoen Salah satu kegiatan pengolahan data adalah menukar isi dua variabel, misalnya pada sorting (proses pengurutan). Terdapat beberapa cara untuk menukar isi variabel, yang dapat kita kelompokkan menjadi dua: dengan pemindahan data dan dengan proses aritmetika terhadap data. Pertukaran Isi Dengan Pemindahan Data Cara ini kita tiru dari kehidupan sehari-hari. Untuk menukar isi wadah A dan B, mula-mula kita mengeluarkan isi wadah A dan menaruhnya di tempat lain misalnya wadah C. Kemudian isi wadah B dipindahkan ke wadah A. Terakhir isi wadah C (yang semula berasal dari wadah A) dipindahkan ke wadah B. Pada cara ini kita meggunakan variabel perantara, bisa dengan satu variabel perantara atau dua variabel perantara. Gambar mengilustrasikan proses menukar isi variabel a dan b. Pertukaran pada gambar kiri menggunakan dua variabel perantara, yaitu C dan D. Pertukaran pada gambar kanan menggunakan satu variabel perantara yaitu C saja. c = a; c = a; d = b; a = b; a = d; b = c; b = c; Gambar. Pertukaran Data Dengan Bantuan Dua dan Satu Variabel Perantara Proses pertukaran isi variabel dengan bantuan satu variabel perantara tentu lebih efisien baik dari segi kebutuhan memori maupun kecepatan proses walaupun tidak signifikan. Pertukaran Isi Dengan Proses Aritmetika. Dengan Penjumlahan int a, b, tambah; tambah = a + b; 0 0 00 00 0

Menukar Isi Dua Variabel (ed. ) / 0 a = tambah - a; b = tambah - a; Perhatikan instruksi baris ke-. a = tambah - a sebenarnya menghitung a = (a + b) - a atau a bernilai b. baris ke-: b = tambah - a menyebabkan b = (a + b) - b = a.. Dengan Pengalian 0 int a, b, kali; kali = a * b; a = kali / a; b = kali / a; 0 0 0 0 0 Perhatikan instruksi baris ke-. a = kali / a sebenarnya menghitung a = (a * b) / a atau a bernilai b. baris ke-: b = kali / a menyebabkan b = (a * b) / b = a.. Dengan Pengurangan 0 int a, b, kurang; kurang = abs(a - b); if (a > b) { a -= kurang; b += kurang; else { a += kurang; b -= kurang; 0 0 0. Dengan Penjumlahan, Tanpa Variabel Perantara Pada cara pertama hasil penjumlahan ditampung dengan sebuah variabel lain. Program berikut menampung hasil penjumlahan di salah satu variabel asal. int a, b; a = a + b; b = a - b; a = a - b; 0 0 0

Menukar Isi Dua Variabel (ed. ) / 0 Perhatikan instruksi baris ke-. b = a - b sebenarnya menghitung b = (a + b) - b atau b bernilai a. baris ke-: a = a - b menyebabkan a = (a + b) - a = b. Tabel. Pertukaran Data Dengan Penjumlahan Tanpa Bantuan Variabel Perantara Isi Variabel a b a = a + b; 0 b = a - b; 0 a = a - b;. Dengan Pengalian, Tanpa Variabel Perantara Berbeda dengan program, program berikut mengalikan kedua variabel asal dan meletakkan hasilnya di salah satu variabel asal tersebut. 0 int a, b; a = a * b; b = a / b; a = a / b; 0 0 0 Perhatikan instruksi baris ke-. b = a / b sebenarnya menghitung b = (a * b) / b atau b bernilai a. baris ke-: a = a / b menyebabkan a = (a * b) / a atau a bernilai b. Tabel. Pertukaran Data Dengan Perkalian Tanpa Bantuan Variabel Perantara Isi Variabel a b 0 a = a * b; 00 b = a / b; 00 0 a = a / b; 0 Ada hal yang luput dari pengamatan kita pada program dan. Apakah kedua program masih memberikan hasil yang benar jika nilai yang diproses mendekati nilai maksimum? Seperti kita ketahui setiap tipe data pada bahasa pemrograman mempunyai batas nilai minimum dan maksimum. Perancang bahasa C tidak menetapkan jumlah byte yang pasti untuk sebuah variabel bertipe data tertentu melainkan hanya menetapkan jumlah byte minimum. Implementor bahasa (pembuat compiler) diberi kebebasan untuk menentukan ukuran byte suatu tipe data. Compiler Turbo C++.0 dan Borland C++. yang dirancang untuk digunakan di atas sistem operasi MSDOS (yang menggunakan sistem pengalamatan memori bit)

Menukar Isi Dua Variabel (ed. ) / menggunakan memori dua byte untuk menampung data bilangan bulat (int). IDE Dev-C++... yang berjalan di atas sistem operasi Windows XP menggunakan compiler GCC yang mengalokasi memori byte untuk menampung data bilangan bulat. Compiler menyediakan sebuah berkas header bernama limits.h. Pada berkas ini dideklarasikan beberapa macro yang memberi nama kepada nilai terkecil dan terbesar, misalnya INT_MIN dan INT_MAX. Jika nilai yang dimasukkan ke dalam sebuah variabel lebih besar daripada daya tampung variabel tersebut (yang sesuai dengan tipe data variabel tersebut) maka akan menyebabkan overflow. Pada cara keempat apabila kedua variabel a dan b diberi nilai mendekati nilai maksimum maka akan menimbulkan overflow ketika dijumlahkan. Bilangan terbesar yang dapat ditampung variabel bertipe char pada bahasa C adalah. Hasil run program berikut masih benar meskipun terjadi overflow. Bagaimana menjelaskan kejanggalan ini? char a = 0, b = 00; a = a + b; // overflow b = a - b; a = a - b; 0 0 00 00 0 Untuk menjelaskan kejanggalan ini kita perlu memahami cara komputer merepresentasi bilangan. Komputer merepresentasi (menyimpan di memori) bilangan baik integer maupun character dengan format binary digit s complement. Nilai absolut bilangan dikonversi menjadi digit biner. Jika bilangan bernilai negatif maka ubah semua bit terkiri menjadi dan sebaliknya, kemudian tambahkan nilai. Sebagai contoh 0 direpresentasi dengan 00000 dan -0 direpresentasi dengan 000. Komputer menginterpretasi bit dengan cara yang sama. Bit yang paling kiri menandakan jenis bilangan, 0 berarti positif dan berarti negatif. Jika bit terkiri bernilai 0 maka nilai bilangan adalah hasil konversi langsung. Jika bit terkiri bernilai maka ubah semua bit 0 menjadi dan sebaliknya, kemudian tambahkan nilai. Digit biner 000 akan diubah menjadi 00000 lalu menjadi 00000 yang artinya bernilai -0. Tabel. Representasi Bilangan Representasi Internal Isi Variabel a b a b 00000 00000 0 00 a = a + b; 0000 00000-0 00 b = a - b; 0000 00000-0 0 a = a - b; 00000 00000 00 0 a = a + b menyebabkan a bernilai 0, direpresentasikan dengan 0000 yang juga diartikan sebagai -0. b = a - b menyebabkan b bernilai -0, direpresentasi dengan 00000 yang juga diartikan sebagai 0. a = a - b menyebabkan a bernilai -, direpresentasi dengan 00000 yang juga diartikan sebagai 00. Bagaimana dengan program kelima? Hasil perkalian variabel a dan b mungkin menyebabkan overflow sehingga bernilai negatif. Jika nilai variabel a dan b relatif besar

Menukar Isi Dua Variabel (ed. ) / maka hasil perkaliannya bisa menyebabkan over-overflow, bernilai positif kembali tetapi salah. Tabel menyajikan hasil perkalian berbagai nilai yang ditampung dengan variabel bertipe char dan int. Perkalian dua nilai positif yang menyebabkan overflow menghasilkan nilai negatif. Bila nilai negatif ini dibagi dengan nilai semula yang positif tentu memberikan hasil yang salah. Tabel. Overflow Pada Perkalian Berbagai Nilai Virtual Atau Faktual? a * b a b char int 0-0 0-0 00 0-0 Apakah kelima cara terakhir ini dapat diterapkan di dalam kehidupan nyata? Misalkan kita mempunyai dua kardus yang masing-masing di dalamnya terdapat sejumlah buku. Isi kedua kardus dapat saling ditukar jika total buku kedua kardus dapat muat di dalam satu kardus, dengan perkataan lain tidak menimbulkan overflow. Anda mempunyai dua gelas. Di dalam kedua gelas terdapat cairan sejenis. Dengan asumsi total volume cairan kedua gelas dapat ditampung di dalam satu gelas, dapatkan Anda menukar isi kedua gelas tersebut tanpa bantuan gelas lain sebagai perantara? Rasanya tidak dapat kecuali jika pada kedua gelas tersebut terdapat skala ukuran. Di manakah skala ukuran pada program komputer? Jika kita mempunyai dua larik karakter, yang bertama berisi string algoritma dan yang kedua berisi string pemrograman. Kita ingin menukar isi kedua variabel ini tanpa bantuan variabel lain. Apa hasil penjumlahan algoritma dan pemrograman? Pada salah satu folder di komputer Anda terdapat dua berkas, sebut saja yang pertama bernama struktur.c dan yang kedua bernama data.c. Nama kedua berkas ini mau saling ditukar. Apakah hal ini dapat dilakukan tanpa bantuan nama berkas lain, maksudnya misalkan salah satunya diubah dulu menjadi nama.c?