Iterasi (Bag 2)
description
Transcript of Iterasi (Bag 2)
1
Iterasi (Bag 2)
2
Topik
• Loop tak berhingga• while dan for• Macro
• Input dr file
• Contoh-contoh
– HitungKonvok
– Faktor
3
Loop tak berhingga
while ( 1 ) { ...etc...etc...etc... }
for ( ; 1 ; ) { ...etc...etc...etc... }
for ( ; ; ) { ...etc...etc...etc... }
4
Loop tak berhingga
while ( 1 ) { ...etc...etc...etc... }
for ( ; 1 ; ) { ...etc...etc...etc... }
for ( ; ; ) { ...etc...etc...etc... }
Gunakan :
if ( condition ) { break; }
statement utk keluar loop
5
while (1) { printf(“Masukan batas (low high): "); scanf("%d %d", &low, &high);
if ((low >= 0) && (high <= 127) && (low < high)) { break; } else { printf(“Batas jelek. Coba lagi.\n"); } }
Contoh: asciiCheck.c
6
while (1) { printf("Masukan batas (low high): "); scanf("%d %d", &low, &high);
if ((low >= 0) && (high <= 127) && (low < high)) { break; } else { printf("Batas jelek. Coba lagi.\n"); } }
Contoh: asciiCheck.c
7
while dan for
• for loop dapat ditulis sebagai while loop, dan sebaliknya.
• Statement continue dlm for loop mengirimkan kontrol ke ekspresi yang di “update”.
8
Contoh: asciiPrintCetak tabel ASCII
Untuk tiap character dari batas bawah hingga batas atas{ print niai tabel ascii dan karakter ascii }
for ( ch = low; ch <= high; ch++ ) { printf("%d: %c\n", ch, ch); } asciiPrint1.c
ch = low; while ( ch <= high ) { printf("%d: %c\n", ch, ch); ch++; } asciiPrint2.c
9
for ( ch = low; ch <= high; ch++ ) { printf("%d: %c\n", ch, ch); } ch = low; while (1) { printf("%d: %c\n", ch, ch); if (ch < high) { ch++; continue; } else { break; } } asciiPrint3.c
asciiPrint1.c
Contoh: asciiPrint (cont)
10
for ( ch = low; ch <= high; ch++ ) { printf("%d: %c\n", ch, ch); }
ch = low; for (;;) { printf("%d: %c\n", ch, ch); ch++; if (ch > high) { break; } }
asciiPrint4.c
Contoh: asciiPrint (cont)
asciiPrint1.c
11
while (1) { printf("Masukan batas (low high): "); scanf("%d %d", &low, &high);
if ((low >= MIN) && (high <= MAX) && (low < high)) { break; } else { printf("Batas jelek. Coba lagi.\
n"); } }
for (ch=low; ch <= high; ch++) { printf("%d: %c\n", ch, ch); }
return 0;}
Contoh: ascii1.c
#include <stdio.h>
/*Cetak bagian tabel ASCII */
#define MIN 0#define MAX 127
int main(){ int low, high; char ch;
12
while (1) { printf("Masukan batas (low high): "); scanf("%d %d", &low, &high);
if ((low >= MIN) && (high <= MAX) && (low < high)) { break; } else { printf("Batas jelek. Coba lagi.\
n"); } }
for (ch=low; ch <= high; ch++) { printf("%d: %c\n", ch, ch); }
return 0;}
#include <stdio.h>
/* Cetak bagian tabel ASCII */
#define MIN 0#define MAX 127
int main(){ int low, high; char ch;
Contoh: ascii1.c (lanj)
13
while (1) { printf("Masukan batas (low high): "); scanf("%d %d", &low, &high);
if ((low >= MIN) && (high <= MAX) && (low < high)) { break; } else { printf("Batas jelek. Coba lagi.\
n"); } }
for (ch=low; ch <= high; ch++) { printf("%d: %c\n", ch, ch); }
return 0;}
#include <stdio.h>
/* Cetak bagian tabel ASCII
the ASCII table */
#define MIN 0#define MAX 127
int main(){ int low, high; char ch;
Definisi Macro :
#define identifier tokensSemua subsequent dari identifier (MIN,MAX) diganti dengan token ini (0,127)
Contoh: ascii1.c (cont)
14
Contoh 1: HitungKonvok
• Menghitung jumlah konsonan dan vokal dalam suatu file.
• Yang bukan alfabet tidak dihitung
15
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm
16
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm (lanj)
17
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm (lanj)
18
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm (lanj)
19
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm (lanj)
20
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Algorithm (lanj)
21
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Baca input dr file?
Algorithm (lanj)
22
Buka file sbg inputset Hitkons ke 0set HitVok ke 0loop{ input ch if (end of file) { exit loop }
if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons }}close fileoutput Hitkons, HItvok
Pertama, implement asikan dengan input dr stream stdin.
Sekali berjalan, modifikasi utk
mengambil input dari file.
Algorithm (lanj)
23
#include <stdio.h>
int main(){ int Hitkons, Hitvok; char ch ;
Hitkons = 0 ; Hitvok = 0 ;
printf("\nInput ada %d konsonan dan%d vokal.\n", Hitkons, Hitvok) ;
return 0;}
Program
24
Hitkons = 0 ; Hitvok = 0 ; /* tiap character dlm file, di test apakah sebuah konsonan atau
vokal, dan sesuaikan dg jumlah total */
while ( scanf("%c", &ch) != EOF ) {
}
printf("\nInput ada %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
Program
25
/* tiap character dlm file, di test apakah sebuah konsonan atau vokal, dan sesuaikan dg jumlah total */ while ( scanf("%c", &ch) != EOF ) { if (ch == 'a' || ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U') { /* Vowel */ Hitvok++ ; } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { /* Konsonan, krn vokal sudah dihitung */ Hitkons++ ; } }
Program
26
#include <stdio.h>
/* hitung jml vokal dan konsonan dalm input file. */
int main(){ int Hitkons, Hitvok ; char ch ;
Hitkons = 0 ; Hitvok = 0 ;
/* tiap character dlm file, di test apakah sebuah konsonan atau vokal, dan sesuaikan dg jumlah total */
while ( scanf("%c", &ch) != EOF ) { if (ch == 'a' || ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U') { /* Vokal. */ Hitvok++ ; } else if ( (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ) { /* Konsonan. */ Hitkons++ ; } }
printf("\nInput ada %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
return 0;}
vowel1.c
Modifikasi utk menambil input dari
suatu file ?
27
#include <stdio.h>
int main(){ int Hitkons, Hitvok ; char ch ;
Hitkons = 0 ; Hitvok = 0 ;
printf("\nFile ada %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
return 0;}
while ( scanf("%c", &ch) != EOF ){
}
...etc...etc...etc...
28
Input file stream (“file pointer”)
#include <stdio.h>
int main(){ FILE *inputFile ; int Hitkons, Hitvok ; char ch ;
Hitkons = 0 ; Hitvok = 0 ;
inputFile = fopen("yourFile.txt", "r") ;
printf("\nFile ada %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
fclose(inputFile) ; return 0;}
while ( fscanf(inputFile, "%c", &ch) != EOF ){
}
...etc...etc...etc...
29
#include <stdio.h>
int main(){ FILE *inputFile ; int Hitkons, Hitvok ; char ch ;
Hitkons = 0 ; Hitvok = 0 ;
inputFile = fopen(“fileanda.txt", "r") ;
printf("\nFile has %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
fclose(inputFile) ; return 0;}
while ( fscanf(inputFile, "%c", &ch) != EOF ){
}
...etc...etc...etc...
Deklarasi file pointer
Buka file utk input
Baca input dr file
Tutup file
30
#include <stdio.h>/* Hitung jml vokal dan konsonan dalam suatu file. */
int main(){ FILE *inputFile ; int Hitkons, Hitvok ; char ch ;
inputFile = fopen(“fileanda.txt", "r") ;
Hitkons = 0 ; Hitvok = 0 ;
/* tiap character dlm file, di test apakah sebuah konsonan atau vokal, dan sesuaikan dg jumlah total */
while ( fscanf(inputFile, "%c", &ch) != EOF ) { if (ch == 'a' || ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U') { /* Vokal. */ Hitvok++ ; } else if ( (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ) { /* Konsonan. */ Hitkons++ ; } }
printf("\nFile ada %d konsonan dan %d vokal.\n", Hitkons, Hitvok) ;
fclose(inputFile) ;
return 0;}
vowel2.c
Lebih jauh dg file input/output dlm
kuliah selanjutnya
31
Contoh 2: Faktorisasi
• Tulis program utk mencetak faktorisasi bilangan prima (bil 2 sbg bil prima pertama )
• Contoh,
pd input 6, outputnya adalah: 2 3
" " 24, " " : 2 2 2 3
" " 14, " " : 2 7
" " 23, " " : 23 (23 adl prima)
32
input n
set factor to 2
Algorithm
33
input n
set factor to 2
while(factor sudah di uji){
}
Algorithm (lanj)
34
input n
set factor to 2
while(factor sudah di uji){ if (n dpt di bagi oleh faktor) { output factor set n ke n / factor }
}
Algorithm (lanj)
35
input n
set factor to 2
while(factor sudah di uji){ if (n dpt di bagi oleh faktor) { output factor set n to n / factor } else { increment factor }}
Algorithm (lanj)
36
input n
set factor to 2
while(factor sudah di uji){ if (n dpt di bagi oleh faktor) { output factor set n to n / factor } else { increment factor }}
while(factor sudah di uji){ if (n dpt di bagi oleh faktor) { output factor set n to n / factor }
increment factor}
Algorithm (lanj)
Kenap tidak?
37
#include <stdio.h>
/* Cetak faktor bilangan prima */
int main(){ int n, factor ;
return 0;}
Program
38
#include <stdio.h>
/* Cetak faktor bilangan prima */
int main(){ int n, factor ;
printf("\nMasukan integer: ") ; scanf("%d", &n) ;
return 0;}
Program (lanj)
39
#include <stdio.h>
/* Cetak faktor bilangan prima */
int main(){ int n, factor ;
printf("\nMasukan integer: ") ; scanf("%d", &n) ;
printf("\nFaktor Prima dari %d adalah: ", n) ;
/* Coba tiap kemungkinan faktor */
printf("\n\n"); return 0;}
Program (cont)
40
/* Coba tiap kemungkinan faktor */
factor = 2; while ( factor <= n && n > 1 ) {
}
41
/* Coba tiap kemungkinan faktor */
factor = 2; while ( factor <= n && n > 1 ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor */
printf(" %d", factor) ; n = n / factor ; }
}
42
/* Coba tiap kemungkinan faktor */
factor = 2; while ( factor <= n && n > 1 ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya */
factor++ ; } }
43
/* Coba tiap kemungkinan faktor */
factor = 2; while ( factor <= n && n > 1 ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya */
factor++ ; } }
44
#include <stdio.h>
/* Cetak faktor bilangan prima */
int main(){ int n, factor ;
printf("\nMasukan integer: ") ; scanf("%d", &n) ;
printf("\nFaktor Prima dari %d adalah: ", n) ;
/* Coba tiap kemungkinan faktor */
factor = 2 while ( factor <= n && n > 1 ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor. */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya */
factor++ ; } } printf("\n\n"); return 0;}
factor1.c
45
/* Coba tiap kemungkinan faktor */
factor = 2; while ( factor <= n && n > 1 ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya */
factor++ ; } }
Rubah dari while-loop ke for-loop?
46
/* Coba tiap kemungkinan faktor */
for ( factor = 2; factor <= n && n > 1 ; ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya */
factor++ ; } }
47
#include <stdio.h>
/* Cetak faktor bilangan prima. */
int main(){ int n, factor ;
printf("\nMasukan integer: ") ; scanf("%d", &n) ;
printf("\nFaktor Prima dari %d adalah: ", n) ;
/* Coba tiap kemungkinan faktor. */
for ( factor = 2; factor <= n && n > 1 ; ) { if (n % factor == 0) { /* n adlh banyak faktor, ** Jd cetak faktor dan bagi n dg faktor. */
printf(" %d", factor) ; n = n / factor ; } else { /* n bukan faktor yg banyak; ** cari kemungkinan faktor selanjutnya. */
factor++ ; } } printf("\n\n"); return 0;}
factor2.c