Anda di halaman 1dari 26

LAPORAN PRAKTIKUM 01

ARRAY, POINTER DAN STRUKTUR

Dosen :
Arna Fariza

Nabilatulhawa (3121500010)

KELAS 1 D3 IT A
JURUSAN D3 TEKNIK INFORMATIKA
DEPARTEMEN TEKNIK INFORMATIKA DAN KOMPUTER
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2022
ARRAY, POINTER, DAN STRUKTUR

A. Landasan Teori
1) Array
Array adalah kumpulan data dari semua tipe data yang harus sama,
menggunakan nama variable yang sama dan dibedakan berdasarkan
indeksnya. Secara default indeks array dimulai dari 0 s/d (n-1) dimana n
adalah jumlah elemen dalam array. Array dapat berupa array dengan dimensi
satu, dua, tiga atau lebih Array satu dimensi mewakili bentuk vector. Array
dua dimensi mewakili bentuk metrics atau table. Array tiga dimensi mewakili
bentuk ruang.
Array satu dimensi dideklarasikan dalam bentuk umum :
type_data name_var[size];
dengan :
 data_type untuk menentukan tipe elemen array, missal int, char, float.
 var_name sebagai nama variabel array
 size untuk menentukan jumlah maksimum elemen array

Contoh deklarasi array : float nilai[5];

Menyatakan bahwa variabel nilai bertipe array float dan memiliki 5 elemen
bertipe float.

Dalam C, data array akan disimpan dalam memori sekuensial. Elemen


pertama memiliki nilai indeks 0. Jika nilai tersebut dinyatakan sebagai array
pelampung dengan 5 elemen, maka elemen pertama memiliki indeks sama
dengan 0, dan elemen terakhir memiliki indeks 4. Untuk lebih jelasnya
terdaapat pada gambar di bawah ini.
2) Pointer
Suatu pointer (variable penunjuk) adalah suatu variable yang berisi dengan
alamat lokasi, yaitu suatu memori tertentu. Bahasa C menyediakan 2 buah
operator untuk operasi pointer yaitu operator „*‟ dan operator „&‟.
Operator alamat (Address operator (&))
Pada pendeklarasian variable, user tidak diharuskan menentukan
lokasi sesungguhnya pada memory. Hal ini akan dilakukan secara otomatis
oleh compiler dan operating system pada saat run-time. Jika ingin
mengetahui di mana suatu variable disimpan, dapat dilakukan dengan
memberikan tanda ampersand (&) di depan variable, yang berarti “address
off”. Contoh :
Buku = &bahasa;
Akan memberikan variabel buku alamat dari bahasa, karena variable
bahasa diberi awalan ampersand (&), maka menjadi pokok disini adalah
alamat dalam memory, bukan isi variable. Misalkan bahasa diletakkan di
alamat 1776 kemudian dituliskan instruksi sebagai berikut :
Bahasa = 25;
Sejarah = bahasa;
buku = &bahasa;
Dengan menggunakan pointer kita dapat mengakses nilai yang
tersimpan secara langsung dengan memberikan awalan operator asterisk(*)
pada identifier pointer, yang berarti “value pointed by”.
Contoh ;
BhsC = *buku;
(dapat dikatakan bahwa BhsC sama dengan nilai yang ditunjuk oleh buku).
BhsC = 25, karena buku di alamat 1776, dan nilai yang berda pada lamat
1776 adalah 25.
Variabel pointer dideklarasikan dengan nama variabelnya ditulis
dengan diawali karakter asterisk. Bentuk umum :
Tipe-data *nama-variabel-pointer;
Contoh : int *data;
berarti data adalah sebuah pointer yang menunjuk ke jenis data integer.
Tipe dari variable pointer menunjukkan tipe dari data yang ditunjuknya.
25 1776
Pemberian harga awal pada variable-variabel pointer dapat
sekaligus dilakukan pada saat variable-variabel tersebut dideklarasikan.
Harga awal yang diberikan adalah alamat lokasi memory.
Contoh :
int i,j; int *intptr = &i;
atau bisa juga
int i,j, *intptr ; intptr = &i ;
intptr variable pointer ke jenis data integer dengan memberi harga awal
berupa alamat variable i.
Identifier suatu array equivalent dengan alamat dari elemen
pertama, pointer equivalent dengan alamat elemen pertama yang ditunjuk.
Perhatikan deklarasi berikut :
int numbers [20];
int *p;
Maka deklarasi di bawah ini juga benar : p = numbers; p dan
numbers equivalent, dan memiliki sifat (properties) yang sama.
Perbedaanya, user dapat menentukan nilai lain untuk pointer p. dimana
numbers akan selalu menunjuk nilai yang sama seperti yang telah
didefiniskan. P, merupakan variable pointer, numbers adalah constant
pointer. Karena walaupun instruksi di atas benar, tetapi tidak untuk
instruksi di bawah ini :
numbers = p; Karena numbers adalah array (constant pointer), dan tidak
ada nilai yang dapat diberikan untuk identifier constant (constant
identifier).
Operasi penambahan pointer merupakan suatu peningkatan nilai
pointer yang menunjukkan lokasi nilai data berikutnya di memory.
Misalkan variael pointer x menun jukkan alamat memori 1000, maka
operasi penambahan x+1 menunjukkan alamat 1000+sizeof(x).
Misalkan suatu array dengan nama x dan pariabel pointer dengan
nama p.Alamat elemen-elemen larik dimensi satu ini mulai elemen pertama
sampai dengan ke n dapat ditunjukkan sbb :
Elemen ke 1 : &x[0] atau x atau x+0 atau p atau p+0
Elemen ke 2 : &x[1] atau x+1 atau p+1
Elemen ke 3 : &x[2] atau x+2 atau p+2
Elemen ke n : &x[n-1] atau x+(n-1) atau p+(n-1)
Sedangkan untuk mengakses nilai dari elemen array dapat diakses
sbb :
Elemen ke 1 : x[0] atau *x atau *(x+0) atau *p atau *(p+0)
Elemen ke 2 : x[1] atau *(x+1) atau *(p+1)
Elemen ke 3 : x[2] atau *(x+2) atau *(p+2)
Elemen ke n : x[n-1] atau *(x+(n-1)) atau *(p+(n-1))
3) Struktur (Struct)
Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama,
dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur dapat
digunakan untuk mengelompokkan beberapa informasi yang berkaitan
menjadi sebuah satu kesatuan. Bentuk umum deklarasi struktur adalah sebagai
berikut:
struct nama_tipe_struktur
{
tipe field1;
.
.
tipe fieldN;
} variabel_struktur1, ..., variabel_strukturM;
Elemen dari struktur dapat diakses dengan menggunakan bentuk:
variabel_struktur.nama_field

