26 November 2014

C Program - Fungsi

Dalam C, fungsi setara dengan subroutine atau fungsi dalam Fortran, atau prosedur atau fungsi di Pascal. Fungsi menyediakan cara yang nyaman untuk merangkum beberapa perhitungan, yang kemudian dapat digunakan tanpa khawatir tentang pelaksanaannya. Dengan fungsi yang dirancang dengan baik, adalah mungkin untuk mengabaikan bagaimana pekerjaan dilakukan; mengetahui apa yang dilakukan sudah cukup. C membuat menuntut fungsi yang mudah, convinient dan efisien; Anda akan sering melihat fungsi pendek ditetapkan dan disebut hanya sekali, hanya karena menjelaskan beberapa potongan kode.
Sejauh ini kita telah menggunakan hanya fungsi seperti printf, getchar dan putchar yang telah disediakan untuk kita; sekarang saatnya untuk menulis beberapa kita sendiri. Karena C tidak memiliki operator yang eksponensial seperti ** Fortran, mari kita menggambarkan mekanisme definisi fungsi dengan menulis kekuatan fungsi (m, n) untuk menaikkan integer m untuk kekuatan bilangan bulat positif n. Artinya, nilai kekuasaan (2,5) adalah 32. Fungsi ini tidak rutin eksponensial praktis, karena hanya menangani kekuatan positif bilangan bulat kecil, tapi itu cukup baik untuk ilustrasi. (The perpustakaan standar berisi fungsi pow (x, y) yang menghitung xy.)
Berikut adalah kekuatan fungsi dan program utama untuk latihan, sehingga Anda dapat melihat seluruh struktur sekaligus.

