Anda di halaman 1dari 18

Contoh kasus-kasus pengurutan data.

1. Kasus: Mengurutkan data pada array secara ascending (dari kecil ke besar)

Implementasi program:
/*
Nama File: sorting1.c
mengurutkan data pada array secara accending (dari kecil ke besar)
*/

#include <stdio.h>

void urutkan(int nl[]);

main(){
int i, data;
int nilai[] = {75, 50, 65, 50, 20, 76, 80};

printf("\nData sebelum diurutkan:\n");


for(i=0;i<7;i++){
printf(" %d ",nilai[i]);
}
printf("\n");

urutkan(nilai);
printf("\nData setelah diurutkan:\n");
for(i=0;i<7;i++){
printf(" %d ",nilai[i]);
}
printf("\n");
}

void urutkan(int nl[]){


int i, j, posisi;
int terkecil, temp;

for(i=0;i<7;i++){
terkecil = nl[i];
posisi = i;
for(j=i+1;j<7;j++){
if(nl[j] < terkecil){
terkecil = nl[j];
posisi = j;
}
}
//pertukarkan posisi data pada array
temp = nl[i];
nl[i] = nl[posisi];
nl[posisi] = temp;
}
}

2. Kasus: Mengurutkan data pada array secara descending (dari besar ke kecil)
Implementasi program:
/*
Nama File: sorting2.c
mengurutkan data pada array secara descending (dari besar ke kecil)
*/

#include <stdio.h>

void urutkan(int nl[]);

main(){
int i, data;
int nilai[] = {75, 50, 65, 50, 20, 76, 80};

printf("\nData sebelum diurutkan:\n");


for(i=0;i<7;i++){
printf(" %d ",nilai[i]);
}
printf("\n");

urutkan(nilai);
printf("\nData setelah diurutkan:\n");
for(i=0;i<7;i++){
printf(" %d ",nilai[i]);
}
printf("\n");
}

void urutkan(int nl[]){


int i, j, posisi;
int terbesar, temp;

for(i=0;i<7;i++){
terbesar = nl[i];
posisi = i;
for(j=i+1;j<7;j++){
if(nl[j] > terbesar){
terbesar = nl[j];
posisi = j;
}
}
//pertukarkan posisi data pada array
temp = nl[i];
nl[i] = nl[posisi];
nl[posisi] = temp;
}
}

3. Kasus: Mengurutkan data sejumlah mahasiswa berdasarkan IPK mahasiswa.


