Soal Pemrograman Terstruktur dan Pembahasan dengan Bahasa Pascal
08.07Soal :
1. a. Jelaskan dengan singkat bagaiaman membuat program yang terstruktur? Kemudian jelaskan pula bahwa penggunaan tipe data array dan record sangat mendukung program terstruktur.b. Dengan menggunakan algoritma MERGESORT dan data input di bawah, tuliskan urutan data sampai terurut Bestcase, Averagecase atau Worstcase
2. Tulis Output/Hasil running dari program di bawah ini :
a. Program dua_a;
Uses Crt;
Var X : real; Y : Integer;
Procedure(X : real; var y : integer);
Begin
x := x+0.5; y:= round(x);
end;
Function Hitung(a,b:Integer):Integer;
Begin
Hitung:=a+b*2 mod 2 - b div 3;
End;
Begin {Program Utama}
x:=6.4;
Ubah(x,y);
Writeln(Hitung(round(x),y));
End;
b. Program dua_b;c. Algoritma berikut dimaksudkan untuk menentukan data terbesar (max) dan terbesar kedua (second) dari suatu array X
Uses Crt;
Procedure Boot(t : Integer);
var i : Integer;
Begin
if (t lebihbesardari 0) then
begin
for i:= 1 to t do write('Okey ');
writeln;
Boo(t div 2);
writeln('Yes');
End;
End;
Begin
Boo(8);
End;
X : array [1..1000] of Integer;Sempurnakanlah algoritma diatas dengan memberi perintah inisialisasi max dan second, memberi nilai awal serta kemudian memberi perinah untuk kasus dimana x[i] kurangdarisamadengan max
Max, Second, i : Integer;
//Inisialisasi nilai max dan second
For i = awal to n do
Begin
if x[i] lebihbesardari max then begin
Second = max; max = x[i];
end else
if x[i] lebihbesardari second then
//kasus x[i] kurangdari max
end
write(max, second);
3. Buatlah program terstruktur untuk membuat n(n lebihbesardarisamadengan 10) data bilangan bulat yang nilai nya random diantara 1000 sampai dengan 10000 dan disimpan di suatu larik x, kemudian memilih secara random 10 data dari n data tersebut yang mana 10 data tersebut harus berbeda semua (tidak boleh ada duplikasi data) dan mencetak 10 data tersebut secara terurut dari data terkecil hingga data terbesar (ascending)
Sebagai gambaran input-output program :
Input := 20
(Isi larik x : 5904, 6336, 7437, 8599, 6425, 8722, 5904, 8626, 4813, 6612, 6813, 4459, 4938, 10000, 9026, 1510, 9673, 3454, 4451, 5299)
Outputnya :
1510, 4451, 4459, 5904, 6336, 6612, 6813, 8626, 9673, 10000
Pembahasan :
1. a. Dengan cara mengefisiensikan penggunaan memori dan memaksimalkan algoritma :+ Array (Larik) = Sangat mendukung karena array menempati tempat di memori secara berurutan, serta bertipe sama. dan dapat diakses dengan menggunakan index.
+ Record = Sangat mendukung karena Record menempati tempat di memori secara berurutan. Memiliki tipe data yang berbeda (Element). Dan dapat diakses dengan
nama_record.nama_field;
b. Perbandingan Algoritma MergeSort
2. a. Output : 4
Jawab :
1. Assignment x=6.4
2. Memanggil Procedure Ubah(x,y);
3. Procedure ubah memiliki parameter (x:real; var y:integer) //Mengembalikan nilai apabila ada var
4. Assignment x=6.4+0.5 dan membulatkan y menjadi: 7
5. Memanggil Function Hitung(6,7)
6. Assignment Hitung : 6 + 7*2 mod 2 - 7 div 3;
Hitung = 4
b. Output : okeyokeyokeyokeyokeyokeyokeyokey
okeyokeyokeyokey
okeyokey
okey
yes
yes
yes
yes
Jawab:
1.Program utama memanggil procedure boo(8);
2.Perulangan menulis ('okey') 8x ke layar
3.Rekursi boo(4)
--rekursi menulis ('okey') 4x ke layar
--rekursi boo(2)
----perulangan menulis ('okey') 2x ke layar
----rekursi boo(1)
------perulangan menulis ('okey') 1x ke layar
------rekursi boo(0) //Tidak memenuhi syarat yang dilakukan
c. //max:=0; second:=0;
//awal:=1;
//second:=x[i];
3. Program:
uses crt;
var x,z:array[1..100] of integer;
n,i,j,r,r2,c:integer; sama:boolean;
procedure input;
begin
readln(n);
for i:=1 to n do begin
repeat
r:=random(10000)+1;
until r lebihbesardari 1000;
x[i]:=r;
write(x[i],',');
end; writeln;
end;
procedure pilih;
begin
for i:=1 to 10 do begin
repeat
r:=random(n)+1;
r2:=x[r]; sama:=false;
for j:=1 to i do if z[j]=r2 then begin sama:=true; end;
until not(sama);
z[i]:=x[r];
write(z[i],',');
end; writeln;
end;
procedure urut;
begin
for i:=1 to 9 do
for j:=i+1 to 10 do
if z[i] lebihbesardari z[j] then begin
c:=z[i]; z[i]:=z[j]; z[j]:=c; end;
end;
procedure output;
begin
for i:=1 to 10 do
write(z[i],',');
end;
begin
clrscr;
input;
pilih;
urut;
output;
readln;
end.
0 comments