Anda di halaman 1dari 5

Nama : Farhan Nedi

NIM : 23062023
Prodi : D3 teknik sipil dan bangunan

LISTING PROGRAM
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAX_PESERTA 100

typedef struct {
char nama[50];
int nomor;
double panjangBenang;
double sudutElevasi;
double ketinggian;
int anggotaTKI;
} Peserta;

typedef struct {
Peserta data[MAX_PESERTA];
int jumlah;
} PesertaTKI;

void tampilkanJudul() {
printf("=====================================\n");
printf(" LOMBA LAYANGAN \n");
printf("=====================================\n");
}

void inputPeserta(Peserta *peserta) {


printf("Nama Peserta \t\t: ");
scanf("%s", peserta->nama);

printf("Nomor Peserta \t\t: ");


scanf("%d", &peserta->nomor);

printf("Panjang Benang (meter) \t: ");


scanf("%lf", &peserta->panjangBenang);

printf("Sudut Elevasi (derajat) : ");


scanf("%lf", &peserta->sudutElevasi);

peserta->ketinggian = peserta->panjangBenang * sin(peserta->sudutElevasi *


M_PI / 180);
}

void tampilkanPeserta(Peserta peserta) {


printf("%-15d%-25s%-15s%-15.2lf%-15.2lf%-15.2lf\n",
peserta.nomor, peserta.nama,
(peserta.anggotaTKI ? "Anggota TKI" : "Umum"),
peserta.panjangBenang, peserta.sudutElevasi, peserta.ketinggian);
}

void inputPesertaTKI(PesertaTKI *pesertaTKI) {


int jumlahPesertaTKI;
printf("Jumlah Peserta Anggota TKI \t: ");
scanf("%d", &jumlahPesertaTKI);

for (int i = 0; i < jumlahPesertaTKI; ++i) {


printf("\nData Peserta Anggota TKI ke-%d \t\n", i + 1);
printf("--------------------------------\n");
Peserta peserta;
inputPeserta(&peserta);
peserta.anggotaTKI = 1;
pesertaTKI->data[pesertaTKI->jumlah++] = peserta;
}
}

void inputPesertaUmum(PesertaTKI *pesertaTKI) {


int jumlahPesertaUmum;
printf("Jumlah Peserta Umum \t\t: ");
scanf("%d", &jumlahPesertaUmum);

for (int i = 0; i < jumlahPesertaUmum; ++i) {


printf("\nData Peserta Umum ke-%d \t\n", i + 1);
printf("------------------------\n");
Peserta peserta;
inputPeserta(&peserta);
peserta.anggotaTKI = 0;
pesertaTKI->data[pesertaTKI->jumlah++] = peserta;
}
}

void tampilkanDaftarPeserta(PesertaTKI pesertaTKI) {


printf("%-15s%-25s%-15s%-15s%-15s%-15s\n",
"Nomor Peserta", "Nama Peserta", "Kategori", "Panjang Benang", "Sudut
Elevasi", "Ketinggian");

for (int i = 0; i < pesertaTKI.jumlah; ++i) {


tampilkanPeserta(pesertaTKI.data[i]);
}
}

void tampilkanJumlahPeserta(PesertaTKI pesertaTKI) {


int jumlahTKI = 0;
int jumlahUmum = 0;
for (int i = 0; i < pesertaTKI.jumlah; ++i) {
if (pesertaTKI.data[i].anggotaTKI) {
jumlahTKI++;
} else {
jumlahUmum++;
}
}

printf("Jumlah Peserta Anggota TKI \t: %d\n", jumlahTKI);


printf("Jumlah Peserta Umum \t\t: %d\n", jumlahUmum);
printf("Jumlah Total Peserta \t\t: %d\n", pesertaTKI.jumlah);
}

void tampilkanDaftarJuara(PesertaTKI pesertaTKI) {


for (int i = 0; i < pesertaTKI.jumlah - 1; ++i) {
for (int j = 0; j < pesertaTKI.jumlah - i - 1; ++j) {
if (pesertaTKI.data[j].ketinggian < pesertaTKI.data[j + 1].ketinggian) {
Peserta temp = pesertaTKI.data[j];
pesertaTKI.data[j] = pesertaTKI.data[j + 1];
pesertaTKI.data[j + 1] = temp;
}
}
}

printf("\nDaftar Juara Lomba (berdasarkan ketinggian layangan):\n");


printf("%-15s%-25s%-15s%-15s%-15s%-15s\n",
"Nomor Peserta", "Nama Peserta", "Kategori", "Panjang Benang", "Sudut
Elevasi", "Ketinggian");

int jumlahJuara = (pesertaTKI.jumlah < 3) ? pesertaTKI.jumlah : 3;


for (int i = 0; i < jumlahJuara; ++i) {
tampilkanPeserta(pesertaTKI.data[i]);
}
}

int cariPeserta(PesertaTKI pesertaTKI, int nomorCari) {


for (int i = 0; i < pesertaTKI.jumlah; ++i) {
if (pesertaTKI.data[i].nomor == nomorCari) {
return i;
}
}
return -1;
}

int main() {
PesertaTKI pesertaTKI = { .data = {0}, .jumlah = 0 };
tampilkanJudul();
int pilihan;
do {
printf("\nMenu Pilihan:\n");
printf("1. Entri Peserta TKI\n");
printf("2. Entri Peserta Umum\n");
printf("3. Cari Peserta\n");
printf("4. Daftar Peserta beserta hasil pertandingan\n");
printf("5. Daftar Jumlah Peserta Kategori Umum dan Kategori Anggota TKI\n");
printf("6. Daftar Juara Lomba (berdasarkan ketinggian layangan)\n");
printf("7. Keluar atau Exit\n");
printf("Pilihan Anda: ");
scanf("%d", &pilihan);
printf("=====================================\n");

switch (pilihan) {
case 1:
inputPesertaTKI(&pesertaTKI);
break;
case 2:
inputPesertaUmum(&pesertaTKI);
break;
case 3:
{
int nomorCari;
tampilkanJudul();
printf("Menu Pencarian Data Peserta\n");
printf("Masukkan nomor peserta yang dicari: ");
scanf("%d", &nomorCari);

int indeks = cariPeserta(pesertaTKI, nomorCari);


if (indeks != -1) {
printf("\nData Peserta ditemukan \t:\n");
tampilkanPeserta(pesertaTKI.data[indeks]);
} else {
printf("\nData Peserta tidak ditemukan.\n");
}

printf("\nTekan tombol Enter untuk kembali ke menu...");


getchar();
getchar();
}
break;
case 4:
tampilkanDaftarPeserta(pesertaTKI);
break;
case 5:
tampilkanJumlahPeserta(pesertaTKI);
break;
case 6:
tampilkanDaftarJuara(pesertaTKI);
break;
case 7:
printf("Terima kasih. Program selesai.\n");
break;
default:
printf("Pilihan tidak valid. Silakan pilih lagi.\n");
}
} while (pilihan != 7);

return 0;
}

Anda mungkin juga menyukai