[Daspro Shift02 Modul01 Margareta Vania Stephanie 10213076]

16
1 LAPORAN PRAKTIKUM MODUL 01: PENGENALAN PEMOGRAMAN C++ DI LINUX Mata Kuliah: FI2283 PEMOGRAMAN DAN SIMULASI FISIKA Nama : Margareta Vania Stephanie NIM : 10213076 Shift : 02 (Selasa, jam 09.00-11.00 WIB) Asisten : Nanda Tumangger Tanggal Praktikum : 2 September 2014

description

-

Transcript of [Daspro Shift02 Modul01 Margareta Vania Stephanie 10213076]

Page 1: [Daspro Shift02 Modul01 Margareta Vania Stephanie 10213076]

1

LAPORAN PRAKTIKUM

MODUL 01: PENGENALAN PEMOGRAMAN C++ DI LINUX

Mata Kuliah:

FI2283 PEMOGRAMAN DAN SIMULASI FISIKA

Nama : Margareta Vania Stephanie

NIM : 10213076

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

Asisten : Nanda Tumangger

Tanggal Praktikum : 2 September 2014

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

2

Bagian 1 : Program Pertama hello.cpp

Pada bagian ini, kami diminta mengetikkan kode untuk memunculkan teks Hello C++!.

Kodenya adalah sebagai berikut.

Program disave dengan nama hello.cpp. Setelah itu, program dikompilasi dengan cara:

g++ hello.cpp –o hello

Kemudian, program dijalankan dengan mengetikkan: ./hello . Maka akan muncul teks Hello

C++!

Berikut adalah potongan kompilasi dan output yang dihasilkan.

Tugas 1 : Modifikasi kode pada hello.cpp dan simpan dengan nama hello2.cpp

Berikut adalah kode dari program hello2.cpp

Setelah itu, ubah kompilasi agar menghasilkan keluaran: Selamat praktikum FI2283,

<Nama_Anda>.

Jadi, untuk menghasilkan keluaran tersebut maka kompilasi perlu diubah menjadi :

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

3

g++ hello2.cpp –o hello2

Pada nama program di atas, ada ekstensi .cpp pada nama file yang menunjukkan ekstensi dari

program C++.

Apa itu kompilasi dan g++?

Kompilasi adalah program untuk menerjemahkan kode program dalam bahasa pemograman

tertentu menjadi kode program,dalam bahasa pemograman lain. Dalam mata kuliah

Pemograman dan Simulasi Fisika ini, bahasa yang digunakan adalah C++ tetapi dalam

software Linux. Untuk bahasa C++, compiler yang digunakan adalah GNU C++. g++ adalah

kode kompilasi untuk menjalan program C++ di Linux.

Cara memanggil compiler GNU C++ adalah :

g++ <spasi> nama_file.cpp <spasi> -o <spasi> nama_file_kompilasi . Contohnya seperti

pada potongan kompilasi di gambar atas: g++ hello2.cpp –o hello2

Perintah di atas menunjukkan bahwa kita memerintahkan compiler GNU C++ untuk membuat

suatu file (nama_file_program) untuk memanggil program. Pada contoh di atas,

nama_file_program – nya adalah hello2. Kemudian, ./hello2 adalah argumen sebagai baris

perintah pemanggilan program.

Kemudian jalankan program dengan mengetikkan ./hello2

Hasil output yang keluar adalah Selamat praktikum FI2283, Margareta Vania Stephanie.

Berikut adalah ptongan kompilasi dan output yang keluar.

Bagian 2 : Arti Pilihan –o Saat Kompilasi Program

Program hello.cpp yang telah dibuat sebelumnya dikompilasi dengan cara yang berbeda yaitu:

g++ hello.cpp

Berkas yang muncul adalah a.out , yang merupakan nama_file_kompilasi yang dibuat

langsung jika pada kompilasi tidak disertakan –o .

Tugas 2 : Kompilasi program hello.cpp sehingga saat dijalankan, perintah yang harus diberikan

pada konsol adalah ./myhello

Caranya adalah kompilasi dengan g++ menjadi g++ hello.cpp –o myhello. Berikut adalah

potongan penggunaan kompilasi.

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

4

./myhello menunjukkan nama_file_kompilasi untuk pemanggilan program.

Mengapa harus menggunakan –o?

–o menunjukkan perintah untuk memberikan nama baru untuk nama_file dalam mengkompilasi

