<reponame>hilyafadhilah/tubes-ku1102<gh_stars>0
# -----------------------------------------------------------
# unit.py
#
# Tugas Besar Mata Kuliah Pengenalan Komputasi KU1102
# Simulasi Sistem Smart Microwave Oven
#
# Oleh: Kelompok 6 - K22
# 16520148 <NAME>
# 16520168 <NAME>
# 16520298 <NAME>
# 16520488 <NAME>
#
# Semester Ganjil TPB 2020
#
# (C) 2020 <NAME>, <NAME>,
# <NAME>, and <NAME>
# Jakarta, Indonesia
# Released under MIT License (MIT)
# -----------------------------------------------------------
# Program unit.py
#
# Spesifikasi
#   Menyimulasikan kerja unit-unit yang mengomposisi microwave
#
# Deskripsi
#   Unit-unit yang didefinisikan yaitu:
#   - Tombol input mode dan durasi
#   - Mekanisme pintu
#   - Display melalui standard output
#   - Lampu microwave
#   - Mekanisme kamar/ruang makanan
#   - Magnetron (pemancar gelombang mikro)
#   - Guide stirring fan (kipas penyebar gelombang)
#   - Mekanisme pemanasan dalam durasi tertentu
#
# Modul
#   time : menggunakan sleep() sebagai delay output
# -----------------------------------------------------------

# -----------------------------------------------------------
# 01: Inisialisasi (modul, library, dependency)
# -----------------------------------------------------------

# Modul time
# Prosedur yang digunakan
#   {void} sleep(secs : float)
from time import sleep

# -----------------------------------------------------------
# 02: Jantung program (deklarasi prosedur)
# -----------------------------------------------------------

# Prosedur print_delay()
#   Menyimulasikan display dengan menggunakan standard output.
#   Terdapat penundaan untuk menunjukkan sekuensialnya program.
# Parameter
#   {string} text : Teks yang ingin ditampilkan
# Algoritma
#   1) Tunggu selama n detik
#   2) Output
def print_delay(text):
    sleep(0.5)
    print(text)

# Prosedur print_delay()
#   Menyimulasikan input dengan menggunakan standard input.
#   Terdapat penundaan untuk menunjukkan sekuensialnya program.
# Parameter
#   {string} prompt : Pertanyaan yang ingin ditampilkan
# Algoritma
#   1) Tunggu selama n detik
#   2) Input dengan menampilkan juga prompt
def input_delay(prompt):
    sleep(0.5)
    return input(prompt)

# Prosedur buka_pintu()
#   Menunggu pengguna membuka pintu. Sekuens program akan
#   terhenti sampai pengguna membuka pintu.
# Algoritma
#   1) Meminta input membuka pintu
#   2) Jika pengguna tidak memilih membuka pintu,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih membuka pintu,
#       lanjutkan sekuens program
def buka_pintu():
    state = input_delay('Buka pintu? (n): ')
    while state != 'y':
        state = input_delay('Buka pintu? (n): ')
    print_delay('Pintu terbuka.')

# Prosedur buka_pintu()
#   Menunggu pengguna menutup pintu. Sekuens program akan
#   terhenti sampai pengguna menutup pintu.
# Algoritma
#   1) Meminta input menutup pintu
#   2) Jika pengguna tidak memilih menutup pintu,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih menutup pintu,
#       lanjutkan sekuens program
def tutup_pintu():
    state = input_delay('Tutup pintu? (n): ')
    while state != 'y':
        state = input_delay('Tutup pintu? (n): ')
    print_delay('Pintu tertutup.')

# Prosedur switch_lampu()
#   Menyalakan atau mematikan lampu
# Parameter
#   {boolean} state : permintaan keadaan
# Algoritma
#   1) Jika state adalah True, nyalakan lampu
#       jika tidak, matikan lampu
def switch_lampu(state):
    if state:
        print_delay('Lampu menyala.')
    else:
        print_delay('Lampu mati.')

