Anda di halaman 1dari 20

PERTEMUAN II

( Array )

TUGAS PRAKTIKUM

Membuat program untuk menginisialisasikan 10 bilangan bulat kemudian hitung jumlah dan
rata

#include <iostream.h>
#include <conio.h>
using namespace std;
int main()
{
int Nilai[10] = {8, 12, 20, 15, 7, 5, 6, 4, 32, 3} ;
int i, Jumlah = 0;
float Rata_Rata;
//Menghitung jumlah
for (i=0 ; i <10 ; i++)
Jumlah += Nilai [ i ];
Rata_Rata =( float ) Jumlah / 10;
//Mencetak Elemen Array
cout<<"\n\nDeretan Bilangan = ";
for ( i=0;i<10;i++)
cout<<Nilai[i]<<" " ;
//Mencetak Harga Jumlah cout<<"\
nJumlah Bilangan ="<<Jumlah;
cout<<"\nRata-Rata Bilangan = "<<Rata_Rata;
getch ();
}
KESIMPULAN
Kesimpulan dari pembelajaran tentang array dapat disusun sebagai berikut:

1. **Efisiensi Penyimpanan Data:**


- Array menyediakan cara efisien untuk menyimpan dan mengakses sejumlah besar data
dengan menggunakan satu variabel.
- Penyimpanan data berurutan dalam memori membuat operasi akses elemen array menjadi
cepat.

2. **Manfaat Keberlanjutan:**
- Array memungkinkan pengelolaan sejumlah besar data dengan mudah, karena elemen-
elemen array dapat diakses dengan menggunakan indeks.
- Ini membuatnya efisien untuk melakukan operasi terhadap setiap elemen dalam array,
seperti iterasi atau pemrosesan data secara masal.

3. **Keterbatasan Ukuran Tetap:**


- Array memiliki ukuran tetap setelah deklarasi, yang dapat menjadi kendala jika Anda tidak
tahu seberapa besar array yang diperlukan sebelumnya.
- Dynamic arrays atau struktur data lain seperti linked list dapat digunakan untuk mengatasi
keterbatasan ini.

4. **Pentingnya Indeks:**
- Penanganan indeks dalam array sangat penting dan dapat berpengaruh pada keamanan dan
kebenaran program.
- Kesalahan dalam mengelola indeks dapat menyebabkan akses ke memori yang tidak valid
atau masalah lainnya.

6. **Pemahaman Algoritma dan Pengoptimalan:**


- Penggunaan array sering kali terlibat dalam algoritma dan pengoptimalan kode.
- Memahami cara menggunakan array dengan efisien dapat meningkatkan kinerja program
secara keseluruhan.

7. **Penerapan Struktur Data Lain:**


- Array sering digunakan sebagai dasar untuk struktur data lain, seperti stack, queue, dan
linked list.

- Pemahaman yang kuat tentang array dapat membantu dalam memahami dan
mengimplementasikan struktur data yang lebih kompleks.

8. **Kesadaran Alokasi Memori:**


- Dalam beberapa bahasa pemrograman, programmer bertanggung jawab untuk mengelola
alokasi dan dealokasi memori untuk array.
- Memahami konsep ini penting untuk mencegah kebocoran memori atau penggunaan
memori yang tidak aman.

9. **Pemecahan Masalah:**

- Kemampuan untuk menggunakan array secara efektif adalah keterampilan yang sangat
penting dalam pemrograman dan pemecahan masalah komputasional.
- Mengetahui kapan harus menggunakan array dan kapan menggunakan struktur data lain
merupakan bagian integral dari keahlian pengembangan perangkat lunak.

Dengan memahami konsep dan penerapan array, seorang pengembang dapat membuat
program yang lebih efisien, mudah dimengerti, dan dapat diandalkan dalam mengelola dan
memanipulasi data.
PERTEMUAN III
( STRUCTURE )

