Senin, 15 Februari 2010

;/==============================\;
; PROGRAM : BRA1.ASM ;
; AUTHOR : S’to ;
; FUNGSI : MENCETAK KALIMAT ;
; DENGAN BASE ;
; RELATIVE ADDRESSING;
; ;
;\==============================/;

.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kalimat DB 'NYAMUK GORENG' ; 13 karakter
Proses:
XOR BX,BX ; BX=0 Untuk penunjuk Offset
MOV CX,13 ; Counter LOOP
Ulang :
MOV DL,Kalimat[BX] ; Ambil karakter yang ke BX
MOV AH,02 ; Servis untuk cetak karakter
INT 21h ; Cetak Karakter
INC BX ; BX:=BX+1
LOOP Ulang ; Lompat ke Ulang sampai CX=0
INT 20h ; Selesai, kembali ke DOS !!
END TData


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Program: kal0.asm ;
; Oleh : S’to ;
; Fungsi : Mencetak String ;
; dengan Int 21 servis 9 ;
;=====================================;
.MODEL SMALL
.CODE
ORG 100h
Tdata : JMP Proses
Kal0 DB 'PROSES PENCETAKAN STRING ',13,10,'$'
Kal1 DB 'DIBELAKANG TANDA $ TIDAK BISA DICETAK '
Proses:
MOV AH,09h ; Servis ke 9
MOV DX,OFFSET Kal0 ; Ambil Alamat Offset Kal0
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,Kal0 ; Ambil Alamat Offset Kal0
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,Kal0+7 ; Ambil Alamat Offset KAl0+7
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,KAL1 ; Ambil Offset kal1
INT 21h ; Cetak perkarakter sampai ketemu $
INT 20h ; Selesai, kembali ke DOS
END Tdata

;/=============================================\;
; Program : ATTR-KLM.ASM ;
; Author : S’to ;
; Fungsi : Mencetak kalimat disertai ;
; atributnya ;
;-----------------------------------------------;
; INT 10h ;
;-----------------------------------------------;
; Input : ;
; AX = 1300h ;
; BL = Atribut ;
; BH = Halaman tampilan ;
; DL = Posisi X ;
; DH = Posisi Y ;
; CX = Panjang kalimat;
; ES:BP = Alamat awal string ;
; ;
;\=============================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal0 DB ' Menulis kalimat dengan Atributnya '
Proses:
MOV AX,1300h ; Servis 13h subfungsi 00
MOV BL,10010101b ; Atribut tulisan
MOV BH,00 ; Halaman tampilan 0
MOV DL,20 ; Posisi X
MOV DH,12 ; Posisi Y
MOV CX,35 ; Banyaknya karakter dalam string
LEA BP,Kal0 ; ES:BP alamat string
INT 10h ; Cetak kalimat !
INT 20h ; Selesai, kembali ke DOS
END TData


;/========================================\;
; Program : READKEY.ASM ;
; Author : S’to ;
; Fungsi : Input satu karakter ;
; dari keyboard. ;
;==========================================;
; INTERUPSI 16h ;
;==========================================;
; Input: OutPut: ;
; AH = 0 Jika tombol biasa, maka: ;
; AL = ASCII ;
; AH = SCAN ;
; ;
; Jika Tombol khusus, maka ;
; AL = 00 ;
; AH = Extended ;
; ;
;\========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
T_ASCII DB 13,10,'Ini adalah tombol ASCII : $'
T_Extended DB 13,10,'Ini adalah tombol Extended $'
Proses :
MOV AH,0 ; Servis Input satu karakter
INT 16h ; Laksanakan
PUSH AX ; Simpan hasil pembacaan pada stack
CMP AL,00 ; Apakah ini karakter extended ?
JE Extended ; Ya !, Lompat ke Extended
ASCII:
LEA DX,T_ASCII ; Ambil alamat efektif T_ASCII
MOV AH,09 ; Servis cetak kalimat
INT 21h ; Cetak kalimat !
POP AX ; Ambil kembali nilai AX pada stack
MOV DL,AL ; Ambil kode ASCII yang ditekan
MOV AH,2 ; Servis cetak karakter
INT 21h ; Cetak karakter !
CMP AL,'Q' ; Apakah yang ditekan huruf 'Q' ?
JE exit ; Ya !, lompat ke Exit
CMP AL,'q' ; Apakah yang ditekan huruf 'q' ?
JE exit ; Ya !, lompat ke Exit
JMP Proses ; Lompat ke Proses
Extended:
LEA DX,T_Extended ; Ambil alamat efektif T_Extended
MOV AH,09 ; Servis cetak kalimat
INT 21h ; Cetak kalimat !
JMP Proses ; Lompat ke Proses
exit: INT 20h ; Kembali ke DOS !
END TData


