Sabtu, 15 Maret 2014

Bagaimana program ini dapat menentukan kapan untuk menghentikan input nilai? Bagaimana akan tahu kapan untuk menghitung dan manampilkan rata-rata kelas? Salah satu cara untuk memecahkan masalah ini adalah dengan menggunakan nilai khusus yang disebut nilai sentinel untuk menunjukkan akhir entri data. Ketika kita ingin membuat sebuah perulangan tanpa batas, kita harus menentukan nilai sentinelnya, sehingga program tersebut akan berhenti ketika program tersebut mendapatkan inputan niali sentinel tersebut, dalam contoh ini kita akan menggunakan nilai -1 untuk menentukan nilai sentinel tersebut. Dengan demikian, run dari program rata-rata kelas mungkin memproses aliran input seperti 95 , 96 , 75 , 74 , 89 dan -1. Program ini kemudian akan menghitung dan mencetak rata-rata kelas untuk kelas 95 , 96 , 75 , 74 , dan 89 ( -1 adalah sentinel, jadi seharusnya tidak masuk ke dalam perhitungan rata-rata). 

Perhatikan bahwa hanya total dan penghitung yang perlu diinisialisasi, variabel rata-rata dan grade (untuk rata-rata dihitung dan input pengguna ) tidak perlu diinisialisasi karena nilai-nilai mereka akan ditulis alih oleh proses destruktif. Pernyataan pseudocode untuk input, sum, dan menghitung nilai rata-rata kita menggunakan struktur pengulangan (yaitu: loop).  Karena kita tidak tahu sebelumnya berapa banyak nilai harus diproses, kita akan menggunakan sentinel-controlled repetition. Pengguna akan mengetik nilai yang sah satu per satu. Setelah itu, pengguna akan ketik nilai sentinel, lalu program akan menghitung nilai rata-rata tersebut.
If the counter is not equal to zero
Set the average to the total divided by the counter

Print the average

Else

Print “No grades were entered”
Pada program diatas kita menghindari untuk melakukan perhitungan yang akan menyebabkan fatal error, yaitu dibagi dengan nol.

Meskipun program diatas hanya menerima inputan bertype integer, tapi dari inputan tersebut sangat memungkinkan untuk menghasilkan rata-rata asli dengan nilai decimal, type int tidak bisa mewakili nilai tersebut. Disini kita akan memperkenalkan type data float yang berguna untuk menampilkan nilai decimal kedalam layar. Dibawah ini adalah salah satu contoh program C dengan type float, program ini akan berhenti melakukan perulangan penginputan nilai ketika mendapatkan inputan bernilai -1:

1 /* Fig. 3.8: fig03_08.c

2 Class average program with sentinel-controlled repetition */

3 #include <stdio.h>

4/* function main begins program execution */

5

6 int main( void )

7 {

8 int counter; /* number of grades entered */

9 int grade; /* grade value */

10 int total; /* sum of grades */

11

12 float average; /* number with decimal point for average */

13

14 /* initialization phase */

15 total = 0; /* initialize total */

16 counter = 0; /* initialize loop counter */

17

18 /* processing phase */

19 /* get first grade from user */

20 printf( "Enter grade, -1 to end: " ); /* prompt for input */

21 scanf( "%d", &grade ); /* read grade from user */

22

23 /* loop while sentinel value not yet read from user */

24 while (grade != -1 ) {

25 total = total + grade; /* add grade to total */

26 counter = counter + 1; /* increment counter */

27

28 /* get next grade from user */

29 printf( "Enter grade, -1 to end: " ); /* prompt for input */

30 scanf("%d", &grade); /* read next grade */
31 } /* end while */
32

33 /* termination phase */

34 /* if user entered at least one grade */

35 if (counter != 0) {

36

37 /* calculate average of all grades entered */

38 average = ( float ) total / counter; /* avoid truncation */

39

40 /* display average with two digits of precision */

41 printf( "Class average is %f \n", average );

42 } /* end if */

43 else { /* if no grades were entered, output message */

44 printf( "No grades were entered\n" );

45 } /* end else */

46

47 return 0; /* indicate program ended successfully */

48 } /* end function main */
Program diatas akan menampilkan output seperti ini:


0 komentar:

Posting Komentar