Elemen-elemen dari suatu array juga dapat berbentuk sebuah struktur.


Misalnya array yang dipakai untuk menyimpan sejumlah data siswa (struct
student). Array struktur berdimensi satu ini membentuk suatu tabel, dengan
barisnya menunjukkan elemen dari array-nya dan kolomnya menunjukkan
elemen dari struktur.
B. Pembahasan Latihan
1) Nomor 1
Source Code Program :

#include <stdio.h>
#include <string.h>

void reverse(){
int hitung;
char kata[100];

printf("masukkan kata yang ingin dibalik : \n");


scanf("%s", &kata);
hitung = strlen(kata);
printf("kata setelah dibalik : \n");
for (hitung - 1; hitung > 0; hitung--)
{
printf("%c", kata[hitung - 1]);
}
printf("\n");
}
void main()
{
reverse();
}
Output Program :

Analisis Program :
Pada program reverse (pembalik) kata diatas, terlebih dahulu saya
menuliskan library yang akan saya gunakan yaitu stdio.h dan string.h. Library
string.h digunakan agar fungsi strlen saya dapat terbaca dan berfungsi untuk
menangani string maupun substring.
Disini saya mempunyai function panggil yaitu void main dan
function/prosedur yang berisi logika program pembalik (reverse) kata yaitu
void reverse. Didalam function void reverse, saya mendeklarasikan variabel
hitung bertipe integer dan array kata dengan ukuran 100 bertipe char. Program
diatas dapat dijalankan dengan menginputkan kata, pada kasus ini saya
menginputkan pensit. Selanjutnya, katayang dimasukkan tadi akan dikenali
oleh program sebagai string yang akan dihitung panjangnya dengan fungsi
strlen dan hasilnya ditampung kedalam variabel hitung.
Pada program ini, kita memerlukan perulangan for untuk membalik
string dengan nilai awal  hitung-1, variabel hitung yang menampung
panjang string harus dikurangi 1 agar indeks string pada huruf paling akhir
dapat terbaca. Kemudian, memasuki kondisi  apakah ( hitung > 0 ), apabila
bernilai true maka kata yang bertipe char akan dicetak dan apabila bernilai
false, maka variabel hitung akan di decrement  hitung--.
Program akan terus melakukan perulangan sebanyak variable jumlah
untuk membalikkan huruf dan apabila telah selesai, maka program akan
menampilkan hasil reverse string yaitu pada kasus ini adalah tisnep.
2) Nomor 2
Source Code Program :

