Anda di halaman 1dari 44

TUGAS

MATA KULIAH PRAKTIK PEMGORAMAN DASAR

OLEH

Saif Adzzahabi

20076101

Pendidikan Teknik Informatika

DOSEN PEMBIMBING

Drs. Denny Kurniadi, M.Kom

UNIVERSITAS NEGERI PADANG

2020 / 2021
Linier Searching

Contoh Program 1

 Pencarian data dalam suatu array dalam Bahasa c

Percobaan Program

Hasil Output 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

Konstanta yang didefinisikan bernama N dengan nilai tertentu, misal 8.


3. Kebutuhan variabel global

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;

printf("\nKetikan nilai yg dicari: ");


scanf("%lf", &nilainya);
//mulai mencari
for(i=0;i<N;++i)
{
if(nilai[i] == nilainya)
{
tanda = 1; //data ditemukan
posisi = i;
break;
}
else
{
tanda = 0; //tdk ditemukan
continue;
}
}
if(tanda)
{
printf("\nData ditemukan pada posisi: %d\n",posisi);
}
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...");
}
Percobaan Program 2

Hasil Output Program


Contoh Program 3

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.

 Kebutuhan variabel global

- 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

int cariData(char nimnya[]);

char nim[N][4]; //variable global berupa array sejumlah nim mahasiswa

main(){
int i, status;
char nimnya[4];

printf("Inputkan Dulu Nim Mahasiswa\n");


for(i=0;i<N;i++){
printf("Ketik Nim Ke-%d: ", i+1);
gets(nimnya); fflush(stdin);
strcpy(nim[i], nimnya);
}
printf("entri selesai... Tekan Enter...");
printf("\nKetik NIM yang akan dicari: ");
gets(nimnya); fflush(stdin);
status = cariData(nimnya);
if(status){
printf("Data nim: %s di temukan...\n", nimnya);
}
else{
printf("Data tidak ditemukan...\n");
}
}
int cariData(char nimnya[]){
int i, status;

//cari nim tersebut di array nim


for(i=0;i<N;i++){
if(!strcmp(nimnya, nim[i])){
status = 1;
break;
}
else {
status = 0;
}
}
return status;
}

Hasil Output Program


Contoh program 5
Buatlah suatu program yang memiliki fasilitas pencarian jamak, dimana setiap data yang
ditemukan bernilai sama, maka program akan menghitung jumlah data yang ditemukan tersebut.
Jawab:
Mirip dengan contoh program 4, hanya saja program dilengkapi dengan konter untuk
menghitung data yang sama yang ditemukan selama pencarian. Perhatikan fungsi pencarian
berikut ini:

void cariData(char namanya[]){


int i, jumlah = 0, posisi;

//cari nim tersebut di array nim


printf("Data yang dicari: %s\n", namanya);
for(i=0;i<N;i++){
if(!strcmp(namanya, nama[i])){
posisi = i;
jumlah++;
printf("Ada pada posisi: %d\n", posisi);
}
}

Secara lengkap kode program dalam C adalah seperti berikut ini:


Percobaan Program

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

#define N 5

void cariData(char namanya[]);

char nama[N][4]; //variable global berupa array sejumlah nim mahasiswa

main(){
int i;
char namanya[4];

printf("Inputkan dulu nama mahasiswa\n");


for(i=0;i<N;i++){
printf("Ketik nama ke-%d: ", i+1);
gets(namanya); fflush(stdin);
strcpy(nama[i], namanya);
}
printf("entri selesai... Tekan Enter...");
printf("\nKetik Nama yang akan dicari: ");
gets(namanya); fflush(stdin);
cariData(namanya); //cari di array
}

void cariData(char namanya[]){


int i, jumlah = 0, posisi;

//cari nim tersebut di array nim


printf("Data yang dicari: %s\n", namanya);
for(i=0;i<N;i++){
if(!strcmp(namanya, nama[i])){
posisi = i;
jumlah++;
printf("Ada pada posisi: %d\n", posisi);
}
}
printf("Banyaknya data yang ditemukan: %d buah\n", jumlah);
}
Hasil Output Program

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:

int cariData(char nimnya[]){


int i, posisi;

//cari nim tersebut di array nim


for(i=0;i<N;i++){
if(!strcmp(nimnya, dataMhs[i].mhs.nim)){
posisi = i;
break;
}
else {
posisi = -999; //nilai ini menunjukkan data tdk ditemukan
}
}
return posisi; //posisi data dikirim sebagai nilai balik
}

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>

#define N 4 //banyaknya mahassiswa


#define MID 0.25 //prosentase nilai mid adalah 25 persen
#define UAS 0.30 //prosentase nilai uas adalah 30 persen
#define TGS 0.30 //prosentase nilai tugas adalah 30 persen
#define QSZ 0.15 //prosentase nilai quiz adalah 15 persen

//mendefinisikan tipe bentukan berupa struct bernama MHS


typedef struct MHS{
char nama[4]; //panjang nama mahasiswa adalah 30 karakter
char nim[4]; //panjang nim mahasiswa adalah 5 karakter
} MHS; //nama tipe bentukan adalah MHS
typedef struct NILAI{
double mid;
double uas;
double tugas;
double quiz;
double nAkhir; //dihitung dengan fungsi hitungAkhir()
char nHuruf; //diisi melalui pemanggilan fungsi konversiHuruf()
} NILAI;

//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

//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");
}

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("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[4]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa

printf("\nMembaca identitas sejumlah Mahasiswa\n");


printf("==============================================\n");
for(i=0;i<N;i++){
printf("Ketikkan nama Mahasiswa: ");
gets(namanya); fflush(stdin); //baca nama mahasiswa
printf("Ketikkan NIM Mahasiswa: ");
gets(nimnya); fflush(stdin); //baca nim mahasiswa
//masukan nama dan nim mahasiswa ke array of struct
strcpy(dataMhs[i].mhs.nama, namanya); //perhatikan cara mengakses field
strcpy(dataMhs[i].mhs.nim, nimnya);
//sekalian juga mengentri nilai2nya dg memanggil
//fungsi bacaNilai(), sbb
bacaNilai(i);
}
printf("\nEntri Data selesai...Tekan enter...");
}

