Penggunaan loop sebagai kerangka dasar algoritma

50

Transcript of Penggunaan loop sebagai kerangka dasar algoritma

adalah sekelompok instruksi yang dikerjakan secara berulang-ulang

adalah suatu proses yang terjadi secara berulang-ulang

Contoh-1 :

Bila kedua program diatas dijalankan, (diRUN)maka keduanya akan tecetak:

JakartaJakartaJakartaJakartaJakartaSelesai

#include<iostream.h>void main(){int I; for(I=1; I<=5; I=I+1) { cout << "\nJakarta"; } cout << "\nSelesai";}

#include<iostream.h>void main(){int I; I=1; while( I<=5 ) { cout << "\nJakarta"; I = I + 1; } cout << "\nSelesai";}

for ( init; cond; chng of cond ) { - - - loop - - - }

Bentuk Umum

init;while ( cond ) { - - - loop - - - chng of cond }

cond = conditionSuatu pernyataan yang mengandung nilai BENAR (true) atau SALAH (False)

init = inisialisaiInstruksi pemberian suatu nilai yang mempengaruhi nilai condition. Pada proses yang normal, pemberian nilai awal ini akan menyebabkan condition bernilai true.Instruksi ini hanya pernah satu kali dilaksanakan, yaitu hanya pada saat awal

Chng of cond = Change of condition

Suatu instruksi yang dapat mempengaruhi nilai condition. Pada proses yang normal, perubahan nilai disini suatu saat akan membuat nilai condition = false

Loop adalah sekumpulan instruksi yang rencananya akan dikerjakan secara berulang-ulang

for ( init; cond; chng of cond ) { - - - loop - - - }

Bentuk Umum

init;while ( cond ) { - - - loop - - - chng of cond }

conditionfalse

true

------

initialization

Change Condition

------

Next instruction

Kerjakanloop

for ( init; cond; chng of cond ) { - - - loop - - - }

init;while ( cond ) { - - - loop - - - chng of cond }

false

true

initialization

cond

Chg ofcond

Kerjakanloop

208

for ( init; cond; chng of cond ) { - - - loop - - - }

init;while ( cond ) { - - - loop - - - chng of cond }

cond

false

true

init

Chg ofconf

Kerjakanloop

208

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

}

}

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{

I=I+1;

}

}

for()

while()

looploop

Berapa Kali Loop Dikerjakan ?

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

}

}

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{

I=I+1;

}

}

for()

while()

looploop

Jawab : 5 kali

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout << “\nJakarta” ;

}

}

#include<iostream.h>void main(){ int I; I = 1; while(I<=5) { cout << “\nJakarta”; I=I+1; }}

for()while()

Apa yang tercetak bila programdiatas dikerjakan

211

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout << “\nJakarta” ;

}

}

#include<iostream.h>void main(){ int I; I = 1; while(I<=5) { cout << “\nJakarta”; I=I+1; }}

for()while()

Tercetak :

211

JakartaJakartaJakartaJakartaJakarta

Tercetak : JakartaJakartaJakartaJakartaJakarta

Contoh-2 :

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout << "\n" << I;

}

}

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{

cout << "\n" << I;

I=I+1;

}

}

for()

while()

211

Apa yang tercetak bila programdiatas dijalankan

Contoh-3 :

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout << "\n" << I;

}

}

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{

cout << "\n" << I;

I=I+1;

}

}

for()

while()

Tercetak : 12345

211

I

1

2

3

4

5

6

1

2

3

4

5

Tercetak

Tercetak : 12345

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout << "\n" << I;

}

}

for()

Tercetak : 12345

I<=5

I = 1

I = I+1

printf I

false

true

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{cout << "\n" << I;

}

}

I<=5

I = 1

I = I+1

print I

false

true

for()Tercetak : 1 2 3 4 5

Perkembangan nilai I

nilai

I

Kondisi

I <= 5

Tercetak oleh

cout << I

Oleh I=I+1

nilai I menjadi:

1

2

3

4

5

6

True

True

True

True

True

False

1

2

