• Tidak ada hasil yang ditemukan

P02 Menulis dan Membaca Berkas Teks

N/A
N/A
Protected

Academic year: 2021

Membagikan "P02 Menulis dan Membaca Berkas Teks"

Copied!
16
0
0

Teks penuh

(1)

P02 | Menulis dan Membaca Berkas Teks

Modul Praktikum FI2283 Pemrograman dan Simulasi Fisika

Versi 2013.09.09

Catatan. Perhatikan berkas (atau file) apa yang harus anda buat dalam setiap tugas. Setiap kali praktikum buat folder baru dengan nama Modul NN dimana NN merupakan nomor praktikum. Bila berkas Anda tidak ditemukan maka nilai praktikum hanya dari angka kehadirannya saja.

1 Input dan output pada konsol 11

2 Piping pada program yang menggunakan cin 13

3 Menulis ke dalam berkas teks 13

4 Menulis berkas teks dengan argumen program 14 5 Menuliskan banyak kata tanpa dapat diedit 16

6 Menuliskan pasangan data x dan y 17

7 Membaca berkas teks 19

8 Membaca berkas teks pasangan data x dan y 20 9 Membaca dan menulis berkas data x dan y 22

10 Perkenalan dengan gnuplot 24

1

Input dan output pada konsol

(2)

/*

console-io.cpp 20130907.01

Sparisoma Viridi <dudung@gmail.com> Input dan output (I/O) in the console Compile: g++ console-io.cpp -o console-io Run: ./console-io

*/

#include <iostream> #include <string> using namespace std;

int main(int argc, char *argv[]) { char comp[] = "COMP: ";

string line; int NIM; cout << comp;

cout << "Siapakah nama Anda?" << endl; cin >> line;

cout << endl; cout << comp;

cout << "Selamat datang di Lab Komputasi Lanjut, "; cout << line << "." << endl;

cout << endl; cout << comp;

cout << "Berapakah NIM Anda, "; cout << line << "?" << endl; cin >> NIM;

cout << endl;

bool ganjil = (bool) (NIM % 2); if(ganjil) {

cout << comp;

cout << line << ", Anda terdaftar pada kelompok ber-Nim ganjil." << endl; } else {

cout << comp;

cout << line << ", Anda terdaftar pada kelompok ber-NIM genap." << endl; }

cout << endl; return 0;

(3)

}

Tugas 1. Kompilasi program console-io.cpp di atas sehingga menghasilkan perintah console-io dan jalankan seperti pada keterangan dalam program tersebut. Laporkan hasilnya dalam berkas laporan.txt dan berikan penjelasan fungsi dari dua perintah C++, yaitu cin dan cout.

2

Piping pada program yang menggunakan cin

Setiap program C++ yang di dalamnya memanfaatkan perintah cin dapat di-jalankan tanpa interaksi dengan pengguna, apabila telah diketahui jumlah ma-sukan yang diperlukan. Pada program console.cpp sebelumnya diperlukan dua masukan, yaitu nama dan NIM.

Tugas 2. Jalankan perintah console-io dengan cara echo Tintin 10209323 | ./console-io

dan laporlan hasilnya dalam berkas laporan.txt.

3

Menulis ke dalam berkas teks

Berkas teks adalah berkas yang secara umum berisi karakter-karakter yang da-pat terbaca, sehingga dada-pat dilihat dalam sistem operasi Linux dengan meng-gunakan

cat nama-file

di mana nama-file adalah nama berkas yang ingin dilihat isinya. Berkas-berkas C++ yang memiliki ekstensi .cpp adalah contoh dari berkas teks, termasuk juga berkas laporan.txt.

Salinlah kode di bawah ini dan simpan, kompilasi, serta jalankan seperti keteran-gan di dalamnya.

