Search This Blog

Thursday 25 August 2016

Menyalin isi array satu dimensi

Menyalin isi array satu dimensi dapat dilakukan dengan menggunakan perulangan dan tidak lagi seperti pada program sebelumnya yang harus mengandalkan kondisi untuk selection, karena pada program yang satu ini tidak ada lagi diperlukan perintah untuk mengecek apapun, yang diperlukan ialah perintah untuk menyalin isi sebuah array ke array lainnya. Dan yang pertama dilakukan dalam deklarasi dan inisialisasi pun hanyalah mendeklarasikan sebuah variabel untuk membantu proses perulangan, deklarasi dan inisialisasi variabel array pertama (jika memang tidak menggunakan proses input dari user), serta mendeklarasikan sebuah variabel array yang akan menjadi tempat penyalinan isi array yang sebelumnya tersebut. Perhatikan contoh program berikut:

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

for(a=0; a<5; a++){
C[a]=S[a];
}

for(a=0; a<5; a++){
printf("%3i", C[a]);
}
}

Dalam contoh program tersebut terlihat proses pertama yang dilakukan ialah deklarasi variabel untuk membantu perulangan serta variabel array yang menjadi tempat penempatan hasil salinan isi dari variabel array lainnya, dan tidak lupa tentunya mendeklarasikan variabel array yang juga diberi nilai awal. Proses inisialisasi ini tidak diwajibkan, karena ini dilakukan hanya sebab tidak adanya proses input dari user, andai ditambah inputan, maka inisialisasi ini bisa dibiarkan dan bisa juga dikosongkan seperti variabel array C. Mengapa dapat dilakukan proses input tanpa dikosongkan terlebih dahulu isi dari variabel array tersebut? Karena yang namanya nilai awal, jika diberi nilai baru maka nilai itu akan terganti dengan sendirinya. Perhatikan contoh program berikut ini:

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

for(a=0; a<5; a++){
scanf("%i", &S[a]);
}

for(a=0; a<5; a++){
 C[a]=S[a];
}

for(a=0; a<5; a++){
printf("%3i", C[a]);
}
}
Dalam program tersebut jelas inisialisasi tetap dilakukan, namun lihat pada perulangan pertama, pada perulangan tersebut dilakukan proses input untuk user, dan hasil input tersebut dimasukan kedalam variabel array yang sudah terisi dengan nilai sebelumnya. Apakah keduanya (antara nilai awal dengan hasil input) akan terjumlahkan? Tentu saja tidak, karena dalam proses ini user hanya mengisikan inputannya kedalam variabel array tersebut, tidak dilengkapi dengan proses penjulahan didalamnya. Lalu dikemanakan nilai awal tersebut jika memang akan terganti dengan suatu nilai yang baru? Nilai tersebut akan tetap tertulis di program sebagai nilai awal, hanya saja setiap kali user melakukan proses input, maka nilai tersebut akan dianggap hilang/tergantikan, dengan kata lain dapat dikatakan bahwa nilai tersebut sudah dianggap tidak ada lagi dalam melanjutkan proses berikutnya (nilai yang sudah tergantikan tersebut tidak akan lagi diproses, yang diproses ialah nilai barunya). Dan dengan demikian, apabila program tersebut dicetak ke layar, maka akan tampil seperti berikut ini:

Saat diinputkan angka 1 sampai 5 akan tampil:

1 2 3 4 5
Mengapa demikian? Mengapa tidak ada sama sekali pengaruh nilai awal yang sudah disisipkan sebelumnya? Jelas karena yang namanya nilai awal jika diberi nilai baru akan menjadi diabaikan, seperti saat Anda memiliki kartu pelajar di sekolah dasar, lalu pada saat SMP Anda diberikan kartu pelajar yang baru, maka kartu pelajar Anda yang SD tersebut tidak lagi berlaku/tergantikan dengan kartu pelajar yang baru. Begitupun dalam program yang satu ini, nilai awal tidak akan mempengaruhi nilai yang baru, terkecuali jika memang nilai baru tersebut tidak ada. Tapi untuk apa kita selalu melakukan pemberian nilai awal pada variabel yang akan diproses selanjutnya jika nilai awal itu sendiri akan tergantikan pada proses tersebut? Ya, memang untuk program yang ini nilai awal tidak begitu penting, Anda dapat membuat sebuah program inputan tanpa harus memberikan nilai awal terlebih dahulu. Namun untuk beberapa program lain, ada yang memang diwajibkan memberi nilai awal terlebih dahulu sebelum diproses lebih lanjut. Seperti halnya pada saat mencari nilai maksimum, apabila pada variabel yang akan digunakan untuk menampung nilai maksimum tersebut tidak diberi nilai awal terlebih dahulu, maka pada saat program dijalankan akan terjadi error karena akan menampilkan angka sembarang pada layar. Seperti contoh berikut ini:

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