#include
int power(int m, int n);
/* test power function */
main()
{
int I;
for(i=0; i<10 i="" p="">printf(ā€œ%d %d %d\nā€, I, power(2,i), power(-3,i));
return 0;
}
/* power: raise base to n-th power; n>=0 */

int power(int base, int n)
{
int I, p;
p=1;
for(i=1; i<=n; ++i)
p=p*base;
return p;
}

Definisi fungsi memiliki formulir ini:
kembali-jenis fungsi-nama (deklarasi parameter, jika ada)

{
deklarasi pernyataan
}

Definisi fungsi dapat muncul dalam urutan apapun, dan dalam satu file sumber atau beberapa, meskipun tidak ada fungsi dapat dibagi antara file. Jika program sumber muncul dalam beberapa file, Anda mungkin harus mengatakan lebih untuk mengkompilasi dan beban daripada jika itu semua muncul dalam satu, tapi itu adalah sistem operasi materi, bukan atribut bahasa. Untuk saat ini, kami akan menganggap bahwa kedua fungsi dalam file yang sama, jadi apa pun yang telah Anda pelajari tentang menjalankan program C akan tetap bekerja.
Fungsi power dipanggil dua kali oleh main, di baris

printf("%d %d %d\n", i, power(2,i), power(-3,i));

Setiap panggilan melewati dua argumen untuk power, yang setiap kali mengembalikan integer yang akan diformat dan dicetak. Dalam ekspresi, power(2, i) adalah bilangan bulat seperti 2 dan saya berada. (Tidak semua fungsi menghasilkan nilai integer, kami akan melakukan ini dalam Bab 4.)
Baris pertama power itu sendiri,

int power(int base, int n)

menyatakan jenis parameter dan nama, dan jenis hasil bahwa fungsi mengembalikan. Nama-nama yang digunakan oleh power untuk parameter lokal power, dan tidak terlihat oleh fungsi lainnya: rutinitas lainnya dapat menggunakan nama yang sama tanpa konflik. Hal ini juga berlaku dari variabel i dan p: i power tidak berhubungan dengan saya di main.
Kita umumnya akan menggunakan parameter untuk variabel yang disebutkan dalam daftar kurung dalam suatu fungsi. Istilah argumen formal dan argumen yang sebenarnya kadang-kadang digunakan untuk perbedaan yang sama.
Nilai daya yang menghitung dikembalikan to main dengan return: pernyataan. Ekspresi dapat mengikuti kembali:

return ekspresi;

Fungsi tidak perlu mengembalikan nilai; pernyataan kembali tanpa ekspresi menyebabkan kontrol, tapi tidak ada nilai yang berguna, harus dikembalikan ke pemanggil, seperti halnya `` jatuh dari ujung '' fungsi dengan mengakhiri mencapai penahan yang tepat. Dan panggilan fungsi dapat mengabaikan nilai yang dikembalikan oleh fungsi.
Anda mungkin telah memperhatikan bahwa ada pernyataan kembali pada akhir main. karena main adalah fungsi seperti yang lain, mungkin mengembalikan nilai ke pemanggil, yang berada dalam pengaruh lingkungan di mana program ini dijalankan. Biasanya, nilai kembali dari nol menyiratkan penghentian normal; nilai-nilai non-nol sinyal kondisi terminasi yang tidak biasa atau salah. Dalam kepentingan kesederhanaan, kami telah menghilangkan pernyataan return dari fungsi main kami sampai saat ini, tapi kami akan memasukkan mereka selanjutnya, sebagai pengingat bahwa program harus mengembalikan status lingkungan mereka.

Deklarasi

int power(int base, int n);

sebelum main mengatakan bahwa power adalah fungsi yang mengharapkan dua argumen int dan mengembalikan sebuah int. Deklarasi ini, yang disebut prototipe fungsi, harus setuju dengan definisi dan menggunakan power. Ini adalah kesalahan jika definisi fungsi atau kegunaan itu tidak setuju dengan prototipe.

nama parameter tidak perlu setuju. Memang, nama parameter adalah opsional dalam prototipe fungsi, jadi untuk prototipe kita bisa menulis

int power(int, int);

Nama yang dipilih adalah dokumentasi yang baik bagaimanapun, jadi kita akan sering menggunakannya.
Sebuah catatan sejarah: perubahan terbesar antara ANSI C dan versi sebelumnya adalah bagaimana fungsi dideklarasikan dan didefinisikan. Dalam definisi asli dari C, fungsi power akan ditulis seperti ini:

/* power: raise base to n-th power; n >= 0 */
/* (old-style version) */
power(base, n) int base, n;
{
int i, p;
p = 1;
for (i = 1; i <= n; ++i) p = p * base;
return p;
}

Parameter diberi nama antara kurung, dan jenis mereka dinyatakan sebelum membuka penahan kiri; parameter dideklarasikan diambil sebagai int. (Tubuh fungsi sama seperti sebelumnya.)
Deklarasi power pada awal program akan tampak seperti ini:

int power();

Tidak ada daftar parameter diizinkan, sehingga compiler tidak bisa dengan mudah memeriksa kekuatan yang dipanggil dengan benar. Memang, karena dengan power standar akan telah diasumsikan untuk mengembalikan int, seluruh deklarasi mungkin juga telah dihilangkan.

Sintaks baru dari fungsi prototipe membuat lebih mudah untuk compiler untuk mendeteksi kesalahan dalam jumlah argumen atau jenis mereka. Gaya lama deklarasi dan definisi masih bekerja di ANSI C, setidaknya untuk masa transisi, tapi kami sangat menyarankan agar Anda menggunakan bentuk baru ketika Anda memiliki kompiler yang mendukungnya.

Latihan Menulis ulang program konversi suhu menggunakan fungsi untuk konversi.

28 Oktober 2014

C Program - Menghitung Baris

Program berikutnya menghitung baris input. Seperti telah disebutkan di atas, perpustakaan standar memastikan bahwa aliran input teks muncul sebagai urutan baris, masing-masing diakhiri oleh baris baru. Oleh karena itu, menghitung garis hanya menghitung baris:

#include
/* count lines in input */
main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF) if (c == '\n')
++nl; printf("%d\n", nl);
}

Tubuh while sekarang terdiri dari if, yang pada gilirannya mengontrol kenaikan ++ nl. Jika pernyataan menguji kondisi kurung, dan jika kondisi benar, mengeksekusi pernyataan (atau kelompok pernyataan dalam kawat gigi) yang mengikuti. Kami telah kembali menjorok untuk menunjukkan apa yang dikendalikan oleh apa.
double Equals tanda == adalah notasi C untuk `` sama dengan '' (seperti Pascal tunggal = atau Fortran dunia .EQ.).
Simbol ini digunakan untuk membedakan ujian kesetaraan dari = tunggal yang menggunakan C untuk tugas. Sebuah kata dari hati-hati: pendatang baru ke C sesekali menulis = ketika mereka berarti ==. Seperti yang akan kita lihat dalam Bab 2, hasilnya biasanya ekspresi hukum, sehingga Anda akan mendapatkan tidak ada peringatan.
Sebuah karakter yang ditulis antara tanda kutip tunggal merupakan nilai integer sama dengan nilai numerik dari karakter dalam set karakter mesin. Ini disebut konstanta karakter, meskipun hanya cara lain untuk menulis bilangan bulat kecil. Jadi, misalnya, 'A' adalah konstanta karakter; dalam karakter ASCII set nilainya adalah 65, representasi internal dari karakter A. Tentu saja, 'A' yang akan disukai lebih dari 65: artinya jelas, dan itu tidak tergantung dari set karakter tertentu.
Urutan escape yang digunakan dalam konstanta string juga hukum dalam konstanta karakter, jadi '\ n' singkatan dari nilai karakter baris baru, yang 10 di ASCII. Anda harus mencatat dengan seksama bahwa '\ n' adalah karakter tunggal, dan dalam ekspresi hanya sebuah integer; di sisi lain, '\ n' adalah konstanta string yang terjadi hanya berisi satu karakter. Topik string dibandingkan karakter dibahas lebih lanjut dalam artikel lainnya.

