OSP 2011

Untuk soal 35, 36, dan 37 perhatikan potongan program berikut:
var
mm,r,x,h : integer;
larik : array[1..10] of integer;

{ dengan instruksi sebagai berikut: }
function D(y,z:integer):boolean; forward;
procedure C(r:integer); forward;
procedure B(r:integer); forward;
procedure A; forward;
procedure main(m: integer); forward;

{ pemanggilan function / procedure dapat dilakukan dengan benar tanpa memperdulikan
    urutan penulisan fungsi } 
    
function D(y,z:integer):boolean;
begin
    r:=32767;
    if ((y=0) or (z=0)) then
        D:= (y=0)
    else if (r=32767) then
        D:=D(y+1,z+1);
end;

procedure C(r:integer);
begin
    x:=larik[r];
    if D(x-mm,h-mm) then h:=x;
    B(r-1);
end;

procedure B(r:integer);
begin
    if (r<>0) then C(r);
end;

procedure A;
begin
    B(r);
    writeln(h);
end;

procedure main(m: integer);
begin
    mm:=m;
    h:=-m;
    r:=10;
    A;
end;
  1. Misalkan variable larik yang merupakan array dan setiap elemennya diisi sehingga bernilai sebagai berikut: 2,3,1,4,9,-1,7,-9,-2,5.
    Pada program berikut ini, apakah output yang tampil di layar? Jawab: …….
    begin
        main(10);
    end.    
    
  2. Misalkan setiap elemen larik diisi sehingga bernilai sebagai berikut: 12,33,1,49,9,-11,7,-91,-2,53. dengan program utama berikut ini, apakah output yang tampil di layar? Jawab: …….
    begin
        main(10);
    end.    
    
  3. Asumsikan larik adalah array dengan ukuran tak hingga. Tentukan nilai r yang membuat program tidak berhenti dengan benar untuk larik dengan nilai sembarang! Jawab: ……..

    Prosedur main akan menginisialisasi nilai awal mm bernilai m, h = -m, r = 10 di mana m adalah parameter ketika prosedur dipanggil. Kemudian prosedur main akan melakukan pemanggilan prosedur B sebelum mencetak nilai h akhir.

    Prosedur B akan melakukan pemeriksaan apakah parameter bernilai 0. Jika ya, maka program berhenti. Jika tidak, maka akan diteruskan untuk melakukan pemanggilan prosedur C.

    Prosedur C akan mengambil nilai dari array dan memeriksa apakah D(x-mm, h-mm) bernilai true dan memanggil prosedur B. Artinya C akan melakukan perulangan sampai index ke 1 (B akan memastikan bahwa index yang diambil lebih dari 0).

    D akan bernilai true jika y bernilai 0 dan false jika z bernilai 0. Jika keduanya tidak bernilai 0, maka nilai y dan z akan ditambah 1. Artinya kondisi D akan true jika y lebih besar dari z (jika keduanya negatif), di mana y = x-mm dan z = h-mm. D juga akan benar jika y negatif z positif dan sebaliknya (salah jika y positif dan z negatif).

    x adalah nilai pada array, sedangkan h akan terus berubah jika kondisi D bernilai benar. x dan h akan sama-sama dikurangi dengan mm, jika x lebih besar, maka nilai h berganti menjadi x. Dengan kata lain, prosedur akan mencari nilai terbesar pada array yang nilainya kurang dari mm.

  1. Barisan bilangan 2,3,1,4,9,-1,7,-9,-2,5 terbesar yang kurang dari 10 adalah 9.

  2. Di antara bilangan 12,33,1,49,9,-11,7,-91,-2,53 yang terbesar dan kurang dari 10 adalah 9.

  3. Pada prosedur C, nilai r akan terus dikurangi sampai r bernilai 0. Sehingga prosedur akan terus berjalan jika nilai awal r sudah kurang dari 0, seperti -1. Dalam kasus ini, jika index dalam deklarasi dimulai dari negatif, maka program akan terus berjalan tanpa berhenti dan jika dimulai dari 0, program akan berhenti karena terjadi kesalahan yang mana keduanya tidak akan berhenti dengan benar.

Share Now:

5 1 vote
Article Rating
Subscribe
Notify of
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
kim
kim
2 years ago

⅓ x ⅔ = 2/9 bagian
kok bisa gitu kak?

Langganan

Subscribe To Our Newsletter

2
0
Would love your thoughts, please comment.x
()
x

Follow TikTok Kami @cahinfor

Pembahasan soal tahun 2023 sudah tersedia di TikTok Kami loh!