/*

writehello.cpp

Nama Anda <email.anda.@mail-provider.com> yyyy.mm.dd.versi (misalnya: 2013.09.07.1)

Fungsi program (misalnya: Menuliskan kalimat "Hello world!" ke dalam suatu file teks

(4)

Compile: g++ writehello.cpp -o writehello Run: ./writehello */ #include <iostream> #include <fstream> using namespace std;

int main(int argc, char *argv[]) { // Filename

char filename[] = "hello.txt"; // Output file stream

ofstream fout;

// Open an output file stream with certain filename fout.open(filename);

// Write to the output file stream fout << "Hello world!" << endl; // Close the file stream

fout.close();

// Return state of the program return 0;

}

Tugas 3. Jelaskan dalam laporan.txt apa yang dihasilkan oleh program writehello.cpp dan apa isinya.

4

Menulis berkas teks dengan argumen program

Dalam kode di bawah ini, program sebelumnya dimodifikasi sehingga nama berkas keluaran menjadi lebih fleksibel. Salin, kompilasi, dan jalankan seba-gaimana petunjuk di dalamnya.

/*

writehelloarg.cpp

Sparisoma Viridi <dudung@gmail.com> 2013.09.07.1

Menuliskan kalimat "Hello world!" ke dalam suatu file teks di mana nama keluaran diberikan melalui argumen

(5)

program

Compile: g++ writehelloarg.cpp -o writehelloarg Run: ./writehello */ #include <iostream> #include <fstream> #include <string.h> using namespace std;

int main(int argc, char *argv[]) { // Default Filename

char filename[] = "hello.txt";

// Change default name if output filename is provided if(argc > 1) {

strcpy(filename, argv[1]); }

// Output file stream ofstream fout;

// Open an output file stream with certain filename fout.open(filename);

// Write to the output file stream fout << "Hello world!" << endl; // Close the file stream

fout.close();

// Return state of the program return 0;

}

Tugas 4. Jelaskan dalam laporan.txt apa yang perbedaan dari menjalan perintah writehelloarg dengan kedua cara berikut ini

./writehelloarg dan

(6)

5

Menuliskan banyak kata tanpa dapat diedit

Salin, kompilasi, dan jalankan kode berikut ini seperti petunjuk dalam keteran-gan programnya.

/*

writewords.cpp 20130907.01

Sparisoma Viridi <dudung@gmail.com>

Write some words for some lines, terminate the program by providing ’x’ charater then press enter

Compile: g++ writewords.cpp -o writewords Run: ./writewords */ #include <iostream> #include <fstream> #include <string> #include <stdio.h> using namespace std;

