Anda di halaman 1dari 14

SEARCHING

TUGAS 2

Disusun oleh:
Nama : DEDEN FARHAN

NPM : 0618104038

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK UNIVERSITAS WIDYATAMA

BANDUNG

2018
Tugas Pendahuluan II
1. Diketahui suatu data tiket sbb.

Id_tiket Jurusan Harga


T001 Bandung-Jakarta 85000
T002 Bandung-Bekasi 50000
T003 Jakarta-Surabaya 150000
Buatlah program bahasa C menggunakan 3 pilihan menu

1. Isi Data, menu untuk memasukkan data di atas ke dalam struktur tiket
2. Cari data berdasarkan Id_tiket, menu untuk menampilkan Id_tiket, jurusan,
dan harga berdasarkan Id_tiket (Gunakan metode pencarian dengan
sequential search menggunakan variable logika)
3. Keluar Program

Solusi:

#include<stdio.h>
#include<string.h>
#include<stdbool.h>

int NoMenu;
typedef struct {
char id_tiket[100];
char jurusan[100];
int harga; } tiket;
int jml, i;
tiket T[100];
bool cari;

void VInputData();
void VCariData();

DEDEN FARHAN | 0618104038 Halaman 1


int main() {
printf("===== Menu =====\n");
printf("1. Isi Data\n");
printf("2. Tampilkan Data\n");
printf("3. Keluar Program\n");
printf("===== ==== =====\n");
do{
printf("Pilihan Menu : "); scanf("%d", &NoMenu);
switch(NoMenu){
case 1 : VInputData(); break;
case 2 : VCariData(); break;
case 3 : printf("Keluar Program ...");break;
default : printf("Inputan tidak valid!\n");
}
}while(NoMenu!=3);
return 0;
}

void VInputData(){
printf("Masukkan berapa data : "); scanf("%d", &jml);
for(int i=0; i<jml; i++){
printf("Masukkan Id : "); scanf("%s", &T[i].id_tiket);
printf("Masukkan Jurusan : "); scanf("%s", &T[i].jurusan);
printf("Masukkan Harga : "); scanf("%d", &T[i].harga);
}
}

void VCariData(){
i = 0;
cari = false;
char id_tiket_cari[100];

DEDEN FARHAN | 0618104038 Halaman 2


printf("Masukan Id Tiket Yang Dicari : "); scanf("%s", &id_tiket_cari);
while((i<jml)&&(!cari)){
if(strcmp(tolower(id_tiket_cari), tolower(T[i].id_tiket))==0){
cari = true;
}
else{
i++;
}
}

if(cari){
printf("Id Tiket %s Yang Anda Cari Pada Posisi : %d\n", id_tiket_cari, i);
printf("Id Tiket : %s\n", T[i].id_tiket);
printf("Jurusan : %s\n", T[i].jurusan);
printf("Harga : %d\n", T[i].harga);
}
else{
printf("Id Tiket %s Tidak Ditemukan\n", id_tiket_cari);
}
}

2. Diketahui sebuah himpunan nilai Array A={21, 31, 24, 12, 8, 9, 4}. Buatlah
program pencarian nilai X yang diinput oleh user menggunakan :

DEDEN FARHAN | 0618104038 Halaman 3


a. Sequential search dengan sentinel awal
b. Binary Search
Solusi:

#include<stdio.h>

int a[7] = {21, 31, 24, 12, 8, 9, 4};


int NoMenu;
void VSentinel();
void VBinary();
int * f_sorted(int * p_a, int p_count);
int main(){
printf("===== Menu =====\n");
printf("1. Metode Sentinel Awal\n");
printf("2. Metode binary search\n");
printf("3. Keluar Program\n");
printf("===== ==== =====\n");
do{
printf("Pilihan Menu : "); scanf("%d", &NoMenu);
switch(NoMenu){
case 1 : VSentinel(); break;
case 2 : VBinary(); break;
case 3 : printf("Keluar Program ...");break;
default : printf("Inputan tidak valid!\n");
}
}while(NoMenu!=3);
return 0;
}

void VSentinel(){
int cari, i;
i=7;
printf("Data Nilai Aray : ");

DEDEN FARHAN | 0618104038 Halaman 4


for(i=0; i<7; i++){
printf("%d", a[i]);
if(i!=6){
printf(", ");
}
}
printf("\nMasukan Nilai yang dicari : "); scanf("%d", &cari);
a[-1] = cari;
while(a[i]!=cari){
i--;
}
if(i !=-1){
printf("Data ditemukan di Index ke-%d\n", i);
}
else{
printf("Data Tidak Ditemukan\n");
}
}

void VBinary(){
int * numb_arr;
int i, j, k, found, cari;
numb_arr = f_sorted(a, 7);
printf("Data Nilai Aray : ");
for(i=0; i<7; i++){
printf("%d", numb_arr[i]);
if(i!=6){
printf(", ");
}
}
printf("\nMasukan Nilai yang dicari : "); scanf("%d", &cari);
i = 0;
j = 6;

DEDEN FARHAN | 0618104038 Halaman 5


found = 0;
while((found==0)&&(i<=j)){
k = (i+j)/2;
if(numb_arr[k]==cari){
found = 1;
}
else{
if(numb_arr[k]<cari){
i = k+1;
}
else{
j = k-1;
}
}
}
if(found){
printf("Data ditemukan di elemen ke-%d\n", k);
}
else{
printf("Data tidak ditemukan\n");
}
}