#include<stdio.h>
#include<stdlib.h>

int i, j,matriks1[10][10], matriks2[10][10];

// function to add two matrix


void add(int m, int n)
{
int hasilPertambahan[10][10];
printf("hasil penjumlahan matrix: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
hasilPertambahan[i][j] = matriks1[i][j] + matriks2[i][j];
printf("%d \t", hasilPertambahan[i][j]);
}
printf("\n");
}
}

// function to subtract two matrix


void subtract(int m, int n)
{
int hasilPengurangan[10][10];
printf("hasil pengurangan matrix: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
hasilPengurangan[i][j] = matriks1[i][j] - matriks2[i][j];
printf("%d \t", hasilPengurangan[i][j]);
}
printf("\n");
}
}

// function to multiply two matrix


void multiply(int m, int n)
{
int hasilPerkalian[10][10];
printf("hasil perkalian matrix: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
hasilPerkalian[i][j] = matriks1[i][j] * matriks2[i][j];
printf("%d \t", hasilPerkalian[i][j]);
}
printf("\n");
}
}

void semua(int m, int n){


printf("Masukkan elemen matrix pertama: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&matriks1[i][j]);
}
}
printf("Masukkan elemen matrix kedua: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&matriks2[i][j]);
}
}
}
// main function
void main()
{
int n,m;
printf("Masukkan jumlah baris matriks: ");
scanf("%d", &m);
printf("Masukkan jumlah kolom matriks: ");
scanf("%d", &n);
elemen(m,n);
// variable to take choice
int choice;

// menu-driven
do
{
// menu untuk memilih operasi
printf("\nPilihlah operasi matriks,\n");
printf("----------------------------\n");
printf("1. Penjumlahan\n");
printf("2. Pengurangan\n");
printf("3. Perkalian\n");
printf("4. Exit\n");
printf("----------------------------\n");
printf("Enter your choice: ");
scanf("%d", &choice);

switch (choice) {
case 1:
add(m,n);
break;
case 2:
subtract(m,n);
break;
case 3:
multiply(m,n);
break;
case 4:
printf("Thank You.\n");
exit(0);
default:
printf("Invalid input.\n");
printf("Please enter the correct input.\n");
}
}while(1);
}
Output Program :

Analisis Program :
Pada program operasi matriks diatas sedikit saya tambah dengan
percabangan switch case, saya menggunakan 2 librari yaitu
#include<stdio.h>
#include<stdlib.h>
Librari stdlib.h mengandung informasi untuk fungsi alokasi memori dan
pembebasan alokasi memori pada program saya yaitu adanya fungsi exit().
Untuk membuat program penjumlahan, pengurangan, dan perkalian
matriks diperlukan prosedur/function untuk memisahkan function input,
operasi matriks dan function utama. Sebelum itu, saya telah mendeklarasikan
beberapa variabel dan array global sebagai berikut,

int i, j,matriks1[10][10], matriks2[10][10];

Terlebih dahulu saya akan menganalisis prosedur  void elemen(int


m,n) yang digunakan untuk menginputkan jumlah elemen matriks.