TUGAS PRAKTIKUM
Membuat program untuk membaca biodata yang diinput Nim, Nama, Alamat, dan Umur
kemudian cetak.
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
struct Mahasiswa
{
char Nim[9];
char Nama[25];
char Alamat[40];
short Umur;
};
main()
{
Mahasiswa Mhs;
cout << "Nim : ";
cin.getline(Mhs.Nim, 9);
cout << "Nama :";
cin.getline(Mhs.Nama, 25);
cout << "Alamat :";
cin.getline(Mhs.Alamat, 40);
cout << "Umur : ";
cin >> Mhs.Umur;
cout << "\n\n\nNim : " << Mhs.Nim;
cout << "\nNama : " << Mhs.Nama;
cout << "\nAlamat : " << Mhs.Alamat;
cout << "\nUmur : " << Mhs.Umur;
getch();
}
KESIMPULAN
Berikut adalah beberapa kesimpulan dari pembelajaran tentang struktur data, khususnya
struktur data bertipe "structure":

1. **Organisasi Data yang Lebih Kompleks:**


- Struktur data, termasuk struktur data bertipe "structure," memungkinkan untuk
mengorganisir dan menyimpan data dengan cara yang lebih kompleks daripada tipe data dasar.
- Dengan menggunakan struktur, Anda dapat mengelompokkan data yang terkait ke dalam
satu unit yang lebih besar.

2. **Keterbacaan Kode yang Meningkat:**


- Penggunaan struktur dapat meningkatkan keterbacaan kode karena memungkinkan Anda
untuk mendefinisikan hubungan dan keterkaitan antara elemen data.
- Nama-nama anggota struktur dapat memberikan konteks yang lebih baik daripada sekadar
menggunakan variabel terpisah.

3. **Fleksibilitas dalam Representasi Data:**


- Struktur memungkinkan representasi data yang lebih fleksibel dan kontekstual. Anda dapat
menyusun data dalam satu struktur untuk mencerminkan hubungan alami antara elemen-
elemen tersebut.

4. **Penghematan Memori:**
- Dengan menggunakan struktur, Anda dapat menghindari membuat banyak variabel terpisah
dan sebaliknya menggunakan satu struktur yang menyatukan data terkait.
- Hal ini dapat menghemat memori dan memudahkan manajemen data.

5. **Mempermudah Pemeliharaan Kode:**


- Struktur memudahkan pemeliharaan kode karena jika struktur data berubah, perubahan
hanya perlu dilakukan di satu tempat (definisi struktur), bukan di seluruh kode yang
menggunakan data tersebut.

6. **Implementasi Struktur Data Lain:**


- Struktur data yang lebih kompleks, seperti linked list atau tree, seringkali dapat
diimplementasikan menggunakan struktur dasar, seperti struct, sebagai elemen dasarnya.
- Struktur memberikan fondasi untuk memahami dan mengimplementasikan struktur data
yang lebih kompleks.

7. **Kemampuan Pengelompokan Logis:**


- Struktur memungkinkan pengelompokan logis data, membantu memodelkan objek-objek
dalam dunia nyata secara lebih akurat.
- Hal ini mendukung paradigma pemrograman berorientasi objek dan konsep-konsep desain
berbasis objek.

8. **Pembatasan dan Keamanan Akses:**


- Struktur dapat memberikan pembatasan akses data dengan mengubah tingkat
keberlanjutan variabel dan memberikan kontrol yang lebih baik terhadap bagaimana data
digunakan.

9. **Kemudahan Pengiriman Data ke Fungsi:**


- Struktur memudahkan pengiriman sejumlah besar data ke fungsi, karena data terkait dapat
diorganisir dalam satu struktur dan kemudian dikirim sebagai satu parameter.

10. **Pentingnya Penanganan Eksplisit:**


- Penggunaan struktur memerlukan pemahaman yang lebih baik tentang struktur data dan
penanganan eksplisit terhadap elemen-elemen data.
- Kesalahan dalam pemahaman atau penanganan dapat menyebabkan masalah logika dan
keamanan dalam program.
Dengan memahami dan menggunakan struktur data dengan baik, seorang pengembang dapat
meningkatkan efisiensi dan efektivitas kode, memudahkan pemeliharaan, dan menciptakan
program yang lebih skalabel dan mudah dimengerti.

PERTEMUAN IV
( POINTER )

