P04 Mengurutkan Data dan Waktu Proses

Teks penuh

(1)

P04

| Mengurutkan Data dan Waktu Proses

Modul Praktikum FI2283 Pemrograman dan Simulasi Fisika

Versi 2013.09.28

Catatan. Simpan dan gunakan modul-modul praktikum sebelumnya karena be-berapa program akan merujuk pada program dalam modul sebelumnya. Dalam setiap praktikum umumnya terdapat berkas laporan.txt yang berisikan hasil pembahasan atau keluaran dari program yang dibuat.

1 Fungsi untuk menukar nilai 39

2 Mengurutkan data dalam array 40

3 Menghitung waktu suatu proses 42

4 Menghitung waktu suatu proses (lebih teliti) 43 5 Menghitung waktu suatu proses (lebih teliti lagi) 44 6 Mengurutkan data dari file dan waktunya (s) 45 7 Mengurutkan data dari file dan waktunya (ms) 45 8 Mengurutkan data dari file dan waktunya (µs) 45 9 Mengurutkan data dari file – modifikasi 46

10 Efesiensi algoritma mengurutkan 46

1

Fungsi untuk menukar nilai

(2)

swap.cpp 20130928.01301

Sparisoma Viridi <dudung@gmail.com> How to use swap function template Compile: g++ swap.cpp -o swap Execute: ./swap */ #include <string.h> #include <iostream> #include <fstream> using namespace std;

int main(int argc, char *argv[]) { double x = 1.23;

double y = -9.83;

cout << "Original content:" << endl; cout << "x = " << x << endl;

cout << "y = " << y << endl; swap(x, y);

cout << "Swapped content:" << endl; cout << "x = " << x << endl;

cout << "y = " << y << endl; return 0;

}

Tugas 1. Kompilasi program swap.cpp di atas sehingga menghasilkan perintah swapdan jalankan seperti pada keterangan dalam program tersebut. Laporkan hasilnya dalam berkas laporan.txt dan berikan penjelasan fungsi dari template fungsi C++ swap, serta termasuk ke dalam namespace apakah swap ini dan pustaka C++ apa? Apakah template fungsi swap ini dapat digunakan untuk jenis variabel lain seperti int, char, dan bool? Jelaskan pula dalam berkas laporan.txt.

2

Mengurutkan data dalam array

(3)

/*

sort-selection.cpp 20130928.1527

Sparisoma Viridi <dudung@gmail.com> Example of selection sort for array

Compile: g++ sort-selection.cpp -o sort-selection Execute: ./sort-selection

References:

Wikipedia contributors, ’Selection sort’, Wikipedia, The Free Encyclopedia, 26 September 2013, 16:46 UTC, oldid=574625978 [accessed 28 September 2013].

*/

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

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

// Define arrays of int and get its size

int data[] = {38, 29, 10, 54, 15, 31, 55, 17, 22, 11}; int N = sizeof(data) / sizeof(int);

// Display original sequence cout << "Original sequence: "; for(int i = 0; i < N; i++) { cout << data[i]; if(i < N - 1) { cout << " "; } else { cout << endl; } }

// Perform selection sort int k = 0; for(int j = 0; j < N - 1; j++) { for(int i = j + 1; i < N; i++) { if(data[i] < data[j]) { swap(data[i], data[j]); k++; } } }

(4)

cout << "Sorted sequence: "; for(int i = 0; i < N; i++) { cout << data[i]; if(i < N - 1) { cout << " "; } else { cout << endl; } }

// Display number of sub-processes and time difference cout << "Sub-process: " << k <<endl;

return 0; }

Tugas 2. Kompilasi program sort-selection.cpp di atas sehingga meng-hasilkan perintah sort-selection dan jalankan seperti pada keterangan dalam program tersebut. Laporkan hasilnya dalam berkas laporan.txt.

3

Menghitung waktu suatu proses

Ada kalanya diperlukan perhitungan waktu suatu proses yang dilakukan oleh program, sehingga dapat dikaji apakah algoritma yang digunakan telah efe-sien ataupun belum. Dalam potongan kode berikut ini digunakan fungsi C++ clock() untuk mengambil waktu sebelum dan sesudah suatu proses. Proses yang dimaksud di sini adalah bagian pengurutan data dalam array, yang di-tandai dengan komentar

// Perform selection sort

dalam kode pada tugas sebelumnya. Tambahkan bagian berikut ini sebelum proses tersebut

time_t t1 = clock();

dan bagian ini sesudah proses tersebut, time_t t2 = clock();

(5)

Lalu tampilkan hasilnya dengan potongan kode berikut ini // Calculate time difference and display it double dt = (double)((t2 - t1) / CLOCKS_PER_SEC); cout << "Time difference (s): " << dt << endl;

pada bagian akhir program. Jangan lupa tambahan pustaka berikut ini pada awal program

#include <ctime>

Tugas 3. Kompilasi program difftime s.cpp di atas sehingga menghasilkan perintah difftime s dan jalankan. Laporkan hasilnya dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan. Bahas bila selang waktunya tidak teramati. Jelaskan pula tengan struktur time t.

4

Menghitung waktu suatu proses (lebih teliti)

Lakukan langkah-langkah seperti dalam tugas sebelumnya dengan modifikasi yang lain.Tambahkan bagian berikut ini sebelum proses mengurutkan

timeb t1, t2; ftime(&t1);

dan bagian ini sesudah proses tersebut, ftime(&t2);

Lalu tampilkan hasilnya dengan potongan kode berikut ini // Calculate time difference and display it int c1 = t1.millitm + (t1.time & 0xfffff) * 1000; int c2 = t2.millitm + (t2.time & 0xfffff) * 1000; double dt = (c2 - c1);

dt = (dt < 0) ? dt += 0x100000 * 1000 : dt; dt = dt / 1000;

cout << "Time difference (s): " << dt << endl;

pada bagian akhir program. Jangan lupa tambahan pustaka berikut ini pada awal program

(6)

Tugas 4. Kompilasi program difftime ms.cpp di atas sehingga menghasilkan perintah difftime ms dan jalankan. Laporkan hasilnya dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan. Bahas bila selang waktunya tidak teramati. Jelaskan pula mengenai struktur timeb.

5

Menghitung waktu suatu proses (lebih teliti

lagi)

Lakukan langkah-langkah seperti dalam tugas sebelumnya dengan modifikasi yang lain.Tambahkan bagian berikut ini sebelum proses mengurutkan

using namespace std::chrono;

high_resolution_clock::time_point t1 = high_resolution_clock::now(); dan bagian ini sesudah proses tersebut,

high_resolution_clock::time_point t2 = high_resolution_clock::now();

Lalu tampilkan hasilnya dengan potongan kode berikut ini // Calculate time difference and display it

duration<double> dt = duration_cast<duration<double>>(t2 - t1); cout << "Time difference (s): " << dt.count() << endl;

pada bagian akhir program. Jangan lupa tambahan pustaka berikut ini pada awal program

#include <ctime> #include <ratio> #include <chrono>

Khusus untuk penggunaan pustaka chrono terdapat pada C++11, untuk itu cara melakukan kompilasi menjadi

(7)

Tugas 5. Kompilasi program difftime us.cpp di atas sehingga menghasilkan perintah difftime us dan jalankan. Laporkan hasilnya dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan. Jelaskan pula bagian mana dalam cara kompilasi yang menunjukkan bahwa kode ditulis untuk versi C++11. Den-gan melihat hasil tugas ini dan dua tugas sebelumnya, jelaskan berbedaan dan hasil yang diperoleh.

6

Mengurutkan data dari file dan waktunya (s)

Tugas 6. Modifikasi program difftime s.cpp agar dapat membaca berkas data.txtyang berisikan 1000 baris data bilangan riil, satu kolom saja, dengan header #x. Tanyakan pada asisten praktikum untuk berkas data ini. Urutkan data tersebut dan simpan dalam berkas keluaran data-out.txt. Simpan berkas program dengan nama difftime s file.cpp. Catat waktu yang diperlukan dan laporkan pengamatan Anda dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan.

7

Mengurutkan data dari file dan waktunya (ms)

Tugas 7. Modifikasi program difftime ms.cpp agar dapat membaca berkas data.txtyang berisikan 1000 baris data bilangan riil, satu kolom saja, dengan header #x. Tanyakan pada asisten praktikum untuk berkas data ini. Urutkan data tersebut dan simpan dalam berkas keluaran data-out.txt. Simpan berkas program dengan nama difftime ms file.cpp. Catat waktu yang diperlukan dan laporkan pengamatan Anda dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan.

8

Mengurutkan data dari file dan waktunya (µs)

Tugas 8. Modifikasi program difftime us.cpp agar dapat membaca berkas data.txtyang berisikan 1000 baris data bilangan riil, satu kolom saja, dengan header #x. Tanyakan pada asisten praktikum untuk berkas data ini. Urutkan data tersebut dan simpan dalam berkas keluaran data-out.txt. Simpan berkas program dengan nama difftime us file.cpp. Catat waktu yang diperlukan dan laporkan pengamatan Anda dalam berkas laporan.txt. Jelaskan berapa waktu yang diperlukan oleh proses tersebut dan kaitkan dengan kelajuan CPU komputer yang Anda gunakan.

(8)

9

Mengurutkan data dari file – modifikasi

Tugas 9. Modifikasi program untuk mengurutkan data dari berkas data.txt dan menuliskan hasilnya dalam data-out.txt yang telah ada sehingga proses mengurutkannya tidak lagi menggunakan algoritma selection sort.

Gunakan langkah-langkah berikut ini:

• periksa jumlah baris data (satu kolom) dari berkas data.txt, • pesan array sesuai jumlah data,

• tentukan nilai rata-rata dari data,

• pecah data menjadi dua kelompok, yaitu yang lebih kecil dan lebih besar dari nilai rata-rata,

• lakukan selection sort untuk kedua kelompok data tersebut, • gabungkan kedua data tersebut,

• tuliskan hasilnya ke dalam data-out.txt.

10

Efesiensi algoritma mengurutkan

Tugas 10. Bandingkan jumlah sub-proses dan waktu yang dibutuhkan untuk mengurutkan 10, 100, 1000, 10000, dan 100000 data antara algoritma selection sort dan modifikasinya. Buat grafik antara waktu dan jumlah data serta jumlah sub-proses dan jumlah data untuk kedua algoritma tersebut. Tanyakan kepada asisten tengan data-data masukan data-1E1.txt, data-1E2.txt, data-1E3.txt, data-1E4.txt, dan data-1E5.txt.

(9)

Keluaran praktikum

1. swap.cpp, sort-selection.cpp, difftime s.cpp, difftime ms.cpp, difftime us.cpp, difftime s file.cpp, difftime ms file.cpp, difftime us file.cpp, ,

dan .

2. laporan.txt yang berisikan jawaban dari Tugas 1, 2, 3, 4, 5, 6, 7, 8, dan .

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

(10)

Figur

Memperbarui...

Referensi

Memperbarui...

Related subjects :