void bacaNilai(int i){


double midnya, uasnya, tugasnya, quiznya, nAkhirnya;
char nHurufnya;

printf("\nKetik nilai MID : ");


scanf("%lf", &midnya); fflush(stdin);
printf("Ketik nilai UAS : ");
scanf("%lf", &uasnya); fflush(stdin);
printf("Ketik nilai Tugas : ");
scanf("%lf", &tugasnya); fflush(stdin);
printf("Ketik nilai Quiz : ");
scanf("%lf", &quiznya); fflush(stdin);
//lalu masukkan ke array dataMhs, sbb
dataMhs[i].nilai.mid = midnya;
dataMhs[i].nilai.uas = uasnya;
dataMhs[i].nilai.tugas = tugasnya;
dataMhs[i].nilai.quiz = quiznya;
//lalu panggil fungsi untuk menghitung nilai akhir dan
//tampung nilai baliknya pada variabel nAkhirnya
nAkhirnya = hitungAkhir(midnya, uasnya, tugasnya, quiznya);
//lalu panggil fungsi untuk mengkonveri nilai akhir ke nilai huruf
//dg passing parameter berupa nilai akhir atau nAkhirnya
//tampung hasil atau nilai baliknya pada variabel nHurufnya
nHurufnya = konversiHuruf(nAkhirnya);
//simpan nilai akhir dan nilai huruf ke dataMhs
dataMhs[i].nilai.nAkhir = nAkhirnya;
dataMhs[i].nilai.nHuruf = nHurufnya;
printf("\n");
}

//fungsi ini harus dimodifikasi melibatkan data nilai2


void infoMhs(int i){
char namanya[4]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa
double nAkhirnya;
char nHurufnya;

printf("\nInformasi Identitas Mahasiswa\n");


printf("==============================================\n");

//salin dulu data mahasiswa ke variabel sementara

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;

nAkhirnya = m * MID + u * UAS + t * TGS + q * QSZ;


return nAkhirnya;
}

char konversiHuruf(double na){


char nHurufnya;
//tentukan nilai hurufnya
if((na >= 81.0) && (na<= 100.0))
nHurufnya = 'A';
else if(na >= 76.0)
nHurufnya = 'B';
else if(na >= 56.0)
nHurufnya = 'C';
else if(na >= 45.0)
nHurufnya = 'D';
else nHurufnya = 'E';

return nHurufnya; //kirim hasilnya sebagai nilai balik


}

int cariData(char nimnya[]){


int i, posisi;

//cari nim tersebut di array nim


for(i=0;i<N;i++){
if(!strcmp(nimnya, dataMhs[i].mhs.nim)){
posisi = i;
break;
}
else {
posisi = -999; //nilai ini menunjukkan data tdk ditemukan
}
}
return posisi; //posisi data dikirim sebagai nilai balik
}