program. Jika tidak ada –o maka kasusnya akan seperti di atas, output yang dikeluarkan adalah

a.out .

Bagian 3 : Melewatkan Argumen Saat Program Dipanggil

Berikut adalah kode program yang disimpan dengan nama “nama1.cpp”.

Program harus dikompilasi sehingga dapat dipanggil dengan cara

./nama “Nama-Depan Nama-Belakang”

Caranya adalah dengan kompilasi: g++ nama1.cpp –o nama1 . Kemudian, program coba

panggil dengan ./nama1 “Margareta Stephanie” . Maka, output yang muncul adalah “Selamat

praktikum, Margareta Stephanie”.

Berikut adalah potongan kompilasi dan output yang dihasilkan.

Tugas 3 : Lakukan pemanggilan dengan menggunakan jumlah kata yang lebih banyak dengan

keseluruhan kalimat masih diapit oleh tanda petik ganda buka dan tutup.

Saya mencoba mengetikan tiga kata diapit tanda kutip kata yaitu “Margareta Vania Stephanie”.

Hasil yang keluar adalah “Selamat praktikum, Margareta Vania Stephanie”. Berikut adalah

potongan kompilasi dan output yang dihasilkan.

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

5

Ketiga kata yang diketikkan keluar sebagai output karena adanya potongan kode pada baris

program berikut :

if (argc > 1) {

cout << “Selamat praktikum, “;

cout << argv [1] << endl;

}

Baris program tersebut menjelaskan kondisi bahwa: Jika argumen lebih dari satu, maka

keluar “Selamat praktikum, <argumen_1> <argumen_2> …. <argumen_N>”. Masing-

masing kata yang diketikkan merupakan satu argumen. ./nama1 juga merupakan satu

argumen. Jadi, ketika saya mengetikkan ./nama1 “Margareta Vania Stephanie sebenarnya saya

mengetikkan 4 argumen. Ketika di proses, banyaknya argumen dicek terlebih dahulu. Jika

argumen lebih dari 1, maka akan masuk ke perintah cout untuk mengeluakan output “Selamat

praktikum, <argumen_1> <argumen_2> …. <argumen_N> “. Perlu diingat juga bahwa

meskipun ./nama1 termasuk hitungan jumlah argumen, tetapi tidak dikeluarkan dalam output

karena argumen vector-nya bernilai 0 (argv[0]). Argumen-argumen yang dikeluarkan adalah

argumen-argumen yang diketikkan setelah ./nama1 yaitu argumen_1 (argv[1]), argumen_2

(argv[2]), dst.

Bagaimana jika argumen hanya 1?

Jika argumen hanya ada 1, maka program tidak akan mengeluarkan output apapun Karena

pada baris program tidak memberi perintah apapun untuk kondisi argumen = 1. Misalkan saya

mengetikkan ./nama1 . Setelah saya tekan tombol enter, tidak ada output atau hasil yang

muncul karena ./nama1 adalah satu argumen.

Berikut adalah potongan memasukkan argumen = 1.

Bagian 4 : Peran Spasi pada Argumen Program

Tugas 4 : Kembali gunakan hasil kompilasi program nama1.cpp dan lakukan pemanggilan

dengan cara

./nama1 “Nama-Depan Nama-Belakang”

./nama1 Nama-Depan Nama-Belakang

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

6

Apa perbedaan output dari dua pemanggilan dia atas?

Berikut adalah potongan beberapa proses pemanggilan dan output yang dihasilkan.

Dari gambar di atas, kirta bisa tahu bahwa jika kita memberikan tanda petik ( “ ) pada argumen

– argumen yang diinputkan, maka semua argumen itu akan dikeluarkan dalam output seperti

pada contoh 1 dan 3. Tidak peduli berapa banyak argumen yang dimasukkan, asal banyaknya

argumen lebih besar dari satu, maka argumen-argumen dikeluarkan dalam output. Kita dapat

melihat bahwa jika argumen diberi tanda petik, maka semua argumen akan dikeluarkan pada

output. Akan tetapi jika tidak diberi petik, maka argumen yang terpakai hanya argumen ke-1,

yaitu argumen setelah ./nama

Jika argumen tidak diberi tanda petik, maka argumen yang dikeluarkan adalah argumen_1

