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
Menyatakan bahwa variabel nilai bertipe array float dan memiliki 5 elemen
bertipe float.
#include <stdio.h>
#include <string.h>
void reverse(){
int hitung;
char kata[100];
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>
// 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 n,m;
printf("Masukkan jumlah baris matriks: ");
scanf("%d", &m);
printf("Masukkan jumlah kolom matriks: ");
scanf("%d", &n);
elemen(m,n);
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);
3) Nomor 3
Source code program :
void main()
{
int count = 10, *temp, sum = 7;
temp = ∑
*temp = 32;
temp = &count;
*temp = sum;
sum = *temp * 4;
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>
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);
}
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.
#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.
Source code :
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 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 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.