Wednesday, March 13, 2024

Belajar Pemrograman Bab 4 -- Statement Penentu Keputusan

Bismillahirahmanirrahim.

Tulisan ini diambil dari Laporan saya di kelas Pemrograman kursus Teknoplasma

  • Nama: Muhammad Dimas Akbar
  • Distro: Kubuntu 22.04 LTS
  • Provinsi: Jawa Barat
  • Tanggal: Kamis, 29 Februari 2024
  • Pertemuan berapa: 19
  • Pengajar: Ade Malsasa Akbar

 
 Tulisan ini dapat diambil dalam bentuk [PDF] dan [Writer]




Program-1.c





/* Nama File : IF-ELSE1.C */

#include <stdio.h>

int main ()
{
  int bil,absolut;

  printf("Masukkan bilangan bulat: ");
  scanf("%d", &bil);

  if (bil < 0) absolut = -bil;

  printf("Nilai absolut dari %d adalah = %d", bil, absolut);


  getchar ();

  return 0;
}


/* Analisis Program 1 Bab 4
 * Deskripsi : Mengerjakan algoritma
 * baris 6 : tipe data integer tidak mengenal bilangan pecahan
 * baris 8 : deklarasi variabel
 * baris 11 : input > menyimpan > disimpan di variabel bil
 * baris 13 : evaluasi kebenaran, apakah benar nilai bil kurang dari 0, lalu jika benar, jalankan baris 14, lalu jika salah, lompati dan jalankan baris 17
 * baris 14 : kalau output absolut bernilai 0, itu karena absolut di baris 8 belum diberi nilai
 * baris 17 : output mencetak nilai variabel absolut
 */



Program-2.c






/* Nama File : IF-ELSE2.C */

#include <stdio.h>

int main ()
{
  int pembilang, penyebut, sisa;

  printf("Masukkan pembilang : ");
  scanf("%d", &pembilang);
  printf("Masukkan penyebut : ");
  scanf("%d", &penyebut);

  sisa = pembilang % penyebut;

  puts("");
  if(sisa)
  printf("%d tidak habis dibagi %d\n", pembilang, penyebut);
  else
  printf("%d habis dibagi %d\n", pembilang, penyebut);


  getchar ();

  return 0;
}


/* Output
 * Masukkan pembilang : 12
Masukkan penyebut : 4

12 habis dibagi 4 // artinya modulusnya 0


------------------
(program exited with code: 0)
Press return to continue

12 % 4 : 12 / 3 = 4 , 4 * 3 = 12, 12 - 12 = 0
*/

/*
 * Masukkan pembilang : 12
Masukkan penyebut : 5

12 tidak habis dibagi 5 //modulusnya 2


------------------
(program exited with code: 0)
Press return to continue

12 % 5 : 12 / 5 = 2, 2 * 5 = 10, 12 - 10 = 2
 */

/* Analisis Program 2 Bab 4
 * Deskripsi : Ganjil Genap
 * baris 14 : perhitungan pembilang modulus penyebut disimpan di variabel sisa
 * baris 18 : evaluasi kebenaran (benar), jika hasil sisa tidak sama dengan 0, printf mencetak tidak habis dibagi
 * baris 20 : evaluasi kebenaran (salah), jika hasil sisa sama dengan 0, printf mencetak habis dibagi
 * baris 21 : hasil 0 itu false, hasil selain 0 itu true
 */

Program-3.c






/* Nama File : IF-ELSE3.C */

#include <stdio.h>

int main ()
{
  char c;

  printf("Masukkan suatu karakter : "); scanf("%c", &c);

  if(c>='a' && c<='z')
  printf("\nKarakter tersebut termasuk huruf kecil.\n");
  else
  printf("\nKarakter tersebut bukan huruf kecil.\n");

  getchar ();

  return 0;
}

/* Analisis Program 3 Bab 4
 * Deskripsi : Tabel ASCII
 * baris 7 : char adalah tipe data ascii
 * baris 11 : evaluasi kebenaran, jika input variabel c adalah karakter a sampai z (benar), lompat ke baris 12, jika input diluar karakter a sampai z (salah) maka lompat ke baris 14
 */



Program-4.c





/* Nama File : IF-ELSE4.C */

#include <stdio.h>