(argv[1]) saja. Hal ini dikarenakan pada baris program, dinyatakan …. char * argv[] …argv

dapat dikatakan sebagai titik pointer sedangkan char (character) menunjukkan tipe dari argv.

Jadi char *argv artinya pointer argv bergerak sebanyak jumlah character yang tersedia.

Contohnya ./nama1 “Margareta Stephanie” menunjukkan bahwa kata-kata argumen dan

karakter lainnya yang diapit tanda petik merupakan tipe string/character. Maka, pada kode

kondisi if, setelah kata-kata “Selamat praktikum , dilanjut dengan argumen mulai dari karakter

1 (argv[1]) hingga karakter terkahir dalam tanda petik. Pada contoh 1, karakter 1 adalah M

(Margareta) dan karakter terakhirnya adalah “e” (Stephanie).

Sedangkan jika argumen tidak diberi tanda petik, maka argv hanya bergerak sebanyak karakter

saja. Contohnya pada ./nama1 Margareta Stephanie, argumen mulai bergerak dari karakter 1

yaitu “M” (Margareta) dan karakter terakhir adalah “a” (Margareta).

Mengapa berhenti di “Margareta”? Hal ini dikarenakan setelah “Margareta” adalah spasi dan

spasi bukan merupakan karakter. Jadi penggunaan tanda petik perlu diperhatikan sebaik

mungkin dalam memasukkan argumen pada output.

1

2

3

4

1

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

7

Bagian 5 : Menampilkan Semua Argumen Program

Berikut adalah kode program yang di-save dengan nama arg-list.cpp

Kemudian program dikompilasi dengan nama baru arg-list

Tugas 5 : Gunakan hasil kompilasi program arglist.cpp dan lakukan pemanggilan dengan cara

./arg-list

./arg-list “Selamat pagi”

./arg-list Selamat pagi

./arg-list 1 2 3 Apa kabar

Berikut adalah hasil dari pemanggilannya

Jadi, program di atas itu untuk membuat list dari pemanggilan yang dilakukan. Program di atas

bergantung pada kondisi penngulangan for.

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

8

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

cout << argv[i]<< endl;

int i=0 menunjukkan inisialisasi awal dengan pencacah i=0

i<argv adalah kondisi dimana pengulangan akan terus dilakukan dengan kondisi i lebih kecil

daripada jumlah argumen.

i++ adalah pencacah selanjutnya yaitu i = i +1.

Jika kita hanya melakukan pemanggilan ./arg-list maka hanya akan muncul ./arg-list saja

karena hanya ada satu argumen dan merupakan argv[0]. Ketika melakukan pemanggilan ./arg-

list “Selamat pagi”, maka akan keluar Selamat pagi karena i=0 mulai terhitung dari “S”

(Selamat) dan i terus bertambah hingga terakhir “i” (pagi).

Ketika melakukan pemanggilan ./arg-list Selamat pagi , maka akan muncul Selamat (enter)

pagi. Hal ini dikarenakan pertama, kata Selamat pagi tidak diberi kutip. i=0 mulai terhitung dari

“S” dan berakhir di “t” (selamat) dan pada kode perintah cout, stelah argv[i] berakhir, dilanjutkan

dengan enter dan mulai lagi dengan i=0 terhitung dari “p” (pagi) hingga “i”.

Begitu juga dengan ./arg-list 1 2 3 Apa Kabar, karena argument untuk pemanggilan tidak

dikutip maka akan keluar 1 (enter) 2 (enter) 3 (enter) Apa (enter) Kabar (enter).

Bagian 6 : Contoh Penggunaan Intruksi if

Berikut adalah kode program yang disimpan dengan nama ifnama.cpp

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

9

Tugas 6 : Eksekusi program yang telah dibuat dengan cara ./ifnama dan ulangi dengan cara

./ifnama Limana Kapau Nissa Munaakah

Fungsi dari program tersebut adalah mengeluarkan output “Selamat praktikum <argumen-

argumen>” dengan kondisi jika banyaknya argumen lebih dari dua. Jika jumlah argumen kurang

dari dua, maka output yang dihasilkan adalah “Tolong masukkan nama Anda”. Berikut adalah

hasil kompilasi dan output program.

Mengapa argumen yang tidak dberi petik (Limana Kapau Nissa Munaakah) dapat muncul

semua pada output? Padahal pada tugas 4, argumen yang tidak diberi petik hanya

menghasilkan satu kata saja (Margareta) pada output?

Kode program pada tugas 6 dan 4 berbeda. Pada tugas 6 ini, digunakan kondisi pengulangan

for.

for (int i=1; i<argc; i++) {

cout << argv[i] << “ “;

}

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

10

int i = 1 adalah inisialisasi pencacah, I mulai dihitung dari 1

i < argc adalah kondisi pengulangan. Pengulangan akan dilakukan selama i lebih kecil dari

jumlah argumen.

i++ adalah pencacah selanjutnya. I++ sama dengan i = i +1.

cout << argv[i] << “ “; artinya output yang dikeluarkan adalah argumen ke-i dan setelah

kondisi pengulangan tidak terpenuhi, maka akan dipisahkan dengan spasi dan dimulai lagi dari

argumen ke i=1.

Contoh pada pemanggilan di atas, argv mulai bergerak pada i=1 yaitu “L” (Limana), kemudian

terus bergerak hingga “a” (Limana). Setelah i habis diberi spasi, kemudian mulai lagi dari i =1

yaitu “K” (Kapau) dan berakhir di “u” (Kapau), kemudian diberi spasi dan begitu seterusnya

hingga sampai di kata “Munaakah”.

Bagian 7 : Program tambah.cpp

Program ini adalah program dengan katrol jumlah argumen dan informasi apa parameter yang

harus dilewatkan. Berikut adalah kode program yang di-save dengan nama tambah.cpp

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

11

Tugas 7 : Kompilasi kode tersebut menjadi perintah tambah dan jalankan dengan cara

./tambah 1 2 3 4 5

Program di atas memberikan kondisi jika jumlah argumen lebih dari dua, maka akan dilakukan

perhitungan tambah pada argumen-argumen tersebut. Pada pemanggilan kode di atas, ada 6

argumen tetapi argumen_1 (argv[1]) adalah 1 dan seterusnya sampai argumen_5 (argv[5] = 5).

sx adalah variable yang bisa berubah-ubah dengan nilai awal adalah 0. Atof adalah

mengkonversi tipe string/character menjadi bilangan bertipe double.

Kode diatas menggunakan kondisi pengulangan for dimana nilai sx ditambah argumen ke-i

yang sudah dikonversi menjadi bilangan. Tanda tambah akan muncul dengan kondisi selama i

< argc -1 . Artinya, jika saya memasukkan lima argument vector (argv[1] – argv[5]), maka akan

muncul tanda tambah sebanyak 4 kali di antara argument-argumen tersebut. Ketika sudah tidak

memenuhi kondisi lagi, (contoh, i=5 dan argc=5) maka output akan diakhiri dengan tanda sama

dengan (=).

Berikut adalah kompilasi dan output dari program.

Bagian 8 : Program add.cpp

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

12

Berikut adalah kode program yang disave dengan nama add.cpp

Tugas 8 : Bagaimana melakukan kompilasi program add.cpp dan jelaskan cara-cara

memanggil yang masih relevan dengan hasilnya.

Kompilasi program dilakukan dengan g++ add.cpp –o add . Program ini adalah program

menjumlahkan 2 nilai. Ketika kita memasukkan argumen ./add 1 2, maka output yang dihasilkan

langsung nilainya yaitu 3 (1+2 = 3). Program mengecek kondisi terlebih dahulu apakah

argumen yang diberikan lebih dari dua. Jika lebih dari dua, maka pertama-tama nilai argumen_1

(argv[1]) dan argumen_2 (argv[2]) dikonversi menjadi bilangan bertipe double dengan fungsi

atof menjadi variable x1 dan x2. Kemudian, x1 dan x2 dijumlahkan dan hasilnya menjadi nilai

dari variable sx (double sx = x1 + x2). Kemudian nilai sx dikeluarkan menjadi output.

Jika argumen kurang dari dua, maka output yang dikeluarkan adalah

Calculate sum of two integers

Usage: add i1 i2

Berikut adalah kompilasi dan output dari beberapa pemanggilan yang dilakukan.

Bagian 9 : Program subst.cpp

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

13

Tugas 9 : Modifikasi program add.cpp sehingga dapat menghitung selisih dua variable saat

dipanggil dari konsol dengan cara

./subst 100.3 40.2

Sehingga memberikan hasil 60.1

Berikut adalah kode program yang di-save dengan nama subst.cpp

