Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions algorithm/sorting/gnome_sort.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <iostream>
#include <vector>

/**
* @file gnome_sort.cpp
* @brief Program sederhana untuk mengurutkan array menggunakan algoritma Gnome Sort.
*
* Algoritma Gnome Sort bekerja mirip seperti penyortiran tukang kebun (gnome):
* - Mulai dari elemen pertama
* - Jika elemen saat ini lebih besar dari elemen berikutnya, tukar keduanya
* - Jika tidak, maju ke elemen berikutnya
* - Jika mundur ke elemen sebelumnya, ulangi proses
* - Lanjutkan sampai akhir array
*/

/**
* @brief Mengurutkan array menggunakan algoritma Gnome Sort.
*
* Fungsi ini menerima sebuah array (vector) dan mengurutkannya secara ascending
* menggunakan logika Gnome Sort. Proses pengurutan dilakukan secara **in-place**.
*
* @param arr Vector dari integer yang ingin diurutkan.
*/
void gnomeSort(std::vector<int>& arr) {
int index = 0;
int n = arr.size();

while (index < n) {
if (index == 0 || arr[index] >= arr[index - 1]) {
index++;
} else {
std::swap(arr[index], arr[index - 1]);
index--;
}
}
}

int main() {
int size;
std::cout << "Masukkan jumlah elemen array: ";
std::cin >> size;

std::vector<int> arr(size);
std::cout << "Masukkan elemen-elemen array, dipisahkan spasi: ";
for (int i = 0; i < size; i++) {
std::cin >> arr[i];
}

gnomeSort(arr);

std::cout << "Array setelah diurutkan: ";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << "\n";

return 0;
}
50 changes: 50 additions & 0 deletions math/pronic.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#include <cmath> // untuk fungsi sqrt()
#include <iostream>

/**
* @file pronic.cpp
* @brief Program sederhana untuk mengecek apakah sebuah input angka merupakan
* bilangan pronic atau bukan. Bilangan pronic adalah bilangan yang merupakan
* hasil perkalian dari suatu angka dengan angka selanjutnya. Rumus umum: n ( n
* + 1 ) Contoh sederhana: 3 4 = 12 -> 12 merupakan bilangan pronic.
*/

/**
* @brief Mengecek apakah sebuah angka merupakan bilangan pronic.
*
* Fungsi ini menghitung akar kuadrat dari angka, melakukan truncation,
* lalu memeriksa apakah hasil perkalian angka tersebut dengan angka
* selanjutnya sama dengan angka input
*
* @param n Angka yang ingin dicek
* @return true Jika n merupakan bilangan pronic, false jika bukan
*/
bool adalah_pronic(int n) {
int x = static_cast<int>(sqrt(n));
return (x * (x + 1) == n); // rumus pronic
/**
* Aproksimasi nilai x.
* Contoh: n = 12, aproksimasi dari sqrt(12) adalah 3.162277
* Hasil kemudian di-cast ke int sehingga menjadi 3 (truncation)
*/
}

int main() {
while (true) { // Supaya tidak harus menjalankan kode setiap mau mengetes angka baru.
int n;
std::cout << "Masukkan sebuah angka: ";
std::cin >> n;

// Perform fungsi adalah_pronic() dengan mengambil input n yang sudah
// dimasukkan user sebagai parameter dan menampilkan output
if (adalah_pronic(n)) {
std::cout << n << " Merupakan bilangan pronic."
<< "\n";
} else {
std::cout << n << " Bukan merupakan bilangan pronic."
<< "\n";
}
}

return 0;
}
Loading