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.