Giter VIP home page Giter VIP logo

21-ip-assignment's Introduction

21-ip-assignment

(21H07110202) Introduction to Programming 2021 Course - Assignment Repository

21-ip-assignment's People

Contributors

fitrh avatar

Stargazers

Muhammad Erwin Arif avatar

Watchers

Andi Muh. Ibnu Hibban Bagoes Malolo avatar djul avatar

21-ip-assignment's Issues

Assignment 4 - Function

1. vɪˈdʒɛsɪməl

Masyarakat Suku Maya memiliki sistem penomoran dengan basis 20 atau lebih
dikenal sebagai Vigesimal. Vigesimal direpresentasikan oleh angka 0 - 9 dan
huruf A - J dimana A - J adalah 10 - 19.

Buatlah sebuah program dengan method sebagai berikut

  • char[] toVigesimal(int n): Mengkonversi bilangan berbasis 10 ke basis 20

    Input Ouptput
    20 10
    10 A
    38 1I
    90 4A
  • void table(): Mencetak table perkalian vigesimal dengan format berikut

    Vigesimal - Wikipedia

    Dimana setiap elemennya didapatkan dengan memanfaatkan method toVigesimal

    Yang dicetak adalah 4 - I1, bagian luar (1 - J) hanya sebagai panduan

    Pada dasarnya yang dicetak adalah table perkalian 2 - 19, namun setiap hasil
    perkaliannya dikonversi ke vigesimal


2. BigInt

Tipe data integar pada bahasa pemrograman umumnya memiliki kapasitas 32-bit
signed
atau 2^32 - 1 atau sebesar 2147483647, sehingga 2147483647 + 1 pada tipe
data integer akan menghasilkan hasil yang keliru berdasarkan aritmatika
penjumlahan.

Bahasa pemrograman Java menyediakan class java.math.BigInteger untuk
melakukan operasi aritmatika terhadap angka yang terlalu besar untuk tipe data
integer.

Buatlah sebuh program dengan method sebagai berikut

  • int[] add(int[] a, int[] b): Menjumlahkan 2 buah angka besar, dimana angka
    tersebut direpresentasikan sebagai array e.g. 2147483647 direpresentasikan
    sebagai {2, 1, 4, 7, 4, 8, 3, 6, 4, 7}.

    Contoh:

    • add({2, 1, 4, 7, 4, 8, 3, 6, 4, 7}, {1})
      mengembalikan {2, 1, 4, 7, 4, 8, 3, 6, 4, 8}

    • add({2, 1, 4, 7, 4, 8, 3, 6, 4, 7}, {2, 1, 4, 7, 4, 8, 3, 6, 4, 7})
      mengembalikan {4, 2, 9, 4, 9, 6, 7, 2, 9, 4}

  • char[] humanFormat(int[] nums): Menkonversi array integer kedalam human
    readable format
    yang dipisahkan oleh dot(.)

    Contoh:

    humanFormat({2, 1, 4, 7, 4, 8, 3, 6, 4, 8})
    mengembalikan {'4', '.', '2', '9', '4', '.', '9', '6', '7', '.', '2', '9', '4'}
    karena 4294967294 bisa diformat sebagai 4.294.967.294

  • char[] humanFormat(int[] nums, char sep): Sama seperti method sebelumnya,
    hanya saja method ini bisa menspesifikkan separator yang digunakan

    Contoh:

    humanFormat({2, 1, 4, 7, 4, 8, 3, 6, 4, 8}, '_')
    mengembalikan {'4', '_', '2', '9', '4', '_', '9', '6', '7', '_', '2', '9', '4'}
    atau 4294967294 yang diformat sebagai 4_294_967_294

  • void print(int[] nums): Mencatak array integer kedalam format angka

    Contoh:

    print({1, 3, 4, 4}) mencetak 1344

  • void print(char[] c): Sama seperti method sebelumnya, hanya saja parameter
    yang digunakan adalah char[]

    Conotoh:

    print({'4', '.', '2', '9', '4', '.', '9', '6', '7', '.', '2', '9', '4'})
    mencetak 4.294.967.294


Program pada tugas ini hanya menggnakan tipe data primitif dan array primitif

Method pada Placeholder Code yang disediakan tidak dirubah return type,
method name, signature dan JavaDoc-nya, silakan lengkapi body method
dan mengganti return valuenya

