Monday, December 19, 2016
Contoh Soal Turbo Pascal
Contoh Soal Turbo Pascal
Assalmualaikum wr .wb
hari ini panas banget udah panas karna pelajaran, panas karna koneksi internet lelet, panas karna cuaca lagi.
dari pada kepansan mendingan saya bikin postingan baru aja, betul enggak?. kali ini saya akan posting tentang bahasa pemrograman yaitu PASCAL,ada yang tau gak sih apa itu Pascal? PAscal adalah bahasa pemeroggraman yang pertama kali di buat oleh Profesor Niklaus wirth. seorang anggota International Federation of Information Processing (IFIP) pada tahun 1971. Dengan mengambil nama dari Matematikawan Perancis,Blaise Pascal, yang pertama kali menciptakan mesin penghitung, Profesor Niklaus Wirth membuat bahasa Pascal ini sebagai alat bantu untuk mengajarkan konsep pemrograman Komputer kepada mahasiswanya. Selain itu, Profesor Niklaus Wirth membuat Pascal juga untuk melengkapi kekurangan-kekurangan bahasa pemrograman yang ada pada saat itu. ngomong ngomong pascal jadi inget pas olimpiade komputer beberapa bulan yang lalu saya dipaksa harus menguasai & harus bisa PASCAL dalam waktu + 3 hari (Apa Gak Gila Tuh?heheheh... Tapi Gak Papa Karna Saya Suka,Apa Boleh Buat,Karna Gak Ada Lagi Yang Bisa Di Andalkan Ya Makan Aja Deh), hari pertama saya sangat bingung dan yang pasti stress karena setiap saya bertanya kepada guru TIK saya selalu mendapatkan jawaban yang sama yaitu "Bapak juga gak tau & gak bisa, tapi yang jelas kamu harus nulis dulu baru di jalanin programnya", setelah mendengar itu saya semakin stress dan stress, bahkan saya jadi seperti orang pikun nanya pertanyaan yang sama ke temen saya "Kenapa Harus Saya?". Hari kedua berlalu dengan otak masih kosong, tetapi saat di perjalannan ke lokasi yang di tentukan untuk olimpiade saya lebih giat belajar dan hasilya pada hari ketiga bisa dikit dikit dan inlah hasilnya walaupun termasuk kurang malah legih dari kurang tapi gak papa.
Ini sedikit bentuk soalnya yang muncul:
FUNCTION fak (x, y: integer) : Integer;
BEGIN
if y:= 0 then fak := 1
else
fak := x * fak (x, y-1);
END;
Writeln (fak(5, 3));
1. Apa hasil dari program di atas!
a. 125
b. 8
c. 81
d. 3
e. 15
BEGIN
if y:= 0 then fak := 1
else
fak := x * fak (x, y-1);
END;
Writeln (fak(5, 3));
1. Apa hasil dari program di atas!
a. 125
b. 8
c. 81
d. 3
e. 15
Pembahasan :
Ini adalah contoh kasus fungsi dengan mempergunakan rekursi (fungsi yang mampu memangil dirinya sendiri)
Nilai x awal adalah 5, nilai y awal adalah 3 maka
fak (5,3) > 5 * fak (5, 3-1) = 5 * 25 = 125
fak (5,2) > 5 * fak (5, 2-1) = 5 * 5 = 25
fak (5,1) > 5 * fak (5,1-1) = 5 * 1 = 5
fak (5,0) (proses selesai karena y =0)
Jadi yang muncul adalah
125
Ini adalah contoh kasus fungsi dengan mempergunakan rekursi (fungsi yang mampu memangil dirinya sendiri)
Nilai x awal adalah 5, nilai y awal adalah 3 maka
fak (5,3) > 5 * fak (5, 3-1) = 5 * 25 = 125
fak (5,2) > 5 * fak (5, 2-1) = 5 * 5 = 25
fak (5,1) > 5 * fak (5,1-1) = 5 * 1 = 5
fak (5,0) (proses selesai karena y =0)
Jadi yang muncul adalah
125
2. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah
a. 20
b. 9
c. 1024
d. 64
e. 5
a. 20
b. 9
c. 1024
d. 64
e. 5
Pembahasan:
Kasus ini sama seperti pada soal 1
Nilai x awal adalah 4, nilai y awal adalah 5 maka
fak (4,5) > 4 * fak (4, 5-1) dengan mempergunakan hasil fak ( 4,4) > 4 * 256 = 1024
fak (4,4) > 4 * fak (4, 4-1) dengan mempergunakan hasil fak ( 4,3) > 4 * 64 = 256
fak (4,3) > 4 * fak (4,3-1) dengan mempergunakan hasil fak ( 4,2) > 4 * 16 = 64
fak (4,2) > 4 * fak (4,2-1) dengan mempergunakan hasil fak ( 4,1) > 4 * 4 = 16
fak (4,1) > 4 * fak (4,1-1) = 4 * 1 = 4
fak (4,0) (proses selesai karena y =0)
Jadi yang muncul adalah
1024
Kasus ini sama seperti pada soal 1
Nilai x awal adalah 4, nilai y awal adalah 5 maka
fak (4,5) > 4 * fak (4, 5-1) dengan mempergunakan hasil fak ( 4,4) > 4 * 256 = 1024
fak (4,4) > 4 * fak (4, 4-1) dengan mempergunakan hasil fak ( 4,3) > 4 * 64 = 256
fak (4,3) > 4 * fak (4,3-1) dengan mempergunakan hasil fak ( 4,2) > 4 * 16 = 64
fak (4,2) > 4 * fak (4,2-1) dengan mempergunakan hasil fak ( 4,1) > 4 * 4 = 16
fak (4,1) > 4 * fak (4,1-1) = 4 * 1 = 4
fak (4,0) (proses selesai karena y =0)
Jadi yang muncul adalah
1024
3. Manakah yang salah dari deklarasi dibawah ini
a. function info(a:byte):real;
b. function info:byte;
c. function info(a,b:byte) : real;
d. function info(a: real; b:integer):real;
e. function info(a:real);
a. function info(a:byte):real;
b. function info:byte;
c. function info(a,b:byte) : real;
d. function info(a: real; b:integer):real;
e. function info(a:real);
Pembahasan
Ingat bentuk dekelarasi dari suatu fungsi
FUNCTION nama_fungsi(daftar_fungsi):tipe;
- daftar parameter berisi sejumlah parameter
- tipe menyatakan tipe dari hasil fungsi
- Jika fungsi tidak memiliki parameter, tanda () tidak perlu disertakan.
jadi jawabannya adalah e.function info(a:real);
Ingat bentuk dekelarasi dari suatu fungsi
FUNCTION nama_fungsi(daftar_fungsi):tipe;
- daftar parameter berisi sejumlah parameter
- tipe menyatakan tipe dari hasil fungsi
- Jika fungsi tidak memiliki parameter, tanda () tidak perlu disertakan.
jadi jawabannya adalah e.function info(a:real);
dan ini saya dapat dari teman saya:
1. Luas daerah persegi panjang dan kelilingnya.
Program Luas_Persegi_Panjang_dan_Kelilingnya;
uses wincrt;
var
panjang, lebar, luas, keliling : real;
begin
write(masukkan panjang =);readln(panjang);
write(masukkan lebar =);readln(lebar);
luas:=panjang*lebar;
keliling:=2*(panjang+lebar);
writeln(Luas=,luas:10:2);
writeln(Keliling=,keliling:10:2);
end.
2. Volum Kubus dan luas permukaan kubus.
Program Volume_Kubus_dan_Luas_Permukaan_Kubus;
uses wincrt;
var
alas, volume, luas_permukaan:real;
begin
write(masukkan alas =);readln(alas);
volume:=alas*alas*alas;
luas_permukaan:=6*(alas*alas);
writeln(volume=,volume:5:2);
writeln(luas_permukaan=,luas_permukaan:5:2);
end.
3. Luas daerah lingkaran dan keliling lingkaran.
Program Luas_Lingkaran_dan_Keliling_Lingkaran;
uses wincrt;
const
phi=3.142857;
var
r, Luas, Keliling:real;
begin
write (masukkan jari-jari lingkaran: );readln(r);
Luas:=(phi*r*r);
Keliling:=(phi*2*r);
writeln (luas:, Luas:10:3);
writeln (keliling:, Keliling:10:3);
end.
4. Mempertukarkan nilai A dan B, nilai A dan B diinput.
Program Mempertukarkan_Nilai;
uses wincrt;
var
A:integer;
B:integer;
temp:integer;
begin
write(masukkan nilai A =);readln(A);
write(masukkan nilai B =);readln(B);
temp:=A;
A:=B;
B:=temp;
writeln(A =,A);
writeln(B =,B);
end.
5. Luas permukaan tabung dan kerucut.
Program Luas_Permukaan_Tabung_dan_Kerucut;
uses wincrt;
const
phi=3.142857;
var
r, t, s, luas_permukaan_tabung, luas_permukaan_kerucut:real;
begin
write(masukkan jari-jari =);readln(r);
write(masukkan tinggi =);readln(t);
write(masukkan selimut_kerucut =);readln(s);
luas_permukaan_tabung:=((2*phi*r*r)+(2*phi*r*t));
luas_permukaan_kerucut:=((phi*r*r)+(phi*r*s));
writeln(luas_permukaan_tabung=,luas_permukaan_tabung:5:2);
writeln(luas_permukaan_kerucut=,luas_permukaan_kerucut:5:2);
end.
6. Penjumlahan, pengurangan, perkalian, pembagian, pembagian bulat, dan sisa hasil bagi dalam sebuah program.
Program Operasi_Bilangan;
uses wincrt;
var
a,b,c,d,e,h:integer;
f,g:real;
begin
write(masukkan nilai pertama = );readln(a);
write(masukkan nilai kedua = );readln(b);
c:=a+b;
d:=a-b;
e:=a*b;
f:=a/b;
g:=a div b;
h:=a mod b;
writeln(hasil penjumlahan = ,c);
writeln(hasil pengurangan = ,d);
writeln(hasil perkalian = ,e);
writeln(hasil pembagian = ,f:0:2);
writeln(hasil pembagian bulat = ,g:0:2);
writeln(sisa hasil bagi = ,h);
end.
7. Meghitung gaji karyawan apabila diinput nama orang, gaji pokok, tunjangan istri 15 % dari gaji pokok, tunjangan tiap anak 20 % dari gaji pokok, pajak 15 % dari gaji keseluruhan.
Program Gaji_Karyawan;
uses wincrt;
var
nama_orang:string;
gaji_pokok:real;
tunjangan_istri:real;
tunjangan_tiap_anak:real;
n:integer;
pajak:real;
total_gaji:real;
begin
write (masukkan nama orang =);readln(nama_orang);
write (masukkan gaji pokok =);read(gaji_pokok);
write (masukkan banyaknya anak =);readln(n);
tunjangan_istri:=(0.15*gaji_pokok);
tunjangan_tiap_anak:=(0.2*n*gaji_pokok);
pajak:=(0.15*(gaji_pokok+tunjangan_istri+tunjangan_tiap_anak));
total_gaji:=(gaji_pokok+tunjangan_istri+tunjangan_tiap_anak-pajak);
writeln(tunjangan_istri=,tunjangan_istri:10:2);
writeln(tunjangan_tiap_anak=,tunjangan_tiap_anak:10:2);
writeln(pajak=,pajak:10:2);
writeln(total_gaji=,total_gaji:10:2);
end.
8. Koordinat titik tengah dari kedua titik yang diketahui.
Program Koordinat_Titik_Tengah;
uses wincrt;
var
x1, x2, y1, y2, a, b, titik_tengah_x, titik_tengah_y:real;
begin
write(masukkan nilai x1 =);readln(x1);
write(masukkan nilai x2 =);readln(x2);
write(masukkan nilai y1 =);readln(y1);
write(masukkan nilai y2 =);readln(y2);
titik_tengah_x:=((x1+x2)/2);
titik_tengah_y:=((y1+y2)/2);
writeln(titik_tengah_x=,titik_tengah_x:10:2);
writeln(titik_tengah_y=,titik_tengah_y:10:2);
end.
9. Konversi dari jam ke detik.
Program Konversi_Jam_ke_Detik;
uses wincrt;
var jam, detik:real;
begin
write(masukkan jam :);readln(jam);
detik:=jam*3600;
writeln(detik =,detik:10:2);
end.
10. Konversi detik ke jam.
Program Konversi_Detik_ke_Jam;
uses wincrt;
var detik, jam:real;
begin
write(masukkan detik :);readln(detik);
jam:=detik / 3600;
writeln(jam =,jam:10:2);
end.
11. Apabila diketahui waktu mulai telepon(jam,menit,detik) dan waktu selesai telepon(jam,menit,detik), berapakah lamanya telepon dalam detik.
Program Durasi_Telepon;
uses wincrt;
var j1, j2, m1, m2, d1, d2, j, m, d, sisa, durasi:integer;
begin
write (jam mulai=);read(j1,m1,d1);
write (jam selesai =);readln(j2,m2,d2);
Durasi:=(j2-j1)*3600+(m2-m1)*60+(d2-d1);
j:=Durasi div 3600;
sisa:=Durasi mod 3600;
m:=sisa div 60;
d:=sisa mod 60;
writeln (durasi jam=,j);
writeln (durasi menit=,m);
writeln (durasi detik=,d);
end.
12. Biaya telepon apabila diinput mulai telepon dan selesai telepon, dan biaya pulsa per Rp 200,- dan 1 pulsa adalah 5 detik ( sisa < 5 detik diabaikan).
Program Menghitung_Biaya_Telepon;
Uses Wincrt;
Var
hh1,mm1,ss1,hh2,mm2,ss2,Total_Detik,Biaya_Telepon:longint;
Begin
Writeln (Waktu mulai telepon:);
Write (Jam =);read (hh1);
Write (Menit=);read (mm1);
Write (Detik=);read (ss1);
Writeln (Waktu selesai telepon:);
Write (Jam =);read (hh2);
Write (Menit=);read (mm2);
Write (Detik=);read (ss2);
Total_Detik:=(hh2-hh1)*3600+(mm2-mm1)*60+(ss2-ss1);
Biaya_Telepon:=(Total_Detik div 5)*200;
Writeln (Lama Waktu Telepon dalam Detik adalah ,(Total_Detik), ( detik.));
Writeln (Biaya Telepon adalah Rp ,Biaya_Telepon);
End.
13. Konversi Suhu dari Celcius ke Kelvin dan Fahrenhet.
Program suhu;
uses wincrt;
var
celcius,kelvin:integer;
fahrenheit:real;
begin
write(Masukkan suhu dalam celcius = );readln(celcius);
fahrenheit:=(9/5*celcius)+32;
kelvin:=celcius+273;
writeln(Suhu dalam fahrenheit = ,fahrenheit:5:2);
writeln(Suhu dalam kelvin = ,kelvin);
end.
14. Menghitung umur seseorang apabila diasumsikan dalam 1 bulan ada 30 hari dan dalam 1 tahun ada 365 hari.
Program Menghitung_Umur_Seseorang;
uses wincrt;
var
d1,d2,m1,m2,y1,y2,H,I,J,K,L:integer;
begin
writeln(Menghitung umur seseorang);
write(Masukkan tanggal lahir = );readln(d1,m1,y1);
write(Masukkan tanggal sekarang = );readln(d2,m2,y2);
H:=(y2-y1)*365+(m2-m1)*30+(d2-d1);
I:=H div 365;
J:=H mod 365;
K:=J div 30;
L:=J mod 30;
write(umur anda sekarang adalah = ,I, tahun ,K, bulan ,L, hari);
end.
Program Luas_Persegi_Panjang_dan_Kelilingnya;
uses wincrt;
var
panjang, lebar, luas, keliling : real;
begin
write(masukkan panjang =);readln(panjang);
write(masukkan lebar =);readln(lebar);
luas:=panjang*lebar;
keliling:=2*(panjang+lebar);
writeln(Luas=,luas:10:2);
writeln(Keliling=,keliling:10:2);
end.
2. Volum Kubus dan luas permukaan kubus.
Program Volume_Kubus_dan_Luas_Permukaan_Kubus;
uses wincrt;
var
alas, volume, luas_permukaan:real;
begin
write(masukkan alas =);readln(alas);
volume:=alas*alas*alas;
luas_permukaan:=6*(alas*alas);
writeln(volume=,volume:5:2);
writeln(luas_permukaan=,luas_permukaan:5:2);
end.
3. Luas daerah lingkaran dan keliling lingkaran.
Program Luas_Lingkaran_dan_Keliling_Lingkaran;
uses wincrt;
const
phi=3.142857;
var
r, Luas, Keliling:real;
begin
write (masukkan jari-jari lingkaran: );readln(r);
Luas:=(phi*r*r);
Keliling:=(phi*2*r);
writeln (luas:, Luas:10:3);
writeln (keliling:, Keliling:10:3);
end.
4. Mempertukarkan nilai A dan B, nilai A dan B diinput.
Program Mempertukarkan_Nilai;
uses wincrt;
var
A:integer;
B:integer;
temp:integer;
begin
write(masukkan nilai A =);readln(A);
write(masukkan nilai B =);readln(B);
temp:=A;
A:=B;
B:=temp;
writeln(A =,A);
writeln(B =,B);
end.
5. Luas permukaan tabung dan kerucut.
Program Luas_Permukaan_Tabung_dan_Kerucut;
uses wincrt;
const
phi=3.142857;
var
r, t, s, luas_permukaan_tabung, luas_permukaan_kerucut:real;
begin
write(masukkan jari-jari =);readln(r);
write(masukkan tinggi =);readln(t);
write(masukkan selimut_kerucut =);readln(s);
luas_permukaan_tabung:=((2*phi*r*r)+(2*phi*r*t));
luas_permukaan_kerucut:=((phi*r*r)+(phi*r*s));
writeln(luas_permukaan_tabung=,luas_permukaan_tabung:5:2);
writeln(luas_permukaan_kerucut=,luas_permukaan_kerucut:5:2);
end.
6. Penjumlahan, pengurangan, perkalian, pembagian, pembagian bulat, dan sisa hasil bagi dalam sebuah program.
Program Operasi_Bilangan;
uses wincrt;
var
a,b,c,d,e,h:integer;
f,g:real;
begin
write(masukkan nilai pertama = );readln(a);
write(masukkan nilai kedua = );readln(b);
c:=a+b;
d:=a-b;
e:=a*b;
f:=a/b;
g:=a div b;
h:=a mod b;
writeln(hasil penjumlahan = ,c);
writeln(hasil pengurangan = ,d);
writeln(hasil perkalian = ,e);
writeln(hasil pembagian = ,f:0:2);
writeln(hasil pembagian bulat = ,g:0:2);
writeln(sisa hasil bagi = ,h);
end.
7. Meghitung gaji karyawan apabila diinput nama orang, gaji pokok, tunjangan istri 15 % dari gaji pokok, tunjangan tiap anak 20 % dari gaji pokok, pajak 15 % dari gaji keseluruhan.
Program Gaji_Karyawan;
uses wincrt;
var
nama_orang:string;
gaji_pokok:real;
tunjangan_istri:real;
tunjangan_tiap_anak:real;
n:integer;
pajak:real;
total_gaji:real;
begin
write (masukkan nama orang =);readln(nama_orang);
write (masukkan gaji pokok =);read(gaji_pokok);
write (masukkan banyaknya anak =);readln(n);
tunjangan_istri:=(0.15*gaji_pokok);
tunjangan_tiap_anak:=(0.2*n*gaji_pokok);
pajak:=(0.15*(gaji_pokok+tunjangan_istri+tunjangan_tiap_anak));
total_gaji:=(gaji_pokok+tunjangan_istri+tunjangan_tiap_anak-pajak);
writeln(tunjangan_istri=,tunjangan_istri:10:2);
writeln(tunjangan_tiap_anak=,tunjangan_tiap_anak:10:2);
writeln(pajak=,pajak:10:2);
writeln(total_gaji=,total_gaji:10:2);
end.
8. Koordinat titik tengah dari kedua titik yang diketahui.
Program Koordinat_Titik_Tengah;
uses wincrt;
var
x1, x2, y1, y2, a, b, titik_tengah_x, titik_tengah_y:real;
begin
write(masukkan nilai x1 =);readln(x1);
write(masukkan nilai x2 =);readln(x2);
write(masukkan nilai y1 =);readln(y1);
write(masukkan nilai y2 =);readln(y2);
titik_tengah_x:=((x1+x2)/2);
titik_tengah_y:=((y1+y2)/2);
writeln(titik_tengah_x=,titik_tengah_x:10:2);
writeln(titik_tengah_y=,titik_tengah_y:10:2);
end.
9. Konversi dari jam ke detik.
Program Konversi_Jam_ke_Detik;
uses wincrt;
var jam, detik:real;
begin
write(masukkan jam :);readln(jam);
detik:=jam*3600;
writeln(detik =,detik:10:2);
end.
10. Konversi detik ke jam.
Program Konversi_Detik_ke_Jam;
uses wincrt;
var detik, jam:real;
begin
write(masukkan detik :);readln(detik);
jam:=detik / 3600;
writeln(jam =,jam:10:2);
end.
11. Apabila diketahui waktu mulai telepon(jam,menit,detik) dan waktu selesai telepon(jam,menit,detik), berapakah lamanya telepon dalam detik.
Program Durasi_Telepon;
uses wincrt;
var j1, j2, m1, m2, d1, d2, j, m, d, sisa, durasi:integer;
begin
write (jam mulai=);read(j1,m1,d1);
write (jam selesai =);readln(j2,m2,d2);
Durasi:=(j2-j1)*3600+(m2-m1)*60+(d2-d1);
j:=Durasi div 3600;
sisa:=Durasi mod 3600;
m:=sisa div 60;
d:=sisa mod 60;
writeln (durasi jam=,j);
writeln (durasi menit=,m);
writeln (durasi detik=,d);
end.
12. Biaya telepon apabila diinput mulai telepon dan selesai telepon, dan biaya pulsa per Rp 200,- dan 1 pulsa adalah 5 detik ( sisa < 5 detik diabaikan).
Program Menghitung_Biaya_Telepon;
Uses Wincrt;
Var
hh1,mm1,ss1,hh2,mm2,ss2,Total_Detik,Biaya_Telepon:longint;
Begin
Writeln (Waktu mulai telepon:);
Write (Jam =);read (hh1);
Write (Menit=);read (mm1);
Write (Detik=);read (ss1);
Writeln (Waktu selesai telepon:);
Write (Jam =);read (hh2);
Write (Menit=);read (mm2);
Write (Detik=);read (ss2);
Total_Detik:=(hh2-hh1)*3600+(mm2-mm1)*60+(ss2-ss1);
Biaya_Telepon:=(Total_Detik div 5)*200;
Writeln (Lama Waktu Telepon dalam Detik adalah ,(Total_Detik), ( detik.));
Writeln (Biaya Telepon adalah Rp ,Biaya_Telepon);
End.
13. Konversi Suhu dari Celcius ke Kelvin dan Fahrenhet.
Program suhu;
uses wincrt;
var
celcius,kelvin:integer;
fahrenheit:real;
begin
write(Masukkan suhu dalam celcius = );readln(celcius);
fahrenheit:=(9/5*celcius)+32;
kelvin:=celcius+273;
writeln(Suhu dalam fahrenheit = ,fahrenheit:5:2);
writeln(Suhu dalam kelvin = ,kelvin);
end.
14. Menghitung umur seseorang apabila diasumsikan dalam 1 bulan ada 30 hari dan dalam 1 tahun ada 365 hari.
Program Menghitung_Umur_Seseorang;
uses wincrt;
var
d1,d2,m1,m2,y1,y2,H,I,J,K,L:integer;
begin
writeln(Menghitung umur seseorang);
write(Masukkan tanggal lahir = );readln(d1,m1,y1);
write(Masukkan tanggal sekarang = );readln(d2,m2,y2);
H:=(y2-y1)*365+(m2-m1)*30+(d2-d1);
I:=H div 365;
J:=H mod 365;
K:=J div 30;
L:=J mod 30;
write(umur anda sekarang adalah = ,I, tahun ,K, bulan ,L, hari);
end.
Available link for download