Search This Blog

Saturday 27 August 2016

Mengalikan isi array 1 dimensi

Untuk materi kali ini kita akan membahas mengenai perkalian array 1 dimensi. Pada perkalian array satu dimensi ini kita akan menggunakan dua metode, yaitu pengalian untuk angka-angka yang terdapat dalam array yang sama (se-array), dan dalam dua array. Untuk metode yang pertama (dalam array yang sama) kita akan menggunakan metode yang sama seperti pada topik sebelumnnya, yaitu dalam penjumlahan isi array. Dalam metode tersebut memang sama saja algoritmanya, namun untuk pengalian sendiri memiliki sedikit perbedaan dengan penjumlahan, dimana apabila dalam penjumlahan, untuk variabel yang akan menampung isi hasil penjumlahan tersebut diberi nilai awal 0 agar tidak mengubah keadaan (jika diberi nilai awal selain nol maka hasilnya akan berbeda, karena angka selain nol jika ditambahkan dengan angka lain maka angka lain tersebut akan berubah nilainya, lain halnya dengan angka 0). Dan dalam perkalian sendiri kita tidak lagi dapat menggunakan nilai awal 0, karena setiap angka yang dikali dengan 0 maka hasilnya akan 0, dengan demikian pada proses perkalian ini untuk variabel yang akan menjadi lokasi nilai akhir (hasil) akan diberi nilai awal 1. Mengapa demikian? Karena setiap angka yang dikalikan dengan angka 1 maka hasilnya tidak akan berubah. Lalu untuk apa dikalikan jika hasilnya tidak berubah? Disini kita hanya memberi nilai awal 1 pada variabel penampung hasil, sedangkan yang akan dikalikan ialah yang ada dalam array, jadi memang sudah seharusnya variabel penampung hasil hanya bertugas untuk menampung hasil, bukan mempengaruhi proses yang diinginkan. Perhatikan contoh berikut:

#include<stdio.h>
main(){
int a, S[3]={2,4,5}, jumlah=1;

for(a=0; a<3; a++){
jumlah=jumlah*S[a];
}
printf("\n%3i", jumlah);
}