# Prosedur input_makanan()
#   Meminta pengguna memasukkan makanan ke ruang microwave.
#   Apapun makanannya diizinkan, termasuk makanan kosong.
# Return
#   {string} nama makanan
# Algoritma
#   1) Minta pengguna menginput nama makanan
def input_makanan():
    return input_delay('Masukkan makanan: ')

# Prosedur has_makanan()
#   Mengecek apakah makanan tersebut ada atau kosong.
# Parameter
#   {string} food : makanan
# Return
#   {boolean} keberadaan makanan
# Algoritma
#   1) Jika makanan bukan string kosong, return True
#       jika tidak, return False
def has_makanan(food):
    return (food != '' and not food.isspace())

# Prosedur switch_makanan()
#   Menyimulasikan memasukkan/mengeluarkan makanan dengan
#   memberikan feedback terhadap keberadaan makanan di dalam
#   ruang microwave
# Parameter
#   {boolean} state : permintaan keadaan (masukkan/keluarkan)
#   {string} food : makanan
# Algoritma
#   1) Jika makanan kosong, tunjukkan
#   2) Jika makanan tidak kosong, beri feedback
#       memasukkan/mengeluarkan
def switch_makanan(state, food):
    if not has_makanan(food):
        print_delay('Microwave kosong.')
    elif state:
        print_delay(food + ' telah dimasukkan ke dalam microwave.')
    else:
        print_delay(food + ' telah dikeluarkan dari microwave.')

# Prosedur pop_makanan()
#   Meminta pengguna mengeluarkan makanan dari dalam ruang microwave.
#   Tidak menunggu seperti mekanisme pintu.
# Parameter
#   {string} food : makanan
# Return
#   {boolean} apakah pada akhirnya ada makanan/tidak di dalam ruang
# Algoritma
#   1) Jika makanan tidak kosong, minta pengguna memilih untuk
#       memasukkan atau mengeluarkan
#   2) Jika makanan kosong, tunjukkan
def pop_makanan(food):
    if has_makanan(food):
        keluarkan = input_delay('Keluarkan ' + str(food) + '? (n) ')
        return (keluarkan == 'y')
    else:
        print_delay('Tidak ada makanan untuk dikeluarkan!')
        return True

# Prosedur print_modes()
#   Mengelist mode-mode yang didukung oleh microwave
# Parameter
#   {array[]} modes : nama dan power mode-mode yang didukung
#       format [[nama =string, power =int]]
def print_modes(modes):
    print_delay('Mode yang tersedia:')
    i = 1
    for mode in modes:
        display = str(i) + ') ' + mode[0]
        print_delay(display)
        i += 1

# Prosedur input_mode()
#   Meminta pengguna memasukkan mode, sesuai mode-mode yang
#   didukung oleh sistem. Sekuens program akan terhenti
#   sampai pengguna memasukkan mode yang valid.
# Parameter
#   {array[]} modes : nama dan power mode-mode yang didukung
#       format [[nama =string, power =int]]
# Return
#   {[string, int]} array berisi nama dan power mode yang dipilih
# Algoritma
#   1) Meminta masukan mode
#   2) Jika pengguna memilih mode yang tidak valid,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih mode yang valid,
#       lanjutkan sekuens program
def input_mode(modes):
    num = input_delay('Masukkan nomor mode: ')
    while not num.isnumeric() or (int(num) < 1) or not (int(num) - 1 < len(modes)):
        print_delay('Nomor mode tidak valid!')
        num = input_delay('Masukkan nomor mode: ')
    index = int(num) - 1
    print_delay('Menggunakan mode ' + modes[index][0])
    return modes[index]

