Selasa, 10 Februari 2015

pertemuan ke lima struktur kendali pengulangan

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);


printf(“\npercobaan 3:\n”);
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
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;
}
Output
Percobaan1:
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;
}
output
Tabel Perkalian Lima
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
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;
}
Output
13 25
14 16 18 20 22 24
16 9
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.
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;}
Output
16 9
10 12 14 16
12 25
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 (...)

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;}

Output
3
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
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;}

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

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;}

Output
5
    *
   **
  ***
 ****
*****

INSTRUKSI WHILE
While (expression) statement;
Evaluasi expr
jika true maka kerjakan sttm
Ulangi selama expr bernilai true
kerjakan sttm
akhir pengulangan
Int main (){
unsigned n;
scanf”%u”,&n);
while (n > 3) {
printf (“%u “, n);
n--;
}
return 0;
}
Output
8
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
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;
}
Output :
15 78 36 29 44 0
rerata = 40.4
60 75 82 95 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
ulangi
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
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;}
Output
22
10110
1024
10000000000

INFINITE LOOP
-          Pengulangan tanpa akhir
-          for (;;)
-          for (;1;)
-          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;

while ( . . . ) {
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
}
instruksi_4;

do ( . . . ) {
instruksi_1;
if ( . . . )
break;
instruksi_2;
instruksi_3;
} while ( . . . )
instruksi_4;

continue
for ( . . . ) {
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}

while ( . . . ) {
instruksi_1;
if ( . . . )
continue;
instruksi_2;
instruksi_3;
}

do ( . . . ) {
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;
}
Output
23
rerata = 23.0

15 78 36 29 44 0
rerata = 40.4

Tidak ada komentar:

Posting Komentar