Implementasi program:
/*
Nama File: sorting3.c
mengurutkan data mahasiswa berdasarkan ipk
(dari besar ke kecil)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 5

typedef struct mhs{


char nama[30];
char nim[5];
double ipk;
} MHS;

void entriData(MHS myMhs[]);


void urutkan(MHS mhsku[]);
void tampilkan(MHS mhs[], int i);

main(){
int i;
MHS mhs[N];

entriData(mhs);
printf("\nData sebelum diurutkan:\n");
for(i=0;i<N;i++){
printf("\nMahasiswa ke-%d\n",i+1);
tampilkan(mhs, i);
}
printf("\n");

urutkan(mhs);
printf("\nData setelah diurutkan:\n");
for(i=0;i<N;i++){
printf("\nMahasiswa ke-%d\n",i+1);
tampilkan(mhs, i);
}
printf("\n");
}
void entriData(MHS myMhs[]){
char namanya[20], nimnya[5];
double ipknya;
int i;

printf("\nEntri Data Mahasiswa\n");


for(i=0;i<N;i++){
printf("Mahasiswa ke-%d:\n", i+1);
printf("Ketikkan nama: ");
gets(namanya); fflush(stdin);
printf("Ketikkan NIM : ");
gets(nimnya); fflush(stdin);
printf("Ketikkan IPK : ");
scanf("%lf", &ipknya); fflush(stdin);
//masukkan ke array
strcpy(myMhs[i].nama, namanya);
strcpy(myMhs[i].nim, nimnya);
myMhs[i].ipk = ipknya;
}
printf("\nEntri Data selesai... Tekan enter...");
getch();
}

void urutkan(MHS mhsku[]){


int i, j, posisi;
double terbesar;
MHS temp;

for(i=0;i<N;i++){
terbesar = mhsku[i].ipk;
posisi = i;
for(j=i+1;j<N;j++){
if(mhsku[j].ipk > terbesar){
terbesar = mhsku[j].ipk;
posisi = j;
}
}
//pertukarkan posisi data pada array
temp = mhsku[i];
mhsku[i] = mhsku[posisi];
mhsku[posisi] = temp;
}
}

void tampilkan(MHS mhs[], int i){


printf("\n-----------------------------\n");
printf("Nama : %s\n", mhs[i].nama);
printf("NIM : %s\n", mhs[i].nim);
printf("IPK : %0.2lf\n", mhs[i].ipk);
printf("-----------------------------\n");
}

4. Kasus: Mengurutkan data hasil lomba berbasis nilai atau skor (membuat sumur)

Implementasi program:
/*
Nama File: sorting4.c
mengurutkan data hasil lomba berbasis nilai atau skor (membuat sumur)
(dari besar ke kecil)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 4
#define PHI 3.14

typedef struct peserta{


char nama[20];
char noPeserta[4];
} PESERTA;

typedef struct sumur{


double diameter;
double tinggi;
double volume;
} SUMUR;

typedef struct lomba{


PESERTA psrt;
SUMUR smr;
} LOMBA;

//deklarasi fungsi2
void entriData(LOMBA lmb[]);
void entriLomba(LOMBA lmb[], LOMBA lom, int i);
void salin(LOMBA lmb[], LOMBA copy[]);
void tampilInfo(LOMBA lmb[]);
void urutkan(LOMBA lmb[]);
double hitVol(LOMBA lm);

main(){
//deklarasi var lokal
LOMBA lmb1[N], lmb2[N];
//entri data N peserta lomba, sekaligus hitung volume sumur
entriData(lmb1);
//salin semua data pada array ke array lain, misal lmb2[]
salin(lmb1, lmb2);
printf("\nIsi Array 1\n");
tampilInfo(lmb1);
printf("\nIsi Array 2\n");
tampilInfo(lmb2);
//urutkan data pada array lmb2
urutkan(lmb2);
//tampilkan hasil pengurutan
printf("\nHasil Pengurutan\n");
tampilInfo(lmb2);
}

void entriData(LOMBA lmb[]){


int i;
LOMBA lomba;
PESERTA psrt;
SUMUR smr;

printf("\nEntri Data\n");
printf("========================\n");
for(i=0;i<N;i++){
printf("Peserta ke-%d:\n", i+1);
printf("Ketikkan nama : ");
gets(lomba.psrt.nama); fflush(stdin);
printf("Ketikkan nomor: ");
gets(lomba.psrt.noPeserta); fflush(stdin);
//entri data perlombaan
printf("Ketikkan Diamater dan kedalaman sumur (pisahkan dengan spasi): ");
scanf("%lf%lf", &lomba.smr.diameter, &lomba.smr.tinggi); fflush(stdin);
lomba.smr.volume = hitVol(lomba);
entriLomba(lmb, lomba, i);
}
printf("\nEntri Data selesai... Tekan Enter...");
getch();
}

void entriLomba(LOMBA lmb[], LOMBA lom, int i){


lmb[i] = lom;
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("--------------------------------------------\n");
printf("Diameter: %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman : %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}
double hitVol(LOMBA lm){
double vol;

vol = lm.smr.diameter/2 * lm.smr.diameter/2 * lm.smr.tinggi * PHI;


//atau gunakan fungsi fow() sbb:
//vol = pow(lm.smr.diameter/2, 2) * PHI * lm.smr.tinggi;
return vol;
}

void salin(LOMBA lmb[], LOMBA copy[]){


int i;
//salin satu persatu elemen array ke array lain
for(i=0;i<N;i++){
copy[i] = lmb[i];
}
}

void tampilInfo(LOMBA lmb[]){


int i;

printf("\nData:\n");
printf("--------------------------------------------\n");
for(i=0;i<N;i++){
printf("\nPeserta ke-%d\n", i+1);
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("Diameter : %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman: %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}
}

void urutkan(LOMBA lmb[]){


int i, j, posisi;
double terbesar;
LOMBA temp;

for(i=0;i<N;i++){
terbesar = lmb[i].smr.volume;
posisi = i;
for(j=i+1;j<N;j++){
if(lmb[j].smr.volume > terbesar){
terbesar = lmb[j].smr.volume;
posisi = j;
}
}
//pertukarkan isi array
temp = lmb[i];
lmb[i] = lmb[posisi];
lmb[posisi] = temp;
}
}

5. Kasus: Mengelola data lomba membuat sumur untuk N orang peserta dan menentukan juara
1, 2 dan 3 serta dilengkapi dengan menu pilihan.
Implementasi program:
/*
Nama File: sorting5.c
mengelola data lomba membuat sumur untuk N peserta dan
menentukan juara 1, 2 dan 3, menggunakan menu
(dari besar ke kecil)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 4
#define PHI 3.14

typedef struct peserta{


char nama[20];
char noPeserta[4];
} PESERTA;

typedef struct sumur{


double diameter;
double tinggi;
double volume;
} SUMUR;

typedef struct lomba{


PESERTA psrt;
SUMUR smr;
} LOMBA;

//deklarasi fungsi2
void judul();
void entriData(LOMBA lmb[]);
void entriLomba(LOMBA lmb[], LOMBA lom, int i);
void salin(LOMBA lmb[], LOMBA copy[]);
void tampilInfo(LOMBA lmb[]);
void urutkan(LOMBA lmb[]);
double hitVol(LOMBA lm);
void juara(LOMBA lmb[]);
void tampilkan(LOMBA lmb[], int i);
void menu(LOMBA lom1[], LOMBA lom2[]);
void cariData(LOMBA lmb[], int *pss, int *stat);

main(){
//deklarasi var lokal
LOMBA lmb1[N], lmb2[N];

//entri data N peserta lomba, sekaligus hitung volume sumur


entriData(lmb1);
//salin semua data pada array ke array lain, misal lmb2[]
salin(lmb1, lmb2);
//urutkan data pada array lmb2
urutkan(lmb2);
//menu pilihan
menu(lmb1, lmb2);
}

void judul(){
printf("PROGRAM PENGELOLAAN HASIL LOMBA MEMBUAT SUMUR\n");
printf("=============================================\n");
printf("Programmer: Antu\n");
//dst
}

void menu(LOMBA lom1[], LOMBA lom2[]){


int pilihan, posisi, stat;
char jawab;

do{
printf("\nMENU PILIHAN\n");
printf("=========================\n");
printf("1. Cari Data Tertentu\n");
printf("2. Tampilkan Para Juara\n");
printf("3. Lihat Informasi\n");
printf("0. Selesai\n");
printf("=========================\n");
printf("Ketikkan nomor pilihan (1, 2, 3 atau 0): ");
scanf("%d", &pilihan); fflush(stdin);

switch(pilihan){
case 0: printf("\nBye...bye...\n");
exit(1);
case 1: cariData(lom1, &posisi, &stat);
if(stat){
printf("\nData yg ditemukan:\n");
tampilkan(lom1, posisi);
}
break;
case 2: juara(lom2); break;
case 3: tampilInfo(lom1); break;
default: printf("\nNomor pilihan tidak ada... Tekan Enter");
getch();
}
printf("\nMau ngulang lagi (Y/T): ");
jawab = getche();
} while(toupper(jawab)=='Y');
printf("\nTerima kasih.... Tekan Enter...");
getch();
}

void entriData(LOMBA lmb[]){


int i;
LOMBA lomba;
PESERTA psrt;
SUMUR smr;

printf("\nEntri Data\n");
printf("========================\n");
for(i=0;i<N;i++){
printf("Peserta ke-%d:\n", i+1);
printf("Ketikkan nama : ");
gets(lomba.psrt.nama); fflush(stdin);
printf("Ketikkan nomor: ");
gets(lomba.psrt.noPeserta); fflush(stdin);
//entri data perlombaan
printf("Ketikkan Diamater dan kedalaman sumur (pisahkan dengan spasi): ");
scanf("%lf%lf", &lomba.smr.diameter, &lomba.smr.tinggi); fflush(stdin);
lomba.smr.volume = hitVol(lomba);
entriLomba(lmb, lomba, i);
}
printf("\nEntri Data selesai... Tekan Enter...");
getch();
}

void entriLomba(LOMBA lmb[], LOMBA lom, int i){


lmb[i] = lom;
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("--------------------------------------------\n");
printf("Diameter: %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman : %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}

double hitVol(LOMBA lm){


double vol;
vol = lm.smr.diameter/2 * lm.smr.diameter/2 * lm.smr.tinggi * PHI;
//atau gunakan fungsi fow() sbb:
//vol = pow(lm.smr.diameter/2, 2) * PHI * lm.smr.tinggi;
return vol;
}

void salin(LOMBA lmb[], LOMBA copy[]){


int i;
//salin satu persatu elemen array ke array lain
for(i=0;i<N;i++){
copy[i] = lmb[i];
}
}

void tampilInfo(LOMBA lmb[]){


int i;

printf("\nData:\n");
printf("--------------------------------------------\n");
for(i=0;i<N;i++){
printf("\nPeserta ke-%d\n", i+1);
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("Diameter : %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman: %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}
}

void urutkan(LOMBA lmb[]){


int i, j, posisi;
double terbesar;
LOMBA temp;

for(i=0;i<N;i++){
terbesar = lmb[i].smr.volume;
posisi = i;
for(j=i+1;j<N;j++){
if(lmb[j].smr.volume > terbesar){
terbesar = lmb[j].smr.volume;
posisi = j;
}
}
//pertukarkan isi array
temp = lmb[i];
lmb[i] = lmb[posisi];
lmb[posisi] = temp;
}
}

void juara(LOMBA lmb[]){


int i;

printf("\nPARA JUARA\n");
printf("--------------------------\n");
for(i=0;i<3;i++){
printf("\nJuara ke-%d\n", i+1);
tampilkan(lmb, i);
}
printf("\nTekan Enter...");
getch();
}

void tampilkan(LOMBA lmb[], int i){


printf("--------------------------------------------\n");
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("Diameter : %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman: %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}

void cariData(LOMBA lmb[], int *pss, int *stat){


char nomornya[4];
int i;

printf("\nKetikkan nomor peserta yg dicari: ");


gets(nomornya); fflush(stdin);
for(i=0;i<N;++i){
if(!strcmp(lmb[i].psrt.noPeserta, nomornya)){
*stat = 1;
*pss = i;
break;
}
else *stat = 0;
}
if(*stat) printf("\nData ditemukan...\n");
else printf("\nData tidak fitemukan...\n");
}

6. Kasus: Pengelolaan data lomba membuta sumur untuk N orang peserta dan menentukan
juara 1, 2 dan 3 serta 3 peserta terburuk.Lengkapi dengan menu pilihan.

Implementasi program:
/*
Nama File: sorting6.c
mengelola data lomba membuat sumur untuk N peserta dan
menentukan juara 1, 2 dan 3, seta informasi 3 peserta terburuk
menggunakan menu
(dari besar ke kecil)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 4
#define PHI 3.14

typedef struct peserta{


char nama[20];
char noPeserta[4];
} PESERTA;

typedef struct sumur{


double diameter;
double tinggi;
double volume;
} SUMUR;

typedef struct lomba{


PESERTA psrt;
SUMUR smr;
} LOMBA;

//deklarasi fungsi2
void judul();
void entriData(LOMBA lmb[]);
void entriLomba(LOMBA lmb[], LOMBA lom, int i);
void salin(LOMBA lmb[], LOMBA copy[]);
void tampilInfo(LOMBA lmb[]);
void urutkan(LOMBA lmb[]);
double hitVol(LOMBA lm);
void juara(LOMBA lmb[]);
void pecundang(LOMBA lmb[]);
void tampilkan(LOMBA lmb[], int i);
void menu(LOMBA lom1[], LOMBA lom2[]);
void cariData(LOMBA lmb[], int *pss, int *stat);

main(){
//deklarasi var lokal
LOMBA lmb1[N], lmb2[N];

//entri data N peserta lomba, sekaligus hitung volume sumur


entriData(lmb1);
//salin semua data pada array ke array lain, misal lmb2[]
salin(lmb1, lmb2);
//urutkan data pada array lmb2
urutkan(lmb2);
//menu pilihan
menu(lmb1, lmb2);
}

void judul(){
printf("PROGRAM PENGELOLAAN HASIL LOMBA MEMBUAT SUMUR\n");
printf("=============================================\n");
printf("Programmer: Antu\n");
//dst
}

void menu(LOMBA lom1[], LOMBA lom2[]){


int pilihan, posisi, stat;
char jawab;

do{
printf("\nMENU PILIHAN\n");
printf("=========================\n");
printf("1. Cari Data Tertentu\n");
printf("2. Tampilkan Para Juara\n");
printf("3. Tampilkan Para Pecundang\n");
printf("4. Lihat Informasi\n");
printf("0. Selesai\n");
printf("=========================\n");
printf("Ketikkan nomor pilihan (1, 2, 3, 4 atau 0): ");
scanf("%d", &pilihan); fflush(stdin);

switch(pilihan){
case 0: printf("\nBye...bye...\n");
exit(1);
case 1: cariData(lom1, &posisi, &stat);
if(stat){
printf("\nData yg ditemukan:\n");
tampilkan(lom1, posisi);
}
break;
case 2: juara(lom2); break;
case 3: pecundang(lom2); break;
case 4: tampilInfo(lom1); break;
default: printf("\nNomor pilihan tidak ada... Tekan Enter");
getch();
}
printf("\nMau ngulang lagi (Y/T): ");
jawab = getche();
} while(toupper(jawab)=='Y');
printf("\nTerima kasih.... Tekan Enter...");
getch();
}

void entriData(LOMBA lmb[]){


int i;
LOMBA lomba;
PESERTA psrt;
SUMUR smr;

printf("\nEntri Data\n");
printf("========================\n");
for(i=0;i<N;i++){
printf("Peserta ke-%d:\n", i+1);
printf("Ketikkan nama : ");
gets(lomba.psrt.nama); fflush(stdin);
printf("Ketikkan nomor: ");
gets(lomba.psrt.noPeserta); fflush(stdin);
//entri data perlombaan
printf("Ketikkan Diamater dan kedalaman sumur (pisahkan dengan spasi): ");
scanf("%lf%lf", &lomba.smr.diameter, &lomba.smr.tinggi); fflush(stdin);
lomba.smr.volume = hitVol(lomba);
entriLomba(lmb, lomba, i);
}
printf("\nEntri Data selesai... Tekan Enter...");
getch();
}

void entriLomba(LOMBA lmb[], LOMBA lom, int i){


lmb[i] = lom;
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("--------------------------------------------\n");
printf("Diameter: %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman : %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}

double hitVol(LOMBA lm){


double vol;

vol = lm.smr.diameter/2 * lm.smr.diameter/2 * lm.smr.tinggi * PHI;


//atau gunakan fungsi fow() sbb:
//vol = pow(lm.smr.diameter/2, 2) * PHI * lm.smr.tinggi;
return vol;
}
void salin(LOMBA lmb[], LOMBA copy[]){
int i;
//salin satu persatu elemen array ke array lain
for(i=0;i<N;i++){
copy[i] = lmb[i];
}
}

void tampilInfo(LOMBA lmb[]){


int i;

printf("\nData:\n");
printf("--------------------------------------------\n");
for(i=0;i<N;i++){
printf("\nPeserta ke-%d\n", i+1);
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("Diameter : %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman: %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}
}

void urutkan(LOMBA lmb[]){


int i, j, posisi;
double terbesar;
LOMBA temp;

for(i=0;i<N-1;i++){
terbesar = lmb[i].smr.volume;
posisi = i;
for(j=i+1;j<N;j++){
if(lmb[j].smr.volume > terbesar){
terbesar = lmb[j].smr.volume;
posisi = j;
}
}
//pertukarkan isi array
temp = lmb[i];
lmb[i] = lmb[posisi];
lmb[posisi] = temp;
}
}

void juara(LOMBA lmb[]){


int i;
printf("\nPARA JUARA\n");
printf("--------------------------\n");
for(i=0;i<3;i++){
printf("\nJuara ke-%d\n", i+1);
tampilkan(lmb, i);
}
printf("\nTekan Enter...");
getch();
}

void pecundang(LOMBA lmb[]){


int i, j=1;

printf("\nPARA PECUNDANG\n");
printf("--------------------------\n");
for(i=N-1;i>=N-3;i--){
printf("\nPecundang ke-%d\n", j);
tampilkan(lmb, i);
j++;
}
printf("\nTekan Enter...");
getch();
}

void tampilkan(LOMBA lmb[], int i){


printf("--------------------------------------------\n");
printf("\nNama: %s Nomor: %s\n", lmb[i].psrt.nama, lmb[i].psrt.noPeserta);
printf("Diameter : %0.2lf Meter\n", lmb[i].smr.diameter);
printf("Kedalaman: %0.2lf Meter\n", lmb[i].smr.tinggi);
printf("Volume : %0.2lf Meter Kubik\n", lmb[i].smr.volume);
printf("--------------------------------------------\n");
}

void cariData(LOMBA lmb[], int *pss, int *stat){


char nomornya[4];
int i;

printf("\nKetikkan nomor peserta yg dicari: ");


gets(nomornya); fflush(stdin);
for(i=0;i<N;++i){
if(!strcmp(lmb[i].psrt.noPeserta, nomornya)){
*stat = 1;
*pss = i;
break;
}
else *stat = 0;
}
if(*stat) printf("\nData ditemukan...\n");
else printf("\nData tidak fitemukan...\n");
}

Tugas: lakukan modifikasi unruk setiap contoh, sesuai creativitas anda, misalnya data dari
domain atau permasalahan lain,

Anda mungkin juga menyukai