Hasil Output Program


Sorting atau Pengurutan

Contoh Program Kasus 1


Buatlah program untuk mngurutkan sejumlah data yang tersimpan dalam suatu array berukuran
tertentu. Hasil pengurutan ditampilkan ke layar.

Jawab:

Untuk menyelesaikan kasus ini, kita perlu melakukan analisis kebutuhan.

 Analisis Kebutuhan:

- Kebutuhan konstanta

Perlu konstanta untuk menetapkan banyaknya elemen array, misal N dengan sembarang (misal
nilai 10) sbb:

#define N 10

- Kebutuhan variabel global

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>

//konstanta N menunjukkan banyaknya data


#define N 5

//variabel global berupa array berisi data int


int data[N];

void urutkan();

main(){
int i;
int datanya;

printf("Isikan datanya dulu berupa nilai bilangan bulat\n");


for(i=0;i<N;i++){
printf("Data Indeks Ke-%d: ", i);
scanf("%d", &datanya); fflush(stdin);
//isikan ke array data[]
data[i] = datanya;
}
printf("\nEntri selesai... Tekan enter...");
//panggil fungsi untuk mengurutkan data[]
urutkan();
//data yg telah diurut ditampilkan ke layar
printf("\nData terurut secara ascending...\n");
for(i=0;i<N;i++){
//salin dulu data dari array
datanya = data[i];
printf("%d\t", datanya);
}
printf("\n");//pindah baris
printf("Selesai... Tekan Enter...");
}

void urutkan() { //metode selection sort


int indexMin,i,j;
int temp;

//loop untuk seluruh data


for(i = 0; i < N-1; i++) {

// elemen sekarang yang dianggap minimum


indexMin = i;

//periksa elemen paling kecil


for(j = i+1;j < N;j++) {
if(data[j] < data[indexMin]) {
indexMin = j;
}
}

if(indexMin != i) {//kalau posisinya bukan posisi awal


// pertukarkan posisi data
temp = data[indexMin];
data[indexMin] = data[i];
data[i] = temp;
}
}
}

Hasil Output Program

Contoh Program Kasus 2

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;

//loop untuk seluruh data


for(i = 0; i < N-1; i++) {

// elemen sekarang yang dianggap nilai maksimum


indexMaks = i;

//periksa elemen paling besar


for(j = i+1;j < N;j++) {
if(data[j] > data[indexMaks]) { //tanda '<' diganti dengan tanda '>'
indexMaks = j;
}
}

if(indexMaks != i) {//kalau posisinya bukan posisi awal


// pertukarkan posisi data
temp = data[indexMaks];
data[indexMaks] = data[i];
data[i] = temp;
}
}
}
Hasil Output Program

Contoh Program Kasus 3


Modifikasilah program pada kasus 2 dimana bagian untuk mendisplaykan informasi dibuat
menjadi sebuah fungsi.
Jawab:
Untuk mendisplaykan data perlu dibuat suatu fungsi, misal bernama fungsi infokan().
fungsi ini dibuat tanpa parameter dan tanpa nilai balik, sehingga kebutuhan variabel dibuat
bersifat lokal, kecual variabel array data[].
Fungsi infokan() membutuhkan variabel lokal sebagai berikut:
- Variabel untuk konter perulangan, beri nama I bertipe int. Perulangan dibutuhkan untuk
melakukan pendisplayan setiap data dari array data[] dengan banyak perulangan sebanyak
elemen array tersebut;
- Variabel untuk penampung data yang nilainya diambil dari array, berinama datanya dan
bertipe int.

Contoh implementasinya dalam C adalah seperti berikut:

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

//konstanta N menunjukkan banyaknya data


#define N 5

//variabel global berupa array berisi data int


int data[N];

void urutkan();
void infokan();

main(){
int i;
int datanya;

printf("Isikan datanya dulu berupa nilai bilangan bulat\n");


for(i=0;i<N;i++){
printf("Data indeks ke-%d: ", i);
scanf("%d", &datanya); fflush(stdin);
//isikan ke array data[]
data[i] = datanya;
}
printf("\nEntri selesai...tekan enter...");
//panggil fungsi untuk mengurutkan data[]
urutkan();
//data yg telah diurut ditampilkan ke layar
//dengan memanggil fungsi infokan()
infokan();
}
void urutkan() { //metode selection sort
int indexMin,i,j;
int temp;

//loop untuk seluruh data


for(i = 0; i < N-1; i++) {

// elemen sekarang yang dianggap minimum


indexMin = i;

//periksa elemen paling kecil


for(j = i+1;j < N;j++) {
if(data[j] < data[indexMin]) {
indexMin = j;
}
}

if(indexMin != i) {//kalau posisinya bukan posisi awal


// pertukarkan posisi data
temp = data[indexMin];
data[indexMin] = data[i];
data[i] = temp;
}
}
}

