Array satu dimensi (1D)
Array
- Dalam m at em at ika dikenal variabel berindeks
x , x , x , …, x . Angka 0, 1, 2, …, n-1 pada
1 2 n-1
variabel x disebut sebagai indeks at au subscript .
Algorit me dan Pemrograman
- Variabel berindeks diim plem ent asikan dalam
Kuliah #8 program berupa array x[0], x[1], x[2], …, x[n- 1], dengan n adalah ukuran array.
Array
- Selang nilai yang valid bagi indeks suat u
variabel array berukuran n adalah 0 sam pai dengan n-1. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Array Array sat u dimensi (1D)
- Definisi: kumpulan elemen bert ipe dat a sama
yang diakses dengan nama yang sama
- Cont oh:
- Deklarasi:
int a[5]; data-type array-name[size]; float x[10];
- Array dapat dibedakan menjadi:
int d[3]={0}; Array
- – berdimensi sat u (1D) vekt or di M at emat ika
int c[]={-45, 6, 0, 72, 1543};
- – Array
berdimensi dua (2D) mat riks di M at emat ika
- – Array
berdimensi banyak
- Elemen array disimpan di memori secara
berurut an DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Alokasi memori Alokasi memori
• Array harus dideklarasikan t erlebih dahulu. dat a- Indeks: 0, 1, 2, …, size-1
- lain
Array dapat dideklarasikan secara global di
luar fungsi m ain, m aupun secara lokal di
- Jika m engakses indeks di
a[0] a[1] dalam suat u fungsi.
luar selang, m aka akan
a[2] diperoleh dat a lain. a[3] a[4]
- Cont oh:
a[5] x int a[6]; dat a int x; DEPARTEMEN ILMU KOMPUTER lain DEPARTEMEN ILMU KOMPUTER
#include <stdio.h> #include <stdio.h> int main() { int a[100]; int main() { int i; int a[3], b[4] ={4,5,2,3}; scanf("%d", &n); // baca banyaknya data int c[] = {3,2,1}, d[4] = {0}; int e[5] = {1}, f[];
// membaca masukan dan disimpan ke array for (i=0; i<n; i++) scanf("%d", &a[i]); printf("%d %d %d\n", a[0], b[1], c[2]); printf("%d %d %d\n", d[3], e[4], f[5]); printf("%d\n", a[n/2]); // akses isi array return 0; return 0; }
} Cont oh m asukan: 3 20 34 21 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Penjelasan M enghit ung jumlah isi array
#include <stdio.h>
- Gagal kom pilasi karena dim ensi f t idak
#define SIZE 5 dinyat akan baik secara explisit m aupun int main() { im plisit int a[SIZE] = {1, 3, 5, 4, 7};
- – Berikan dim ensi, m isalnya: f[10] int i, total = 0;
- Set elah diperbaiki:
for (i=0; i<SIZE; i++) total += a[i];
- – a[0] t idak diket ahui karena t idak diinisialisasi
- – b[1] = 5, c[2] = 1, d[4] = 0, e[5] = 0 printf("%d\n", total );
- Jika hanya sebagian yang diinisialisasi, sisanya
return 0; } bernilai 0 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Akses array di luar batas indeks Lat ihan #include <stdio.h>
1. Program unt uk m enghit ung rat a-rat a nilai
int main() {
dalam suat u array
int a[5] = {1, 3, 5, 4, 7};
2. Program unt uk m enent ukan keberadaan
printf("%d\n", a[6] );
suat u nilai dalam suat u array
return 0;
3. Program unt uk m enent ukan nilai m inim um
}
dan m aksim um dalam suat u array Apakah t erjadi error pada saat di-compile at au di-run? M engapa hal t ersebut t erjadi? DEPARTEMEN ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER
- Seperti variabel lainnya, array juga dapat digunakan sebagai argum en dari fungsi.
- Nilai variabel array yang didekrasikan sebagai param eter fungsi
- Contoh deklarasi array dalam fungsi: int printarray(int n, int a[n]) { … }
- Perhatikan bahw a param eter n harus disebut sebelum a[n] DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR<
- Dimensi array 1D pada funct ion header t idak harus
int main() {
} DEPARTEMEN ILMU KOMPUTER
int main() { int x[] = {5,2,-1,7,-3}; printarray(x, 5); fliparray(x,5); printarray(x, 5); fliparray(x,3); printarray(x, 5); return 0;
} } DEPARTEMEN ILMU KOMPUTER
void fliparray(int a[], int n) { int i, temp; for (i=0; i<n/2; i++){ temp = a[i]; a[i] = a[n-i-1]; a[n-i-1] = temp;
} DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
printf("%d", sumarray(x,5)); return 0; } int sumarray( int a[], int n) { int i, sum = 0; for (i=0; i<n; i++) sum+=a[i]; return sum;
int x[5] = {1,4,2,-3,9};
int sumarray(int a[], int a);
#include <stdio.h>
- Jika dimensi t idak dinyat akan, t idak harus muncul
- Ukuran array menjadi paramet er (n pada cont oh)
- Tipe void digunakan jika fungsi t idak mengembalikan
- – Serupa dengan prosedur dalam term inologi bahasa
pem rogram an lain DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Fungsi M enjumlahkan Elemen Array
suat u nilai
set elah paramet er penampung dimensi (n pada cont oh)
dinyat akan void printarray( int a[], int n) at au void printarray( int a[*], int n)
Pengiriman Array 1D ke Fungsi
#include <stdio.h> void printarray(int n, int a[n]); // atau: void printarray(int n, int a[]); int main() { int x[5] = {1,4,2,-3,9}; printarray(x,5); return 0; } void printarray(int n, int a[n], int n) { int i; for (i=0; i<n; i++) printf("%d ", a[i]); } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
akan m em pengaruhi nilai variabel array pada fungsi pem anggilnya (call by reference) (dibahas dalam topik point er).
Array
Fungsi M embalik Elemen Array
Keluaran?
x Array
Array int a[100][100];
- Dapat disepadankan dengan m at riks int i, j;
- Array yang t erdiri at as array
- Cont oh:
// minta dimensi masukan int b[][] = {{2,4,1}, {5,3,7}}; scanf("%d %d", &m, &n); // membaca elemen matriks for (i=0; i<m; i++) for (j=0; i<n; j++) scanf("%d", &a[i][j]); float x[3][4]; DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Array
2D di memori Pengiriman Array 2D ke Fungsi
- Dim ensi kedua unt uk array 2D pada funct ion
- dat a
Elem en berurut an di
a[m][n] header harus dinyat akan: , lain
m em ori
a[*][*] , a[][*] , at au a[][n]
a[0][0]
M isal: Ukuran array m enjadi param et er (m dan n
a[0][1]
pada cont oh) int a[2][3] a[0][2]
a[1][0]
- Array
2D dapat dikirim ke fungsi yang
- a[2][1]
Sepert i array 1D berapa
a[3][2]
m engharapkan array 1D elem en?
x
- – Ingat array 2D = array yang elem ennya adalah
dat a array lain DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR – Elem en 2D juga berurut an DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Perhat ikan fungsi berikut yang Keluaran? dimaksudkan mencetak mat rix
#include <stdio.h> #define M 100 #define N 100 int main() { int x[5][4],i,j,k=1; void printmatrix0
(int a[M][N], int m, int n) { int i, j; for(i=0;i<5;i++) for (i=0; i<m; i++) for(j=0;j<4;j++) x[i][j]=k++; for (j=0; j<n; j++) { printf("%d ", a[i][j]); printf((n-1)==j ? "\n" : " "); printarray(x, 20);
} return 0;
} } DEPARTEMEN ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER Keluaran? #include <stdio.h>
void printmatrix1
#define M 100 #define N 100 (int m, int n, int a[m][n]) {
int i, j;
int main() {
for (i=0; i<m; i++)
int x[5][4],i,j,k=1;
for (j=0; j<n; j++) { printf("%d", a[i][j]);
for(i=0;i<5;i++)
printf((n-1)==j ? "\n" : " ");
for(j=0;j<4;j++) x[i][j]=k++;
} }
printmatrix0(x, 5, 4); return 0; } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR atau
Penjelasan
- #define M 100
Fungsi printmatrix0 dan printmatrix2
#define N 100
mengharapkan paramet er berupa array 100x100 (karena M dan N digant i dengan 100)
void printmatrix2
- Bandingkan a[100][100] dan b[5][4]:
(int a[M][N], int m, int n) { Urut an a[0][0] s/ d a[0][3] sama dengan urut an b[0][0]
- – int i=0, j=0, x = m*n;
s/ d b[0][3], t et api while (x--) {
- – Elemen berikut nya di a adalah a[0][4] sedangkan di b
printf("%d", a[i][j]); adalah b[1][0] j++;
- Hasilnya, keluaran printmatrix0 pada hanya
if(j==N) (j=0, i++);
benar unt uk baris pert ama
printf(0==(j%n)? "\n" : " ");
- }
Pada printmatrix2 indeksnya disesuaikan
} DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR dengan array 100x100 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Catatan Fungsi memutar mat riks
- Fungsi printmatrix1 dan printmatrix2 hanya void putar
benar unt uk mencet ak semua elemen array 2D (int m, int n, int a[m][n], int b[n][m])
- M isal a[2][4]:
{ int i, j;
1 2 3 4
for (i=0; i<m; i++)
5 6 7 8
for (j=0; j<n; j++) M encet ak dengan m = 2 dan n = 3: b[j][i]=a[i][j];
1 2 3
}
4 5 6
- Bukan: 1 2 3 5 6 7 DEPARTEMEN ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER
- Buat program m em baca m atriks a berukuran mxn dan Perhat ikan fungsi berikut :
m enam pilkannya secara zigzag seperti skem a berikut:
void misteri(int a[SIZE], int n) { if (n) { printf("%d\n", a[n-1]); misteri(a, n-1);
- Contoh input (baris pertam a adalah m dan n):
}
4 4
}
1 3 2 1 8 4 3 2
Apa keluaran pot ongan program berikut : 1 2 3 4
int x[SIZE]={2, 4, 5, 3, 1};
9 8 7 6
misteri(x, 5);
- Contoh output: DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR 1 3 2 1 2 3 4 8 1 2 3 4 6 7 8 9 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Hit ung elemen 1 for (i=0; i<n; i++)
- Buat program membaca matriks a berukuran mxn dimana elemen
{ matriks adalah {0,1}, dan menampilkan banyaknya elemen 1 pada if(i%2!=0) setiap kolomnya. {
- for (j=n-1;j
Contoh input (baris pertama adalah m dan n): ≤0;j--) printf(" %d",a[i][j]);
4 4 }
1 0 1 1 else
0 0 0 0 {
0 0 0 1 for (j=0; j<m; j++)
1 1 1 1 printf(" %d",a[i][j]);
- Cont oh out put :
2 1 2 3 } } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR