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 beberapa 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
Ketiklah program berikut ini
39
/* swap.cpp 20130928.01301 Sparisoma Viridi
How to use swap function template Compile: g++ swap.cpp -o swap Execute: ./swap */ #include <string.h> #include #include 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 swap dan 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
Ketiklah program berikut ini 40
/* sort-selection.cpp 20130928.1527 Sparisoma Viridi 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 #include 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++; } } } 41
// Display sorted sequence 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 menghasilkan 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 efesien 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 ditandai 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();
42
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 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 43
#include <sys/timeb.h> 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>(t2 - t1); cout << "Time difference (s): " << dt.count() << endl; pada bagian akhir program. Jangan lupa tambahan pustaka berikut ini pada awal program #include #include #include Khusus untuk penggunaan pustaka chrono terdapat pada C++11, untuk itu cara melakukan kompilasi menjadi g++ difftime_us.cpp -std=c++11 -o difftime_us 44
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. Dengan 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.txt yang 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.txt yang 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.txt yang 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. 45
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.
46
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 1 Sparisoma
Viridi , .., 2013
47
.
48