int main(int argc, char *argv[]) { bool NO_FILENAME = true; bool EXIT = false; string filename; string word; string line;

cout << "Output filename = "; cin >> filename;

ofstream fout;

fout.open(filename.c_str()); cout << endl;

cout << "Type x <enter> to exit" << endl; cout << endl;

if(fout.is_open()) { int i = 0;

bool FIRST_TIME = true; while(!EXIT) {

char ch = getchar(); if(ch == ’x’) {

(7)

} else {

// Avoid extra blank line in output file if(!FIRST_TIME) { fout << ch; fout << flush; } } FIRST_TIME = false; } fout.close(); } else { cout << "Error: ";

cout << filename << " can not be opened."; cout << endl;

}

return 0; }

Tugas 5. Jalankan writewords, kemudian saat diminta Output filename =

masukkan mywords.txt, tekan enter, dan ketikkan kata-kata atau kalimat apa saja. Untuk menghakhiri suatu baris kalimat gunakan tombol enter. Un-tuk mengakhiri mode masukan, ketikkan 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 (dengan menyalin baris-baris perintah C++ terkait) yang merupakan bagian terminasi program yang menggunakan karakter x tersebut. Ketik jawaban Anda dalam berkas laporan.txt.

6

Menuliskan pasangan data x dan y

Salin, kompilasi, dan jalankan kode berikut ini seperti petunjuk dalam keteran-gan programnya.

/*

writexy.cpp 20130908.01

Sparisoma Viridi <dudung@gmail.com> Write pains of data x and y

(8)

Run: ./writexy [filename] */ #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> using namespace std;

int main(int argc, char *argv[]) { // Default output filename char ofn[] = "data-xy.txt"; if(argc > 1) {

// Change output filename if new name provided strcpy(ofn, argv[1]);

}

// Output file stream ofstream fout;

fout.open(ofn); if(fout.is_open()) {

// Header for readability fout << "#x\ty" << endl; // Generate data pairs x and y for(int i = 0; i <= 10; i++) { double x = (double) i; double y = (x - 3) * (x - 7); fout << x << "\t"; fout << y << endl; }

// Close file stream fout.close();

} else {

// Verbose message if output file can not be opened cout << "Error: " << ofn << " can not be opened."; cout << endl;

}

// Terminate the program return 0;

(9)

Tugas 6. Tuliskan hubungan antara x dan y dalam bentuk y = f (x) dalam berkas laporan.txt. Tuliskan pula nilai dari f (10), f (5), serta f (7). Perik-salah apakah isi dari berkas yang dihasilkan oleh perintah writexy sama seperti yang dicantumkan dalam kode program? Jelaskan jawaban Anda dalam berkas laporan.txt.

7

Membaca berkas teks

Salin, kompilasi, dan jalankan kode berikut ini seperti petunjuk dalam keteran-gan programnya.

/*

readfile.cpp 20130908.01

Sparisoma Viridi <dudung@gmail.com> Read a common text file

Compile: g++ readfile.cpp -o readfile Run: ./readfile filename

*/ #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> using namespace std;

int main(int argc, char *argv[]) { if(argc < 2) {

cout << "Usage: readfile filename" << endl; } else {

char *ifn = argv[1]; ifstream fin; fin.open(ifn); if(fin.is_open()) { string line; while(!fin.eof()) { getline(fin, line); cout << line << endl; }

fin.close(); } else {

cout << "readfile: ";

(10)

exit(1); }

}

return 0; }

Tugas 7. Jalankan perintah readfile dengan cara ./readfile

dan

./readfile data-xy.txt serta

./readfile data-xyz.txt

lalu laporkan hasil ketiganya dalam berkas laporan.txt.

8

Membaca berkas teks pasangan data x dan y

Salin, kompilasi, dan jalankan kode berikut ini seperti petunjuk dalam keteran-gan programnya.

/*

readxy.cpp 20130908.01

Sparisoma Viridi <dudung@gmail.com>

Read a common text file for data pairs x and y Compile: g++ readxy.cpp -o readxy

Run: ./readxy filename */ #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <sstream> using namespace std;

(11)

int main(int argc, char *argv[]) { // Reserve array

// Next time you should be able to define number of data // before reserve the array size

int N = 11; double x[N]; double y[N]; if(argc < 2) {

cout << "Usage: readxy filename" << endl; } else {

// Read input file char *ifn = argv[1]; ifstream fin; fin.open(ifn); if(fin.is_open()) { string line; int i = 0; while(!fin.eof()) { getline(fin, line);

// Skip the header line that begins with ’#’ if(line[0] != ’#’) { stringstream ss; ss << line << endl; ss >> x[i]; ss >> y[i]; i++; } } fin.close(); } else { cout << "readfile: ";

cout << ifn << " can not be opened" << endl; exit(1);

}

// Display reading results for(int i = 0; i < N; i++) {

cout << x[i] << "\t"; cout << y[i] << endl; }

}

(12)

}

Tugas 8. Jalankan perintah readxy dengan cara ./readxy data-xy.txt

lalu laporan hasilnya dalam berkas laporan.txt. Apa perbedaan program readxy.cpp dengan readfile.cpp? Jelaskan pula dalam laporan.txt.

9

Membaca dan menulis berkas data x dan y

Salin, kompilasi, dan jalankan kode berikut ini seperti petunjuk dalam keteran-gan programnya.