void elemen(int m, int n){


printf("Masukkan elemen matrix pertama: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&matriks1[i][j]);
}
}
printf("Masukkan elemen matrix kedua: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&matriks2[i][j]);
}
}
}
Berikut penjelasan source code void elemen :
 Menuliskan perintah menggunakan printf dan scanf untuk
memasukkan elemen dari matriks yang pertama
 Menggunakan perulangan for (loop for) dengan i sebagai variabel baris
dan j sebagai variabel kolom. Loop for dengan nilai awal i=0 dan
kondisi  i < m, dimana jika saya menginputkan jumlah elemen
sebanyak 2 dan i kurang dari 2 maka bernilai true, namun apabila i
bernilai false karena lebih dari 2 maka akan di increment dan apabia I
bernilai true akan masuk ke proses lopp for untuk kolom. Kedua proses
ini akan berulang hingga i dan j bernilai false.
 Apabila proses perulangan telah selesai, hasil dari inputan akan dicetak
dan melanjutkan ke proses penginputan elemen matriks yang kedua.
 Proses untuk menginputkan elemen matriks kedua sama dengan yang
pertama.

Selanjutnya yaitu menganalisis untuk program operasi matriks yang terdiri


dari penjumlahan, pengurangan, dan perkalian.

void add(int m, int n)


{
int hasilPertambahan[10][10];
printf("hasil penjumlahan matrix: \n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
hasilPertambahan[i][j] = matriks1[i][j] + matriks2[i][j];
printf("%d \t", hasilPertambahan[i][j]);
}
printf("\n");
}
}
Berikut penjelasan source code void add :
 Mendeklarasikan array hasilPertambahan dua dimensi dengan ukuran
10 bertipe integer
 Menuliskan perintah menggunakan printf untuk mencetak hasil
penjumlahan matriks
 Menggunakan perulangan for (loop for) dengan i sebagai variable baris
dan j sebagai variabel kolom. Loop for dengan nilai awal i=0 dan
kondisi  i < m, dimana jika saya menginputkan jumlah elemen
sebanyak 2 dan i kurang dari 2 maka bernilai true, namun apabila i
bernilai false karena lebih dari 2 maka akan di increment dan apabia I
bernilai true akan masuk ke proses lopp for untuk kolom.
 Apabila j bernilai true, proses akan memasuki ke logika penjumlahan
matriks yaitu
hasilPertambahan[i][j] = matriks1[i][j] + matriks2[i][j];
 Setelah itu, hasil penjumlahan dari elemen – elemen matriks akan
dicetak dan setelah semua elemen selesai diproses maka array hasil
dari logika penjulahan tersebut akan dicetak sebagai hasil
penjumlahan.

Proses yang sama berlaku untuk semua operasi matriks yaitu


pengurangan dan perkalian. Yang membedakan yaitu logikanya
dimana jika pengurangan memakai logika berikut,

hasilPengurangan[i][j] = matriks1[i][j] - matriks2[i][j];

Sedangkan untuk logika perkalian sebagai berikut,


hasilPerkalian[i][j] = matriks1[i][j] * matriks2[i][j];
Berikutnya analisis untuk program prosedur/function main,

int n,m;
printf("Masukkan jumlah baris matriks: ");
scanf("%d", &m);
printf("Masukkan jumlah kolom matriks: ");
scanf("%d", &n);
elemen(m,n);

Pertama, mendeklarasikan variabel n dan m bertipe integer


sebagai variabel baris dan kolom. Kemudian, mencetak perintah untuk
memasukkan jumlah baris dan kolom matriks yang dinginkan. Apabila
angka telah diinputkan dan dicetak, selanjutnya program akan memanggil
prosedur elemen untuk memulai proses menginputkan elemen untuk
matriks pertama dan kedua.

int choice;

// menu-driven
do
{
// menu untuk memilih operasi
printf("\nPilihlah operasi matriks,\n");
printf("----------------------------\n");
printf("1. Penjumlahan\n");
printf("2. Pengurangan\n");
printf("3. Perkalian\n");
printf("4. Exit\n");
printf("----------------------------\n");
printf("Enter your choice: ");
scanf("%d", &choice);

switch (choice) {
case 1:
add(m,n);
break;
case 2:
subtract(m,n);
break;
case 3:
multiply(m,n);
break;
case 4:
printf("Thank You.\n");
exit(0);
default:
printf("Invalid input.\n");
printf("Please enter the correct input.\n");
}
}while(1);