;/=========================================================\;
; Program : IN-KAL.ASM ;
; Author : S’to ;
; Fungsi : Input Kalimat dari ;
; keyboard. ;
;===========================================================;
; INTERUPSI 21h ;
;===========================================================;
; Input: ;
; AH = 0Ah ;
; DS:DX = Penampung dengan spesifikasi: ;
; Byte 1 = Maksimum karakter yang dapat dimasukkan ;
; Byte 2 = Akan dijadikan Indikator banyaknya ;
; karakter yang dimasukkan ;
; Byte 3 keatas = Tempat hasil masukan ditampung ;
; ;
; ;
;\=========================================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
T_Enter EQU 0Dh
Kal0 DB 'Ketikkan satu Kalimat : $'
Kal1 DB 13,10,'Kalimat pada buffer : $'
Buffer DB 23,?,23 DUP(?)
Proses : MOV AH,09
LEA DX,Kal0
INT 21h ; Cetak kalimat Kal0
MOV AH,0Ah ; Servis Input kalimat
LEA DX,Buffer ; DX menunjuk pada offset Buffer
INT 21h ; Input kalimat !
MOV AH,09
LEA DX,Kal1
INT 21h ; Cetak kalimat Kal1
LEA BX,Buffer+2 ; BX menunjuk byte ke 3 Buffer
Ulang:
CMP BYTE PTR [BX],T_Enter ; Apakah karakter Enter?
JE EXIT ; Ya! Lompat ke Exit
MOV DL,[BX] ; Masukkan karakter pada DL
MOV AH,02 ; Servis cetak karakter
INT 21h ; Cetak karakter
INC BX ; BX := BX+1
JMP Ulang ; Lompat ke Ulang
EXIT: INT 20h ; Kembali ke DOS !
END TData


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : PROC_KAR.ASM ;
; FUNGSI : MENCETAK KARATER ;
; DENGAN PROCEDURE ;
; ;
;==========================S’to=;
.MODEL SMALL
.CODE
ORG 100h
Proses : CALL Cetak_Kar ; Panggil Cetak_Kar
INT 20h
Cetak_Kar PROC NEAR
MOV AH,02h
MOV DL,'S'
INT 21h ; Cetak karakter
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END Proses


.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kar DB ?
Klm DB 'BATMAN SI MANUSIA KELELAWAR ' ; 28 Karakter
Proses : MOV CX,28 ; Banyaknya pengulangan
XOR BX,BX ; Addressing Mode
Ulang :
MOV DL,Klm[BX]
MOV Kar,DL
CALL Cetak_Kar ; Panggil Cetak_Kar
INC BX
LOOP Ulang
INT 20h
Cetak_Kar PROC NEAR
PUSH AX ; Simpan semua register
PUSH DX ; Yang digunakan
MOV AH,02h
MOV DL,Kar
INT 21h ; Cetak karakter
POP DX ; Kembalikan semua register
POP AX ; Yang disimpan
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END TData
Program 16.2. Menggunakan Procedure





;/====================================\;
; Program : TPTK.ASM ;
; Fungsi : Contoh menggunakan ;
; pustaka macro ;
;\====================================/;
INCLUDE PUSTAKA.MCR ; Gunakan file PUSTAKA.MCR
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal0 DB 'PENGGUNAAN PUSTAKA MACRO $'
Proses:
Cetak_Klm Kal0 ; Cetak Kalimat Kal0
Cetak_Kar 'Y' ; Cetak Huruf 'Y'
INT 20h
END TData


;/========================\;
; Program : PUSTAKA.MCR ;
;\========================/;
Cetak_Kar MACRO Kar ; Macro untuk mencetak
MOV AH,02 ; Karakter
MOV DL,Kar
INT 21h
ENDM
Cetak_Klm MACRO Klm ; Macro untuk mencetak
LEA DX,Klm ; kalimat
MOV AH,09
INT 21h
ENDM
Program 17.3. Pustaka.MCR




Tulis_Kar MACRO X,Y,Kar,Attr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV AH,Y
MOV AL,160
MUL AH ; Hitung offset baris
MOV BX,AX ; Simpan hasilnya pada BX
MOV AH,X
MOV AL,2
MUL AH ; Hitung offset kolom
ADD BX,AX ; Tambahkan hasilnya pada BX
MOV AL,Kar ; AL=karakter yang akan ditampilkan
MOV AH,Attr ; AH=Atribut yang akan ditampilkan
MOV ES:[BX],AL ; Tampilkan Karakter dan atributnya
MOV ES:[BX+1],AH ; pada posisi kolom X dan baris Y
ENDM

;/===============================================\;
; Program : LAYAR1.ASM ;
; Author : S’to ;
; ;
; Fungsi : Menampilkan karakter dan atributnya ;
; dengan menuliskannya langsung pada ;
; memory layar ;
;\===============================================/;
.MODEL SMALL
.CODE
ORG 100h
Proses :
Tulis_Kar 40 12 'S' 95 ; Tulis karakter 'S' dengan
; no atribut 95 pada posisi
INT 20h ; kolom 40 dan baris 12
END Proses



Cls MACRO ; Macro untuk menghapus layar
MOV AX,0600h
XOR CX,CX
MOV DX,184Fh
MOV BH,10 ; Atribut Hijau diatas hitam
INT 10h
ENDM
GotoXY MACRO X,Y ; Macro untuk memindahkan kursor
MOV AH,02
XOR BX,BX
MOV DH,Y
MOV DL,X
INT 10h
ENDM
SimpanL MACRO ; Macro untuk menyimpan seluruh
LOCAL Ulang ; isi layar monitor
MOV AX,0B800h
MOV ES,AX
MOV CX,4000
XOR BX,BX
Ulang:
MOV AL,ES:[BX]
MOV Layar[BX],AL
INC BX
LOOP Ulang
ENDM
BalikL MACRO ; Macro untuk mengembalikan semua
LOCAL Ulang ; isi layar yang telah disimpan
MOV CX,4000
XOR BX,BX
Ulang:
MOV AL,Layar[BX]
MOV ES:[BX],AL
INC BX
LOOP Ulang
ENDM
Sorot MACRO X,Y ; Macro untuk membuat sorotan
LOCAL Ulang ; pada menu
MOV BL,Y
MOV AL,160
MUL BL
MOV BX,AX
MOV AL,X
MOV AH,2
MUL AH
ADD BX,AX
INC BX ; Alamat warna pada posisi X,Y
MOV CX,25 ; Panjangnya sorotan
Ulang:
MOV BYTE PTR ES:[BX],4Fh ; Atribut sorotan
; putih diatas merah
ADD BX,2
LOOP Ulang
ENDM
Readkey MACRO ; Macro untuk membaca masukan dari
MOV AH,00 ; keyboard.
INT 16h ; hasilnya AH=Extended, AL=ASCII
ENDM
MenuL MACRO String ; Macro untuk mencetak menu
MOV AH,09
LEA DX,String
INT 21h
ENDM
;/==============================================\;
; Program : SOROT.ASM ;
; Author : S’to ;
; Fungsi : Membuat menu sorot untuk ;
; digunakan program ;
;\==============================================/;
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
Layar DB 4000 DUP (?)
Menu DB 9,9,'+=============================+',13,10
DB 9,9,'| »»» MENU SOROT ««« |',13,10
DB 9,9,'+=============================+',13,10
DB 9,9,'| |',13,10
DB 9,9,'| 1. Pilihan pertama |',13,10
DB 9,9,'| 2. Pilihan Kedua |',13,10
DB 9,9,'| 3. Pilihan Ketiga |',13,10
DB 9,9,'| 4. Pilihan Keempat |',13,10
DB 9,9,'| |',13,10
DB 9,9,'+=============================+$'
PosX DB 22 ; Posisi kolom mula-mula
PosY DB 12 ; Posisi baris mula-mula
Panah_Atas EQU 72 ; Kode tombol panah atas
Panah_Bawah EQU 80 ; Kode tombolpanah bawah
TEnter EQU 0Dh ; Kode tombol Enter
Proses :
Cls ; Hapus layar
GotoXY 0 8 ; kursor = 0,8
MenuL Menu ; Gambar menu
SimpanL ; Simpan isi layar
Ulang :
BalikL ; Tampilkan isi layar yang
; disimpan
Sorot PosX,PosY ; Sorot posisi X,Y
Masukan:
Readkey ; Baca masukan dari keyboard
CMP AH,Panah_Bawah ; Panah bawah yang ditekan ?
JE Bawah ; Ya! lompat bawah
CMP AH,Panah_Atas ; Panah atas yang ditekan ?
JE CekY ; Ya, lompat CekY
CMP AL,TEnter ; Tombol enter yang ditekan ?
JNE Masukan ; Bukan, lompat ke ulangi
JMP Selesai ; Ya, lompat ke selesai
CekY :
CMP PosY,12 ; Apakah sorotan paling atas ?
JE MaxY ; Ya! lompat ke MaxY
DEC PosY ; Sorotkan ke atas
JMP Ulang ; Lompat ke ulang
MaxY :
MOV PosY,15 ; PosY=Sorotan paling bawah
JMP Ulang ; lompat ke ulang
Bawah :
CMP PosY,15 ; apakah sorotan paling bawah ?
JE NolY ; Ya! lompat ke NolY
INC PosY ; Sorotkan ke bawah
JMP Ulang ; Lompat ke ulang
NolY :
MOV PosY,12 ; Sorotan paling atas
JMP Ulang ; Lompat ke ulang
Selesai:
INT 20h
END TData



.model small
.code
org 100h
start : jmp mulai
kt1 db “Masukkan Angka [1..3] : $”,13,10
kt2 db “Saya Laki-laki $”,13,10
kt3 db “Saya Perempuan $”,13,10
kt4 db “Saya Bukan Keduanya $”,13,10
mulai : mov ax,03h
int 10h
mov ah,09h
lea dx,kt1
int 21h
mov ah,01h
cmp al,’1’
je laki
cmp al,’2’
je wanita
cmp al,’3’
je bukan
laki : mov ah,09h
lea dx,kt2
int 21h
jmp selesai
wanita : mov ah,09h
lea dx,kt3
int 21h
jmp selesai


bukan : mov ah,09h
lea dx,kt4
int 21h
jmp selesai
selesai : int 20h
end start



.model small
.code
org 100h
start : jmp mulai
menu db “** MENU UTAMA **”13,10
db “<>”,13,10
db “********************”,13,10
db “1. Sarapan Pagi “,13,10
db “2. Makan Siang”,13,10
db “3. Makan Malam”,13,10
db “4. Exit”,13,10
db “------------------------------“,13,10
db “Tentukan Pilihan Anda [1..4] : $”
jwb1 db “1. Nasi Goreng”,13,10
db “2. Udang Goreng”,13,10
db “3. The Manis $”
jwb2 db “1. Nasi Putih”,13,10
db “2. Cumi Rebus”,13,10
db “3. Ikan Bakar”,13,10
db “4. Air Putih $”