int main ()
{
  int i=0, hasil=1;

  ulang:

  i++;
  hasil*=2;

  printf("Iterasi ke %2d: %5d\n", i, hasil);

  if(i<10) goto ulang;

  getchar ();

  return 0;
}
/* Analisis program 4 Bab 4
 * Deskripsi : Goto
 * baris 9 : ulang adalah label
 * baris 11 : pertambahan 1 angka dimulai dari 0, nilai i disini adalah 2
 * baris 16 : gunakan spreadsheet, jika nilai i masih kurang dari 10, maka kembali ke baris 11, jika nilai i sudah sampai 10 maka return 0;
* nilai variabel
var i    var hasil
1      2
2      4
3      8
4      16
5      32
6      64
7      128
8      256
9      512
10    1024
*/



Program-5.c






/* Nama File : IF-ELSE5.C */

#include <stdio.h>

int main ()
{
  char tag;

  printf("Masukkan tipe tag (2 / 4) : "); scanf("%c", &tag);
  if(tag=='2') {
    printf("Merek sepeda motor bertipe 2 tag\n\n");
    printf("  1. YA MAHA");
    printf("  2. YA SUZUKI");
    printf("  3. YA HONDA");
  } else {
    printf("Merk sepeda motor bertipe 4 tag\n\n");
    printf("  1. HONDA");
    printf("  2. SUZUKI");
    printf("  3. YAMAHA");
  }

  getchar ();

  return 0;
}


/* Analisis Program 5 Bab 4
 * baris 10 : evaluasi kebenaran, apakah benar variabel tag = karakter 2, jika benar maka jalankan baris 11 - 14
 * baris 15 : evaluasi kebenaran, jika input karakter variabel tag 4, maka jalankan baris 16 - 19
 * baris 20 : evaluasi kebenaran, jika semua input diatas salah, maka jalankan baris 21
 * baris 23 : jika memasukkan karakter selain 2, maka akan masuk ke else
 */

 

Program-6.c









/* Nama File : IF-ELSE6.C */

#include <stdio.h>

int main ()
{
  int valid_operator = 1;
  char operator;
  float bil1, bil2, hasil;

  printf("Masukkan 2 bilangan dan sebuah operator.\n\n");
  printf("Dengan format:\n\n");
  printf("=bilangan-1 operator bilangan-2\n\n");
  printf("= ");

  scanf("%f %c %f", &bil1, &operator, &bil2);

  if(operator == '*') {
    hasil = bil1 * bil2;
  } else if (operator == '/')
  hasil = bil1 / bil2;
  else if (operator == '+')
  hasil = bil1 + bil2;
  else if (operator == '-')
  hasil = bil1 - bil2;
  else
  valid_operator = 0;

  if(valid_operator) {
    printf("\nHasil perhitungan\n\n");
    printf("%g %c %g = %g\n",bil1,operator,bil2,hasil);
  } else {
    printf("\nOperator SALAH!\n");
    printf("\nGunakan operator +, -, / dan * saja!");
  }


  getchar ();

  return 0;
}





/* Analisis Program 6 Bab 4
* Deskripsi : Kalkulator
 * Baris 7 : deklarasi variabel (1 adalah true)
 * Baris 18 : evaluasi kebenaran, jika benar variabel operator bernilai *, maka jalankan perkalian
 * Baris 19 : perkalian variabel bil1 dan bil2 disimpan di variabel hasil
 * Baris 20 : evaluasi kebenaran, jika benar variabel operator bernilai /, maka jalankan pembagian
 * Baris 21 : pembagian variabel bil1 dan bil2 disimpan di variabel hasil
 * Baris 22 : evaluasi kebenaran, jika benar variabel operator bernilai +, maka jalankan penjumlahan
 * Baris 23 : penjumlahan variabel bil1 dan bil2 disimpan di variabel hasil
 * Baris 24 : evaluasi kebenaran, jika benar variabel operator bernilai -, maka jalankan pengurangan
* Baris 25 : pengurangan variabel bil1 dan bil2 disimpan di variabel hasil
 * Baris 26 : evaluasi kebenaran, jika semua input diatas salah, maka jalankan baris 27
 * Baris 27 : deklarasi variabel (0 adalah FALSE)
 * Baris 29 : evaluasi kebenaran, jika valid operator bernilai true (selain 0), maka jalankan baris 30-31
 * Baris 32 : evaluasi kebenaran, jika valid operator bernilai false ( = 0), maka jalankan baris 33-34
 */



Program-7.c









/* Nama File : IF-ELSE7.C */

#include <stdio.h>

