Rabu, 19 Juli 2017

FUNGSI PENCARIAN BINARY SEARCH DAN SEQUENTIAL SEARCH

Pencarian atau searching suatu data pada sekumpulan data merupakan proses yang sangat penting. 

Proses pencarian dilakukan untuk mengetahui apakah data yang dicari terdapat pada sekumpulan data yang ada. Selain untuk mengetahui keberadaan data, informasi yang lain yang bisa didapat adalah letak dari data tersebut. Adapun jenis pencarian yaitu:
Pencarian Bagi Dua (Binary Search)
Pencarian Beruntun (Sequential Search)


Binary Search
 Binary search atau pencarian bagi dua adalah salah satu metode pencarian data salah satu nya Linear Search yang bisa kalian lihat sendiri pada link disamping ,Binary search mempunyai kelebihan dan kekurangan bila dibandingkan dengan Linear search , salahn satu nya binary search pencarian nya lebih cepat tapi agak sedikit susah untuk di mengerti bila dibandingkan dengan Linear Search yang lumayan simpel . 

            Sebenarnya binary Search ini sering kita terapkan pada kehidupan kita sehari - hari . salah satu contoh nya yaitu , Saat kita mencari kata di kamus maka kita akan membuka buku itu menjadi dua bagian , dan membuka nya lagi menjadi dua bagian dan seterus nya sampai ketemu , bagaimana jika kalian ingin mencari suatu kata di kamus dengan menggunakan metode linear search ? tentu akan sangat lama ,karena linear search konsep pencarian dengan beruntun dari halaman pertama sampai terakhir dan sebalik nya secara terurut , jadi tidak mungkin mencari nya dengan linear search .
Jadi binary search ini sangat dianjurkan untuk digunakan saat mencari data yang data nya banyak .

Berikut contoh program binary search dalam bahasa C

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int cari,hasil,i,n;
    int angka[50];

    printf(" Berapa banyak data yang ingin di inputkan (MAX = 50) : "); scanf("%d",&n);

    puts(" Input data ");
    i=0;
    while(i<n)
    {
        printf(" data ke - %d = ",i+1); scanf("%d",&angka[i]);
        i++;
    }

    printf(" Berapa angka yang ingin dicari : "); scanf("%d",&cari);

    hasil = biner(cari,n,angka);

    if(hasil==-1)
    {
        puts("\n Data tidak ditemukan \n");
    }
    else
    {
        printf(" Angka %d ada di indeks ke %d ",cari,hasil+1);
    }

    getch();
    return 0;
}

int biner(int cari, int n, int angka[])
{
    //variabel untuk menentukan titik awal, akhir nya
    int i,awal,tengah,akhir,ketemu;

    akhir=n-1;
    awal=0;
    ketemu=-1;
    i=0;
    //perulangan untuk mencari angka nya dengan kondisi ketemu = -1 dan i < n
    while(ketemu==-1 && i < n)
    {
        tengah=(awal+akhir)/2;
        /**
        *Perkondisian data yang di tengah = cari/ketemu dan
          pencarian di hentikan karena ketemu = tengah bukan ketemu - -1
          jadi tidak memenuhi syarat untuk melakukan perulangan lagi
        *dan ketemu = tengah , jadi nilai yang di kembalikan ke main nanti
          adalah indeks ke - tengah/indeks tempat data yang dicari ditemukan
        **/
        if(angka[tengah]==cari)
        {
            ketemu=tengah;
        }
        else
        {
            if(angka[tengah]<cari)
            {
                awal=tengah+1;
            }
            else
            {
                akhir=tengah-1;
            }
            i++;
        }
        ketemu++;
    }
}





Langkah 1 : Bagi dua elemen larik pada elemen tengah .Elemen tengah adalah elemen dengan indeks tengah = ( awal + akkhir ) / 2 . ( elemen tengah , data[tengah] , membagi larik menjadi dua bagian ,yaitu bagian kiri dan bagian kanan )

            Langkah 2 : Periksa apakah data[tengah] = cari . jika data[tengah] = cari maka pencarian selesai ,sebab cari sudah ditemukan dan syarat penrulangan dari WHILE nya sudah tidak terpenuhi .Tetapi , jika tidak ditemukan ,maka harus ditentukan apakah pencarian akan dilakukan di larik bagian kiri atau di bagian kanan . Jika data[tengah] < cari . maka pencarian akan dilakukan dibagian kiri ,sebalik nya jika data[tengah] > cari , maka pencarian akan dilakukan dari sebelah kanan. .

            Langkah 3 : Ulangi langkah 1 hingga cari ditemukan atau i > n atau larik sudah nol .

            Oh iya sebelum kita menulis syintax nya maka sebelum nya data yang harus di cari harus lah terurut , misal : 10 , 20 , 30 , 40 ,50 dst . Jika data tidak terurut maka data harus diurutkan dulu dengan sorting. .