jwb 3 db “1. Nasi Putih”,13,10
db “2. Kerang Rebus”,13,10
db “3. Kepiting Panggang:,13,10
db “4. Air Putih $”
mulai : mov ax,03h
int 10h
mov ah,02h
lea dx,menu
int 21h
mov ah,01h
cmp al,’1’
je pil1
cmp al,’2’
je pil2
cmp al,’3’
je pil3
jmp selesai
pil1 : mov ah,09h
lea dx,jwb1
int 21h
jmp selesai
pil2 : mov ah,09h
lea dx,jwb2
int 21h
jmp selesai
pil3 : mov ah,09h
lea dx,jwb3
jmp selesai
selesai : int 20h
end start

















Rabu, 10 Februari 2010

ORGANISASI KOMPUTER DASAR
A. KOMPONEN SISTEM
Sebuah komputer moderen/digital dengan program yang
tersimpan di dalamnya merupakan sebuah system yang
memanipulasi dan memproses informasi menurut kumpulan
instruksi yang diberikan. Sistem tersebut dirancang dari
modul-modul hardware seperti :
1. Register
2. Elemen aritmatika dan logika
3. Unit pengendali
4. Unit memori
5. Unit masukan/keluaran (I/O)
Komputer dapat dibagi menjadi 3 bagian utama, yaitu :
1. Unit pengolahan pusat (CPU)
2. Unit masukan/keluaran (I/O)
3. Unit memori

CPU mengendalikan urutan dari semua pertukaran informasi
dalam komputer dan dengan dunia luar melalui unit I/O.
Sedangkan unit memori terdiri dari sejumlah besar lokasi
yang menyimpan program dan data yang sedang aktif
digunakan CPU. Ketiga unit tersebut dihubungkan dengan
berbagai macam bus.

Bus adalah sekelompok kawat atau sebuah jalur fisik yang
berfungsi menghubungkan register-register dengan unitunit
fungsional yang berhubungan dengan tiap-tiap modul.
Informasi saling dipertukarkan di antara modul dengan
melalui bus.

B. OPERASI MIKRO
Adalah operasi tingkat rendah yang dapat dilakukan oleh
komputer atau CPU sehingga fungsi-fungsi operasi akan
dihasilkan untuk memindahkan data antar register.
Salah satu cara dalam melakukan operasi mikro tersebut
dengan menggunakan bahasa transfer register / Register
Transfer Language (RTL).
RTL adalah sebuah bahasa yang digunakan untuk
menjabarkan atau melaksanakan operasi mikro.
SIC (SIMPLIFIED INSTRUCTIONAL COMPUTER)
Komputer yang didasarkan pada SIC ini merupakan komputer yang
termasuk dalam perancangan arsitektur yang sangat sederhana dan
komputer ini dipersembahkan oleh BECK (1985).
Struktur Mesin SIC terdiri dari :
1. CPU
2. Unit memori
3. Minimal satu unit prinati I/O
Untuk CPU yang digunakan terdiri dari 13 register khusus, seperti
yang ada pada table di bawah ini.

NO REGISTER UKURAN (bit) NAMA
1 A 24 Accumulator
2 X 15 Register Index
3 L 15 Register Linkage
4 PC 15 Program Counter
5 IR 24 Instruction Register
6 MBR 24 Memori Buffer Register
7 MAR 15 Memori Address Register
8 SW 11 Status Word
9 C 2 Counter
10 INT 1 Interrupt Flag
11 F 1 Fetch Cycle Flag
12 E 1 Execute Cycle Flag
13 S 1 Start / Stop Flag