int * f_sorted(int * p_a, int p_count){


int * temp_arr;
int i, j, temp;
temp_arr = p_a;
for(i=0; i<p_count; i++){
for(j=i+1; j<p_count; j++){
if(temp_arr[i] > temp_arr[j]){
temp = temp_arr[i];
temp_arr[i] = temp_arr[j];
temp_arr[j] = temp;

DEDEN FARHAN | 0618104038 Halaman 6


}
}
}
return temp_arr;
}

DEDEN FARHAN | 0618104038 Halaman 7


Latihan-latihan Praktikum II

2. [TIPE-A]
Diketahui sebuah tiket kereta api sebagai berikut :
Kode Asal Tujuan Harga
1 Bandung Jakarta 100.000
2 Jakarta Bandung 100.000
3 Bandung Surabaya 300.000
4 Surabaya Bandung 300.000
Jika calon penumpang membeli tiket lebih dari 2, maka berhak mendapat
diskon sebesar 5% dari total pembelian. Buatlah program dengan bahasa C
untuk memasukkan data rekap penjualan tiket dengan
struktur : nama_pemesan, Jurusan, dan total penjualan menggunakan array
berdasarkan inputan : nama_pemesan, kode_jurusan, dan jumlah_tiket.
Kemudian tampilkan hasil struktur rekap penjualan tiket yang Total
penjualannya lebih besar dari batas nilai X yang diinput user ! (metode
pencarian : sequential search dengan variable logika)
INPUT Nama Pemesan : Noni
Kode Jurusan : 1
Jumlah Tiket : 3
Data berhasil diinput ! Tambah lagi ?
Ya
Nama Pemesan : Nona
Kode Jurusan : 3
Jumlah Tiket : 1
Data berhasil diinput ! Tambah lagi ?
Tidak Cari data yang total
penjualannya lebih besar dari (X) :
290000
OUTPUT Rekap Penjualan Tiket :
1.
Nama Pemesan : Nona
Jurusan : Bandung-Surabaya

DEDEN FARHAN | 0618104038 Halaman 8


Total Penjualan : 300000

Solusi:

#include <stdio.h>
char jurusan[4][100]={"Bandung-Jakarta", "Jakarta-Bandung", "Bandung-
Surabaya", "Surabaya-Bandung"};
long harga[4]={100000, 100000, 300000, 300000};
typedef struct {
char nama[255];
int kode, jml; } pesan;
pesan p[10];
int i;

void VInputData();
void VCariData();
int main() {
VInputData();
VCariData();
return 0;

}
void VInputData(){
char lanjut;
i=0;
do{
printf("Nama Pemesan : ");
scanf("%s", &p[i].nama);
printf("Kode Jurusan : ");
scanf("%d", &p[i].kode);
printf("Jumlah : ");
scanf("%d", &p[i].jml);
printf("Data Berhasil Input !Tambahlagi(Y/N) ?");

DEDEN FARHAN | 0618104038 Halaman 9


scanf("%s", &lanjut);
i++;
}while(toupper(lanjut)=='Y');

}
void VCariData(){
int j, a;
long byr, x;
printf("Cari data yang total penjualannya lebih besar dari(X): "); scanf("%d",
&x);
printf("Rekap Penjualan Tiket:\n");
j = 0; a=0;
while(j<i){
byr = harga[p[j].kode-1]*p[j].jml;
if(p[j].jml > 2){
byr = byr - (byr*0.05);
}
if(byr > x){
printf("%d\n", a+1);
printf("Nama Pemesan : %s \n", p[j].nama);
printf("Jurusan : %s\n", jurusan[p[j].kode-1]);
printf("Total Penjualan : %d\n", byr);
a++;
}

j++;
}

DEDEN FARHAN | 0618104038 Halaman 10


4. [TIPE-B]
Diketahui sebuah himpunan nilai Array A={24, 34, 21, 65, 22, 12, 24}. Buatlah
program pencarian nilai X yang diinput oleh user menggunakan Binary Search.
Solusi:

#include<stdio.h>

int a[7] = {24, 34, 21, 65, 22, 12, 24};

int * f_sorted(int * p_a, int p_count);


void VBinary();
int main(){
VBinary();
return 0;
}

void VBinary(){
int * numb_arr;
int i, j, k, found, cari;
numb_arr = f_sorted(a, 7);
printf("Data Nilai Aray : ");
for(i=0; i<7; i++){
printf("%d", numb_arr[i]);
if(i!=6){

DEDEN FARHAN | 0618104038 Halaman 11


printf(", ");
}
}
printf("\nMasukan Nilai yang dicari : "); scanf("%d", &cari);
i = 0;
j = 6;
found = 0;
while((found==0)&&(i<=j)){
k = (i+j)/2;
if(numb_arr[k]==cari){
found = 1;
}
else{
if(numb_arr[k]<cari){
i = k+1;
}
else{
j = k-1;
}
}
}
if(found){
printf("Data ditemukan di elemen ke-%d \n", k);
}
else{
printf("Data tidak ditemukan\n");
}

int * f_sorted(int * p_a, int p_count){


int * temp_arr;
int i, j, temp;

DEDEN FARHAN | 0618104038 Halaman 12


temp_arr = p_a;
for(i=0; i<p_count; i++){
for(j=i+1; j<p_count; j++){
if(temp_arr[i] > temp_arr[j]){
temp = temp_arr[i];
temp_arr[i] = temp_arr[j];
temp_arr[j] = temp;
}
}
}
return temp_arr;
}

DEDEN FARHAN | 0618104038 Halaman 13

Anda mungkin juga menyukai