Sequential Search
Pencarian Sekuensial / Sequensial Search sering disebut dengan pencarian linear yang merupakan metode pencarian yang paling sederhana. Pencarian Sekuensial menggunakan prinsip data yang ada dibandingkan satu per satu secara berurutan dengan data yang dicari sampai data tersebut ditemukan atau tidak ditemukan.

Teknik pencarian ini (Sequensial Search) biasah diterapkan dalam Array untuk menelusuri semua elemen array dari awal sampai akhir, misal digunakan dalam melakukan pencarian nilai tertinggi dalam kumpulan data (elemen) yang ada dalam Array atau digunakan dalam mecari posisi sebuah bilangan (misal angka 16) dalam kumpulan data yang ada dalam Array.

Berikut Contoh Program Pencarian Bilangan (dengan Array 1 dimensi)







#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[100],b,c,d,umpan=0;
    printf("===========================================================\n");
    printf("=== Program Pencarian Bilangan (dengan Array 1 dimensi) ===\n");
    printf("===========================================================\n\n");
    printf("Masukkan berapa bilangan yang ingin di input: "); scanf("%d",&b);
    printf("\n");
    for(c=0;c<b;c++)
    {
        printf("Masukkan bilangan ke %d: ",c+1);  scanf("%d",&a[c]);
    }
    printf("\nMasukkan bilangan yang di cari: ");  scanf("%d",&d);
    for(c=0;c<b;c++)
    {
        if(a[c]==d)
        {
            printf("\nData Ada, berada di Index Array ke: %d atau berada di urutan ke: %d\n",c,c+1);
            break;
        }
        else
        {
            umpan=umpan+1;
        }
    }
    if(umpan==b)
    {
        printf("\nData Tidak Ada\n");
    }
   getch();
    return 0;
}


FUNGSI DAN PROSEDUR DALAM BAHASA C DI PEMROGRAMAN

Penjelasan Singkat Prosedur dan Fungsi

Dalam membuat suatu program ada kalanya kita memerlukan bagian program yang terpisah. Bagian program tersebut disimpan secara terpisah atau istilah kerennya adalah modular dengan tujuan agar bisa digunakan pada blok perintah lainnya Dengan menggunaan blok program yang terpisah maka kita bisa menghemat waktu untuk melakukan pemrograman.
Penghematan waktu bisa terjadi karena kita bisa menggunakan satu perintah logic untuk berbagai permasalahan yang sifatnya berulang. Contoh, misal kita ingin membuat aplikasi yang berguna untuk menghitung harga barang. Perhitungan harga barang bisa dibuat pada modul terpisah, sehingga dia bisa dimanfaatkan oleh banyak bagian. Lantas bagian apa saja yang perlu melakukan perhitungan barang, misalnya adalah bagian untuk keranjang belanja, hingga bagian untuk checkout. Keranjang belanja dan checkout, bisa sajah terpisah secara program namun logika untuk perhitungannya adalah sama yaitu sama-sama jumlah barang dikali harga jual (harga_jual*qty).


Apa itu Prosedur dalam Pemrograman?


Dari judul modul ini saja sudah dijelaskan bahwa kita akan membahas antara prosedur dan fungsi. Kenapa pembahasan materi ini biasanya dilakuakan secara bersama-sama? Karena tidak bisa lepas bahwa Prosedur dan Fungsi memiliki kesamaan satu dan lainnya. Namun demikian, tetap saja ada perbedaannya.
Kelak anda akan dijelaskan tentang perbedaan dari keduanya, namun demikian mari kita pahami dulu definisi dari prosedur.
Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai subprogram (program bagian). Prosedur biasanya bersifat suatu aktifitas seperti meghitung luas segitiga, mencari bilangan genap dari sekumpulan bilangan, menghitung luas persegi dsb.
Programmer yang baik haruslah memahami dan terbiasa dengan prosedur. Karena hal tersebut bisa bermanfaat untuk:
§  Memecah program-program yang rumit menjadi program-program bagian yang lebih sederhana.
§  Untuk hal-hal yang sering dilakukan secara berulang, kita bisa menuliskannya hanya satu kali. Kemudian blok prosedur tersebut bisa kita ambil atau panggil sewaktu-waktu diperlukan.
§  Selain itu, pemisahan program dengan prosedur juga berguna agar kode program lebih mudah terbaca. Bagian ini memang jarang diperhatikan atau sering diabaikan oleh programmer pemula. Namun bagi mereka yang sudah expert dalam dunia programming pasti sangat memperhatikan betul masalah kemudahan dibaca suatu program.
§  Terakhir, prosedur juga dapat digunakan untuk menyembunyikan detail program. Jika dianalogikan secara sederhana, kita sehari-hari biasa tahu cara menggunakan rice cooker untuk memasak nasi, namun kita tidak perlu tahu bagaiamana cara kerja dari rice cooker tersebut secara teknis. Adakalahnya dalam program juga demikian. Kita bisa saja memanfaatkan prosedur yang sudah dibuat oleh orang lain tanpa perlu memahami bagaiamana logika didalamnya.
Agar pemahaman Anda lebih baik tentang apa itu prosedur, silakan coba kode program ini. Anda dapat mencoba kode program ini pada IDE Codeblock atau yang lainnya.







Perhatikan pada baris program tersebut. Alih-alih kita menggunakan proses perhitungan penjumlahan secara langsung, kita malah membuat sub program baru dengan nama hitung.
Sub program hitung diawali dengan penulisan void kemudian nama prosedur dan perlu diisi juga oleh parameter masukannya apa. Oh iya, untuk parameter Anda bisa mengosongkannya sebetulnya. Jadi struktur dari penulisan prosedur adalah seperti ini:
Stuktur Prosedur
1
2
3
4
void nama_prosedur (parameter1,parameter,2…,parameter n)
{
        //Ini isi dari prosedur
}
Apa Itu Fungsi Dalam Pemrograman C?
Jika sebelumnya kita telah panjang lebar membahas tentang Prosedur, lantas apa itu fungsi? Fungsi sejatinya sama saja dengan prosedur yaitu pemisahakan kode program menjadi modul-modul terpisah. Namun demikian tetap ada bedanya. Beda dari fungsi adalah dia harus mengembalikan nilai sesuai dengan tipe data pada saat mendeklarasikannya.
Biar Anda tidak bingung, mari lihat struktur penulisan dari sebuah fungsi
Sturktur Fungsi
1
2
3
4
5
tipe_data nama_fungsi (parameter1,parameter2,…parameterN)
{
      //Isi dari logika fungsi
      return nilai_kembalian
}
Lihat bagian tipe_data, dan return nilai_kembalian. Bagian tersebut menandakan perbedaan antara prosedur dan fungsi. Sebelum melangkah lebih jauh, silakan Anda lihat kembali stuktur prosedur dan bandingkan dengan struktur fungsi. Bagaiaman sudah terlihat bedanya bukan? Ya, pada prosedur itu tidak ada nilai yang perlu di return, sedangkan pada fungsi ada nilai yang perlu di return.
Jika Anda masih belum benar-benar faham tentang fungsi, coba  ikuti contoh program berikut ini.





Lihatlah contoh di atas dan pahamilah  pada fungsi hitung sekarang bukan diawali lagi oleh void, melainkan oleh int. Oh iya, untuk bagian ini anda bisa menggunakna tipe data apapun (int,char,float,dll.) sebagai tipe data kembaliannya. Hal yang terpeting adalah tipe datanya harus sama dengan tipe data nilai yang di return. Dalam contoh diatas kita bisa lihat bahwa tipe data dari fungsi hitung itu sama dengan tipe data dari return jumlah.
Untuk lebih memahami tentang fungsi, silakan coba kode program berikut ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>

float segitiga(int alas,int tinggi);

int main()
{
    int alas;
    int tinggi;
    float luas;
    printf("--Program Penghitung Segitiga--\n");
    printf("Masukan Nilai Alas : ");
    scanf("%d",&alas);
    printf("\nMasukan Nilai Tinggi:");
    scanf("%d",&tinggi);

    luas=segitiga(alas,tinggi);
    printf("Luas Segitiga=%f",luas);
}

float segitiga(int alas,int tinggi)
{
    float luas;
    luas=(alas*tinggi)/2;
    return luas;
}
Demikian, penjelasan singkat dari prosedur dan fungsi yang ada di Bahasa Pemrograman C.


ABSTRACT DATA TYPE DI C PEMROGRAMAN

Pengertian Data Bentukan

Tipe data bentukan adalah tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan kita buat. Tipe ini lebih dikenal dengan sebutan dalam bahasa asing, yaitu user defined types. Adapun yang termasuk ke dalam tipe bentukan adalah array (larik), struktur dan enumerasi.
   Struktur

Struktur adalah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe sama maupun berbeda. Untuk mumbuat tipe data struktur dalam C, menggunakan kata kunci struct. Bentuk umum pendeklarasian tipe:
Struct nama struktur {      Tipe_data variabel1;      Tipe_data variabel2;      ...}
 Enumerasi

Tipe Enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah didefinisikan saja. Tipe ini digunakan untuk membentuk tipe data yang nilainya bersifat pasti. Misalnya nama hari, jenis kelamin dan seterusnya

Contoh: enum jenis_kelami(pria, wanita)               enum hari (minggu, senin, selasa, rabu, kamis, jumat, sabtu)
Contoh Algoritma


struct nama_struktur
{
       tipe_data variabel1;
       tipe_data variabel2;
...
};


Dalam pendeklarasian strukrur kita harus mengakhirinya dengan tanda titik koma / semicolon (;).
Jika kita telah membuat tipe data bentukan baru yang berjenis struktur tentu kita akan menggunakannya di dalam pendeklarasian sebullah variabel. Pada saat itu, kita harus melakukan pengaksesan terhadap isi dari struktur tersebut dengan operator titik (.).

Sebagai contoh sederhana yang menerangkan tipe data struktur adalah dengan melihat suatu objek, Misalnya Mahasiswa. Kita tahu bahwa Mahasiswa pasti memiliki NIM, nama, alamat, umur, dll. Kasus ini dapat kita implementasikan ke dalam tipe struktur.

Berikut adalah contoh programnya :





B. ENUMERASI
Tipe enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah di definisikan saja. Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya bersifat pasti. Misalnya untuk mendefinisikan tipe jenis kelamin, nama hari, warna primer dan sebagainya. Kita tahu bahwa jenis kelamin hanya terdiri dari pria dan wanita saja, maka jenis kelamin dapat kita bentuk ke dalam tipe enumerasi. Enumerasi juga ditujukan untuk penanganan kesalahan proses input, output maupun proses pengolahan data dalam internal CPU. Dalam pemrograman C atau C++ tiap-tiap jenis kesalahan akan diidentifikasi oleh nama konstanta hal ini dikarenakan lebih mudah mengingat nama konstanta dibanding nilai atau angka. Untuk mendefinisikan tipe enumerasi adalah dengan menggunakan kata kunci enum.


POINTER DI BAHASA C

A. Pengertian Pointer
Pointer ( variabel petunjuk)  adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C.

Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer sifatnya
dinamis dan dapat lebih fleksibel. Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.

B. Deklarasi Pointer
Deklarasi variabel pointer seperti halnya deklarasi variabel lainnya hanya ditambahkan tanda * pada depan nama variabel.

int *b
Untuk mendapatkan alamat memori pointer (address of) maka perintah yang digunakan adalah menambahkan tanda & didepan variabel
&b

Untuk mendapatan Isi atau nilai dari variabel pointer maka perintah yang digunakan cukup nama variabelnya saja.
b

Untuk mendapatkan isi atau nilai dari alamat yang terdapat pada isi pointer (value pointed by) maka perintah yang digunakan adalah menambahkan tanda * didepan variabel
*b

C. Pass by value dan pass by reference
Pass by value, jika di dalam fungsi atau prosedur dilakukan perubahan nilai parameter yang dilewatkan secara nilai, maka nilai parameter yang sebenarnya tidak ikut berubah hal ini dikarenakan parameter yang dilewatkan secara nilai akan di copy sebagai nilai lokal di prosedur atau fungsi yang bersangkutan.

CONTOH :



dari program di atas dapat kita rinci menjadi


Sehingga apabila di outputkan menjadi


Pass by reference, jika di dalam prosedur atau fungsi dilakukan perubahan nilai parameter yang dilewatkan secara reference, maka nilai parameter yang sebenarnya juga akan berubah.

CONTOH :




dari program di atas dapat kita jelaskan menjadi :



