Anda di halaman 1dari 6

TUGAS

PRAKTIKUM SISTEM BERKAS


PO, UB, LQ


Cipto Tri Utomo
140810150024












dikumpulkan tanggal
22 November 2017





PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PADJAJARAN
2017
1. Progressive Overflow
Salah satu konversi yang sederhana adalah penggunaan overflow yang progresif atau
probing secara linier. Sesuai namanya bila lokasi yang akan ditempati telah terisi, maka lokasi
selanjutnya dilihat apakah masih belum terisi. Secara progresif lokasi selanjutnya di overflow.
Memiliki struktur yang melingkar, dengan lokasi pertama brada tepat sesudah lokasi
terakhir. Pencarian dilanjutkan sampai ditemukan slot yang kosong atau sampai ditemukan
home-address rekaman untuk kedua-kalinya. Menandakan bahwa berkas telah penuh.

#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

const int n = 38;
const int p = 41;

int records[n] =
{13,75,64,51,94,35,25,80,54,7,89,67,55,32,92,53,28,48,56,22,60,59,17,46,19,4
2,90,9,97,27,78,14,69,52,11,26,84,34};
int address[p];

void fillAddressWithZero () {
for (int i = 0; i < p; i++) {
address[i] = 0;
}
}

int getAddress (int record) {
return record % p;
}

void assignRecordToAddress () {
for (int i = 0; i < n; i++) {
int alamat = getAddress (records[i]);
if (address[alamat] == 0) {
address[alamat] = records[i];
}else {
int j = alamat+1;
while (j < p) {
if (address[j] == 0) {
address[j] = records[i];
break;
}else {
if (j == p-1) {
j = 0;
}else {
j++;
}
}
}
}
}
}

void printAddress () {
cout<<endl
<<setw(8) << left << "Address"
<<setw(7) << left << "Record"
<<endl;

for (int i = 0; i < p; i++) {
cout<<setw(8) << left << i
<<setw(7) << left << address[i]
<<endl;
}
}

int main () {
fillAddressWithZero();
assignRecordToAddress();
printAddress();
getch();
}


2. use of buckets
Dalam diskusi mengenai prosedur resolusi kolisi, diasumsikan bahwa hanya sebuah
rekaman saja yang dapat disimpan pada sebuah alamat penyimpanan. Jumlah pengaksesan
dapat direduksi dengan meletakkan lebih dari satu rekaman pada satu alamat penyimpanan.
Kemungkinan tersebut dapat direalisir bila digunakan sistem buckets (disebut juga
blok atau halaman).
Jadi, bucket dapat didefinisikan sebagian unit penyimpanan yang berada di antara
rekaman dengan berkas, juga sebuah unit dengan informasi yang dapat di akses dan
dipindahkan antar peralatan penyimpanan. Jumlah rekaman yang dapat diletakkan pada
satu bucket disebut factor-blocking. Jika factor-blocking meningkat, jumlah akses terhadap
penyimpanan akan mengecil karena beberapa rekaman yang berkolisi dapat disimpan
dalam satu alamat yang sama.

#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

const int n = 38;
const int p = 41;
int bucket = 0;

int records[n] =
{13,75,64,51,94,35,25,80,54,7,89,67,55,32,92,53,28,48,56,22,60,59,17,46,19,4
2,90,9,97,27,78,14,69,52,11,26,84,34};
int address[p][n];

void fillAddressWithZero () {
for (int i = 0; i < p; i++) {
for (int j = 0; j < n; j++) {
address[i][j] = 0;
}
}
}

int getAddress (int record) {
return record % p;
}

void assignRecordToAddress () {
for (int i = 0; i < n; i++) {
int alamat = getAddress (records[i]);
for (int j = 0; j < n; j++) {
if (address[alamat][j] == 0) {
address[alamat][j] = records[i];
if (bucket < j+1) {
bucket = j+1;
}
break;
}else {
if (bucket < j+1) {
bucket = j+1;
}
}
}
}
}

void printAddress () {
cout<<endl
<<setw(8) << left << "Address";
for (int i = 0; i < bucket; i++) {
cout<<setw(7)<< left <<"Record "
<<setw(3) << left << i;
}
cout<<endl;

for (int i = 0; i < p; i++) {
cout<<setw(8) << left << i;

int j = 0;

while (j < bucket && address[i][j] != 0) {
cout<<setw(7) << left << address[i][j]
<<setw(3) << left << "";
j++;
}
cout<<endl;
}
}

int main () {
fillAddressWithZero();
assignRecordToAddress();
printAddress();
getch();
}


3. linear quotient
#include <stdio.h>
#include <iostream>
//#include <conio.h>

int main()
{
int data[7] = {27,18,29,28,39,13,16};
int lokasi[11] = {0,0,0,0,0,0,0,0,0,0,0};
int z;
int i,j,x;
system("cls");
for(i=0;i<7;i++)
printf("%2d ",data[i]);
printf("\n");
for(i=0;i<7;i++){
x = data[i] % 11;
z = (int(data[i]/11)) % 11;
if (lokasi[x] == 0)
lokasi[x] = data[i];
else{
for(j=x+z; (j>=0 && j<11); j++){
if (lokasi[j] == 0) {
lokasi[j] = data[i]; j = -2;
} else {
if (j>=7) j=j%11;}
}
}
printf("%2d ",x);
}
printf("\n ");
// printf("\n \n");
// for(i=0;i<11;i++){
// printf("%4d %4d \n",i,lokasi[i]);
// }
// system("pause");
// return 0;
}



Output :

Anda mungkin juga menyukai