Setelah melalui proses penginputan baik jumlah elemen dan elemen –


elemen, akan dilanjutkan dengan proses operasi penjumlahan,
pengurangan, dan perkalian matriks dengan do-while dan percabangan
switch case. Percabangan switch case digunakan agar dapat memilih
proses aman yang ingin dilakukan, segingga hasil dari ketiga operasi tidak
langsung dicetak semua. Pada program diatas juga terdapat satu fungsi
yaitu exit() yang memerlukan library stdlib.h dimana fungsinya untuk
menghentikan program dan tidak mengembalikan nilai apapun ke sistem.

3) Nomor 3
Source code program :

void main()
{
int count = 10, *temp, sum = 7;
temp = &sum;
*temp = 32;
temp = &count;
*temp = sum;
sum = *temp * 4;

printf("count=%d, *temp=%d, sum=%d\n", count, *temp, sum);


}

void hasil() {
main();
}
Output program :

Analisis program :
 Tabel proses
Addres Value
FFF0 Count = 10 32
FFF1 temp = FFF0 FFF2
*temp = 128
FFF2 sum = 7 32 128

 Penjelasan proses
a) Karena Count = 10, sum = 7, temp = &count, maka variabel
temp mempunyai alamat dari count yaitu FFFO.
b) *temp = 32
Pada proses ini alamat dari temp yaitu FFF0 dan nilai dari
alamat tersebut menjadi 32.
c) temp = &sum
pada proses ini variabel temp akan digantikan alamat dari sum
yaitu FFF2 dan alamat dari temp yang sebelumnya FFF0 akan
berubah menjadi FFF2  temp = FFF2.
d) *temp = count
Dari temp yang semula beralamat FFF2 akan berubah nilainya
menjadi nilai count yaitu 32.
e) Sum = *temp * 4
Pada proses ini nilai dari sum adalah nilai *temp yaitu 32 dikali
dengan 4. Hasilnya yaitu 128. Nilai sum akan berubah menjadi
nilai 128 dan nilai temp juga berubah menjadi 128.
4) Nomor 4
Source code program :

#include <stdio.h>
#include <math.h>
#define N 10
float Tambah(int A[], int B[], int x){
float sum=0.0;
int i;
for(i=0; i<N; i++)
sum += (A[i]+B[i]) * (float)pow(x,i);
return sum;
}
float Kurang(int A[], int B[], int x){
float sum=0.0;
int i;
for(i=0; i<N; i++)
sum += (A[i]-B[i]) * (float)pow(x,i);
return sum;
}
float Kali(int A[], int B[], int x){
float sum=0.0;
int i, j;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
sum += (A[i]*B[j]) * (float)pow(x,(i+j));
}
}
return sum;
}
float Turunan(int A[], int B[], int x){
float sum=0.0;
int i;
for(i=0; i<N; i++)
sum += (A[i]*i) * (float)pow(x,(i-1));
return sum;
}
int main(){
int P1[N] = {15,0,0,1,0,5,0,8,6,0};
int P2[N] = {10,0,2,2,3,0,0,4,0,3};
int P3[N] = {5,0,1,0,0,0,0,0,0,0};
int x;
float hasil;
printf("Masukkan x = "); scanf("%d", &x);
hasil = Tambah(P1, P2, x);
printf("Hasil P1+P2 = %5.2f\n", hasil);
hasil = Kurang(P1, P2, x);
printf("Hasil P1-P2 = %5.2f\n", hasil);
hasil = Kali(P1, P3, x);
printf("Hasil P1*P3 = %5.2f\n", hasil);
hasil = Turunan(P1, P2, x);
printf("Hasil P1-P2 = %5.2f\n", hasil);
}

Output Program :

Analisis Program :
Pada saat membuat program aritmatika polinom diatas, terlebih dahulu
menentukan library yang digunakan yaitu

#include <stdio.h>
#include <math.h>

Fungsi dari library math.h adalah mendefinisikan berbagai fungsi matematika