/*

absxy.cpp 20130908.01

Sparisoma Viridi <dudung@gmail.com>

Read a common text file for data pairs x and y and calculate its absolute value and write the results into other file

Compile: g++ absxy.cpp -o absxy Run: ./absxy input output */ #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <sstream> using namespace std;

int main(int argc, char *argv[]) { // Reserve array

// Next time you should be able to define number of data // before reserve the array size

int N = 11; double x[N]; double y[N]; if(argc < 3) {

(13)

} else {

// Read input file char *ifn = argv[1]; ifstream fin; fin.open(ifn); if(fin.is_open()) { string line; int i = 0; while(!fin.eof()) { getline(fin, line);

// Skip the header line that begins with ’#’ if(line[0] != ’#’) { stringstream ss; ss << line << endl; ss >> x[i]; ss >> y[i]; i++; } } fin.close(); } else { cout << "readfile: ";

cout << ifn << " can not be opened" << endl; exit(1);

}

// Calculate absolute value for(int i = 0; i < N; i++) {

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

// Open output file char *ofn = argv[2]; ofstream fout; fout.open(ofn); if(fout.is_open()) {

// Write the results fout << "#x\ty" << endl; for(int i = 0; i < N; i++) {

fout << x[i] << "\t"; fout << y[i] << endl; }

fout.close(); } else {

(14)

cout << ofn << " can not be opened" << endl; exit(1); } } return 0; }

Tugas 9. Jalankan perintah-perintah berikut ini ./writexy data-xy-org.txt

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

Jelaskan hasilnya dalam laporan.txt mengenai perbedaan dari isi berkas data-xy-org.txt dan data-xy-abs.txt.

Gunakan perintah diff dengan cara berikut ini diff data-xy-org.txt data-xy-abs.txt dan jelaskan hasilnya dalam laporan.txt.

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 dan laporkan hasilnya dalam laporan.txt terutama tentang pasangan data x dan y untuk data originalnya dan setelah dihitung nilai absolutnya.

(15)

Keluaran praktikum

1. console-io.cpp, writehello.cpp, hello.txt, hello2.txt, mywords.txt, writexy.cpp, data-xy.txt, readfile.cpp, readxy.cpp, absxy.cpp. 2. laporan.txt yang berisikan jawaban dari Tugas 1, 2, 3, 4, 5, 6, 7, 8, 9,

10.

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. 1

(16)

Referensi

Dokumen terkait

Abstrak : Pengabdian dalam bentuk kegiatan kewirausahaan merupakan salah satu program yang dilaksanakan oleh Prodi Pendidikan Guru Sekolah Dasar (PGSD) kampus

Semua ini dilakukan dengan harapan hasil penelitian ini dapat menjadikan teknik katazome sebagai teknik inspirasi celup rintang, yang pada akhir penelitian ini

PERANCANGAN NOVEL GRAFIS TENTANG KILAS BALIK SEJARAH TIONG CIU PIA UNTUK MASYARAKAT ETNIS CHINA.. CAROLUS

Kepala BiroIBagianlBidang Kepegawaian instansi yang membawahi bidang kesehatan lingkungan bagi Sanitarian Pelaksana Pemula pangkat Pengatur Muda golongan ruang

Ekspor November hanya bertumbuh 5.4% dibandingkan pada November 2017, yang merupakan pencapaian terburuk semenjak kontraksi sebesar 3% pada Maret and 10% lebih rendah dari

Kota Muntilan sebagai kota kecil memiliki letak yang strategis karena terletak diantara dua Pusat Kegiatan Nasional (PKN) pada koridor Semarang-Yogyakarta Perkembangan fisik

Melalui hasil perhitungan yang telah dilakukan diperoleh hasil analisis melalui uji statistik parsial (Uji t) dapat diketahui bahwa variabel motivasi kerja (X1)

Percepatan oksidasi lemak pindang dengan asap cair pada hari ke-2 yakni 0,20 lebih rendah dibandingkan dengan pindang tanpa asap cair yakni 1.62 Produksi angka peroksida pada