Skip to content

Instantly share code, notes, and snippets.

@RianWardana
Last active May 9, 2017 04:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RianWardana/8a813ff0978eb8928bc524f28316e54a to your computer and use it in GitHub Desktop.
Save RianWardana/8a813ff0978eb8928bc524f28316e54a to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
// FUNGSI UNTUK MENCARI NILAI MAKSIMUM DARI BEBERAPA DATA //
int max(int a, int b, int c, int d, int e) {
int ab = (a >= b ? a : b);
int cd = (c >= d ? c : d);
int abcd = (ab >= cd ? ab : cd);
int abcde = (abcd >= e ? abcd : e);
return abcde;
}
// FUNGSI UNTUK MENCARI LEBAR DARI NILAI //
int getWidth(int a) {
int valueWidth = 0;
while (a != 0) {
a /= 10;
valueWidth++;
}
return valueWidth;
}
// CEK APAKAH ADA DATA YANG TIDAK MEMILIKI TINGGI //
void cekDataHilang(float a, float b, float c, float d, float e) {
if ((a <= 1) || (b <= 1) || (c <= 1) || (d <= 1) || (e <= 1))
printf("\n\n Grafik data tidak akan muncul apabila tinggi grafik\n terlalu kecil atau perbedaan antar data terlalu besar");
}
// MENCETAK NAMA PROGRAM DAN PEMBUAT //
void clearScreen() {
system("cls");
printf("\n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
printf("\n + PROGRAM VISUALISASI GRAFIK BATANG DATA +");
printf("\n + Oleh : Arbariyanto Mahmud Wicaksono (1506717020) arbariyantom@gmail.com +");
printf("\n + : Nurian Satya Wardana (1506717071) rianwardana@live.com +");
printf("\n + Jika terdapat kendala, silakan hubungi kami +");
printf("\n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
printf("\n");
}
// CETAK JENIS GRAFIK //
void printGraphType() {
printf("\n");
printf("\n | | ");
printf("\n | ##### |--------------------------+ ");
printf("\n | ##### | | ");
printf("\n | ##### |--------------------------+ ");
printf("\n | ##### ##### | ");
printf("\n | ##### ##### |----------------+ ");
printf("\n | ##### ##### | | ");
printf("\n | ##### ##### |----------------+ ");
printf("\n |_______________ |___________________________ ");
printf("\n ");
printf("\n VERTIKAL HORIZONTAL ");
printf("\n\n Pilihan bentuk grafik Anda? (v/h) ");
}
// CETAK MODEL GRAFIK //
void printGraphModel(char graphType, int graphHeight, int columnWidth, char bar) {
printf("\n");
if (graphType == 'h') {
printf("\n | ");
printf("\n | |------L-------| ");
printf("\n | ");
printf("\n |----------------+ ");
printf("\n | | ");
printf("\n |----------------+ ");
printf("\n |____________________");
printf("\n");
printf("\n Lebar grafik (L) : %d", columnWidth);
} else {
printf("\n [JUDUL GRAFIK] ");
printf("\n | ");
printf("\n | --L-- ");
printf("\n | ##### | Tinggi Grafik (t) : %d ", graphHeight);
printf("\n | ##### | Lebar kolom (L) : %d ", columnWidth);
printf("\n | ##### t Simbol Grafik : %c ", bar);
printf("\n | ##### | ");
printf("\n | ##### | ");
printf("\n |__________________ ");
printf("\n 1 ");
printf("\n");
printf("\n Tinggi grafik (t) mengatur skala tinggi dari grafik.");
printf("\n Lebar kolom (L) mengatur lebar kolom masing-masing data.");
printf("\n (Lebar kolom menyesuaikan dengan data terpanjang).");
printf("\n Simbol grafik (#) mengatur tampilan grafik batang.");
printf("\n Judul grafik dapat diatur pada halaman konfigurasi selanjutnya.");
}
printf("\n\n Gunakan konfigurasi default? (y/n) ");
}
// CETAK MODEL TEKS GRAFIK //
void printTextModel(char graphType) {
printf("\n\n");
if (graphType == 'h') {
printf("\n [JUDUL GRAFIK] ");
printf("\n | ");
printf("\n |----------------+ ");
printf("\n [JUDUL DATA 1] | | ");
printf("\n |----------------+ ");
printf("\n | ");
printf("\n (dst...) | ");
printf("\n |____________________");
printf("\n");
} else {
printf(" LEGENDA (ditampilkan tepat di bawah grafik)\n");
printf(" +---+----------------+\n");
printf(" | 1 | [JUDUL DATA 1] |\n");
printf(" +---+----------------+\n");
printf(" | (dst...) |\n");
printf(" +---+----------------+\n");
}
printf("\n Tambahkan judul dan legenda pada grafik? (y/n) ");
}
// CETAK JUDUL GRAFIK //
void printTitle(char graphType, int columnWidth, char stringJudul[], int maxStringLength) {
int strLength = strlen(stringJudul) - 1;
int marginLeft, i;
printf("\n ");
if (graphType == 'h') {
int totalLength = maxStringLength + (columnWidth*2);
marginLeft = (totalLength - strLength) / 2;
} else {
int graphLength = (5 * columnWidth) + 5;
marginLeft = (graphLength - strLength) / 2;
}
marginLeft = (marginLeft > 0 ? marginLeft : 1);
for (i = 0; i < marginLeft; i++) printf(" ");
printf("%s", stringJudul);
printf("\n");
}
// CETAK GARIS SUMBU X //
void printAxisX(int columnWidth) {
printf(" |");
int i;
for (i = 0; i < (5 * columnWidth) + 5 + 1; i++) {
printf("_");
}
printf("\n");
}
// CETAK LABEL SUMBU X //
void printLabelX(int columnWidth) {
int i;
printf(" ");
int count = 1;
int firstMiddle = (columnWidth + 1) / 2;
for (i = 1; i < (5 * columnWidth) + 5; i++) {
if ( (i == firstMiddle) || ((i - firstMiddle) % (columnWidth + 1)) == 0 ) {
printf("%d", count);
count++;
} else
printf(" ");
}
printf("\n");
}
// CETAK JUDUL SUMBU X //
void printAxisTitleX(int columnWidth) {
int i;
printf("\n ");
for (i = 1; i < (5 * columnWidth) + 5; i++) {
if (i == (((5 * columnWidth) + 5) / 2) - 2) {
printf("DATA");
} else printf(" ");
}
}
// CETAK LEGENDA GRAFIK //
void printLegend(char stringData_1[], char stringData_2[], char stringData_3[], char stringData_4[], char stringData_5[]) {
int i;
int length_1 = strlen(stringData_1);
int length_2 = strlen(stringData_2);
int length_3 = strlen(stringData_3);
int length_4 = strlen(stringData_4);
int length_5 = strlen(stringData_5);
int maxLength = max(length_1, length_2, length_3, length_4, length_5);
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n | 1 | %s", stringData_1); for (i = 0; i <= maxLength - length_1; i++) printf(" "); printf("|");
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n | 2 | %s", stringData_2); for (i = 0; i <= maxLength - length_2; i++) printf(" "); printf("|");
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n | 3 | %s", stringData_3); for (i = 0; i <= maxLength - length_3; i++) printf(" "); printf("|");
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n | 4 | %s", stringData_4); for (i = 0; i <= maxLength - length_4; i++) printf(" "); printf("|");
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n | 5 | %s", stringData_5); for (i = 0; i <= maxLength - length_5; i++) printf(" "); printf("|");
printf("\n +---+"); for (i = 0; i < maxLength + 2; i++) printf("-"); printf("+");
printf("\n");
}
// CETAK KONTAK PEMBUAT //
void printContact() {
printf("\n\n Jika ada kendala, hubungi:");
printf("\n arbariyantom@gmail.com");
printf("\n rianwardana@live.com");
}
// PROGRAM UTAMA //
int main() {
// system("mode 800");
int iterGraphHeight = 0;
int iterColumnWidth = 0;
int iterSpaceValue = 0;
int maxChar = 24;
char stringJudul[maxChar];
char stringData_1[maxChar], stringData_2[maxChar], stringData_3[maxChar], stringData_4[maxChar], stringData_5[maxChar];
int maxStringLength = 1;
int stringLength_1 = 1;
int stringLength_2 = 1;
int stringLength_3 = 1;
int stringLength_4 = 1;
int stringLength_5 = 1;
// NILAI DEFAULT //
int graphHeight = 20;
int columnWidth = 15;
char bar = '#';
int value1 = 1;
int value2 = 2;
int value3 = 3;
int value4 = 4;
int value5 = 5;
char isDefault = 'y';
char isConfigureText = 'n';
char graphType = 'h';
// INPUT DATA DARI USER //
clearScreen();
printf("\n INPUT DATA GRAFIK (5 data)");
printf("\n Data 1\t: ");
scanf("%d", &value1);
printf(" Data 2\t: ");
scanf("%d", &value2);
printf(" Data 3\t: ");
scanf("%d", &value3);
printf(" Data 4\t: ");
scanf("%d", &value4);
printf(" Data 5\t: ");
scanf("%d", &value5);
// PILIHAN JENIS GRAFIK //
clearScreen();
printf("\n KONFIGURASI BENTUK GRAFIK");
printGraphType();
scanf(" %c", &graphType);
// APAKAH USER MAU MENGGUNAKAN KONFIGURASI DEFAULT ? //
clearScreen();
printf("\n KONFIGURASI GRAFIK DEFAULT");
printGraphModel(graphType, graphHeight, columnWidth, bar);
scanf(" %c", &isDefault);
// JIKA USER TIDAK MAU MENGGUNAKAN KONFIGURASI DEFAULT, TAMPILKAN FORM KONFIGURASI //
if (isDefault == 'n') {
printf("\n KONFIGURASI GRAFIK");
printf("\n");
if (graphType == 'v') printf(" Tinggi Grafik\t: ");
if (graphType == 'v') scanf("%d", &graphHeight);
printf(" Lebar Kolom\t: ");
scanf("%d", &columnWidth);
if (graphType == 'v') printf(" Simbol Grafik\t: ");
if (graphType == 'v') scanf(" %c", &bar);
}
// APAKAH USER INGIN MENGISI JUDUL DAN LEGENDA //
clearScreen();
printf("\n KONFIGURASI TEKS GRAFIK");
printTextModel(graphType);
scanf(" %c", &isConfigureText);
// JIKA USER INGIN MENAMBAHKAN JUDUL DAN LEGENDA, TAMPILKAN FORM KONFIGURASI //
if (isConfigureText == 'y') {
printf("\n Judul grafik\t: ");
scanf(" %[^\n]s", &stringJudul);
printf(" Judul data 1\t: ");
scanf(" %[^\n]s", &stringData_1);
printf(" Judul data 2\t: ");
scanf(" %[^\n]s", &stringData_2);
printf(" Judul data 3\t: ");
scanf(" %[^\n]s", &stringData_3);
printf(" Judul data 4\t: ");
scanf(" %[^\n]s", &stringData_4);
printf(" Judul data 5\t: ");
scanf(" %[^\n]s", &stringData_5);
stringLength_1 = strlen(stringData_1);
stringLength_2 = strlen(stringData_2);
stringLength_3 = strlen(stringData_3);
stringLength_4 = strlen(stringData_4);
stringLength_5 = strlen(stringData_5);
maxStringLength = max(stringLength_1, stringLength_2, stringLength_3, stringLength_4, stringLength_5);
}
// MENGHITUNG BERAPA NILAI COLUMNWIDTH MINIMAL //
float maxValue = (float) max(value1, value2, value3, value4, value5);
int minColumnWidth = getWidth((int)maxValue);
columnWidth = (columnWidth >= minColumnWidth ? columnWidth : minColumnWidth);
// SUPAYA BERAPAPUN RANGE NILAINYA, PROGRAM DAPAT MENYESUAIKAN SKALA (TINGGI) MASING-MASING BAR //
float factor = (graphType == 'v' ? maxValue / graphHeight : maxValue / (columnWidth*2));
float height1 = (value1 / factor);
float height2 = (value2 / factor);
float height3 = (value3 / factor);
float height4 = (value4 / factor);
float height5 = (value5 / factor);
// MENAMPILKAN JUDUL GRAFIK //
clearScreen();
if (isConfigureText == 'y')
printTitle(graphType, columnWidth, stringJudul, maxStringLength);
else
printf("\n VISUALISASI DATA: GRAFIK BATANG\n\n");
// FOR LOOP INI UNTUK MENGGAMBAR GRAFIK //
if (graphType == 'h') {
// MENGGAMBAR BAR 1 //
printf(" "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height1; iterColumnWidth++) printf("-"); printf("+");
printf("\n ");
if (isConfigureText == 'y') {
for (iterSpaceValue = 0; iterSpaceValue < maxStringLength - stringLength_1; iterSpaceValue++) printf(" ");
printf("%s |", stringData_1);
} else {
printf("1 |");
}
for (iterColumnWidth = 0; iterColumnWidth < (int)height1; iterColumnWidth++) printf(" "); printf("| %d", value1);
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height1; iterColumnWidth++) printf("-"); printf("+");
// MENGGAMBAR BAR 2 //
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height2; iterColumnWidth++) printf("-"); printf("+");
printf("\n ");
if (isConfigureText == 'y') {
for (iterSpaceValue = 0; iterSpaceValue < maxStringLength - stringLength_2; iterSpaceValue++) printf(" ");
printf("%s |", stringData_2);
} else {
printf("2 |");
}
for (iterColumnWidth = 0; iterColumnWidth < (int)height2; iterColumnWidth++) printf(" "); printf("| %d", value2);
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height2; iterColumnWidth++) printf("-"); printf("+");
// MENGGAMBAR BAR 3 //
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height3; iterColumnWidth++) printf("-"); printf("+");
printf("\n ");
if (isConfigureText == 'y') {
for (iterSpaceValue = 0; iterSpaceValue < maxStringLength - stringLength_3; iterSpaceValue++) printf(" ");
printf("%s |", stringData_3);
} else {
printf("3 |");
}
for (iterColumnWidth = 0; iterColumnWidth < (int)height3; iterColumnWidth++) printf(" "); printf("| %d", value3);
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height3; iterColumnWidth++) printf("-"); printf("+");
// MENGGAMBAR BAR 4 //
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height4; iterColumnWidth++) printf("-"); printf("+");
printf("\n ");
if (isConfigureText == 'y') {
for (iterSpaceValue = 0; iterSpaceValue < maxStringLength - stringLength_4; iterSpaceValue++) printf(" ");
printf("%s |", stringData_4);
} else {
printf("4 |");
}
for (iterColumnWidth = 0; iterColumnWidth < (int)height4; iterColumnWidth++) printf(" "); printf("| %d", value4);
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height4; iterColumnWidth++) printf("-"); printf("+");
// MENGGAMBAR BAR 5 //
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height5; iterColumnWidth++) printf("-"); printf("+");
printf("\n ");
if (isConfigureText == 'y') {
for (iterSpaceValue = 0; iterSpaceValue < maxStringLength - stringLength_5; iterSpaceValue++) printf(" ");
printf("%s |", stringData_5);
} else {
printf("5 |");
}
for (iterColumnWidth = 0; iterColumnWidth < (int)height5; iterColumnWidth++) printf(" "); printf("| %d", value5);
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth < (int)height5; iterColumnWidth++) printf("-"); printf("+");
printf("\n "); for (iterSpaceValue = 0; iterSpaceValue < maxStringLength; iterSpaceValue++) printf(" "); printf(" |");
for (iterColumnWidth = 0; iterColumnWidth <= (columnWidth*2) + getWidth((int)maxValue) + 2; iterColumnWidth++) printf("_");
}
else {
for (iterGraphHeight = 0; iterGraphHeight <= graphHeight; iterGraphHeight++) {
printf(" |");
// MENGGAMBAR BAR 1 //
printf(" ");
for (iterColumnWidth = 0; iterColumnWidth < columnWidth; iterColumnWidth++) {
if (iterGraphHeight < graphHeight - height1) printf(" ");
else if (iterGraphHeight == graphHeight - (int)height1) {
printf("%d",value1);
for (iterSpaceValue = 0; iterSpaceValue < columnWidth - getWidth(value1); iterSpaceValue++) printf(" ");
break;
}
else printf("%c", bar);
}
// MENGGAMBAR BAR 2 //
printf(" ");
for (iterColumnWidth = 0; iterColumnWidth < columnWidth; iterColumnWidth++) {
if (iterGraphHeight < graphHeight - height2) printf(" ");
else if (iterGraphHeight == graphHeight - (int)height2) {
printf("%d",value2);
for (iterSpaceValue = 0; iterSpaceValue < columnWidth - getWidth(value2); iterSpaceValue++) printf(" ");
break;
}
else printf("%c", bar);
}
// MENGGAMBAR BAR 3 //
printf(" ");
for (iterColumnWidth = 0; iterColumnWidth < columnWidth; iterColumnWidth++) {
if (iterGraphHeight < graphHeight - height3) printf(" ");
else if (iterGraphHeight == graphHeight - (int)height3) {
printf("%d",value3);
for (iterSpaceValue = 0; iterSpaceValue < columnWidth - getWidth(value3); iterSpaceValue++) printf(" ");
break;
}
else printf("%c", bar);
}
// MENGGAMBAR BAR 4 //
printf(" ");
for (iterColumnWidth = 0; iterColumnWidth < columnWidth; iterColumnWidth++) {
if (iterGraphHeight < graphHeight - height4) printf(" ");
else if (iterGraphHeight == graphHeight - (int)height4) {
printf("%d",value4);
for (iterSpaceValue = 0; iterSpaceValue < columnWidth - getWidth(value4); iterSpaceValue++) printf(" ");
break;
}
else printf("%c", bar);
}
// MENGGAMBAR BAR 5 //
printf(" ");
for (iterColumnWidth = 0; iterColumnWidth < columnWidth; iterColumnWidth++) {
if (iterGraphHeight < graphHeight - height5 ) printf(" ");
else if (iterGraphHeight == graphHeight - (int)height5) {
printf("%d",value5);
for (iterSpaceValue = 0; iterSpaceValue < columnWidth - getWidth(value5); iterSpaceValue++) printf(" ");
break;
}
else printf("%c", bar);
}
printf("\n");
}
// CETAK GARIS SUMBU X //
printAxisX(columnWidth);
// CETAK LABEL SUMBU X //
printLabelX(columnWidth);
// CETAK LEGENDA ATAU JUDUL SUMBU X //
if (isConfigureText == 'y') {
printLegend(stringData_1, stringData_2, stringData_3, stringData_4, stringData_5);
} else {
printAxisTitleX(columnWidth);
}
}
// MENAMPILKAN PERINGATAN JIKA ADA DATA YANG TIDAK MUNCUL //
cekDataHilang(height1, height2, height3, height4, height5);
// MENAMPILKAN KONTAK PEMBUAT PROGRAM //
// printContact();
// TAMPILKAN PROMPT UNTUK KEMBALI KE MENU UTAMA //
printf("\n\n\n Tekan apa saja untuk kembali ke menu ");
getch();
main();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment