Anda di halaman 1dari 11

LAPORAN MODUL 02 Praktikum FI2283 Pemrograman

dan Simulasi Fisika

P02 | Menulis dan Membaca Berkas Teks

Nama : Praba Fitra Perdana


NIM : 10211108
Shift : II (Selasa, 09.00-11.00)

Hari/Tgl Praktikum : Selasa, 17 Februari 2015


Nama Asisten : Reza Rendian Septiawan
Laporan ini berisi penjelasan tentang cara kerja program dan menjawab tugas yang ada pada modul,
yakni sebagai berikut :

1. Input dan output pada konsol


Pada bagian ini dibuat program dengan nama console-io.cpp dengan perintah run ./console-io. Dalam
koding program terdapat statemen,
cin >> line;
perintah cin disini berguna untuk masukkan melalui konsol, berdasarkan statemen tersebut masukkan
cin diberikan pada variabel bernama line yang bertipe string, nilai dari data bertipe string dapat berupa
sejumlah argumen atau dalam hal ini beberapa kata, sehingga pada program console-io kita bisa
memasukkan nama kita sebagai string. Perintah cout kebalikan dari cin berfungsi untuk memberikan
keluaran untuk ditampilkan di konsol. Sebagai contoh pada koding,
cout >> comp;
yang berarti kita mengeluarkan variabel comp dengan nilai tertentu pada layar konsol.
Untuk menggunakan cin dan cout kita harus menggunakan library iostream sedangkan untuk
menggunakan tipe data string kita harus menggunakan library string.
Pada program console-io juga terdapat statemen,
bool ganjil = (bool) (NIM % 2);
yang berarti kita mendefinisikan variabel ganjil dengan tipe data bool, tipe bool memiliki nilai true (1)
dan false (0). (bool) berarti kita memaksa hasil nilai dari (NIM % 2) menjadi tipe bool, NIM merupakan
masukkan bertipe int.
Tugas 1.

Gambar 1. Keluaran program console-io.

2. Piping pada program yang menggunakan cin


Tugas 2.
Gambar 2. Keluaran program console-io dengan piping echo.
Perintah echo yang dituliskan pada konsol ketika kita akan menjalankan console-io berguna untuk
menampilkan argumen pada layar, ketika dipiping-kan dengan program console-io yang memiliki
perintah cin didalamnya, seolah-olah kita menyimpan argumen untuk nanti mengisi perintah cin,
asalkan kita tahu jumlah dan tipe data masukkan yang diperlukan, maka kita bisa menjalankan program
tanpa harus interaksi dengan cin. Contoh ketika kita tuliskan,
echo Praba 10211108 | ./console-io
maka kita akan memasukkan argumen Praba untuk masukkan (cin) pertama dan 10211108 untuk
masukkan kedua.

3. Menulis ke dalam berkas teks


Pada bagian ini dibuat program writehello.cpp yang berguna untuk membuat suatu berkas txt yang isi
dari berkas tersebut bisa kita atur melalui isi dari kodingannya.
Untuk dapat melakukannya dibutuhkan library fstream sehingga kita bisa menggunakan perintah
ofstream sebagai file stream, nama dari berkas yang dihasilkan (dalam hal ini hello.txt) dapat diatur di,
char filename[] = “hello.txt”;
dan isi dari berkas diatur di,
fout << “Hello World!!” << endl;
fout adalah variabel ofstream, yang berfungsi mengambil karakter (nilai) yang ditujukkan padanya
dengan operator << dan menyalinnya pada berkas yang dituju/dimaksud.
Tugas 3.

Gambar 3. Isi dari folder modul02.


Gambar 4. Isi berkas hello.txt.
Maka dari itu dihasilkan berkas bernama hello.txt yang berisi kalimat,
Hello World!!
berkas dihasilkan di direktori tempat terdapatnya file eksekusi.

4. Menulis berkas teks dengan argumen program


Pada bagian ini dibuat program writehelloarg.cpp, pada prinsip kerjanya masih sama dengan
writehello.cpp, hanya saja pada program ini lebih fleksibel yaitu kita bisa mengubah nama berkas
dengan menambahkan argumen pada saat dieksekusi. Perubahan nama berkas tersebut dalam
kodingannya diatur di,
if (argc > 1) {
strcpy(filename, argv[1]);
}
yang berarti apabila jumlah argumen ketika dieksekusi lebih dari satu maka variabel filename yang
awalnya memiliki nilai “hello.txt” akan diubah nilainya menjadi argumen pertama. Proses pengubahan
ini dibutuhkan perintah strcpy, dan untuk dapat menggunakan perintah ini dibutuhkan library string.h.
Tugas 4.

Gambar 5. Isi dari berkas hello2.txt.


