Matematika Dasar
Operasi dan Operator
Di matematika, operasi adalah proses perhitungan yang melibatkan dua buah (biasanya) bilangan dan melakukan sesuatu untuk mendapatkan hasil. Penjumlahan adalah salah satu contoh operasi, begitu juga dengan perkalian. Operasi biasanya memiliki dua bagian, yaitu operator (seperti tanda ‘+’) dan juga operand. Operand hanyalah nama keren dari hal yang digunakan untuk dikerjakan oleh operator. Jadi ketika kita membaca operasi 2 + 3, bilangan 2 dan 3 merupakan operand. Menariknya, tidak semua operator membutuhkan dua operand. Operator yang membutuhkan dua operand itu dapat disebut binary operator. Operator inilah yang mungkin kalian sudah familier. Ada juga operator yang hanya membutuhkan satu operand, operator ini disebut unary operator. C# juga memiliki operator yang membutuhkan tiga operand, yang disebut ternary operator.
Penjumlahan, Pengurangan, Perkalian dan Pembagian
Melakukan operasi dasar penjumlahan, pengurangan, perkalian, dan pembagian cukup mudah. Mari kita mulai dengan masalah yang sederhana. Kode berikut ini menjumlahkan bilangan 3 dan 4, lalu memasukkannya pada variabel bernama a:
int a = 3 + 4;Pengurangan juga bisa:
int b = 5 - 2;Walaupun contoh di atas memperlihatkan melakukan operasi matematika pada satu baris yang sama dengan deklarasi (yang mana mengapa kita menuliskan tipe datanya juga), semua operasi ini juga dapat kita tuliskan di mana saja, tidak hanya saat deklarasi saja:
int a; // Mendeklarasi variabel a
a = 9 - 2; // Mengisi nilai ke a, menggunakan operasi aritmetika
a = 3 + 3; // Pengisian lagi
int b = 3 + 1; // Mendeklarasi b dan mengisi nilai ke b secara langsung
b = 1 + 2; // Mengisi nilai lain lagi ke bIngatlah bahwa sebuah variabel itu harus di deklarasikan terlebih dahulu sebelum dapat digunakan, seperti yang dapat dilihat pada kode di atas. Kalian juga dapat menggunakan variabel yang sudah ada sebelumnya dalam operasi aritmetika kalian. Jadi kalian tidak harus menggunakan bilangan saja:
int a = 1;
int b = a + 4;
int c = a - b;Jangan terlalu terburu-buru di bagian paling akhir. Fakta bahwa kalian dapat menggunakan variabel pada bagian kanan dari persamaan adalah bagaimana kalian dapat menghitung suatu hal berdasarkan hal lain, langkah-demi-langkah. Saat programmu berjalan, komputer akan mencari tahu hasil dari perhitungan di bagian kanan dari tanda sama dengan, lalu memasukkan nilai hasil tersebut ke variabel di sebelah kirinya.
Kalian juga dapat menyambungkan beberapa operasi secara bersamaan dalam satu baris:
int hasil = 1 + 2 - 3 + 4 - 5 + a - b + c - d;Perkalian dan pembagian juga dapat dilakukan dengan sama, tetapi ada beberapa trik yang kita harus tahu ketika melakukan pembagian dengan integer. Kita akan pelajari lebih lanjut di bab yang akan datang, tapi untuk sekarang gunakanlah float atau double jika ingin melakukan pembagian, bukan integer. Tanda untuk perkalian di C# adalah asterisk/bintang (*) dan tanda untuk pembagian adalah forward slash.
float biayaTotal = 22.54f;
float persenTip = 0.18f; // Ingat, ini itu sama dengan 18%
float banyaknyaTip = biayaTotal * persenTip;
double uangHasilKerja = 100000000;
double totalProgrammer = 4;
double gajiPerOrang = uangHasilKerja / totalProgrammer; // Kita kaya!Yang di bawah ini contoh perhitungan yang lebih rumit, yang menghitung luas dari sebuah lingkaran berdasarkan jari-jari(radius).
// Rumus dari luas lingkaran adalah pi * r ^ 2
float radius = 4;
float pi = 3.1415926536f; // Huruf 'f' membuat bilangan ini menjadi float, jadi bukan double
float luas = pi * radius * radius;
// Menggunakan operator + dengan string akan menggabungkan ke dua operand dalam satu string
Console.WriteLine("Luas dari lingkaran adalah " + luas + ".");Pada kode di atas, kita punya variabel untuk radius lingkaran, nilai dari 𝜋, dan luas yang sudah kita hitung menggunakan rumus dari bab geometri di matematika. Lalu kita tampilkan hasilnya.
Perhatikan bahwa kita menggunakan operator ‘+’ dengan string (teks) dan angka. Ini salah satu fitur keren dari C#. Jadi C# sudah tahu kalau secara teknis string (teks) dan bilangan tidak dapat di tambahkan dalam matematika, tapi ada cara bagus untuk menanganinya. C# tahu bahwa dia dapat membuat bilangannya menjadi string (representasi teks dari bilangan tersebut) dengan begitu dia tahu cara mengombinasikan dua string: concatenation. Ini akan menggabungkan teks satu di akhir teks satunya. Jika kalian menjalankan kode ini, kalian akan lihat bahwa programnya akan menghasilkan “Luas dari lingkaran adalah 50.26548”.
Kita sudah tahu apa itu statement, sekarang mungkin saat yang tepat untuk istilah yang masih berhubungan: expression atau ekspresi. Sebuah ekspresi adalah sesuatu yang mengevaluasimenjadi nilai tunggal. Sesuatu seperti 3 + 4 adalah sebuah ekspresi, karena itu akan di jadikan nilai 7. (3 * 2 – 17 + 8 / 4.0) juga merupakan ekspresi. Mungkin lebih rumit, tapi masih dapat di evaluasi menjadi nilai tunggal.
Latihan
Buatlah program untuk menghitung luas sebuah segitiga, seperti contoh lingkaran di atas. Rumusnya adalah 𝐿 = 1 2 × 𝑎 × 𝑡 dimana a adalah panjang alas, dan t adalah tinggi segitiga. Kalian mungkin harus membuat variabel di programmu untuk setiap variabel dalam rumus tersebut. Tampilkan hasilnya. Jalankan beberapa kali dengan nilai alas dan tinggi yang berbeda, untuk memastikan bahwa program bekerja. Misalnya, pastikan bahwa jika a adalah 5 dan t adalah 6, maka hasilnya seharusnya 15, lalu jika a adalah 1.5 dan t adalah 4, maka hasilnya 3.
Operator modulo
Simbol operator ini adalah tanda persen (%), operator ini akan mengambil sisa dari pembagian dua operand, jadi misal 23 dibagi 7 adalah 3 tapi sisa 2. Ingat simbolnya adalah tanda persen (%) jadi kalian harus ingat bahwa di C#, ‘%’ bukan berarti “persen” tetapi “mencari sisa dari pembagian”
Contoh, ada 23 buah apel, lalu 7 orang memakan apel, ini berarti semua orang mengambil 3, dan masih ada sisa 2. Contoh ini jika di tulis di c# adalah sebagai berikut:
int totalApel = 23;
int orang = 7;
int sisaApel = totalApel % orang; // Hasilnya adalah 2Mungkin tidak terlihat begitu berguna, tapi jika tahu bagaimana menggunakannya, operator ini akan sangat berguna. Contohnya, operator ini dapat digunakan untuk menentukan bahwa suatu bilangan merupakan kelipatan dari bilangan lain. Jika iya, maka operator ini akan memberi hasil 0.
int sisa = 20 % 4; // ini akan menghasilkan 0, yang memberi tahu kita bahwa 20 adalah kelipatan 4Pembagian Menggunakan Bilangan Bulat
Coba hitung 7/2, apa hasilnya. Jawabanmu mungkin 3.5, ataupun 3 sisa 1. Keduanya benar.
Sekarang cobalah tulis kode berikut di sebuah program C#, lalu coba cek apa isi dari hasil:
int a = 7;
int b = 2;
int hasil = a / b;
Console.WriteLine(hasil);Komputer berpikir hasilnya 3! Bukan 3.5, ataupun 3 sisa 1. Apa yang baru saja kita lakukan bukan merupakan pembagian normal yang kalian lakukan waktu SD, tetapi sesuatu yang disebut pembagian integer. Dalam pembagian integer, tidak ada yang namanya pecahan.
Pembagian integer bekerja dengan hanya mengambil bilangan bulatnya saja dari suatu pecahan, mengabaikan bagian desimalnya. Ini tidak seperti pembulatan, tidak peduli seberapa dekat pun bilangannya ke bilangan bulat terdekat. Sebagai contoh, 99/100 adalah 0, bahkan jika dari sudut pandang matematika, jawabannya adalah 0.99, yang sangat dekan dengan 1.
Pembagian integral akan digunakan jika kalian melakukan pembagian menggunakan tipe data integral, tetapi tidak akan digunakan jika kalian menggunakan tipe data floating-point.
Untuk perbandingan, coba lihat kode berikut:
int a = 7;
int b = 2;
int c = a / b; // menghasilkan 3. Menggunakan pembagian integer.
float d = 7.0f;
float e = 2.0f;
float f = d / e; // menghasilkan 3.5. Menggunakan pembagian floating-point "reguler".Ini akan menjadi sulit jika kalian menggabung-gabungkan tipe data seperti ini:
int a = 7;
int b = 2;
float c = 4;
float d = 3;
float result = a / b + c / d;Di sini, bagian a / b akan menghasilkan 3 (seperti sebelumnya), tetapi bagian c / d akan melakukan pembagian floating-point (pembagian normal) dan memberi kita 1.33333. Menambahkan keduanya memberikan kita 4.33333.
Tipe integer akan selalu melakukan pembagian integer, jadi ingat-ingatlah, karena ini bisa menjadi keuntungan dan juga kerugian, tergantung situasi.
Jika kalian tidak menginginkan pembagian integer kalian dapat mengonversinya menjadi nilai floating-point, yang akan kita bahas berikutnya
Menangani tipe berbeda dan melakukan casting
Biasanya ketika kalian melakukan perhitungan matematika pada dua hal yang memiliki tipe yang sama (seperti menambahkan 2 int) hasilnya akan memiliki tipe yang sama. Tetapi bagaimana jika kalian lakukan perhitungan dengan dua tipe berbeda? Contohnya, bagaimana jika kalian menambahkan int dengan long? Komputer pada dasarnya hanya tahu bagaimana cara menghitung dua hal yang memiliki tipe sama. Jadi untuk mengatasi masalah ini, tipe dapat diganti menjadi tipe yanglain secara langsung untuk memungkinkan sebuah operasi dilakukan. Konversi ini dinamakan typecasting atau casting saja.
Ada dua tipe casting di C#. Yang satu adalah implicit casting, berarti ini akan terjadi tanpa kalian menyuruh, dan satunya lagi adalah explicit casting, yang berarti kalian harus mengindikasikan bahwa kalian ingin melakukannya.
Secara umum, implicit casting terjadi saat kalian mengonversi dari tipe yang lebih sempit ke tipe yang lebih lebar. Ini dinamakan konversi melebar, dan adalah sebuah jenis konversi yang tidak menghasilkan hilangnya informasi. Untuk membantu menjelaskan, ingatlah bahwa int menggunakan 32 bit, sedangkan long menggunakan 64 bit. Karena ini, tipe long dapat menangani semua nilai yang dapat ditangani oleh tipe int. Karena ini, kita dapat bilang bahwa tipe int lebih sempit, sedangkan tipe long lebih lebar. C# akan dengan senang hati melakukan casting dari int yang lebih sempit ke long yang lebih lebar jika dibutuhkan, tanpa harus dibilang. Ia akan secara implicit melakukan casting dari int ke long.
Jadi misal:
int a = 4049;
long b = 284404039;
long sum = a + b;Ketika kalian melakukan operasi penjumlahan, nilai akan di tarik dari a, dan akan secara implicit di casting ke long, dan baru akan ditambahkan ke b.
Ini adalah konversi melebar. Tidak ada risiko kehilangan informasi karena tipe yang lebih lebar (long) akan dapat selalu memuat tipe yang lebih sempit (int). Karena tidak ada risiko, konversi aman untuk dilakukan.
Tipe floating-point dianggap lebih lebar dari pada tipe integral, jadi jika dibutuhkan C# akan mengonversi tipe integral ke tipe floating-point. Contohnya:
int a = 7;
float b = 2; // Ini akan mengonversi nilai integer 2 menjadi floating-point 2.0
// Nilai di `a` dibawah ini akan secara implicit di cast menjadi float untuk melakukan pembagian ini karena `b` adalah float.
// Ini akan menghasilkan pembagian floating-point, bukan pembagian integer
float hasil = a / b; // `a` dikonversi secara implicit menjadi floatDi samping itu, ada waktunya juga kita akan melakukan perubahan dari tipe yang lebih lebar menjadi tipe yang lebih sempit. Ini dilakukan menggunakan explicit cast, yang berarti bahwa kita harus menyebutkannya seperti, “Hei, saya ingin menubah tipe ini menjadi tipe yang lain”. Explicit cast biasanya mengubah nilai dari tipe yang lebih lebar menjadi tipe yang lebih sempit, yang mengakibatkan kemungkinan untuk kehilangan data.
Untuk melakukan explicit cast, kalian hanya perlu menuliskan tipe tujuan ke dalam tanda kurung di depan nilai yang ingin kalian konversi. Misalnya, lihat contoh berikut, yang mana mengubah dari long menjadi int:
long a = 3;
int b = (int)a; // `a` dikonversi secara eksplisit ke integerCasting bukan secara ajaib akan mengonversi tipe apa pun ke yang lainnya. Tidak semua tipe dapat di konversi ke tipe lain. Compiler akan memberi kalian error jika kalian mencoba melakukan explicit cast ke sesuatu yang tidak dapat dilakukannya. Jika kalian mencoba melakukan cast dari suatu hal ke hal yang lainnya, compiler tidak akan melakukannya, method moethod Convert.To.... mungkin masih dapat melakukan konversi.
Casting itu di anggap operator (operator konversi) seperti penjumlahan atau perkalian, dan juga masuk dalam urutan operasi. Casting memiliki urutan lebih tinggi dibanding operator seperti penjumlahan dan perkalian. Contohnya, jika kalian memiliki kode berikut:
float result = (float)(3.0 / 5.0) + 1;Hal ini akan terjadi:
Yang di dalam kurung akan dilakukan terlebih dahulu, 3.0 akan dibagi dengan 5.0 untuk mendapat 0.6 sebagai double.
Selanjutnya, konversi akan dilakukan, mengonversi dari 0.6 sebagai double menjadi 0.6 sebagai float.
Untuk menyiapkan penjumlahan dengan 0.6 sebagai float, dengan integer 1, bilangan 1 akan secara implicit di cast ke float.
Penjumlahan akan dilakukan dengan 0.6 sebagai float dan 1.0 sebagai float juga, menghasilkan 1.6 sebagai float
Nilai 1.6 sebagai float kemudian akan dimasukkan ke variabel result.
Cobalah!, menggunakan contoh seperti di atas, coba jelaskan proses yang akan terjadi dengan statement-statement berikut:
double a = 1.0 + 1 + 1.0f;int x = (int)(7 + 3.0 / 4.0 * 2);Console.WriteLine((1 + 1) / 2 * 3);
Jika membingungkan, coba taruh kodenya di visual studio dan jalankan. Kalian dapat mencoba memecah-mecahnya menjadi beberapa baris dan melakukan debugging jika kalian ingin.
Pembagian dengan nol
Di matematika kita tidak dapat membagi suatu bilangan dengan angka nol.
Jika kalian melakukan pembagian dengan nol di C#, kalian akan mendapatkan eror dan program akan langsung keluar.
Tetapi menariknya, jika yang kalian bagi dengan nol itu menggunakan tipe data double atau float, program tidak akan crash. Tetapi kalian akan mendapatkan hasil infinity atau tak hingga. Tipe integer tidak memiliki nilai infinity, jadi mereka tidak memiliki opsi ini.
Infinity, NaN, , , MinValue, MaxValue Infinity
Keduanya, double dan float memiliki nilai spesial yang merepresentasikan infinity positif dan negatif (+∞ dan −∞). Untuk menggunakan infinity, kalian dapat melakukannya seperti berikut:
double a = double.PositiveInfinity;
float b = float.PositiveInfinity;
double c = double.NegativeInfinity;
float d = float.NegativeInfinity;NaN (Not a Number)
NaN adalah nilai spesial lain yang berarti "bukan bilangan". Layaknya infinity, nilai ini akan muncul jika kalian melakukan sesuatu yang gila, seperti . Nilai ini dapat diakses seperti ini:
double a = double.NaN;
float b = float.NaN; dan
Angka dan merupakan bilangan spesial yang sering digunakan tergantung situasi. Untuk menggunakan nilai-nilai ini ada class Math yang menyediakan nilainya, jadi tidak perlu menuliskan manual. Sebagai contoh, pada program penghitung luas lingkaran kemarin kita dapat menggunakan Math.PI, berikut contoh penggunaan Math.PI dan Math.E:
double radius = 3;
double luas = Math.PI * radius * radius;
double eKuadrat = Math.E * Math.E;Last updated