• Tidak ada hasil yang ditemukan

Hari : Rabu Pertemuan : 3 Tanggal Praktikum : Oktober 2001 Shift : 4

N/A
N/A
Protected

Academic year: 2021

Membagikan "Hari : Rabu Pertemuan : 3 Tanggal Praktikum : Oktober 2001 Shift : 4"

Copied!
9
0
0

Teks penuh

(1)

Hari : Rabu Pertemuan : 3 Tanggal Praktikum : Oktober 2001

Shift : 4

Tujuan Instruksional Khusus

Mahasiswa memahami pengoperasian file Relative serta beberapa teknik Hashing dan Colision

Pokok Bahasan

Pengenalan file Relative serta Teknik Hashing dan Collision

Materi

- Membuat file baru - Membuka file - Menambah data - Menyisipkan data - Melakukan update Dengan Cara Relative

Menerapkan Beberapa Teknik Hashing dan Collision di program

Teknik hashing adalah salah satu metode akses file secara indirect Hashing menggunakan fungsi transformasi terhadap nilai key yang mengubah nilai key jadi alamat relatif record. Dalam pertemuan ini, yang dipakai adalah Radix Convertion dengan basis 10. Metode Radix ini menerjemahkan kode ke angka, lalu diubah hadi offset file dengan dikalikan panjang data.

Sintaks-Sintaks yang digunakan :

• FILE *file1

Menentukan handle yang akan digunakan dalam program.

Di sini hanya diperlukan satu handle, karena operasi-operasi yang ada tidak memerlukan handle tambahan.

(2)

Perintah ini digunakan untuk membaca data dari FILE *stream. n menunjukkan banyaknya data yg dibaca per kali baca. Size menunjukkan sepanjang apa data yang akan kita baca. Sedangkan *ptr menunjuk pada bagian data yang dibaca.

• fopen (const char *filename, const char *mode)

Sebelum data dalam suatu file bisa diakses, maka filenya harus dibuka terlebih dahulu dengan sintaks fopen. *filename menunjukkan nama file yang akan dibuka, sedangkan mode menunjukkan status file yang dibuka tsb. Mode yang dipakai dalam program ini adalah r (read), r+ (read write).

• fclose(FILE *stream)

Untuk menutup FILE *stream yang sebelumnya telah dibuka.

• fwrite(const void ptr, size_t size, size_t n, FILE*stream)

Untuk menuliskan data ke dalam FILE *stream. Penggunaannya mirip dengan fread. Size menunjukkan panjang data yang hendak kita tulis, lalu n menunjukkan banyaknya data yang ingin kita tulis per kali tulis.

• atoi (const char *s)

Utuk mengubah dari string yang ditunjuk oleh s ke integer.

• fseek (FILE *stream, long offset, int whence)

Fungsi ini berguna untuk memindahkan posisi kursor ke alamat tertentu.

FILE *stream adalah file tempat data yang hendak dicari. Long offset adalah alamat (offset) tempat data tsb berada. Sedangkan int whence adalah tempat awal pencarian, biasanya digunakaan SEEK_SET yang berarti dari awal file.

• ftell(FILE *stream)

Untuk mencari/mendapatkan alamat offset dari suatu data dalam file *stream.

• fprintf(FILE *stream, const char *format [, argument, ...])

Untuk menulis data ke FILE *stream, disertai dengan jenis data, dan data apa saja yang hendak ditulis.

(3)

Hari : Rabu Pertemuan : 3 Tanggal Praktikum : Oktober 2001

Shift : 4

Pembahasan Soal

ALGORITMA þ

þ Tetapkan library (include) yang akan dipakai dan variabel lainnya dengan struct.

Variabel dalam struct adalah kode dan nama dengan panjang masing- masing 4 dan 21. Tidak lupa berikan pula nama struct.

Di sini hanya dipakai satu buah file handle, yaitu file1 yang nantinya akan menampung hasil input.

Setelah itu jalankan main program.

Main program hanya berisi sintaks yang memanggil modul lainnya, yaitu modul proses.

Modul proses akan memanggil modul display yang fungsinya hanyalah membuat tampilan menu utama dan membersihkan layar.

User diharuskan memilih sesuai menu yang ada.

Tampilan layar tidak akan berubah selama user tidak memilih antara angka satu sampai empat. Jika user memilih lima maka program akan exit dan kembali ke prompt.

þ

þ Algoritma cek_file

Pertama-tama buka file hashing.dat dengan mode r (read).

Jika isi file belum ada (NULL) maka bentuk file baru dengan nama “hashing.dat”. Terakhir close kembali file1.

þ