# Prosedur intpu_durasi()
#   Meminta pengguna memasukkan durasi pemanasan.
#   Sekuens program akan terhenti sampai pengguna
#   memasukkan durasi berupa angka positif.
# Return
#   {int} durasi pemanasan
# Algoritma
#   1) Meminta masukan durasi
#   2) Jika pengguna memasukkan durasi yang tidak valid,
#       kembali ke nomor (1)
#   3) Jika pengguna memasukkan durasi yang valid,
#       lanjutkan sekuens program
def input_durasi():
    durasi = input_delay('Masukkan durasi: ')
    while not durasi.isnumeric() or int(durasi) <= 0:
        print_delay('Durasi tidak valid!')
        durasi = input_delay('Masukkan durasi: ')
    print_delay('Memanaskan selama ' + durasi + ' detik')
    return int(durasi)

# Prosedur switch_magnetron()
#   Menyimulasikan pengaktifan/pendeaktifan magnetron
#   (pemancar gelombang)
#   @TODO kekuatan gelombang sesuai dengan mode yang dipilih
# Parameter
#   {boolean} state : permintaan keadaan (nyalakan/matikan)
#   {[string, int]} mode =None : array berisi nama dan power mode yang dipilih
def switch_magnetron(state, mode =None):
    if state:
        if mode is not None:
            print_delay('Magnetron menyala dengan kekuatan ' + str(mode[1]))
        else:
            print_delay('Magnetron menyala.')
    else:
        print_delay('Magnetron mati.')

# Prosedur switch_magnetron()
#   Menyimulasikan pengaktifan/pendeaktifan guide stirring fan
#   (pe<NAME>lombang)
# Parameter
#   {boolean} state : permintaan keadaan (nyalakan/matikan)
def switch_kipas(state):
    if state:
        print_delay('Kipas menyala.')
    else:
        print_delay('Kipas mati.')

# Prosedur heat()
#   Menyimulasikan proses pemanasan sesuai durasi yang diminta
# Parameter
#   {int} duration : durasi pemanasan dalam detik
# Algoritma
#   1) Inisialisasi
#   2) Tampilkan waktu yang tersisa (dalam detik)
#   3) Beri jeda satu detik
#   4) Jika pengguna menggagalkan proses, lanjut ke no. (6)
#   5) Jika waktu belum habis, kembali ke no. (1)
#   6) Finishing
def heat(duration):
    print_delay('Mulai memanaskan...')
    print_delay('Tekan Ctrl+C untuk menghentikan pemanasan.')
    try:
        for i in range(duration, -1, -1):
            if i > 0:
                print_delay(str(i) + ' s')
                sleep(1)
        pass
    except KeyboardInterrupt:
        print_delay('Pemanasan dihentikan.')
        pass
    print_delay('Selesai memanaskan...')

# Prosedur beep()
#   Menyimulasikan alarm microwave
def beep():
    print_delay('BEEP!')

# -----------------------------------------------------------
# unit.py
#
# Tugas Besar Mata Kuliah Pengenalan Komputasi KU1102
# Simulasi Sistem Smart Microwave Oven
#
# Oleh: Kelompok 6 - K22
# 16520148 <NAME>
# 16520168 <NAME>
# 16520298 <NAME>
# 16520488 <NAME>
#
# Semester Ganjil TPB 2020
#
# (C) 2020 <NAME>, <NAME>,
# <NAME>, and <NAME>
# Jakarta, Indonesia
# Released under MIT License (MIT)
# -----------------------------------------------------------
# Program unit.py
#
# Spesifikasi
#   Menyimulasikan kerja unit-unit yang mengomposisi microwave
#
# Deskripsi
#   Unit-unit yang didefinisikan yaitu:
#   - Tombol input mode dan durasi
#   - Mekanisme pintu
#   - Display melalui standard output
#   - Lampu microwave
#   - Mekanisme kamar/ruang makanan
#   - Magnetron (pemancar gelombang mikro)
#   - Guide stirring fan (kipas penyebar gelombang)
#   - Mekanisme pemanasan dalam durasi tertentu
#
# Modul
#   time : menggunakan sleep() sebagai delay output
# -----------------------------------------------------------

# -----------------------------------------------------------
# 01: Inisialisasi (modul, library, dependency)
# -----------------------------------------------------------

# Modul time
# Prosedur yang digunakan
#   {void} sleep(secs : float)
from time import sleep

