Anda di halaman 1dari 5

Program Studi Teknik Elektro ITB

Nama Kuliah (Kode) : Praktikum Pemecahan Masalah dengan C (EL2208)


Tahun / Semester : 2022-2023 / Genap
Modul : 2 – Strings and External Files
Nama Asisten / NIM : Syauqittuqa/ 13219034
Nama Praktikan / NIM : Najmi Azzahra F / 13221086

BCL / Log Praktikum


Pilihan Soal Praktikum Yang Dikerjakan
Nomor 1, karena saat membaca deskripsi soal sedikit terbayang algoritma serta langkah apa yang harus
dilakukan. Tidak memilih nomor 2 karena deskripsi soal terlalu panjang, ada kalimat "enkripsi dan tabel
tersendiri membuat saya berpikir jika nomor 2 pasti lebih ribet disbanding nomor 1.

Penjelasan Rancangan /Algoritma kode yang dibuat


Berikut adalah source code yang dibuat beserta penjelasan rancangannya:
(notes: kode yang saya buat saat praktikum ini belum beres)

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

for (int i = 0 ; i < strlen(line) ;


i++){
if (line[i] >= 97 && line[i] <=
122) {
lowerCase[i]= line[i];
upperCase[i] = ' ';
num[i] = ' ';
} else if (line[i]>= 65 &&
line[i]<=90) {
upperCase[i] = line[i] ;
lowerCase[i] = ' ';
num[i] = ' ';
} else if (line[i]>=48 &&
line[i]<=57) {
num[i] = line[i];
upperCase[i] = ' ';
lowerCase[i] = ' ';
}
}

++i ;

}
return 0;
}
Kode untuk selanjutnya belum selesai, untuk mengetahui
algoritma yang saya pikirkan dapat melihat flowchart.

Kendala yang dialami:


Dari awal mengerjakan soal ini, progress saya memang cukup pelan dan lambat, mula-mulanya saya
memastikan terlebih dahulu apakah file bisa dibaca per-baris. Saya melakukan pengetesan dengan
mengeluarkan hasil strtok(line, “\n”) pada terminal dan berhasil.

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.

Flowchart Kode yang Dibuat


Saya memecah program jadi subprogram dalam flowchart untuk mempermudah pembacaan flowchart.
Akan tetapi, pada implementasi kodenya saya tidak memecah program sehingga tidak ada subprogram.

 Flowchart program utama  Flowchart fungsi 1


Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

 Flowchart fungsi 2  Flowchart fungsi 3

DFD Dari Kode yang Dibuat

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

Anda mungkin juga menyukai