Sehingga apabila di outputkan menjadi :



          Terlihat perbedaan antara Pass by Reference & pass by Value, Fungsi pass by value mendeklarasikan parameter inputan yang berupa variabel, sedangkan fungsi pass by reference mendeklarasikan parameter inputan yang berupa pointer. Dalam pemanggilan fungsi, fungsi dengan pass by value cukup menginputkan nama variabel (h dan u) pada parameter inputnya. Namun untuk memanggil fungsi pass by reference kita harus menyertakan tanda & di depan nama variabel, karena parameternya berupa variabel pointer.


FUNGSI PENCARIAN MENGGUNAKAN REKURSIF

Fungsi Pencarian Menggunakan Rekursif


Di postingan sebelumnya kita sudah belajar dan menjelaskan secara detail  mengenai rekursif, yaitu rekursif adalah fungsi yang memanggil dirinya sendiri. lalu pada postingan ini kita akan mencoba mengimplementasikan rekursif ke dalam suatu pencarian data.

Berikut contoh source code dari program di atas :




Dan apabila source code di atas di jalankan maka outputnya akan seperti ini :


Itulah contoh dari cara fungsi pencarian menggunakan rekursif. Sebenarnya ada banyak cara untuk membuat program pencarian dan tidak harus menggunakan rekursif.

REKURSIF DALAM BAHASA C DI PEMROGRAMAN

PENGERTIAN REKURSIF

Rekursif adalah suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi. Pemanggilan diri sendiri dilakukan berulang-ulang sampai mencapai titik tertentu.

Implementasi dari rekursif sebenarnya ada banyak, tapi kali ini kita akan mencoba mengimplementasikan rekursif ke dalam penjumlahan.





Dari contoh analogi diatas, kita dapat menarik kesimpulan :

Fungsi rekursif selalu memiliki kondisi yang menyatakan kapan fungsi tersebut berhenti. Kondisi ini harus dapat dibuktikan akan tercapai, karena jika tidak tercapai maka kita tidak dapat membuktikan bahwa fungsi akan berhenti, yang berarti algoritma kita tidak benar.

Fungsi rekursif selalu memanggil dirinya sendiri sambil mengurangi atau memecahkan data masukan setiap panggilannya. Hal ini penting diingat, karena tujuan utama dari rekursif ialah memecahkan masalah dengan mengurangi masalah tersebut menjadi masalah-masalah kecil.

Berikut contoh source code dari problem di atas : 



Dari source code di atas dapat di tarik kesimpulan bahwa fungsi rekursif merupakan fungsi yang memanggil dirinya sendiri. Terdapat dua komponen penting dalam fungsi rekursif, yaitu kondisi kapan berhentinya fungsi dan pengurangan atau pembagian data ketika fungsi memanggil dirinya sendiri. Optimasi fungsi rekursif dapat dilakukan dengan menggunakan teknik tail call, meskipun teknik ini tidak selalu diimplementasikan oleh semua bahasa pemrograman. Selain sebagai fungsi, konsep rekursif juga terkadang digunakan untuk struktur data seperti binary tree atau list.


SORTING DALAM BAHASA C DI PEMROGRAMAN

SORTING DALAM BAHASA C
PENGERTIAN SORTING

Sorting merupakan teknik untuk mengurutkan data yang acak hingga bisa tersusun rapi dari terkecil ke terbesar atau sebaliknya.
Ada berbagai macam teknik sorting ini diantaranya bubble sort,insertion sort,selection sort dan masih banyak lagi . Tapi kali ini kita akan mencoba 3 teknik sorting dari yang saya sebut tadi.
Mari kita kupas satu persatu mengenai teknik sorting ini.

A. Bubble sort

Bubble Sort adalah salah satu algoritma untuk sorting data, atau kata lainnya mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya (Ascending atau Descending).


Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.

Contoh program:


 


B. Insertion Sort

Insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen data pada pisisinya dengan cara melakukan perbandingan dengan data – data yang ada. Inde algoritma dari metode insertion sort ini dapat dianalogikan sama seperti mengurutkan kartu, dimana jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang lain akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu tersebut. Dalam pengurutan data, metode ini dipakai bertujuan untuk menjadikan bagian sisi kiri array terurutkan sampai dengan seluruh array diurutkan.

Contoh program:




C. Selection Sort

