Anda di halaman 1dari 6

PENJELASAN DEMO PRAKTIKUM DASAR PEMOGRAMAN - C

29 OKTOBER 2019

NAMA :Rihan Farih Bunyamin


NRP: 05111940000165

=====================================================================================

• PWK
penjelasan:

1. Fungsi int main ()

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)

3. void gedung(int y,int x){


4. posisi[y][x]='.';
5.
6. if(posisi[y+1][x]=='#'){
7. gedung(y+1,x);
8. }
9. if(posisi[y][x+1]=='#'){
10. gedung(y,x+1);
11. }
12. if(posisi[y-1][x]=='#'){
13. gedung(y-1,x);
14. }
15. if(posisi[y][x-1]=='#'){
16. gedung(y,x-1);
17. }
18. }
19.
penjelasan dari line oranye adalah program akan mengecek titik posisi pada posisi x dan y di
atas,bawah,kiri,kanan nya melalui x±1 serta y±1 apakah di posisi tersebut bernilai sama
dengan #. Apabila ia sama dengan # maka program akan menjalankan fungsi atas (gedung).

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 angka; // deklarasi variabel global


void bintang (int b)
{
int i;
if (b<=angka) //sebagai pembatas,angka yang diinput, base case
{
bintang(b+2);//rekursif base
for (i=0;i<b ;i++) {
printf ("*");
}
printf ("\n");
bintang(b+2); //rekursif base
}
return ;

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>

int angka; // deklarasi variabel global


void bintang (int b)
{
int i;
if (b<=angka) //sebagai pembatas,angka yang diinput, base case
{
bintang(b+2);//rekursif base
for (i=0;i<b ;i++) {
printf ("*");
}
printf ("\n");
bintang(b+2); //rekursif base
}
return ;

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 .

Anda mungkin juga menyukai