Praktikum 4 (Pemrograman Berorientasi Objek)
A. Menerapkan prinsip-prinsip pemrograman
1. Mengimplementasikan Konsep Kelas dan Objek.
Buatlah kelas "Mahasiswa" yang memiliki atribut nama, nim, dan nilai. Program ini harus
mampu membuat objek Mahasiswa, mengisi nilai atribut, dan mencetak atribut Mahasiswa
tersebut.
mampu membuat objek Mahasiswa, mengisi nilai atribut, dan mencetak atribut Mahasiswa
tersebut.
- Ketikkan Coding Di Bawah Ini
#include <stdio.h>
// Deklarasi kelas Mahasiswa
typedef struct {
char nama[50];
int nim;
float nilai;
} Mahasiswa;
int main() {
// Membuat objek Mahasiswa
Mahasiswa mhs;
// Mengisi nilai atribut Mahasiswa
printf("Masukkan Nama: ");
gets(mhs.nama);
printf("Masukkan NIM: ");
scanf("%d", &mhs.nim);
printf("Masukkan nilai: ");
scanf("%f", &mhs.nilai);
// Mencetak atribut Mahasiswa
printf("Nama: %s\n", mhs.nama);
printf("NIM: %d\n", mhs.nim);
printf("Nilai: %.2f\n", mhs.nilai);
return 0;
}
- Hasil Coding
2. Mengimplementasikan Hubungan Pewarisan Antara Dua Kelas.
Buatlah kelas "Hewan" sebagai kelas induk dan kelas "Kucing" sebagai kelas
anak. Kelas Hewan memiliki atribut nama dan metode "berbicara()", sedangkan kelas Kucing
memiliki atribut "ras" dan mengoverride metode "berbicara()". Program ini harus mampu
membuat objek Kucing, mengisi nilai atribut, dan memanggil metode "berbicara()" untuk
objek Kucing tersebut.
anak. Kelas Hewan memiliki atribut nama dan metode "berbicara()", sedangkan kelas Kucing
memiliki atribut "ras" dan mengoverride metode "berbicara()". Program ini harus mampu
membuat objek Kucing, mengisi nilai atribut, dan memanggil metode "berbicara()" untuk
objek Kucing tersebut.
- Ketikkan Coding Di Bawah Ini
#include <stdio.h>
// Deklarasi kelas Hewan
typedef struct {
char nama[50];
} Hewan;
// Deklarasi kelas Kucing sebagai turunan dari Hewan
typedef struct {
Hewan hewan;
char ras[50];
} Kucing;
// Metode "berbicara()" untuk kelas Hewan
void berbicaraHewan() {
printf("Hewan berbicara!\n");
}
// Metode "berbicara()" untuk kelas Kucing (override)
void berbicaraKucing() {
printf("Meow!\n");
}
int main() {
// Membuat objek Kucing
Kucing kucing;
// Mengisi nilai atribut
printf("Masukkan nama kucing: ");
gets(kucing.hewan.nama);
printf("Masukkan ras kucing: ");
gets(kucing.ras);
// Memanggil metode "berbicara()"
berbicaraHewan(); // Memanggil metode dari kelas Hewan
berbicaraKucing(); // Memanggil metode dari kelas Kucing (override)
// Mencetak atribut Kucing
printf("Nama kucing: %s\n", kucing.hewan.nama);
printf("Ras kucing: %s\n", kucing.ras);
return 0;
}
- Hasil Coding
3. Mengimplementasikan Konsep Enkapsulasi.
Buatlah kelas "Kendaraan" yang memiliki atribut jenis, warna, dan kecepatan. Program ini
harus mampu mengubah nilai atribut kecepatan hanya melalui metode setter dan mencetak
nilai atribut menggunakan metode getter.
harus mampu mengubah nilai atribut kecepatan hanya melalui metode setter dan mencetak
nilai atribut menggunakan metode getter.
- Ketikkan Coding Di Bawah Ini
#include <stdio.h>
// Deklarasi kelas Kendaraan
typedef struct {
char jenis[50];
char warna[50];
float kecepatan;
} Kendaraan;
// Metode setter untuk atribut kecepatan
void setKecepatan(Kendaraan *k, float kecepatanBaru) {
k->kecepatan = kecepatanBaru;
}
// Metode getter untuk atribut kecepatan
float getKecepatan(Kendaraan k) {
return k.kecepatan;
}
int main() {
// Membuat objek kendaraan
Kendaraan mobil;
// Mengisi nilai atribut
printf("Masukkan jenis kendaraan: ");
gets(mobil.jenis);
printf("Masukkan warna kendaraan: ");
gets(mobil.warna);
setKecepatan(&mobil, 60.0); // Mengubah nilai atribut menggunakan metode setter
// Mencetak atribut Kendaraan
printf("Jenis kendaraan: %s\n", mobil.jenis);
printf("Warna kendaraan: %s\n", mobil.warna);
printf("Kecepatan kendaraan: %.2f\n", getKecepatan(mobil)); // Mengambil nilai atribut menggunakan metode getter
return 0;
}
- Hasil Coding
4. Mengimplementasikan Konsep Komposisi Antara Dua Kelas.
Buatlah kelas "Mobil" dan kelas "Roda" sebagai komponen mobil. Kelas Mobil
memiliki atribut merek dan objek Roda. Program ini harus mampu membuat objek Mobil,
mengisi nilai atribut merek dan atribut Roda, serta mencetak nilai atribut Mobil beserta atribut
Roda yang terkait.
memiliki atribut merek dan objek Roda. Program ini harus mampu membuat objek Mobil,
mengisi nilai atribut merek dan atribut Roda, serta mencetak nilai atribut Mobil beserta atribut
Roda yang terkait.
- Ketikkan Coding Di Bawah Ini
#include <stdio.h>
// Deklarasi kelas Roda
typedef struct {
int jumlah;
} Roda;
// Deklarasi kelas Mobil
typedef struct {
char merek[50];
Roda roda
} Mobil;
int main() {
// Membuat objek Mobil
Mobil mobil;
// Mengisi nilai atribut Mobil
printf("Masukkan merek mobil: ");
gets(mobil.merek);
printf("Masukkan jumlah roda mobil: ");
scanf("%d", &mobil.roda.jumlah);
// Mencetak atribut Mobil dan atribut Roda yang terkait
printf("Merek mobil: %s\n", mobil.merek);
printf("Jumlah roda mobil: %d\n", mobil.roda.jumlah);
return 0;
}
- Hasil Coding
5. Buatlah kelas "Persegi" dan kelas "Lingkaran" yang merupakan turunan dari kelas Bentuk dan
mengoverride metode "luas()".
Buatlah kelas "Persegi" dan kelas "Lingkaran" yang merupakan turunan dari kelas Bentuk danmengoverride metode "luas()". Program ini harus mampu membuat objek Persegi dan
Lingkaran, mengisi nilai atribut yang diperlukan, dan memanggil metode "luas()" untuk
masing-masing objek.
- Ketikkan Coding Di Bawah Ini
#include <stdio.h>
// Deklarasi kelas Bentuk
typedef struct {
int sisi;
} Bentuk;
// Metode "luas()" untuk kelas Bentuk
int luasBentuk(Bentuk b) {
return b.sisi * b.sisi;
}
// Deklarasi kelas Persegi sebagai turunan dari bentuk
typedef struct {
Bentuk bentuk;
} Persegi;
// Metode "luas()" untuk kelas Persegi (override)
int luasPersegi(Persegi p) {
return luasBentuk(p.bentuk);
}
// Deklarasi kelas Lingkaran sebagai turunan dari Bentuk
typedef struct {
Bentuk bentuk;
} Lingkaran;
// Metode "luas()" untuk kelas Lingkaran (override)
float luasLingkaran(Lingkaran l) {
return 3.14 * l.bentuk.sisi * l.bentuk.sisi;
}
int main() {
// Membuat objek Persegi
Persegi persegi;
persegi.bentuk.sisi = 5;
// Membuat objek Lingkaran
Lingkaran lingkaran;
lingkaran.bentuk.sisi = 7;
// Memanggil metode "luas()"
printf("Luas persegi: %d\n", luasPersegi(persegi));
printf("Luas lingkaran: %.2f\n", luasLingkaran(lingkaran));
return 0;
}
- Hasil Coding
B. Mengimplementasikan Kelas dan Objek
1. Persoalan
- Anda diminta untuk mengimplementasikan kelas "Tanaman" dalam pemrograman berorientasi objek menggunakan bahasa C. Setiap objek "Tanaman" harus memiliki atribut sebagai berikut:
-Nama Tanaman (string)
-Jenis Tanaman (string)
-Jumlah Tanaman (integer)
-Luas Lahan (float)
Selain itu, kelas "Tanaman" juga harus memiliki method sebagai berikut:
setNamaTanaman(nama: string): Method ini digunakan untuk mengatur nama tanaman.
setJenisTanaman(jenis: string): Method ini digunakan untuk mengatur jenis tanaman.
setJumlahTanaman(jumlah: int): Method ini digunakan untuk mengatur jumlah tanaman.
setLuasLahan(luas: float): Method ini digunakan untuk mengatur luas lahan.
getNamaTanaman(): Method ini digunakan untuk mendapatkan nama tanaman.
getJenisTanaman(): Method ini digunakan untuk mendapatkan jenis tanaman.
getJumlahTanaman(): Method ini digunakan untuk mendapatkan jumlah tanaman.
getLuasLahan(): Method ini digunakan untuk mendapatkan luas lahan.
hitungTotalProduksi(): Method ini digunakan untuk menghitung total produksi tanaman
berdasarkan jumlah tanaman dan luas lahan. Rumusnya adalah jumlah tanaman dikali luas
lahan.
Implementasikan kelas "Tanaman" dan buatlah objek tanaman baru dengan nama, jenis,
jumlah, dan luas lahan sesuai dengan input pengguna. Selanjutnya, panggil method
hitungTotalProduksi().
- Anda diminta untuk membuat program sederhana yang mengelola data buku di perpustakaan. Setiap buku memiliki atribut berikut:
-Penulis
-Tahun Terbit
-Jumlah Halaman
Anda diminta untuk membuat kelas "Buku" yang memiliki metode berikut:
Konstruktor untuk menginisialisasi atribut buku.
Metode "cetakInfo" untuk mencetak informasi buku (judul, penulis, tahun terbit, jumlah
halaman).
Selanjutnya, buatlah objek dari kelas "Buku" dan panggil metode "cetakInfo" untuk mencetak
informasi buku tersebut.
Tugas Anda adalah mengimplementasikan kelas "Buku" dan membuat objek buku beserta
pemanggilan metode "cetakInfo" dalam bahasa C.
2. Jawab
- Bahasa C
#include <stdio.h>
#include <string.h>
// Deklarasi kelas Tanaman
typedef struct {
char namaTanaman[50];
char jenisTanaman[50];
int jumlahTanaman;
float luasLahan;
} Tanaman;
// Method untuk mengatur nama tanaman
void setNamaTanaman(Tanaman *tanaman, char nama[]) {
strcpy(tanaman->namaTanaman, nama);
}
// Method untuk mengatur jenis tanaman
void setJenisTanaman(Tanaman *tanaman, char jenis[]) {
strcpy(tanaman->jenisTanaman, jenis);
}
// Method untuk mengatur jumlah tanaman
void setJumlahTanaman(Tanaman *tanaman, int jumlah) {
tanaman->jumlahTanaman = jumlah;
}
// Method untuk mengatur luas lahan
void setLuasLahan(Tanaman *tanaman, float luas) {
tanaman->luasLahan = luas;
}
// Method untuk mendapatkan nama tanaman
char* getNamaTanaman(Tanaman tanaman) {
return tanaman.namaTanaman;
}
// Method untuk mendapatkan jenis tanaman
char* getJenisTanaman(Tanaman tanaman) {
return tanaman.jenisTanaman;
}
// Method untuk mendapatkan jumlah tanaman
int getJumlahTanaman(Tanaman tanaman) {
return tanaman.jumlahTanaman;
}
// Method untuk mendapatkan luas lahan
float getLuasLahan(Tanaman tanaman) {
return tanaman.luasLahan;
}
// Method untuk menghitung total produksi tanaman
float hitungTotalProduksi(Tanaman tanaman) {
return tanaman.jumlahTanaman * tanaman.luasLahan;
}
int main() {
// Membuat objek tanaman baru
Tanaman tanaman;
// Input data tanaman dari pengguna
char nama[50];
char jenis[50];
int jumlah;
float luas;
printf("Masukkan nama tanaman: ");
fgets(nama, sizeof(nama), stdin);
setNamaTanaman(&tanaman, nama);
printf("Masukkan jenis tanaman: ");
fgets(jenis, sizeof(jenis), stdin);
setJenisTanaman(&tanaman, jenis);
printf("Maasukkan jumlah tanaman: ");
scanf("%d", &jumlah);
setJumlahTanaman(&tanaman, jumlah);
printf("Masukkan luas lahan (hektar): ");
scanf("%f", &luas);
setLuasLahan(&tanaman, luas);
// Menghitung total produksi tanaman
float totalProduksi = hitungTotalProduksi(tanaman);
// Menampilkan hasil
printf("\n");
printf("Total produksi tanaman %s: %.2f hektar\n", getNamaTanaman(tanaman), totalProduksi);
return 0;
}
- Bahasa C
#include <stdio.h>
// Deklarasi kelas Buku
struct Buku {
char judul[50];
char penulis[50];
int tahunTerbit;
int jumlahHalaman;
};
// Metode untuk mencetak informasi buku
void cetakInfo(struct Buku buku) {
printf("Informasi Buku:\n");
printf("Judul : %s\n", buku.judul);
printf("Penulis : %s\n", buku.penulis);
printf("Tahun Terbit : %d\n", buku.tahunTerbit);
printf("Jumlah Halaman: %d\n", buku.jumlahHalaman);
}
int main() {
// Membuat objek buku
struct Buku buku1;
// Mengisi atribut buku
strcpy(buku1.judul, "Pemrograman Berorientasi Objek");
strcpy(buku1.penulis, "John Doe");
buku1.tahunTerbit = 2021;
buku1.jumlahHalaman =300;
// Memanggil metode cetakInfo
cetakInfo(buku1);
return 0;
}
Praktikum 5 (Implementasi Struktur Data
Dasar)
A. Persoalan
1. Array untuk Menyimpan Daftar Nama Siswa.
Program tersebut harus memiliki menu pilihan untuk menambahkan nama
siswa baru, mencetak semua nama siswa, dan mencari nama siswa berdasarkan indeks.
Implementasikan juga validasi input pengguna untuk menghindari akses di luar batas array
2. Linked List untuk Menyimpan Daftar Angka.
Program tersebut harus memiliki menu pilihan untuk menambahkan angka baru ke linked list, mencetak semua angka dalam linked list, dan menghapus angka tertentu dari linked list. Pastikan program juga dapat menangani kasus di mana linked list kosong atau mencari angka yang tidak ada dalam linked list.
3. Stack untuk Melakukan Evaluasi Ekspresi Aritmatika Sederhana.
Program tersebut harus menerima input ekspresi aritmatika dalam bentuk postfix (notasi terbalik) dan menghitung hasilnya. Pastikan program juga dapat mengatasi kesalahan dalam ekspresi yang tidak valid.
4. Queue untuk Mengelola Antrian Pelanggan dalam Sebuah Bank.
Program tersebut harus memiliki menu pilihan untuk menambahkan pelanggan ke dalam antrian, memproses pelanggan berikutnya, dan mencetak semua pelanggan dalam antrian. Pastikan program juga dapat menangani kasus antrian kosong atau pemrosesan pelanggan jika tidak ada pelanggan dalam antrian.
B. Jawaban
1. Array untuk Menyimpan Daftar Nama Siswa.
Bahasa C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
#define MAX_NAMA_LENGTH 50
void tambahkanNama(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int *jumlahSiswa);
void cetakSemuaNama(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int jumlahSiswa);
void cariNamaSiswa(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int jumlahSiswa);
void printMenu();
int main() {
char nama[MAX_SIZE][MAX_NAMA_LENGTH];
int jumlahSiswa = 0;
printf("Program Daftar Nama Siswa\n");
printf("-------------------------\n");
int pilihan;
do {
printMenu();
printf("Pilihan Anda: ");
if (scanf("%d", &pilihan) != 1) {
// Tangani input yang tidak valid
printf("Input tidak valid. Harap masukkan nomor menu yang valid.\n");
scanf("%*s"); // Membersihkan buffer input
continue;
}
switch (pilihan) {
case 1:
tambahkanNama(nama, &jumlahSiswa);
break;
case 2:
cetakSemuaNama(nama, jumlahSiswa);
break;
case 3:
cariNamaSiswa(nama, jumlahSiswa);
break;
case 0:
printf("Terima kasih. Program selesai.\n");
break;
default:
printf("Pilihan tidak valid. Silahkan pilih menu yang tersedia.\n");
break;
}
printf("\n");
} while (pilihan != 0);
return 0;
}
void tambahkanNama(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int *jumlahSiswa) {
if (*jumlahSiswa < MAX_SIZE) {
printf("Masukkan Nama Siswa: ");
getchar(); // Membersihkan newline karakter dari buffer sebelum menggunakan fgets
fgets(nama[*jumlahSiswa], MAX_NAMA_LENGTH, stdin);
nama[*jumlahSiswa][strcspn(nama[*jumlahSiswa], "\n")] = '\0'; // Menghilangkan newline dari nama
(*jumlahSiswa)++;
printf("Nama Siswa berhasil ditambahkan.\n");
} else {
printf("Kapasitas maksimum telah tercapai. Tidak dapat menambahkan nama siswa lagi.\n");
}
}
void cetakSemuaNama(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int jumlahSiswa) {
if (jumlahSiswa > 0) {
printf("Daftar Nama Siswa:\n");
for (int i = 0; i < jumlahSiswa; i++) {
printf("%d. %s\n", i, nama[i]);
}
} else {
printf("Belum ada nama siswa yang ditambahkan.\n");
}
}
void cariNamaSiswa(char nama[MAX_SIZE][MAX_NAMA_LENGTH], int jumlahSiswa) {
if (jumlahSiswa > 0) {
int indeks;
printf("Masukkan Indeks Nama Siswa: ");
if (scanf("%d", &indeks) != 1 || indeks < 0 || indeks >= jumlahSiswa) {
// Tangani input yang tidak valid
printf("Indeks tidak valid. Masukkan indeks antara 0 hingga %d.\n", jumlahSiswa - 1);
scanf("%*s"); // Membersihkan buffer input
return;
}
printf("Nama Siswa dengan Indeks %d: %s\n", indeks, nama[indeks]);
} else {
printf("Belum ada nama siswa yang ditambahkan.\n");
}
}
void printMenu() {
printf("Menu:\n");
printf("1. Tambahkan Nama Siswa\n");
printf("2. Cetak Semua Nama Siswa\n");
printf("3. Cari Nama Siswa Berdasarkan Indeks\n");
printf("0. Keluar\n");
}
2. Linked List untuk Menyimpan Daftar Angka.
- Bahasa C#include <stdio.h>#include <stdlib.h>typedef struct Node {int data;struct Node* next;} Node;void tambahAngka(Node** head, int angka) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = angka;newNode->next = NULL;if (*head == NULL) {*head = newNode;} else {Node* current = *head;while (current->next != NULL) {current = current->next;}current->next = newNode;}printf("Angka %d berhasil ditambahkan.\n", angka);}void cetakAngka(Node* head) {if (head == NULL) {printf("Linked list kosong.\n");return;}printf("Daftar Angka:\n");Node* current = head;while (current != NULL) {printf("%d ", current->data);current = current->next;}printf("\n");}void hapusAngka(Node** head, int angka) {if (*head == NULL) {printf("Linked list kosong. Tidak dapat menghapus angka.\n");return;}Node* current = *head;Node* prev = NULL;if (current->data == angka) {*head = current->next;free(current);printf("Angka %d berhasil dihapus.\n", angka);return;}while (current != NULL && current->data != angka) {prev = current;current = current->next;}if (current == NULL) {printf("Angka %d tidak dapat ditemukan dalam linked list.\n", angka);} else {prev->next = current->next;free(current);printf("Angka %d berhasil dihapus.\n", angka);}}int main() {Node* head = NULL;printf("Program Linked List\n");printf("-------------------\n");int pilihan;do {printf("Menu:\n");printf("1. Tambah Angka\n");printf("2. Cetak Semua Angka\n");printf("3. Hapus Angka\n");printf("0. Keluar\n");printf("Pilihan Anda: ");scanf("%d", &pilihan);switch (pilihan) {case 1: {int angka;printf("Masukkan Angka: ");scanf("%d", &angka);tambahAngka(&head, angka);break;}case 2:cetakAngka(head);break;case 3: {int angka;printf("Masukkan Angka yang Akan Dihapus: ");scanf("%d", &angka);hapusAngka(&head, angka);break;}case 0:printf("Terima kasih. Program selesai.\n");break;default:printf("Pilihan tidak valid. Silahkan pilih menu yang tersedia.\n");break;}printf("\n");} while (pilihan != 0);return 0;}
- Hasil Coding
3. Stack untuk Melakukan Evaluasi Ekspresi Aritmatika Sederhana.
- Bahasa C#include <stdio.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int top;} Stack;void inisialisasi(Stack* stack) {stack->top = -1;}int isEmpty(Stack* stack) {return stack->top == -1;}int isFull(Stack* stack) {return stack->top == MAX_SIZE -1;}void push(Stack* stack, int value) {if (isFull(stack)) {printf("Stack penuh. Tidak dapat menambah elemen.\n");return;}stack->data[++stack->top] = value;}int pop(Stack* stack) {if (isEmpty(stack)) {printf("Stack kosong. Tidak ada elemen yang dapat dihapus.\n");return -1;}return stack->data[stack->top--];}int peek(Stack* stack) {if (isEmpty(stack)) {printf("Stack kosong. Tidak ada elemen yang dapat dilihat.\n");return -1;}return stack->data[stack->top];}int main() {Stack stack;inisialisasi(&stack);printf("Program Stack\n");printf("-------------\n");push(&stack, 10);push(&stack, 20);push(&stack, 30);printf("Elemen teratas: %d\n", peek(&stack));printf("Menghapus elemen: %d\n", pop(&stack));printf("Elemen teratas setelah penghapusan: %d\n", peek(&stack));return 0;}
- Hasil Coding
4. Queue untuk Mengelola Antrian Pelanggan dalam Sebuah Bank.
- Bahasa C#include <stdio.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int front;int rear;} Queue;void inisialisasi(Queue* queue) {queue->front = -1;queue->rear = -1;}int isEmpty(Queue* queue) {return queue->front == -1;}int isFull(Queue* queue) {return (queue->rear + 1) % MAX_SIZE == queue->front;}void enqueue(Queue* queue, int value) {if (isFull(queue)) {printf("Queue penuh. Tidak dapat menambahkan elemen.\n");return;}if (isEmpty(queue)) {queue->front = 0;}queue->rear = (queue->rear + 1) % MAX_SIZE;queue->data[queue->rear] = value;}int dequeue(Queue* queue) {if (isEmpty(queue)) {printf("Queue kosong. Tidak ada elemen yang dapat dihapus.\n");return -1;}int value = queue->data[queue->front];if (queue->front == queue->rear) {queue->front = -1;queue->rear = -1;} else {queue->front = (queue->front + 1) % MAX_SIZE;}return value;}int peek(Queue* queue) {if (isEmpty(queue)) {printf("Queue kosong. Tidak ada elemen yang dapat dilihat.\n");return -1;}return queue->data[queue->front];}int main() {Queue queue;inisialisasi(&queue);printf("Program Queue\n");printf("-------------\n");enqueue(&queue, 10);enqueue(&queue, 20);enqueue(&queue, 30);printf("Elemen terdepan: %d\n", peek(&queue));printf("Menghapus elemen: %d\n", dequeue(&queue));printf("Elemen terdepan setelah penghapusan: %d\n", peek(&queue));return 0;}
- Hasil Coding
Tidak ada komentar:
Posting Komentar