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&lt;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&lt;n; i++) sum+=a[i]; return sum;

  int x[5] = {1,4,2,-3,9};

  int sumarray(int a[], int a);

  #include &lt;stdio.h&gt;

  • 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 &lt;stdio.h&gt; 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&lt;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", &amp;m, &amp;n); // membaca elemen matriks for (i=0; i&lt;m; i++) for (j=0; i&lt;n; j++) scanf("%d", &amp;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 &lt;stdio.h&gt; #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&lt;5;i++) for (i=0; i&lt;m; i++) for(j=0;j&lt;4;j++) x[i][j]=k++; for (j=0; j&lt;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 &lt;stdio.h&gt;

  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&lt;m; i++)

  int x[5][4],i,j,k=1;

  for (j=0; j&lt;n; j++) { printf("%d", a[i][j]);

  for(i=0;i&lt;5;i++)

  printf((n-1)==j ? "\n" : " ");

  for(j=0;j&lt;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&lt;m; i++)

  5 6 7 8

  for (j=0; j&lt;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&lt;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&lt;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