Selection sort merupakan kombinasi dari searching dan sorting. Sebuah algoritma pengurutan yang secara berulang mencari item yang belum terurut dan mencari paling sedikit satu untuk dimasukkan ke dalam lokasi akhir. Metode ini memiliki konsep memilih data yang maksimum/minimum dari suatu kumpulan data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau paling awal
sesuai pengurutan yang diinginkan. Data maksimum/minimum yang diperoleh, diasingkan ke tempat lain, dan tidak diikutsertakan pada proses pencarian data maksimum/minimum berikutnya.

Di dalam selection sort memiliki 2 varian seleksi/pengurutan data yaitu maximum sort dan minimum sort.


1.    Maximum sort yaitu mencari data terbesar(X) yang dibandingan dengan index 1 kemudian jika   index1 < data terbesar(X) maka data terbesar menjadi index 1.


2.    Minimum sort yaitu kebalikan dari maximum sort yaitu mencari data terkecil(X) yang   dibandingkan dengan index 1 kemudian jika index1 > data terkecil(X) maka data terkecil menjadi       index1.

Mari kita lihat programnya

Contoh Program:




Semua teknik sorting sebenarnya mempunyai tujuan program yang sama yaitu mengurutkan data dari terkecil ke terbesar atau sebaliknya. Perbedaan hanya di dalam teknik untuk membuat data tersebut terstruktur atau berurutan.


FUNGSI DALAM BAHASA C DI PEMROGRAMAN

- Fungsi adalah bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan   letaknya dipisahkan dari program yang menggunakannya. Program dari bahasa C dibentuk dari kumpulan-kumpulan fungsi, mulai dari fungsi utama, fungsi pustka, maupun fungsi yang dibuat oleh pemrogram.

Manfaat fungsi :

– Fungsi menjadikan program C memiliki struktur yang jelas. Dengan memisahkan langkah-langkah detil ke satu atau lebih fungsi, maka fungsi utama (main( )) akan menjadi lebih pendek, jelas dan mudah dimengerti.

– Fungsi-fungsi dapat dijinkan untuk menghindari penulisan yang sama berulang-ulang. Langkah-langkah program yang sama dan sering digunakan berulang-ulang dapat ditulis sekali saja secara terpisah dalam bentuk fungsi-fungsi, selanjutnya bagian program yang membutuhkan langkah-langkah ini cukup memanggil fungsi-fungsi tersebut.
Nilai akhir dari suatu fungsi adalah nilai yang dikembalikan oleh fungsi berdasarkan input parameter-parameter yang dimasukkan.

Contoh fungsi:
int rata(int x, int y, int z)
{
int ave;
ave = (x + y + z)/3;
return(ave);
}

Di dalam fungsi dikenal istilah Parameter Formal dan Parameter Aktual :
a. Parameter formal adalah parameter yang terdapat pada pendefinisian sebuah fungsi.
b. Parameter aktual adalah parameter yang terdapat pada saat pemanggilan fungsi.

Cara melewatkan parameter ke dalam suatu fungsi dapat dilakukan melalui dua cara yaitu:
a. Pelewatan parameter melalui nilai (call by value) :
– pelewatan parameter ke dalam fungsi dengan menyalin nilai dari suatu variabel aktualnya. Maksudnya adalah fungsi menerima masukan berupa nilai, bukan alamat memori letak dari datanya dan nilai tersebut disimpan di alamat memori yang terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi.
Contoh :
#include <stdio.h>
#include <conio.h>
int kali(int a,int b, int c) //parameter formal
{
int x;
x = a * b * c;
return(x);
}
int main()
{
int a,b,c;
printf(“Masukkan angka 1 : “);
scanf(“%d”,&a);
printf(“Masukkan angka 2 : “);
scanf(“%d”,&b);
printf(“Masukkan angka 3 : “);
scanf(“%d”,&c);
printf(“Hasil perkalian ketiga bilangan adalah %d”,kali(a,b,c)); //parameter aktual
getch();
return(0);
}