void infokan(){
int i, datanya;

//data yg telah diurut ditampilkan ke layar


printf("\nData terurut\n");
for(i=0;i<N;i++){
//salin dulu data dari array
datanya = data[i];
printf("%d\t", datanya);
}
printf("\n");//pindah baris
printf("Selesai ...Tekan Enter...");
}

Hasil Output Program


Contoh Program Kasus 4
Buatlah program pengolahan nilai mahasiswa seperti kasus-kasus sebelumnya, hanya saja
program diharapkan disertai dengan fasilitas pencarian dan pengurutan berdasarkan nilai akhir
mahasiswa yang bersangkutan.
Jawab:
Kita mengacu ke kasus 3 pada pembahasan tentang pencarian, dimana struktur data yang
digunakan berupa array of struct of struct, atau array dari suatu struct yang di dalamnya juga
merupakan bentukan struct, yaitu DATAMHS. Pengembangan program tersebut terdapat pada
penambahan fungsi untuk melakukan pengurutan data mahasiswa. Perlu diingat, bahwa
pengurutan yang akan dilakukan adalah dalam rangka menentukan ranking mahasiswa
berdasarkan perolehan nilai akhir atau variabel field dataMhs[].nilai.nAkhir.
Fungsi untuk mengurutkan digunakan selection sort, seperti yang sudah kita bahas sebelumnya.
Secara lengkap, implementasi dari program dalam C seperti listing kode berikut ini:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 3 //banyaknya mahassiswa


#define MID 0.25 //prosentase nilai mid adalah 25 persen
#define UAS 0.30 //prosentase nilai uas adalah 30 persen
#define TGS 0.30 //prosentase nilai tugas adalah 30 persen
#define QSZ 0.15 //prosentase nilai quiz adalah 15 persen

//mendefinisikan tipe bentukan berupa struct bernama MHS


typedef struct MHS{
char nama[30]; //panjang nama mahasiswa adalah 30 karakter
char nim[4]; //panjang nim mahasiswa adalah 5 karakter
} MHS; //nama tipe bentukan adalah MHS
typedef struct NILAI{
double mid;
double uas;
double tugas;
double quiz;
double nAkhir; //dihitung dengan fungsi hitungAkhir()
char nHuruf; //diisi melalui pemanggilan fungsi konversiHuruf()
} NILAI;

//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

printf("\nMembaca identitas sejumlah Mahasiswa\n");