Placeholder Code tidak menyediakan main method, silakan tambahkan main method untuk keperluan testing, kode yang dipush tidak mengandung main method

Assignment 5 - String Manipulation

String Manupulation - Material.pdf

1. URI Percent Parser

URL-encoding merupakan mekanisme untuk mengubah beberapa karakter khusus kedalam
format % diikuti dengan representasi hexadecimal ASCII-nya, tujuannya adalah
keamanan komunikasi data dan standarisasi karakter yang digunakan pada URL.

Berikut adalah table Reserved Characters dan Unsasfe Characters yang digunakan
pada URL-encoding

Reserved Characters

Character URL-encode
$ %24
& %26
+ %2b
, %2c
/ %2f
: %3a
; %3b
= %3d
? %3f
@ %40

Unsasfe Characters

Character URL-encode
space %20
" %22
< %3c
> %3e
# %23
% %25
{ %7b
} %7d
\ %5c
^ %5e
~ %7e
[ %5b
] %5d
` %60

Berdasarkan table diatas, buatlah sebuh perogram dengan method berikut:

  • String encode(String rawUrl): Melakukan peroses percent-encoding terhadap
    rawUrl
    contoh
    encode("https://github.com/syssrc/21-ip-assignment")
    menghasilkan https%3A%2F%2Fgithub.com%2Fsyssrc%2F21-ip-assignment

  • String decode(String encodedUrl): Kebalikan dari method diatas


2. Vocab Classroom

Pada kelas English vocabulary, anda belajar membentuk kata dengan menambahkan
prefixes dan suffixes, pada kelas ini, anda diberikan tugas untuk mengubah
kumpulan kata, berikut adalah deskripsi tugasnya:

Add a prefix to a word: String addPrefixUn(String word)

Salah satu prefix umum dalama bahasa Inggris adalah un, yang berarti not.
Pada tugas ini, buatlah method yang menambahkan prefix un kedalam sebuah kata.

Contoh

addPrefixUn("happy")
unhappy
addPrefixUn("manageable")
unmanageable

Prefixes word groups: String prefixes(String prefix, Sring... groups)

Pada kelas ini, anda belajar beberapa suffix umum:

  • en (yang sama artinya dengan 'put into' atau 'cover with'),
  • pre (yang berarti 'before' atau 'forward'),
  • auto (yang berarti 'self' atau 'same'),
  • inter (yang berarti 'between' atau 'among').

Pada tugas ini, anda diharapakan untuk membuat method yang menambahkan prefix
kedalam setiap kata didalam groups dengan format berikut:

prefix :: prefixkata_1 :: prefixkata_2 :: ... :: prefixkata_n

Contoh

prefixes("en", "close", "joy", "lighten")
en :: enclose :: enjoy :: enlighten
prefixes("pre", "serve", "dispose", "position")
pre :: preserve :: predispose :: preposition
prefixes("auto", "didactic", "graph", "mate")
auto :: autodidactic :: autograph :: automate
prefixes("inter", "twine", "connected", "dependent")
inter :: intertwine :: interconnected :: interdependent

Remove ness suffix from a word: String removeSuffixNess(String word)

ness adalah suffix yang umum digunakan utuk mengungkapkan 'state of being'.
Pada tugas ini, anda diminta untuk menemukan akar kata dengan menghilangkan
suffix ness.

Namu karena aturan pengejaan: Jika akar kata diakhiri oleh konsonan lalu diikuti
oleh y, maka y diganti menjadi i, menghapus ness berarti mengembalikan y
pada akar katanya. e.g. happiness --> happi --> happy.

Contoh

removeSuffixNess("heaviness")
heavy
removeSuffixNess("sadness")
sad

Noun to Verb: String nounToVerb(String sentence, int index)

Salah satu praktik umum penggunaan suffix dalam bahasa Inggris adalah
verbing atau verbifying -- dimana kata sifat menjadi kata kerja dengan
menambahkan suffix en.

Pada tugas ini, anda akan berlatih "verbing" dengan mengekstark kata sifat
dari sebuah kalimat dan mengubahnya menjadi kata kerja.

Diberikan sebuah method nounToVerb(sentence, index), sentence dipecah menjadi
kosa kata, dan index menunjukkan kata keberepa yang diverbing, index -1
berarti kata terakhir. Method ini mengembalikan kata kerja yang diekstrak dalam
bentung verbing.

Contoh

nounToVerb("I need to make that bright.", -1 )
brighten
nounToVerb("It got dark as the sun set.", 2)
darken

3. Ff for Fizz, Bb for Buzz

Buatlah sebuah program yang menerima inputan String s termasuk spasi, jika
terdapat karakter F atau f pada s, maka cetak Fizz sebanyak jumlah
karakter Ff, jika terdapat karakter B atau b, maka cetak Buzz
sebanyak jumlah karakter Bb, jika terdapat keduanya maka cetak Fizz sebanyak
jumlah karakter Ff dan Buzz sebanyak jumlah karakter Bb, dengan syarat,
Fizz selalu dicetak terlebih dahulu sebelum Buzz dan tidak ada spasi diantarnya,
jika tidak, maka cetak kembali s yang di input.

Karena kalian telah belajar String Manupulation, pada tugas ini,
penentuan banyaknya Ff dan Bb tidak mennggunakan perulangan.

Contoh

Input Output
FFFffBBffbbB FizzFizzFizzFizzFizzFizzFizzBuzzBuzzBuzzBuzzBuzz
Abdallah Buzz
Mas Mukhtar Mas Mukhtar
Bang Marfi FizzBuzz

Assignment 6 - Collection

Collection - Material.pdf

1. Template Parser

new String("The {alpha} {do} over the {animal}\n")
        .concat("and feels as if {who} where in {where}\n")
        .concat("of typography together with {with}.\n");

String diatas merupakan sebuah template dan setiap kata yang diapit oleh
curly braces ({}) adalah placeholder, placeholder setelah proses parsing
akan digantikan oleh nilai dari data yang memiliki identifier atau nama
variabel yang sama dengan placeholder tersebut tanpa curly braces, e.g.
{alpha} akan digantikan oleh nilai dari variabel alpha.

Buatlah sebuah program untuk melakukan template parsing dengan method
berikut:

  • List<String> parse(String template, Map<String, String> data)
    Memparsing template dan mengganti semua placeholder yang ada dengan
    nilai dari data yang sesuai, jika ada placeholder yang tidak ada didalam
    data, maka placeholder tersebut dibiarkan apa adanya. template
    dikembalikan sebagai List<String> dimana setiap elemennya merupakan hasil
    split template berdasarkan new line (\n)

  • void render(List<String> string)
    Mencetak perbaris hasil dari method parse

Contoh

Jika diberikan main method berikut

public static void main(String[] args) {
    String template = new String("The {alpha} {do} over the {animal}\n")
            .concat("and feels as if {who} where in {where}\n")
            .concat("of typography together with {with}.\n");

    Map<String, String> data = new HashMap<>();
    data.put("with", "Hermann Zapf");
    data.put("do", "jumps");
    data.put("alpha", "quick brown fox");
    data.put("animal", "lazy dog");
    data.put("where", "the seventh heaven");
    data.put("who", "he");

    render(parse(template, data));
}

Program akan menghasilkan output berikut

The quick brown fox jumps over the lazy dog
and feels as if he where in the seventh heaven
of typography together with Hermann Zapf.

2. Data Manipulation Language

Dalam Relational Database Management System, Data Manipulation Language (DML)
merupakan perintah-perintah yang digunakan untuk memanipulasi struktur data
di dalam database, 2 diantaranya adalah INSERT dan SELECT.

Buatlah sebuah program yang mensimulasikan proses INSERT dan SELECT
sederhana dengan method berikut

Placeholder file dari tugas ini hanya mendefinisikan method beserta
return type tanpa method signature (parameter)
Lengkapi method signature yang dibutuhkan sesuai deskripsi method dan
main method dibawah

  • Map<String, String> insert(/* signatures */)
    Merupakan simulasi dari perintah INSERT, perintah INSERT memiliki
    sintaks: INSERT INTO <table_name> <column(s)> VALUES (value(s)).
    Pada program ini, <table_name> direpresentasikan oleh List<Map<String, String>>
    sedangkan column(s) merupakan String dengan setiap kolomnya dipisahkan
    oleh koma (,), e.g. "id,name,address" berarti 3 kolom (id, name,
    address) dan value(s) memiliki format yang sama dengan column(s) dimana
    setiap nilainya dipasangkan tepat 1 dengan kolom pada column(s), e.g.
    "01,Fitrah,Maros" berarti id=01, name=Fitrah, dan address=Maros, hal
    ini berarti jumlah column(s) = jumlah value(s), jika jumlahnya tidak sama,
    program akan menghasilakn IllegalArgumentException

    // student merupkan <table_name>
    List<Map<String, String>> student = new ArrayList<>();
    
    // Ketiga sintaks dibawah ini valid
    // column(s) selalu menjadi lower case dan tanpa spasi
    // value(s) disimpan apa adanya namun tanpa spasi
    student.add(insert("id,first_name,last_name", "H071171504, Rabia, Adaw"));
    // spasi pada sintaks ini dihilangkan oleh method insert
    student.add(insert("id, first_name, last_name", "H071171512,Fitrah,M"));
    // UPPER CASE pada sintaks ini diganti menjadi lower case oleh method insert
    student.add(insert("ID, FIRST_NAME, LAST_NAME", "H071171510, Amalia, Dwi"));
    
    // Baris berikut menghasilkan IllegalArgumentException
    // student.add(insert("id,first_name, last_name", "H071171308,Babang,Arizk,Male"));
  • List<String> select(/* signatures */)
    Merupakan simulasi dari perintah SELECT, printah SELECT memiliki
    sintaks: SELECT <column(s)> from <table_name>.
    Pada program ini, column(s) merupakan String variadic arguments,
    <table_name> sama dengan yang ada pada method insert dan mengembalikan
    List<String> yang berisi nama kolom dan data dari setiap kolomnya dipisahkan
    oleh semi colon (;), jika ada kolom pada column(s) yang tidak terdapat didalam
    <table_name>, kolom tersebut diisi oleh nilai "NONE"

    Contoh

    // dengan asumsi baris berikut merupakan lanjutan potongan program
    // pada deskripsi method insert
    
    select(student, "first_name", "last_name").forEach(System.out::println);

    menghasilkan

    first_name;last_name
    Fitrah;M
    Amalia;Dwi
    Rabia;Adaw

    select(student, "first_name", "i").forEach(System.out::println);

    menghasilkan

    first_name;i
    Fitrah;NONE
    Amalia;NONE
    Rabia;NONE
  • void prettify(List<String> strings)
    Mencetak hasil dari method select dengan format

    • Tabel, semi colon dari select dihilangkan
    • Rata kanan sesuai elemen terpanjang
    • Setiap kolom terdapat 1 spasi di awal dan akhir
    • Nama kolom dicetak UPPER CASE
    • Baris pertama (nama kolom) dan baris terakhir memiliki separator (-)
    • separator memiliki panjang = (panjang baris) - 2
    • separator rata tengah

    Contoh

    // dengan asumsi baris berikut merupakan lanjutan potongan program
    // pada deskripsi method insert
    prettify(select(student, "id", "first_name", "last_name"));

    menghasilkan

    | ID         | FIRST_NAME | LAST_NAME  |
     --------------------------------------
    | H071171512 | Fitrah     | M          |
    | H071171510 | Amalia     | Dwi        |
    | H071171504 | Rabia      | Adaw       |
     --------------------------------------

    prettify(select(student, "id", "address", "first_name", "last_name"));

    menghasilkan

    | ID         | ADDRESS    | FIRST_NAME | LAST_NAME  |
     ---------------------------------------------------
    | H071171512 | NONE       | Fitrah     | M          |
    | H071171510 | NONE       | Amalia     | Dwi        |
    | H071171504 | NONE       | Rabia      | Adaw       |
     ---------------------------------------------------

main method berikut

public static void main(String[] args) {
    List<Map<String, String>> student = new ArrayList<>();

    student.add(insert("id, first_name, last_name, gender", "H071171512, Fitrah, Muhammad, Male"));
    student.add(insert("id, first_name, last_name, gender", "H071171510, Amalia, Dwi, Female"));
    student.add(insert("id,first_name,last_name,gender", "H071171504, Rabia,Adaw,Female"));
    student.add(insert("id,first_name, last_name, gender", "H071171308,Babang,Arizk,Male"));

    select(student, "first_name", "last_name", "i").forEach(System.out::println);
    System.out.println();
    prettify(select(student, "id", "first_name", "last_name", "gender"));

}

Menghasilakan output berikut

first_name;last_name;i
Fitrah;Muhammad;NONE
Amalia;Dwi;NONE
Rabia;Adaw;NONE
Babang;Arizk;NONE

| ID         | FIRST_NAME | LAST_NAME  | GENDER     |
 ---------------------------------------------------
| H071171512 | Fitrah     | Muhammad   | Male       |
| H071171510 | Amalia     | Dwi        | Female     |
| H071171504 | Rabia      | Adaw       | Female     |
| H071171308 | Babang     | Arizk      | Male       |
 ---------------------------------------------------

Assignment 2 - Looping

1. Matrix with Pad

  • Terdapat 3 variable integer sebagai input yaitu start, end dan size
  • 3 variable tersebut merupakan bilangan positif atau 0
  • Berdesarkan 3 variable tersebut, buatlah looping yang menghasilkan pola
    berikut:
    • Cetak angka dari start sampai end, jika start == end, cetak angka tersebut

    • Setiap baris terdiri dari size angka, jika size == 0, cetak 1 angka perbaris

    • Setiap angka dipisahkan oleh 1 spasi kecuali angka terakhir dalam 1 baris

    • Setelah mencetak sebanyak size, cetak baris baru

      1<space>2<space>3<newline>
      4<space>5<space>6<newline>
      8<space>7<space>9<newline>
    • Setiap angka dicetak rata kanan berdasarkan nilai terbesar dalam range

    • Setiap angka dicetak dengan leading zero sesuai nilai terbesar dalam range

Untuk lebih jelasnya, silakan perhatikan contoh berikut

Contoh Input 1

1 10 4

Contoh Output 1

01 02 03 04
05 06 07 08
09 10

Contoh Input 2

100 90 7

Contoh Output 2

100 099 098 096 094 095 094
093 092 091 090

Contoh Input 3

0 100 10

Contoh Output 3

000 001 002 003 004 005 006 007 008 009
010 011 012 013 014 015 016 017 018 019
020 021 022 023 024 025 026 027 028 029
030 031 032 033 034 035 036 037 038 039
040 041 042 043 044 045 046 047 048 049
050 051 052 053 054 055 056 057 058 059
060 061 062 063 064 065 066 067 068 069
070 071 072 073 074 075 076 077 078 079
080 081 082 083 084 085 086 087 088 089
090 091 092 093 094 095 096 097 098 099
100

Contoh Input 4

10 10 0

Contoh Output 3

10

hint: System.out.printf("%03d", 1); akan mengasilkan 001


2. Factorial

  • Inputan berupa integer n, dimana n >= 0
  • Cetak faktorial dari n dengan pola seperti pada contoh

Contoh Input 1

10

Contoh Output 1

10! = 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 3628800

Contoh Input 2

0

Contoh Output 2

0! = 1

3. Eyes

  • Inputan berupa integer n dimana n > 0
  • Cetak matriks identitas dengan ukuran n x n
  • Setiap elemen dipisahkan oleh 1 spasi kecuali elemen terakhir dalam 1 baris
  • Setelah mencetak sebanyak n elemen, cetak baris baru

Contoh Input

5

Contoh Output

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

Semua soal dikerjakan menggunakan konsep perulangan dan materi sebelumnya

Tidk ada penggunaan array atau materi yang lebih advance dari perulangan

Assignment 3 - Array

1. Count Each

Jika diberikan deretan angka [1, 2, 3, 1, 5, 0, 7, 8, 2] maka anda dapat dengan
mudahnya menentukan bawa terdapat 2 angka 1, 2 angka 2, dan 1
angka yang lainnya. Buatlah sebuah program yang menerima inputan integer N,
dimana N adalah banyaknya inputan integer selanjutnya.

Kemudian tentukan berapa banyak masing-masing angka yang diinput tanpa mengurutkannya.

Program yang anda buat hanya boleh menggunakan tipe data integer atau array integer.

Contoh Input :

10
1 3 4 5 3 2 2 8 9 1

Contoh Output :

2 Angka 1
2 Angka 3
1 Angka 4
1 Angka 5
2 Angka 2
1 Angka 8
1 Angka 9

Contoh Input :

10
0 1 0 1 0 1 0 1 0 10000

Contoh Output :

5 Angka 0
4 Angka 1
1 Angka 10000

2. Radix

Dalam konteks Position Numeral System, Radix atau basis merupakan digit
unik, termasuk nol, untuk merepresentasikan angka, contohnya adalah Decimal
System
yang kita gunakan sehari-hari, sistem ini menggunakan radix 10 yaitu 0 - 9.

Buatlah sebuah program dengan memanfaatkan array, yang menerima sebuah inputan
integer kemudian konversi bilangan integer tersebut ke basis 2 (biner),
8 (octal), dan 16 (hexa), hasil konversinya dicetak dengan 8 zero pad.

Kode program ini hanya terdapat variable integer, char, array integer dan array
char dan tidak menggunakan String Formatter atauput Format Specifier kecuali
untuk menghasilkan zero pad.

Contoh Input :

123

Contoh Output :

base  2: 01111011
base  8: 00000173
base 16: 0000007B

Contoh Input :

255

Contoh Output :

base  2: 11111111
base  8: 00000377
base 16: 000000FF

Contoh Input :

16

Contoh Output :

base  2: 00010000
base  8: 00000020
base 16: 00000010

3. Sum One Third

int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
int sum = 0;
for (int i = 0; i < arr.length; i++) {
    sum += arr[i];
}

Diatas adalah potongan program untuk menghitung hasil penjumlahan dari elemen
sebuah array. Lengkapi kode berikut, sehingga kode berikut dapat menghitung
hasil penjumlahan elemen sebuah array dengan menggunakan ⅓ dari panjang array.

Program ini tidak menerima inputan, array dinyatakan didalam program sebagai
array integer.

int sumWithOneThirdLength = 0;
for (int i = 0; i < arr.length / 3; i++) {
    // Your Magic is Here
}

Kemudian cetak urutan elemen yang dijumlahkan beserta hasilnya disetiap proses
penjumlahan degan format rata kanan berdasarkan bilangan terbesar, lalu setelah
selesai, cetak hasil akhirnya berdasarkan contoh.

Contoh :

jika arr adalah { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, maka
Output program sebagai berikut

 1 +  6 + 11 = 18
 2 +  7 + 12 = 21
 3 +  8 + 13 = 24
 4 +  9 + 14 = 27
 5 + 10 + 15 = 30

Sum of [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15] = 120

Penjelasan :

Karena pada contoh arr panjangnya adalah 15, dan 1/3 dari 15 adalah 5, maka
hanya butuh 5 perulangan untuk mendapatkan hasil penjumlahan array

Contoh :

arr adalah { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }

Output :

 1 +  6 + 11 = 18
 2 +  7 + 12 = 21
 3 +  8 + 13 = 24
 4 +  9 + 14 = 27
 5 + 10 + 15 = 30
16 + 17 = 33

Sum of [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17] = 153

Contoh :

arr adalah { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

Output :

1 + 4 + 7 = 12
2 + 5 + 8 = 15
3 + 6 + 9 = 18

Sum of [1][2][3][4][5][6][7][8][9] = 45
  • Tidak ada penggunaan nested loop pada soal ini
  • Proses menghitung jumlah total tiap 3 elemen, mencetak tiap 3 elemen, dan
    menghitung jumlah total keseluruhan terjadi dialam perulangan yang sama
  • arr tidak selalu terurut e.g. arr = {10, 9, 0, 99, 1000, 876};

Tidak ada penggunaan java.uti.Arrays dan string method pada soal-soal diatas

Assignment 1 - Variable, Standard IO Stream, Conditional Branching, and Exception Handling

1. Simple Cashier

Ringkasan

SysMart membutuhkan bantuan anda sebagi programmer untuk merancang sebuah
aplikasi kasir CLI (Command Line Interface) untuk memvalidasi dan menghitung
banyaknya kembalian dari pembayaran yang diberikan, tidak hanya itu, SysMart
juga menginginkan program tersebut agar dapat menghitung banyaknya kembalian
untuk setiap pecahan uang yang mereka miliki.

Mereka memiliki pecahan:

  • 100.000
  • 50.000
  • 20.000
  • 10.000
  • 5.000
  • 2.000
  • 1.000
  • 500
  • 200
  • 100

SysMart menggunakan satuan lembar untuk uang pecahan 1.000 keatas dan
buah untuk pecahan 500 kebawah.

Jika pelanggan membayarkan sejumlah uang dan kembaliannya ada diluar pecahan
tersebut, SysMart menganggapnya sebagai donasi.

Bantulah SysMart untuk merancang aplikasi tersebut, berikut spesifikasi
lengkap dan referensi programnya.

Spesifikasi

  1. Program menerima inputan berupa integer
  2. Jika pembeli memasukkan selain integer, program akan interupsi lalu berhenti
  3. Jika tidak ada kembalian, program akan meyampaikan bahwa pembayaran yang
    dilakukan menggunakan uang pas lalu berhenti
  4. Jika uang yang dibayarkan tidak cukup, program akan menyampaikan bahwa uang
    pembeli belum cukup, lalu berhenti
  5. Program menampilkan total kembalian diikuti dengan banyaknya masing-masing
    pecahan yang disediakan
  6. Program hanya menampilkan pecahan yang digunakan sebagai kembalian, e.g. Jika
    harga barang 135.000, pembeli membayar sebesar 150.000, kembalian sebesar
    15.000, maka program hanya menampilkan banyaknya pecahan 10.000 dan 5.000
  7. Jika masih ada kembalian dibawah 100, maka program akan menampilkan kembalian
    tersebut sebagai donasi

Referensi

simplescreenrecorder-2021-10-15_21.08.36.mp4

2. Role Base Access Control

Lengkapilah potongan program barikut

public class RoleB {

    public static void main(String[] args) {

        int menuIndex = 0;
        int subMenuIndex = 0;
        boolean isValidRole = false;

        if (args.length == 0) {
            System.out.println("What role you want to see ?");
            System.out.println("For example, try 'Admin'.");
            return;
        }

        if (args.length > 1) {
            System.out.println("Too many argument");
            return;
        }
        
        /*
         * Your magic is here
         * Role validation
         * /

        if (/* Magic ? */) {
            System.out.println("Invalid Role");
            System.out.println("Valid Role : Super Admin, Admin, User");
            return;
        }
        
        /*
         * Another magic
         * Main menu
         * /
    }
}

Sehingga menghasilkan output berikut (Klik untuk play)

asciicast

Dengan Ketentuan

  • Tidak ada varaiabel tambahan selain variabel yang telah disediakan
  • Gunakan args[0] sebagai variabel pengecekan Role
  • Variable isValidRole harus digunakan
  • Tidak ada penggunaan string method
  • Index menu dan sub menu bersifat dinamis (sesuai Role) yang merupakan hasil dari
    variabel indexMenu dan indexSubmenu
  • Tidak ada duplikasi dalam menampilkan menu masing-masing Role
if (args[0] == "Admin") {
    System.out.printf("%d. Admin\n", menuIndex);
    System.out.printf("%2d.%d. CRUD Admin\n", menuIndex, subMenuIndex);
    System.out.printf("%2d.%d. CRUD User\n\n", menuIndex, subMenuIndex);
    System.out.printf("%d. User\n", menuIndex); // Duplikasi, bagian ini hanya boleh terdapat dibagian User
    System.out.printf("%2d.%d. View\n", menuIndex, subMenuIndex); // Duplikasi, bagian ini hanya boleh terdapat dibagian User
    System.out.printf("%2d.%d. Edit\n", menuIndex, subMenuIndex); // Duplikasi, bagian ini hanya boleh terdapat dibagian User
} else if (args[0] == "User") {
    System.out.printf("%d. User\n", menuIndex);
    System.out.printf("%2d.%d. View\n", menuIndex, subMenuIndex);
    System.out.printf("%2d.%d. Edit\n", menuIndex, subMenuIndex);
}
  • Diatas merupakan contoh duplikasi, dimana role Admin menampilkan menu User dalam pengecekan kondisinya
  • Setiap Role hanya menampilkan menu untuk Role tersebut dialam blok pengecekannya
  • Ketentuan menu masing-masing Role
    • Super Admin dapat melihat menu untuk Admin dan User
    • Admin dapat melihat menu untuk User tapi tidak dapat melihat menu Super Admin
    • User hanya dapat melihat menu User

Untuk lebih jelasnya, silahkan perhatikan bagian output

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.