TUGAS PRAKTIKUM
Membuat program untuk menyimpan nilai pada suatu Alamat menggunakan operator
Deference.
#include<iostream.h>
#include<conio.h>
main ()
{
int x=8, y;
int *xPtr;
xPtr = &x;
cout<<"Nilai x = "<< x <<endl ;
cout<<"Alamat x = "<<&x<<endl ;
cout<<"Alamat x = "<<xPtr<<endl ;
cout<<"Nilai yang disimpan pada alamat " ;
cout<<xPtr<<" adalah "<< *xPtr;
getch ();
}

KESIMPULAN
Berikut adalah beberapa kesimpulan yang dapat diambil dari pembelajaran tentang pointer:

1. **Manipulasi Alamat Memori:**


- Pointer memungkinkan penggunaan dan manipulasi alamat memori langsung.
- Dengan pointer, Anda dapat mengakses dan mengubah nilai di lokasi memori tertentu.
2. **Efisiensi Penggunaan Memori:**
- Penggunaan pointer dapat meningkatkan efisiensi penggunaan memori dengan
memungkinkan referensi langsung ke alamat memori daripada mengcopy nilai data.
- Menggunakan pointer dapat mengurangi overhead memori dalam beberapa situasi.

3. **Pengembangan Array dan String:**


- Pointer sering digunakan untuk memanipulasi array dan string.
- Dengan pointer, Anda dapat beroperasi pada elemen-elemen array dan karakter string tanpa
harus mengakses setiap elemen secara eksplisit.

4. **Dynamic Memory Allocation:**

- Pointer memainkan peran krusial dalam alokasi memori dinamis menggunakan fungsi seperti
`malloc()` dan `free()`.

- Dynamic memory allocation memungkinkan penggunaan memori yang fleksibel dan dapat
disesuaikan selama runtime.

5. **Referensi ke Fungsi:**
- Pointer dapat digunakan untuk membuat referensi ke fungsi, memungkinkan penggunaan
fungsi sebagai argumen untuk fungsi lain atau penyimpanan dalam struktur data.

6. **Pengembangan Struktur Data:**

- Pointers digunakan dalam pengembangan struktur data yang kompleks seperti linked lists,
trees, dan graph.
- Mereka memungkinkan hubungan dan pengelolaan data yang dinamis dan fleksibel.

7. **Pass by Reference:**
- Penggunaan pointer memungkinkan fungsi untuk menerima parameter dengan "pass by
reference," di mana perubahan pada parameter akan terlihat di luar fungsi tersebut.
8. **Pentingnya Inisialisasi:**
- Inisialisasi pointer adalah langkah yang penting untuk menghindari penggunaan pointer yang
tidak valid.
- Pointer yang tidak diinisialisasi atau yang menunjuk ke alamat yang tidak valid dapat
menyebabkan perilaku program yang tidak terduga.

9. **Keamanan dan Ketelitian:**


- Penggunaan pointer memerlukan kehati-hatian dan ketelitian tinggi.
- Kesalahan dalam manipulasi pointer dapat menyebabkan masalah keamanan, seperti
undefined behavior atau memory leaks.

10. **Pemahaman Alamat dan Referensi:**


- Pemahaman alamat dan referensi sangat penting dalam bekerja dengan pointer.

- Kemampuan untuk melacak alamat memori dan mengerti bagaimana pointer bekerja
membantu dalam mencegah dan menyelesaikan masalah dalam kode.

Pemahaman yang kuat tentang pointer memungkinkan pengembang untuk


mengoptimalkan penggunaan memori, meningkatkan efisiensi program, dan bekerja dengan
struktur data yang lebih kompleks dan dinamis. Namun, penggunaan pointer juga memerlukan
hati-hati agar menghindari kesalahan yang dapat menyebabkan masalah yang sulit dideteksi.
PERTEMUAN V
( FUNCTION )

TUGAS PRAKTIKUM
Buatlah program fungsi dengan call by value.

#include<iostream.h>
#include<conio.h>
void Tukar ( int a, int b);
main()
{
int a=8, b=-5;
cout<<"Nilai a dan b sebelumnya : "<<a<<" & "<<b;
Tukar (a, b);
cout<<"\nNilai a dan b Setelah ditukar : "<<a<<" & "<<b;
getch();
}
void Tukar (int x, int y)
{
int z ;
z = x ;
x = y ;
y=z;
}

KESIMPULAN
Berikut adalah beberapa kesimpulan yang dapat diambil dari pembelajaran tentang fungsi
(function):