3

4

5

Keluar dari loop

2

3

4

5

6

211

Tercetak : 1 2 3 4 5

Perkembangan nilai I

nilai

I

Kondisi

I <= 5

Tercetak oleh

cout << I

Oleh I=I+1

nilai I menjadi:

1

2

3

4

5

6

True

True

True

True

True

False

1

2

3

4

5

Keluar dari loop

2

3

4

5

6

#include<iostream.h>void main(){ int I; I = 1; while(I<=5)

{cout << "\n" << I; I=I+1; }}

while()

I<=5

I = 1

I = I+1

print I

false

true

211

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{ cout << "\n" << I;

}

} I<=5

I = 1

I = I+1

print I

false

true

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{ cout << "\n" << I;

I=I+1; }

}

for()

while()

211

I<=5

false

true

I = 1

I=I+1

print I

false

true

I = 1

I<=5

print I

I=I+1

I<=5

I = 1

I=I+1

print I

false

true

#include<iostream.h>

void main()

{ int I;

for ( I=1 ; I<=5 ; I=I+1 ) { cout << "\n" << I; }}

Perhatikan kembali Contoh-1 sebelumnyasebagai berikut :

Buku literatur selalu

menggunakan I++

untuk I = I+1

for()

for()

#include<iostream.h>

void main()

{ int I;

for ( I=1 ; I<=5 ; I++ ) { cout << "\n" << I; }} 212

#include<iostream.h>void main(){ int I; for ( I=1 ; I<=5 ; I=I+1 ) { cout << "\n" << I; }}

Beberapa Cara penulisan loop dengan for( ) untuk Contoh-1 diatas, yang menghasilkan efek yang sama :

{ int I;

for ( I=1 ; I<=5 ; I++ ) cout << "\n" << I;}

Bila instruksi dalam loop hanya ada 1 instruksi, maka boleh tidak diapit oleh tanda kurung.

{ int I;

for(I=1; I<=5; I++) cout << "\n" << I;

}

Loop boleh langsung ditulis pada baris yang sama dengan for().

212

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{cout <<"\n"<< I;

I++;

}

}

while()

Perhatikan kembali loop dengan while sebagai berikut:

#include<iostream.h>

void main()

{ int I;

I = 1;

while(I<=5)

{cout <<"\n"<< I++;

}

}

dapat ditulis menjadi:

213

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout <<“\n ” << I*2;

}

}

#include<iostream.h>void main()

{ int I;

I = 1;

while(I<=5)

{

cout <<“\n ” << I*2; I=I+1;

}

}

for()while()

Apa yang tercetak bila programdiatas dikerjakan

Contoh-4 :

#include<iostream.h>

void main()

{ int I;

for(I=1; I<=5; I=I+1)

{

cout <<“\n ” << I*2;

}

}

#include<iostream.h>void main()

{ int I;

I = 1;

while(I<=5)

{

cout <<“\n ” << I*2; I=I+1;

}

}

for()while()

Tercetak : 246810

Tercetak : 246810

Perkembangan nilai I

nilai

I

Kondisi

I <= 5

Tercetak oleh

Cout << I*2

Oleh I=I+1

nilai I menjadi:

1

2

3

4

5

6

True

True

True

True

True

False

2

4

6

8

10

Keluar dari loop

2

3

4

5

6

#include<iostream.h>void main(){ int I; for(I=1; I<=5; I=I+1) { cout <<“\n ” << I*2; }}

#include<iostream.h>void main(){ int I; I = 1; while(I<=5) { cout <<“\n ” << I*2; I=I+1; }}

for() while()

Perhatikan : 15

A

cout << A+2;

Akan mencetak : 17Tapi isi variabel A tidak berubah

#include<iostream.h>void main(){ int I, N; N = 8; for(I=1; I<=5; I=I+1) { cout << N; N = N + 2; }}

#include<iostream.h>void main(){ int I, N; N = 8; I = 1; while(I<=5) { cout << N; N = N + 2; I=I+1; }}

for()

while()

Apa yang tercetak bila programdiatas Dilaksanakan

