Kode Penjelasan
#include <stdio.h> Include library yang digunakan serta
#include <string.h> mendefinisikan panjang maksimal untuk
#include <stdlib.h> array of char, yaitu 200. Mendefinisikan
#define maxLen 200 variabel test untuk mengeluarkan output
#define TEST 1 yang berguna untuk melakukan
pegecekan apakah program sudah benar
atau belum.
int main() { Deklarasi variabel yang diperlukan untuk
//Deklarasi variabel untuk menyimpan data menyimpan data file berupa pinter untuk
file file, array of char line untuk menyimpan
char fileStr[maxLen]; char di setiap baris file, array of char
char line[maxLen]; lowercase untuk menyimpan char huruf
char lowerCase[maxLen];
kecil di baris tersebut, array of char
uppercase untuk menyimpan char huruf
char upperCase[maxLen];
besar di baris tersebut, array of char num
char num[maxLen];
untuk menyimpan angka di baris
tersebut.
//Menerima input nama file Menerima input nama file serta
scanf("%s", &fileStr); membuka file dalam mode baca
//Membuka file
FILE* filePtr = fopen(fileStr, "r") ;
//Melalukan iterasi terhadap single-char di Melakukan iterasi terhadap isi file
file dengan membaca isi file per string,
int i = 0 ; dengan pemisah newline. Setiap string
//Melakukan iterasi terhadap single-char akan diiterasikan lagi per karakternya.
per baris Setiap char akan diidentifikasi dengan
while (fgets(line, maxLen, filePtr)) {
menggunakan ascii. Char yang huruf
besar akan diassign nilainya untuk
strtok(line, "\n");
mengisi array uppercase, huruf kecil ke
//Menyimpan single-char pada array yg
array lowercase, dan angka ke array num.
sesuai
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap
++i ;
}
return 0;
}
Kode untuk selanjutnya belum selesai, untuk mengetahui
algoritma yang saya pikirkan dapat melihat flowchart.
Setelahnya, saya mencoba mencari cara untuk memisahkan huruf besar, huruf kecil, dan angka serta
menyimpan panjang char sejenis. Untuk memisahkan antara huruf besar, huruf kecil, dan angka saya
menemukan solusinya yaitu dengan menggunakan library ctype.h, tepatnya menggunakan fungsi isupper
dan isdigit. Akan tetapi, untuk menyimpan panjang char sejenis terdekat, saya tidak menemukan solusi
yang efektif. Yang bisa saya pikirkan adalah memisahkan dulu ketiga jenis char tersebut pada tiga array fo
char yang berbeda, lalu selanjutnya melakukan pemrosesan terhadap array of char tersebut. Karena itulah
saya membuat tiga array of char.
Setelah saya mengecek hasil pemisahannya, saya tidak mendapatkan hasil yang pas untuk array lowercase
dan num. Pada array lowercase, ada angka, begitu pula sebaliknya pada array num ada huruf kecil,
sehingga saya harus membenarkan hal ini terebih dahulu. Membenarkan hal ini cukup memakan waktu
lama. Setelah bertanya kepada salah satu kakak asisten, akhirnya saya mencoba mengganti penggunaan
isupper dan isdigit dengan ascii saja, dan itu berhasil.
Sayangnya pada saat itu waktu sudah menunjukkan pukul 10 lewat dan ruangan sudah cukup bising
sehingga saya cukup panik. Pada waktu tersisa, saya mencoba untuk memikirkan cara bagaimana ketiga
array ini harus diproses untuk mebghasilkan satu string terpanjang, dan seperti inilah cara yang saya
pikirkan:
Halaman 2 dari 5
Memasukkan elemen setiap array of char array of string baru -> Membandingkan panjang setiap elemen
string[i]-> Menampilkan yang terpanjang pada terminal.
Sayagnya, sampai akhir waktu saya kesulitan untuk memikirkan bagaimana impelementasi kodenya. Karen
sudah cukup frustasi dan blank, saya tidak melakukan run sama sekali di autograder. Pada saat itu saya
juga sudah blank sehingga saya sudah malas mengutak-atik kode lagi agar untuk menambahkan aksi jika
file kosong sehingga autograder saya 0.
Halaman 4 dari 5
Analisis Kompleksitas Algoritma
Dengan menggunakan analisis kompleksitas waktu untuk menganalisis kompleksitas algoritma, pada
program, operasi yang mendasari keseluruhan program ini adalah proses perulangan untuk membaca
karakter yang ada dalam file per baris
Kasus terbaik terjadi ketika loop terjadi paling minimum, yaitu saat file kosong. Maka pada kasus terbaik
kompleksitas algoritma adalah :
𝑇𝑇𝑚𝑚𝑚𝑚𝑚𝑚 (𝑛𝑛) = 1
Seperti yang dapat dilihat pada penjelasan source code , program tersebut masih memiliki operasi yang
mendasari lagi untuk membuat kue tersebut. Operasi tersebut adalah operasi memasukkan per karakter
ke array yang sesuai, yang terjadi di nested loop. ,aka untuk kasus terburuk, kompleksitas algoritma
adalah
𝑇𝑇𝑚𝑚𝑚𝑚𝑚𝑚 (𝑛𝑛) = 𝑛𝑛2