Dalam contoh program tersebut terlihat sebuah program yang menghitung dengan inisialisasi variabel penampung hasil 1. Untuk proses input dapat dilakukan dengan menambahkan metode perulangan setelah deklarasi dan inisialisasi pada contoh diatas. Dan untuk proses dalam pengalian diatas ialah dengan memberi perintah for(a=0; a<3; a++){ jumlah=jumlah*S[a]; }. Dalam perintah tersebut maka variabel jumlah yang bernilai awal 1 akan dikalikan dengan isi dari tiap indeks variabel S. Dalam perulangan pertama maka nilai 1 yang terdapat dalam variabel penampung hasil (variabel jumlah) akan dikalikan dengan angka yang terdapat dalam indeks 0 variabel S. mengapa dikalikan dengan indeks 0 terlebih dahulu? Lihat nilai awal untuk perulangan, terdapat perintah inisialisasi a=0, maka indeks array yang akan diproses ialah dari indeks 0. Dan dengan demikian angka 1 dalam variabel jumlah akan dikalikan dengan angka 2 pada variabel S dengan indeks 0, hingga isi dari variabel jumlah berubah menjadi 2, karena 1 dikalikan dengan 2 ialah =2. Begitupun dengan perulangan berikutnya, angka 2 yang telah terdapat dalam variabel jumlah akan dikalikan dengan isi dari variabel S indeks ke 1 yang isinya ialah angka 4, hingga hasil dari perkalian dalam perulangan kedua itu ialah angka 8, dan angka 8 tersebut akan menggantikan angka 2 yang terdapat dalam variabel jumlah pada perulangan sebelumnya. Dan pada perulangan terakhirpun tidak ada bedanya (perulangan ketiga yaitu indeks ke 2, karena walau isinya ada 3 angka, namun karena indeks tersebut dimulai dari angka 0 maka indeks terakhirnya bukanlah indeks ke 3 namun 2, karena 0-2 mengandung 3 hitungan didalamnya, ialah 0, 1 dan 2), pada perulangan terakhir ini angka 8 yang terdapat dalam variabel jumlah akan dikalikan dengan angka ke tiga atau indeks ke 2 dalam variabel S, dimana indeks ke 2 tersebut mengandung angka/nilai 5. Maka pada hasil akhir, nilai yang terkandung dalam variabel jumlah ialah 40, dan pada saat dicetak ke layarpun 40, karena 2*4*5 = 40. Dengan demikian telah terbukti bahwa memang inisialisasi untuk variabel jumlah harus dengan angka 1 agar keadaannya tidak berubah. Bukan berarti karena pada topik sebelumnya (menjumlah isi dari variabel array) kita memberi nilai awal 0, maka untuk perkalianpun harus memberi nilai awal yang sama, sungguh salah, karena ini bukan perintah default dari program, justru program inilah yang kita buat, apa yang kita buat ialah harus disesuaikan dengan apa yang kita maksud/kita butuh. Dengan demikian, kembali seperti yang biasa penulis sampaikan bahwa semua itu bergantung pada algoritma yang digunakan, penulispun memberi nilai awal seperti itu dengan perintah-perintah yang demikian tidak lain hanyalah menyesuaikan dengan program yang dibuat, jika pembaca memiliki algoritma lain untuk program perkalian seperti ini, silahkan digunakan/dicoba dituangkan pada programnya, karena banyak sekali alur pikir yang digunakan dalam membuat program yang sama, seperti halnya dalam mengerjakan soal matematika, banyak rumus yang dapat digunakan untuk menyelesaikan sebuah soal, kembali pada yang mengerjakan soal tersebut akan menggunakan rumus yang mana. Seperti pada progam yang sama, ada cara lain yang sudah penulis siapkan sebelumnya, dimana program yang dimaksud ialah sebagai berikut:

#include<stdio.h>
main(){
int a, S[3]={2,4,5}, jum=1;

for(a=0; a<3; a++){
jum*=S[a];
}
printf("\n%3i", jum);
}
Mari bandingkan dengan program sebelumnya, apa yang berbeda? Ya, yang berbeda hanyalah perintah untuk mengalikannya yang disimpan dalam perulangan. Jika dalam program sebelumnya proses yang dilakukan ialah mengisi nilai variabel jumlah dengan hasil perkalian antara variabel jumlah dengan setiap isi dari indeks variabel S / variabel array yang dimaksud, namun kali ini variabel jum / jumlah langsung dikalikan dengan setiap isi indeks variabel S, dan didalam perintah tersebut tertulis bahwa jum*=S[a] yang artinya jum dikali dengan apa yang ada dalam indeks variabel S dan hasil yang akan diperoleh jum ialah apa yang telah diproses terebut. Hampir sama saja dengan proses sebelumnya, namun pada jumlah=jumlah*S[a] ada proses pengisian pada variabel jumlah, dimana setiap hasil dari perkalian antara variabel jumlah dengan variabel S akan disimpan pada variabel jumlah, namun pada jum*=S[a] lebih tepatnya bukan diisikan, namun ditunjuk (walau memang sama saja dengan mengisikan, karena pada akhirnya akan dimasukan ke dalam variabel jum), lalu apa maksud ditunjuk tersebut? kata "ditunjuk" tersebut sesungguhnya ialah karangan atau pendapat dari penulis sendiri, karena pada perintah terebut walau dimasukan kedalam variabel jum, tetapi "jum dikali dengan S[a] dan isi dari jum ialah angka tersebut", angka yang dimaksud ialah angka hasil perkalian jum dengan S[a]. Sama saja memang pada dasarnya, namun jika diperhatikan lebih jauh, pada saat jumlah=jumlah*S[a] maka jumlah= (hasil perkalian) jumlah*S[a], tetapi pada jum*=S[a] maka tanda sama dengan yang ada ditengah tersebut seakan menunjuk langsung atau menegaskan bahwa apa yang akan dikalikan dengan jum, itulah hasil akhir jum, dan yang dikalikan dengan jum ialah S[a]. Tetapi itu sebenarnya hanya pendapat penulis, jika memang pembaca memiliki pendapat lain atau menganggap kedua program tersebut sama saja ya silahkan, tidak masalah, justru dengan pendapat itulah mungkin yang nantinya akan membuktikan bahwa pembaca sudah mengerti akan alur programnya / bahkan mungkin lebih mengerti dari penulis sendiri. Dan satu lagi, selain seperti pada contoh program diatas, ada cara lain untuk memberikan perintah yang sama pada program, ialah dengan memberi nilai awal jum=S[0] dan for(a=1; a<3; a++){ jum*=S[a]; } namun jangan lupa, apabila jum sudah diberi nilai awal S[0] maka tidak perlu lagi perulangannya dilakukan dari indeks ke nol, karena indeks ke 0 sudah terdapat dalam jum, tinggal saja mengalikan dengan yang ada dalam indeks berikutnya.

Selain perkalian yang dilakukan pada satu array, penulis ingin pula memberikan sedikit tambahan contoh mengenai pengalian dengan dua array yang berbeda berikut sedikit tambahan mengenai inputan dengan perulangan seperti yang dimaksud dalam sebuah kalimat diatas (bisa dibilang paling atas setelah contoh program pertama). Namun untuk contoh program berikut ini, tidak akan penulis jelaskan lagi alur yang digunakannnya, karena dirasa sama saja (hampir sama persis dengan perintah jumlah=jumlah*S[a] ), namun perbedaannya jika dalam contoh program tersebut Variabel S dikalikan dengan variabel jumlah (variabel penampung hasil sebagai bantuan), pada program kali ini tidak lagi ada pengalian dengan variabel penampung hasil tersebut, namun langsung dikalikan dengan variabel array yang satunya (proses kali dilakukan antara array pengali dan yang dikali). Dengan kata lain variabel jumlah tidak lagi harus ikut campur untuk proses perkalian, tetapi disisi lain Anda harus mempersiapkan sebuah array baru yang akan menampung hasil tersebut, karena hasil kalinya pun akan berbentuk array, lain halnya pada contoh program diatas yang hasilnya bukan lagi array. Perhatikan contoh berikut:

#include<stdio.h<
main(){
int c, A[3]={1,2,3}, B[3]={12,6,4}, C[3];
printf("\n3 angka pertamanya ialah:\n");

for(c=0; c<3; c++){
printf("%3i", A[c]);
}
printf("\nDan akan dikalikan dengan:\n");

for(c=0; c<3; c++){
printf("%3i", B[c]);
}
printf("\n\nHasil perkaliannya ialah:\n");

for(c=0; c<3; c++){
C[c]=A[c]*B[c];
printf("%3i", C[c]);
}
}
Dan dapat pula dilakukan tanpa bantuan array kosong sebagai array baru yang dikhususkan untuk menampung hasilnya tersebut, seperti pada contoh diatas, Anda dapat saja tidak lagi menggunakan C[3], Anda dapat menghapus deklarasi terebut, namun untuk perintahnya sendiri Anda harus mengorbankan salah satu array yang sudah ada yang menjadi bahan perkalian tersebut, misal Anda menggunakan perintah A[c]=A[c]*B[c]; bisa saja dengan cara seperti itu, dan untuk percetakannya tinggal disesuaikan. Namun penulis rasa cara seperti itu kurang efektif bahkan kurang enak untuk dilihatnya. Tetapi semua itu kembali pada pembut programnya sendiri.

No comments:

Post a Comment