GREYNDA TWINKLE

Sequential Search Dengan Bahasa C

SEQUENTIAL SEARCH
·         Sequential Search merupakan algoritma pencarian brute force.
·         Proses pencarian membandingkan nilai Kunci dengan semua elemen nilai.
·         Membandingkan nilai Kunci dengan elemen pertama sampai elemen terakhir.
·         Proses terhenti jika nilai kunci cocok dengan nilai elemen tanpa harus membandingkan semua elemen.
·         Sequential Search – Case 1
Tabel A[0..n]


Membandingkan nilai Kunci dengan elemen pertama sampai elemen terakhir.
·         Sequential Search – Case 2
Tabel A[0..n]


Proses pencarian berhenti jika nilai kunci cocok dengan nilai elemen tanpa harus membandingkan semua elemen

Deklarasikan fungsi-fungsi di bawah ini ke dalam header.h, serta buat realisasi fungsi tersebut pada file fungsi.c,  kemudian buat uji cobalah semua fungsi dengan membuat program pemanggil pada file main.c.
Þ     int sequent_search(int angka, int data[], int jml_data)
Fungsi ini akan mengembalikan nilai true jika nilai yang dicari melalui parameter angka ada pada parameter data, dan akan mengembalikan nilai false jika angka tidak ditemukan. Algoritma pencarian yang digunakan adalah sequential search.
Contoh :


Þ     int is_inverse(int list1[], int list2[], int jml_data)
Fungsi ini akan mengembalikan nilai true jika array parameter list1 merupakan kebalikan dari array pada parameter list2.
Contoh :


Þ     void min_max(int data[], int jml_data, int *min, int *max)
Fungsi ini akan mengirimkan minimum dan maksimum dari sebuah list data yang diberikan pada parameter. Nilai minimum akan dikirimkan pada parameter *min, dan nilai maksimum akan dikirimkan pada parameter *max.
Contoh :


Þ     int min_max_gap(int data[], int jml_data)
Fungsi ini akan mengembalikan gap (jarak) antara nilai minimal dan nilai maksimal yang ada pada list parameter data.
Contoh :


Þ     int at_least(char huruf, int jml, char teks[])
Fungsi ini akan mengembalikan nilai true jika di dalam parameter teks terdapat karakter huruf minimal sebanyak nilai pada parameter jml, dan akan mengembalikan nilai false jika tidak sampai sebanyak nilai pada parameter jml.
Contoh :



Untuk mendeklarasi menggunakan fungsi-fungsi diatas kita akan menggunakan program seperti di bawah ini , tentunya kita harus membuat project dengan 3 file yaitu header.h, fungsi.c dan main.c :

1.       Bagian header.h
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define true 1
#define false 0
#define boolean unsigned char
int sequent_search(int angka,int data[]);
int is_inverse(int list1[],int list2[]);
void min_max(int data[],int *min, int *max);
int min_max_gap(int data[]);
int at_least(char huruf, int jml,char teks[]);
void konversi_karakter(char text[100]);
char temp[100];
int temp2[100];

#endif // HEADER_H_INCLUDED

2.       Bagian fungsi.c
#include "header.h"

int sequent_search(int angka,int data[])
{
    int i;
    for(i=0;i<9-1;i++)
    {
        if(data[i]==angka)
        {
            return true;
            break;
        }
    }
    return false;
}

int is_inverse(int list1[],int list2[])
{
    int i;
    int static j=0;
    boolean lebih_besar1=false,lebih_besar2=false,lebih_kecil1=false,lebih_kecil2=false,cek=false;
    if(list1[j]<list1[j+1])
    {
        lebih_besar1=true;
        for(i=0;i<5-1;i++)
        {
            if(list1[i]>list1[i+1])
            {
                lebih_besar1=false;
                break;
            }
        }
    }
    else if(list1[j]>list1[j+1])
    {
        lebih_kecil1=true;
        for(i=0;i<5-1;i++)
        {
            if(list1[i]<list1[i+1])
            {
                lebih_kecil1=false;
                break;
            }
        }
    }
    if(list2[j]<list2[j+1])
    {
        lebih_besar2=true;
        for(i=0;i<5-1;i++)
        {
            if(list2[i]>list2[i+1])
            {
                lebih_besar2=false;
                break;
            }
        }
    }
    else if(list2[j]>list2[j+1])
    {
        lebih_kecil2=true;
        for(i=0;i<5-1;i++)
        {
            if(list2[i]<list2[i+1])
            {
                lebih_kecil2=false;
                break;
            }
        }
    }

    if(lebih_besar1==true&&lebih_kecil2==true)
    {
        cek=true;
    }
    else if(lebih_kecil1==true&&lebih_besar2==true)
    {
        cek=true;
    }
    else
    {
        cek=false;
    }
    return cek;
}