dan makro dalam bahasa pemrograman C. Semua fungsi yang tersedia
pada library mengambil nilai dengan tipe double sebagai argumen dan
mengembalikan nilai double tersebut sebagai hasilnya. Sebagai cotoh, double
pow(double x, double y): fungsi pustaka double pow(double x, double
y) mengembalikan nilai x pangkat nilai y.
Selain itu, saya juga mendefinisikan variabel N dengan value 10
sebagai secara global.
Pertama, saya akan menjelaskan prosedur main dari program
aritmatika polinom tersebut,

int main(){
int P1[N] = {15,0,0,1,0,5,0,8,6,0};
int P2[N] = {10,0,2,2,3,0,0,4,0,3};
int P3[N] = {5,0,1,0,0,0,0,0,0,0};
int x;
float hasil;
printf("Masukkan x = "); scanf("%d", &x);
hasil = Tambah(P1, P2, x);
printf("Hasil P1+P2 = %5.2f\n", hasil);
hasil = Kurang(P1, P2, x);
printf("Hasil P1-P2 = %5.2f\n", hasil);
hasil = Kali(P1, P3, x);
printf("Hasil P1*P3 = %5.2f\n", hasil);
hasil = Turunan(P1, P2, x);
printf("Hasil P1-P2 = %5.2f\n", hasil);
}

Berikut penjelasan dari prosedur main diatas,


 Pertama, membuat array dari P1, P2 dan P3 dengan ukuran N dan
diinisialisasikan sesuai dengan koefisien urutan derajat pangkat pada
soal yang diberikan sebelumnya.


Dapat dilihat pada soal bahwa P1 dengan pangkat x^0 adalah 15 dan
untuk x^1 tidak memiliki koefisien atau 0, sehingga array P1[N]={
15,0,0,1,0,5,0,8,6,0}. Beigutupun untuk array P2, dan P3
dilakukan hal yang sama. Selain itu, saya juga mendeklarasikan
variabel x bertipe integer sebagai inputan yang akan dimasukkan
nantinya dan hasil bertipe float.

printf("Masukkan x = "); scanf("%d", &x);


hasil = Tambah(P1, P2, x);
printf("Hasil P1+P2 = %5.2f\n", hasil);

 Selanjutnya, menuliskan perintah menggunakan printf dan scanf untuk


memasukkan nilai dari variabel x dan memanggil prosedur operasi
aritmatika, sebagai contoh tambah pada program diatas dan ditampung
kedalam variabel hasil. Hasil dari operasi tambah kemudian dicetak.
Selanjutnya, memanggil proseduroperasi lain yaitu operasi
pengurangan, perkalian dan turunan. Proses yang sama akan terjadi
pada operasi yang lain juga.
 %5.2f artinya variabel hasil akan ditampilkan sebanyak 5 digit dengan
2 digit dibelakang koma.

float Tambah(int A[], int B[], int x){


float sum=0.0;
int i;
for(i=0; i<N; i++)
sum += (A[i]+B[i]) * (float)pow(x,i);
return sum;
}

 Prosedur Tambah dengan tipe float dan parameter array A, B dan


varibel x bertipe integer. Didalam program, mendeklarasikan dan
menginisialisasikan variabel sum bertipe float dengan value 0.0 yang
akan membantu dalam logika operasi aritmatika nantinya. Kemudian,
mendeklarasikan variabel I dan menggunakan perulangan (loop) for
dengan nilai awal i=0, kemudian apabila i < N maka i bernilai true dan
masuk kedalam logika penjumlahan
sum += (A[i]+B[i]) * (float)pow(x,i);
Pejelasan : sum = sum + (A[i]+B[i]) * (float)pow(x,i)
Fungsi pustaka pow( x, i) mengembalikan nilai x pangkat nilai i. Dan
apabila bernilai false maka i akan di increment dan nilainya bertambah.
 Setelah itu return sum untuk mengenbalikan hasil dari operasi
aritmatika polinom.
 Proses yang sama akan terjadi pada prosedur kurang, sedangkan pada