Penggunaan register-register pada SIC
1. Register A = register yang digunakan untuk proses
perhitungan
2. Register X = register yang digunakan untuk mode
pengalamatan berindex
3. Register PC = register yang menyimpan alamat instruksi
berikutnya
4. Register L = register yang menyimpan alamat asal sebelum
melakukan subroutines
5. Register IR = register yang menyimpan instruksi yang
sedang dikerjakan
6. Register MBR = register yang digunakan untuk proses
masukan atau keluaran data dari memori
7. Register MAR = register yang menyimpan alamat memori
untuk proses pembacaan atau penulisan
8. SW = register yang berisi informasi status relatif terhadap
instruksi sebelumnya
9. C = register yang membangkitkan signal waktu t0, t1, t2, t3
10. INT = register yang menentukan apakah signal interrupt
telah diterima
11. F = register yang digunakan dalam proses”siklus fetch’
12. E = register khusus yang digunakan dalam proses “siklus
eksekusi’
13. S = register yang akan mengaktifkan register C
Kumpulan Instruksi SIC
Ada 21 instruksi SIC yang digunakan, dimana pada instruksi ini
m menunjukkan address memori dari operand dan (m)
menunjukkan nilai yang disimpan pada address memori tersebut.
Opcode instruksinya ditulis dalam notasi heksadesimal.
• JSUB dan RSUB merupakan dua instruksi yang berhubungan
dengan subrutin. JSUB menyimpan PC saat ini ke L dan
kemudian melompat ke subrutin dengan menyimpan operand
ke PC. RSUB kembali dari subrutin dengan melompat ke lokasi
yang dinyatakan oleh L.
• Instruksi TD digunakan untuk menguji piranti I/O sebelum
berusaha untuk membaca dari atau menulis ke piranti
tersebut.Hasil pengujian tersebut disimpan di dalam kode
kondisi (condition code), field CC, pada SW. Panjang field ini 2
bit dan digunakan untuk mewakili salah satu dari tiga nilai <, =, >
Jika instruksi TD dijalankan, nilai field CC aka di-set menurut
kode berikut :
< menunjukkan bahwa piranti telah siap = menunjukan bahwa piranti sedang sibuk dan tidak dapat digunakan pada saat itu > menunjukkan bahwa piranti tidak beroperasi
• Instruksi COMP digunakan juga untuk men-set field CC. Nilai
yang disimpan field CC setelah sebuah instruksi COMP setelah
sebuah instruksi COMP menggambarkan hubungan antara A
dan operand instruksi
• Instruksi IRT digunakan oleh interrupt handler agar
menyebabkan lompatan kembali ke tempat dimana CPU
berada sebelum intrupsi terjadi.
Jika interupsi terjadi, CPU akan menyimpan PC saat ini ke
dalam memori pada address 0.
Untuk kembali dari sebuah interupsi , isi dari alamat memori
ini harus di-load kembali ke dalam PC.
• Instruksi-instruksi lainnya adalah operasi aritmatika dan
logika, transfer dari pengendalian(jump), loading register,
storing register atau membaca dan menulis ke piranti I/O.

Selasa, 09 Februari 2010

SOAL 2
#include (iostream.h>
#include (string.h>
#include (dos.h>
#include (stdlib.h>
#include (conio.h>

class elemen
{
struct list
{
int bil;
struct list *next;
};

public:
typedef struct list NODE;
typedef NODE *PNODE;

void tampil_stack (PNODE atas);
void PUSH (PNODE *atas, PNODE baru);
void POP (PNODE *atas);
PNODE masuk_stack (void);

void tampil_queue (PNODE head);
void insert (PNODE *tail,PNODE *head, PNODE baru);
void INSERT_QUEUE (PNODE *tail,PNODE *head, PNODE baru);
void DELETE_QUEUE (PNODE *head, PNODE *tail);
PNODE masuk_queue (void);
};

void elemen :: tampil_stack (PNODE atas)
{
PNODE pos;
pos = atas;
cout<<"\n\nbilangan : "; while(pos != NULL) { cout< bil<<", "; pos = pos -> next;
}
cout<<"\n\n\n [TEKAN ENTER UNTUK MELANJUTKAN]"; getch(); } void elemen :: PUSH (PNODE *atas, PNODE baru) { if (*atas == NULL) { *atas = baru; } else{ baru -> next = *atas;
*atas = baru;
}
}

void elemen :: POP (PNODE *atas)
{
PNODE PH;
PH = *atas;

if(*atas == NULL)
{
cout<<"\n\nSTACK KOSONG !!!\n\n"; } else { if (PH -> next == NULL)
{
*atas = NULL;
free(PH);
}
else
{
*atas = (*atas) -> next;
free(PH);
}
}
getch();
}

