[Daspro Shift02 Modul02 Margareta Vania Stephanie 10213076]
-
Upload
margareta-vania-stephanie -
Category
Documents
-
view
219 -
download
9
description
Transcript of [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
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.
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.
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
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 ….
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
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)
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
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.
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; } …
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…
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.
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.
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
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>
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]; }
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
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
19
Berikut adalah hasil kompilasi dan pembuatan plot dengan gnuplot
Berikut adalah hasil plot grafik dari program y3 (y3=y1+y2)