Academia.eduAcademia.edu

Laporan Praktikum 1 AdSD.doc

LAPORAN PRAKTIKUM I STRUCT, ARRAY DAN POINTER Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data Dibimbing oleh Bapak Utomo Pujianto Oleh: LU’LUUL MAKNUN (150533600464) MOCH. FADZIL FU’ADDIN (150533603409) S1 PTI’15 OFF B UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA Februari 2016 Struct, Array dan Pointer Tujuan : Mahasiswa memahami apakah yang dimaksud dengan struktur data. Mahasiswa memahami apakah yang dimaksud dengan algoritma. Mengingat kembali array, struktur, pointer dalam bahasa C. DASAR TEORI Pengenalan Struktur Data Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan pada data sehingga data dapat diinterprestasikan dan sehingga operasioperasi spesifik dapat dilaksanakan pada data tersebut. Pengenalan Algoritma Algoritma adalah barisan langkah-langkah perhitungan dasar yang mengubah masukan (dari beberapa fungsi matematika) menjadi keluaran. Contoh : Perkalian Input : integer positif a , b Output : a X b Algoritma perkalian : Contoh kasus : a = 365, b = 24 Metode 1 : 365 * 24 = 365 + (365 * 23) = 730 + (365 * 22) ….. = 8760 + (365 * 0) = 8760 Metode 2 : 3 6 5 2 4 1 4 6 0 7 3 0 8 7 6 0 Manakah algoritma yang lebih baik ? Array Array adalah organisasi kumpulan data homogen yang ukuran atau jumlah elemen maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori computer secara kontigu (berurutan). Deklarasi dari array adalah sebagai berikut: int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe integer. Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung. Nilai di masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa melewati posisi-posisi lain. Terdapat dua tipe operasi, yaitu: Operasi terhadap satu elemen/posisi dari array. Operasi terhadap array sebagai keseluruhan. Dua operasi paling dasar terhadap satu elemen/posisi adalah Penyimpanan nilai elemen ke posisi tertentu di array. Pengambilan nilai elemen dari posisi tertentu di array. Penyimpanan dan Pengambilan Nilai Biasanya bahasa pemrograman menyediakan sintaks tertentu untuk penyimpanan dan pengambilan nilai elemen pada posisi tertentu di array. Contoh: A[10] = 78, berarti penyimpanan nilai 78 ke posisi ke-10 dari array A. C = A[10], berarti pengambilan nilai elemen posisi ke-10 dari array A. Keunggulan dan Kelemahan Array Keunggulan array adalah sebagai berikut: Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-elemen tetangga, baik elemen pendahulu atau elemen penerus. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga, maka penggunaan penyimpanannya sangat efisien. Kelemahan array. Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut: Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit diubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi terus-menerus, maka representasi statis. Tidak efisien dalam penggunaan memori Menyiakan banyak waktu komputasi Pada suatu aplikasi, representasi statis tidak dimungkinkan. Pointer Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang berisi integer. Deklarasi pada C adalah: int *IntegerPointer; Tanda asterik (*) yang berada sebelum nama variable IntegerPointer menandakan ‘pointer pada suatu int’. Jadi deklarasi diatas berarti ‘definisikan sebuah tipe yang terdiri dari pointer bertipe integer yang bernama IntegerPointer’. Apabila didepanny ditambahkan typedef sebagai berikut : Typedef int *IntegerPointer; Berarti Integer Pointer merupakan suatu tipe pointer berbentuk integer. Apabila akan mendeklarasikan dua variable A dan B sebagai penunjuk ke bilangan integer : IntegerPointer A, B; Berarti kompiler C akan berisi nilai dari variable A dan B yang ‘menunjuk ke integer’. Untuk membuat beberapa penunjuk ke beberapa penyimpan integer yang kosong dan untuk membuat A dan B menunjuk tempat tersebut, digunakan prosedur dinamis untuk alokasi penyimpan yang disebut malloc A = (IntegerPointer *) malloc (sizeof(int)); B = (int *) malloc (sizeof(int)); Misalnya kita akan menyimpan integer 5 pada blok penyimpan yang ditunjuk pointer pada variable A. Untuk menuimpan angka 5 pada blok penyimpan integer itu melalui pointer A, digunakan pernyataan : *A = 5; Linked list adalah salah satu struktur data yang paling fundamental. Linked list terdiri dari sejumlah kelompok elemen (linked ) dengan urutan tertentu. Linked list sangat berguna untuk memelihara sekelompok data, semacam array, tetapi linked list lebih menguntungkan dalam beberapa kasus. Linked list lebih efisien dalam proses penyisipan (insertion ) dan penghapusan (deletion ). Linked list juga menggunakan pengalokasian penyimpan secara dinamis, dimana penyimpan dialokasikan pada saat waktu berjalan (runtime). Struktur Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah satu kesatuan. Contoh sebuah struktur adalah informasi data tanggal, yang berisi: tanggal, bulan dan tahun. Mendeklarasikan Struktur Contoh pendefinisian tipe struktur adalah sebagai berikut: struct data_tanggal { int tanggal; int bulan; int tahun; }; yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga buah elemen (field) berupa : tanggal, bulan dan tahun. Pendefnisian dan pendeklarasian struktur dapat juga ditulis sebagai berikut: struct data_tanggal { int tanggal; int bulan; int tahun; } tgl_lahir; Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai berikut struct nama_tipe_struktur { tipe field1; tipe field2; ... ... tipe fieldn; }variabel_struktur1, ... , variabel_strukturM; Masing-masing tipe dari elemen struktur dapat berlainan. Adapun variabel_struktur1 sampai dengan variabel_strukturM menyatakan bahwa variabel struktur yang dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara variabel struktur dipisahkan dengan tanda koma. Mengakses Elemen Struktur Elemen dari struktur dapat diakses dengan menggunakan bentuk variabel_struktur.nama_field. Antara variabel_struktur dan nama_field dipisahkan dengan operator titik (disebut operator anggota struktur). Contoh berikut merupakan instruksi untuk mengisikan data pada field tanggal tgl_lahir.tanggal = 30; Latihan Praktikum 1 Nama Program : Penggunaan Array Pada Bilangan Fibonacci Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include <iostream> #define MAX 10 int fibo[MAX]; int main(){ int i; fibo[1] = 1; fibo[2] = 1; for (i=3 ; i<=MAX ; i++) fibo[i] = fibo[i-2] + fibo[i-1]; printf("%d Bilangan Fibonaci Pertama adalah : \n",MAX); for (i=1 ; i<MAX ; i++){ printf("%d-",fibo[i]); } } Output Program : Algoritma : Mulai. Membaca file header. Membaca fungsi fibo. Membaca fungsi utama. Membaca tipe data integer i. Menggunakan rumus : (disini menggunakan array satu dimensi) fibo[1] = 1; fibo[2] = 1; Menggunakan perulangan for dengan rumus : for (i=3 ; i<=MAX ; i++) fibo[i] = fibo[i-2] + fibo[i-1]; Cetak hasil. Selesai. Penjelasan Program : Program di atas digunakan sebagai pencetakan bilangan fibonacci. Program di atas menerapkan konsep dari array. Pada program di atas menggunakan header file #include <iostream> #define MAX 10 Pada program di atas bilangan fibonacci yang ditampilkan hanya 10 bilangan pertamanya. Pada bilangan ke 1 dan ke 2 nilainya sudah diketahui dan disimpan pada array. Kemudian untuk menampilkan bilangan ke 3 sampai ke 10 menggunakan rumus persamaan yang menerapkan konsep perulangan. Kemudian hasilnya ditampilkan menggunakan perintah. printf("%d Bilangan Fibonaci Pertama adalah : \n",MAX); for (i=1 ; i<MAX ; i++){ printf("%d-",fibo[i]); Latihan Praktikum II Nama Program : Program Mengubah Isi Variabel Melalui Pointer Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include <iostream.h> main(){ int y, x = 87; int *px; px = &x; //mengisi px dengan alamat x y = *px; //mengisi y dengan nilai yang ditunjuk oleh px printf("alamat x = %p\n",&x); printf("isi px = %p\n",px); printf("Isi x = %d\n",x); printf("Nilai yang ditunjukan oleh px = %d\n",*px); printf("Nilai y = %d\n",y); } /* x bukanlah variabel pointer *px adalah variabel pointer (terdapat simbol *) x -> nilai dari variabel &x -> alamat dari variabel px -> alamat yang ditunjuk oleh px *px -> nilai yang ditunjuk oleh px */ Output Program : Algoritma : Start. Membaca file header. Membaca fungsi utama. Menggunakan tipe data integer y,x dengan nilai tetap=87. Menggunakan pointer pada tipe data. Menentukan letak alamat px dan y , dengan ketentuan: px = &x; //mengisi px dengan alamat x y = *px; //mengisi y dengan nilai yang ditunjuk oleh px Cetak hasil Selesai. Penjelasan Program : Dalam program diatas menggunakan konsep pointer . Menggunakan header file #include <iostream.h>. Deklarasi variabelnya int y, x = 87; int *px;. Kemudian pada program di atas diminta untuk menampilkan alamat, isi dan nilai yang dicetak menggunakan printf("alamat x = %p\n",&x); printf("isi px = %p\n",px); printf("Isi x = %d\n",x); printf("Nilai yang ditunjukan oleh px = %d\n",*px); printf("Nilai y = %d\n",y); Latihan Praktikum III Nama Program : Program mengakses dan mengubah isi suatu variabel pointer Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include <stdio.h> main(){ float d=54.5f, *pd; printf("Isi d mula-mula = %g\n",d); pd=&d; *pd+=10; printf("Isi d sekarang = %g\n",d); } Output Program : Algoritma : Start Membaca file header. Membaca fungsi utama. Membaca tipe data yang digunakan dengan ketentuan angka yang ditetapkan. Membaca penggunaan pointer pada tipe data. float d=54.5f, *pd; Menentukan letak alamat dan nilai yang diinginkan. pd = &d; *pd += 10; Cetak hasil. Selesai. Penjelasan Program : Program di atas menggunakan konsep pointer. Program di atas digunakan untuk mengganti nilai dari suatu variabel dengan menggunakan pointer. Isi data mula-mula adalah 54,5 yang bertipe data float kemudaian isinya diubah menggunakan persamaan pd = &d; *pd += 10; Dan hasilnya dicetak menggunakan printf("Isi d sekarang = %g\n",d); Latihan Praktikum IV Nama Program : Penggunaan pointer untuk bilangan fibonacci Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include <stdio.h> #include <stdlib.h> #define MAX 10 int *fibo; int main(){ int i; fibo = (int *) malloc(MAX * sizeof(int)); *(fibo + 1) = 1; *(fibo + 2) = 1; for(i=3;i<=MAX;i++) *(fibo + i)= *(fibo + i - 2) + *(fibo + i - 1); printf("%d Bilangan fibonaci pertama adalah : \n",MAX); for(i=1;i<MAX;i++) printf("%i-",*(fibo+i)); } Output Program : Algoritma : Start. Membaca file header. Membaca fungsi fibo dengan penggunaan pointer didalamnya. Membaca fungsi utama. Membaca tipe data integer i. Menggunakan rumus. fibo = (int *) malloc(MAX * sizeof(int)); *(fibo + 1) = 1; *(fibo + 2) = 1; for(i=3;i<=MAX;i++) *(fibo + i)= *(fibo + i - 2) + *(fibo + i - 1); Cetak hasil. Selesai. Penjelasan Program : Program di atas digunakan sebagai pencetakan bilangan fibonacci. Bedanya program pada latihan ini dengan latihan sebelumnya adalah menggunakan konsep pointer. Pada program di atas menggunakan header file #include <stdio.h> #include <stdlib.h> #define MAX 10 Pada program di atas bilangan fibonacci yang ditampilkan hanya 10 bilangan pertamanya. Pada bilangan ke 1 dan ke 2 nilainya sudah diketahui dan disimpan pada array. Kemudian untuk menampilkan bilangan ke 3 sampai ke 10 menggunakan rumus persamaan yang menerapkan konsep perulangan. for(i=3;i<=MAX;i++) *(fibo + i)= *(fibo + i - 2) + *(fibo + i - 1); Kemudian hasilnya ditampilkan menggunakan perintah. printf("%d Bilangan fibonaci pertama adalah : \n",MAX); for(i=1;i<MAX;i++) printf("%i-",*(fibo+i)); Latihan Praktikum V Nama Program : Penggunaan struktur pada konversi koordinat polar ke koordinat catersian Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include<stdio.h> #include<math.h> struct polar{ double r; double alpha; }; struct kartesian { double x; double y; }; int main(){ struct polar pl; struct kartesian kl; printf("Masukan nilai r untuk koordinat polar :"); scanf("%lf",&pl.r); printf("Masukan nilai alpha untuk koordinat polar :"); scanf("%lf",&pl.alpha); kl.x = pl.r * cos(pl.alpha); kl.y = pl.r * sin(pl.alpha); printf("Nilai koordinat kartesian untuk koordinat polar r= %2.2lf alpha= %2.lf adalah:\n",pl.r,pl.alpha); printf("x = %2.2lf y = %2.2lf",kl.x,kl.y); } Output Program : Algoritma : Start. Membaca file header. Membaca struct polar, kartesian. Membaca fungsi utama. Pemanggilan strcut polar dank artesian. Masukkan nilai r untuk polar. Masukkan nilai alpha untuk kartesian. Penggunaan rumus . kl.x = pl.r * cos(pl.alpha); kl.y = pl.r * sin(pl.alpha); Cetak hasil. Selesai. Penjelasan Program : Program di atas digunakan untuk konversi koordinat polar ke koordinat catersian. Pada program di atas menggunakan konsep struct. struct polar{ double r; double alpha; }; struct kartesian { double x; double y; Dimana jika dijalankan kita diminta memasukkan nilai dari r dan alpha pada koordinat polarnya. Kemudian masukan yang diberikan tadi diproses menggunakan persamaan kl.x = pl.r * cos(pl.alpha); kl.y = pl.r * sin(pl.alpha); Dan hasilnya ditampilkan menggunakan printf("Nilai koordinat kartesian untuk koordinat polar r= %2.2lf alpha= %2.lf adalah:\n",pl.r,pl.alpha); printf("x = %2.2lf y = %2.2lf",kl.x,kl.y); Latihan Praktikum VI Nama Program : Program struktur dalam array Bahasa Pemrogramam : C++ Compiler : MinGW Script Program : #include<stdio.h> #include<string.h> struct dtnilai { char nrp[10]; char nama[20]; double nilai; }; struct dtnilai data[10]; int j=0; int tambah_data(){ char jawab[2]; while(1){ fflush(stdin); printf("NRP :");scanf("%s",&data[j].nrp); printf("Nama :");scanf("%s",&data[j].nama); printf("Nilai Test :");scanf("%lf",&data[j].nilai); printf("Ada data lagi(y/t):");scanf("%s",&jawab); if((strcmp(jawab,"Y")==0)||(strcmp(jawab,"y")==0)) { j++;continue; } else if ((strcmp(jawab,"T")==0)||(strcmp(jawab,"t")==0)) break; } } int tampil(){ int i; printf("DAta Mahasiswa yang telah diinputkan :\n"); printf("NRP\tNama\tNilai\n"); for(i=0;i<=j;i++) { printf("%s\t%s\t%6.2f\n",data[i].nrp,data[i].nama,data[i].nilai); } } int main(){ tambah_data(); tampil(); } Output Program : Algoritma : Start. Membaca file header. Membaca srtuct data nilai dengan beberapa tipe data yang mendukung jalannya progam ini. Membaca kumpulan fungsi. Masukkan data mahasiswa. int i; printf("DAta Mahasiswa yang telah diinputkan :\n"); printf("NRP\tNama\tNilai\n"); Cetak hasil. Jika ingin mengulang untuk menginputkan data maka “y” jika tidak “t”. Cetak hasil. Selesai. Penjelasan Program : Pada program di atas digunakan untuk mendata nilai dari mahasiswa. Pada program di atas menggunakan konsep array, struct, kondisi, fungsi dan perulangan. Pada program di atas menggunakan header file #include<stdio.h> #include<string.h> Dan struct yang digunakan adalah struct dtnilai { char nrp[10]; char nama[20]; double nilai; Pada jalannya program kita diminta memasukkan NRP, nama mahasiswa, dan nilainya. Kemudian akan tampil sebuah pernyataan printf("Ada data lagi(y/t):");scanf("%s",&jawab); jika kita memilih y maka kita diminta memasukan data kembali, tapi jika kita memilih n maka data yang telah dimasukan sebelumnya akan dicetak menggunakan printf("DAta Mahasiswa yang telah diinputkan :\n"); printf("NRP\tNama\tNilai\n"); for(i=0;i<=j;i++) { printf("%s\t%s\t%6.2f\n",data[i].nrp,data[i].nama,data[i].nilai); fungsi yang digunakan adalah fungsi tambah_data dan tampil yang bertipe data integer. Tugas Rumah 1 Nama Program : Bahasa Pemrogramam : Compiler : Script Program : Output Program : Algoritma : Penjelasan Program : KESIMPULAN Struktur data adalah sebuah skema organisasi yang diterapkan pada data sehingga data dapat diinterprestasikan dan sehingga operasi-operasi spesifik dapat dilaksanakan pada data tersebut Apabila kita membuat program dengan data yang sudah kita ketahui batasnya, maka kita bias menggunakan array (tipe data statis), namun apabila data kita belum kita ketahui batasnya, kita bisa menggunakan pointer (tipe data dinamis) Untuk sekumpulan data dengan tipe data yang berlainan, namun merupakan satu-kesatuan, kita dapat menggunakan struktur untuk merepresentasikannya DAFTAR RUJUKAN