PNODE elemen :: masuk_stack (void)
{
PNODE baru;
baru = (NODE *) malloc (sizeof(NODE));
cout<<"\nbil : ";cin>>baru->bil;
baru -> next = NULL;
return (baru);
getch();
}

void elemen :: tampil_queue (PNODE head)
{
PNODE pos;
pos = head;
cout<<"\n\nbilangan : "; while(pos != NULL) { cout< bil<<", "; pos = pos -> next;

}
cout<<"\n\n\n [TEKAN ENTER UNTUK MELANJUTKAN]"; getch(); } void elemen :: INSERT_QUEUE (PNODE *tail,PNODE *head, PNODE baru) { if(*tail == NULL) { *head = baru; *tail = baru; } else { (*tail) -> next = baru;
*tail = baru;
}
}

void elemen :: DELETE_QUEUE (PNODE *head, PNODE *tail)
{
PNODE PH;
PH = *head;
if(*head == NULL)
{
cout<<"\n\nQUEUE KOSONG !!!\n\n"; } else { if (PH -> next == NULL)
{
*head = NULL;
*tail = NULL;
free(PH);
}
else
{
*head = (*head) -> next;
free(PH);
}
}
getch();
}

PNODE elemen :: masuk_queue (void)
{
PNODE baru;
baru = (NODE *)malloc(sizeof(NODE));
cout<<"\nbil : ";cin>>baru -> bil;
baru -> next = NULL;
return(baru);
getch();
}


void main()
{
PNODE atas = NULL;
PNODE baru;
PNODE head = NULL,tail = NULL;
int pil=1, x, m;
char *a = "Created bY Tendi Setiadi (6306211) ";
char *b = "Í";
elemen data;
textbackground (RED);
clrscr();

m=strlen(a);
gotoxy (20,20);
for (x=0; x<<*(a+x); delay(200); } gotoxy (3,24); for (x=0; x<75; x++) { cout<<*b; delay(40); } while (pil != 3) { clrscr(); cout<<"\n-> Menu Utama <-"<<<"\n1> Stack";
cout<<"\n2> Queue";
cout<<"\n3> Exit";
cout<<"\nPilihan : ";cin>>pil;

if (pil == 1)
{
while(pil != 4)
{
clrscr();
cout<<"\n>> Menu STACK <<"<<<"\n1. PUSH STACK"; cout<<"\n2. LIHAT DATA STACK"; cout<<"\n3. POP STACK"; cout<<"\n4. Menu Utama"; cout<<"\nPilihan : ";cin>>pil;

if (pil == 1)
{
baru = data.masuk_stack();
data.PUSH(&atas, baru);
}

if (pil == 2)
data.tampil_stack(atas);

if (pil == 3)
{
data.POP(&atas);
}
}
}

if (pil == 2)
{
while(pil != 4)
{
clrscr();
cout<<"\n>> Menu QUEUE <<"<<<"\n1. INSERT_QUEUE LIST"; cout<<"\n2. LIHAT DATA LIST"; cout<<"\n3. DELETE_QUEUE LIST"; cout<<"\n4. Menu Utama"; cout<<"\nPilihan : ";cin>>pil;

if (pil == 1)
{
baru=data.masuk_queue();
data.INSERT_QUEUE(&tail,&head,baru);
}

if (pil == 2)
data.tampil_queue(head);

if (pil == 3)
{
data.DELETE_QUEUE(&head,&tail);
}
}
}
}
}






SOAL 3
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"

struct list
{
char nama[35];
char kode[10];
struct list * next;
};
typedef struct list node;
typedef node * pnode;
typedef struct list NODE;
typedef NODE * PNODE;

void TAMPIL(PNODE ATAS)
{
int x;
PNODE POS;
POS = ATAS;
cout<<"\nKode : "; while(POS!=NULL) { cout<kode<<" - "; POS=POS->next;
}
}

void PUSH(PNODE *ATAS,PNODE BARU)
{
if(*ATAS==NULL)
{
*ATAS = BARU;
}
else
{
BARU->next = *ATAS;
*ATAS = BARU;
}
}

void POP(PNODE *ATAS)
{
PNODE PH;
PH = *ATAS;
if(*ATAS==NULL)
{
cout<<"\n\nSTACK KOSONG !!!\n\n"; } else { if (PH->next==NULL)
{
*ATAS = NULL;
free(PH);
}
Else
{
*ATAS = (*ATAS)->next;
free(PH);
}
}
}

PNODE MASUK(void)
{
PNODE BARU;
BARU=new(NODE);
cout<<"KODE : "; gets(BARU->kode);
BARU->next=NULL;
return(BARU);
}

void tampil(pnode atas)
{
int x;
pnode pos;
pos = atas;
cout<<"NEGARA : "; while(pos!=NULL) { cout<nama<<" - "; pos=pos->next;
}
}

void push(pnode *atas, pnode baru)
{
if(*atas==NULL)
{
*atas = baru;
}
else
{
baru->next = *atas;
*atas = baru;
}
}

void pop(pnode *atas)
{
pnode ph;
ph = *atas;

if(*atas==NULL)
{
cout<<"\n\nSTACK KOSONG !!!\n\n"; } else { if (ph->next==NULL)
{
*atas = NULL;
free(ph);
}
else
{
*atas = (*atas)->next;
free(ph);
}
}
}

pnode masuk(void)
{
pnode baru;
baru=new(node);
cout<<"\nNEGARA : "; gets(baru->nama);
baru->next=NULL;
return(baru);
}

void main()
{
pnode atas=NULL;
pnode baru;
PNODE BARU;
PNODE ATAS=NULL;
int pil=1;
clrscr();

while(pil!=4)
{
cout<<"\n\n=======STACK======="; cout<<"\n1. PUSH STACK"; cout<<"\n2. VIEW DATA STACK"; cout<<"\n3. POP STACK"; cout<<"\n4. EXIT"; cout<<"\nPilihan [1/2/3/4] : "; cin>>pil;

if (pil==1)
{
clrscr();
baru=masuk();
BARU=MASUK();
push(&atas,baru);
PUSH(&ATAS,BARU);
}
if (pil==2)
{
clrscr();
tampil(atas);
TAMPIL(ATAS);
}
if (pil==3)
{
clrscr();
pop(&atas);
POP(&ATAS);
}
}
}

contoh program STACK

#include (iostream.h)
#include (stdlib.h)
#include (conio.h)
class elemen{
struct list{
int bil;
struct list * next;
};
public:
typedef struct list NODE;
typedef NODE * PNODE;

void tampil(PNODE atas);
void PUSH(PNODE *atas, PNODE baru);
void POP(PNODE *atas);
PNODE masuk(void);
};

void elemen::tampil(PNODE atas){
PNODE pos;
pos = atas;
cout<<"\n\nbilangan : "; while(pos!=NULL){ cout<bil<<", "; pos=pos->next;
}
}

void elemen::PUSH(PNODE *atas, PNODE baru){
if(*atas==NULL){
*atas = baru;
}else{
baru->next = *atas;
*atas = baru;
}
}

void elemen::POP(PNODE *atas){
PNODE PH;
PH = *atas;
if(*atas==NULL){
cout<<"\n\nSTACK KOSONG !!!\n\n"; }else{ if (PH->next==NULL){
*atas = NULL;
free(PH);
}else{
*atas = (*atas)->next;
free(PH);
}
}
}

PNODE elemen::masuk(void){
PNODE baru;
baru=(NODE *)malloc(sizeof(NODE));
cout<<"\nbil : ";cin>>baru->bil;
baru->next=NULL;
return(baru);
}

void main(){
PNODE atas=NULL;
PNODE baru;
int pil=1;
elemen data;
clrscr();
while(pil!=4){
cout<<"\n\n1. PUSH STACK"; cout<<"\n2. LIHAT DATA STACK"; cout<<"\n3. POP STACK"; cout<<"\n4. EXIT"; cout<<"\nPilihan : ";cin>>pil;
if (pil==1){
baru=data.masuk();
data.PUSH(&atas, baru);
}
if (pil==2)
data.tampil(atas);
if (pil==3){
data.POP(&atas);
}
}
}