b. Pelewatan parameter melalui acuan/referensi (call by reference) :
– pelewatan parameter ke dalam fungsi dengan menyalin alamat dari suatu variabel aktualnya. Fungsi yang menerima kiriman alamat ini akan menggunakan alamat yang sama untuk mendapatkan nilai datanya. Hal ini dilakukan dengan menggunakan pointer. Pointer adalah variabel yang merujuk pada alamat lokasi suatu memori tertentu, variable pointer dapat dideklarasikan dengan menuliskan nama variabelnya diawali dengan asterisk (‘*’). Perubahan yang terjadi pada variabel asal akan mengakibatkan perubahan pada variabel pointernya dan sebaliknya.
Contoh :
#include <stdio.h>
#include <conio.h>
void desc_sort(int *bil1,int *bil2) //parameter formal
{
if(*bil1<*bil2)
{
*bil1 = *bil1 + *bil2;
*bil2 = *bil1 – *bil2;
*bil1 = *bil1 – *bil2;
}
}
int main()
{
int a,b,c;
printf(“Masukkan angka 1 : “);
scanf(“%d”,&a);
printf(“Masukkan angka 2 : “);
scanf(“%d”,&b);
printf(“Masukkan angka 3 : “);
scanf(“%d”,&c);
desc_sort(&a,&b); //parameter aktual
desc_sort(&a,&c); //parameter aktual
desc_sort(&b,&c); //parameter aktual
printf(“Hasil descending sort adalah %2d %2d %2d”,a,b,c);
getch();
return(0);
}

Di dalam penggunaan fungsi-fungsi dalam program kita mengenal adanya istilah variable local dan variable global :
a. Variabel lokal :
– Variabel yang nama dan nilainya hanya dikenal di suatu blok statement tertentu saja atau di dalam suatu fungsi. Variabel lokal harus dideklarasikan di dalam blok bersangkutan. Variabel lokal akan dihapus dari memori jika proses sudah meninggalkan blok statement letak variable lokalnya.
b. Variabel global :
– Variabel yang dikenal di semua bagian-bagian tertentu dari program. Variabel global dapat dibuat dengan cara mendeklarasikannya di luar suatu blok statement atau di luar fungsi-fungsi yang menggunakannya.


PENJELASAN NOTASI ALGORITMA





Gambar diatas merupakan makanan yang sangat populer di indonesia dan rasanya lezat dan hampir semua orang menyukai makanan tersebut


•  cara membuat nasi goreng, gunakan wajan anti lengket karena akan berpengaruh dengan akhir cerita memasak nasi goreng, sebelumnya wajan wajib dipanaskan terlebih dahulu sebelum memasukkan bahan-bahan. Kalian bisa menggunakan api sedang atau api kecil.
•  Pilih jenis nasi yang terbuat dari beras yang lebih panjang. Biasanya dikenal dengan sebutan “nasi murah”. Hindari menggunakan nasi pulen. Akan tetapi ada cara yang lebih mudah agar nasi tidak terlihat pulen. Masak nasi dengan air yang lebih sedikit.
•  Nasi yang cocok untuk bahan nasi goreng adalah nasi yang sudah dingin. Biasanya para penjual nasi goreng sengaja mendinginkan nasi sebelum memasaknya. Maka jika kita ingin memasak dari nasi yang sudah diambil dari magic jar, sebaiknya dinginkan terlebih dahulu. Jika perlu sampai nasi tersebut tidak lengket. Tapi perlu digaris bawahi jangan sampai nasi menjadi terlalu keras, agar bumbu dapat meresap ke dalam nasinya.
•  Pada saat menumis bumbu, usahakan jangan membiarkan bumbu dan saus yang kalian masukkan menjadi terlalu masak. Usahakan aduk dengan cepat sampai bumbu berbau harum dan pada saat semua bahan sudah matang, segera masukkan saus, aduk cepat dan angkat. Faktor bumbu juga menjadi alasan penting. Tak heran jika kita melihat penjual nasi goreng sangat cepat saat memasak.
•  Untuk membuat nasi goreng yang enak, sesuaikan wajan dengan porsi nasi gorengnya. Apabila wajan yang digunakan berukuran sedang, maka porsi 2-3 orang yang paling pas. Perlu diingat, jangan terlalu memasak banyak porsi.

APA ITU  NOTASI ALGORITMIK ?
Notasi algoritmik merupakan standard yang dipakai dalam menuliskan teks algoritma. Dalam hal ini algoritma dan program dibedakan. Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Program adalah serangkaian instruksi berurutan yang dituliskan dalam bentuk bahasa pemrograman agar dapat dimengerti dan dieksekusi oleh computer.
Notasi Algoritmik terdiri dari tiga bagian, yaitu :
– Judul (Header)
– Kamus
– Algoritma
Contoh Notasi Algoritmik
JUDUL
{ Ini adalah teks dalam bahasa Indonesia untuk memudahkan
pembacaan teks algoritma}
{ Spesifikasi teks algoritmik secara umum }
KAMUS
{Pada bagian ini, dilakukan pendefinisian nama konstanta, nama
variabel, spesifikasi prosedur, spesifikasi fungsi }
ALGORITMA
{ Pada bagian ini, semua teks yang tidak dituliskan di antara tanda
kurung kurawal buka dan kurung kurawal tutup harus dianggap
sebagai notasi algoritmik }
Bagaimana bila cara membuat nasi goreng dinotasikan secara algoritmik ?
berikut adalah contoh notasi algoritmik cara membuat nasi goreng :

