PETERMUAN KE LIMA
Algoritma dan struktur
data bahasa C
STRUKTUR KENDALI
PENGULANGAN
Intruksi FOR
for ( [expr1] ; [expr2] ; [expr3] } statement ;
Kerjakan expr1
Ulangi selama expr2
bernilai true
Kerjakan sttm
Kerjakan expr3
Akhir pengulangan
Contoh pemakaian
Int main(){
int i;
printf(“percobaan 1 :\n”);
for (i = 0; i < 10; i ++) printf (“%d “, i);
printf(“\npercobaan 2:\n”);
for (i = 1; i < = 10; i ++) printf (“%d “, i);
int i;
printf(“percobaan 1 :\n”);
for (i = 0; i < 10; i ++) printf (“%d “, i);
printf(“\npercobaan 2:\n”);
for (i = 1; i < = 10; i ++) printf (“%d “, i);
printf(“\npercobaan 3:\n”);
for (i = 0; i < 10; i +2) printf (“%d “, i);
...
}
for (i = 0; i < 10; i +2) printf (“%d “, i);
...
}
Output
Percobaan 1:
0 1 2 3 4 5 6 7 8 9
percobaan2:
1 2 3 4 5 6 7 8 9 10
percobaan3:
0 2 4 6 8
0 1 2 3 4 5 6 7 8 9
percobaan2:
1 2 3 4 5 6 7 8 9 10
percobaan3:
0 2 4 6 8
Contoh lain
Int main(){
...
printf(“percobaan 1 :\n”);
for (i = 9; i >= 0; i --) printf (“%d “, i);
printf(“\npercobaan 2:\n”);
for (i = 9; i > = 0; i -=2) printf (“%d “, i);
return 0;
}
...
printf(“percobaan 1 :\n”);
for (i = 9; i >= 0; i --) printf (“%d “, i);
printf(“\npercobaan 2:\n”);
for (i = 9; i > = 0; i -=2) printf (“%d “, i);
return 0;
}
Output
Percobaan1:
9 8 7 6 5 4 3 2 1 0
percobaan2:
9 7 5 3 1
9 8 7 6 5 4 3 2 1 0
percobaan2:
9 7 5 3 1
Contoh lain
int main (){
int i, batas;
printf (“Tabel Perkalian Lima\n”);
printf(“sampai dengan ? “);
scanf(“%d”, &batas);
for (I = 1 ; i <= batas; i++);
printf(“5 *%d = %d\n”, i, 5*I);
printf(“nilai pecahan = %d”,i);
return 0;
}
int i, batas;
printf (“Tabel Perkalian Lima\n”);
printf(“sampai dengan ? “);
scanf(“%d”, &batas);
for (I = 1 ; i <= batas; i++);
printf(“5 *%d = %d\n”, i, 5*I);
printf(“nilai pecahan = %d”,i);
return 0;
}
output
Tabel Perkalian Lima
sampai dengan ? 3
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
nilai pencacah = 4
sampai dengan ? 3
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
nilai pencacah = 4
Deret bilangan genap
Tulis rogram untuk
menampilkan bilangan-blangan genap antara dua bilangan. Kedua bilangan batas
ini ikut ditampilkan bila merupakan bilangan genap.
Pseudocode
baca bil1, bil2
jika bil1 <= bil2
cacah ç bil1
ulangi selama cacah ç bil2
jika cacah habis dibagi 2
cetak cacah
akhir jika
cacahç cacah + 1
akhir pengulangan
selain itu
cacah ç bil2
ulangi selama cacah ç bil1
jika cacah habis dibagi 2
cetak cacah
akhir jika
cacah ç cacah + 1
akhir pengulangan
akhir jika
jika bil1 <= bil2
cacah ç bil1
ulangi selama cacah ç bil2
jika cacah habis dibagi 2
cetak cacah
akhir jika
cacahç cacah + 1
akhir pengulangan
selain itu
cacah ç bil2
ulangi selama cacah ç bil1
jika cacah habis dibagi 2
cetak cacah
akhir jika
cacah ç cacah + 1
akhir pengulangan
akhir jika
program
int main () {
int bil1,bil2,cacah;
scanf(“%d %d”, &bil1,&bl2);
if (bil1 <= bil2) {
for (cacah = bil1; cacah <= bil2; cacah ++)
if ((cacah%2) == 0) printf (%d “,cacah);
} else {
for (cacah= bil2; cacah <= bil1; cacah ++)
if ((cacah%2) == 0) printf (%d “,cacah);
}
return 0;
}
int bil1,bil2,cacah;
scanf(“%d %d”, &bil1,&bl2);
if (bil1 <= bil2) {
for (cacah = bil1; cacah <= bil2; cacah ++)
if ((cacah%2) == 0) printf (%d “,cacah);
} else {
for (cacah= bil2; cacah <= bil1; cacah ++)
if ((cacah%2) == 0) printf (%d “,cacah);
}
return 0;
}
Output
13 25
14 16 18 20 22 24
14 16 18 20 22 24
16 9
10 12 14 16
10 12 14 16
Cari bilangan genap
yang pertama. Bilangan genap berikutnya
+2.
Psedocode.
Baca bil1, bil2
jika bil1>bil2
pengantara ç bil 1
bil1 ç bil2
bil2 ç pengantara
akhir jika
jika bil1 blangan ganjil
cacah ç bil + 1
selain itu
cacah ç bil1
akhir jika
ulangi selama cacah ç bil2
cetak cacah
cacah ç cacah + 2
akhir pengulangan.
jika bil1>bil2
pengantara ç bil 1
bil1 ç bil2
bil2 ç pengantara
akhir jika
jika bil1 blangan ganjil
cacah ç bil + 1
selain itu
cacah ç bil1
akhir jika
ulangi selama cacah ç bil2
cetak cacah
cacah ç cacah + 2
akhir pengulangan.
Program
int main () {
int bil1, bl2, cacah, temp;
scanf(“%d %d”, &bil1, &bil2) {
if (bil1 > bil2) {
temp = bil1;
bil1 = bil2;
bil2 = temp;}
if ((bil1 %2) == 1) cacah = cil1 + 1;
else cacah = bil 1;
for (cacah ;cacah <= bil2; cacah +=2)
printf(“%d “, cacah);
return 0;}
int bil1, bl2, cacah, temp;
scanf(“%d %d”, &bil1, &bil2) {
if (bil1 > bil2) {
temp = bil1;
bil1 = bil2;
bil2 = temp;}
if ((bil1 %2) == 1) cacah = cil1 + 1;
else cacah = bil 1;
for (cacah ;cacah <= bil2; cacah +=2)
printf(“%d “, cacah);
return 0;}
Output
16 9
10 12 14 16
10 12 14 16
12 25
14 16 18 20 22 24
14 16 18 20 22 24
NESTED FOR
-
Interuksi
atau statement yang dikerjakan oleh for boleh berupa instruksi for. Susunan
seperti ini di sebut nested for.
o
For (...)
for (...)
for (...)
Contoh :
int main () {
int n, i, j;
scanf(“%d”, &n);
for (i = 1; i <= n; i ++) {
printf(“kelipatan %d = “, i);
for (j = 1; j <= 5; j++)
printf(“%d “, I * j);
printf(“\n”);}
return 0;}
int n, i, j;
scanf(“%d”, &n);
for (i = 1; i <= n; i ++) {
printf(“kelipatan %d = “, i);
for (j = 1; j <= 5; j++)
printf(“%d “, I * j);
printf(“\n”);}
return 0;}
Output
3
kelipatan 1 = 1 2 3 4 5
kelipatan 2 = 2 4 6 8 10
kelipatan 3 = 3 6 9 12 15
kelipatan 1 = 1 2 3 4 5
kelipatan 2 = 2 4 6 8 10
kelipatan 3 = 3 6 9 12 15
o
Tuklis
program untuk menampilkan segitiga siku-siku rata kiri yang terbentuk dari
karakter +. Misalkan ukuran segitiga yang diinginkan adalah 4 maka bentuk
segitiganya :
*
**
***
****
**
***
****
Psedocode
Baca n
i ç 1
ulangi selama i <= n
j ç 1
ulangi selama j<= i
cetak ‘*’
j ç j + 1
akhir pengulangan
pindah baris
I ç i + 1
akhir prngulangan
i ç 1
ulangi selama i <= n
j ç 1
ulangi selama j<= i
cetak ‘*’
j ç j + 1
akhir pengulangan
pindah baris
I ç i + 1
akhir prngulangan
Pada
baris ke
|
Nilai
|
Jumlah
* yang di cetak
|
1
|
1
|
1
|
2
|
2
|
2
|
3
|
3
|
3
|
...
|
...
|
...
|
n
|
n
|
n
|
*
**
***
****
**
***
****
int main (){
int n, j,i;
scanf(“%d “, &n);
for (i = 1; i <= n; i++){
for (j = 1; j <= i; j++)
printf (“*”);
printf(“\n”);}
return 0;}
int n, j,i;
scanf(“%d “, &n);
for (i = 1; i <= n; i++){
for (j = 1; j <= i; j++)
printf (“*”);
printf(“\n”);}
return 0;}
Out put
5
*
**
***
****
*****
*
**
***
****
*****
o
Tulis program
untuk menampilkan segitiga seiku-siku rata kanan yang dibentuk dari karakter *.
Misalkan ukuran segitiga yang diinginkan adalah 4 maka bentuk segitiganya :
*
**
***
****
*
**
***
****
Berapa banyak spasi pada masing-masing
baris?
Pada
baris ke
|
Nilai
|
Jumlah
* yang di cetak
|
1
|
1
|
3
|
2
|
2
|
2
|
3
|
3
|
1
|
4
|
4
|
0
|
*
**
***
****
***
****
Jumlah spasi pada baris ke-i ialah n –
i.
Pseudocode
Baca n
iç 1
ulangi selama i <= n
jmlspasi ç n – i
j ç 1
ulangi selama j <= jmlspasi
cetak spasi
j ç j + 1
ulangi selama j <= i
cetak ‘*’
j ç j + 1
akhir pengulangan
pindah baris
i ç i +1
akhir pengulangan
iç 1
ulangi selama i <= n
jmlspasi ç n – i
j ç 1
ulangi selama j <= jmlspasi
cetak spasi
j ç j + 1
ulangi selama j <= i
cetak ‘*’
j ç j + 1
akhir pengulangan
pindah baris
i ç i +1
akhir pengulangan
Program
int main () {
int n, i, j, spasi;
scanf(“%d “, &n);
for (i = 1; i <= n; i++) {
spasi = n – i;
for (j = 1; j <= spasi; j++) printf (“ “);
for (J = 1; j<= i; j++) printf (“*”);
printf (“\n”);}
return 0;}
int main () {
int n, i, j, spasi;
scanf(“%d “, &n);
for (i = 1; i <= n; i++) {
spasi = n – i;
for (j = 1; j <= spasi; j++) printf (“ “);
for (J = 1; j<= i; j++) printf (“*”);
printf (“\n”);}
return 0;}
Output
5
*
**
***
****
*****
*
**
***
****
*****
INSTRUKSI WHILE
While (expression)
statement;
Evaluasi expr
jika true maka kerjakan sttm
jika true maka kerjakan sttm
Ulangi selama expr
bernilai true
kerjakan sttm
akhir pengulangan
kerjakan sttm
akhir pengulangan
Int main (){
unsigned n;
scanf”%u”,&n);
while (n > 3) {
printf (“%u “, n);
n--;
}
return 0;
}
unsigned n;
scanf”%u”,&n);
while (n > 3) {
printf (“%u “, n);
n--;
}
return 0;
}
Output
8
8 7 6 5 4
8 7 6 5 4
Tulis program untuk
menghitung nilai rerata sejumlah bilangan bulat yang diakhiri bilangan nol.
Bilangan nol tersebut bukan bagian dari data yang akan dihitung nilai rerata.
Sebagai contoh data masukan 15 78 36 29 44 0 jika di proses harus memberi hasil
40.4
Jumlah semua nilai
Rerata = jumlah nilai /
frekuensi.
Menjumlahkan 60 75 82 95
Ekspresi
|
0 + 60 + 75 + 82 + 95
|
60 + 75 + 82 + 95
|
135 + 82 + 95
|
217 + 95
|
312
|
Operan1
|
Operan 2
|
Hasil
|
0
|
60
|
60
|
60
|
75
|
135
|
435
|
82
|
217
|
217
|
95
|
312
|
Hasil pada tahap menjadi
operan1 pada tahap berikutnya.
Hasil ç operan1 + operan2
Hasil ç hasil + operan2
Hasil_jumlah ç 0
n ç 0
baca bil
ulangi selama bil != 0
Hail_jumlah ç hasil_jumlah + bil
n ç n + 1
baca bil
akhir pengulangan
rerata ç hasil_jumlah / n
cetak rerata
n ç 0
baca bil
ulangi selama bil != 0
Hail_jumlah ç hasil_jumlah + bil
n ç n + 1
baca bil
akhir pengulangan
rerata ç hasil_jumlah / n
cetak rerata
int main () {
int bil, jumlah, n;
float rerata;
jumlah = 0;
n = 0;
scanf (“%d”, &bil);
while (bil !=0){
jumlah += bil;
n++;
scanf (“%d”, &bil);
}
rerata = (float) jumlah /n;
printf(“rerata = %.lf\n”, rerata);
return 0;
}
int bil, jumlah, n;
float rerata;
jumlah = 0;
n = 0;
scanf (“%d”, &bil);
while (bil !=0){
jumlah += bil;
n++;
scanf (“%d”, &bil);
}
rerata = (float) jumlah /n;
printf(“rerata = %.lf\n”, rerata);
return 0;
}
Output :
15 78 36 29 44 0
rerata = 40.4
rerata = 40.4
60 75 82 95 0
rerata = 78.0
rerata = 78.0
INSTRUKSI DO WHILE
do statement while (expression);
kerjakan sttm
evaluasi expr
jika true maka
kerjakan sttm
evaluasi expr
jika true maka
kerjakan sttm
evaluasi expr
evaluasi expr
jika true maka
kerjakan sttm
evaluasi expr
jika true maka
kerjakan sttm
evaluasi expr
ulangi
kerjakan sttm
selama expr bernilai true
kerjakan sttm
selama expr bernilai true
Contoh:
Tulis program untuk
mengubah bilangan bulat ositif desimal menjadi bilangan biner (basis dua).
Cara proses: cara ini
mendapatkan bit mulai dari yang terakhir (terkanan) sehingga semua bit harus di
simpan dahulu sampai didapatkan bit pertama (terkiri).
baca desimal
pembagi ç 10737471824
ulangi selama pembagi > desimal
pembagi ç pembagi /2
akhir pengulangan
ulangi bit ç desimal / pembagi
cetak bit
desimal ç desimal modulus pembagi
pembagi ç pembagi / 2
selama pembagi >= 1
pembagi ç 10737471824
ulangi selama pembagi > desimal
pembagi ç pembagi /2
akhir pengulangan
ulangi bit ç desimal / pembagi
cetak bit
desimal ç desimal modulus pembagi
pembagi ç pembagi / 2
selama pembagi >= 1
int main () {
long desimal, pembagi, bit;
scanf (“%ld”, &desimal);
pembagi = 1073741824;
while (pembagi > desimal) pembagi /=2;
do {
bit =desimal / pembagi;
printf (“%ld”, bit);
desimal = desimal %pembagi;
pembagi /=2;
} while (pembagi >= 1);
return 0;}
long desimal, pembagi, bit;
scanf (“%ld”, &desimal);
pembagi = 1073741824;
while (pembagi > desimal) pembagi /=2;
do {
bit =desimal / pembagi;
printf (“%ld”, bit);
desimal = desimal %pembagi;
pembagi /=2;
} while (pembagi >= 1);
return 0;}
Output
22
10110
10110
1024
10000000000
10000000000
INFINITE LOOP
-
Pengulangan
tanpa akhir
-
for (;;)
-
for (;1;)
-
while (1)
do while (1)
do while (1)
BREAK dan CONTINUE
-
break
o
keluar dari
proses switch.
o
Keluar dari
proses pengulangan for, while, do
-
Continue
o
Poses pindah
ke akhir pengulangan for, while, do while
o
Memulai lagi
dengan instruksi pertama di dalam pengulangan.
break
for ( . . . ) {
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
}
instruksi_4;
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
}
instruksi_4;
while ( . . . ) {
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
}
instruksi_4;
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
}
instruksi_4;
do ( . . . ) {
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
} while ( . . . )
instruksi_4;
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
} while ( . . . )
instruksi_4;
continue
for ( . . . ) {
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}
while ( . . . ) {
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}
do ( . . . ) {
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
} while ( . . . );
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
} while ( . . . );
//rerata nilai, 0
tanda data habis
int main () {
int bil, jumlah = 0, n = 0;
float rerata;
do {
scanf(“%d”, &bil);
if (bil == 0) break;
jumlah += bil;
n++;
} while (1); //infinite loop
rerata = (float) jumlah /n;
printf(“rerata = %lf\n”, rerata);
return 0;
}
int main () {
int bil, jumlah = 0, n = 0;
float rerata;
do {
scanf(“%d”, &bil);
if (bil == 0) break;
jumlah += bil;
n++;
} while (1); //infinite loop
rerata = (float) jumlah /n;
printf(“rerata = %lf\n”, rerata);
return 0;
}
Output
23
rerata = 23.0
rerata = 23.0
15 78 36 29 44 0
rerata = 40.4
rerata = 40.4
Tidak ada komentar:
Posting Komentar