Contoh-5 :

#include<iostream.h>void main(){ int I, N; N = 8; for(I=1; I<=5; I=I+1) { cout << N; N = N + 2; }}

#include<iostream.h>void main(){ int I, N; N = 8; I = 1; while(I<=5) { cout << N; N = N + 2; I=I+1; }}

for()

while()

Tercetak : 810121416

Tercetak : 810121416

#include<iostream.h>void main(){ int I, N; N = 8; for(I=1; I<=5; I=I+1) { cout << N; N = N + 2; }}

#include<iostream.h>void main(){ int I, N; N = 8; I = 1; while(I<=5) { cout << N; N = N + 2; I=I+1; }}

for() while()

Perkembangan nilai I

nilai

I

Kondisi

I <= 5

Tercetak oleh

cout << N

Oleh I=I+1

nilai I menjadi:

1

2

3

4

5

6

True

True

True

True

True

False

8

10

12

14

16

Keluar dari loop

2

3

4

5

6

NOleh N=N+2

nilai N menjadi:

10

12

14

16

18

8

10

12

14

16

18

Soal Susun Algoritma yang ditulis dalam Bahasa C++ untuk mencetak 10 suku pertama deret berikut ini :

1, 2, 3, 4, 5, . . . . . . . . .

#include<iostream.h>

void main()

{ int I;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << I ;

}

}

Bila algoritma benar, maka

tercetak :

12345678910

Cara-1 I

1234567891011

Tercetak :

12345678910

I terakhir nilainya = 11,Tapi tidak ikut dicetak

Karena sudah keluar dari loop

#include<iostream.h>

void main()

{ int I,N;

for( I=1; I<=10; I=I+1 )

{ N = I;

cout << “\n” << N ;

}

}

Cara-2

#include<iostream.h>

void main()

{ int I,N;

N = 1;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << N ;

N = N + 1;

}

}

Cara-3I N

1234567891011

12345678910

I N

12345678910

11

12345678912

11

Nilai N pernah = 11tapi tidak ikut dicetak

karena sudah keluar dari loop

N awalnya =1dan selalu ditambah 1

Perkembangan nilai I

nilai

I

Kondisi

I <= 10

Tercetak oleh

Cout << N

Oleh I=I+1

nilai I menjadi:

1

2

3

4

5

6

7

8

9

10

11

True

True

True

True

True

True

True

True

True

True

False

1

2

3

4

5

6

7

8

9

10

Keluar dari loop

2

3

4

5

6

7

8

9

10

11

NOleh N=N+1

nilai N menjadi:

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

Soal Susun Algoritma yang ditulis dalam Bahasa C++ untuk mencetak 10 suku pertama deret berikut ini :

1, 3, 5, 7, 9, . . . . . . . . .

#include<iostream.h>

void main()

{ int I;

for( I=1; I<=19; I=I+2 )

{ cout << “\n” << I ;

}

}

Bila algoritma benar, maka

tercetak :

135791113151719

Cara-1 I

13579111315171921

Tercetak :

135791113151719

I terakhir nilainya = 21,Tapi tidak ikut dicetak

Karena sudah keluar dari loop

#include<iostream.h>

void main()

{ int I,N;

for( I=1; I<=10; I=I+1 )

{ N = I * 2 - 1;

cout << “\n” << N ;

}

}

Cara-2

#include<iostream.h>

void main()

{ int I,N;

N = 1;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << N ;

N = N + 2;

}

}

Cara-3I N

1234567891011

135791113151719

I N

12345678910

11

135791113151719

21

Nilai N pernah = 21tapi tidak ikut dicetak

karena sudah keluar dari loop

N awalnya =1dan selalu ditambah 2

Soal Susun Algoritma yang ditulis dalam Bahasa C++ untuk mencetak 10 suku pertama deret berikut ini :

1, 2, 4, 8, 16, . . . . . . . . .

#include<iostream.h>

void main()

{ int I;

for( I=1; I<=512; I=I*2 )

{ cout << “\n” << I ;

}

}