int main ()
{
  int valid_operator = 1;
  char operator;
  float bil1, bil2, hasil;

  printf("Masukkan 2 bilangan dan sebuah operator. \n\n");
  printf("Dengan format: \n\n");
  printf("= bilangan-1 operator bilangan-2\n\n");
  printf("= ");

  scanf("%f %c %f", &bil1, &operator, &bil2);

  switch(operator) {
    case '*': hasil = bil1 * bil2; break;
    case '/': hasil = bil1 / bil2; break;
    case '+': hasil = bil1 + bil2; break;
    case '-': hasil = bil1 - bil2; break;
    default : valid_operator = 0;

  }
  if(valid_operator) {
    printf("\nHasil perhitungan\n\n");
    printf("%g %c %g = %g\n",bil1,operator,bil2,hasil);
  } else {
    printf("\nOperator SALAH!\n");
    printf("\nGunakan operator +, -, / dan * saja!");
  }

  getchar ();

  return 0;
}






/* Analisis Program 7 Bab 4
* Deskripsi : Kalkulator 2.0
 * Baris 7 : deklarasi variabel (1 adalah true)
 * Baris 16 : scanf memindai, disimpan, dan menyimpan di variabel bil1, operator, dan bil2
 * Baris 18 : switch case = if else
 * Baris 19 : evaluasi kebenaran, jika benar variabel operator bernilai *, maka jalankan perkalian, break artinya hentikan switch case, lompat ke baris 26
 * Baris 20 : evaluasi kebenaran, jika benar variabel operator bernilai /, maka jalankan pembagian, break artinya hentikan switch case, lompat ke baris 26
 * Baris 21 : evaluasi kebenaran, jika benar variabel operator bernilai +, maka jalankan penjumlahan, break artinya hentikan switch case, lompat ke baris 26
* Baris 22 : evaluasi kebenaran, jika benar variabel operator bernilai -, maka jalankan pengurangan, break artinya hentikan switch case, lompat ke baris 26
 * Baris 23 : evaluasi kebenaran, jika semua input diatas salah, default akan menyimpan/mengubah nilai valid operator menjadi =0
 * Baris 26 : evaluasi kebenaran, jika valid operator bernilai 1 (true), maka jalankan baris 27-28
 * Baris 29 : evaluasi kebenaran, jika valid operator bernilai 0 (false), maka jalankan baris 30-31
 */


Program-8.c






/* Nama File : program8.c "Ganjil Genap" */

#include <stdio.h>

int main ()
{
  int angka;

  printf("\nMasukkan angka : ");
  scanf("%d", &angka);

  if(angka % 2 == 0)
  printf("\n%d adalah bilangan genap\n", angka);
  else
  printf("\n%d adalah bilangan ganjil\n", angka);

  getchar ();

  return 0;
}


/* Analisis Program 8 Bab 4
 * Deskripsi : Ganjil Genap
 * Baris 12 : Penerapan teori "Habis dibagi dua" adalah dengan modulus
 * Baris 12 - 15 : evaluasi kebenaran, jika angka yang diinput adalah angka genap, maka jalankan baris 13, jika angka yang diinput adalah angka ganjil maka jalankan baris 15
 */



Program-9.c





/* Nama File : program-9.C */

#include <stdio.h>

int main ()
{
  char simbol;
while (1){
  getchar();
  printf("\nTekan salah satu tombol keyboard : ");
  scanf("%c", &simbol);

  if(simbol>='a' && simbol<='z' ) {
    printf("\n%c adalah huruf kecil\n", simbol);

  } else if(simbol>='A' && simbol<='Z') {
    printf("\n%c adalah huruf besar\n", simbol);

  } else if(simbol>='0' && simbol<='9') {
    printf("\n%c adalah angka\n", simbol);

  } else {
    printf("\n%c adalah karakter khusus\n", simbol);
  }
  simbol = '\0';
}
  getchar();
  return 0;
}
/* Analisis Program 9 Bab 4
 * Deskripsi : Pengenalan ASCII
 * syarat pengenalan karakter adalah mengikuti tabel ASCII yang disepakati bersama
 * Polanya sama seperti evaluasi kebenaran
 * Baris 13 : ASCII nomor 97 - 122
 * Baris 16 : ASCII nomor 65 - 90
 * Baris 19 : ASCII nomor 48 - 57
 * Baris 22 : ASCII selain nomor-nomor diatas
 */

Program-10.c








/* Nama File : Program-10.c */

