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!