470 likes | 558 Views
Iterasi (Bag 2). Topik. Loop tak berhingga while dan for Macro Input dr file Contoh-contoh HitungKonvok Faktor. Loop tak berhingga. while ( 1 ) { ...etc...etc...etc... }. for ( ; 1 ; ) { ...etc...etc...etc... }. for ( ; ; ) { ...etc...etc...etc... }.
E N D
Topik • Loop tak berhingga • while dan for • Macro • Input dr file • Contoh-contoh • HitungKonvok • Faktor
Loop tak berhingga while ( 1 ) { ...etc...etc...etc... } for ( ; 1 ; ) { ...etc...etc...etc... } for ( ; ; ) { ...etc...etc...etc... }
Loop tak berhingga while ( 1 ) { ...etc...etc...etc... } Gunakan : if ( condition ) { break; } statement utk keluar loop for ( ; 1 ; ) { ...etc...etc...etc... } for ( ; ; ) { ...etc...etc...etc... }
Contoh:asciiCheck.c 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 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"); } }
while dan for • for loop dapat ditulis sebagai while loop, dan sebaliknya. • Statement continue dlm forloop mengirimkan kontrol ke ekspresi yang di “update”.
Contoh: asciiPrint Cetak 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
Contoh: asciiPrint (cont) for ( ch = low; ch <= high; ch++ ) { printf("%d: %c\n", ch, ch); } asciiPrint1.c ch = low; while (1) { printf("%d: %c\n", ch, ch); if (ch < high) { ch++; continue; } else { break; } } asciiPrint3.c
Contoh: asciiPrint (cont) for ( ch = low; ch <= high; ch++ ) { printf("%d: %c\n", ch, ch); } asciiPrint1.c ch = low; for (;;) { printf("%d: %c\n", ch, ch); ch++; if (ch > high) { break; } } asciiPrint4.c
Contoh: ascii1.c 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;
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 (lanj) #include <stdio.h> /* Cetak bagian tabel ASCII */ #define MIN 0 #define MAX 127 int main() { int low, high; char ch;
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 (cont) #include <stdio.h> /* Cetak bagian tabel ASCII the ASCII table */ #define MIN0 #define MAX127 int main() { int low, high; char ch; Definisi Macro : #define identifier tokens Semua subsequent dariidentifier (MIN,MAX) diganti dengan token ini (0,127)
Contoh 1: HitungKonvok • Menghitung jumlah konsonan dan vokal dalam suatu file. • Yang bukan alfabet tidak dihitung
Algorithm Buka file sbg input set Hitkons ke 0 set HitVok ke 0 loop { input ch if (end of file) { exit loop } if (ch adl vokal) { increment Hitvok } else if (ch adl kons) { increment HItkons } } close file output Hitkons, HItvok
Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Baca input dr file? Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Pertama, implement asikan dengan input dr stream stdin. Sekali berjalan, modifikasi utk mengambil input dari file. Algorithm (lanj) Buka file sbg input set Hitkonske 0 set HitVokke 0 loop { input ch if (end of file) { exit loop } if (chadlvokal) { increment Hitvok } else if (chadlkons) { increment HItkons } } close file output Hitkons, HItvok
Program #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 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 /* tiap character dlm file, di test apakahsebuahkonsonanatauvokal, dansesuaikan 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, krnvokalsudahdihitung */ Hitkons++ ; } }
Modifikasi utk menambil input dari suatu file ? #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
#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...
#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; } Input file stream (“file pointer”) while ( fscanf(inputFile, "%c", &ch) != EOF ) { } ...etc...etc...etc...
#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; } Deklarasi file pointer Buka file utk input while ( fscanf(inputFile, "%c", &ch) != EOF ) { } ...etc...etc...etc... Baca input dr file Tutup file
Lebih jauh dg file input/output dlm kuliah selanjutnya #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
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)
Algorithm input n set factor to 2
Algorithm (lanj) input n set factor to 2 while(factor sudah di uji) { }
Algorithm (lanj) 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) 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) 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 } } Kenap tidak? while(factor sudah di uji) { if (n dpt di bagi oleh faktor) { output factor set n to n / factor } increment factor }
Program #include <stdio.h> /* Cetak faktor bilangan prima */ int main() { int n, factor ; return 0; }
Program (lanj) #include <stdio.h> /* Cetak faktor bilangan prima */ int main() { int n, factor ; printf("\nMasukan integer: ") ; scanf("%d", &n) ; return 0; }
Program (cont) #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; }
/* Coba tiap kemungkinan faktor */ factor = 2; while ( factor <= n && n > 1 ) { }
/* 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 ; } }
/* 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++ ; } }
/* 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++; } }
#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
Rubah dari while-loop ke for-loop? /* 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++ ; } }
/* 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++ ; } }
#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