Contohnya ketika program dijalankan dengan perintah,
./writehelloarg
maka hasil yang didapatkan sama dengan program writehello.cpp sedangkan ketika dijalankan dengan
perintah,
./writehelloarg hello2.txt
maka yang dihasilkan bukan berkas hello.txt akan tetapi berkas dengan nama hello2.txt dengan isi
berkas yang masih sama dengan hello.txt.

5. Menuliskan banyak kata tanpa dapat diedit


Pada bagian ini program yang dibahas adalah program writewords.cpp. Program ini berfungsi untuk
membuat suatu berkas seperti program-program sebelumnya, akan tetapi dalam program ini, isi dari
berkas kita masukkan melalui konsol bukan dari koding. Kunci dari program ini adalah digunakannya
perintah getchar, fungsi getchar ini adalah untuk mengambil semua karakter yang dituliskan di konsol
dan memasukkannya ke variabel (dalam kasus program ini variabelnya ch). Proses terminasinya pun
memanfaatkan perintah getchar ini, pada program perintah terminasi dilakukan dengan mengetikkan
huruf x pada konsol lalu enter yang dalam koding diatur dengan,
char ch = getchar();
if (ch == ‘x’) {
EXIT = true;
nama berkas teks diberikan melalui konsol dengan memanfaatkan cin.
Tugas 5.

Gambar 6. Keluaran program writewords dan isi dari berkas mywords.txt.


Dilihat dari gambar 6 bahwa tidak semua yang dituliskan di konsol akan sama dengan isi berkas yang
dihasilkan (mywords.txt), kita tidak bisa membuat kalimat yang mengandung karakter x.

6. Menuliskan pasangan data x dan y


Pada bagian ini dibuat program bernama writexy.cpp untuk menuliskan suatu data pasangan x dan y
(fungsi x), pembuatan berkas masih sama seperti program-pragram sebulumnya yaitu memanfaatkan
filestream (fstream), data x digenerate menggunakan perintah loop for, nilai dari x yang telah digenerate
dimasukkan ke suatu fungsi x bernama y, dalam koding dituliskan sebagai berikut,
for(int i = 0; i <= 10; i++) {
double x = (double) i;
double y = (x - 3) * (x - 7);
fout << x << “\t”;
fout << y << endl;
}
Dari program ini dihasilkan berkas teks bernama data-xy.txt yang berisi data pasangan x dan y.
Tugas 6.
Dalam program digunakan y = (x - 3) * (x - 7)
Gambar 7. Isi dari berkas data-xy.txt. Isi berkas sesuai dengan hasil fungsi yang dituliskan dalam koding
program.

7. Membaca berkas teks


Pada bagian ini dibuat sebuah program serupa perintah cat pada konsol (perintah untuk menampilkan
isi suatu berkas yang bisa dibaca pada konsol) bernama readfile.cpp. Sebelumnya kita menggunakan
ofstream dalam penggunaan filestream karena kita ingin memasukkan karakter-karakter pada suatu
berkas, pada program ini sebaliknya yaitu kita ingin membaca karakter-karakter dari isi suatu berkas
yang telah ada, dilakukan dengan perintah ifstream yang masih satu kelompok dengan ofstream dalam
library fstream. Statemen yang perlu diperhatikan dalam koding program ini adalah,
string line;
while(!fin.eof()) {
getline(fin, line);
cout << line << endl;
}
fin adalah variabel ifstream yang mewakili berkas yang akan dibaca, perintah loop while diatas memiliki
syarat pengulangan selama belum mencapai baris akhir (end of line [eof]) akan terus dilakukan, yang
dilakukan adalah perintah getline yaitu menyalin baris dari variabel fin ke variabel line, kemudian
perintah cout mengeluarkan line ke konsol sehingga isi berkas bisa ditampilkan di layar.
Tugas 7.
Gambar 8. Membaca berkas data-xy.txt dengan menggunakan program readfile.
Ketika dijalankan hanya dengan,
./readfile
maka dihasilkan,
Usage: readfile filename
karena syarat dijalankannya program adalah jumlah argumennya lebih dari satu dengan,
if (argc < 2) {
cout << “Usage: readfile filename” << endl;
} else { . . . .
Sedangkan dengan,
./readfile data-xy.txt
menghasilkan tampilan data-xy.txt pada konsol.
Terakhir ketika digunakan,
./readfile data-xyz.txt
dihasilkan keluaran,
readfile: data-xyz.txt can not be opened
dikarenakan adanya statemen,
if (fin.is_open) {
. . . } else {
cout << “readfile: “;
cout << ifn << “can not be opened” << endl;
pada koding sebagai alternatif (else) ketika fin atau berkas yang ingin dibaca, tidak bisa dibuka
(fin.is_open), dalam hal ini data-xyz.txt tidak bisa dibuka karena tidak tersedianya berkas tersebut.
8. Membaca berkas teks pasangan data x dan y
Program pada bagian ini adalah readxy.cpp, berfungsi sama seperti readfile.cpp hanya saja saat
menampilkannya tidak semua baris ditampilkan, baris yang terdapat karakter # akan dilewat (tidak
ditampilkan) yaitu dengan,
if (line [0] != ‘#’) {
stringstream ss;
ss << line << endl;
ss >> x[i];
ss >> y[i];
i++;
}
diatas juga terdapat perintah stringstream yang berfungsi memisah karakter/argumen dalam satu
baris/string, dengan perintah stringstream diatas kita bisa mendapatkan nilai x dan y (sebelumnya telah
dideklarasikan sebagai array) secara terpisah, sehingga harus ditampilkan dengan,
for (. . .)
cout << x[i] << “\t”;
cout << y[i] << endl;
perintah stringstream bisa dilakukan dengan mencantumkan library sstream.
Tugas 8.

Gambar 9. Membaca berkas data-xy.txt dengan menggunakan program readxy.


Ketika program dijalankan dengan cara,
./readxy data-xy.txt
hanya ditampilkan data x dari 0 hingga 10 bersama dengan pasangan y nya pada konsol, berbeda
dengan readfile yang menampilkan baris #x y juga diatas baris data x dan y nya, dengan alasan yang
telah dijelaskan diatas.
9. Membaca dan menulis berkas data x dan y
Pada bagian ini dijelaskan program absxy.cpp, program ini bekerja dengan membaca berkas yang telah
ada seperti readxy.cpp (tetapi tidak menampilkannya), data x dan y telah dipisahkan oleh stringstream,
kemudian data y di absolutkan dengan perintah,
for (. . .) {
y[i] = abs y[i];
}
kemudian memasukkan data x dan y pada suatu berkas dengan nama yang kita tentukan menggunakan
perintah ofstream. Program dijalankan dengan cara,
./absxy [nama berkas input] [nama berkas output]
Tugas 9.

Gambar 10. Isi berkas data-xy-abs.txt.


Dituliskan perintah,
./writexy data-xy-org.txt
sehingga menghasilkan berkas teks berisi data x dan y. Kemudian dilakukan perintah,
./absxy data-xy-org.txt data-xy-abs.txt
sehingga dihasilkan berkas bernama data-xy-abs.txt dengan isi berkas berupa data x dan pasangannya,
data y yang telah diabsolutkan, nilai-nilai negatif dari dalam isi berkas data-xy-org.txt menjadi positif
dalam data-xy-abs.txt.
Dilakukan perintah
diff data-xy-org.txt data-xy-abs.txt
sehingga dihasilkan keluaran di konsol yang menunjukkan perbedaan antara kedua berkas, yaitu dengan
menampilkan baris-baris yang berbeda dari kedua berkas.

10. Perkenalan dengan gnuplot


gnuplot berfungsi untuk membuat suatu plot dari data – data yang tersedia baik itu dari data yang
langsung kita tuliskan di konsol maupun dari berkas. Dilakukan dengan perintah,
plot [data (bisa berupa fungsi / berkas)]
diakhirannya bisa ditambahkan w (with) kemudian,
lp : line, point (mencantumkan garis dan poin pada grafik [bisa salah satunya saja])
ps : point size (ukuran poin)
pt : poin type (jenis poin) dll.
Tugas 10.
Dilakukan plot dengan,
plot “data-xy-org.txt” w lp ps 2 pt 5, “data-xy-abs.txt” w lp ps 2 pt 6
dihasilkan

Gambar 11. Grafik hasil plot data-xy-org.txt dan data-xy-abs.txt dengan menggunakan gnuplot.

11. Tugas tambahan


Pada tugas tambahan saya membuat program genx.cpp untuk men-generate data x dari 0 hingga 100
dengan keluaran berupa berkas bernama data-x.txt berisi data x. Kemudian saya membuat program
getyf1.cpp untuk membuat berkas data-xyf1.txt yang berisi data x dan y. Data y merupakan fungsi dari x
dengan bentuk y = sin(x)/x. Pertama program getyf1 membaca berkas data-x.txt kemudian
menggunakan data x dari berkas tersebut untuk digunakan sebagai masukkan fungsi y dan akhirnya data
x dan data y dimasukkan ke dalam data-xyf1.txt. Saya juga membuat program getyf3.cpp yang
prinsipnya sama dengan program getyf1.cpp, hanya saja fungsi y dalam program ini adalah y = cos(x)/x
dan berkas yang dihasilkan adalah berkas bernama data-xyf3.txt. Plot yang dihasilkan dari berkas-berkas
yang dihasilkan adalah

Gambar 12. Grafik hasil plot data-xyf1.txt dan data-xyf3.txt dengan menggunakan gnuplot.

Anda mungkin juga menyukai