Perhatikan potongan program di bawah ini!
var
data1 : array[1..10] of integer = (4,11,2,5,1,9,7,5,6,8);
data2,data3 : array[1..10] of integer;
i : integer;
begin
for i:= 1 to 10 do
data2[i] := 1;
for i:= 1 to 10 do
inc(data2[data1[i]]);
for i:= 2 to 10 do
data2[i] := data2[i] + data2[i-1];
for i:= 10 downto 1 do
begin
data3[data2[data1[i]]] := data1[i];
dec(data2[data1[i]]);
end;
for i:= 1 to 10 do
write(data3[i]);
end.
Keluaran dari program di atas adalah
Kok bisa ada jawabnya ya?
perhatikan baris
for i:= 1 to 10 do
inc(data2[data1[i]]);
Ketika i = 2, berarti mengambil data1[2] yang nilainya adalah 11. Berarti selanjutnya mengambil data2[11]. Kan indeksnya hanya sampai 10?
CMIIW
iya saya paham. Kalau diuraikan kan sama dengan ini (saya gunakan x sebagai perantara):
for i := 1 to 10 do begin x := data1[i]; data2[x] := data2[x] + 1; end;
ketika i adalah 2, maka x berisi data1[2] yaitu 11. Lalu x digunakan sebagai index dari data2, yang terdeklarasi memiliki indeks maksimal adalah 10, sehingga tidak ada data2[11]. Di sini 11 adalah indeksnya, bukan nilai yang dimasukkan.
Untuk menguatkan dugaan saya, kode di soal saya coba di compiler, memang jadi error ![]()
CMIIW
Tepat sekali. Saya pun telaah mencobanya dengan Free Pascal 3.0.2 (terbaru saat komentar ini ditulis) dan menghasilkan runtime error 201. Hal ini dikarenakan indeks yang diacu pada data2[11] tidak ada. Padahal data2 hanya terdiri dari indeks 1..10.
Perhatikan penjabarannya:
Masuk untuk menulis jawaban
hasilnya 11102004005
dengan
data3(1):= 11
data3(2):=1
data3(3):=0
data3(4):=2
data3(5):=0
data3(6):=0
data3(7):=4
data3(8):=0
data3(9):=0
data3(10):=5
SMAN MODAL BANGSA ACEH
dengan cara yang panjang jawabannya adalah 0850000000
Dicoba di Free Pascal Compiler version 2.6.4 [2014/11/23] for x86_64
Output programnya:
11102004055
indeks 10 bukan berarti 11 tidak masuk. Deklarasinya data2 berisikan integer dengan indeks 10 dengan anggota tidak diketahui. Bukankah begitu?