1. **Struktur Modular:**
- Fungsi memungkinkan struktur modular dalam kode, memecah program menjadi bagian-
bagian yang lebih kecil dan lebih terkelola.
- Ini meningkatkan keterbacaan dan pemeliharaan kode.
2. **Reusabilitas Kode:**
- Fungsi memungkinkan reusabilitas kode. Satu fungsi dapat dipanggil dari berbagai bagian
program atau bahkan dari program-program lain.

3. **Pengurangan Redundansi:**
- Penggunaan fungsi dapat mengurangi redundansi dalam kode, karena logika atau tugas
tertentu dapat dikapsulasi dalam sebuah fungsi dan dipanggil ulang jika diperlukan.

4. **Pembagian Tugas:**
- Fungsi memungkinkan pembagian tugas dalam pengembangan perangkat lunak. Tim dapat
bekerja secara terpisah pada fungsi-fungsi tertentu tanpa harus memahami keseluruhan
program.

5. **Parameter dan Return Value:**

- Fungsi dapat menerima parameter sebagai input dan mengembalikan nilai sebagai output.
- Ini memungkinkan fungsi beradaptasi dengan data yang berbeda dan memberikan hasil yang
dapat digunakan di tempat lain dalam program.

6. **Kejelasan Nama dan Dokumentasi:**


- Memberikan nama yang jelas pada fungsi dapat meningkatkan kejelasan dan pemahaman
terhadap tujuan dan fungsionalitas kode.
- Dokumentasi yang baik pada fungsi juga dapat membantu penggunaan yang efektif.

7. **Pemahaman Alur Eksekusi:**


- Fungsi memungkinkan pemisahan dan penyederhanaan alur eksekusi program. Setiap fungsi
dapat berkonsentrasi pada satu tugas atau tujuan tertentu.
8. **Fleksibilitas dan Polimorfisme:**
- Fungsi memungkinkan fleksibilitas dalam pemrograman, dan polimorfisme dapat
diimplementasikan melalui konsep overloading dan overriding fungsi.

9. **Handling Errors:**

- Fungsi memungkinkan penanganan kesalahan yang lebih efisien. Kesalahan dalam fungsi
tertentu dapat ditangani di tingkat fungsi itu sendiri atau di tingkat pemanggil.

10. **Lambda dan Anonymous Functions:**


- Beberapa bahasa pemrograman mendukung fungsi anonim atau lambda, yang
memungkinkan pembuatan fungsi kecil tanpa harus mendefinisikan fungsi secara terpisah.

11. **Callback dan High Order Functions:**

- Fungsi dapat digunakan sebagai argumen untuk fungsi lain atau dapat dikembalikan sebagai
nilai (callback dan high order functions).
- Ini memungkinkan pengembangan paradigma pemrograman berorientasi fungsional.

Pemahaman yang kuat tentang konsep fungsi sangat penting dalam pengembangan perangkat
lunak karena fungsi memainkan peran kunci dalam menyusun program secara modular dan
dapat diandalkan. Kemampuan untuk merancang dan mengimplementasikan fungsi dengan
baik meningkatkan efisiensi dan pemeliharaan program secara keseluruhan.
PERTEMUAN VI
( SEARCHING )

TUGAS PRAKTIKUM

Membuat program Sequential Search


#include<iostream.h>
#include<conio.h>
main()
{
int Nilai [20];
int Posisi [ 20 ];
int i, N, Bilangan, Banyak= 0;
bool Ketemu;
cout<<"Masukan Banyaknya Bilangan =
"; cin>>N;
//Membaca elemen Array
for(i=0; i<N; i ++)
{
cout<<"Masukan elemen ke-"<<i<<" = ";
cin>>Nilai [ i ];
//Mencetak elemen array cout<<"\
n\nDeretan Bilangan ="; for(i=0;
i<N; i++)
cout<<Nilai [ i ]<<" ";
cout<<"\n\nMasukan Bilangan yang akan dicari = ";
cin>>Bilangan ;
//melakukan pencarian
i=0;
do
{
if(Nilai [ i ]==Bilangan)
angka = Nilai [i];
i++;
}
while (i<N);
if (angka==Bilangan)
cout<<"Bilangan "<<Bilangan <<" ditemukan
"; else
cout<<"Bilangan "<<Bilangan<<" tidak ditemukan ";
getch ();
}
KESIMPULAN
Berikut adalah beberapa kesimpulan yang dapat diambil dari pembelajaran tentang pencarian
(searching) :

