OLEH
Saif Adzzahabi
20076101
DOSEN PEMBIMBING
2020 / 2021
Linier Searching
Contoh Program 1
Percobaan Program
Contoh Program 2
Buatlah sebuah program yang digunakan untuk mengisi, mencari dan menampilkan informasi.
Program harus modular atau terdiri dari fungsi-fungsi yang dibutuhkan.
Jawab :
1. Penguraian masalah:
Masalah dalam contoh kasus ini dapat dibagi menjadi beberapa masalah lebih
kecil, yaitu:
Masalah entri sejumlah data sesuai kebutuhan (atau ditetapkan sebagai ukuran array data.
Kita akan mengimplementasi fungsi entri data atau isiNilai()
Masalah mencari data tertentu sesuai keinginan dan akan dijadikan fungsi pencarian,
misal bernama cariNilai()
Masalah menampilkan seluruh isi array dapat diimplemetasikan sebagai fungsi untuk
menampilkan dapat diberi nama fungsi tampilka()
2. Kebutuhan konstanta
Untuk menyimpan seluruh data dan dapat diakses dari seluruh tempat pada program,
dibutuhkan variabel array, misal bernama nilai[] bertipe double dengan jumlah elemen sebanyak
N buah.
- Fungsi isi Nilai
- Fungsi cari Nilai()
- Fungsi tampilkan()
Listing Program
#include <stdio.h>
#define N 8
void isiNilai();
void cariNilai();
void tampilkan();
double nilai[N];
main()
{
isiNilai();
tampilkan();
cariNilai();
}
void isiNilai()
{
double nilainya;
int i;
printf("\nMENGENTRI NILAI\n");
for(i=0;i<N;++i)
{
printf("\nKetikkan nilai ke-%d: ", i);
scanf("%lf", &nilainya);
nilai[i] = nilainya;
}
printf("\nEntri Nilai selesai\n");
printf("Tekan tombol ENter!!!!");
}
void cariNilai()
{
double nilainya;
int i, posisi, tanda;
void tampilkan()
{
int i;
printf("\nDAFTAR NILAI\n\n");
for(i=0;i<N;++i)
{
printf("Nilai pada posisi %d: %0.2lf\n", i, nilai[i]);
}
printf("\nSelesai!!! Tekan tombol Enter...");
}
Percobaan Program 2
Pencarian linier juga dapat digunakan untuk mencari semua data yang cocok pada sekelompok
data. Pada fungsi cari Nilai () yang akan menghasilkan jumlah data yang cocok ditemukan,
sebagai berikut:
void cariNilai()
{
double nilainya;
int i, konter, posisi, tanda;
printf("\nKetikan nilai yg dicari: ");
scanf("%lf", &nilainya);
//mulai mencari
konter = 0;
for(i=0;i<N;++i)
{
if(nilai[i] == nilainya)
{
konter++;
tanda = 1;
printf("\nData ke-%d ada pada posisi: %d",konter, i);
}
else
{
tanda = 0; //tdk ditemukan
continue;
}
}
if(konter)
{
printf("\nData ditemukan sebanyak %d buah...\n", konter);
}
else
{
printf("\nData tidak ditemukan... \n");
}
}
}
Fungsi ini akan menuliskan ke layar berapa banyak data yang cocok dengan data yang
dicari. Implementasi lengkap dalam C dapat dilihat pada listing program berikut ini:
/*
Cari nilai yg ditentukan
*/
Percobaan Program
#include <stdio.h>
#define N 8
void isiNilai();
void cariNilai();
void tampilkan();
double nilai[N];
main()
{
isiNilai();
tampilkan();
cariNilai();
}
void isiNilai()
{
double nilainya;
int i;
printf("\nMENGENTRI NILAI\n");
for(i=0;i<N;++i)
{
printf("\nKetikkan nilai ke-%d: ", i);
scanf("%lf", &nilainya);
nilai[i] = nilainya;
}
printf("\nEntri Nilai selesai\n");
printf("Tekan Tombol Enter");
}
void cariNilai()
{
double nilainya;
int i, konter, posisi, tanda;
printf("\nKetikan nilai yg dicari: ");
scanf("%lf", &nilainya);
//mulai mencari
konter = 0;
for(i=0;i<N;++i)
{
if(nilai[i] == nilainya)
{
konter++;
tanda = 1;
printf("\nData ke-%d ada pada posisi: %d",konter, i);
}
else
{
tanda = 0; //tidak ditemukan
continue;
}
}
if(konter)
{
printf("\nData ditemukan sebanyak %d buah...\n", konter);
}
else
{
printf("\nData tidak ditemukan... \n");
}
}
void tampilkan()
{
int i;
printf("\nDAFTAR NILAI\n\n");
for(i=0;i<N;++i)
{
printf("Nilai pada posisi %d: %0.2lf\n", i, nilai[i]);
}
printf("\nSelesai!!! Tekan tombol Enter...");
}
Hasil Output Program
Contoh Program 4
Buatlah program yang dapat digunakan untuk mencari data nomor induk mahasiswa dari
sekelompok nim yang tersimpan dalam suatu array.
Jawab:
Analisis kebutuhan
Kebutuhan konstanta
- Konstanta untuk menetapkan banyaknya data, beri nama N dengan nilai sembarang,
misal 10.
- Variabel untuk menyimpan data nim bertipe string atau char[] berbentuk array yang
dapat menampung N data dan setiap nim berukuran sama, misal 4 (atau 4 karakter),
misalnya:
char nim[N][4];
Kebutuhan fungsi pencarian
Fungsi yang akan dibuat merupakan fungsi yang memiliki nilai balik berupa nilai boolean
(dalam C digunakan tipe int) dimana nilai 0 untuk menyatakan false dan 1 menyatakan true.
Listing Program
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
main(){
int i, status;
char nimnya[4];
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
main(){
int i;
char namanya[4];
Contoh Program 6
Kemabangkan program-program sebelumnya terkait pencarian dan implementasikan untuk
mencari data pada suatu array of struct yang telah kita buat berupa tipe DATAMHS.
Jawab:
Program yang akan dikembangkan memiliki fasilitas untuk entri identitas mahasiswa, entri nilai
(mid, uas, tugas dan quis), fasilitas untuk menghitung nilai akhir, fasilitas untuk mengkonversi
nilai akhir menjadi nilai huruf serta fasilitas lainnya untuk menampilkan informasi, mencari data
data tertentu. Dengan demikian analisis yang kita lakukan sama dengan analisis kebutuhan untuk
program serupa pada Modul 8 hanya saja dilengkapi dengan kebutuhan fungsi pencarian.
Perhatikan implementasi fungsi pencarian berikut ini:
Fungsi pencarian cariData() hampir sama dengan fungsi pencarian dengan yang pernah kita buat,
hanya pada fungsi cariData() ini nilai balik dari fungsi berupa nilai indeks atau posisi data
tersebut pada array of struct.
Listing Program
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//kedua tipe MHS dan NILAI digunakan untuk tipe bentukan baru
//suatu stract of struct atau struct di dalam struct, sehingga
//struct yang baru memili seluruh data baik identitas maupun
//nilai2 mahasiswa, sbb:
typedef struct DATAMHS{
MHS mhs;
NILAI nilai;
} DATAMHS;
//deklarasi variabel global berupa array of struct dari tipe DATAMHS sbb:
DATAMHS dataMhs[N]; //banyak mahasiswa adalah N orang
main(){
int i, posisi; //konter perulangan untuk menampilkan data mahasiswa
char nimnya[4];
printf("Contoh Pencarian\n\n");
//panggil fungsi judul()
judul();
//panggil fungsi bacaMhs()
bacaMhs();
printf("Menampilkan Identitas Seluruh Mahasiswa\n");
for(i=0;i<N;i++){
//panggil fungsi infoMhs() mulai dari i=0, atau yg pertama
infoMhs(i);//nilai i adalah passing parameter yng menyatakan no indeks array
printf("\n");
}
void judul(){
printf("===============================================================
===\n");
printf("Program Pengolahan Data Mahasiswa\n");
printf("Programmer: Antu\n");
printf("Program ini digunakan untuk mencontohkan pembuatan fungsi tanpa nilai balik\
n");
printf("===============================================================
===\n");
printf("Tekan tombol enter...");
}
void bacaMhs(){
int i; //variable konter perulangan
char namanya[4]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa
strcpy(namanya, dataMhs[i].mhs.nama);
strcpy(nimnya, dataMhs[i].mhs.nim);
//tampung dulu nilai akhir dan nilai huruf
nAkhirnya = dataMhs[i].nilai.nAkhir;
nHurufnya = dataMhs[i].nilai.nHuruf;
//tampilkan informasi mahasiswa yang diminta
printf("Nama Mahasiswa : %s\n", namanya);
printf("Nomor Induk Mahasiswa : %s\n", nimnya);
printf("\tNilai Akhir : %0.1lf\n", nAkhirnya);
printf("\tNilai Huruf : %c\n", nHurufnya);
printf("==============================================\n");
}
Jawab:
Analisis Kebutuhan:
- Kebutuhan konstanta
Perlu konstanta untuk menetapkan banyaknya elemen array, misal N dengan sembarang (misal
nilai 10) sbb:
#define N 10
Variabel array dengan jumlah elemen adalah N, misal berinama data[N] bertipe int, sbb:
Int data[N];
- Kebutuhan fungsi
Fungsi untuk mengurutkan data dapat mengimplementasikan algoritma selection sort yang sudah
disampaikan.
#include <stdio.h>
#include <stdlib.h>
void urutkan();
main(){
int i;
int datanya;
Buatlah program seperti pada kasus 1 tetapi urutannya dari besar ke kecil atau descending order.
Jawab:
Analisis kebutuhan untuk kasus ini relatif sama dengan kasus no 1, hanya saja fungsi untuk
mengurutkan data diubah dari pengurutan dengan sifat ascending atau dari kecil ke besar
menjadi descending atau dari besar ke kecil. Perubahan juga dilakukan pada penamaan variabel
sesuai maksud dari isi variabel-variabel tersebut. Perhatikan perubahan yang dilakukan pada
fungsi urutkan().
Berikut:
void urutkan() { //metode selection sort
int indexMaks,i,j;
int temp;
#include <stdio.h>
#include <stdlib.h>
void urutkan();
void infokan();
main(){
int i;
int datanya;
void infokan(){
int i, datanya;
//kedua tipe MHS dan NILAI digunakan untuk tipe bentukan baru
//suatu stract of struct atau struct di dalam struct, sehingga
//struct yang baru memili seluruh data baik identitas maupun
//nilai2 mahasiswa, sbb:
typedef struct DATAMHS{
MHS mhs;
NILAI nilai;
} DATAMHS;
//deklarasi fungsi yang akan digunakan
void judul();
void bacaMhs();
void bacaNilai(int i); //fungsi untuk mengisi nilai mahasiswa
void infoMhs(int i);
double hitungAkhir(double m, double u, double t, double q);
char konversiHuruf(double na);
int cariData(char nimnya[]);//fungsi ini mencari posisi data yg dicari
void urutkan();
//deklarasi variabel global berupa array of struct dari tipe DATAMHS sbb:
DATAMHS dataMhs[N]; //banyak mahasiswa adalah N orang
int main(){
int i, posisi; //konter perulangan untuk menampilkan data mahasiswa
char nimnya[4];
printf("Contoh Pengurutan\n\n");
//panggil fungsi judul()
judul();
//panggil fungsi bacaMhs()
bacaMhs();
printf("\nMenampilkan Identitas Seluruh Mahasiswa\n");
printf("Tekan Enter...");
for(i=0;i<N;i++){
//panggil fungsi infoMhs() mulai dari i=0, atau yg pertama
infoMhs(i);//nilai i adalah passing parameter yng menyatakan no indeks
array
printf("\n");
}
printf("\nMencari Mahasiswa melalui NIM\n");
printf("Tekan Enter...");
printf("\nKetikkan NIM yang dicari: ");
gets(nimnya); fflush(stdin);
posisi = cariData(nimnya);
if(posisi != -999){
printf("\nData ditemukan...\n");
infoMhs(posisi); //kirimkan nilai posisi data untuk ditampilkan
}
else printf("\nData tidak ditemukan....\n");
printf("\nMengurutkan data Mahasiswa\n");
printf("Tekan Enter...");
urutkan();
printf("Data diurutkan secara descending...\n");
for(i=0;i<N;i++){
//panggil fungsi infoMhs() mulai dari i=0, atau yg pertama
infoMhs(i);//nilai i adalah passing parameter yng menyatakan no indeks
array
printf("\n");
}
printf("Selesai...Tekan Enter...");
}
void judul(){
printf("==========================================================
=======\n");
printf("Program Pengolahan Data Mahasiswa\n");
printf("Programmer: Antu\n");
printf("Program ini digunakan untuk mencontohkan pembuatan fungsi tanpa nilai
balik\n");
printf("==========================================================
=======\n");
printf("Tekan tombol enter...");
}
void bacaMhs(){
int i; //variable konter perulangan
char namanya[30]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa
strcpy(namanya, dataMhs[i].mhs.nama);
strcpy(nimnya, dataMhs[i].mhs.nim);
//tampung dulu nilai akhir dan nilai huruf
nAkhirnya = dataMhs[i].nilai.nAkhir;
nHurufnya = dataMhs[i].nilai.nHuruf;
//tampilkan informasi mahasiswa yang diminta
printf("Nama Mahasiswa : %s\n", namanya);
printf("Nomor Induk Mahasiswa : %s\n", nimnya);
printf("\tNilai Akhir : %0.1lf\n", nAkhirnya);
printf("\tNilai Huruf : %c\n", nHurufnya);
printf("==============================================\n");
}
double hitungAkhir(double m, double u, double t, double q){
double nAkhirnya;
main()
{
printf("\n <<-- Mengurutkan Nilai Hasil Pertadingan Lompat Tinggi -->> \n");
int N;
printf("\n Masukkan Jumlah Peserta : ");
scanf("%d",&N); printf("\n");
float Temp;
for ( i = 0; i < N; i++)
{
int j;
for (j = i + 1; j < N; j++)
{
if (TinggiLompat[i] < TinggiLompat[j])
{
Temp = TinggiLompat[i];
TinggiLompat[i] = TinggiLompat[j];
TinggiLompat[j] = Temp;
}
}
printf("\n");
}
int N;
printf("\n Masukkan Jumlah Peserta : ");
scanf("%d",&N); printf("\n");
float Temp;
for ( i = 0; i < N; i++)
{
int j;
for (j = i + 1; j < N; j++)
{
if (Menit[i] > Menit[j])
{
Temp = Menit[i];
Menit[i] = Menit[j];
Menit[j] = Temp;
}
}
printf("\n");
}