Switch di C
#1
selamat [].
saya mau posting tulisan tentang sedikit dari bahasa C.
karena saya juga tengah belajar, dan kebetulan saya terkagum-kagum
dengan code referensinya, jadi saya sharing sedikit disini.
[mohon maaf jika ada yang merasa code yang saya sharing masih sangat sederhana, saya masih pemula]
Terima Kasih atas tempat dan kesempatannya.

Quote:"..if there is nothing to do, nothing is done.."
Quote:"TRY HARDER"
(dragon)

#book "cprogramminglanguage.by brian w.kernighan and dennis m.ritchie
#versi ebook
#wordcounting

Code:
#include <stdio.h>

//lock on
#define IN    1

//lock off
#define OUT    0

int main(char argc, int argv[])  
{
    int c,nl,nc,nw,state;    //fleksibilitas C
    
    state = OUT;            //kunci dalam keadaan mati
    nl = nc = nw = 0    //nilai 0 sebenarnya punya nw, lalu di salin sama nl dan nc

    //perulangan while
    while((c=getchar())!='.'){     //fungsi getchar buat streaming-in karakter,c sebagai variabel), '.' nya di pake buat mengakhiri kata
            
        ++nc;            //setiap karakter masuk, nc(newcharacter di '+' 1)
        if(c=='\n')++nl;    //misal karakternya ENTER=newline='\n') maka nl di '+' 1)
        if(c==' ' || c == '\n' || c == '\t') state = OUT;
        
        //ini bagian code yg buat saya terkagum-kagum
        //=====================================
        else if (state == OUT){     //setelah di coba2, lebih cantik klo diganti dengan "else if(!state)"
            state = IN;
            ++nw;
        }
        /*OR--------------------
        else if (!state){
            state = IN;
            ++nw;
        }
        */
        /*OR--------------------
        else if(state != IN){
            state = IN;
            ++nw;
        }
        */
        //=====================================
        }
    printf("char = %d, line = %d, word = %d\n",nc,nl,nw);
    }
}

keindahan dari variabel (bisa di manipulasi isinya :_))
seleksi (if) biasanya mencari nilai benar atau salah,
program untuk menghitung word, sudah dikasi state = OUT definenya 0 (salah/mati), saya menyebut OUT sebagai "LOCK OFF",
kenapa ? codernya sudah kasih aba2 ke program :
"lu musti ngitung setiap streaming karakter pertama sebagai satu kata,jadi gw matiin kunci countingnya (state=OUT),
setelah 1 kata terhitung, gw hidupin kuncinya (state=IN) supaya nggak asal ngitung lu,
nah, kuncinya bakal mati klo salah satu karakter itu antara (SPASI =' ' atau ENTER = '\n' atau JOROKDALAM(TAB) ='\t')

untuk
Code:
(!state)
rentetan
1. state awalnya mati (0)
2.
Code:
(!state)
, klo state awalnya mati, maka otomatis bakal hidup, dan tereksekusilah code didalam else if
sehingga didalam else if ada penugasannya "state = IN" buat hidupin kuncinya (pembatasan langkah). bernilai 1, jadi
state akan hidup terus, sehingga saat berdiri didepan else if buat di "switch" otomatis bakal mati dengan sendirinya.
kecuali dia lolos dan masuk dalam sekuensi "root bodynya else if" supaya dapat penugasan ke state menjadi OUT (mati)
dan di switch oleh (!state) menjadi bener/hidup..
3. keren.
4. saya menyertakan testnya juga ya:
a.how would you test the word count program?(saya mengganti EOF dengan '.')
what kinds of input are most likely to uncover bugs if there are any ? (keren nih, ternyata sang penulis ngajak kita belajar buat nemuin bug di program, dan memang programnya itu ada masalah. klo inputan berisi: ! <spasi> ? , programmnya tetep ngebaca inputannya sebagai 2 kata, (padahal cuma 2 karakter doang di tambah pemisah bahkan bukan huruf juga, salah kan)
b.write a program that prints its input one word per line ?

Code:
#include <stdio.h>
    
    #define    OUT    0
    #define IN    1

    int main(char argc, int argv[])
    {
        int c,nl,nw,nc,state;
    
        state = OUT;    
        nl = nw = nc =0;
    
        while((c=getchar())!='.'){
            ++nc;
            if(c=='\n')++nl;
            if(c=='\n')state = OUT;   //ini perubahannya "ONE WORD PER LINE"
            else if(state==OUT){
                state = IN;
                ++nw;
            }
        }
        printf("char = %d, line=%d, word=%d\n",nc,nl,nw);
    }
[TERIMA KASIH] Confused
SENJA INI






Users browsing this thread: 1 Guest(s)