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
Skema Translasi Alamat





Contoh :


















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">
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”.

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.