Selasa, 18 Desember 2012
Senin, 26 November 2012
Alamat Logik dan Alamat Fisik
Alamat Logika adalah alamat yang
dibentuk di CPU, disebut juga alamat virtual. Alamat fisik adalah alamat yang terlihat oleh memori. Waktu compilasi dan waktu pemanggilan menghasilkan daerah dimana alamat logika dan alamat fisik sama. Sedangkan pada waktu eksekusi menghasilkan alamat fisik dan logika yang berbeda. Kumpulan
alamat logika yang dibuat oleh program adalah ruang alamat logika. Kumpulan alamat fisik yang
berkorespondensi dengan alamat logika disebut ruang alamat fisik. Untuk mengubah dari alamat logika ke alamat fisik diperlukan suatu perangkat keras yang
bernama MMU ( Memory Management Unit ).
MMU (Memory Management Unit) : perangkat keras yang
memetakan alamat logika ke alamat fisik
– Menyediakan perangkat register yang dapat diset oleh CPU: setiap
proses mempunyai data set register tersebut (disimpan di PCB)
– Harga dalam register base/relokasi ditambahkan ke setiap alamat
proses user pada saat run dimemori
– Program-program user hanya berurusan dengan alamat logika saja

Paging adalah suatu metode yang
memungkinkan suatu alamat fisik memori yang tersedia dapat tidak berurutan.
Memori fisik dibagi ke dalam blok-blok
ukuran tetap yang disebut “frame”
– Memori logika dibagi ke dalam blok-blok dengan ukuran yang sama yang
disebut “page”
– Untuk menjalankan program berukuran n page, harus dicari frame
kosong sebanyak n untuk meload program
– Page table digunakan untuk translasikan alamat logik ke alamat fisik
– Alamat yang dibangkitkan CPU dibagi menjadi :
•
Page number (p) à digunakan sebagai index ke page table. Page table berisi alamat
basis dari setiap page pada memori fisik
•
Page Offset (d) à dikombinasikan dengan alamat basis untuk mendefinisikan alamat
memori fisik yang dikirim ke unit memori


Segmentasi adalah skema manajemen memori dengan cara membagi memori menjadi segmen-segmen.
Berbeda dengan page, ukuran tiap segmen tidak harus sama dan memiliki cirri tertentu,
yaitu nama dan panjang segmen.
• Sebuah program merupakan kumpulan dari segment. Sebuah segement
berisi unit logik seperti: main
program, procedure, function, method, object, local variables, global variables, common block, stack, symbol table,
arrays

Contoh :