void min_max(int data[],int *min, int *max)
{
    int i;
    *min=data[0];
    *max=data[0];
    for(i=1;i<6&&data[i]!='\0';i++)
    {
        if(data[i]<*min)
        {
            *min=data[i];
        }
        else if(data[i]>*max)
        {
            *max=data[i];
        }
    }
}

int min_max_gap(int data[])
{
    int min,max;
    min_max(data,&min,&max);
    return max-min;
}

int at_least(char huruf, int jml,char teks[])
{
    int i,hitung=0;
    strcpy(temp,teks);
    strlwr(temp);
    for(i=0;temp[i]!='\0';i++)
    {
        if(temp[i]==huruf)
        {
            hitung++;
        }
    }
    if(hitung==jml)
    {
        return true;
    }
    else
    {
        return false;
    }
}

3.       Bagian main.c
#include "header.h"

int main()
{
    puts("==============================================");
    puts("\t\tSequent Search");
    puts("==============================================");
    int data[] = {12, 14, 20, 15, 22, 25, 18, 10, 27};
    printf("Sequent Search 15 ?%s\n",sequent_search(15, data) ?" ""True":" ""False");
    printf("Sequent Search 25 ?%s\n",sequent_search(25, data) ?" ""True":" ""False");
    printf("Sequent Search 39 ?%s\n",sequent_search(39, data) ?" ""True":" ""False");
    printf("Sequent Search 17 ?%s\n",sequent_search(17, data) ?" ""True":" ""False");

    puts("\n==============================================");
    puts("\t\tIs Inverse");
    puts("==============================================");
    int list1[] = {1, 2, 3, 4, 5};
    int list2[] = {5, 4, 3, 2, 1};
    int list3[] = {6, 7, 8, 9, 10};

    printf("is_inverse List 1 & List 2 ?%s\n",is_inverse(list1, list2) ?" ""True":" ""False");
    printf("is_inverse List 2 & List 3 ?%s\n",is_inverse(list2, list3) ?" ""True":" ""False");
    printf("is_inverse List 1 & List 3 ?%s\n",is_inverse(list1, list3) ?" ""True":" ""False");
    printf("is_inverse List 2 & List 2 ?%s\n",is_inverse(list2, list2) ?" ""True":" ""False");

    puts("\n==============================================");
    puts("\t\tMin Max");
    puts("==============================================");

    int list11[] = {9, 12, 43, 13, 15};
    int list12[] = {12, 4, 19, 9, 22, 1};
    int list13[] = {8, 21, 29, 17, 20, 13};
    int list14[] = {18, 11, 19, 25, 31, 15};

    int a,b;
    min_max(list11, &a, &b);
    printf("Min = %d ,Max = %d\n",a,b);
    min_max(list12, &a, &b);
    printf("Min = %d ,Max = %d\n",a,b);
    min_max(list13, &a, &b);
    printf("Min = %d ,Max = %d\n",a,b);
    min_max(list14, &a, &b);
    printf("Min = %d ,Max = %d\n",a,b);

    puts("\n==============================================");
    puts("\t\tMin Max GAP");
    puts("==============================================");

    printf("min_max_gap List11 %d\n",min_max_gap(list11));
    printf("min_max_gap List12 %d\n",min_max_gap(list12));
    printf("min_max_gap List13 %d\n",min_max_gap(list13));
    printf("min_max_gap List14 %d\n",min_max_gap(list14));

    puts("\n==============================================");
    puts("\t\tAt Least");
    puts("==============================================");

    printf("\n");

    printf("at_least 1 ?%s\n",at_least('r', 3, "Larry Page")?" ""True":" ""False");
    printf("at_least 2 ?%s\n",at_least('m', 2, "Matt Mullenweg")?" ""True":" ""False");
    printf("at_least 3 ?%s\n",at_least('a', 2, "Mark Zuckerberg")?" ""True":" ""False");
    printf("at_least 4 ?%s\n",at_least('m', 2, "Jimmy Wales")?" ""True":" ""False");


    return 0;
}
4.       Setelah itu kita build dan run program tersebut , dan hasilnya :

Share:

Tidak ada komentar: