Pertanyaan 1

Buatlah pernyataan pengulangan untuk menampilkan nilai ganjil di antara 1 sampai dengan 25. Gunakan pernyataan if untuk memeriksa apakah suatu bilangan adalah ganjil.

Konsep Dasar

Bilangan ganjil (odd number) adalah bilangan bulat yang tidak habis dibagi 2, artinya apabila bilangan tersebut dibagi 2 akan menghasilkan sisa 1. Dalam R, operator modulo %% digunakan untuk menghitung sisa hasil bagi suatu bilangan. Ekspresi i %% 2 menghasilkan nilai 0 apabila i adalah bilangan genap, dan menghasilkan nilai 1 apabila i adalah bilangan ganjil. Oleh karena itu, kondisi i %% 2 != 0 bernilai TRUE jika dan hanya jika i adalah bilangan ganjil.

Perulangan for digunakan untuk mengiterasi setiap bilangan bulat dari 1 hingga 25 secara berurutan. Pada setiap iterasi, pernyataan if memeriksa kondisi keganjilan; apabila kondisi terpenuhi, bilangan tersebut dicetak menggunakan fungsi cat.

Program R

cat("Bilangan ganjil antara 1 sampai 25:\n")

for (i in 1:25) {
  if (i %% 2 != 0) {
    cat(i, "")
  }
}
## Bilangan ganjil antara 1 sampai 25:
## 1 3 5 7 9 11 13 15 17 19 21 23 25

Penjelasan Output

Output menampilkan 13 bilangan ganjil: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, dan 25. Proses kerjanya sebagai berikut:

  • Perulangan for menginisialisasi variabel i mulai dari 1 dan bertambah 1 pada setiap iterasi hingga mencapai 25, sehingga total iterasi adalah 25 kali.

  • Pada setiap iterasi, pernyataan if (i %% 2 != 0) mengevaluasi apakah sisa bagi i terhadap 2 tidak sama dengan 0.

  • Apabila kondisi bernilai TRUE (bilangan ganjil), fungsi cat(i, "") mencetak nilai i diikuti spasi tanpa berpindah baris.

  • Apabila kondisi bernilai FALSE (bilangan genap), blok if dilewati dan tidak ada yang dicetak — iterasi langsung berlanjut ke nilai i berikutnya.

  • Perintah cat("\n") di akhir berfungsi memindahkan kursor ke baris baru setelah semua bilangan ganjil selesai dicetak.

Sebagai contoh: ketika i = 4, maka 4 %% 2 = 0, kondisi != 0 bernilai FALSE, sehingga angka 4 tidak dicetak. Ketika i = 5, maka 5 %% 2 = 1, kondisi != 0 bernilai TRUE, sehingga angka 5 dicetak.

Pertanyaan 2

Buatlah vektor v yang berisi 20 nilai normal acak yang dibangkitkan dengan fungsi rnorm. Selanjutnya tuliskan pernyataan pengulangan untuk mengalikan nilai elemen ke-i dari v dengan nilai elemen ke-i dari v, yaitu v(i) × v(i). Perkalian dilakukan untuk i = 1, 2, …, 5. Kemudian tampilkan hasil perkalian tersebut untuk setiap nilai i.

Konsep Dasar

Fungsi rnorm(n) membangkitkan sebanyak n nilai acak yang berdistribusi normal standar, yaitu distribusi normal dengan nilai rata-rata (μ) = 0 dan simpangan baku (σ) = 1. Setiap kali rnorm dipanggil tanpa set.seed, nilai yang dihasilkan akan berbeda-beda karena bersifat acak. Perintah set.seed(42) digunakan untuk mengunci titik awal pembangkitan bilangan acak (random seed), sehingga hasil yang diperoleh selalu sama dan dapat direproduksi oleh siapa pun.

Perkalian v[i] * v[i] secara matematis setara dengan \(v_i^2\) (kuadrat dari elemen ke-i), karena sebuah bilangan dikalikan dengan dirinya sendiri menghasilkan kuadratnya. Perulangan for (i in 1:5) membatasi operasi hanya pada lima elemen pertama vektor v.