Selasa, 13 November 2012
coding sembako
Define max :
mendfinisikan nilai yang bernama max sepanjang 100
Typedef char
string[20] : sebuah karakter sepanjang 20
typedef struct :
sebuah data jenis baru yang bernama sembako yg mmpunyai atribut string jenis,
string asal, float berat
typedef struct: jenis
data baru bernama stack sembako yang memiliki atribut
void int : membuat
sebuah stack dengan ktentuan...
void input
sembako(): menginputkan sebuah sembako
void push:
memasukkan data dr void input sembako kedalam stack sembako. jika nilai
top<99 akan="akan" dimasukkan="dimasukkan" jika="jika" maka="maka" output="output" pd="pd" penuh="penuh" sembako="sembako" span="span" stack="stack">99>
void show:
mnampilkan isi dr stack sembako yg sudah di inputkan, jika nilai teratas>-1
mnampilkan isi stack sembako, jika nilai kosong maka output"stack
kosong"
void pop:
menghapus data teratas dr stack sembako, jika nilai >-1 maka data teratas
dihapus apabila stack kosong
float rerata:
menghitung rata" isi stack sembako
int banyak paket:
menhitung banyaknya jumlah sembako pada stack sembako jika nilai teratas>-1
maka data akan dihitung, apabila stack osong
output "stack kosong"
typedef struct
sebuah data jenis baru yang bernama StackSembako
{
int top;
Sembako content[Max];
float totalBerat;
int nelemen;
}StackSembako;
Sebuah data yang bernama
StackSembako
void init(StackSembako *S)
à membuat sebuah stack dengan ketentuan StackSembako * S
{
(*S).top=-1; è nilai top=-1
(*S).totalBerat=0;à nilai totalBerat=0
(*S).nelemen=0;à nilai nelemen=0
}
void inputSembako(Sembako
*x, string a, string b, float c)
menginputkan sembako
{
strcpy((*x).jenis,a);
strcpy((*x).asal,a);
(*x).berat=c;
}
void push(StackSembako
*S, Sembako x)
memasukkan data dr void input sembako
kedalam stack sembako
{
if((*S).top
{
(*S).top++;
strcpy((*S).content[(*S).top].jenis,x.jenis);
strcpy((*S).content[(*S).top].asal,x.asal);
(*S).content[(*S).top].berat=x.berat;
(*S).totalBerat=(*S).totalBerat+x.berat;
(*S).nelemen++;
}
else
printf("\nStack penuh....");
}
jika nilai top<99 akan="akan" dimasukkan="dimasukkan" jika="jika" maka="maka" output="output" pd="pd" penuh="penuh" sembako="sembako" span="span" stack="stack"> “stack penuh”. 99>
void show(StackSembako S)
menampilkan isi dari stack sembako yang sudah diinputkan,
{
if(S.top>-1)
{
while(S.top!=-1)
{
printf("\n\nJenis
barang :%s",S.content[S.top].jenis);
printf("\n\nAsal
barang :%s",S.content[S.top].asal);
printf("\n\nBerat
:%0.2f",S.content[S.top].berat);
S.top--;
}
printf("------------------------------------");
printf("\n\nTotal Berat : %f
kg",S.totalBerat);
}
else
printf("\nStack kosong");
}
jika nilai top/nilai teratas >-1 menampilkan isi stack
sembako, jika nilai kosong maka output"stack kosong"
void pop(StackSembako *S)
menghapus data teratas dari stack sembako
{
Sembako x;
if((*S).top>-1)
{
x=(*S).content[(*S).top];
(*S).totalBerat=(*S).totalBerat-x.berat;
(*S).nelemen--;
(*S).top--;
printf("\nAsal : %s",x.jenis);
printf("\nJenis : %s",x.asal);
printf("\nBerat : %f",x.berat);
}
else
{
printf("\nStack kosong");
}
}
jika nilai >-1 maka data teratas dihapus
apabila nilai <= -1 maka stack kosong
float rerata(StackSembako
S)
menghitung rata-rata isi stack sembako
{
return S.totalBerat/S.nelemen;
}
int
banyakPaket(StackSembako S,string a,string b)
menghitung banyaknya jumlah sembako pada stack sembako
{
int n=0;
if(S.top>-1)
{
while(S.top!=-1)
{
if((strcmpi(S.content[S.top].jenis,a)==0
&& (strcmpi(S.content[S.top].asal,b)==0)))
{
n++;
}
S.top--;
}
return n;
}
else
{
printf("\nStack kosong");
return 0;
}
}
jika nilai teratas >-1 maka data akan
dihitung, apabila stack kosong output "stack
kosong"
Senin, 29 Oktober 2012
TUGAS STRUKTUR DATA MEMBUAT CODING ADT
LAPORAN
MEMBUAT CODING DAN PENJELASANNYA
Dosen Pengampu :
Yulius Nugroho Putro, ST

Disusun Oleh :
ANDIKA INDRAYANA
NPM. 11.1.03.02.0043
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS NUSANTARA PGRI KEDIRI
Jl. Achmad Dahlan 76 Telp (0354) 771 576 Mojoroto
Kota Kediri
CODING
#include
#include
typedef struct {
int absis;
int ordinat;
}Point;
int IsSame(Point P1, Point P2);
void PrintPoint (Point P);
int IsSame (Point P1, Point P2)
{
if ((P1.absis==P2.absis) && (P1.ordinat==P2.ordinat))
return 1;
else
return 0;
}
void PrintPoint(Point P)
{
printf("(%d,%d)\n",P.absis,P.ordinat);
}
void main ()
{
Point P1;
Point P2;
int pilih;
do
{
printf("MENU\n");
printf("=======================\n");
printf("1. Masukkan Titik\n");
printf("2. Tampil Titik\n");
printf("3. Cek Titik\n");
printf("4. Keluar\n");
printf("=======================\n");
printf("Masukkan pilihan : ");
scanf("%d",&pilih);
switch(pilih)
{
case 1:
printf ("Masukkan koordinat x titik pertama : ");
scanf("%d",&P1.absis);
printf ("Masukkan koordinat y titik pertama : ");
scanf("%d",&P1.ordinat);
printf ("Masukkan koordinat x titik kedua : ");
scanf("%d",&P2.absis);
printf ("Masukkan koordinat y titik kedua : ");
scanf("%d",&P2.ordinat);
getch ();
break;
case 2:
printf("\nKoordinat pertama: ");
PrintPoint(P1);
printf("\nKoordinat kedua: ");
PrintPoint(P2);
getch ();
break;
case 3:
if (IsSame (P1,P2))
printf ("\nKedua titik sama");
else
printf("\nKedua titik tidak sama");
getch();
break;
}
}
while (pilih!=4);
getch();
}
Penjelasan :
scanf("%d",&P1.absis); untuk memasukkan nilai P1 absis atau x1,
scanf("%d",&P1.ordinat); untuk memasukkan nilai P1 ordinat atau Y1
PrintPoint(P1);
printf("(%d,%d)\n",P.absis,P.ordinat);
untuk menampilkan nilai koordinat (x,y)
int IsSame (Point P1, Point P2)
{
if ((P1.absis==P2.absis) && (P1.ordinat==P2.ordinat))
return 1;
else
return 0;
}
Jika nilai P1 absis sama dengan P2 absis dan P1 ordinat sama dengan P2 ordinat maka diberi nilai 1
if (IsSame (P1,P2))
printf ("\nKedua titik sama");
else
printf("\nKedua titik tidak sama");
jika nilai IsSame (P1,P2) adalah 1 maka akan menghasilkan output “kedua titik sama”, sebaliknya salah atau IsSame(P1,P2) tidak 1 maka akan menghasilkan output “Kedua titik tidak sama”.
Coding 2 :
#include
#include
#include
#define Max 21
typedef struct{
int TI[Max-1];
int Neff;
}TabInt;
void MakeEmpty(TabInt *T)
{
(*T).Neff=0;
}
int LastIdx(TabInt T)
{
return T.Neff;
}
void BacaIsi(TabInt *T)
{
int i,N;
printf("\n");
printf("\nBanyaknya elemen yang akan dientri : ");
scanf("%d",&N);
printf("Masukkan isi :\n");
for(i=1;i<=N;i++)
{
printf(">>%d>> ",i);
scanf("%d", &((*T).TI[i]));
}
(*T).Neff=N;
}
void TulisIsi(TabInt T)
{
int i;
printf("\n");
if(LastIdx(T)==0)
printf("Tabel kosong");
else
{
for(i=1;i<=LastIdx(T);i++)
printf("%d\t",(T).TI[i]);
}
printf("\n");
}
int sumElemen(TabInt T)
{
int i, jumlah=0;
printf("\n");
for(i=1;i<=LastIdx(T);i++)
{
jumlah+=T.TI[i];
}
return jumlah;
}
float averageElemen(TabInt T)
{
int i;
float jumlah=0, rata=0;
printf("\n");
for(i=1;i<=LastIdx(T);i++)
{
jumlah+=T.TI[i];
}
rata=jumlah/LastIdx(T);
return rata;
}
int sumKelipatan2(TabInt T)
{
int i, jumlahKelipatan2=0;
printf("\n");
for(i=1;i<=LastIdx(T);i++)
{
if(T.TI[i]%2==0)
{
jumlahKelipatan2+=T.TI[i];
}
}
return jumlahKelipatan2;
}
int nilaiMAX(TabInt T)
{
int i, nilaiMax=T.TI[1];
printf("\n");
for(i=1;i<=LastIdx(T);i++)
{
if(nilaiMax
{
nilaiMax=T.TI[i];
}
}
return nilaiMax;
}
void createArr2(TabInt *T, int N)
{
int i,kelipatan2=2;
for(i=1;i<=N;i++)
{
(*T).TI[i]=kelipatan2;
kelipatan2+=2;
}
printf("\n");
for(i=1;i<=N;i++)
{
printf("%d\t",(*T).TI[i]);
}
printf("\n");
}
void main()
{
TabInt T;
int N;
char pil;
MakeEmpty(&T);
do
{
system("cls");
printf("========MENU========");
printf("\n1. Make Empty\n");
printf("2. Input Element Tabel\n");
printf("3. Lihat Tabel\n");
printf("4. Jumlah Elemen\n");
printf("5. Rata-Rata Elemen\n");
printf("6. Jumlah Bilangan yang Kelipatan 2\n");
printf("7. Nilai MAX\n");
printf("8. Mengubah Isi Array dengan Bilangan Genap\n");
printf("Esc untuk Keluar\n");
printf("\nMasukkan pilihan menu : ");
pil=getch();
switch(pil)
{
case '1' :
MakeEmpty(&T);
printf("\nTabel sudah dikosongkan !");
getch();
break;
case '2' :
BacaIsi(&T);
getch();
break;
case '3' :
printf("\nIsi Tabel : ");
TulisIsi(T);
getch();
break;
case '4' :
printf("\nJumlah semua nilai : %d",sumElemen(T));
getch();
break;
case '5' :
printf("\nRata-rata semua nilai : %.2f",averageElemen(T));
getch();
break;
case '6' :
printf("\nJumlah Bilangan yang Kelipatan 2 : %d",sumKelipatan2(T));
getch();
break;
case '7' :
printf("\nNilai maksimum dalam array : %d",nilaiMAX(T));
getch();
break;
case '8' :
printf("\nMasukkan jumlah elemen : ");
scanf("%d",&N);
createArr2(&T, N);
getch();
break;
}
}while(pil!=27);
}
Penjelasan :
void BacaIsi(TabInt *T)
{
int i,N;
printf("\n");
printf("\nBanyaknya elemen yang akan dientri : ");
scanf("%d",&N); à untuk memasukkan jumlah elemen yang dientri
printf("Masukkan isi :\n");
for(i=1;i<=N;i++) à perulangan untuk memasukkan nilai sebanyak N
{
printf(">>%d>> ",i);
scanf("%d", &((*T).TI[i])); à untuk menuliskan nilai elemen yang dimasukkan
}
(*T).Neff=N;
}
int i;
printf("\n");
if(LastIdx(T)==0) à jika nilai T=0, maka tabel dinyatakan kosong
printf("Tabel kosong");
else
{
for(i=1;i<=LastIdx(T);i++) à jika nilai T tidak 0 maka akan terjadi perulangan yang menentukan nilai elemen tabel
printf("%d\t",(T).TI[i]); à memunculkan nilai yang diinputkan
}
printf("\n");
int sumElemen(TabInt T)
{
int i, jumlah=0;
printf("\n");
for(i=1;i<=LastIdx(T);i++) à perulangan yang digunakan untuk menjumlahkan nilai elemen
{
jumlah+=T.TI[i]; à penjumlahan setiap elemen
}
return jumlah;
}
for(i=1;i<=LastIdx(T);i++)
{
jumlah+=T.TI[i];
}
rata=jumlah/LastIdx(T); à untuk mengetahui rata-rata dari elemen yang diinputkan dengan cara menjumlahkan semua elemen kemudian dibagi dengan jumlah elemen (LastIdx(T))
return rata;
for(i=1;i<=LastIdx(T);i++)
{
if(T.TI[i]%2==0) à jika nilai elemen (T.TI[i] dibagi 2 hasilnya tidak bersisa, maka akan diproses dibawah ini.
{
jumlahKelipatan2+=T.TI[i]; à untuk menjumlahkan elemen yang jika dibagi 2 hasilnya tidak bersisa.
}
}
return jumlahKelipatan2;
int i, nilaiMax=T.TI[1];à nilaiMax hanya ada 1
for(i=1;i<=LastIdx(T);i++) à perulangan untuk mengecek setiap elemen
{
if(nilaiMaxà jika nilaiMax lebih kecil dari suatu elemen (T.TI[i]) maka akan diteruskan proses di bawah ini.
{
nilaiMax=T.TI[i]; à nilaiMax diperoleh dari elemen yang paling besar
}
int i,kelipatan2=2;à elemen dimulai dari 2
for(i=1;i<=N;i++) à perulangan untuk mendapatkan nilai elemen
{
(*T).TI[i]=kelipatan2; à elemen = kelipatan2
kelipatan2+=2; à setiap elemen akan ditambahkan 2 sesuai rumus ini.
Langganan:
Postingan (Atom)