Latihan. Tulis program untuk menghitung blank/kosong, tab, dan baris baru.
Latihan. Tulis program untuk menyalin input ke output-nya, menggantikan setiap string dari satu atau lebih kosong dengan kosong tunggal.

Latihan. Tulis program untuk menyalin input ke output-nya, menggantikan setiap tab dengan \ t, masing-masing backspace oleh \ b, dan masing-masing backslash oleh \\. Hal ini membuat tab dan backspaces terlihat dalam suatu cara yang jelas.

C Program - Menghitung karakter

#include
/* count characters in input; 1st version */ main()
{
long nc;
nc = 0;
while (getchar() != EOF)++nc;
printf("%ld\n", nc);
}

pernyataan
++ nc;
menyajikan operator baru, ++, yang berarti kenaikan per satu. Anda malah bisa menulis nc = nc + 1 tapi ++ nc lebih ringkas dan sering lebih efisien. Ada operator yang sesuai - untuk pengurangan dengan 1. Operator ++ dan - dapat berupa operator prefix (++ nc) atau operator postfix (nc ++); dua bentuk ini memiliki nilai yang berbeda dalam ekspresi, seperti akan ditunjukkan dalam artikel lain, tapi ++ nc dan nc ++ kedua nc kenaikan. Untuk saat ini kami akan akan menempel pada bentuk awalan.
Program menghitung karakter terakumulasi hitungan dalam variabel panjang bukan int. bilangan bulat panjang setidaknya 32 bit. Meskipun pada beberapa mesin, int dan panjang adalah ukuran yang sama, pada orang lain int adalah 16 bit, dengan nilai maksimum 32.767, dan itu akan mengambil relatif sedikit masukan meluap int counter. Spesifikasi konversi% ld Ia minta agar printf bahwa argumen yang sesuai adalah bilangan bulat panjang.
Dimungkinkan untuk mengatasi angka yang lebih besar dengan menggunakan ganda (float presisi ganda). Kami juga akan menggunakan untuk pernyataan bukannya sementara, untuk menggambarkan cara lain untuk menulis loop.

#include
/* count characters in input; 2nd version */ main()
{
double nc;
for (nc = 0; gechar() != EOF; ++nc);
printf("%.0f\n", nc);
}

printf menggunakan %f untuk kedua float dan double. %.0f Menekan pencetakan titik desimal dan bagian fraksi, yang adalah nol.
Tubuh ini untuk loop kosong, karena semua pekerjaan dilakukan dalam tes dan kenaikan bagian. Tapi aturan tata bahasa dari C akan meminta untuk pernyataan memiliki tubuh. Koma terisolasi, yang disebut pernyataan null, ada untuk memenuhi kebutuhan itu. Kami meletakkannya di baris terpisah untuk membuatnya terlihat.

Sebelum kita meninggalkan karakter program menghitung, amati bahwa jika input tidak mengandung karakter, sementara atau untuk tes gagal pada panggilan pertama untuk getchar, dan program menghasilkan nol, jawaban yang benar. Hal ini penting. Salah satu hal yang menyenangkan tentang sementara dan adalah bahwa mereka menguji di bagian atas loop, sebelum melanjutkan dengan tubuh. Jika tidak ada hubungannya, tidak ada yang dilakukan, bahkan jika itu berarti tidak akan melalui tubuh lingkaran. Program harus bertindak cerdas ketika diberi masukan nol-panjang. Sementara dan untuk laporan membantu memastikan bahwa program melakukan hal-hal yang wajar dengan kondisi batas.

1 Oktober 2014

Kord Padi Rapuh

Intro: Cmaj7 G (4x) 

  D                     F#m 
Kularut luruh dalam keheningan hatimu 
  Bm                     G         A 
Jatuh bersama derasnya tetes air mata 
    D                        F#m 
Kau benamkan wajahmu yang berteduhkan duka 
  Bm                  G       A 
Melagukan kepedihan didalam jiwamu 

Reff:  
D                       Bm 
Tak pernah terpikirkan olehku 
      Em                    F#7 
Untuk tinggalkan engkau seperti ini 
       D                     Bm 
Tak terbayangkan jikaku beranjak pergi 
    Em                      F#7 
Betapa hancur dan harunya hidupmu 

  D                        F#m 
Sebenarnya ku tak ingin berada disini 
  Bm                      G          A 
Ditempat jauh yang sepi memisahkan kita 
  D                   F#m 
Kuberharap semuanya pasti akan berbeda 
      Em            Bm          G     A 
Meski tak mungkin menumbuhkan jiwa itu lagi 

Reff:  
    D                       Bm 
Dan tak pernah terpikirkan olehku 
      Em                   F#7 
Untuk tinggalkan engkau seperti ini 
       D                     Bm 
Tak terbayangkan jikaku beranjak pergi 
    Em                      F#7 
Betapa hancur dan harunya hidupmu 

Interlude: Bm A F#m G F# (2x) 
           G Bm (2x) 

G               Bm 
Aku tak mengerti apa yang mungkin terjadi 
G             Bm             G 
Sepenuh hatiku aku tak mengerti

30 September 2014

The C Programing Langunge

Chapter 1 - A Tutorial Introduction 

Let us begin with a quick introduction in C. Our aim is to show the essential elements of the language in real programs, but without getting bogged down in details, rules, and exceptions. At this point, we are not trying to be complete or even precise (save that the examples are meant to be correct). We want to get you as quickly as possible to the point where you can write useful programs, and to do that we have to concentrate on the basics: variablesand constants,arithmetic, control flow, functions, and the rudiments of input and output. We are intentionally leaving out of this chapter features of C that are important for writing bigger programs. These include pointers,structures, most of C's rich set of operators, several control-

flow statements, and the standard library. 

This approach and its drawbacks. Most notable is that the complete story on any particular feature is not found here, and the tutorial, by being brief, may also be misleading. And because the examples do not use the full power of C, they are not as concise and elegant as they might be. We have tried to minimize these effects, but be warned. Another drawback is that later chapters will necessarily repeat some of this chapter. We hope that the repetition will help you more than it annoys. 


In any case, experienced programmers should be able to extrapolate from the material in this chapter to their own programming needs. Beginners should supplement it by writing small, similar programs of their own. Both groups can use it as a framework on which to hang the more detailed descriptions that begin in Chapter 2. 


1.1 Getting Started 

The only way to learn a new programming language is by writing programs in it. The first program to write is the same for all languages: 

Print the words 


hello, world 



This is a big hurdle; to leap over it you have to be able to create the program text somewhere, compile it successfully, load it, run it, and find out where your output went. With these mechanical details mastered, everything else is comparatively easy. 


In C, the program to print ``hello, world'' is 


#include



 main()


printf("hello, world\n");



Just how to run this program depends on the system you are using. As a specific example, on the UNIX operating system you must create the program in a file whose name ends in ``.c'', such as hello.c, then compile it with the command 


cc hello.c 



If you haven't botched anything, such as omitting a character or misspelling something, the compilation will proceed silently, and make an executable file called a.out. If you run a.out by typing the command 


a.out 



it will print 



 hello, world


On other systems, the rules will be different; check with a local expert. 


Now, for some explanations about the program itself. A C program, whatever its size, consists of functions and variables. A function contains statements that specify the computing operations to be done, and variables store values used during the computation. C functions are like the subroutines and functions in Fortran or the procedures and functions of Pascal. Our example is a function named main. Normally you are at liberty to give functions whatever names you like, but ``main'' is special -your program begins executing at the beginning of 

main. This means that every program must have a main somewhere. 

main will usually call other functions to help perform its job, some that you wrote, and others from libraries that are provided for you. The first line of the program, 


#include  

tells the compiler to include information about the standard input/output library; the line appears at the beginning of many C source files. The standard library is described in Chapter 7 
and Appendix B. 

One method of communicating data between functions is for the calling function to provide a list of values, called arguments, to the function it calls. The parentheses after the function name surround the argument list. In this example, main is defined to be a function that expects no arguments, which is indicated by the empty list ( ). 


#include include information about standard 

library 
main() define a function called main 


that received no argument values 

{ statements of main are enclosed in braces 
printf("hello, world\n"); main calls library function printf 
to print this sequence of characters 
} \n represents the newline character 


The first C program 


The statements of a function are enclosed in braces {}. The function main contains only one 

statement, 

printf("hello, world\n");

A function is called by naming it, followed by a parenthesized list of arguments, so this calls 
the function printf with the argument "hello, world\n". printf is a library function that 
prints output, in this case the string of characters between the quotes. 

A sequence of characters in double quotes, like "hello, world\n", is called a character 
string or string constant. For the moment our only use of character strings will be as 
arguments for printf and other functions. 

The sequence \n in the string is C notation for the newline character, which when printed 
advances the output to the left margin on the next line. If you leave out the \n (a worthwhile 
experiment), you will find that there is no line advance after the output is printed. You must 
use \n to include a newline character in the printf argument; if you try something like 

printf("hello, world


"); 



the C compiler will produce an error message. 

printf never supplies a newline character automatically, so several calls may be used to build 
up an output line in stages. Our first program could just as well have been written 

#include


 main()


{


 printf("hello, ");


printf("world");


printf("\n");


}


to produce identical output. 

Notice that \n represents only a single character. An escape sequence like \n provides a general and extensible mechanism for representing hard-to-type or invisible characters. Among the others that C provides are \t for tab, \b for backspace, \" for the double quote and \\ for the backslash itself. There is a complete list in Section 2.3. 
Exercise 1-1. Run the ``hello, world'' program on your system. Experiment with leaving out parts of the program, to see what error messages you get. 

Exercise 1-2. Experiment to find out what happens when prints's argument string contains \c, where c is some character not listed above. 

1.2 Variables and Arithmetic Expressions 
The next program uses the formula oC=(5/9)(oF-32) to print the following table of Fahrenheit temperatures and their centigrade or Celsius equivalents: 


 1 -17 
20 -6 
40 4 
60 15 
80 26 
100 37 
120 48 
140 60 
160 71 
180 82 
200 93 
220 104 
240 115 
260 126 
280 137 
300 148 


The program itself still consists of the definition of a single function named main. It is longer than the one that printed ``hello, world'', but not complicated. It introduces several new ideas, including comments, declarations, variables, arithmetic expressions, loops , and formatted output. 

#include


 /* print Fahrenheit-Celsius table


for fahr = 0, 20, ..., 300 */
main()
{


 int fahr, celsius;
int lower, upper, step;


 lower = 0; /* lower limit of temperature scale */
upper = 300; /* upper limit */
step = 20; /* step size */


 fahr = lower;


while (fahr <= upper) {
celsius = 5 * (fahr-32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;


}
}


The two lines 

/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300 */ 


are a comment, which in this case explains briefly what the program does. Any characters between /* and */ are ignored by the compiler; they may be used freely to make a program easier to understand. Comments may appear anywhere where a blank, tab or newline can. 

In C, all variables must be declared before they are used, usually at the beginning of the function before any executable statements. A declaration announces the properties of variables; it consists of a name and a list of variables, such as 

int fahr, celsius;
int lower, upper, step;
The type int means that the variables listed are integers; by contrast with float, which means floating point, i.e., numbers that may have a fractional part. The range of both int and float depends on the machine you are using; 16-bits ints, which lie between -32768 and +32767, are common, as are 32-bit ints. A float number is typically a 32-bit quantity, with at least six significant digits and magnitude generally between about 10-38 and 1038. 

C provides several other data types besides int and float, including: 


char character - a single byte 
short short integer 
long long integer 
double double-precision floating point 

The size of these objects is also machine-dependent. There are also arrays, structures and 
unions of these basic types, pointers to them, and functions that return them, all of which we 
will meet in due course. 

Computation in the temperature conversion program begins with the assignment statements

 lower = 0;
upper = 300;
step = 20;


which set the variables to their initial values. Individual statements are terminated by 
semicolons. 

Each line of the table is computed the same way, so we use a loop that repeats once per output 
line; this is the purpose of the while loop 

while (fahr <= upper) { 
... 
}
The while loop operates as follows: The condition in parentheses is tested. If it is true (fahr 
is less than or equal to upper), the body of the loop (the three statements enclosed in braces) is 
executed. Then the condition is re-tested, and if true, the body is executed again. When the test 
becomes false (fahr exceeds upper) the loop ends, and execution continues at the statement 
that follows the loop. There are no further statements in this program, so it terminates. 

The body of a while can be one or more statements enclosed in braces, as in the temperature 
converter, or a single statement without braces, as in 

while (i < j)
i = 2 * i;
In either case, we will always indent the statements controlled by the while by one tab stop 
(which we have shown as four spaces) so you can see at a glance which statements are inside 
the loop. The indentation emphasizes the logical structure of the program. Although C 
compilers do not care about how a program looks, proper indentation and spacing are critical 
in making programs easy for people to read. We recommend writing only one statement per 
line, and using blanks around operators to clarify grouping. The position of braces is less 
important, although people hold passionate beliefs. We have chosen one of several popular 
styles. Pick a style that suits you, then use it consistently. 

Most of the work gets done in the body of the loop. The Celsius temperature is computed and 
assigned to the variable celsius by the statement 

celsius = 5 * (fahr-32) / 9;
The reason for multiplying by 5 and dividing by 9 instead of just multiplying by 5/9 is that in 
C, as in many other languages, integer division truncates: any fractional part is discarded. 
Since 5 and 9 are integers. 5/9 would be truncated to zero and so all the Celsius temperatures 
would be reported as zero. 

This example also shows a bit more of how printf works. printf is a general-purpose 
output formatting function, which we will describe in detail in Chapter 7. Its first argument is a 
string of characters to be printed, with each % indicating where one of the other (second, third, 


...) arguments is to be substituted, and in what form it is to be printed. For instance, %d 
specifies an integer argument, so the statement 

printf("%d\t%d\n", fahr, celsius);
causes the values of the two integers fahr and celsius to be printed, with a tab (\t) between 
them. 

Each % construction in the first argument of printf is paired with the corresponding second 
argument, third argument, etc.; they must match up properly by number and type, or you will 
get wrong answers. 

By the way, printf is not part of the C language; there is no input or output defined in C 
itself. printf is just a useful function from the standard library of functions that are normally 
accessible to C programs. The behaviour of printf is defined in the ANSI standard, however, 
so its properties should be the same with any compiler and library that conforms to the 
standard. 

In order to concentrate on C itself, we don't talk much about input and output until chapter 7. 
In particular, we will defer formatted input until then. If you have to input numbers, read the 
discussion of the function scanf in Section 7.4. scanf is like printf, except that it reads 
input instead of writing output. 

There are a couple of problems with the temperature conversion program. The simpler one is 
that the output isn't very pretty because the numbers are not right-justified. That's easy to fix; if 
we augment each %d in the printf statement with a width, the numbers printed will be right-
justified in their fields. For instance, we might say 

printf("%3d %6d\n", fahr, celsius);


to print the first number of each line in a field three digits wide, and the second in a field six 
digits wide, like this: 

0 -17 
20 -6 
40 4 
60 15 
80 26
100 37 
... 


The more serious problem is that because we have used integer arithmetic, the Celsius temperatures are not very accurate; for instance, 0oF is actually about -17.8oC, not -17. To get 
more accurate answers, we should use floating-point arithmetic instead of integer. This requires some changes in the program. Here is the second version: 

#include


 /* print Fahrenheit-Celsius table


for fahr = 0, 20, ..., 300; floating-point version */
main()
{


 float fahr, celsius;
float lower, upper, step;


 lower = 0; /* lower limit of temperatuire scale */
upper = 300; /* upper limit */
step = 20; /* step size */


 fahr = lower;


while (fahr <= upper) {
celsius = (5.0/9.0) * (fahr-32.0);
printf("%3.0f %6.1f\n", fahr, celsius); 



 fahr = fahr + step;
}
}
This is much the same as before, except that fahr and celsius are declared to be float and the formula for conversion is written in a more natural way. We were unable to use 5/9 in the previous version because integer division would truncate it to zero. A decimal point in a constant indicates that it is floating point, however, so 5.0/9.0 is not truncated because it is 
the ratio of two floating-point values. 

If an arithmetic operator has integer operands, an integer operation is performed. If an arithmetic operator has one floating-point operand and one integer operand, however, the 
integer will be converted to floating point before the operation is done. If we had written (fahr-32), the 32 would be utomatically converted to floating point. Nevertheless, writing 
floating-point constants with explicit decimal points even when they have integral values emphasizes their floating-point nature for human readers. 

The detailed rules for when integers are converted to floating point are in Chapter 2. For now, notice that the assignment 

fahr = lower;


and the test 

while (fahr <= upper)
also work in the natural way - the int is converted to float before the operation is done. 

The printf conversion specification %3.0f says that a floating-point number (here fahr) is to be printed at least three characters wide, with no decimal point and no fraction digits. %6.1f describes another number (celsius) that is to be printed at least six characters wide, with 1 digit after the decimal point. The output looks like this: 

0 -17.8 
20 -6.7
40 4.4 
... 
Width and precision may be omitted from a specification: %6f says that the number is to be at least six characters wide; %.2f specifies two characters after the decimal point, but the width is not constrained; and %f merely says to print the number as floating point. 

%d print as decimal integer 
%6d print as decimal integer, at least 6 characters wide 
%f print as floating point 
%6f print as floating point, at least 6 characters wide 
%.2f print as floating point, 2 characters after decimal point 
%6.2f print as floating point, at least 6 wide and 2 after decimal point 

Among others, printf also recognizes %o for octal, %x for hexadecimal, %c for character, %s for character string and %% for itself. Exercise 1-3. Modify the temperature conversion program to print a heading above the table. Exercise 1-4. Write a program to print the corresponding Celsius to Fahrenheit table. 

22 Januari 2014

3 bahasa pemrograman C

Add caption
#Untuk pernyataan
Ada banyak cara yang berbeda untuk menulis sebuah program untuk suatu tugas tertentu. Mari kita coba variasi pada suhu converter.
#include

/* mencetak tabel Fahrenheit-Celsius */ main()
{
int fahr;
     for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}

Ini menghasilkan jawaban yang sama, tapi jelas terlihat berbeda. Salah satu perubahan utama adalah penghapusan sebagian besar variabel, hanya fahr tetap, dan kami telah membuat sebuahint.Bawah dan atas batas dan ukuran langkah hanya muncul sebagai konstanta dalam untuk pernyataan, sendiri merupakan konstruksi baru, dan ekspresi yang menghitung suhu Celsius sekarang muncul sebagai argumen ketiga printf bukannya pernyataan penugasan terpisah.

Perubahan terakhir ini adalah turunan dari aturan umum - dalam konteks di mana ia diperbolehkan untuk menggunakan nilai dari beberapa jenis, Anda dapat menggunakan ekspresi yang lebih rumit dari tipe tersebut. Karena argumen ketiga printf harus menjadi nilai floating-point untuk mencocokkan %6.1f,setiap ekspresi floating-point dapat terjadi di sini.

Pernyataan for itu adalah loop, generalisasi dari while. Jika Anda bandingkan dengan while sebelumnya, operasinya harus jelas. Dalam kurung, ada tiga bagian, yang dipisahkan oleh titik koma. Bagian pertama, inisialisasi

fahr = 0

dilakukan sekali, sebelum loop yang tepat dimasukkan. Bagian kedua adalah tes atau kondisi yang mengontrol loop:

fahr <= 300

Kondisi ini dievaluasi, jika memang benar, tubuh loop (di sini satu ptintf) dijalankan. Maka langkah kenaikan

fahr = fahr + 20

dijalankan, dan kondisi re-evaluasi. Loop berakhir jika kondisi telah menjadi palsu. Seperti dengan while, tubuh loop bisa menjadi pernyataan tunggal atau sekelompok pernyataan diapit oleh kurung. Inisialisasi, kondisi dan peningkatan dapat berupa ekspresi.

Pilihan antara while dan for adalah sewenang-wenang, berdasarkan yang tampaknya lebih jelas. For biasanya sesuai untuk loop di mana inisialisasi dan kenaikan adalah pernyataan tunggal dan logis terkait, karena lebih kompak dari while,dan itu membuat pernyataan kontrol loop bersama-sama di satu tempat.

Latihan: Memodifikasi program konversi suhu untuk mencetak tabel dalam urutan terbalik, yaitu, dari 300 derajat ke 0.

#Konstanta simbolik(Symbolic Constants)
Pengamatan terakhir sebelum kami meninggalkan konversi suhu selamanya. Ini praktik buruk untuk mengubur `` angka ajaib'' seperti 300 dan 20 dalam sebuah program, mereka menyampaikan sedikit informasi kepada seseorang yang mungkin harus membaca program nanti, dan mereka sulit untuk berubah dengan cara yang sistematis. Salah satu cara untuk berurusan dengan angka ajaib adalah untuk memberi mereka nama-nama bermakna. A # mendefinisikan garis mendefinisikan nama simbolis atau konstan simbolis menjadi string tertentu karakter:

#define nama daftar pengganti

Setelah itu, setiap terjadinya nama (tidak dalam tanda kutip dan bukan bagian dari nama lain) akan digantikan oleh teks pengganti yang sesuai. Nama ini memiliki bentuk yang sama sebagai nama variabel: urutan huruf dan angka yang dimulai dengan huruf a. Teks pengganti dapat berupa urutan karakter, tetapi tidak terbatas pada angka-angka.

#include
#define LOWER
0
/* lower limit of table */
#define UPPER
300
/* upper limit */
#define STEP
20
/* step size */
/* print Fahrenheit-Celsius table */
main()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}

kuantitas LOWERUPPER dan STEP adalah konstanta simbolis, bukan variabel, sehingga mereka tidak muncul dalam deklarasi. Nama konstanta simbolis secara konvensional ditulis dalam huruf besar sehingga mereka dapat BER mudah dibedakan dari huruf kecil nama variabel. Perhatikan bahwa tidak ada titik koma di akhir baris #define.

#karakter input dan Output (Character Input and Output)
Kita akan mempertimbangkan keluarga program terkait untuk memproses data karakter. Anda akan menemukan bahwa banyak program hanya diperluas versi prototipe yang kita bahas di sini.

Model input dan output didukung oleh perpustakaan standar sangat sederhana. Input teks atau output, terlepas dari mana itu berasal atau di mana ia pergi ke, dibahas sebagai aliran karakter. Aliran teks adalah urutan karakter dibagi menjadi baris; setiap baris terdiri dari nol atau lebih karakter diikuti oleh karakter baris baru. Ini adalah tanggung jawab perpustakaan untuk membuat setiap input atau output aliran mengkonfirmasi model ini, programmer C menggunakan perpustakaan tidak perlu khawatir tentang bagaimana garis diwakili luar program.

Perpustakaan standar menyediakan beberapa fungsi untuk membaca atau menulis satu karakter pada satu waktu, yang getchar dan putchar yang paling sederhana. Setiap kali disebut, getcharmembaca karakter input berikutnya dari aliran teks dan kembali bahwa sebagai nilainya. Artinya, setelah

c = getchar();

variabel c berisi karakter berikutnya dari input. Karakter biasanya datang dari keyboard, masukan dari file dibahas nanti.Fungsi putchar mencetak karakter setiap kali itu disebut:

putchar(c);

mencetak isi dari variabel integer c sebagai karakter, biasanya di layar. Panggilan ke putchar dan printf dapat disisipkan, output akan muncul dalam urutan di mana panggilan akan dibuat.
#file Menyalin(File Copying)
Mengingat getchar dan putchar, Anda dapat menulis jumlah yang mengejutkan kode yang berguna tanpa mengetahui apa-apa lagi tentang input dan output. Contoh paling sederhana adalah program yang salinan input ke output yang salah satu karakter pada satu waktu:

membaca karakter
while (charater tidak end-of-file indicator)
Output karakter hanya membaca
membaca karakter

Konversi ini ke C memberikan:

#include
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

Operator relasional ! = Berarti `` tidak sama dengan''.
Apa yang tampaknya menjadi karakter pada keyboard atau layar tentu saja, seperti yang lainnya, tersimpan secara internal hanya sebagai pola bit. Tipe char secara khusus dimaksudkan untuk menyimpan data karakter tersebut, tetapi setiap tipe integer dapat digunakan. Kami menggunakan int untuk alasan halus namun penting.

Masalahnya adalah membedakan akhir masukan dari data yang valid. Solusinya adalah bahwa getchar mengembalikan nilai tersendiri saat tidak ada lagi masukan, nilai yang tidak dapat bingung dengan karakter yang nyata. Nilai ini disebut EOF, untuk `` akhir file''. Kita harus menyatakan c menjadi tipe yang cukup besar untuk menampung setiap nilai yang getchar kembali. Kita tidak bisa menggunakan arang karena c harus cukup besar untuk menampung EOF di samping setiap arang mungkin. Oleh karena itu kami menggunakan int.

EOF adalah bilangan bulat didefinisikan dalam , tetapi nilai numerik tertentu tidak masalah asalkan tidak sama seperti nilai arang. Dengan menggunakan konstanta simbolis, kita yakin bahwa tidak ada dalam program ini tergantung pada nilai numerik tertentu.

Program untuk menyalin akan ditulis lebih singkat oleh C programmer berpengalaman. Dalam C, tugas apapun, seperti

c = getchar();

adalah ekspresi dan memiliki nilai, yang merupakan nilai dari sisi kiri setelah penugasan. Ini berarti bahwa tugas yang dapat muncul sebagai bagian dari ekspresi yang lebih besar. Jika penugasan karakter ke c diletakkan di dalam tes bagian dari while loop, program salinan dapat ditulis dengan cara ini:

#include
/* copy input to output; 2nd version */ 
main()
{
int c;
while ((c = getchar()) != EOF) 
putchar(c);
}

Sementara karakter while, memberikannya ke c, dan kemudian menguji apakah karakter adalah akhir-of-file sinyal. Kalau tidak, tubuh while dijalankan, mencetak karakter. While kemudian mengulangi. Ketika akhir input akhirnya tercapai, while berakhir dan begitu juga main.

Versi ini memusatkan input - sekarang ada hanya satu referensi untuk getchar - dan menyusut program. Program yang dihasilkan lebih kompak, dan, sekali idiom dikuasai, lebih mudah dibaca. Anda akan melihat gaya ini sering. (Ini mungkin untuk mendapatkan dibawa pergi dan membuat kode tak tertembus, namun, kecenderungan yang akan kita coba untuk mengekang.)

Tanda kurung di sekitar penugasan, dalam kondisi yang diperlukan. Didahulukan dari ! = Adalah lebih tinggi dari =, yang berarti bahwa dengan tidak adanya tanda kurung tes relasional ! = Akan dilakukan sebelum tugas =. Jadi pernyataan

c = getchar() != EOF

setara dengan

c = (getchar() != EOF)

Ini memiliki efek yang tidak diinginkan dari pengaturan c dengan 0 atau 1, tergantung pada apakah atau tidak panggilan getchar kembali akhir file.

Latihan: Pastikan ekspresi getchar ()! = EOF adalah 0 atau 1.
Latihan: Menulis sebuah program untuk mencetak nilai EOF.



By:gonoh

KLIPING KERAGAMAN BUDAYA INDONESIA 5 PROVINSI

Keragaman Budaya Indonesia 5 Provinsi - Indonesia sangatlah kaya dengan keaneka ragaman istiadat pun budaya, tentu saja hal tersebut disebab...