Rabu, 19 Desember 2018


File Processing
Salam Programmers!
Kali ini saya akan membahasa tentang apakah itu file processing dan juga struktur-strukturnya.
File processing merupakan sebuah proses yang dapat kita gunakan untuk membuat, membaca, atau menambahkan data kepada file extension seperti textpad. Dalam menentukan apakah kita ingin membaca, menulis, atau menambahkan data pada suatu file kita hanya perlu menuliskan 1 huruf saja. 

Berikut daftarnya :

r                               Untuk membaca file saja.
            w                              Untuk membuat file baru/meniban data file yang sudah ada.
            a                               Menambahkan data pada file.
            r+                             Dapat membaca sekaligus menulis data baru.
            w+                            Dapat membuat file baru dan juga membaca filenya.
            a+                             Dapat membaca sekaligus menambahkan data.
            “rb”                             Dapat membaca file dalam bentuk binary.
            “wb”                           Dapat membuat file baru dalam bentuk binary.

Sekarang, mari kita belajar syntax dari file processing tersebut. Cara penulisan pertama adalah kita harus membuat variabel pointer sebagai variabel dari filenya. Penulisannya adalah sebagai berikut :

Int main(){
            FILE *file;
            return 0;
}

Variabel pointer yang saya buat adalah “file”. Nama tersebut dapat kalian ubah sesuai yang kalian inginkan. Setelah itu, kita harus perintahkan variabel pointer tersebut untuk membuka file yang kita inginkan. Caranya adalah sebagai berikut :

 Int main(){
            FILE *file;
            File = fopen(“test.txt”, “r”);
            return 0;
}

fopen pada kodingan tersebut merupakan sebuah perintah untuk membuka file. Di dalam kurung terdapat dua parameter. Pertama adalah nama dari file yang ingin kalian buka, file yang saya buka adalah “test.txt”.

CATATAN PENTING : kalian harus memastikan bahwa file tersebut merupakan file yang dapat diisikan data dan juga dapat dibaca dalam bentuk tulisan seperti ekstensi txt. Kita tidak bisa membuka aplikasi. Terakhir yang harus selalu diingat adalah kita harus meletakkan filenya dalam satu tempat bersamaan dengan file cpp kalian atau c kalian.

Untuk “r”, ini merupakan perintah untuk membaca file saja. Kalian dapat menggantinya sesuai dengan yang kalian perlukan.

Tahap selanjutnya adalah terdapat dua perintah yang bisa kaian gunakan yaitu fscanf dan juga fprintf.
fprintf berguna untuk mencetak tulisan atau data-data yang ingin kalian cetak ke dalam file txt kalian.
fscanf berguna untuk mengscan/membaca seluruh atau beberapa bagian data yang kalian butuhkan di dalam file tersebut.

Kedua perintah tersebut mirip dengan scanf dan juga printf namun kita harus tambahkan nama dari variabel pointer file kita sebagai tanda bahwa kita scan dan juga print terhadap file tersebut. Berikut kodingannya :