Program R

# Membangkitkan vektor v dengan 20 nilai normal acak
set.seed(42)  # agar hasil dapat direproduksi
v <- rnorm(20)

cat("Isi vektor v (20 nilai acak normal):\n")
print(v)
## Isi vektor v (20 nilai acak normal):
##  [1]  1.37095845 -0.56469817  0.36312841  0.63286260  0.40426832 -0.10612452
##  [7]  1.51152200 -0.09465904  2.01842371 -0.06271410  1.30486965  2.28664539
## [13] -1.38886070 -0.27878877 -0.13332134  0.63595040 -0.28425292 -2.65645542
## [19] -2.44046693  1.32011335
cat("\nHasil perkalian v[i] x v[i] untuk i = 1 sampai 5:\n")

for (i in 1:5) {
  hasil <- v[i] * v[i]
  cat(sprintf("v[%d] x v[%d] = %.6f x %.6f = %.6f\n",
              i, i, v[i], v[i], hasil))
}
## 
## Hasil perkalian v[i] x v[i] untuk i = 1 sampai 5:
## v[1] x v[1] = 1.370958 x 1.370958 = 1.879527
## v[2] x v[2] = -0.564698 x -0.564698 = 0.318884
## v[3] x v[3] = 0.363128 x 0.363128 = 0.131862
## v[4] x v[4] = 0.632863 x 0.632863 = 0.400515
## v[5] x v[5] = 0.404268 x 0.404268 = 0.163433

Penjelasan Output

Vektor v berisi 20 nilai acak berdistribusi normal standar yang dicetak menggunakan print(v), memperlihatkan nilai-nilai seperti 1.3710, -0.5647, 0.3631, dan seterusnya. Tanda negatif pada beberapa elemen adalah wajar karena distribusi normal standar memiliki rentang nilai dari -∞ hingga +∞ dengan mayoritas nilai berada di antara -3 dan 3.

Proses kerja perulangan untuk menghasilkan output perkalian adalah sebagai berikut:

  • Perulangan for (i in 1:5) mengiterasi nilai i dari 1 hingga 5 (5 iterasi).

  • Pada setiap iterasi, nilai v[i] diambil menggunakan indeks [i], kemudian dikalikan dengan dirinya sendiri: hasil <- v[i] * v[i].

  • Fungsi sprintf memformat output agar nilai ditampilkan dengan 6 angka desimal dan dalam susunan yang rapi: v[i] x v[i] = (nilai) x (nilai) = hasil.

  • Perlu diperhatikan bahwa perkalian bilangan negatif dengan dirinya sendiri menghasilkan bilangan positif, misalnya, v[2] = -0.564698, sehingga (-0.564698) × (-0.564698) = 0.318884.

Pertanyaan 3

Setelah mempelajari materi sesi ini, buatlah 2 contoh Program R serta lampirkan hasil output R tersebut.

Contoh Program 1: Menghitung Faktorial dengan Perulangan while

Program ini menghitung nilai faktorial dari suatu bilangan bulat positif menggunakan perulangan while. Faktorial dari n didefinisikan sebagai \(n! = 1 \times 2 \times 3 \times \cdots \times n\). Sebagai contoh, \(7! = 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 = 5040\).

# Menghitung faktorial suatu bilangan menggunakan while
n <- 7
f <- 1
i <- 1

while (i <= n) {
  f <- f * i
  i <- i + 1
}

cat(sprintf("Faktorial dari %d adalah: %d! = %d\n", n, n, f))
## Faktorial dari 7 adalah: 7! = 5040

Penjelasan

Output yang dihasilkan adalah: Faktorial dari 7 adalah: 7! = 5040.

