Skip to content

Commit

Permalink
feat: menambahkan algoritma faktorial
Browse files Browse the repository at this point in the history
- menambahkan dokumentasi CONTRIBUTING

Signed-off-by: slowy07 <slowy.arfy@gmail.com>
  • Loading branch information
slowy07 committed Dec 6, 2023
1 parent 9537809 commit 7944d22
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 1 deletion.
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,47 @@ zig fmt --check .
zig test namaFile.zig
```

## memasukkan file testing ke dalam ``build.zig``

kamu bisa menambahkan beberapa contoh kode algoritma selain dari basic, tetapi kamu harus mengikuti beberapa langkah antara lain:
- contoh dari kode kamu memiliki testing seperti contoh
```zig
const std = @import("std");
// fungsi untuk menghitung faktorial secara rekursif
fn faktorialRekursif(comptime T: type, n: T) T {
if (n < 2 and n > 0) return 1 else return n * faktorial(T, n - 1);
}
// testing faktorial rekursif
test "faktorial rekursif" {
try std.testing.expectEqual(@as(c_int, 720), faktorialRekursif(u64, 7));
try std.testing.expectEqual(@as(u64, 5040), faktorialRekursif(u64, 7));
}
```
memiliki testing yang dapat mengetest dari fungsi tersebut
- kemudian menempatkan struktur folder benar sebagai contoh
```
├── math
│ ├── faktorial.zig
```
- kemudian masukan hasil yang sudah kamu buat ke dalam file ``build.zig`` agar melakukan testing semua file test
```zig
if (std.mem.eql(u8, op, "kategori/nama_algo"))
buat_algo(b, .{
.optimize = optimize,
.target = target,
.name = "nama_file_yang_kamu_tambahkan.zig",
.category = "nama_folder",
})
```
- kemudian kamu bisa menambahkan running testingnya pada ``runtest.sh`` dengan menambahkan
```sh
# runtest.sh
$ZIG_TEST_COMMAND -Dalgoritma=folder/nama_algo $argumen
```


# *Pull Request*

***Pull request* yang baik**
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<p align="center">
Part of Bellshade Project, managed by <a href="http://discord.gg/S4rrXQU"> WPU Discord Community</a> and <a href="https://discord.gg/eavqxxTU"> Kelas terbuka Discord Community</a> <br>
WPU Community is the fastest growing software developer forum initiated by <a href="https://www.youtube.com/c/WebProgrammingUNPAS"> Mr. Sandhika Galih</a> and <a href="https://github.com/faqihza"> Mr. Faqihza Mukhlish <br>
</p>

Repositori ini berisi kumpulan berbagai macam _source code_ struktur data, algorithm, analisis matematika, serta tutorial yang diimplementasikan dengan menggunakan bahasa pemograman Zig
Expand Down
10 changes: 10 additions & 0 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@ pub fn build(b: *std.Build) void {
.name = "gcd.zig",
.category = "math",
});

// memilih folder berdasarkan opsi algoritma
// jika opsi adalah 'math/faktorial' maka fungsi buat_algo dipanggil untuk membuat algoritma faktorial
if (std.mem.eql(u8, op, "math/faktorial"))
buat_algo(b, .{
.optimize = optimize,
.target = target,
.name = "faktorial.zig",
.category = "math",
});
}

// fungsi untuk membangun algoritma berdasarkan informasi yang diberikan
Expand Down
33 changes: 33 additions & 0 deletions math/faktorial.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const std = @import("std");

// fungsi untuk menghitung faktorial secara iteratif
fn faktorial(comptime T: type, n: T) T {
var hasil: T = @as(T, 1);
var i: T = @as(T, 2);
while (i <= n) : (i += 1) hasil *= i;
return hasil;
}

// fungsi untuk menghitung faktorial secara rekursif
fn faktorialRekursif(comptime T: type, n: T) T {
if (n < 2 and n > 0) return 1 else return n * faktorial(T, n - 1);
}

// fungsi untuk menghitung faktorial pada waktu kompilasi
pub fn faktorialWaktuKompilasi(comptime T: type, n: T) T {
comptime var i = @as(T, 0);
inline while (i < 12) : (i += 1) if (i == n) return comptime faktorial(T, i);
return 1;
}

// testing untuk menguji fungsi faktorial pada saat kompilasi
test "faktorial pada waktu kompilasi" {
try std.testing.expectEqual(@as(u32, 120), faktorialWaktuKompilasi(u32, 5));
try std.testing.expectEqual(@as(usize, 362880), faktorialWaktuKompilasi(usize, 9));
}

// testing faktorial rekursif
test "faktorial rekursif" {
try std.testing.expectEqual(@as(c_int, 720), faktorialRekursif(c_int, 6));
try std.testing.expectEqual(@as(u64, 5040), faktorialRekursif(u64, 7));
}
1 change: 1 addition & 0 deletions runtest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ argumen='--summary all -freference-trace'
# lakukan testing salah satu folder dengan menggunakan perintah
# yang sudah dibuat
$ZIG_TEST_COMMAND -Dalgoritma=math/gcd $argumen
$ZIG_TEST_COMMAND -Dalgoritma=math/faktorial $argumen

0 comments on commit 7944d22

Please sign in to comment.