Laporan Modul 1 Asda
Laporan Modul 1 Asda
Disusun Oleh:
AMRIZAL FAHMI ROSYAD 160533611465
DIAN MONICA 160533611453
Tujuan
1. Mahasiswa memahami apakah yang dimaksud dengan struktur data.
2. Mahasiswa memahami apakah yang dimaksud dengan algoritma.
3. Mengingat kembali array, struktur, pointer dalam bahasa C.
DASAR TEORI
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
1.2.Pengenalan Algoritma
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));
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).
1.5 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.
Latihan Praktikum
Percobaan 1
AlgoritmadanStruktur Data
Nama Program :Penggunaan array pada bilangan fibonacci
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
#define MAX 10
int fibo[MAX];
void main ()
{
int i;
fibo[1]=1;
fibo[2]=1;
for (i=3;i<=MAX;i++)
fibo[i]=fibo[i-2]+fibo[i-1];
intfibo[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];
Output Program:
Analisis Program:
Script program tidak dapat di execute jika menggunakan “void” , maka diganti
dengan “int”. kemudian program di atas akan dapat diexecute namun hasil program terdapat
kesalahan. Dari 10 bilangan fibonaci yang diminta , yang keluar hanya 9. Karena penggunaan
rumus yang kurang tepat, yaitu “ for (i=1;i<MAX;i++)”, yang pada rumus tersebut
tidak menggunakan operator = setelah “<’ seharusnya yang benar adalah “for
(i=1;i<=MAX;i++)”,. Hal ini sangat berpengaruh pada hasil program. Jika tidak
menggunakan operator “=” maka hasil yang akan muncul adalah urutan bilangan fibonaci
yang kurang dari 10. Menggunakan “%d” untuk tipe data integer. Penggunaan file header
stdio untuk penggunaan printf. Define MAX untuk penentu maksimal keluarnya bilangan
fibonaci yang ditentukan.
Percobaan 2
AlgoritmadanStruktur Data
Nama Program :Program mengubah isi variabel melalui pointer
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
main()
{
int y, x = 87;
int *px;
px = &x;
y = *px;
px = &x;
y = *px;
printf("Alamat x = %p\n", &x);
printf("Isi px = %p\n", px);
printf("Isi x = %d\n", x);
printf("Nilai yang ditunjuk oleh px = %d\n", *px);
printf("Nilai y = %d\n", y);
}
Output Program:
Analisis Program:
Dalam program diatas tidak ada kesalahan pada syntax. Menggunakan file
header #include <stdio.h>untuk mendeklarasikan penginputan data secara
manual atau sistematis menggunakan “printf”. Menggunakan pointer untuk
membaca suatu alamat yang sudah ditentukan dalam syntax. Mengaplikasikan
penggunaan pointer untuk mempersingkat script dan mempermudah penulisan
script. Nilai dari semua variabel adalah sama, karena nilai awal x=87, yang
kemudian terdapat proses penyamaan alamat px=&x, dan selanjutnya nilai dari
alamat px, yaitu *px disamakan dengan y, keluaran akan berupa alamat dan nilai
asli dari alamat tersebut.
Percobaan 3
Algoritma dan Struktur Data
Nama Program :Program mengakses dan mengubah isi suatu variabel pointer.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
main()
{
float d = 54.5f, *pd;
pd = &d;
*pd +=10;
Output Program:
Analisis Program:
Tidak ada kesalahan yang terdapat pada syntax tersebut. Program diatas digunakan untuk
memindah data, yaitu data yang mulanya ada pada d akan dipindah pada pd melalui alamat
dan kemudian akan diproses dengan *pd yang berarti nilai dari d, ditambahkan 10. Karena
alamat keduanya sama maka hasil dari d akan sama dengan *pd. Keluaran akan berupa nilai
awal d dan nilai akhir yang telah ditambahkan 10.
Percobaan 4
Algoritma dan Struktur Data
Nama Program :Penggunaan pointer untuk bilangan fibonacci.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int *fibo;
void main ()
{
int i;
for (i=3;i<=MAX;i++)
*(fibo+i)=(*(fibo+i-2)+*(fibo+i-1));
#include <stdlib.h>
#define MAX 10
int *fibo;
int main()
int i;
*(fibo + 1) = 1;
*(fibo + 2) = 1;
for (i=3;i<=MAX;i++)
for (i=1;i<MAX;i++)
printf("%d-",*(fibo+i));
}
Output Program:
Analisis Program:
Percobaan 5
Algoritma dan Struktur Data
Nama Program :Penggunaan struktur pada konversi koordinat polar ke koordinat
catersian.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
#include <math.h>
struct polar {
double r;
double alpha;
};
structkartesian {
double x;
double y;
};
void main ()
{
struct polar pl;
structkartesian kl;
kl.x=pl.r * cos(pl.alpha);
kl.y=pl.r * sin(pl.alpha);
printf(
"Nilaikoordinatkartesianuntukkoordinat polar r= %2.2lf alpha=
%2.2lf adalah: \n", pl.r,pl.alpha);
printf("x= %2.2lf y= %2.2lf", kl.x,kl.y);
}
#include <math.h>
struct polar {
double r;
double alpha;
};
struct kartesian {
double x;
double y;
};
int main()
scanf("%lf",&pl.r);
scanf("%lf",&pl.alpha);
printf(
Output Program:
Analisis Program:
Program diatas memiliki kesalahan dalam penulisan syntax. Yang pertama, tentang penulisan
fungsi utama yang seharusnya menggunakan int bukan void. Penulisan syntax yang perlu
diperhatikan. Untuk baris 28-29 nanti ada kesalahan pada syntax yang pertama. Dan
seharusnya tidak menggunakan enter saat penulisan rumus.Kesalahan yang paling fatal
terletak pada penulisan pada baris 28-29.Seharusnya tidak di enter, hal tersebut
menimbulkan error pada script sehingga tidak bisa di excute. Penggunaan file header math.h
untuk pengoperasian matematika. Program diatas menggunakan 2 struck yaitu polar dan
kartesian dengan masing-masing memiliki 2 variabel bertipe data double. Inputan akan
dimasukkan pada isi dari struck polar yaitu r dan alpha. Dan hasil perhitungan dari inputan
akan disimpan pada struck kartesian yaitu x dan y, hasil berupa isi dari polar dan kartesian
dengan 2 angka dibelakang koma.
Percobaan 6
Algoritma dan Struktur Data
Nama Program :Program struktur dalam array.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <stdio.h>
#include <string.h>
structdtnilai
{
charnrp[10];
charnama[20];
doublenilai;
};
voidtambah_data()
{
charjawab[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;
}
}
voidtampil()
{
int i;
printf("Data Mahasiswa yang telahdiinputkan :\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]);
}
}
voidmain()
{
tambah_data();
tampil();
}
structdtnilai
{
charnrp[10];
charnama[20];
doublenilai;
};
if ((strcmp(jawab,"Y")==0)|| (strcmp(jawab,"y")==0))
{
j++;continue;
}
else if ((strcmp(jawab, "T")==0||(strcmp(jawab,"t")==0))
)break;
}
}
voidtampil()
{
int i;
printf("Data Mahasiswa yang telahdiinputkan :\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]);
}
}
int
main()
{
tambah_data();
tampil();
}
Output Program:
Analisis Program:
Program diatas hanya memiliki penulisan syntax yaitu penulisan void main. Maka untuk
pembenaran dan proses kirim segera dimulai. Program diatas menggunakan struct , kumpulan
fungsi. Menggunakan perulangan while untuk menginputkan kembali data yang dinginkan.
Menggunakan break agar program tidak langsung berhenti. Menggunakan file header string
untuk penggunaan strcmp pada syntax. Perulangan while 1x untuk menginputkan data,
anatara lain nrp, nama, dan juga nilai. Kemudian akan muncul pertanyaan untuk
mengumpulkan nilai kembali dengan pilihan y atau t, apabila y yang berarti iya, maka proses
input data akan dilakukan kembali, apabila t atau tidak, maka akan ke proses berikutnya yaitu
output, dimana semua data yang diunputkan akan di outputkan berupa data nrp, nama, dan
nilai.
Tugas Rumah 1
Algoritma dan Struktur Data
Nama Program :Program Kasir Warung.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include <iostream.h>
#include <string.h>
#include <conio.h>
using namespace std;
structdata_warung{
stringkode_warung;
stringmakan_warung;
stringminum_warung;
intharga;
};
int main()
{
stringnama_penjaga;
data_warungwarung;
string kode_warung[8]={"1", "2", "3", "4","5","6","7","8"};
string makan_warung[4]={"AyamKrispi+Nasi", "AyamBakar+Nasi",
"AyamGoreng+Nasi", "AyamRica+Nasi"};
string minum_warung[4]={"EsTeh", "EsJeruk", "EsSusu",
"EsCoklat"};
intjml_uang, kembali, total=0,tut=0,harga, tot=0;
floatuang;
charyesno;
cout<< "======================================="<<endl;
cout<< " SelamatDatang di WaroengFaDi "<<endl;
cout<< " Jalan Kita MasihPanjang No.01 Malang"<<endl;
cout<< "======================================="<<endl;
cout<< "List Menu : "<<endl;
cout<< "Kode Menu MakananHarga "<<endl;
cout<< " 1 AyamKrispi+NasiRp. 10.000,00"<<endl;
cout<< " 2 AyamBakar+NasiRp. 10.000,00"<<endl;
cout<< " 3 AyamGoreng+NasiRp. 10.000,00"<<endl;
cout<< " 4 AyamRica+NasiRp. 10.000,00"<<endl;
cout<< "---------------------------------------"<<endl;
cout<< "Kode Menu Minuman "<<endl;
cout<< " 5 EsTehRp. 3.000,00"<<endl;
cout<< " 6 EsJerukRp. 5.000,00"<<endl;
cout<< " 7 EsSusuRp. 5.000,00"<<endl;
cout<< " 8 EsCoklatRp. 7.000,00"<<endl;
cout<< "---------------------------------------"<<endl;
pesan:
cout<< "Kode Menu : "; cin>>warung.kode_warung;
if (warung.kode_warung == "1"){
cout<< "Makanan : "<<makan_warung[0]<<endl;
cout<< "Rp. 10.000";
harga = 10000;
tut=tut+harga;
}
else if (warung.kode_warung == "2"){
cout<< "Makanan : "<<makan_warung[1]<<endl;
cout<< "Rp. 10.000";
harga = 10000;
tut=tut+harga;
}
else if (warung.kode_warung == "3"){
cout<< "Makanan : "<<makan_warung[2]<<endl;
cout<< "Rp. 10.000";
harga = 10000;
tut=tut+harga;
}
else if (warung.kode_warung == "4"){
cout<< "Makanan : "<<makan_warung[3]<<endl;
cout<< "Rp. 10.000";
harga = 10000;
tut=tut+harga;
}
else if (warung.kode_warung == "5"){
cout<< "Minuman : "<<minum_warung[4]<<endl;
cout<< "Rp. 3.000";
harga = 3000;
tot=tot+harga;
}
else if (warung.kode_warung == "6"){
cout<< "Minuman : "<<minum_warung[5]<<endl;
cout<< "Rp. 5.000";
harga = 5000;
tot=tot+harga;
}
else if (warung.kode_warung == "7"){
cout<< "Minuman : "<<minum_warung[6]<<endl;
cout<< "Rp. 5.000";
harga = 5000;
tot=tot+harga;
}
else if (warung.kode_warung == "8"){
cout<< "Minuman : "<<minum_warung[7]<<endl;
cout<< "Rp. 7.000";
harga = 7000;
tot=tot+harga;
}
else {
cout<< "Maafandasalahmemasukkankode Menu";
}
cout<<endl;
cout<<"Pesanlainnya? y/n : ";
cin>>yesno;
if(yesno=='y' || yesno=='Y'){
gotopesan;
}
else{
system("cls");
gotoisie;
}
getch();
isie:
total=tut+tot;
cout<< "======================================="<<endl;
cout<< " SelamatDatang di WaroengFaDi "<<endl;cout<< " Jalan
Kita MasihPanjang No.01 Malang"<<endl;
cout<< "======================================="<<endl;
cout<<endl;
cout<< "HargaMakanan : Rp. "<<tut<<",00"<<endl;
cout<< "HargaMinuman : Rp. "<<tot<<",00"<<endl;
cout<< "Total : Rp. "<<total<<",00"<<endl;
cout<< "Bayar : Rp. "; cin>>jml_uang;
system("cls");
total = total + uang;
kembali = jml_uang - total;
time_t now = time(0);
char* dt = ctime(&now);
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<< " -WAROENG FADI- "<<endl;
cout<< " -Jalan Kita MasihPanjang No.01 Malang- "<<endl;
cout<< " -Telp 0341 ******- "<<endl;
cout<< "------------------------------------------------------"<<endl;
cout<<dt<<endl;
cout<< "Total : Rp. "<<total<<",00"<<endl;
cout<< "Bayar : Rp. "<<jml_uang<<",00"<<endl;
cout<< "Kembali : Rp. "<<kembali<<",00"<<endl;
cout<< "======================================================"<<endl;
nama_penjaga = "Amrizal";
return 0;
}
Output Program:
Program di atas digunakan untuk pemesanan makanan, dan pembayaran, serta menampilkan
struk pembayaran. Ketika dijalankan program di atas akan menampilkan menu makan
terlebih dahulu yang disimpan dalam struck bertipe data string. Kemudian memasukkan
pilihan makanan berdasarkan kode yang telah disimpan dalam struck, pilih makanan atau
minuman sesuai urutan nomor. Setelah itu akan muncul perulangan untuk memesan kembali
atau tidak, apabila mengetikkan ‘y’ atau ‘Y’ maka akan menambah pesanan, namun apabila
memilih ‘n’ atau ‘N’ maka akan masuk pada penjumlahan pesanan sehingga akan muncul
total harga, dan menginputkan pembayaran. Kemudian bila proses ini telah selesai, akan
muncul struk pembayaran berupa total harga, uang yang dibayarkan, serta kembalian.
Dalam program diatas menggunakan struck dengan nama data_warung dengan isi di
dalamnya berupa string kode_warung, string makan_warung, string minum_warung, yang
masing-masing dari isi struck itu di isikan dalam program, dan akan dipanggil ketika
pemesanan, dimana ketika mengetikkan kode makanan akan muncul nama makanan itu
sesuai dengan urutan index dalam makan_warung, begitu juga pemesanan minuman.
Menggunakan fungsi if elseif, untuk memilih makanan dengan kondisi tersebut, serta
menggunakan penjumlahan untuk menambahkan harga setiap pembelian makanan dengan
variabel tut, dimana tut=tut+harga, dan untuk minuman menggunakan variabel tot yaitu
tot=tot+harga, yang nantinya pada form pembayaran akan muncul total harga untuk makanan
dan minuman, yang dideklarasikan dari jumlah tut dan tot, pembayaran menggunakan
variabel jml_uang, yang selanjutnya untuk mencari kembalian adalah dengan mengurangkan
antara variabel jml_uang dengan total, dan disimpan dalam kembali, yang akan dipanggil
dalam struk pembayaran.
KESIMPULAN
1. Struktur data adalah sebuah skema organisasi yang diterapkan pada data sehingga
datadapat diinterprestasikan dan sehingga operasi-operasi spesifik dapat dilaksanakan pada
data tersebut.
2. Apabila kita membuat program dengan data yang sudah kita ketahui batasnya, maka
kita bisa menggunakan array (tipe data statis), namun apabila data kita belum kita ketahui
batasnya,kita bisa menggunakan pointer (tipe data dinamis).
3. Untuk sekumpulan data dengan tipe data yang berlainan, namun merupakan satu-
kesatuan,kita dapat menggunakan struktur untuk merepresentasikannya.
4. 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
5. Kelemahan array:
Array harus bertipe 29tatic29y. 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 29tatic 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
6. Saat membuat struktur data seperti daftar, deret dan percabangan, perlu memiliki
pointer untuk membantu mengelola bagaimana struktur dapat diimplementasikan dan
dikendalikan.
7. Kegunaan pointer yang utama adalah untuk menyimpan alamat memori dari sebuah
variabel (data type atau object dari class), menyimpan alamat dari sebuah fungsi (function
pointer) dan dapat berfungsi untuk mengirimkan “Parameter yang berupa variabel” ke dalam
fungsi, artinya nilai variabel bisa diubah di dalam fungsi serta dapat membuat variabel
dinamis.
8. Ada 2 operator pointer yang dikenal secara luas, yaitu operator & dan operator *.
DAFTAR RUJUKAN
1. Tim Asisten Dosen. 2017. Modul 1 Struct, Array, dan Pointer. Malang:
Unversitas Negeri Malang.
2. https://kajianinformasi.blogspot.co.id/2013/12/keunggulan-dan-kelemahan-
array.html
3. https://muhammadansharr.blogspot.co.id/2015/05/penjelasan-kegunaan-pointer-c-
lengkap.html