Program di atas adalah kebalikan dari program pada tugas 8. Program ini mencari selisih dari

dua variabel. Selisih dua variable artinya nilai yang besar mengurangi nilai yang kecil. Nilai yang

besar bisa sebagai nilai x2, bisa juga sebagai x1. Maka pada program dibuat kondisi, jika x2 >

x1, maka selisihnya adalah x2 – x1 (double sx = x2 – x1). Akan tetapi , kondisi lainnya yaitu x1

> x2, maka selisihnya adalah x1 – x2 (double sx = x1 – x2).

Berikut adalah kompilasi dan output dari beberapa pemanggilan.

Bagian 10 : Perkenalan argumen dan pipe

Berikut adalah kode program yang disimpan dengan nama addintp.cpp

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

14

Setelah itu, program dikompilasi dengan g++ addintp.cpp –o .

Tugas 10 : Jalankan program tersebut dengan menggunakan dua buah bilangan seperti

berikut.

./addintp

./addintp 1 3

./addintp 1 3 | ./addintp 10

./addintp 1 3 | ./addintp 10 5

Jadi, program ini mempunyai fungsi untuk menjumlahkan dua buah bilangan atau 4 buah

bilangan. isatty berfungsi untuk menguji apakah file descriptor mengacu pada terminal. File

descriptor adalah indikator abstrak dalam mengakses file. Di program ini diketahui konstanta file

descriptornya adlah STDIN_FILENO yaitu bernilai 0 yaitu false. Jadi,

bool isPipe = !isatty(STDIN FILENO); artinya variabel isPipe yang bertipe boolean memiliki

nilai false.

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

15

bool isArgs = (argc > 1); artinya variabel isArgs bertipe integer dan bernilai true.

Program ini bergantung pada kondisi if. Pertama-tam diawali dengan

… If (isPipe && !isArgs) { cout << msg << endl;}….

Kedua kondisi isPipe dan !isArgs bernilai false, maka akan keluar pesan “Usage: [addintp i1

i2] | addintp i3 i4”

Kemudian,

…else if (!isPipe && isArgs) {

if (argc > 2) {

int i1 = atoi (argv[1]);

int i2 = atoi (argv[2]);

cout << i1 + i2 << endl;}

else { cout << msg << endl;}…

Artinya, ketika isPipe dan isArgs bernilai true, maka akan diadakan kembali pengecekan

dengan dua kondisi. Kondisi satu, jika jumlah argumen lebigh dari dua, maka nilai input i1 dan

i2 akan dikonversi dari tipe character menjadi bilangan bertipe integer. Kemudian, keluarlah

hasil perhitungan yaitu i1 + i2. Kondisi dua, jika argc kurang dari dua , maka akan keluar pesan

“Usage: [addintp i1 i2] | addintp i3 i4”

Kondisi lainnya,

…else if (isPipe && isArgs) {

If (argc > 2) {

Int i0;

cin >> i0;

int i1 = atoi (argv[1]);

int i2 = atoi (argv[2]);

cout << i0 +i1 + i2 << endl;}

else { cout<< msg << endl; }…

Jika isPipe false dan isArgs bernilai true, maka untuk kondisi pertama, argc lebih dari 2, maka

input nilai i0, konversi nilai i1 dan i2 menjadi bilangan bertipe integer. Kemudian output yang

dikeluarkan adalah penjumlahan dari i0 + i1 + i2. Kondisi kedua, jika argc kurang dari dua ,

maka akan keluar pesan “Usage: [addintp i1 i2] | addintp i3 i4”

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

16

Jadi, ketika saya melakukan pemanggilan ./addintp 1 3 , maka isArgs bernilai true (argc > 1)

dan !isPipe adlah true, maka nilai 1 dan 3 dikonversi menjadi integer dan hasil outputnya adalah

4 (1+3=4).

Ketika pemanggilan ./addintp 1 3 | ./addintp 10, output yang dihasilkan adalah variabel msg

yaitu “Usage: [addintp i1 i2] | addintp i3 i4” karena kurang lengkap, tidak ada nilai i4.

Pemanggilan ./addintp 1 3 | ./addintp 10 5 menghasilkan 19 karena asalnya dari

(1+3) + (10+5) = 4 + 15 = 19.

Berikut adalah kompilasi dan hasil pemanggilan – pemanggilan pada program.