1. **Efisiensi Algoritma Pencarian:**

- Pembelajaran tentang algoritma pencarian memperkenalkan berbagai metode, seperti


linear search dan binary search.
- Memahami efisiensi dan kinerja algoritma pencarian membantu dalam memilih
metode yang tepat untuk kondisi tertentu.

2. **Keterkaitan dengan Struktur Data:**


- Algoritma pencarian sering terkait erat dengan struktur data tempat data disimpan,
seperti array atau struktur data yang lebih kompleks.
- Pemahaman tentang bagaimana data diorganisir sangat penting dalam memilih
algoritma pencarian yang sesuai.

3. **Keamanan dan Keberlanjutan:**


- Pemrograman C++ menyediakan beberapa fungsi pencarian bawaan, seperti `std::find()`.
- Memahami cara menggunakan fungsi pencarian ini dengan aman dan efektif
dapat meningkatkan keberlanjutan dan keamanan kode.

4. **Pentingnya Pengurutan:**
- Beberapa algoritma pencarian, seperti binary search, memerlukan data yang terurut.

- Pengurutan data sebelum melakukan pencarian dapat meningkatkan efisiensi dan


akurasi algoritma.

5. **Penanganan Kasus Khusus:**


- Beberapa algoritma pencarian dapat dioptimalkan untuk menangani kasus khusus,
seperti data yang hampir terurut atau data yang memiliki pola tertentu.
6. **Pencarian dalam Konteks Pengembangan Aplikasi:**
- Pencarian sering digunakan dalam pengembangan aplikasi untuk menemukan
elemen tertentu, data, atau informasi yang diperlukan.
- Memahami cara mengimplementasikan pencarian dengan benar dapat
meningkatkan kinerja dan fungsionalitas aplikasi.

7. **Pentingnya Pengujian dan Pengoptimalan:**


- Proses pengujian sangat penting untuk memastikan kebenaran dan kinerja
algoritma pencarian.
- Pengoptimalan dapat diperlukan terutama jika pencarian dilakukan pada sejumlah
besar data.

8. **Pemahaman Konsep Time Complexity:**


- Pemahaman konsep time complexity membantu dalam membandingkan kinerja
algoritma pencarian dan memilih yang paling sesuai untuk situasi tertentu.

9. **Penerapan pada Berbagai Tipe Data:**


- Algoritma pencarian dapat diterapkan pada berbagai tipe data, termasuk tipe data
primitif dan tipe data yang lebih kompleks seperti objek atau struktur.

10. **Keselarasan dengan Tugas Spesifik:**


- Pemilihan algoritma pencarian sebaiknya disesuaikan dengan tugas dan kebutuhan
spesifik program yang dikembangkan.

Pemahaman yang baik tentang pencarian dalam pemrograman C++ adalah keterampilan yang
krusial, karena pencarian adalah operasi umum yang digunakan dalam berbagai konteks dan
aplikasi. Pemilihan algoritma pencarian yang sesuai dapat signifikan memengaruhi kinerja dan
efisiensi program.
PERTEMUAN VII
( SORTING )

TUGAS PRAKTIKUM
Membuat program Pengurutan dengan Metode Bubble Sort “Pengurutan secara menaik”

#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
main ( )
{
int Nilai [ 20 ];
int i, j, k ,N ;
int temp ;
bool tukar ;
cout<<"Masukan Banyak Bilangan :
"; cin>>N;
for (i=0; i<N; i++)
{
cout<<"Elemen ke-"<<i<<" : ";
cin>>Nilai [ i ];
}
//Proses Cetak Sebelum diurutkan
cout<<"\nData sebelumnya diurut :";
for (i=0; i<N ; i++)
cout<<setw ( 3 )<<Nilai [ i ];
//Proses Pengurutan
i=0;
tukar = true;
while ((i<=N-2) && (tukar))
{
tukar=false;
for (j=N-1; j>=i+1; j--)
{
if( Nilai [ j ] < Nilai [ j-1 ] )
{
temp = Nilai [ j ];
Nilai [ j ] = Nilai [ j-
1]; Nilai [ j-1 ] = temp;
tukar = true;
cout<<"\nUntuk j = "<<j<<" : ";
for (k=0; k<N; k++)
cout<<setw(3)<<Nilai [ k ] ;
}
} i++
;
}
//Proses Cetak setelah diurutkan
cout<<"\nData setelah di urut : ";
for (i=0; i<N; i++ )
cout<<setw ( 3 )<<Nilai [ i ] ;
getch () ;
}