þ Algoritma Tulis

Jalankan modul cek_file. (Lihat algoritma cek_file) Jika user memilih satu, maka modul tulis dipanggil.

(4)

Variabel yang akan dipakai adalah alamat, untuk menyimpan alamat offset dari suatu data.

File1 akan dibuka dengan mode r+ (read write).

User diminta memasukkan kode (maksimal 3 karakter).

User akan terus diminta menginput kode selama input tidak memenuhi syarat. Kode disimpan dalam variabel sementara (temp).

Lalu hitung alamat offset dari kode tadi dengan cara mengkonversinya terlebih dahulu.

Setelah dapat, cari alamat tersebut di dalam file. Pencarian dimulai dari awal file. Posisi kursor pindah ke alamat tersebut.

Kemudian baca data di alamat tersebut.

Bandingkan kode yang diinput user dengan kode di dalam file.

Jika sama akan ditampilkan pesan kesalahan dan user akan kembali ke menu utama.

Selain kondisi di atas (jika tidak sama), user diminta untuk memasukkan nama. Seperti biasa, user akan terus diminta menginput nama sampai syarat dipenuhi (maksimal 20 karakter). Nama juga disimpan dalam variabel temp.

Tulis hasil input ke dalam fi le1 (hashing.dat). Terakhir, tutup file1.

þ

þ Algoritma del

Panggil modul cek_file, jalankan algoritma cek_file.

Variabel yang dipakai adalah alamat. Fungsinya sama seperti pada modul lainnya, yaitu untuk menyimpan alamat dari suatu data.

Buka file1 dengam mode r + (read write). Minta input dari user untuk kode.

Simpan di variabel temp.

Validasi apakah input memenuhi syarat (maksimal 3 karakter), jika tidak minta input terus.

Cari alamat dengan mengubah kode yang diinput menjadi integer dan dikalikan dengan ukuran data.

(5)

Pindahkan posisi kursor ke alamat tersebut.

Baca data pada alamat tersebut, dan bandingkan antara kode input dengan kode di file.

Jika sama, maka pindahkan posisi kursor ke alamat yang diperoleh dari hasil perhitungan. Lalu cetak space kosong sebanyak ukuran data (dalam soal ini adalah 25).

Jika tidak sama cetak pesan kesalahan dan user kembali ke menu utama. Terakhir tutup file1.

þ

þ Algoritma update

Deklarasikan variabel alamat untuk menyimpan alamat offset data. Buka file1 dengan mode r+ (read write).

Minta masukkan kode dan simpan di variabel temp.

Masukkan/input akan diminta terus selama tidak memenuhi syarat (maksimal karakter 3).

Hitung alamat dengan mengubah kode jadi integer dan dikalikan dengan ukuran data.

Pindahkan posisi kursor ke alamat, lalu baca data yang ada di sana. Bandingkan kode input dengan kode di data.

Jika sama pindahkan kembali posisi kursor ke alamat hasil perhitungan terdahulu dan minta input nama. Input nama juga divalidasi. Selama tidak memenuhi syarat, user diminta input terus. Nama akan disimpan di variabel temp. Setelah itu semua isi variabel temp ditulis ke file1.

Jika tidak sama, tampilkan pesan kesalahan dan user kembali ke menu utama. Tutup file1.

þ Algoritma search

Deklarasikan variabel alamat untuk menyimpan alamat offset data. Buka file1 dengan mode r (read).

Minta input kode dari user. Tiap input divalidasi. User akan terus diminta input sampai input memenuhi syarat (maksimal karakter 3).

(6)

Hitung alamat berdasarkan input kode. Caranya ubah kode ke integer dan kalikan dengan ukuran data.

Pindahkan posisi kursor ke alamat tersebut.

Baca data yang terletak di alamat tadi. Pembacaan dimulai dari awal file. Bandingkan kode di file dengan kode input.

Jika sama, cetak kode dan nama yang ada di file.

Jika tidak tampilkan pesan kesalahan dan user kembali ke menu utama. Tutup file1. CODING #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> FILE *file1; struct { char kode[4]; char nama[21]; } data, temp; void cek_file() { file1=fopen("hashing.dat","rb"); if(file1==NULL) file1=fopen("hashing.dat","w"); fclose(file1); } void tulis() { int alamat; file1=fopen("hashing.dat","r+"); do { gotoxy(1,9); clreol();

printf("Masukkan kode [max 3] : "); gets(temp.kode);

}

while(strlen(temp.kode)>3);

alamat=atoi(temp.kode)*(sizeof(data)); fseek(file1, alamat, SEEK_SET);

fread(&data, sizeof(data), 1, file1);

(7)

{

fseek(file1, alamat, SEEK_SET); strcpy(data.kode, temp.kode); do

{

gotoxy(1,10); clreol();

printf("Masukkan nama [max 20] : "); gets(temp.nama);

}

while(strlen(temp.nama)>20);

fwrite(&temp, sizeof(temp), 1, file1); fprintf(file1, "\n\r");

} else {

gotoxy(20,20); printf("kode sudah pernah ada"); getch(); } fclose(file1); } void del() { int alamat; file1=fopen("hashing.dat", "r+"); do { gotoxy(1,9); clreol();

printf("Masukkan kode [max 3] : "); gets(temp.kode);

}

while(strlen(temp.kode)>3);

alamat=atoi(temp.kode)*(sizeof(data)); fseek(file1, alamat, SEEK_SET);

fread(&data, sizeof(data), 1, file1);

if(strcmp(temp.kode, data.kode)==0) {

fseek(file1, alamat, SEEK_SET);

fprintf(file1, " "); }

else {

gotoxy(20,20); printf("tidak ada"); getch(); } fclose(file1); } void update() { int alamat; file1=fopen("hashing.dat","r+"); do { gotoxy(1,9); clreol();

printf("Masukkan kode [max 3] : "); gets(temp.kode);

(8)

while(strlen(temp.kode)>3);

alamat=atoi(temp.kode)*(sizeof(data)); fseek(file1, alamat, SEEK_SET);

fread(&data, sizeof(data), 1, file1);

if(strcmp(temp.kode, data.kode)==0) {

fseek(file1, alamat, SEEK_SET); do

{

gotoxy(1,10); clreol();

printf("Masukkan nama [max 20] : "); gets(data.nama);

}

while(strlen(temp.nama)>20);

fwrite(&temp, sizeof(temp), 1, file1); } else { gotoxy(20,20); printf("tidak ada"); } fclose(file1); getch(); } void search() { int alamat; file1=fopen("hashing.dat", "r"); do { gotoxy(1,9);clreol();

printf("Masukkan kode [Max 3] : "); gets(temp.kode);

}

while(strlen(temp.kode)>3);

alamat=atoi(temp.kode)*(sizeof(data)); fseek(file1, alamat, SEEK_SET);

fread(&data, sizeof(data), 1, file1);

if(strcmp(temp.kode, data.kode)==0) {

gotoxy(1,11); clreol(); printf("Kode : %s", data.kode); gotoxy(1,12); clreol(); printf("Nama : %s", data.nama); } else { gotoxy(1,11); printf("tidak ada"); } fclose(file1); getch(); }

(9)

void display() {

clrscr();

printf("Metode Hashing"); printf("\n1. Append data"); printf("\n2. Delete data"); printf("\n3. Update data"); printf("\n4. Search"); printf("\n5. Exit"); printf("\nPilihan Anda : "); } void proses() { char a; do { display(); a=getch(); switch (a) { case '1' : { cek_file(); tulis(); break; } case '2' : { cek_file(); del(); break; } case '3' : { cek_file(); update(); break; } case '4' : { cek_file(); search(); break; } case '5' : break; default : display(); } } while(a!='5'); } void main() { proses(); }

Referensi

Dokumen terkait

Tapi apabila dilihat dari jumlah data error pada sistem komunikasi kooperatif yang dipengaruhi gangguan AWGN dan multipath fading dengan teknik AF dan tanpa teknik AF

Tracheal intubation in the critically ill: a multi-centre national study of practice and Product (RPP) dapat disimpulkan bahwa terdapat peningkatan bermakna terhadap tekanan

Berisi tinjauan pustaka dan kajian mengenai hotel, klasifikasi hotel, bentuk hotel, dasar-dasar perencanaan hotel, sarana utilitas bangunan hotel, serta

Nilai validitas LKPD berbasis model pembelajaran scramble pada aspek kelayakan isi yaitu sebesar 3,14 dengan kategori valid, nilai validitas aspek perancangan yaitu sebesar 3,22

Dan tak lupa penulis menyampaikan penghargaan dan cinta kasih yang terdalam dan tulus kepada Kepala Kepala Laboratorium Kimia Fisika USU, Bang edi yang telah membantu penulis selama

Pada topik kali ini, program dinamis yang akan digunakan adalah 2 dimensional DP yaitu dengan menggunakan struktur data array dua dimensi (matriks)..

Goleman (2009: 45) menyatakan bahwa “kecerdasan emosi merupakan kemampuan emosi yang meliputi kemampuan untuk mengendalikan diri, memiliki daya tahan ketika menghadapi suatu

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton