01-08-2013, 06:20 PM
Code:
/**
write a program to print a histogram
of the lengths of words in its input
.it is easy to draw the histogram
with the bars horizontal; a vertical
orientation is more challenging
**/
#include <stdio.h>
//konstanta gerakan akumulasi kata
#define OUT 0
#define IN 1
main()
{
//variabelisasi
int c,i,nw,nc,state,T,X;
/**
c = karakter
i = akumulasi perulangan karakter pembentuk grafik
nw = tempat kata
nc = tempat karakter
state = tempat perubahan konstanta gerakan akumulasi kata
T = seperti i
X = seperti i & T
**/
//inisialisasi, pemberian awal 0
nc = nw = 0;
//inisialisasi var pada posisi OUT = 0
state = OUT;
//pemasukkan karakter c melalui perulangan while,
//berhenti jika karakter tersebut adalah titik (.)
while((c=getchar())!='.'){
//setiap masukkan karakter var nc diakumulasi dengan 1
++nc;
//Akan di seleksi JIKA:
//jika karakter dari variable c adalah salah satu dari spasi,
//tab ataupun enter maka variabel state tetap pada OUT value
if(c==' '||c=='\t'||c=='\n') state = OUT;
//opsi selain itu: jika if diatas ditereksekusi
//else if akan aktif dan melihat state pada
//boolean true maka counter dari kata akan
//di tambah dengan 1
else if(state == OUT){
++nw;
//state kembali pada posisi tidak diijinkan
//mengakumulasi
state = IN;
}
}
//mencetak whitespace 2 newline
printf("\n\n");
printf("%d karakter, %d kata\n",nc,nw);
/**
********************************
* histogram horizontal *
********************************
**/
printf("HISTOGRAM HORIZONTAL\n");
printf("--------------------\n");
//perulangan untuk mencetak index 0 hingga jumlah kata
//posisi horizontal dengan jarak tab
for(i=0;i<=nw;++i)
printf("%d\t",i);
putchar('\n'); //white space 1 new line
//perulangan untuk mencetak bagian grafik horizontal dengan
//karakter assignment
for(i=0;i<=nw*8;++i)
putchar('=');
putchar('\n'); //white space 1 new line
//perulangan untuk mencetak sudut kanan grafik horizontal
for(i=0;i<=nw*8;++i)
//pemberian seleksi untuk memberi karakter pada posisi (nw*8)
if(i==(nw*8))
putchar('|');
//pemberian seleksi opsi untuk memberi karakter pada posisi < (nw*8)
else
putchar(' ');
putchar('\n'); //white space 1 new line
//perulangan untuk mencetak bagian grafik horizontal dengan
//karakter assignment
for(i=0;i<=nw*8;++i)
putchar('=');
putchar('\n'); //white space 1 new line
for(c=0;c<=nw;++c)
{
//printf("%d ",c);
putchar('\n');
for(i=0;i<=(c*3);++i)
printf("-");
putchar('\n');
for(i=0;i<=(c*3);++i)
printf(" ");
printf("|%d",c);
putchar('\n');
for(i=0;i<=(c*3);++i)
printf("-");
putchar('\n');
}
/**
*********************************
* histogram vertical *
*********************************
**/
putchar('\n'); //white space 1 new line
printf("HISTOGRAM VERTICAL...X = karakter, Y = Kata\n");
printf("-------------------------------------------\n");
//perulangan untuk mencetak nilai: jumlah kata hingga 0
//dengan T sebagai variable
for(T=nw;T>=0;--T){
printf("%d",T);
//pemberian seleksi untuk memberi karakter sepanjang
//x hingga (nw*6)
//jika var T telah menjadi 0
if(T==0){
for(X=0;X<=(nw*6);++X)
printf("_");
break; //penghentian
}
//pemberian karakter pada posisi (nw*7)
//dengan jarak X sampai (nw*6)
//dengan syarat jumlah T sama dengan nw
else if(T==nw) {
for(X=0;X<=(nw*6);++X)
putchar(' ');
printf("--");
}
putchar('\n'); //white space 1 new line
//perulangan untuk memberikan jarak newline
//dengan karakter | antara jumlah kata hingga 0
for(i=0;i<=1;++i){
printf("|");
//perulangan untuk memberikan karakter pada posisi (nw*7)
//se-horizontal dengan karakter |
//dengan pemberian jarak dengan spasi sejumlah
//x hingga (nw*6)
for(X=0;X<=(nw*6);++X)
printf(" ");
printf("||\n");
}
}
//mencetak nilai karakter pada posisi grafik x
printf("%d|\n",nc);
}
Salam.
SENJA INI