for(a=0; a<5; a++){
if(S[a]>maks){
maks=S[a];
}
}
printf("\n%3i", maks);
}
Jika program diatas dijalankan, maka yang akan tampil di layar ialah angka sembarang, bukan angka 5 seperti yang diinginkan. Perhatikan saja dalam deklarasinya, tertulis maks dan hanya tertulis "maks". Lain halnya dengan pada saat Anda ganti dengan "maks=0 atau maks=S[0]", maka pada saat program tersebut dijalankan akan menampilkan angka yang sesuai dengan semestinya, yaitu angka 5. Dan bukan hanya dalam hal pencarian nilai maksimum, masih banyak lagi program yang memang mewajibkan untuk penggunaan inisialisasi. Dengan demikian terbukti bahwa walau variabel tersebut akan memiliki nilai baru nantinya, namun proses inisialisasi tidak dapat dikatakan tidak penting.

Sekilas untuk tambahan, bahwa pada contoh program diatas (contoh program paling atas / yang pertama) terlihat antara perulangan untuk menginput dengan perulangan untuk menyalin dipisahkan, namun sesungguhnya untuk mempersingkat program dapat maka kedua proses tersebut dapat dilakukan dalam satu perulangan. Dan untuk program diatas memang dibuat untuk memperjelas saja akan kedua prosesnya. Untuk penggabungan proses dalam satu perulangan tersebut dapat dilakukan seperti berikut:

for(a=0; a<5; a++){
scanf("%i", &S[a]);
C[a]=S[a];
}
Namun sedikit catatan untuk potongan program tersebut, walau memang hanya tinggal meletakan proses penyalinan dibawah perintah untuk inputan, namun jangan sesekali menyimpan perintah untuk penyalinan tersebut diatas perintah input, karena jika demikian, yang akan disalin bukanlah apa yang diinputkan, namun justru nilai awal pada inisialisasi pertama. Mengapa demikian? Karena proses penyalinan dilakukan dalam perulangan, maka dengan begitu proses akan terus berdampingan. Jika pada perulangan pertama dilakukan penyalinan isi array S pada indeks pertama sebelum adanya perubahan dalam perulangan tersebut, maka nilai pada indeks pertama array S masih angka 2 seperti yang tertera dalam inisialisasi, setelah itu barulah terjadi perubahan karena diikuti dengan proses input untuk mengisi array tersebut. Dengan demikian, apabila perintah untuk menyalin tersebut diletakan diatas perintah input, maka hasil yang terjadi sebagai berikut:

isi dari array S = (sesuai dengan inputan)

isi dari array C ialah deret angka 2 4 1 9 7 sesuai dengan nilai awal array S
Maka dengan demikian hindarilah penyimpanan perintah seperti itu, terkecuali jika hanya untuk mencoba, karena lebih baik mencoba untuk pengetahuan lebih daripada tidak tahu apa-apa. Dan sekilas tambahan untuk masalah inputan isi variabel array, mengapa harus dilakukan dalam perulangan? Karena jika diluar perulangan, maka indeks array yang akan terisi hanyalah satu indeks yang ditentukan. Seperti contoh berikut ini:

scanf("%i", &S[0]);
Pada perintah tersebut dapat dilakukan diluar perulangan, namun perhatikan perintah tersebut, tertulis input untuk variabel S ke 0, yang artinya hanya satu indeks yang disikan inputan. Maka jika perintah tersebut disisipkan pada program diatas dan menghapus perulangan untuk input yang sudah ada, maka apabila program tersebut dijalankan, yang akan tampil pada layar ialah:

(inputan) 4 1 9 7
Maka dengan demikian dapat disimpulkan bahwa proses input isi variabel array dilakukan hanya untuk mempersingkat program (membuat program lebih simple/praktis). Karena jika tanpa bantuan perulangan, untuk mengginput indeks yang banyak harus ditulis satu persatu perintahnya. Jika pada contoh tersebut hanya menginput indeks ke 0, maka dalam program tersebut kita harus menulis 4 perintah yang sama untuk indeks lainnya. Repot bukan? Ya, apalagi itu baru 5 indeks, bayangkan apabila indeks yang tersedia jumlahnya puluhan atau ratusan. Mungkin jari-jari Anda dapat mendadak berotot setelah pembuatan program tersebut selesai. Maka dengan demikian, penulis sangat menyarankan untuk proses inputan isi variabel array dilakukan dengan bantuan perulangan, terkecuali jika memang inputan yang dilakukan hanya untuk indeks-indeks tertentu (ditentukan).

No comments:

Post a Comment