Translate to your languages

Selamat Datang . Suatu kehormatan bagi saya atas kunjungan ini. Saya sangat berharap kunjungan berikutnya.

14 Januari 2009

LATIHAN UJIAN UNTUK UAS

Ini bukanlah Quiz, tapi untuk latihan anda nanti UAS Online Ok!

07 Januari 2009

file

Coba dulu yang sebelumnya Klik di bawah ini !!!

Lanjutan Record : [SORTING]

FILE

1. Komposisi dari File Teks
File Teks disusun sebagai runtunan beberapa baris .
• Tiap baris terdiri dari runtunan karakter.
• Tiap baris diakhiri oleh karakter khusus, yaitu END-OF-LINE (EOLN)
• Karakter yang terakhir dari file teks adalah END-OF-FILE (EOF)
Contoh.



- EOF : menerima argumen nama file dan menghasilkan nilai true jika sudah tidak ada data yang bisa dibaca lagi.
- EOLN : menerima argumen nama file dan menghasilkan nilai true jika sudah tidak ada lagi data yang bisa lagi dalam satu baris.

2. Operasi pada file teks
Untuk melakukan operasi pada file teks, kita perlu mendeklarasikan suatu variabel dengan tipe teks seperti berikut:

var
F : text;

F adalah sembarang variabel file teks dan readme adalah nama file teks yang akan dibaca, pertama kita harus memanggilnya dengan fungsi :
assign(F,'README');

3. Membaca File dan Menampilkannya di Layar
Sebelum kita bisa membaca kita harus membuka file tersebut.

reset(F);

kita bisa membaca file baris demi baris, misalkan dengan menyatakan suatu variabel s sebagai string:

readln(F, s);

setelah selesai membaca keseluruhan teks kita harus menutupnya dengan:

close(F);

Contoh. (misal kita punya suatu file dengan path 'D:\file1.txt')













4. Menulis File Baru
Kita membuat suatu file teks dengan mengubah kata kunci :

reset(F); menjadi rewrite(F);

Kemudian: Gunakan readln(F,s) untuk membaca file yang akan dikopi dan writeln(F,s) untuk menulis ke file tujuan
Contoh 1.. (misal kita punya suatu file dengan path 'D:\file1.txt') dan kita akan memgkopinya ke file dengan path 'D:\file1.txt')













Contoh 2. membuat file baru













Catatan: statemen rewrite(variabel_teks) apabila diterapkan pada file yang sudah ada akan menyebabkan isi file terhapus dan mulai membuat yang baru, maka untuk menambahkan teks pada file yang sudah ada digunakan kata kunci append (variabel_teks).

5. Error pada Pembacaan File
Untuk mengatasi error pada pembacaan file teks digunakan error-handling. yaitu :

{$I-} --> membuat Pascal stabil
: --> proses pada file
{$I+} --> deteksi terhadap error

error dapat di deteksi dengan memanggil fungsi IOResult. jika IOresult adalah 0, maka tidak terjadi error.
Contoh :














6. Jenis Error pada Pembacaan File
IO result dapat menghasilkan jenis kesalahan pada pembacaan file, seperti contoh.

SORTING

LANJUTAN RECORD

5. Sorting

Beberapa metode sorting mengurutkan data yang dikenal antara lain adalah:
1. Bubble Sort (sederhana tetapi lambat)
2. Quick Sort (cepat tetapi rumit)
3. Shell Sort (agak cepat dan tidak terlalu rumit)

5.1. Bubble Sort
Teknik ini menyusun data yang diinginkan secara berurutan dengan membandingkan elemen data yang ada, misalkan kita akan meyusun data secara (ascending) cacah naik. Maka lagoritma utamanya adalah seperti ini.

SYNTAX

for i:=1 to Jumlah_data-1 do
for j:=i+1 to Jumlah_data do
if Data[i]>Data[j] then
begin
t:=Data[i];
Data[i]:=Data[j];
Data[j]:=t;
end;

Contoh.
Misal kita punya data : 5 3 8 4 1 7 6 2 , dalam program
program mengurutkandata;