#include <stdio.h>
#include <stdbool.h>

int main ()
{
  float operand1, operand2, hasil;
  int int_op1, int_op2, int_hasil;
  char operator;

  printf("\nProgram Akumulator\n");
  printf("\nOperator yang dapat digunakan: * / + - %% & | s e\n");
  printf("\nOperator \"s\": untuk mengubah akumulator");
  printf("\nOperator \"e\": untuk mengakhiri program");
  printf("\nOperator %% && || tidak akurat jika menggunakan pecahan\n");

  mengulang:
  printf("\n\nMasukkan angka yang akan diakumulasi: ");
  scanf("%g", &operand1);

  while (true) {
  printf("\nMasukkan angka kedua dan operator (Contoh: 10 +): ");
  scanf("%g %c",&operand2,&operator);

  if(operator == 's' || operator=='S') {
    goto mengulang;
  } else if(operator == '*') {
    hasil = operand1 * operand2;
    printf("\n= %g\n", hasil);
    operand1=hasil;
  } else if(operator == '/') {
    hasil = operand1 / operand2;
    printf("\n= %g\n", hasil);
    operand1 = hasil;
  } else if(operator == '+') {
    hasil = operand1 + operand2;
    printf("\n= %g\n", hasil);
    operand1 = hasil;
  } else if(operator == '-') {
    hasil = operand1 - operand2;
    printf("\n= %g\n", hasil);
    operand1 = hasil;
  } else if(operator == '%') {
    int_op1 = (int)operand1;
    int_op2 = (int)operand2;
    int_hasil = int_op1 % int_op2;
    printf("\n= %d\n", int_hasil);
    operand1 = (float)int_hasil;
  } else if(operator == '&') {
    int_op1 = (int)operand1;
    int_op2 = (int)operand2;
    int_hasil = int_op1 & int_op2;
    printf("\n= %d\n", int_hasil);
    operand1 = (float)int_hasil;
  } else if(operator == '|') {
    int_op1 = (int)operand1; int_op2 = (int)operand2;
    int_hasil = int_op1 | int_op2;
    printf("\n= %d\n", int_hasil);
    operand1 = (float)int_hasil;
  } else if(operator == 'e' || operator == 'E'){
    printf("\nprogram berhenti"); break;
  } else {
    printf("\noperator salah!\n");
  }


  getchar ();
}
  return 0;
}




/* Analisis Program 10 Bab 4
 * baris 18 : label
 * baris 20 : scanf bisa menerima 2 input
 * baris 22 : perulangan tidak berhenti
 * baris 24 : kunci dari perulangan
 * baris 27 : goto mengulang ke baris 18
 * baris 31 : variabel hasil disimpan di operand1
 * baris 44 : variabel karakter operator
 * baris 45 : variabel float dipaksa menjadi integer karena perhitungan modulus tidak bisa dilakukan di tipe data float
 * baris 47 : hasil perhitungan modulus disimpan di int_hasil
 * baris 49 : variabel bertipe data integer dikembalikan lagi menjadi float, disimpan di operand1
 * baris 51 : variabel float dipaksa menjadi integer, karena perhitungan bitwise AND tidak bisa dilakukan di float
 * baris 57 : variabel float dipaksa menjadi integer karena perhitungan bitwise OR tidak bisa dilakukan di float
 * baris 62 : validasi input, menemukan perintah exit, jalankan baris 62
 * baris 63 : break digunakan untuk menghentikan looping dan lanjut kode setelah looping
 */

Program-11.c





/* Nama File : Program-11.c */

#include <stdio.h>

int main ()
{
  int tahun;
  printf("Menentukan Tahun Kabisat dari 1900-2005:");scanf("%d",&tahun);
  if(tahun>= 1900 && tahun <= 2005){

  if(tahun % 400==0){
  printf("%d merupakan tahun kabisat\n",tahun);
} else if(tahun %100==0){
  printf("%d merupakan bukan tahun kabisat\n",tahun);
} else if(tahun %4==0){
  printf("%d merupakan tahun kabisat\n",tahun);
} else{
  printf("%d merupakan bukan tahun kabisat\n",tahun);
}

  getchar ();
}
  return 0;
}


