Top Banner
1 Nama : Margareta Vania Stephanie NIM : 10213076 Shift : 02 (Selasa, jam 09.00-11.00 WIB) Asisten : Reza Rendian Septiawan Tanggal Praktikum : 9 September 2014 LAPORAN PRAKTIKUM MODUL 02: MENULIS DAN MEMBACA BERKAS TEKS Mata Kuliah: FI2283 PEMOGRAMAN DAN SIMULASI FISIKA Bagian 1: Input dan Output pada Konsol Nama program : console-io.cpp
19

[Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

Jan 04, 2016

Download

Documents

-
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

1

Nama : Margareta Vania Stephanie

NIM : 10213076

Shift : 02 (Selasa, jam 09.00-11.00 WIB)

Asisten : Reza Rendian Septiawan

Tanggal Praktikum : 9 September 2014

LAPORAN PRAKTIKUM

MODUL 02: MENULIS DAN MEMBACA BERKAS TEKS

Mata Kuliah:

FI2283 PEMOGRAMAN DAN SIMULASI FISIKA

Bagian 1: Input dan Output pada Konsol

Nama program : console-io.cpp

Page 2: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

2

Tugas 1: Kompilasi program console-io.cpp sehingga menghasilkan perintah console-io dan

jalankan seperti pada keterangan dalam program tersebut. Beri penjelasan fungsi dari dua

perintah C++, yaitu cin dan cout.

Jadi, program console-io.cpp adalah program untuk menampilkan perintah agar pengguna

memberikan masukan. Salah satu perintah yang dikeluarkan adalah “Siapakah nama Anda?”

Perintah tersebut bisa keluar karena ada baris program

cout <<”Siapakah nama Anda?” << endl;

cout berfungsi untuk menampilkan suatu karakter ke layar monitor. cout adalah bagian dari

library iostream. Maka dari itu, untuk menggunakan cout, perlu disertakan baris kode #include

<iostream> yang artinya mengintruksikan compiler untuk menyisipkan file dari library iostream

saat program dikompilasi sehingga perintah cout bisa dijalankan. endl adalah perintah untuk

memberi enter, tidak harus ada dalam setiap menggunakan cout. Jadi secara umum, baris

program untuk memberikan keluaran adalah

cout << (keluaran);

Setelah diberi intruksi dari hasil keluaran cout, maka pasti ada baris perintah juga untuk

memasukkan jawaban dari perintah. Baris kode untuk memberi masukan dari program di atas

adalah

cin >> line;

cin adalah perintah untuk mengambil suatu karakter yang diinputkan pemakai. line di sini

merupakan variabel bertipe string untuk memasukkan nama. Jadi, secara umum, baris kode

untuk memberikan masukan adalah

cin >> (masukan);

Keluaran pertama meminta pemakai untuk memasukkan nama, maka saya memasukkan

sebuah nama secara bebas yaitu “Margareta”. Setelah itu keluar “Selamat datang di Lab

Komputasi Lanjut, < line, yaitu nama yang diinputkan >.” dan perintah “Berapakah NIM

Anda, <line>?”. Kemudian pemakai memasukkan NIM berupa integer, misalkan 10213076.

Maka terakhir akan keluar hasil “<line>, Anda terdaftar pada kelompok ber-NIM genap.”

Karena 10213076 habis dibagi 2, sehingga nilai bool ganjil adalah false (kondisi if false,

selanjutnya masuk ke else). Berikut adalah hasil kompilasi dan output yang dihasilkan program.

Page 3: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

3

Bagian 2 : Piping pada Program yang Menggunakan cin

Masih menggunakan program pada bagian 1, console-io.cpp .

Tugas 2: Jalankan perintah console-io dengan cara

echo Tintin 10209323 | ./console-io

Jadi, perintah console-io di atas adalah salah satu cara untuk memberikan input sekaligus untuk

semua perintah yang ada. Seakan-akan pengguna program sudah tahu apa saja baris perintah

yang akan keluar. Echo adalah fungsi untuk menampilkan satu atau lebih masukan sesuai

dengan syarat yang ada. Kebetulan input yang perlu dimasukkan terdiri dari dua yaitu input

bertipe string dan integer sehingga dua input yang saya masukkan di atas disesuaikan dengan

baris perintah cin yang ada. Pada perintah memasukkan nama, input bertipe stringlah yang

cocok (Tintin), sedangkan untuk perintah masukan NIM, input bertipe integerlah yang cocok

(102109323). Dengan demikian, input yang dimasukkan sudah sesuai dengan syarat perintah

masukan. Berikut adalah hasil kompilasi dan output program.

Bagian 3 : Menulis ke dalam Berkas Teks

Nama program: writehello.cpp

Tugas 3: Jelaskan apa yang dihasilkan oleh program writehello.cpp dan apa isinya

Jadi, program writehello.cpp adalah program untuk menampilkan kalimat “Hello world!” ke

dalam file teks. Pada baris program di atas, sudah ditentukan nama file teks untuk output

adalah hello.txt. Pertama-tama program membuat dan membuka file teks bernama hello.txt.

Page 4: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

4

char filename [] = “hello.txt”//matriks beripe character untuk memasukkan output ke dalam

hello.txt

ofstream fout // fout adalah variabel untuk ofstream

fout.open(filename); // hello.txt dibuka

Kemudian kalimat “Hello world!” dimasukkan dalam file teks tersebut lewat baris program

berikut.

fout << “Hello world!” << endl;

fout.close(); // hello.txt ditutup

ofstream berfungsi untuk membuka file dengan tujuan output, yang pada program di atas

adalah hello.txt . Kemudian, untuk melihat hasil output pada file teks, diperlukan pemanggilan:

cat namafile . Untuk program ini, maka pemanggilan file teksnya adalah cat hello.txt . Berikut

adalah hasil kompilasi dan output program.

Bagian 4 : Menulis Berkas Teks dengan Argumen Program

Nama program : writehelloarg.cpp

Tugas 4: Jelaskan apa perbedaan dari menjalankan perintah writehelloarg dengan kedua cara

berikut ini

./writehelloarg dan ./writehelloarg hello2.txt

Page 5: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

5

Jadi, program ini hampir mirip dengan program bagian ke-3 yaitu untuk menampilkan output

yaitu kalimat “Hello world!” ke dalam file teks. Akan tetapi, pada program ini, pengguna diberi

fasilitas untuk memberi nama sendiri pada file teksnya, melalui baris program berikut.

if (argc > 1) {

strcpy(filename, argv[1]);

Artinya, jika saya memasukan argumen lebih dari satu, maka argumen ke-2 (argv[1]) akan

dianggap sebagai nama file teks yang baru. Contohnya, ketika saya menjalankan

./writehelloarg, maka file teks tempat keluar output adalah hello.txt karena saya tidak

memberikan nama file teks baru pada argumen ke-2 sehingga file teks yang dipakai adalah file

teks yang sudah default (lihat baris program : char filename[] = “hello.txt”). Kemudian, ketika

saya menjalankan ./writehelloarg hello2.txt, maka nama file teks yang dipakai adalah

hello2.txt karena nama file tersebut adalah argumen ke-2 (argv[1]) dalam pemanggilan

sehingga digunakan untuk tempat keluaran output (lihat kembali baris program if di atas).

Berikut adalah hasil kompilasi dan output program.

Bagian 5 : Menuliskan Banyak Kata tanpa Diedit

Nama program : writewords.cpp

1

2

Lanjutan ….

Page 6: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

6

Tugas 5: Jalankan writewords, kemudian saat diminta

Output filename =

Masukkan mywords.txt, tekan enter, dan ketikkan kata-kata atu kalimat apa saja. Untuk

emngakhiri mode masuka, ketikan x dan tekan enter. Jelaskan apakah yang Anda tuliskan pada

konsol sama dengan yang tersimpan dalam berkas mywords.txt, serta tunjukkan bagian mana

dari program yang merupakan bagian terminasi program yang menggunakan karakter x

tersebut.

Jadi, program ini dimaksudkan untuk memindahkan input kata-kata atau kalimat-kalimat ke

dalam file teks. Berbeda dengan program-program sebelumnya, program ini memperbolehkan

pemakai untuk memasukan input kata-kata atau kalimat-kalimat sebebas-bebasnya dan

sebanyak-banyaknya.

Jadi, saat pemanggilan ./writewords, maka akan keluar Output filename yang memberi

perintah agar kita memasukan nama file teks untuk output, misalkan mywords.txt . Setelah itu,

keluar keterangan Type x <enter> to exit yang memberi tahu pada pemakai bahwa pemakai

boleh memberi input kata-kata sebanyak mungkin dan sebebas-bebasnya. Jika sudah selesai

mengetikkan input, maka ketik huruf „x‟ pada keyboard dan enter, maka pengetikkan untuk input

pada file teks berhenti. Untuk melihat hasil ketikan kita pada file teks, maka panggil dengan :

cat mywords.txt, kemudian muncul hasil ketikan sebelumnya, dimana hasil yang keluar ini

sudah ada di dalam file teks mywords.txt . Berikut adalah hasil kompilasi dan output program.

Bagian 6 : Menuliskan Pasangan Data x dan y

Nama program : writexy.cpp

Page 7: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

7

Tugas 6: Tuliskan hubungan antara x dan y dalam bentuk y = f(x). Tuliskan pula nilai dari f(10),

f(5), serta f(7). Periksalah apakah isi dari berkas yang dihasilkan oleh perintah writexy sama

seperti yang dicantumkan dalam kode program?

Jadi, program di atas digunakan untuk menghitung suatu fungsi dan menjabarkan nilai-nilai x

dan y dari fungsi. Untuk menghitung fungsi, digunakan kondisi pengulangan for, dengan baris

kode sebagai berikut.

for (int i =0; i<=10; i++) {

double x = (double) I;

double y = (x-3)*(x-7); ….

Inisialisasi awal dimulai dari i=0. x adalah nilai i, yang terus berubah, bertambah 1 setiap kali

pengulangan dengan kondisi i <= 10. y adalah fungsi nya yaitu (x-3) * (x-7) dan nilainya

berubah-ubah, bergantung pada nilai x.

Misalkan nilai i =0, maka x =0 dan y = (0-3) * (0-7) = 21. Pengulangan terus dilakukan dengan I

bertamabah 1 hingga i = 10, maka x = 10 dan y = (10-3)*(10-7) = 21.

Jika ditulis dalam fungsi matematis maka fungsi pada perhitungan program ini adalah

y = f(x) = (x-3) * (x-7)

Page 8: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

8

Nilai dari f(10) = 21; f(5) = -4 ; f(7) = 0

Setelah perhitungan dilakukan, maka nilai-nilai dari x dan y dimasukkan ke dalam data-xy.cpp

lewat baris program

fout << x << “\t”;

fout << y << endl;

Untuk melihat data nilai-nilai x dan y, buka dengan perintah cat data-xy.cpp . Berikut adalah

hasil kompilasi dan output program.

Bagian 7: Membaca Berkas Teks

Nam program: readfile.cpp

Page 9: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

9

Tugas 7 : Jalankan perintah readfile dengan cara

./readfile dan ./readfile data-xy.txt serta ./readfile data-xyz.txt

Program ini digunakan untuk membaca isi file teks. File teks bisa dipanggil langsung dengan

memasukkan nama file teks pada pemanggilan program, sesuai pada baris program berikut.

if(argc < 2) {

cout<< “Usage: readfile filename”<< endl;

} else {

char *ifn = argv[1];

ifstream fin;

fin.open(ifn);

….

Jika argumen kurang dari dua, maka muncul keluaran Usage : readfile filename untuk

menegaskan kembali bahwa program bisa dijalankan dengan jumlah argumen minimal

sebanyak dua, dimana argumen kedua (argv[1]) dianggap sebagai nama file teks yang mau

dibuka. Maka ketika dijalankan ./readfile, akan muncul Usage : readfile filename karena baru

satu argument (./readfile adalah argv[0] ). Jika dijalankan ./readfile data-xy.txt, maka data-

xy.txt (sebagai argv[1] ) dianggap sebagai nama file teks yang hendak dibuka. Kebetulan nama

file itu ada, karena file itu adalah bagian dari program writexy.cpp, sehingga bisa dibuka dan

dibaca. Akan tetapi, ketika menjalankan./readfile data-xyz.txt, muncul keterangan readfile:

data-xyz.txt can not be opened karena data-xyz.txt memang belum pernah dibuat

sebelumnya sehingga tidak bisa dibuka.

Page 10: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

10

Bagian 8 : Mambaca Berkas Teks Pasangan Data x dan y

Nama program : readxy.cpp

Tugas 8 : Jalankan perintah readxy dengan cara

./readxy data-xy.txt

Apa perbedaan program readxy.cpp drengan readfile.cpp?

Program ini sebenarnya sama dengan program readfile.cpp tetapi yang membedakan adalah

tampilan hasil di file teks. Pada readfile, nilai-nilai x dan y dipisahkan degan memberikan

keterangan di bagian atas yaitu „#x‟ dan „y‟. Akan tetapi, pada program ini, keterangan tersebut

tidak dimunculkan kembali, dengan asumsi bahwa pengguna tahu bahwa bagian kiri adalah

nilai-nilai x dan bagian kanan adalah nilai-nilai y.

for (int i=0; i< N; i++){

cout << x[i] << “\t”;

cout << y[i] << endl; } …

Page 11: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

11

Baris program tersebut menunjukkan bahwa nilai-nilai x dan y dipisahkan dengan tab ( \t =

perintah untuk tab).

Berikut adalah hasil pemanggilan dan output program.

Bagian 9 : Membaca dan Menulis Berkas Data x dan y

Nama file : absxy.cpp

Tugas 9 : Jalankan perintah-perintah berikut ini

./writexy data-xy-org.txt

./absxy data-xy-org.txt data-xy-abs.txt

Jelaskan mengenai perbedaan hasil dari isi berkas data-xy-org.txt dan data-xy-abs.txt

1

2

Lanjutan…

Page 12: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

12

Gunakan perintah diff dengan cara berikut ini

diff data-xy-org.txt data-xy-abs.txt

Jadi, program absxy.cpp digunakan untuk meng-absolutkan nilai-nilai y. Absolut berarti nilai

mutlak di mana nilai negatif dipositifkan dengan fungsi abs. Berikut adalah baris program untuk

meng-absolutkan nilai-nilai negatif.

for (int i=0; i<N; i++) {

y[i] = abs(y[i]); …

Artinya, inisialisasi awal dimulai dari i =0 yaitu matriks ke-0. Peng-absolutan terus dilakukan

untuk y[i] selama i< N yaitu 11 dan nilai i terus bertambah 1. Contohnya, untuk i=4, y(4) = -3,

maka abs(y[4]) = 3.

Pemanggilan dengan ./writexy data-xy-org.txt hanya menunjukkan nilai-nilai x dan y yang

sebenarnya (yang mengandung nilai-nilai negatif) sedangkan pemanggilan dengan ./absxy

data-xy-org.txt data-xy-abs.txt artinya nilai-nilai di data-xy-org.txt diabsolutkan dan hasilnya

dipindahkan ke data-xy-abs.txt sehingga yang keluar nilai-nilai yang positif semua.

Perintah diff digunakan untuk menunjukkan nilai-nilai negatif pada file sebelumnya dan hasil

absolutnya pada file yang baru. Ada empat nilai x yang menghasilkan nilai y negatif yaitu x=3,

x=4, x=5, dan x=6. Ketika diff dipanggil, pertama-tama akan keluar nilai x dan nilai y yang

bernilai negatif saja. Kemudian dibawahnya akan ditampilkan nilai x dan y yang sudah

dipositifkan. Berikut adalah hasil pemanggilan dan output program.

Page 13: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

13

Bagian 10 : Perkenalan dengan gnuplot

Tugas 10: Panggil gnuplot dengan

gnuplot

lalu ketikkan dalam lingkungan yang telah dipanggil, perintah berikut ini

plot “data-xy-org.txt” w lp ps 2 pt 5, “data-xy-abs.txt” w lp ps 2 pt 6

laporkan pasangan data x dan y untuk data originalnya dan stelah dihitung nilai absolutnya.

Page 14: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

14

Salah satu fungsi gnuplot adalah untuk mem-plotkan grafik dari suatu fungsi. Pertama, set

dahulu bahwa hasil plot grafik nanti dalam tipe gambar png. (set term png). Kemudian data

yang mau di-plotkan dipanggil dengan set out “data-xy.png”. Setelah itu plotkan data asli di

data-xy-org.png dan data yang sudah diabsolutkan nilai-nilainnya di data-xy-abs.png untuk

melihat perbedaannya dengan cara plot “data-xy-org.txt” w lp ps 2 pt 5, “data-xy-abs.txt” w

lp ps 2 pt 6

w = with,

lp = line point (menghubungkan titik-titiknya dengan garis)

ps = point size (ps 2 artinya ukuran titiknya adalah 2)

pt = point type (pt 5 untuk data-xy-org.txt artinya tipe titiknya adalah 5 yaitu kotak, sedangkan

untuk data-xy-abs.txt adalah 6 yaitu lingkaran)

Berikut adalah pemanggilan gnuplot dan pemanggilan untuk membuat plot grafik

Page 15: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

15

Berikut adalah hasil dari plot grafik

Tugas tambahan:

Buat data x dari 0 sampai 2π sebanyak 100 data. y1 = 3 sin 4x; y2 = -4 cos 3x; Proses y3 = y1 + y2 Tuliskan hasilnya dalam file teks Plot y1, y2 dan y3. Jadi, program ini digunakan untuk menjumlahkan nilai y1 dan y2 dengan bergantung pada nilai x sebanyak 100 data, dari 0 hingga 2π. Hasil penjumlahan manjadi y3 dan dimasukkan ke dalam file teks. Kode program adalah sebagai berikut. #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <sstream>

Page 16: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

16

using namespace std; int main (int argc, char *argv[]){ int N=101; double x[N]; double y1[N]; double y2[N]; double y3[N]; if (argc < 3) { cout << “Usage : input1 input2 output” << endl; } else { char *file1 = argv[1]; ifstream fin1; fin1.open(file1); if (fin1.is_open()) { string data1; int i = 0; while (!fin1.eof()){ getline (fin1, data1); if(data1[0] != „#‟) { stringstream ss;

ss << data1 << endl; ss >> x[i]; ss >> y1[i]; i++;

} }

fin1.close(); } char *file2 = argv[2];

ifstream fin2; fin2.open(file2); if (fin2.is_open()) { string data2; int i = 0; while (!fin2.eof()){ getline (fin2, data2); if(data2[0] != „#‟) { stringstream ss;

ss << data2 << endl; ss >> x[i]; ss >> y2[i]; i++;

} } fin2.close();

} for (int i=0; i< (N-1); i++) { y3[i] = y1[i] + y2[i]; }

Page 17: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

17

char *file3 = argv[3]; ofstream ofn; ofn.open(file3); if (ofn.is_open()){

ofn<< “#x\ty” << endl; for (int i=0; i< (N-1); i++) {

ofn << x[i] << “\t” << y3[i] << endl; }

ofn.close(); } }

return 0; }

Program disimpan dengan nama y3.cpp .

Pertama-tama saya buat dahulu data x dan y untuk y1 dan y2 di Microsoft Excel kemudian

dipindahkan ke dalam file teks (y1.txt dan y2.txt). Kemudian proses perhitungan akan dilakukan

jika argumen dalam pemanggilan minimal ada 4 dengan argumen ke-2 (argv[1]) adalah data y1,

argumen ke-3 (argv[2]) adalah data y2, dan argumen ke-4 (argv[3]) adalah data hasil y3

(y1+y2). Jika argumen kurang dari 3, maka akan keluar Usage : input1 input2 output.

Untuk y1 dan y2, data-datanya dipanggil keluar lewat baris program berikut.

char *file1 = argv[1]; //argv[1]= y1.txt char *file2 = argv[2]; //argv[2]= y2.txt

…. // data1= variabel untuk isi y1 …. // data2= variabel untuk isi y2

ss << data1 << endl; //isi y1 dipanggil ss << data2 << endl; //isi y2 dipanggil

ss >> x[i]; ss >> x[i];

ss >> y1[i]; //nilai-nilai y1 dikeluarkan ss >> y2[i]; //nilai-nilai y2 dikeluarkan

Kemudian, perhitungan diproses lewat baris program

for (int i=0; i< (N-1); i++) {

y3[i] = y1[i] + y2[i];} …..

Setelah y1 dan y2 dijumlahkan menjadi y3, maka y3 dimasukkan ke dalam file teks y3.cpp lewat baris program

for (int i=0; i< (N-1); i++) {

ofn << x[i] << “\t” << y3[i] << endl; // ofn adalah variabel untuk output ofstream

Page 18: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

18

Setelah itu program dikompilasi dan dipanggil dengan ./y3 y1.txt y2.txt y3.txt. y3.txt bisa

dituliskan dengan memanggil cat y3.txt . Berikut adalah hasil dari fungsi y3.

Jadi fungsi matematis dari y3 adalah

y3 = y1 + y2

y3 = 3 (sin 4x) – 4 (cos 3x)

Kemudian, fungsi dari program diatas diplotkan dalam grafik dengan gnuplot. Nama gambar

grafiknya dalah y3.png (set out “y3.png”)

Kemudian plot grafik dengan baris program:

plot “y1.txt” w lp ps 2 pt 1 lc 1 title “y1 = 3 sin 4x”, “y2.txt” w lp ps 2 pt 2 lc 3 title “y2 = -

4cos 3x”, “y3.txt” w lp ps 2 pt 3 lc 4 title “y3 = y1+y2”

pt 1 = tanda tambah; pt 2 = tanda silang; pt 3= tanda bintang

lc 1 = warna merah; lc 3 = warna biru; lc 4 = warna ungu;

1 2

3

Page 19: [Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]

19

Berikut adalah hasil kompilasi dan pembuatan plot dengan gnuplot

Berikut adalah hasil plot grafik dari program y3 (y3=y1+y2)