Pemrograman Sistem


Program Menghitung Faktorial

Listing program :
#include <cstdlib>
#include <iostream>
using namespace std;
long factorial(long a){
     if(a>1)
            return (a * factorial (a-1));
     else
         return (1);}
int main (){
    cout<<"Program Menghitung Faktorial"<<endl;
    cout<<" "<<endl;
    cout<<" "<<endl;
    long number1,number2,hasil;
    int pilih;
    cout << "Masukkan Angka : ";
    cin >> number1;
    cout << "Masukkan Angka : ";
    cin >> number2;
    cout<<" "<<endl;
    cout<<" "<<endl;
    cout<<"Pilih Proses yang Akan Dilakukan"<<endl;
    cout<<" "<<endl;
    cout<<"1. Penjumlahan Faktorial"<<endl;
    cout<<"2. Pengurangan Faktorial"<<endl;
    cout<<" "<<endl;
    cout<<"Masukkan Pilihan : ";cin>>pilih;
    switch (pilih) {
           case 1 :
              hasil = factorial(number1) + factorial(number2);
              cout <<number1<<"! + "<<number2<<"! = "<< hasil <<endl;
              break;
           case 2 :
              hasil = factorial(number1) - factorial(number2);
              cout <<number1<<"!"<<" - "<<number2<<"! = "<< hasil <<endl;
              break;              }
    cout<<" "<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Program Dari Bilangan ke Terbilang

Listing program :
#include<stdio.h>
#include<conio.h>
void ribuan(int angka);
void ratusan(int angka);
void puluhan(int angka);
void satuan(int angka);
int main() {
 long int angka;
 int tekan; do {    do {
       printf("Program membaca bilangan");
       printf("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");printf("\n");
       fflush(stdin);
       printf("\nMasukkan angka (0-9999): ");scanf("%ld",&angka);
    }while (angka > 9999 || angka < 0);
    printf("Dibaca: ");
    if (angka>999) ribuan(angka);
    else if (angka>99) ratusan(angka);
    else if (angka>9) puluhan(angka);
    else if (angka>-1) satuan(angka);
    printf("\n\nTekan ESC untuk Keluar dan Spasi untuk kembali...");
    tekan=getch();
 }while(tekan != 27);
}
void ribuan(int angka) {
 int temp1,temp2;
 temp1=angka/1000;temp2=angka%1000;
 if (temp1 <10 && temp1 > 1) { satuan(temp1);printf("ribu "); }
 else printf("seribu ");
 if (temp2 > 99) ratusan(temp2);
 else if (temp2 > 9) puluhan(temp2);
 else if (temp2 > 0) satuan(temp2);}
void ratusan(int angka) {
 int temp1,temp2;
 temp1=angka/100;temp2=angka%100;
 if (temp1 < 10 && temp1 > 1) { satuan(temp1);printf("ratus "); }
 else if (temp1 == 1) printf("seratus ");
 if (temp2 > 9) puluhan(temp2);
 else if(temp2 >0) satuan(temp2);}
void puluhan(int angka) {
 int temp1,temp2;
 temp1=angka/10;temp2=angka%10;
 switch (temp1) {
    case 1: {
       if (temp2 == 0) { printf("sepuluh ");break; }
       else if (temp2 == 1) { printf("sebelas ");break; }
       else if (temp2 == 2) { printf("dua belas ");break; }
       else if (temp2 == 3) { printf("tiga belas ");break; }
       else if (temp2 == 4) { printf("empat belas ");break; }
       else if (temp2 == 5) { printf("lima belas ");break; }
       else if (temp2 == 6) { printf("enam belas ");break; }
       else if (temp2 == 7) { printf("tujuh belas ");break; }
       else if (temp2 == 8) { printf("delapan belas ");break; }
       else if (temp2 == 9) { printf("sembilan belas ");break; }    }
    default:{satuan(temp1);printf("puluh ");} }
 if (temp2 > 0 && angka >19) satuan(temp2);}
void satuan(int angka) {
 switch (angka) {
    case 9:printf("sembilan ");break;
    case 8:printf("delapan ");break;
    case 7:printf("tujuh ");break;
    case 6:printf("enam ");break;
    case 5:printf("lima ");break;
    case 4:printf("empat ");break;
    case 3:printf("tiga ");break;
    case 2:printf("dua ");break;
    case 1:printf("satu ");break;
    case 0:printf("nol ");break; }
}


 

Bahasa Rakitan

Dengan menggunakan bahasa asembler buatlah program input nilai mahasiswa. contoh output:
Masukkan Data Mahasiswa:
NIM : 1213455
Nama : Edomaru
JKl (1=Pria, 2= Wanita) : 1
Jurusan : TI
Nilai Tugas : 80
Nilai UTS : 70
Nilai UAS : 90

Berikut data Nilai Mahasiswa:
NIM = 1213455
Nama = Edomaru
JKL  = Pria
Jurusan = Teknik Informatika
Nilai Akhir = 80
Nilai Huruf = A

keterangan:
nilai akhir > 80 = A
nilai akhir > 70 < 80 = B
nilai akhir > 55 < 70 = C
nilai akhir > 40 < 55 = D
nilai akhir < 40 = E

=======================================================

Jawab :


.model small
.code
    org 100h
   
mulai:    jmp proses
a db 80
b db 70
c db 55
d db 40

    tbl_enter equ 0dh    ; 0dh=Enter=13
    kal0 db 13,10,'Masukkan Data Mahasiswa : $'
    Kal1      db 13,10,'Nim: $'
    Kal2      db 13,10,'Nama: $'   
    Kal3      db 13,10,'JKL (1= Pria; 2 = Wanita) : $'   
    Kal4      db 13,10,'Jurusan: $'
    Kal5      db 13,10,'Nilai Tugas : $'
    Kal6      db 13,10,'Nilai UTS : $'
    Kal7      db 13,10,'Nilai UAS : $'
    Kal8      db 13,10,'============================ $'
    Jwb1      db 13,10,'Nim: $'
    Jwb2      db 13,10,'Nama: $'
    Jwb3      db 13,10,'JKL: $'
    Jwb4      db 13,10,'Jurusan: $'
    Jwb5      db 13,10,'Nilai Akhir: $'
    Jwb6      db 13,10,'Nilai huruf: $'
    Jawab1      db 26,?,26 dup(?)    ;?=menyatakan banyak karakter yang diinputkan
    Jawab2      db 26,?,26 dup(?)
    Jawab3      db 26,?,26 dup(?)
    Jawab4      db 26,?,26 dup(?)
    Jawab5      db 3,?,3 dup(?)
    Jawab6      db 3,?,3 dup(?)
    Jawab7      db 3,?,3 dup(?)
    ket0 db 13,10,'Masukkan Data Mahasiswa : $'
    ket2 db 13,10,'Berikut Data Nilai Mahasiswa : $'
    ket3 db 'Pria $'
    ket4 db 'Wanita  $'
    ket5 db 'Teknik Informatika$'
    ket6 db 'A $'
    ket7 db 'B $'
    ket8 db 'C $'
    ket9 db 'D $'
    ket10 db 'E $'
   
proses:

    mov ah,09h ; mencetak kalimat
    lea dx,kal0
    int 21h
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal1
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab1
    int 21h
   
    mov ah,09h ; mencetak kalimat
    lea dx,Kal2
    int 21h            ; cetak ket
   
    mov ah,0ah
    lea dx,jawab2
    int 21h
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal3
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab3
    int 21h
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal4
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab4
    int 21h            ; catat
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal5
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab5
    int 21h            ; catat
    ;mov a,bx
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal6
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab6
    int 21h   
    ;mov b,bx
   
    mov ah,09h    ; mencetak kalimat
    lea dx,Kal7
    int 21h            ; tanya
   
    mov ah,0ah
    lea dx,jawab7
    int 21h   
    ;mov c,bx
   
    mov ah,09h
    lea dx,Kal8
    int 21h
   
    mov ah,09h ; mencetak kalimat
    lea dx,Ket2
    int 21h
cetak:
    mov ah,09h ; mencetak kalimat
    lea dx,Jwb1
    int 21h
   
    lea bx,jawab1+2        ; menunjuk byte ke-2 dari jawab
ulang:   
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je cetak2
    mov dl,[bx]
    mov ah,02h        ; mencetak karakter
    int 21h       
    inc bx
    jmp ulang               

cetak2:
    mov ah,09h
    lea dx,Jwb2
    int 21h            ; catat
    lea bx,jawab2+2        ; menunjuk byte ke-2 dari jawab
   
ulang2 :
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je cetak3
    mov dl,[bx]
    mov ah,02h        ; mencetak karakter
    int 21h       
    inc bx
    jmp ulang2

cetak3:
    mov ah,09h
    lea dx,Jwb3
    int 21h            ; catat
   
    lea bx,jawab3+2        ; menunjuk byte ke-2dari jawab
    cmp byte ptr [bx],'1'
    je Pa
    cmp byte ptr [bx],'2'
    je Wa
       
ulang3 :
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je cetak4
    mov dl,[bx]
    ;mov ah,02h        ; mencetak karakter
    ;int 21h       
    inc bx
    jmp ulang3
Pa:
mov ah,09h
    lea dx,ket3
    int 21h
    jmp ulang3
Wa:
mov ah,09h
    lea dx,ket4
    int 21h   
    jmp ulang3
   
cetak4:
    mov ah,09h
    lea dx,Jwb4
    int 21h            ; catat
   
    lea bx,jawab4+2        ; menunjuk byte ke-2dari jawab

    cmp byte ptr [bx],"t"
     je nb
    cmp byte ptr [bx],"T"
     je nb
     
ulang4 :
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je cetak5       
    inc bx
    jmp ulang4
nb:
 mov ah,09h
 lea dx,ket5
 int 21h
 jmp ulang4


cetak5:
    mov ah,09h
    lea dx,Jwb5
    int 21h            ; catat
    lea bx,jawab5+2
   
ulang5 :
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je cetak6
    mov dl,[bx]
    mov ah,02h        ; mencetak karakter
    int 21h       
    inc bx
    jmp ulang5
   
cetak6:
    mov ah,09h
    lea dx,Jwb6
    int 21h            ; catat
   
    lea bx,jawab6+2        ; menunjuk byte ke-2dari jawab
    mov al,a
    cmp al,jawab5+2
    ;jb Bb
    je Aa
    ;ja Aa
   
    mov al,b
    cmp al,jawab5+2
    cmp al,b
    ;jb Cc
    je Bb
    ;ja Bb
   
    mov al,c
    cmp al,jawab5+2
    cmp al,c
    ;jb Dv
    je Cc
    ;ja Cc
       
    mov al,d
    cmp al,jawab5+2
    ;jb Ee
    je Dv
    ;ja Dv
       
ulang6 :
    cmp byte ptr [bx],tbl_enter    ; apakah karakter enter
    je keluar
    mov dl,[bx]
    ;mov ah,02h        ; mencetak karakter
    ;int 21h       
    inc bx
    jmp ulang6

Aa:
mov ah,09h
 lea dx,ket6
 int 21h
 jmp ulang6
Bb:
mov ah,09h
 lea dx,ket7
 int 21h
 jmp ulang6
Cc:
mov ah,09h
 lea dx,ket8
 int 21h
 jmp ulang6
Dv:
mov ah,09h
 lea dx,ket9
 int 21h
 jmp ulang6
Ee:
mov ah,09h
 lea dx,ket10
 int 21h
 jmp ulang6

keluar :   
    int 20h
   
end mulai