# -----------------------------------------------------------
# 02: Jantung program (deklarasi prosedur)
# -----------------------------------------------------------

# Prosedur print_delay()
#   Menyimulasikan display dengan menggunakan standard output.
#   Terdapat penundaan untuk menunjukkan sekuensialnya program.
# Parameter
#   {string} text : Teks yang ingin ditampilkan
# Algoritma
#   1) Tunggu selama n detik
#   2) Output
def print_delay(text):
    sleep(0.5)
    print(text)

# Prosedur print_delay()
#   Menyimulasikan input dengan menggunakan standard input.
#   Terdapat penundaan untuk menunjukkan sekuensialnya program.
# Parameter
#   {string} prompt : Pertanyaan yang ingin ditampilkan
# Algoritma
#   1) Tunggu selama n detik
#   2) Input dengan menampilkan juga prompt
def input_delay(prompt):
    sleep(0.5)
    return input(prompt)

# Prosedur buka_pintu()
#   Menunggu pengguna membuka pintu. Sekuens program akan
#   terhenti sampai pengguna membuka pintu.
# Algoritma
#   1) Meminta input membuka pintu
#   2) Jika pengguna tidak memilih membuka pintu,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih membuka pintu,
#       lanjutkan sekuens program
def buka_pintu():
    state = input_delay('Buka pintu? (n): ')
    while state != 'y':
        state = input_delay('Buka pintu? (n): ')
    print_delay('Pintu terbuka.')

# Prosedur buka_pintu()
#   Menunggu pengguna menutup pintu. Sekuens program akan
#   terhenti sampai pengguna menutup pintu.
# Algoritma
#   1) Meminta input menutup pintu
#   2) Jika pengguna tidak memilih menutup pintu,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih menutup pintu,
#       lanjutkan sekuens program
def tutup_pintu():
    state = input_delay('Tutup pintu? (n): ')
    while state != 'y':
        state = input_delay('Tutup pintu? (n): ')
    print_delay('Pintu tertutup.')

# Prosedur switch_lampu()
#   Menyalakan atau mematikan lampu
# Parameter
#   {boolean} state : permintaan keadaan
# Algoritma
#   1) Jika state adalah True, nyalakan lampu
#       jika tidak, matikan lampu
def switch_lampu(state):
    if state:
        print_delay('Lampu menyala.')
    else:
        print_delay('Lampu mati.')

# Prosedur input_makanan()
#   Meminta pengguna memasukkan makanan ke ruang microwave.
#   Apapun makanannya diizinkan, termasuk makanan kosong.
# Return
#   {string} nama makanan
# Algoritma
#   1) Minta pengguna menginput nama makanan
def input_makanan():
    return input_delay('Masukkan makanan: ')

# Prosedur has_makanan()
#   Mengecek apakah makanan tersebut ada atau kosong.
# Parameter
#   {string} food : makanan
# Return
#   {boolean} keberadaan makanan
# Algoritma
#   1) Jika makanan bukan string kosong, return True
#       jika tidak, return False
def has_makanan(food):
    return (food != '' and not food.isspace())

# Prosedur switch_makanan()
#   Menyimulasikan memasukkan/mengeluarkan makanan dengan
#   memberikan feedback terhadap keberadaan makanan di dalam
#   ruang microwave
# Parameter
#   {boolean} state : permintaan keadaan (masukkan/keluarkan)
#   {string} food : makanan
# Algoritma
#   1) Jika makanan kosong, tunjukkan
#   2) Jika makanan tidak kosong, beri feedback
#       memasukkan/mengeluarkan
def switch_makanan(state, food):
    if not has_makanan(food):
        print_delay('Microwave kosong.')
    elif state:
        print_delay(food + ' telah dimasukkan ke dalam microwave.')
    else:
        print_delay(food + ' telah dikeluarkan dari microwave.')