/* Analisis Program 11 Bab 4
 * Deskripsi : Tahun Kabisat
 * Teori hitung kabisat : jika habis dibagi 400 = kabisat, habis dibagi 4 dan bukan kelipatan 100 = kabisat, selain dua syarat tersebut berarti bukan kabisat
 * baris 9 :  evaluasi rentang waktu
 * baris 11 : jika input variabel habis dibagi 400, maka cetak baris 12
 * baris 13 : jika input variabel habis dibagi 100, maka cetak baris 14
 * baris 15 : jika input variabel habis dibagi 4, maka cetak baris 16
 * baris 17 : jika input variabel selain 3 syarat tersebut, maka cetak baris 18
 */



Program-12.c





/* Nama File : Program-12.c */

#include <stdio.h>
#include <math.h>
#define PI 3.14
int main ()
{
  float D;
  float A, B, C;
  float x1, x2;
ulangan:
    printf("\n ===== \t Program Determinan \t ===== \n\n");

    printf("\nMasukkan nilai untuk A : ") ;scanf("%f", &A);
    printf("\nMasukkan nilai untuk B : ") ;scanf("%f", &B);
    printf("\nMasukkan nilai untuk C : ") ;scanf("%f", &C);
    printf("Nilai sementara: %g %g %g\n", A, B, C);
    D = B * B - 4 * A * C;
    printf("Nilai determinan adalah %g \n", D);

    while(1){
    if(D==0){ //mengimplementasikan kemungkinan pertama
      x1 = -B / 2 * A;
      x2 = x1;
      printf("Determinan sama dengan 0 maka akar-akarnya kembar\n");
      printf("Nilai x1 adalah %g \n", x1);
      printf("Nilai x2 adalah %g \n", x2);
      goto ulangan;
    }else if(D>0){
      x1 = (-B + sqrt(D)) / 2 * A;
      x2 = (-B - sqrt(D)) / 2 * A;
      printf("Determinan positif (lebih dari 0) maka akar-akarnya berbeda. \n");
      printf("Nilai x1 adalah %g \n", x1);
      printf("Nilai x2 adalah %g \n", x2);
    }else{
      x1 = (( -B + sqrt(D) / 2 * A));
      x2 = (( -B - sqrt(D) / 2 * A));
      printf("Determinan negatif (kurang dari 0) maka akar-akarnya imajiner berlainan. \n");
      printf("Nilai x1 adalah %g i (dengan catatan i = akar(-D) yang disebut imajiner \n", x1);
      printf("Nilai x2 adalah %g i (dengan catatan i = akar(-D) yang disebut imajiner \n", x2);
      goto ulangan;
    }
  }

  return 0;
}
/* Analisis Program 12 Bab 4
* pustaka math.h dipanggil karena fungsi sqrt()
 * Program menghitung determinan untuk mencari akar-akar persamaan kuadrat
 * Dalam bahasa Inggris disebut roots of quadratic equation
 * Ax^2 + Bx + C = 0
 * D = B^2 - 4AC
 * Jika D = 0, maka x1 = x2 = -B / 2A
 * Jika D > 0, maka x1 = (-B + akar(D)) / 2A | x2 = (-B - akar(D)) / 2A
 * Jika D < 0, maka x1 = ((-B + akar(D)) / 2A )i | x2 = ((-B - akar(D))/2A)i
 * baris 18 = rumus jika ditulis dalam pemrograman C
 * baris 22 = jika Determinan sama dengan 0, maka cetak baris 25-27
 * baris 29 = Jika Determinan lebih besar dari 0, maka cetak baris 32-34
 * baris 35 = Jika Determinan lebih kecil dari 0, maka cetak baris 38-40
 * baris 42 = Jika tidak memenuhi syarat-syarat diatas, maka cetak baris 43
 */

Kesimpulan

  1. Tipe data integer tidak mengenal bilangan pecahan
  2. fungsi scanf bisa menerima 2 input
  3. tipe data suatu variabel bisa dikonversi dengan tipe data lainnya
  4. Kondisi SWITCH CASE mirip dengan IF ELSE, dengan perbandingan input variabel dengan beberapa nilai

Sumber Referensi

  1. https://en.wikibooks.org/wiki/C_Programming
  2. https://www.programiz.com/

Semoga artikel ini bermanfaat dan barokah bagi seluruh rakyat Indonesia

****

No comments:

Post a Comment

Belajar Pemrograman -- Presentasi Pemrograman 1

  Bismillahirahmanirrahim. Tulisan ini diambil dari Presentasi saya di kelas Pemrograman kursus Teknoplasma Nama: Muhammad Dimas Akbar Kota:...