Dokumen tersebut membahas penggunaan array dua dimensi dalam bahasa C untuk mengolah data mahasiswa dan mata kuliah yang diambilnya. Struktur data yang digunakan adalah record untuk mewakili mahasiswa dan mata kuliah, serta array of record untuk mewakili daftar mahasiswa."
3. Materi Sebelumnya
Ukuran Efektif Array
Menginisialisasi Array
Mengisi elemen array dengan pembacaan
Mencetak elemen-elemen array
Menghitung nilai rata-rata
Mencari nilai maksimum
Mencari nilai minimum
Menyalin array
Menguji kesamaan dua buah array
Pemrosesan Array
4. Pelajaran dari Materi Sebelumnya
Array adalah struktur data yang menyimpan
sekumpulan elemen yang bertipe sama.
Setiap elemen diakses langsung melalui
indeksnya.
Array adalah struktur yang statis, artinya jumlah
elemen array harus sudah diketahui sebelum
program dieksekusi.
6. Array Bertipe Terstruktur
Misalkan kita akan mengolah data 31 orang mahasiswa.
Data setiap mahasiswa terdiri atas NPM, nama mahasiswa, dan
IPK (nilainya berkisar antara 0..4)
NIM NamaMhs IPK
1 1402007021 Wisnu Guritno 3.15
2 1402009003 Andri Ilham 3.25
:
:
31 1402011026 Siti Maria Ulfah 3.30
7. Struktur array yang menyimpan data mahasiswa tersebut
dideklarasikan di bawah ini:
#define Nmaks 32
typedef char String[25];
typedef struct{
int NPM;
String NamaMhs;
float IPK;
}Mahasiswa;
typedef Mahasiswa TabMhs[Nmaks];
TabMhs Mhs;
DEKLARASI
const Nmaks = 32
type Mahasiswa : record
<NPM : integer,
NamaMhs : string,
IPK : real
>
type TabMhs : array[1..Nmaks]
of Mahasiswa
Mhs : TabMhs
Bahasa CNotasi Algoritmik
Pendefinisian tipe data
String berupa array
karakter
Pendeklarasian variable
Mhs dengan tipe data
TabMhs
Pendefinisian tipe data
TabMhs berupa array of
mahasiswaPendefinisian tipe data
terstruktur dengan nama
Mahasiswa
8. Cara Mengacu Elemen
Cara Mengacu Elemen Mhs
Mhs[2] {elemen kedua dari
array Mhs}
Mhs[2].NPM {mengacu field NIM dari
elemen kedua array}
Mhs[2].IPK {mengacu field IPK dari
elemen kedua array}
9. Karena record merupakan struktur, maka kita tidak dapat
melakukan pencetakan elemen array Mhs seperti di bawah ini:
Tetapi haruslah seperti berikut:
Namun cara mengisi nilai elemen ke elemen lainnya dengan
penulisan seperti di bawah ini adalah benar:
Yang sama saja dengan :
write(Mhs[i])
write(Mhs[i].NPM, Mhs[i].NamaMhs, Mhs[i].IPK)
Mhs[i] Mhs[i+1]
Mhs[i].NPM Mhs[i+1].NPM
Mhs[i].NamaMhs Mhs[i+1].NamaMhs
Mhs[i].IPK Mhs[i+1]. IPK
10. procedure BacaDataMahasiswa(input n : integer, output
Mhs : TabMhs)
{Membaca data mahasiswa (NIM, nama, IPK)}
{K. Awal : n berisi jumlah data mahasiswa}
{K. Akhir : Mhs berisi data hasil pembacaan}
DEKLARASI
i : integer
ALGORITMA:
for i 1 to N do
read(Mhs[i].NIM)
read(Mhs[i].NamaMhs)
read(Mhs[i].IPK)
endfor
Algoritma Mengisi Array Mhs
12. void CetakArray(ArrayInt A, int n)
/* Mencetak elemen-elemen array [1..n] */
Cara pemanggilan : CetakArray(A, n)
Prototipe prosedur di atas ekivalen dengan penulisan berikut:
void CetakArray(int A[], int n)
/* Mencetak elemen-elemen array [1..n] */
/* ukuran array boleh tidak perlu karena diset di program utama */
atau ekivalen dengan:
void CetakArray(int *A, int n)
/* Mencetak elemen-elemen array [1..n] */
Catatan:
Array dalam bahasa C adalah pointer, sehingga dapat ditulis int *A saja.
Array sebagai Parameter Masukan
13. void BacaArray(ArrayInt A, int n);
/* Mengisi elemen-elemen array A[1..n]*/
Cara pemanggilan : BacaArray(A, n)
Catatan :
Karena array dalam bahasa C adalah pointer, maka tidak diperlukan karakter * di
awal nama parameter tersebut.
Array sebagai Parameter Keluaran
14. void UrutArray(ArrayInt A, int n);
/* Mengurut elemen-elemen array A[1..n] sehingga
tersusun menaik */
Cara pemanggilan : UrutArray(A, n)
Catatan :
Karena array dalam bahasa C adalah pointer, maka tidak diperlukan karakter * di
awal nama parameter tersebut.
Array sebagai Parameter Masukan/Keluaran
16. Array of Array
Selain bertipe terstruktur, elemen array juga dapat
bertipe array lain.
Misalnya kita ingin mengolah data nilai semua mata
kuiah yang diambil setiap mahasiswa di semester
genap.
Asumsikan setiap mahasiswa mengambil 4 buah mata
kuliah yang berbeda.
Setiap elemen array berisi data sebagai berikut :
NPM
NamaMhs
Mata kuliah (MK) yang diambil mahasiswa tersebut (4
buah) berupa array.
17. Mata Kuliah berupa array:
Kode mata kuliah ke-1
Nama mata kuliah ke-1
Nilai mata kuliah ke-1
Kode mata kuliah ke-2
Nama mata kuliah ke-2
Nilai mata kuliah ke-2
Kode mata kuliah ke-3
Nama mata kuliah ke-3
Nilai mata kuliah ke-3
Kode mata kuliah ke-4
Nama mata kuliah ke-4
Nilai mata kuliah ke-4
18. Struktur array yang menyimpan data tersebut dideklarasikan di bawah ini.
Nama array adalah Mhs2
DEKLARASI
const Nmaks = 100
type MataKuliah : record <KodeMK : string,
Nilai : char
>
type Mahasiswa : record <NIM : integer,
NamaMhs : string,
MK : array[1..4] of MataKuliah
>
type TabMhs : array[1..Nmaks] of Mahasiswa
Mhs2 : TabMhs
19. Bekerja dengan dua buah Array
Dua buah array atau lebih dapat dioperasikan
sekaligus.
Misalkan nilai ujian mahasiswa telah disimpan
di dalam array NilUjian.
Kita akan menghitung nilai indeks (A/B/C/D/E)
mahasiswa tersebut dan menyimpan nilai
indeks tersebut di dalam array Indeks.
20. Indeks nilai ujian ditentukan sebagai berikut:
Deklarasi data:
NilUjian(k) 80 , indeks nilai = A
70 NilUjian(k) < 80 , indeks nilai = B
55 NilUjian(k) < 70 , indeks nilai = C
45 NilUjian(k) < 55 , indeks nilai = D
NilUjian(k) < 45 , indeks nilai = E
DEKLARASI
const Nmaks = 200
type ArrayUjian : array[1..Nmaks] of real
type ArrayIndeks : array[1..Nmaks] of char
21. procedure HitungIndeksNilai(input NilUjian : ArrayUjian, input n : integer,
output Indeks : Array Indeks)
{Menghitung indeks nilai ujian n orang mahasiswa}
{K. Awal : n sudah berisi jumlah mahasiswa; elemen array NilUjian[1..n] sudah
terdefinisi harganya}
{K. Akhir : array Indeks [1..n] berisi nilai indeks ujian}
DEKLARASI
i : integer {indeks array}
DESKRIPSI
for k 1 to n do
if NilUjian[i] 80 then
Indeks[i] A
else
if (NilUjian 70) and (NilUjian[i] < 80) then
Indeks[i] B
else
if (NilUjian 55) and (NilUjian[i] < 70) then
Indeks[i] C
else
if (NilUjian 45) and (NilUjian[i] < 55) then
Indeks[i] D
else Indeks[i] E
endif
endif
endif
endif
Prosedur mengitung nilai indeks
22. procedure CetakNilai(input NilUjian : ArrayUjian, input Indeks :
ArrayIndeks, input n : integer)
{mencetak tabel yang berisi nilai ujian dan indeks nilainya. Nomor peserta
ujian sesuai dengan nomor indeks array}
{K. Awal : NilUjian[1..N] dan Indeks[1..n] sudah terdefinisi elemen-
elemennya}
{K. Akhir : nilai ujian dan nilai indeksnya tercetak}
DEKLARASI
i : integer {indeks array}
ALGORITMA
{cetak header table}
write(-----------------------------------------)
write( No Nilai Ujian Indeks )
write(-----------------------------------------)
{cetak nilai ujian dan indeks mahasiswa ke-i}
for i i to N do
write(i, ,NilUjian[i], , Indeks[i])
{cetak garis penutup}
write(-----------------------------------------)
Prosedur mencetak tabel array
23. String sebagai Array Karakter
String pada hakikatnya adalah array karakter dengan panjang
dinamis, artinya ukuran array baru ditentukan pada saat program
running.
Karena string adalah array, maka elemen-elemen string yang berupa
karakter dapat diakses melalui indeks.
Contoh, jika s adalah peubah bertipe string, dan s berisi konstanta
string : ini string
Maka dapat dikatakan bahwa s panjangnya 10 karakter dan elemen-
elemennya adalah:
s[1] = i s[2] = n s[3] = i s[4] =
s[5] = s s[6] = t s[7] = r s[8] = i
s[9] = n s[10] = g
24. Dalam bahasa C, peubah bertipe string dideklarasikan dengan array bertipe char
beserta panjangnya, seperti contoh berikut :
Dalam Bahasa C, array karakter diakhiri dengan karakter null 0 sehingga program
dapat menemukan akhir string. Sebagai contoh, string
Disimpan di dalam array seperti berikut :
Indeks string adalah dari 0 sampai n. n adalah panjang string.
Dalam bahasa C, string kosong adalah array yang panjangnya 0 dan hanya diisi
dengan karakter 0
char String[20];
ini string
i n i s t r i n g 0
25. Menghitung Panjang String
Panjang string dihitung dengan memindai (scan) elemen-elemen array
karakter sampai ditemukan karakter 0
int Panjang(char s[])
/* mengembalikan panjang string */
{
int i;
i = 0;
while (s[i] != 0)
i = i + 1;
/* end while */
/* s[i] = 0 */
return i;
}
26. Menyalin string
void SalinString(char s1[], char s2[])
/* menyalin string s1, menghasilkan string s2
K. Awal : s1 sudah terdefinisi
K. Akhir : s2 adalah salinan s1, termasuk 0
*/
{
int i;
i = 0;
while (s1[i] != 0)
{
s2[i] = s1[i];
i = i + 1;
}
/* end while */
/* s1[i] = 0 */
s2[i] = 0;
}
27. Fungsi Standard C untuk Salin String
Bahasa C sudah menyediakan fungsi standard
untuk menyalin string, yaitu strcpy. Fungsi ini
didefinisikan dalam file header <string.h>
strcpy(t, s); /* copy s ke t */
28. boolean ApakahSama(char s1[], char s2[])
// 1 jika s1==s2, atau 0 jika s1 != s2
{
int i;
boolean sama;
sama = TRUE; // asumsikan sementara bahwa s1 dan s2 sama
// cek panjang string
printf("panjang s1 = %dn", strlen(s1));
printf("panjang s2 = %dn", strlen(s2));
if (strlen(s1) != strlen(s2)) // s1 dan s2 tidak sama panjangnya
sama = FALSE;
else
// panjang s1 dan s2 sama, cek kesamaan elemen-elemennya
{
i = 1;
while (s1[i] != '0' && sama)
if (s1[i] == s2[i])
i=i+1;
else // s1[i] != s2[i], maka dapat disimpulkan s1!=s2
sama = FALSE;
//end if
//end while
//s[i] = '' || not sama
}
return sama;
}
Membandingkan dua buah string
30. #include <stdio.h>
#define Nmaks 50
typedef char String[25];
typedef struct{
String KodeMK;
int Nilai;
}MataKuliah;
typedef struct{
int NPM;
String NamaMhs;
MataKuliah MK[4];
}Mahasiswa;
typedef Mahasiswa TabMhs[Nmaks];
void InisialisasiArray(int n, TabMhs Mhs);
void BacaDataMahasiswa(int n, TabMhs Mhs);
void TulisDataMahasiswa(int n, TabMhs Mhs);
Deklarasi
31. main()
{
TabMhs Mhs;
int n;
printf("Masukkan jumlah mahasiswa : ");
scanf("%d",&n);
InisialisasiArray(n, Mhs);
BacaDataMahasiswa(n, Mhs);
TulisDataMahasiswa(n, Mhs);
system("PAUSE");
}
Program Utama
32. void InisialisasiArray(int n, TabMhs Mhs)
{
/* Menginisialisasi array dengan nilai tertentu
K. Awal : n berisi jumlah data mahasiswa
K. Akhir : Array Mahasiswa sudah diinisialisasi */
int i, j;
for (i=1; i<=n;i++)
{
Mhs[i].NPM = 0;
Mhs[i].NamaMhs[i] = ' ';
for (j=0; j<=4; j++)
{
Mhs[i].MK[j].KodeMK[j] = ' ';
Mhs[i].MK[j].Nilai = 0;
}
}
}
Prosedur Inisialisasi Array
33. void BacaDataMahasiswa(int n, TabMhs Mhs)
{
/* Membaca data mahasiswa (NIM, nama, IPK)
K. Awal : n berisi jumlah data mahasiswa
K. Akhir : Mhs berisi data hasil pembacaan */
int i,j;
for (i=1;i<=n;i++)
{
printf("Data Mahasiswa ke-%d n", i);
printf("Masukkan NPM Mahasiswa :"); scanf("%d",&Mhs[i].NPM);
printf("Masukkan Nama Mahasiswa :"); scanf("%s",&Mhs[i].NamaMhs);
for (j=1;j<=4;j++)
{
printf("Mata Kuliah ke-%d n",j);
printf("Nama Matakuliah :"); scanf("%s",&Mhs[i].MK[j].KodeMK);
printf("Nilai :"); scanf("%d",&Mhs[i].MK[j].Nilai);
}
}
}
Prosedur BacaDataMahasiswa
34. void TulisDataMahasiswa(int n, TabMhs Mhs)
{
/* Membaca data mahasiswa (NIM, nama, IPK)
K. Awal : n berisi jumlah data mahasiswa
K. Akhir : Mhs berisi data hasil pembacaan */
int i,j;
for (i=1;i<=n;i++)
{
printf("Data Mahasiswa ke-%d n", i);
printf("NPM Mahasiswa : %d n", Mhs[i].NPM);
printf("Nama Mahasiswa : %s n", Mhs[i].NamaMhs);
for (j=1;j<=4;j++)
{
printf("Mata Kuliah ke-%d : n",j);
printf("Nama Matakuliah : %s n", Mhs[i].MK[j].KodeMK);
printf("Nilai : %d n", Mhs[i].MK[j].Nilai);
}
}
}
Prosedur TulisDataMahasiswa
35. Referensi
Munir, Rinaldi. (2011). Algoritma &
Pemrograman dalam Bahasa Pascal dan C.
Edisi Revisi. Penerbit Informatika : Bandung.
Bab 12 : Larik