Bila algoritma benar, maka

tercetak :

1248163264128256512

Cara-1 I Tercetak :

1248

1632641282565121024

1248163264128256512

#include<iostream.h>

#include<math.h>

void main()

{ int I,N;

for( I=1; I<=10; I=I+1 )

{ N = pow(2,(I-1));

cout << “\n” << N ;

}

}

Cara-2

#include<iostream.h>

void main()

{ int I,N;

N = 1;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << N ;

N = N * 2;

}

}

Cara-3I N

1234567891011

I N

1234567891011

1248163264128256512

pow(2, (I-1)) Maksudnya 2 pangkat (I-1)

Agar dapat menggunakan fungsi

matematik pow (power), harus

menambah : # include<math.h>

12481632641282565121024

Nilai N pernah = 1024tapi tidak ikut dicetak

karena sudah keluar dari loop

N awalnya =1dan selalu dikali 2

Soal Susun Algoritma yang ditulis dalam Bahasa C++ untuk mencetak 10 suku pertama deret berikut ini :

5, 8, 11, 14, 17, . . . . . . . . .

#include<iostream.h>

void main()

{ int I;

for( I=5; I<=32; I=I+3 )

{ cout << “\n” << I ;

}

}

Bila algoritma benar, maka

tercetak :

581114172023262932

Cara-1 I Tercetak :

58111417202326293235

581114172023262932

#include<iostream.h>

void main()

{ int I,N;

for( I=1; I<=10; I=I+1 )

{ N = I*3 + 2 ;

cout << “\n” << N ;

}

}

Cara-2

#include<iostream.h>

void main()

{ int I,N;

N = 5;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << N ;

N = N + 3;

}

}

Cara-3I N

1234567891011

I N

1234567891011

581114172023262932

58111417202326293235N awalnya = 5

dan selalu ditambah 3

Nilai N pernah = 35tapi tidak ikut dicetak

karena sudah keluar dari loop

Soal Susun Algoritma yang ditulis dalam Bahasa C++ untuk mencetak 10 suku pertama deret berikut ini :

5, 8, 13, 20, 29, 40, . . . . . . .

#include<iostream.h>

void main()

{ int I, X;

X = …. ;

for( I=1; I<=104; I=I+3 )

{ cout << “\n” << I ;

I = I + X;

X = X + …. ;

}

}

Bila algoritma benar, maka

tercetak :

5813202940536885104

Cara-1I Tercetak :

5813202940536885104125

5813202940536885104

5 8 13 20 29 40 53 .. .. ..

+3 +5 +7 +9 +11 +13

#include<iostream.h>

void main()

{ int I,N ;

for( I=1; I<=10; I=I+1 )

{ N = I*I + 4 ;

cout << “\n” << N ;

}

}

Cara-2

#include<iostream.h>

void main()

{ int I,N, X;

N = 5;

X = 3;

for( I=1; I<=10; I=I+1 )

{ cout << “\n” << N ;

N = N + X;

X = X + 2;

}

}

Cara-3I N

1234567891011

I N

1234567891011

5 8 13 20 29 40 53 .. .. ..

5813202940536885104

5813202940536885104125

1 2 3 4 5 6 7I

N

X 3 5 7 9 11 13

Susun program untuk menginput 100 buah bilangan yang merupakan nilai ujian mahasiswa, kemudian cetak nilai tertinggi yang didapat mahasiswa .

{ int N, I, MAX;

cin >> N;

MAX = N;

for(I=2; I <= 100; I++)

{ cin >> N;

if(N > MAX)

MAX = N ;

}

cout << “Tebesar : “ << MAX;

}

Untuk pertama kali, nilai MAX dibuat sama dengan data pertama yang dibaca.

99 kali loop. (dari 2 sampai dengan 100).

Ilustrasi Proses :

Bilangan yangdiinput (N) : 75 72 75 82 64 82 74 82 66 87 72 87 68 . .

75 -- -- 82 -- -- -- -- -- -- -- 87 -- -- -- . .

Seriap kali loop :Bila nilai yang baru diinput lebih besar dari MAX, maka nilai MAX diganti dengan nilai yang baru.

Soal

Nilai MAX :

Terakhir cetak MAX

Susun program untuk menginput 10 buah bilangan yang merupakan nilai ujian mahasiswa, kemudian cetak nilai tertinggi yang didapat mahasiswa , serta mencetak ada berapa orang mahasiswa yang mendapat nilai tertinggi tersebut :

Soal

Bila diinput :

15 12 15 10 15 17 25 17 25 13

Seharusnya tercetak :

Nilai terbesar : 25Jum Mahasiswa : 2

15 12 15 10 15 17 25 17 25 13

Konsep Proses :

1. Input 15

Data :

15MAX

115N Jum

Input pertama, isi MAX = N, dan Jum dibuat = 1

2. Input 12 15MAX

112N Jum

N=12 N tidak > MAX isi MAX tetap tidak diubah

N tidak == MAX, Jum tetap, tidak ditambah

3. Input 15 15MAX

215N Jum

N=15 N tidak > MAX isi MAX tetap, tidak diubah

Tapi, N == MAX, Jum ditambah 1

4. Input 10 15MAX

210N Jum

N=10 N tidak > MAX isi MAX tetap tidak diubah

N tidak == MAX, Jum tetap, tidak ditambah

5. Input 15 15MAX

315N Jum

N=15 N tidak > MAX isi MAX tetap, tidak diubah

Tapi, N == MAX, Jum ditambah 1

6. Input 17 17MAX

117N Jum

N=17 N > MAX isi MAX = N dan Jum = 1

15 12 15 10 15 17 25 17 25 13 Data :

9. Input 25 25MAX

225N Jum

N=15 N tidak > MAX isi MAX tetap, tidak diubah

Tapi, N == MAX, Jum ditambah 1

7. Input 25 25MAX

125N Jum

N=25 N > MAX isi MAX = N dan Jum = 1

17MAX

1Jum

8. Input 17 25MAX

117N Jum

N=17 N tidak > MAX isi MAX tetap tidak diubah

N tidak == MAX, Jum tetap, tidak ditambah

10. Input 13 25MAX

213N Jum

N=13 N tidak > MAX isi MAX tetap tidak diubah

N tidak == MAX, Jum tetap, tidak ditambah

Data habis : 25MAX

2Jum

Jadi dari 12 data yang diinput, Nilai terbesar = MAX = 25Dan jumlah mahasiswa yang mendapat nilai terbesar = Jum = 2

Konsep Proses :

1. Input pertama, simpan ke MAX dan Jum dibuat = 1.

2. Input ke N 9 kali.

Setiap kali input periksa :

Input ke : N

MAX menampung nilai terbesar

Jum menampung jumlah mahasiswa yang mempunyai nilai terbesarN MAX Jum

Proses :

Bila N > MAX Ganti nilai MAX dengan nilai N dan nilai Jum dibuat ulang = 1.

Bila N tidak lebih besar dari MAX,Periksa apakah N == MAX.

Bila N == MAX, Jum ditambah 1

3. Setelah selesai 9 kali input,Cetak MAX dan Jum

input

MAX=NJum=1

I<=10

print

N>MAX

MAX=NJum=1

N

I=2

input N

N==MAX

Jum=Jum+1

True

TrueFalse

END

I=I+1

False

END

#include<iostream.h> void main() { int N,I,MAX, Jum; cin >> N; MAX = N; Jum = 1; for(I=2; I <= 10; I++) { cin >> N; if(N > MAX) { MAX = N ;

Jum = 1; }

else if(N == MAX) Jum++; } cout << "\nTerbesar : " << MAX; cout << "\nJum Mhs : " << Jum;}

MAX,Jum

Susun program untuk menginput 10 buah bilangan yang merupakan nilai ujian mahasiswa, kemudian cetak nilai tertinggi yang didapat mahasiswa, serta mencetak ada berapa orang mahasiswa yang mendapat nilai tertinggi tersebut :

Soal