printf("==============================================\n");
for(i=0;i<N;i++){
printf("Ketikkan nama Mahasiswa: ");
gets(namanya); fflush(stdin); //baca nama mahasiswa
printf("Ketikkan NIM Mahasiswa: ");
gets(nimnya); fflush(stdin); //baca nim mahasiswa
//masukan nama dan nim mahasiswa ke array of struct
strcpy(dataMhs[i].mhs.nama, namanya); //perhatikan cara mengakses field
strcpy(dataMhs[i].mhs.nim, nimnya);
//sekalian juga mengentri nilai2nya dg memanggil
//fungsi bacaNilai(), sbb
bacaNilai(i);
}
printf("\nEntri Data selesai...Tekan enter...");
}
void bacaNilai(int i){
double midnya, uasnya, tugasnya, quiznya, nAkhirnya;
char nHurufnya;

printf("\nKetik nilai MID : ");


scanf("%lf", &midnya); fflush(stdin);
printf("Ketik nilai UAS : ");
scanf("%lf", &uasnya); fflush(stdin);
printf("Ketik nilai Tugas : ");
scanf("%lf", &tugasnya); fflush(stdin);
printf("Ketik nilai Quiz : ");
scanf("%lf", &quiznya); fflush(stdin);
//lalu masukkan ke array dataMhs, sbb
dataMhs[i].nilai.mid = midnya;
dataMhs[i].nilai.uas = uasnya;
dataMhs[i].nilai.tugas = tugasnya;
dataMhs[i].nilai.quiz = quiznya;
//lalu panggil fungsi untuk menghitung nilai akhir dan
//tampung nilai baliknya pada variabel nAkhirnya
nAkhirnya = hitungAkhir(midnya, uasnya, tugasnya, quiznya);
//lalu panggil fungsi untuk mengkonveri nilai akhir ke nilai huruf
//dg passing parameter berupa nilai akhir atau nAkhirnya
//tampung hasil atau nilai baliknya pada variabel nHurufnya
nHurufnya = konversiHuruf(nAkhirnya);
//simpan nilai akhir dan nilai huruf ke dataMhs
dataMhs[i].nilai.nAkhir = nAkhirnya;
dataMhs[i].nilai.nHuruf = nHurufnya;
printf("\n");
}
//fungsi ini harus dimodifikasi melibatkan data nilai2
void infoMhs(int i){
char namanya[30]; //penyimpan sementara nama mahasiswa
char nimnya[4]; //penyimpan sementara nim mahasiswa
double nAkhirnya;
char nHurufnya;

printf("\nInformasi Identitas Mahasiswa\n");


printf("==============================================\n");

//salin dulu data mahasiswa ke variabel sementara

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;

nAkhirnya = m * MID + u * UAS + t * TGS + q * QSZ;


return nAkhirnya;
}
char konversiHuruf(double na){
char nHurufnya;
//tentukan nilai hurufnya
if((na >= 81.0) && (na<= 100.0))
nHurufnya = 'A';
else if(na >= 76.0)
nHurufnya = 'B';
else if(na >= 56.0)
nHurufnya = 'C';
else if(na >= 45.0)
nHurufnya = 'D';
else nHurufnya = 'E';
return nHurufnya; //kirim hasilnya sebagai nilai balik
}
int cariData(char nimnya[]){
int i, posisi;

//cari nim tersebut di array nim


for(i=0;i<N;i++){
if(!strcmp(nimnya, dataMhs[i].mhs.nim)){
posisi = i;
break;
}
else {
posisi = -999; //nilai ini menunjukkan data tdk ditemukan
}
}
return posisi; //posisi data dikirim sebagai nilai balik
}
void urutkan() { //metode selection sort
int indexMaks,i,j;
DATAMHS temp; //variabel sementara berupa struct DATAMHS
//loop untuk seluruh data
for(i = 0; i < N-1; i++) {
// elemen sekarang yang dianggap nilai maksimum
indexMaks = i;
//periksa nilai akhir terbesar
for(j = i+1;j < N;j++) {
if(dataMhs[j].nilai.nAkhir > dataMhs[indexMaks].nilai.nAkhir) {
indexMaks = j;
}
}
if(indexMaks != i) {//kalau posisinya bukan posisi awal
// pertukarkan posisi data
temp = dataMhs[indexMaks];
dataMhs[indexMaks] = dataMhs[i];
dataMhs[i] = temp;
}
}
}

Hasil Output Program


Tugas
1. Buatlah sebuah program yang dapat digunakan untuk mendata hasil pertandingan lompat
tinggi dari sejumlah peserta. Lalu urutkan peserta berdasarkan tinggi lompatan.
Jawab:
Listing Program
#include <stdio.h>

main()
{

printf("\n <<-- Mengurutkan Nilai Hasil Pertadingan Lompat Tinggi -->> \n");

int N;
printf("\n Masukkan Jumlah Peserta : ");
scanf("%d",&N); printf("\n");

// Input Tinggi Lompat


float TinggiLompat[N];
int i;
for(i = 0; i < N; i++)
{
printf(" Tinggi Lompatan Peserta Ke-%d : ",i+1);
scanf("%f",&TinggiLompat[i]);
}

printf("\n Hasil Sorting Dari Tertinggi : ");

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 Tinggi Lompatan = %g Meter",TinggiLompat[i]);


}

printf("\n");
}

Hasil Output Program


2. Buatlah program yang dapat digunakan untuk mengolah hasil pertandingan balap sepeda
sehingga program dapat menentukan dan menampilkan para juara lomba.
Jawab:
Listing Program
#include <stdio.h>
main()
{

printf("\n <<-- Mengurutkan Juara Balap Sepeda -->> \n");

int N;
printf("\n Masukkan Jumlah Peserta : ");
scanf("%d",&N); printf("\n");

// Input Lama Balap


float Menit[N];
int i;
for(i = 0; i < N; i++)
{
printf(" Kecepatan Peserta Ke-%d (Dalam Menit): ",i+1);
scanf("%f",&Menit[i]);
}

printf("\n Hasil Pertandingan : ");

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 Peserta Juara Ke-%d dengan lama %g Menit" ,i+1 ,Menit[i]);


}

printf("\n");
}

Hasil Output Program

Anda mungkin juga menyukai