# Prosedur pop_makanan()
#   Meminta pengguna mengeluarkan makanan dari dalam ruang microwave.
#   Tidak menunggu seperti mekanisme pintu.
# Parameter
#   {string} food : makanan
# Return
#   {boolean} apakah pada akhirnya ada makanan/tidak di dalam ruang
# Algoritma
#   1) Jika makanan tidak kosong, minta pengguna memilih untuk
#       memasukkan atau mengeluarkan
#   2) Jika makanan kosong, tunjukkan
def pop_makanan(food):
    if has_makanan(food):
        keluarkan = input_delay('Keluarkan ' + str(food) + '? (n) ')
        return (keluarkan == 'y')
    else:
        print_delay('Tidak ada makanan untuk dikeluarkan!')
        return True

# Prosedur print_modes()
#   Mengelist mode-mode yang didukung oleh microwave
# Parameter
#   {array[]} modes : nama dan power mode-mode yang didukung
#       format [[nama =string, power =int]]
def print_modes(modes):
    print_delay('Mode yang tersedia:')
    i = 1
    for mode in modes:
        display = str(i) + ') ' + mode[0]
        print_delay(display)
        i += 1

# Prosedur input_mode()
#   Meminta pengguna memasukkan mode, sesuai mode-mode yang
#   didukung oleh sistem. Sekuens program akan terhenti
#   sampai pengguna memasukkan mode yang valid.
# Parameter
#   {array[]} modes : nama dan power mode-mode yang didukung
#       format [[nama =string, power =int]]
# Return
#   {[string, int]} array berisi nama dan power mode yang dipilih
# Algoritma
#   1) Meminta masukan mode
#   2) Jika pengguna memilih mode yang tidak valid,
#       kembali ke nomor (1)
#   3) Jika pengguna memilih mode yang valid,
#       lanjutkan sekuens program
def input_mode(modes):
    num = input_delay('Masukkan nomor mode: ')
    while not num.isnumeric() or (int(num) < 1) or not (int(num) - 1 < len(modes)):
        print_delay('Nomor mode tidak valid!')
        num = input_delay('Masukkan nomor mode: ')
    index = int(num) - 1
    print_delay('Menggunakan mode ' + modes[index][0])
    return modes[index]

# Prosedur intpu_durasi()
#   Meminta pengguna memasukkan durasi pemanasan.
#   Sekuens program akan terhenti sampai pengguna
#   memasukkan durasi berupa angka positif.
# Return
#   {int} durasi pemanasan
# Algoritma
#   1) Meminta masukan durasi
#   2) Jika pengguna memasukkan durasi yang tidak valid,
#       kembali ke nomor (1)
#   3) Jika pengguna memasukkan durasi yang valid,
#       lanjutkan sekuens program
def input_durasi():
    durasi = input_delay('Masukkan durasi: ')
    while not durasi.isnumeric() or int(durasi) <= 0:
        print_delay('Durasi tidak valid!')
        durasi = input_delay('Masukkan durasi: ')
    print_delay('Memanaskan selama ' + durasi + ' detik')
    return int(durasi)

# Prosedur switch_magnetron()
#   Menyimulasikan pengaktifan/pendeaktifan magnetron
#   (pemancar gelombang)
#   @TODO kekuatan gelombang sesuai dengan mode yang dipilih
# Parameter
#   {boolean} state : permintaan keadaan (nyalakan/matikan)
#   {[string, int]} mode =None : array berisi nama dan power mode yang dipilih
def switch_magnetron(state, mode =None):
    if state:
        if mode is not None:
            print_delay('Magnetron menyala dengan kekuatan ' + str(mode[1]))
        else:
            print_delay('Magnetron menyala.')
    else:
        print_delay('Magnetron mati.')

# Prosedur switch_magnetron()
#   Menyimulasikan pengaktifan/pendeaktifan guide stirring fan
#   (pe<NAME>lombang)
# Parameter
#   {boolean} state : permintaan keadaan (nyalakan/matikan)
def switch_kipas(state):
    if state:
        print_delay('Kipas menyala.')
    else:
        print_delay('Kipas mati.')