#include<stdio.h>
int main(){
int angka1;
int angka2 = 5;

FILE *file;
file = fopen(“test.txt”, “a”);

while(!feof(file){

fscanf(file, “%d”, &angka1);

}

fprintf(file, “%d”, angka2);

fclose(file);

return 0;
}  

Dapat kita lihat bahwa pada fscanf dan juga fprintf terdapat penulisan “file” sebelum hal yang ingin kita print atau scan. Nama “file”merupakan nama dari variabel pointer file yang telah dideklarasikan sebelumnya. Fungsi while(!feof(file) adalah untuk menunjukkan bahwa kita ingin melakukan scan sampai end of file. Feof merupakan perinta end of file. Tanda “!” menunjukan bahwa tidak. Jadi kita akan scan data selama belum end of file. Cara while tersebut sebenarnya dapat beragam bergantung pada model atau isi dari file kalian dan kalian dapat menyesuaikannya sendiri.

Terakhir adalah perintah “fclose(file)”. Perintah tersebut merupakan perintah yang harus selalu ada jika kita menggunakan file processing.

Demikianlah pembahasan singkat tentang file processing. Semoga bermanfaat bagi kalian semua.

Salam Programmers!

Senin, 17 Desember 2018


Structure and Memory Allocation
Salam Programmers!

Kali ini saya akan membahas mengenai structure dan juga fungsi dari Memory Allocation.

Structure
Structure merupakan fungsi yang dapat digunakan untuk mengumpulkan atau menyatukan beberapa tipe data yang berbeda menjadi satu kesatuan. Structure mirip dengan array namun, array hanya bisa memasukkan satu tipe data saja sedangkan structure dapat menyimpan tipe data yang berbeda. Berikut syntax dari structure :

#include<stdio.h>

struct mahasiswa{
            char nama[50]; //disebut dengan nama field
            char NIM[20]; //disebut dengan nama field
            int umur; //disebut dengan nama field
};

int main(){
            return 0;
}

Struct dibuat di luar int main dan umumnya diletakkan di atas int main agar ketika kita memanggil struct tersebut di dalam int main dapat dikenali. Ini juga berhubungan dengan sifat scoping. Cara memanggil struct adalah kita harus membuat variabel terlebih dahulu sebagai bagian dari struct. Kita dapat mengandaikan bahwa struct adalah sebuah template, dan kita harus membuat variabel baru sebagai tempat yang dapat diisikan data namun memiliki struktur yang sama dengan structnya. Cara membuatnya adalah sebagai berikut :

Int main(){

            struct mahasiswa x;
            return 0;
}

Format penulisannya adalah “struct (nama struct) (nama variabel yang kita inginkan)”. X merupakan nama variabel biasa jadi kita bisa menggantinya dengan apa saja. Setelah itu, di dalam variabel x terkandung nilai yang bercabang-cabang  yang disebut field sesuai dengan struct mahasiswa yang telah kita buat. Cara kita untuk memasukkan data-datanya ke dalam tempat yang sesuai adalah sebagai berikut :

x.nama = “Budi”;
x.NIM = “22012232132”;
x.umur = 18;

maka secara otomatis data tersebut akan masuk sesuai dengan fieldnya masing-masing. Data tersebut juga dapat diisi melalui inputan user menggunakan scanf dan disimpan dengan cara yang sama juga seperti kodingan di atas yaitu dengan format :
(nama variabel struct).(nama field yang dituju)

Selain itu, struct juga dapat dibentuk menjadi sebuah array sehingga dapat menampung lebih banyak lagi data. Formatnya adalah sebagai berikut:

struct mahasiswa x[50];

Dengan begitu, maka kita dapat menampung semua field sebanyak array yang telah kita tentukan tersebut. Formatnya pun juga sama hanya perlu ditambahkan kurung saja setelah “x”. berikut contoh inputannya :
X[1].nama = “Budi”;
X[1].NIM = “22012232132”;
X[1].umur = 18;

Maka data-data tersebut akan masuk ke array 1. Selain itu, structure juga mempunyai nested structure seperti nested if yang di mana di dalam struct terdapat struct. Kalian dapat memvariasikan sendiri untuk mengambil inputan dari user menggunakan for dan sebagainya.

Memory Allocation(malloc)
Memory allocation merupakan cara di mana kita bisa membooking jumlah memory yang akan kita gunakan untuk keperluan kita. Tujuannya adalah agar tidak ada memory yang terbuang sia-sia atau ketika kita sedang input data tidak ada data yang kepenuhan dan sebagainya. Berikut syntax untuk malloc :

Int main(){

struct mahasiswa *x = (struct mahasiswa*) malloc(sizeof(struct mahasiswa));
return 0;

}

Maka, kita akan membooking memory dengan ukuran sesuai dengan struct mahasiswa kita. Tanda “*” menunjukkan bahwa variabel x itu sebagai pointer karena agar memory dapat terus mengikuti ukuran dari memory ketika data x berubah. Malloc juga dapat digunakan untuk semua tipe data kecuali void karena void tidak ada nilai yang dikembalikan.

Demikianlah pembahasan singkat tentang structure dan juga malloc. Semoga pembahasan ini dapat bermanfaat bagi kalian.

Salam Programmers!




Function and Recursion
Salam Programmers!

Function
Kali ini kita akan membahas tentang fungsi dan rekursif. Dalam mengkoding Bahasa C, kita terbiasa membuat kodingan kita di dalam fungsi int main. Namun sebenarnya, kita dapat menggunakan atau membuat fungsi baru yang diletakkan di luar int main. Fungsi-fungsi tersebut berfungsi untuk mempermudah kita dalam membaca kodingan yang telah kita buat sehingga terlihat lebih rapih dan mudah untuk difahami. Fungsi dapat disebut juga sebagai modular programming, yang di mana kodingan kita tersebut berbetuk modul-modul sesuai kegunaannya masing-masing.
Langsung saja berikut contoh fungsinya :

#include<stdio.h>
void print (char nama[10]){
            printf("Selamat Belajar %s!!!\n", nama);
}

int main(){      
            char nama[10] = "Semua";    
            print(nama);

            return 0;
}

Dari kodingan di atas ini jika dicompile akan menghasilkan :






Dalam kodingan terdapat tulisan “void print(….)”, ini merupakan syntax dari penulisan fungsi yang dilanjutkan dengan kurung kurawal seperti biasa. Tipe data void merupakan tipe dari fungsinya. Kalian dapat mengganti tipe datanya sesuai dengan kebutuhan. Pada kurung setelah nama fungsi berguna untuk parameter. Parameter tersebut lah yang menjadi bahan dan yang nantinya akan di proses didalam fungsi.

Cara memanggil fungsi juga cukup mudah, dalam kodingan di atas tertulis “print(nama)”. Maksudnya adalah “print” merupakan nama fungsi yang kita akan panggil jadi nama tersebut bisa berubah-ubah sesuai dengan nama fungsi yang telah kalian buat. Selanjutnya, dalam kurung terdapat “nama”, ini merupakan parameter yang ingin kita lempar ke dalam fungsi tersebut sebagai bahan. Untuk catatan, parameter di dalam fungsi dengan di int main haruslah memiliki jumlah dan juga tipe data yang sama. Jika kalian membuat fungsi dengan parameter (int…, int…) maka di dalam int main pun kalian harus memasukkan nama 2 variabel yang memiliki tipe data int pula untuk di proses. Berikut contoh error jika tidak sesuai :














Dapat dilihat bahwa ketika saya memasukkan tipe data int dalam pemanggilan fungsi, compilernya memberi tanda merah yang menandakan bahwa tipe data tidak cocok dengan tipe data yang ada difungsi.

Terakhir sebagai tambahan, ketika kalian ingin membuat sebuah fungsi dengan tipe data selain tipe data “void”, maka haruslah diberikan tulisan “return” yang diikuti dengan nilai yang direturn bisa angka seperti 1, 0, dan sebagainya atau bisa juga return variabel tertentu.
Berikut contohnya :

#include<stdio.h>

void print(char nama[10]){
            printf("Selamat Belajar %s!!!\n", nama);
}

//merupakan contoh fungsi dengan tipe data selain void

int tambah(int angka1, int angka2){
            int hasil;
            hasil = angka1+angka2;
            return hasil; //mengembalikkan nilai dari variabel hasil
}

int main(){
            char nama[10] = "Semua";
            int nilai1 =5;
            int nilai2 =3;
            int hasil;

            print(nama);
            hasil = tambah(nilai1, nilai2);
//nilai dari fungsi ditampung dalam variabel lain yang ada di int main
           
printf("%d", hasil);
            return 0;
}

Recursion

Recursion merupakan sebuah proses fungsi yang memanggil dirinya sendiri. Seperti yang telah dijelaskan tentang fungsi sebelumnya, terdapat “return” yang di mana berfungsi untuk mengembalikkan nilai kepada int main. Namun, dalam rekursif yang direturn adalah nama dari fungsi itu sendiri dengan parameter yang sedikit dirubah. Recursion umumnya memiliki dua struktur. Pertama adalah base case dan kedua adalah proses rekursif. Dalam base case, kita harus menentukan kemungkinan awal dari proses yang ingin kita buat. Base case akan menangkap nilai terkecil dari pola yang ingin kita lakukan. Sedangkan, proses rekursif berisi proses yang dilanjutkan dengan return fungsi itu sendiri. Sebagai contoh, saya ingin membuat pola “A” “ABA” “ABACABA”. Polanya adalah print fungsi sebelumnya dan base case adalah A jika 1. Maka kodingannya akan menjadi :

#include<stdio.h>

void print(int angka){
            int huruf = 64;
            if(angka==1){
                        printf("A");      //merupakan base case
            }else if(angka==2){
                        printf("ABA"); //merupakan base case
            }else{
                        print(angka-1);
                        printf("%c", huruf+angka);
                        return print(angka-1); //proses rekursif
            }          
}

int main(){
           
            int angka;
            int i;    
           
            scanf("%d", &angka);
            printf("Case #%d: ", i);
            print(angka);
            printf("\n");
           
            return 0;
}

Dalam kodingan tersebut, saya menggunakan fungsi yang bertipe int. dalam fungsi tersebut mengapa saya menggunakan 2 base case? Karena jika saya menggunakan 1 base case untuk pola tersebut, maka akan sulit membaca polanya secara menyuluruh. Karena itu saya membuat 2 base case agar lebih terlihat polanya. Lalu pada proses rekursif, terlihat bahwa saya mengembalikkan nilai dari fungsi itu sendiri dengan mengurangi 1 pada parameternya. Itulah yang disebut dengan rekursif. Namun dalam belajar algorithma, tentulah kita memiliki perbedaan dalam menyusunnya. Semua bergantung pada bagaimana kalian memahami suatu pola dan juga kreatifitas kalian.

Demikian lah sedikit pembelajaran tentang fungsi dan rekursif. Semoga pembelajaran ini dapat bermanfaat bagi kalian.

Salam Programmers!

Selasa, 30 Oktober 2018

Pointer dan Array


Pointer dan Array


Salam programmers!


Setelah kita mengetahui tentang beberapa tipe data yang ada di dalam Bahasa C dan juga sintaks-sintaks dasarnya, maka sekarang kita akan mulai sedikit lebih advance lagi dalam memahami Bahasa C.

Terdapat beberapa perbedaan antara Bahasa C dengan Bahasa program lainnya, salah satunya adalah tipe data string. Pada beberapa Bahasa program lain seperti Java, mereka memiliki tipe data string yang dapat dipanggil secara langsung tanpa perlu perantara. Namun, pada Bahasa C sendiri kita tidak ada tipe data string yang berdiri sendiri melainkan namanya disebut dengan array.

1. ARRAY

Array merupakan sekumpulan huruf atau angka yang dijadikan atau dianggap menjadi satu data. Sebagai contoh :
Jika kita menggunakan tipe data char seperti berikut,

#include<stdio.h>

int main(){
                char huruf = “Hello”;
                printf(“%c”, huruf);        
               
                return 0;
}

Maka hasil dari kodingan tersebut akan error. Alasannya adalah bahwa jika kita menggukan tipe data char, maka compiler hanya akan membaca dan membolehkan kita menginput 1 karakter saja. Sedangkan, dalam kodingan tersebut kita memasukkan kata “Hello” yang terdiri lebih dari 1 karakter atau huruf. Nah di saat seperti ini lah kita membutuhkan tipe data array of character yang di mana tipe data char berubah menjadi tipe data yang dapat menyimpan kumpulan karakter atau yang disebut dengan tipe data string.
Sintaks dari array of character ini adalah dengan menambahkan tanda “[ ]”kurung kotak seperti itu lalu memasukkan angka di dalamnya. Angka tersebut berguna sebagai ruang atau batas dari berapa banyak karakter yang kita ingin masukkan. Contoh :

#include<stdio.h>

int main(){
                char huruf [6] = “Hello”;
                printf(“%s”, huruf);        
               
                return 0;
}

Output dari kodingan di atas adalah “Hello”. Dalam kodingan tersebut, saya memasukkan batas dari array nya adalah 6. Mengapa harus 6? Apa boleh lebih? Jawabannya ya. Kita dapat memasukkan angka lebih dari itu dengan batas maksimal yaitu 10^6 seperti data string atau data integer. Dalam array of character, setiap huruf terhitung mulai dari array 0. Sebagai contoh, kata “Hello” pada kodingan di atas memiliki jangkauan array dari 0-4. Jadi huruf [0] = H; huruf [1] = e; huruf [2] = l; huruf [3] = l; huruf [4] = o. Maka jika kita ingin printf satu huruf saja dari array of character, kita cukup panggil urutan dari angka tersebut. Contoh jika kita ingin print huruf e maka :

Printf(“%c”, huruf[1]);

Maka yang muncul nanti hanyalah huruf e saja. Karena kita memanggil dalam bentuk char maka persennya pun ikut berubah menjadi %c kembali.

2. POINTER

Pointer merupakan salah satu tipe variable yang di mana berfungsi sebagai penunjuk dari suatu variable. Sebagai contoh secara logika, jika kita ingin memanggil nama orang, lalu kita menunjuk orang lain untuk memanggil nama orang yang ingin kita panggil. Secara gak langsung ketika orang yang kita tunjuk itu memanggil nama orang yang ingin kita panggil maka tujuan kita pun juga sesuai dengan yang kita tunjuk itu. Dalam kodingannya pointer biasanya di tandai dengan ‘*’ sebelum nama variabelnya. Contoh :

#include<stdio.h>

int main(){
               
                int huruf = 10;
                int* pointer;

                pointer=&huruf;
                printf("%d", pointer);
                printf("%d", *pointer);
                printf("%d", &pointer);
               
                return 0;
}

Maka outputnya menjadi sebagai berikut :


Pada output pertama, ini disebut dengan address dari variable huruf. Mengapa bisa terjadi? Karena pada awal sebelum kita printf terdapat kodingan “pointer=&huruf;” ini artinya bahwa pointer memiliki nilai yaitu address dari variable huruf. Sehingga jika kita print “pointer” maka akan muncul address dari variable yang ditunjuk.

Pada output dua, terdapat angka 10 yaitu nilai dari variabel huruf. Artinya adalah bahwa jika kita menggunakan pointer dan ingin printf nilai variabel yang ditunjuk adalah cukup dengan menambahkan “*” sebelum variabel pointer kalian.

Pada output ketiga, ini merupakan address dari variabel pointer itu sendiri karena di saat kita printf kita memanggil dengan symbol “&” yaitu address of atau alamat dari.

Mungkin itulah sekilas dari materi tentang pointer dan array. Semoga bermanfaat untuk kita semua.

Salam programmers!