Proses kerja program:

  • Variabel f diinisialisasi dengan nilai 1 sebagai nilai identitas perkalian (mengalikan dengan 1 tidak mengubah nilai).

  • Variabel i dimulai dari 1 sebagai pencacah yang sekaligus menjadi faktor pengali.

  • Perulangan while (i <= n) berjalan selama i masih kurang dari atau sama dengan n (= 7). Setiap iterasi mengalikan f dengan nilai i saat itu, lalu i dinaikkan 1.

  • Iterasi berjalan: f = 1×1 = 1 -> f = 1×2 = 2 -> f = 2×3 = 6 -> f = 6×4 = 24 -> f = 24×5 = 120 -> f = 120×6 = 720 -> f = 720×7 = 5040.

  • Ketika i menjadi 8 (melampaui n = 7), kondisi i <= n bernilai FALSE dan perulangan berhenti. Nilai akhir f = 5040 adalah hasil \(7!\).

Contoh Program 2: Klasifikasi Nilai Mahasiswa dengan if...else

Program ini mengklasifikasikan nilai ujian mahasiswa ke dalam kategori huruf (A, B, C, D, atau E) menggunakan pernyataan if...else bertingkat (nested if…else) di dalam perulangan for.

# Data nilai ujian mahasiswa
nama  <- c("Andi", "Budi", "Citra", "Dini", "Eko")
nilai <- c(85, 72, 60, 45, 91)

cat("Hasil Klasifikasi Nilai Mahasiswa:\n")
cat(sprintf("%-10s %-6s %-6s\n", "Nama", "Nilai", "Grade"))
cat(strrep("-", 28), "\n")

for (i in 1:length(nama)) {
  n <- nilai[i]
  
  if (n >= 80) {
    grade <- "A"
  } else if (n >= 70) {
    grade <- "B"
  } else if (n >= 60) {
    grade <- "C"
  } else if (n >= 50) {
    grade <- "D"
  } else {
    grade <- "E"
  }
  
  cat(sprintf("%-10s %-6d %-6s\n", nama[i], n, grade))
}
## Hasil Klasifikasi Nilai Mahasiswa:
## Nama       Nilai  Grade 
## ---------------------------- 
## Andi       85     A     
## Budi       72     B     
## Citra      60     C     
## Dini       45     E     
## Eko        91     A

Penjelasan

Proses kerja program:

  • Dua vektor nama dan nilai dibuat berisi data 5 mahasiswa.
  • Fungsi sprintf dengan format %-10s (string rata kiri 10 karakter) dan %-6d (integer rata kiri 6 karakter) digunakan untuk menghasilkan tampilan tabel yang rapi.
  • Perulangan for (i in 1:length(nama)) mengiterasi setiap mahasiswa dari indeks 1 hingga 5.
  • Pada setiap iterasi, nilai n <- nilai[i] diperiksa melalui kondisi if...else bertingkat secara berurutan dari atas ke bawah:
    • n >= 80 -> Grade A (Andi: 85, Eko: 91)
    • n >= 70 -> Grade B (Budi: 72)
    • n >= 60 -> Grade C (Citra: 60)
    • n >= 50 -> Grade D (tidak ada yang memenuhi)
    • else -> Grade E (Dini: 45, tidak memenuhi semua kondisi di atas)
  • Perlu dicatat bahwa Dini dengan nilai 45 mendapat Grade E (bukan D) karena 45 < 50, sehingga kondisi n >= 50 tidak terpenuhi dan program masuk ke blok else.

Referensi

Hardhono, A.P., Suhartono, dan Sitanggang, I.S. 2022. Komputer 1 - Modul 9: Pengendalian eksekusi program (Edisi 2). Tangerang Selatan: Universitas Terbuka. https://pustaka.ut.ac.id/lib/sats4111-komputer-i-edisi-2/

Venables, W.N., Smith, D.M. and R Development Core Team. 2026. An Introduction to R: Notes on R: A Programming Environment for Data Analysis and Graphics, Version 4.7.0. https://cran.usk.ac.id/doc/manuals/r-devel/R-intro.pdf

Wickham, H. and Grolemund, G. 2017. R for Data Science. O’Reilly Media. https://r4ds.had.co.nz