29 OKTOBER 2019
=====================================================================================
• PWK
penjelasan:
1. int main(){
2. int ukuran_peta, i, j, k, t, jumlah_gedung;
3. jumlah_gedung=0;
4.
5. tsc=testcase();
6. for(k=0;k<tsc;k++){
pertama, source code diatas berfungsi untuk mendefinisikan I,j,k,t serta jumlah_gedung lalu
menaliaskan testcase() dengan tsc. lalu kita mebuat semacam perulangan selama case kita
kurang dari sama dengan batas testcase (testcase / nilai x) lalu kita harus mendefinisikan
jumlah Gedung mulai dari nol .
1. ukuran_peta=testcase();
2. for(i=0;i<ukuran_peta;i++){
3. for(j=0;j<=ukuran_peta;j++){
4. scanf("%c",&posisi[i][j]);
5. }
6. }
code diatas secara prinsip hampir sama persis alogritmanya seperti penjelasan sebelumnya
namun pada code ini ia bukan membuat batas selama test case namun sepanjang ukuran
yang dimasukkan . selain itu pula kita menginput “denah kota “ (pola) yang berisi titik dan
pagar yang akan dimasukkan per koodrinat yang disimbolkan array I dan j (koordinat x dan y
pada matematis)
1. for(i=0;i<=ukuran_peta;i++){
2. for(j=0;j<=ukuran_peta;j++){
3. if(posisi[i][j]=='#'){
4. jumlah_gedung++;
5. gedung(i,j);
6. }
7. }
8. }
9.
10. printf("Kasus #%d: terdapat %d
bangunan\n",k+1,jumlah_gedung);
11. } }
code diatas berfungsi untuk menghitung jumlah Gedung (diwakili symbol pagar) di dalam
range yang telah kita tentukan sebelumnya. apabila di “koordinat” (plan [i][j]) tersebut sama
dengan pagar makai akan menghitung (jumlah pagar) +1 yang dijelaskan pada fungsi
Gedung,dimana singkatnya jika disikitar pagar (kiri-kanan-atas-bawah) berupa titik maka itu
dihitung sebagai 1 bangunan . program akan selalu mengecek jika ada pagar yang
bersebelahan sehingga semua titik . setelah itu program akan mengprint hasil kasus dan
jumlah Gedung keseluruhan.
2. lalu kita harus menentukan alogritma pemograman dimana ia dapat mendeteksi apakah
di titik tersebut terdapat simbol “#”lalu ia langsung otomatis mengubah # yang ditemui
untuk diganti menjadi (.) agar tidak terhitung dua kali (alogritma mirip seperti soal
hitungmartin)
line yang diberi warna biru menunjukan bahwa fungsi tersebut (gedung) dimana didalamnya
terdapat ia mengubah temuan di fungsi oranye (di posisi x dan y) apabila terpenuhi untuk
diganti dari # menjadi (.) titik agar tidak terhitung dua kali pada proses selajutnya (di main).
3. lalu tambahan, sebelumnya kita juga harus menentukan jumlah test case yang akan dibuat dalam hal
ini akan diwakili dengan fungsi bernama setInt dengan return value x agar nilai x dapat terus digunakan
pada fungsi main
int testcase(){
int x;
scanf("%d",&x);
return x;
script utuh:
1. int main(){
2. int ukuran_peta, i, j, k, t, jumlah_gedung;
3. jumlah_gedung=0;
4.
5. tsc=testcase();
6. for(k=0;k<tsc;k++){
7.
8. ukuran_peta=testcase();
9. for(i=0;i<ukuran_peta;i++){
10. for(j=0;j<=ukuran_peta;j++){
11. scanf("%c",&posisi[i][j]);
12. }
13. }
14. void gedung(int y,int x){
15. posisi[y][x]='.';
16.
17. if(posisi[y+1][x]=='#'){
18. gedung(y+1,x);
19. }
20. if(posisi[y][x+1]=='#'){
21. gedung(y,x+1);
22. }
23. if(posisi[y-1][x]=='#'){
24. gedung(y-1,x);
25. }
26. if(posisi[y][x-1]=='#'){
27. gedung(y,x-1);
28. }
29. }
30. int testcase(){
31. int x;
32. scanf("%d",&x);
33. return x;
34. }
• POLA REKURSI 2
source code :
#include <stdio.h>
int main () {
scanf ("%d",&angka);
bintang(1); //memanggil fungsi bintang 1
return 0;
}
1.
int main () {
scanf ("%d",&angka);
bintang(1); //memanggil fungsi bintang 1
return 0;
}
code diatas berfungsi untuk menginput angka serta memanggil fungsi bintang yang bernilai
1 , kenapa harus 1? karena nanti nilai satu akan menghasilkan rekursif sehingga urutannya
jika dimisalkan kita menginput angka 5 urutannya yang diharapkan adalah 1.3.5.
2.
#include <stdio.h>
code diatas merupakan fungsi rekursif dimana jika nilai b(=1) kurang dari angka maka fungsi
akan mencetak sebanyak b+2 , missal kita input angka=3 maka pertama kali program karena
b<angka ia akan mencetak b+2 dalam hal ini 1+2=3 bintang. lalu fungsi akan mencetak
bintang lagi apabila nilai I (1,3,5,….) kurang dari b sesuai fungsi dari rekursifnya lalu sebagai
penutup program akan menyetak lagi b+2 sama dengan cetakan pertama .