perkalian terdapat variabel lain yaitu j sebagai derajat pangkat pada
array kedua. Karena pada perkalian nilai dari derajat pangkat akan
berubah yaitu
sum += (A[i]*B[j]) * (float)pow(x,(i+j));
Dan sebelumnya variabel j juga dicekapakah kurang dari N sebelum
masuk kedalam proses logika perkalian.
 Begitupun pada prosedur turunan, pangkat yaitu variabel j harus
dikurangi satu sebagai berikut,
sum += (A[i]*i) * (float)pow(x,(i-1));
Setelah itu, hasil dari sum akan dipanggil oleh prosedur main dan
dicetak kedalam terminal oleh program.
5) Nomor 5
Source Code Program :

#include <stdio.h>
#include <math.h>

typedef struct {
float real;
float im;
} Komplek;
Komplek Tambah (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = A.real + B.real;
hasil.im = A.im + B.im;
return hasil;
}
Komplek Kurang (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = A.real - B.real;
hasil.im = A.im - B.im;
return hasil;
}
Komplek Kali (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = ((A.real*B.real)-(A.im*B.im));
hasil.im = ((A.real*B.im)+(A.im*B.real));
return hasil;
}
Komplek Bagi (Komplek A, Komplek B) {

Komplek hasil;
hasil.real =
(((A.real*B.real)+(A.im*B.im))/(pow(A.real,2)+pow(A.im,2)));
hasil.im = (((A.im*B.real)-
(A.real*B.im))/(pow(B.real,2)+pow(B.im,2)));
return hasil;
}

int main(){
Komplek k1, k2, hasil;
printf("Masukkan K1 = "); scanf("%f %f", &k1.real, &k1.im);
printf("Masukkan K2 = "); scanf("%f %f", &k2.real, &k2.im);
hasil = Tambah(k1,k2);
printf("Hasil k1 + k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Kurang(k1,k2);
printf("\nHasil k1 - k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Kali(k1,k2);
printf("\nHasil k1 * k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Bagi(k1,k2);
printf("\nHasil k1 / k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
}

Output Program :

Analisis Program :
Didalam program tersebut terdapat 2 library yaitu

#include <stdio.h>
#include <math.h>
Fungsi dari library math.h adalah mendefinisikan berbagai fungsi matematika
dan makro dalam bahasa pemrograman C. Program ini terdiri dari beberapa
prosedur diantaranya prosedur/function main dan operasi hitung bilangan
kompleks. Penggunaan library ini digunakan karena didalam program terdapat
penggunaan fungsi pow untuk perpangkatan.
Pertama, membuat alias nama untuk tipedata agar dapat
memepersingkat penulisan. Pada program ini komplek merupakan
keywordnya.

typedef struct {
float real;
float im;
} Komplek;
Kemudian, sebelum penjelasan prosedur operasi, saya akan menjelaskan
prosedur/function main sebagai berikut,
int main(){
Komplek k1, k2, hasil;
printf("Masukkan K1 = "); scanf("%f %f", &k1.real, &k1.im);
printf("Masukkan K2 = "); scanf("%f %f", &k2.real, &k2.im);
hasil = Tambah(k1,k2);
printf("Hasil k1 + k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Kurang(k1,k2);
printf("\nHasil k1 - k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Kali(k1,k2);
printf("\nHasil k1 * k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
hasil = Bagi(k1,k2);
printf("\nHasil k1 / k2 = %5.2f + %5.2fi", hasil.real,
hasil.im);
}
 Terlebih dahulu mendeklarasikan variabel k1, k2, hasil bertipe float
 Mencetak perintah untuk memasukkan K1 dan K2 dengan
menggunakan printf dan scanf
 Setelah itu, proses pemanggilan function/prosedur operasi tambah,
kurang, kali, dan bagi.
 Mencetak hasil pengoperasian bilangan kompleks.

Didalam prosedur operasi bilangan Komplek dibuat dengan merujuk pada


rumus atau logika yang ada pada soal yaitu

Source code :

Komplek Tambah (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = A.real + B.real;
hasil.im = A.im + B.im;
return hasil;
}
Pada prosedur Tambah dengan parameter Komplek A dan B yang
bertipe float, terlebih dahulu mendeklarasikan variabel hasil dengan tipe
yang sama. Kemudian, program masuk kedalam logika operasi aritmatika
bilangan kompleks. Pada penjumlahan, bilangan real dan imaginer
dioperasika secara terpisah, dengan A.real sebagai a dan B.real sebagai c
dijumlah dan mendapatkan hasil.real yaitu (a+c). Dan begitu juga pada
bilangan imaginer, A.im sebagai bi dan B.im sebagai di dijumlahkan,
sehingga mendapatkan hasil.im yaitu (b+d)i.

Komplek Kurang (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = A.real - B.real;
hasil.im = A.im - B.im;
return hasil;
}
Hal yang sama juga terjadi pada function/prosedur Kurang, dimana
pada pengurangan, bilangan real dan imaginer dioperasika secara terpisah,
dengan A.real sebagai a dan B.real sebagai c dikurangi dan mendapatkan
hasil.real yaitu (a-c). Dan begitu juga pada bilangan imaginer, A.im
sebagai bi dan B.im sebagai di dikurangi, sehingga mendapatkan hasil.im
yaitu (b-d)i.

Komplek Kali (Komplek A, Komplek B) {

Komplek hasil;
hasil.real = ((A.real*B.real)-(A.im*B.im));
hasil.im = ((A.real*B.im)+(A.im*B.real));
return hasil;
}
Pada prosedur/function Kali, pada operasi perkalian bilangan real
maka A.real sebagi a dan B.real sebagai c dikali terlebih dahulu, kemudian
dikurangi dengan A.im sebagai b dikali dengan B.im sebagai d.

Begitu juga pada bilangan imaginer, dimana A.real sebagai a dan B.im
sebagai di dikalikan terlebih dahulu kemudian dijumlah dengan A.im
sebagai bi dikalikan dengan B.real sebagai c.

}
Komplek Bagi (Komplek A, Komplek B) {

Komplek hasil;
hasil.real =
(((A.real*B.real)+(A.im*B.im))/(pow(A.real,2)+pow(A.im,2)));
hasil.im = (((A.im*B.real)-
(A.real*B.im))/(pow(B.real,2)+pow(B.im,2)));
return hasil;
}
Pada operasi Bagi bilangan kompleks, terdapat perbedaan dimana
terjadi proses perpangkatan didalamnya yang membutuhkan pow()
didalam prosedur Komplek Bagi.

Pada proses pembagian, Hasil bilangan real diperoleh dari A.real atau a
akan dikalikan dengan B.real atau c terlebih dahulu, kemudian
dijumlahkan dengan A.im atau b dikalikan dengan B.im atau d. Dan
setelah itu, dibagi dengan hasil A.real atau a dipangkatkan 2 dijumlahkan
dengan B.real atau c dipangkatkan 2. Begitupun pada operasi pembagian
bilangan imaginer diperoleh dari A.im atau b akan dikalikan dengan B.real
atau c terlebih dahulu, kemudian dikurangi dengan B.im atau d dikalikan
dengan A.real atau a. Dan setelah itu, dibagi dengan hasil A.im atau b
dipangkatkan 2 dijumlahkan dengan B.im atau d dipangkatkan 2.

Setelah semua proses operasi selesai maka program akan


mengembalikan variabel hasil dan kemudian dicetak setelah dipanggil oleh
function main. Sehingga mendapatkan output sebagai berikut,

Selanjutnya, saya akan membahas mengenai kesimpulan dari


melakukan praktikum array, pointer, dan struct ini.
C. Kesimpulan
1) Array adalah suatu kumpulan data homogeny yang ukuran atau jumlah elemen
maksimumnya telah diketahui dari awal.
2) Algoritma adalah barisan Langkah – Langkah perhitungan dasar yang
mengubah masukan menjadi keluaran.
3) Pointer adalah suatu variable yang berisi alamat memori dari suatu variable
lain.
4) Struktur adalah kumpulan variable yang dinyatakan dengan sebuah nama,
dengan sifat variable dapat memilih tipe yang berlainan.
5) Struktur data adalah sebuah skema organisasi, seperti struktur dan array yang
diterapkan pada data sehingga data dapat diintepretasikan dan operasi –
operasi spesifik dapat dilaksanakan pada data tersebut.

Anda mungkin juga menyukai