From 6962419d9a604257b0fa17ff87206bd9d7f5ab34 Mon Sep 17 00:00:00 2001 From: arfy slowy Date: Thu, 25 Jan 2024 19:08:54 +0700 Subject: [PATCH] Barometrik (#20) * fix: mencoba menggunakan ke branch release Signed-off-by: slowy07 * feat: menambahkan ketinggian barometrik menghitung ketinggian dengan menggunakan rumus barometrik, menggunakan daripada menggunakan prinsip penurunan tekanan udara dengan meningkatnya ketinggian rumus: kettingian = 44330 * [1 - (P/p0)^(1/5.255) dimana: p = tekanan yang sudah terukur p0 = tekanan udara standard pada permukaan laut (101325 Pa) Signed-off-by: slowy07 --------- Signed-off-by: slowy07 --- OpenSeries/fisika.py | 22 ++++++++++++++++++++++ example/fisika/tekanan_barometrik.py | 7 +++++++ testing/fisika_test.py | 23 +++++++++++++++++++++++ testing/main_test.py | 2 ++ 4 files changed, 54 insertions(+) create mode 100644 example/fisika/tekanan_barometrik.py diff --git a/OpenSeries/fisika.py b/OpenSeries/fisika.py index c3f3cc1..48bb19a 100644 --- a/OpenSeries/fisika.py +++ b/OpenSeries/fisika.py @@ -150,3 +150,25 @@ def hukum_ohm(i: Union[float, int], r: Union[float, int]) -> Union[float, int, s return error.error_tipe_data(["float", "int"]) else: return i * r + + +def ketinggian_barometrik(tekanan: float) -> Union[float, str]: + """ + fungsi untuk menghitung perkiraan ketinggian berdasarkan dari + tekanan udara yang menggunakan rumus barometrik + + Parameter: + tekanan (float): tekanan udara + """ + if not isinstance(tekanan, float): + return error.error_tipe_data(["float"]) + else: + if tekanan > 101325: + return error.error_format( + "nilai lebih tinggi dari tekanan di permukaan laut" + ) + if tekanan < 0: + return error.error_format("tekanan atmosfir tidak bisa negatif") + else: + hasil = 44_330 * (1 - (tekanan / 101_325) ** (1 / 5.5255)) + return hasil diff --git a/example/fisika/tekanan_barometrik.py b/example/fisika/tekanan_barometrik.py new file mode 100644 index 0000000..0d90bb2 --- /dev/null +++ b/example/fisika/tekanan_barometrik.py @@ -0,0 +1,7 @@ +import OpenSeries.fisika as fisika + +# tekanan udara +tekanan = 100_000.0 +# memanggil fungsi dari ketinggian barometrik +hasil = fisika.ketinggian_barometrik(tekanan) +print(f"tekanan: {tekanan} Pa, Ketinggian adalah: {hasil} meter") diff --git a/testing/fisika_test.py b/testing/fisika_test.py index 7c7a11e..02ce727 100644 --- a/testing/fisika_test.py +++ b/testing/fisika_test.py @@ -56,3 +56,26 @@ def test_valid_input(self): def test_invalid_input_mix_tipe_data(self): hasil = fisika.energi_kinetik("3", 4.5) self.assertEqual(hasil, error.error_tipe_data(["int", "float"])) + + +class TestKetinggianBarometrik(unittest.TestCase): + def test_valid_input_tekanan(self): + hasil = fisika.ketinggian_barometrik(101325.0) + self.assertIsInstance(hasil, float) + + def test_tekanan_lebih_besar_daripada_air(self): + hasil = fisika.ketinggian_barometrik(110000.0) + self.assertEqual( + hasil, + error.error_format("nilai lebih tinggi dari tekanan di permukaan laut"), + ) + + def test_tekanan_angka_negatif(self): + hasil = fisika.ketinggian_barometrik(-820.3) + self.assertEqual( + hasil, error.error_format("tekanan atmosfir tidak bisa negatif") + ) + + def test_tekanan_tipe_data_salah(self): + hasil = fisika.ketinggian_barometrik("12") + self.assertEqual(hasil, error.error_tipe_data(["float"])) diff --git a/testing/main_test.py b/testing/main_test.py index b7fec00..1380679 100644 --- a/testing/main_test.py +++ b/testing/main_test.py @@ -18,6 +18,7 @@ TestPercepatan, TestGerakLurusBeraturan, TestEnergiKinetik, + TestKetinggianBarometrik, ) from testing.statistika_test import TestFungsiEntropy, TestFungiStandardDeviasi @@ -42,6 +43,7 @@ TestPercepatan, TestGerakLurusBeraturan, TestEnergiKinetik, + TestKetinggianBarometrik, ] testing_statistika: list = [