uses WinCrt;
type urutkan=array [1..8] of integer;
var i,j,t:integer;
anu:urutkan;
begin
anu[1]:=5; anu[2]:= 3;
anu[3]:= 8; anu[4]:= 4;
anu[5]:= 1; anu[6]:= 7 ;
anu[7]:=6 ; anu[8]:=2 ;
for i:=1 to 7 to
begin
for j:=i+1 to 8 to
begin
if anu[i]>anu[j] then
begin
t:=anu[i];
anu[i]:=anu[j];
anu[j]:=t;
end;
end;
end;
for i:=1 to 8 do
write (anu[i], ' ')
end.

5.2. Shell sort
Prinsipnya hampir sama dengan bubble sort tetapi dioptmisisasi sehingga lebih cepat. Ditemukan oleh Donald Shell. prinsipnya adalah membandingkan data dengan jarak tertentu dalam array.
SYNTAX

for jarak:= (Jumlah_data div 2) down to 1 do
for i:=1 to Jumlah_data-jarak do
if Data[i]>Data[i+jarak] then
begin
t:=Data[i];
Data[i]:=Data[i+jarak];
Data[i+jarak]:=t;
end;

Misalkan kita punya 8 data. Langkah pertama adalah membandingkan data pertama dengan ke lima, dsb. Jarak antara data adalah (8 div 2 :=4).
Langkah iterasi:
pertama, jarak adalah 4.
5 3 8 4 1 7 6 2
ke-1 perbandingan : ^ ^ (salah urutan, tukar)
1 3 8 4 5 7 6 2
ke-2 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-3 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 4 5 7 8 2
ke-4 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 2 5 7 8 4 ----> Jarak 3.
ke-5 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-6 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-7 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-8 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-9 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 2 4 7 8 5 ----> Jarak 2.
ke-10 perbandingan :^ ^ ( urutan benar, no tukar)
ke-11 perbandingan : ^ ^ (salah urutan, tukar)
1 2 6 3 4 7 8 5
ke-12 perbandingan : ^ ^ (salah urutan, tukar)
1 2 4 3 6 7 8 5
ke-13 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-14 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-15 perbandingan : ^ ^ (salah urutan, tukar)
1 2 4 3 6 5 8 7 ----> Jarak 1.
ke-16 perbandingan :^ ^ ( urutan benar, no tukar)
ke-17 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-18 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 6 5 8 7
ke-19 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-20 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 5 6 8 7
ke-21 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-22 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 5 6 7 8

5.3. quick sort
diketemukan oleh E. Hoare. Dengan menggunakan metode rekursi samapi habis. Prinsipnya membagi data menjadi dua bagian yang sama (kiri dan kanan). Dimana data tengah menjadi pivot (pusat operasi). Kumpulkan data dengan nilai lebih kecil dari pivot disebelah kiri pivot, dan di kanan untuk yang lebih besar. Dimungkinkan bagian kiri dan kanan pivot tidak sama besarnya. Untuk itu tiap bagin di bagi menjadi dua lagi dan mempuyi pivot yang baru. Contoh misal kita mempunyai data array integer.

procedure qsort(bawah, atas : integer)
var kiri, kanan, pivot : integer;
begin
pivot:=Data[(bawah+atas) div 2];
kiri:=bawah;
kanan:=atas;
while kiri<=kanan do
begin
while Data[kiri] < pivot do kiri:=kiri+1; { memisahkan ke kiri }
while Data[kanan]>pivot do kanan:=kanan-1;{Memisahkan ke kanan}
if kiri<=kanan then { chek perubahan }
begin
swap Data[kiri] with Data[kanan];
kiri:=kiri+1;
kanan:=kanan-1;
end;
end;
if kanan>bawah then qsort(bawah,kanan);{ urutkan bagian KIRI }
if atas>kiri then qsort(kiri ,atas);{ urutkan bagian KANAN}
end;

Pemangilan dalam program utama : qsort(1,NumberOfData);