JUDUL
KAMUS
DISKRIPSI
===============  maka nasi goreng akan dibuat menjadi berik  ===============
Judul : Membuat Nasi Goreng Special Pete Pedas Manis untuk 2 orang Dewasa, untuk dinner, untuk acara memperingati hari jadi.
Kamus
nasi
bawang merah
bawang putih
garam
kecap
petai
cabe
minyak goreng
Diskripsi
cabe = 5 buah
bawang merah = 3 siung
bawang putih = 1 siung
nasi = 2 piring
minyak goreng = 50 ml
kecap = 50 ml
petai = 2 papan
cabe = 1 sendok teh
kupas petai dan ambil buah petainya
siapkan cobek
tuangkan cabai, garam, bawang merah dan putih diatas cobek (membuat bumbu)
haluskan
siapkan wajan diatas kompor
tuangkan minyak goreng secukupnya dan panaskan minyak goreng
jika sudah cukup panas maka tuangkan bumbu dan tumislah
tuangkan petai
kemudian tuangkan nasi
aduk hingga rata
tuangkan kecap
aduk sampai rata
sajikan
———————————— kira kira begitulah sederhananya ————————————
namun bagaimana cara mengetahui itu sudah matang, tidak gosong, tidak kemanisan atau kurang manis,  dll ? Maka hal yang perlu di perhatikan adalah mengamati line per line dari statement yang ada. Belum lagi kalo kegunaan nasi goreng, kondisi dan keadaan (nasinya, sengaja dibuat nasi goreng, ada nya nasi yang tidak kemakan, atau konsumsi jualan nasi goreng)…  hal-hal semacam itu akan menjadikan sesuatu yang berbeda dari sisi algoritmik dan code nya. sehingga kegiatan coding bisa menjadi SENI / art
————————perhatikan jika notasi algoritmik diatas dirubah lebih manusiawi————————–

//Judul:               
·         Membuat nasi goreng sosis untuk dua orang kakak dan adik
//Kamus:
·         Nasi Putih
·         Bawang merah
·         Bawang putih
·         Garam
·         Merica
·         Cabai
·         Kecap
·         Telur
·         Sosis
·         Minyak goreng
//Deskrpsi :
·         Bawang merah = 2 biji
·         Bawang putih = 2 biji
·         Cabai = 5 biji
·         Telur = 2 butir
·         Sosis = 4 biji
·         Minyak goreng = 15 ML
·         Kecap = 15 ML
·         Kupas bawang merah dan bawang putih lalu ambil cobek
·         Tuangkan bawang merah dan bawang putih, garam, merica, cabai di atas  cobeknya
·         Haluskan
·         If (kurang pedas) then
{ tambah cabai 1 }
·         While (kurang halus) do
{haluskan lagi}
·         Siapkan wajan di atas kompor yang sudah menyala
·         Tuangkan minyak goreng secukupnya
·         Tunggu sampai panas
·         While (belum panas) do
{panaskan lagi}
·         Tumis bumbu yang sudah di haluskan ke dalam wajan
·         Siapkan telur lalu goreng bersamaan dengan tumisan bumbu
·         Aduk hingga bumbu dan telur menyatu
·         Siapkan nasi putih lalu masukan ke wajan bersamaan dengan bumbu yang di tumis
·         Aduk hingga merata
·         While (belum merata) do
{aduk lagi}
·         Siapkan sosis lalu potong kecil-kecil lalu masukan kedalam wajan
·         Siapkan kecap manis dan tuangkan sedikit demi sedikit ke nasi goreng setengah matang
·         While (kurang manis) do
{tuangkan sedikit lagi}
·         Aduk lagi hingga nasi berwarna kuning ke emasan merata
·         While (belum merata)do             
{aduk lagi}
·         Tunggu sampai harum dan matang

·         Sajikan