KESIMPULAN
Berikut adalah beberapa kesimpulan yang dapat diambil dari pembelajaran tentang pengurutan
(sorting) dalam pemrograman:

1. **Pentingnya Algoritma Pengurutan:**


- Pembelajaran tentang algoritma pengurutan mengungkapkan pentingnya memahami
dan memilih algoritma yang sesuai untuk kondisi dan tipe data tertentu.

2. **Perbandingan Efisiensi Algoritma:**


- Terdapat berbagai algoritma pengurutan dengan tingkat efisiensi yang berbeda.
- Memahami perbedaan antara algoritma seperti bubble sort, quicksort, mergesort,
dan lainnya membantu dalam memilih yang paling sesuai untuk kebutuhan spesifik.

3. **Pentingnya Struktur Data:**


- Algoritma pengurutan dapat dikaitkan dengan berbagai struktur data, seperti array,
linked list, dan tree.

- Pemahaman tentang struktur data tempat data disimpan memengaruhi pilihan


algoritma pengurutan.
4. **Pengurutan dalam Konteks Pengembangan Aplikasi:**
- Pengurutan sering kali diperlukan dalam pengembangan aplikasi untuk menyajikan
data secara terstruktur atau untuk meningkatkan efisiensi pencarian.

5. **Metode Pengurutan Stabil dan Tidak Stabil:**

- Beberapa algoritma pengurutan dapat mempertahankan urutan relatif dari elemen-elemen


yang memiliki nilai yang sama (stabil), sementara yang lain mungkin tidak (tidak stabil).

6. **Penanganan Data Terbatas atau Besar:**


- Algoritma pengurutan dapat berkinerja berbeda tergantung pada jumlah data
yang diurutkan.
- Beberapa algoritma lebih cocok untuk jumlah data yang besar, sementara yang lain
lebih efisien untuk jumlah data yang terbatas.

7. **Keamanan dan Kestabilan:**

- Beberapa algoritma pengurutan memerlukan lebih banyak operasi pembanding


daripada yang lain, dan ini dapat memengaruhi keamanan dan stabilitas algoritma.

8. **Pentingnya Pengujian:**
- Pengujian algoritma pengurutan sangat penting untuk memastikan kebenaran dan
kinerja algoritma dalam berbagai situasi.

9. **Penanganan Kasus Khusus:**

- Beberapa algoritma pengurutan dapat dioptimalkan untuk menangani kasus khusus,


seperti data yang hampir terurut atau data yang memiliki pola tertentu.

10. **Keterkaitan dengan Konsep Time Complexity:**


- Pembelajaran tentang pengurutan sering melibatkan pemahaman konsep time
complexity, yang merupakan kunci dalam memilih algoritma yang sesuai untuk kondisi
tertentu.
11. **Penerapan pada Tipe Data Berbeda:**
- Algoritma pengurutan dapat diterapkan pada berbagai tipe data, termasuk tipe data
primitif dan tipe data yang lebih kompleks seperti objek atau struktur.

Pemahaman yang mendalam tentang algoritma pengurutan dan pemilihan algoritma yang
tepat sangat penting dalam pengembangan perangkat lunak. Pengurutan efisien dapat
meningkatkan kinerja program secara keseluruhan dan memberikan pengalaman pengguna
yang lebih baik.
LAPORAN AWAL
STRUKTUR DATA
LAPORAN KE- 1

Disusun Oleh :
Nama : Bagus Sadewa
NIM 181011450198
Kelas : 04TPLE004

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS ILMU KOMPUTER
UNIVERSITAS PAMULANG
PAMULANG
2023

Anda mungkin juga menyukai