# Prosedur heat()
#   Menyimulasikan proses pemanasan sesuai durasi yang diminta
# Parameter
#   {int} duration : durasi pemanasan dalam detik
# Algoritma
#   1) Inisialisasi
#   2) Tampilkan waktu yang tersisa (dalam detik)
#   3) Beri jeda satu detik
#   4) Jika pengguna menggagalkan proses, lanjut ke no. (6)
#   5) Jika waktu belum habis, kembali ke no. (1)
#   6) Finishing
def heat(duration):
    print_delay('Mulai memanaskan...')
    print_delay('Tekan Ctrl+C untuk menghentikan pemanasan.')
    try:
        for i in range(duration, -1, -1):
            if i > 0:
                print_delay(str(i) + ' s')
                sleep(1)
        pass
    except KeyboardInterrupt:
        print_delay('Pemanasan dihentikan.')
        pass
    print_delay('Selesai memanaskan...')

# Prosedur beep()
#   Menyimulasikan alarm microwave
def beep():
    print_delay('BEEP!')
# ----------------------------------------------------------- # unit.py # # Tugas Besar Mata Kuliah Pengenalan Komputasi KU1102 # Simulasi Sistem Smart Microwave Oven # # Oleh: Kelompok 6 - K22 # 16520148 <NAME> # 16520168 <NAME> # 16520298 <NAME> # 16520488 <NAME> # # Semester Ganjil TPB 2020 # # (C) 2020 <NAME>, <NAME>, # <NAME>, and <NAME> # Jakarta, Indonesia # Released under MIT License (MIT) # ----------------------------------------------------------- # Program unit.py # # Spesifikasi #   Menyimulasikan kerja unit-unit yang mengomposisi microwave # # Deskripsi #   Unit-unit yang didefinisikan yaitu: #   - Tombol input mode dan durasi #   - Mekanisme pintu #   - Display melalui standard output #   - Lampu microwave #   - Mekanisme kamar/ruang makanan #   - Magnetron (pemancar gelombang mikro) #   - Guide stirring fan (kipas penyebar gelombang) #   - Mekanisme pemanasan dalam durasi tertentu # # Modul #   time : menggunakan sleep() sebagai delay output # ----------------------------------------------------------- # ----------------------------------------------------------- # 01: Inisialisasi (modul, library, dependency) # ----------------------------------------------------------- # Modul time # Prosedur yang digunakan #   {void} sleep(secs : float) # ----------------------------------------------------------- # 02: Jantung program (deklarasi prosedur) # ----------------------------------------------------------- # Prosedur print_delay() #   Menyimulasikan display dengan menggunakan standard output. #   Terdapat penundaan untuk menunjukkan sekuensialnya program. # Parameter #   {string} text : Teks yang ingin ditampilkan # Algoritma #   1) Tunggu selama n detik #   2) Output # Prosedur print_delay() #   Menyimulasikan input dengan menggunakan standard input. #   Terdapat penundaan untuk menunjukkan sekuensialnya program. # Parameter #   {string} prompt : Pertanyaan yang ingin ditampilkan # Algoritma #   1) Tunggu selama n detik #   2) Input dengan menampilkan juga prompt # Prosedur buka_pintu() #   Menunggu pengguna membuka pintu. Sekuens program akan #   terhenti sampai pengguna membuka pintu. # Algoritma #   1) Meminta input membuka pintu #   2) Jika pengguna tidak memilih membuka pintu, #       kembali ke nomor (1) #   3) Jika pengguna memilih membuka pintu, #       lanjutkan sekuens program # Prosedur buka_pintu() #   Menunggu pengguna menutup pintu. Sekuens program akan #   terhenti sampai pengguna menutup pintu. # Algoritma #   1) Meminta input menutup pintu #   2) Jika pengguna tidak memilih menutup pintu, #       kembali ke nomor (1) #   3) Jika pengguna memilih menutup pintu, #       lanjutkan sekuens program # Prosedur switch_lampu() #   Menyalakan atau mematikan lampu # Parameter #   {boolean} state : permintaan keadaan # Algoritma #   1) Jika state adalah True, nyalakan lampu #       jika tidak, matikan lampu # Prosedur input_makanan() #   Meminta pengguna memasukkan makanan ke ruang microwave. #   Apapun makanannya diizinkan, termasuk makanan kosong. # Return #   {string} nama makanan # Algoritma #   1) Minta pengguna menginput nama makanan # Prosedur has_makanan() #   Mengecek apakah makanan tersebut ada atau kosong. # Parameter #   {string} food : makanan # Return #   {boolean} keberadaan makanan # Algoritma #   1) Jika makanan bukan string kosong, return True #       jika tidak, return False # Prosedur switch_makanan() #   Menyimulasikan memasukkan/mengeluarkan makanan dengan #   memberikan feedback terhadap keberadaan makanan di dalam #   ruang microwave # Parameter #   {boolean} state : permintaan keadaan (masukkan/keluarkan) #   {string} food : makanan # Algoritma #   1) Jika makanan kosong, tunjukkan #   2) Jika makanan tidak kosong, beri feedback #       memasukkan/mengeluarkan # Prosedur pop_makanan() #   Meminta pengguna mengeluarkan makanan dari dalam ruang microwave. #   Tidak menunggu seperti mekanisme pintu. # Parameter #   {string} food : makanan # Return #   {boolean} apakah pada akhirnya ada makanan/tidak di dalam ruang # Algoritma #   1) Jika makanan tidak kosong, minta pengguna memilih untuk #       memasukkan atau mengeluarkan #   2) Jika makanan kosong, tunjukkan # Prosedur print_modes() #   Mengelist mode-mode yang didukung oleh microwave # Parameter #   {array[]} modes : nama dan power mode-mode yang didukung #       format [[nama =string, power =int]] # Prosedur input_mode() #   Meminta pengguna memasukkan mode, sesuai mode-mode yang #   didukung oleh sistem. Sekuens program akan terhenti #   sampai pengguna memasukkan mode yang valid. # Parameter #   {array[]} modes : nama dan power mode-mode yang didukung #       format [[nama =string, power =int]] # Return #   {[string, int]} array berisi nama dan power mode yang dipilih # Algoritma #   1) Meminta masukan mode #   2) Jika pengguna memilih mode yang tidak valid, #       kembali ke nomor (1) #   3) Jika pengguna memilih mode yang valid, #       lanjutkan sekuens program # Prosedur intpu_durasi() #   Meminta pengguna memasukkan durasi pemanasan. #   Sekuens program akan terhenti sampai pengguna #   memasukkan durasi berupa angka positif. # Return #   {int} durasi pemanasan # Algoritma #   1) Meminta masukan durasi #   2) Jika pengguna memasukkan durasi yang tidak valid, #       kembali ke nomor (1) #   3) Jika pengguna memasukkan durasi yang valid, #       lanjutkan sekuens program # Prosedur switch_magnetron() #   Menyimulasikan pengaktifan/pendeaktifan magnetron #   (pemancar gelombang) #   @TODO kekuatan gelombang sesuai dengan mode yang dipilih # Parameter #   {boolean} state : permintaan keadaan (nyalakan/matikan) #   {[string, int]} mode =None : array berisi nama dan power mode yang dipilih # Prosedur switch_magnetron() #   Menyimulasikan pengaktifan/pendeaktifan guide stirring fan #   (pe<NAME>lombang) # Parameter #   {boolean} state : permintaan keadaan (nyalakan/matikan) # Prosedur heat() #   Menyimulasikan proses pemanasan sesuai durasi yang diminta # Parameter #   {int} duration : durasi pemanasan dalam detik # Algoritma #   1) Inisialisasi #   2) Tampilkan waktu yang tersisa (dalam detik) #   3) Beri jeda satu detik #   4) Jika pengguna menggagalkan proses, lanjut ke no. (6) #   5) Jika waktu belum habis, kembali ke no. (1) #   6) Finishing # Prosedur beep() #   Menyimulasikan alarm microwave