Pemrograman Kompetitif
  • Menu utama
    • Selamat Datang
  • Umum
    • Pengenalan Pemrograman
    • Pengenalan Pemrograman Kompetitif
    • Pengenalan Kontes
    • Sumber Belajar
    • Pengenalan C++
  • Pemrograman Dasar
    • Struktur Program
    • Variabel dan Tipe Data
    • Masukan dan Pengeluaran
    • Operator
    • Percabangan
    • Perulangan
      • While Loop
      • For Loop
        • Nested For Loop
        • Ranged-based for loop
      • Break dan Continue
    • Array
    • Pendalaman String
    • Fungsi
    • Rekursi
    • Analisis Kompleksitas
  • Struktur Data
    • Struktur Data Linear
      • Array Dinamis
      • Stack dan Queue
      • Struktur Set
      • Struktur Map
    • Struktur Data Non-Linear
      • Disjoint Set Union
      • Binary Heap
      • Hash Table
      • Segment Tree
  • Pencarian dan Pengurutan
    • Algoritma Pengurutan
      • Bubble Sort
      • Selection Sort
      • Insertion Sort
      • Counting Sort
      • Merge Sort
      • Bogosort
    • Algoritma Pencarian
      • Linear Search
      • Binary Search
  • Paradigma Penyelesaian Masalah
    • Complete Search
      • Complete Search Iteratif
      • Complete Search Rekursif
    • Divide and Conquer
    • Greedy
    • Dynamic Programming
  • Graf
    • Representasi Graf
      • Adjacency list
      • Adjacency matrix
      • Edge list
    • Penjelajahan Graf
      • DFS (Depth-first search)
      • BFS (Breadth-first search)
    • Tree
  • Matematika
  • Geometri
  • Teori Bilangan
  • Kombinatorika
  • Tentang
    • Tentang Website Ini
    • Tim Kami
Powered by GitBook
On this page
  • Motivasi
  • ★Array Multidimensi
  • Alokasi Memori (Opsional)
  • Daftar Soal
  1. Pemrograman Dasar

Array

Penulis: Sayed, Danniel

PreviousBreak dan ContinueNextPendalaman String

Last updated 2 years ago

Dalam pemograman, array adalah sebuah struktur data yang dapat menyimpan sekumpulan elemen yang mana setiap elemen diidentifikasan dengan sebuah indeks. Indeks pada array dimulai dari indeks 0. Kita akan membahas struktur data lebih dalam pada bab .

Motivasi

Misalkan kita memiliki suatu permasalahan yang membutuhkan 100 atau lebih variabel. Tidak mungkin kita mendeklarasikan 100 atau lebih buah variabel secara manual! Oleh sebab itu, sebagai alternatif, kita mempunyai suatu cara untuk mendeklarasikan banyak variabel sekaligus. Oleh sebab itu kita ingin mendeklarasikan sebuah array.

Dalam C++, pendeklarasian array dapat dituliskan sebagai berikut.

#include <iostream>
using namespace std;

int arr[1000000];

int main(){
    //Code Anda di sini.
}

Pendeklarasian array dapat dituliskan dengan pertama-tama menuliskan tipe datanya, lalu namanya dan terakhir di dalam kurung siku bilangan yang menyatakan ukurannya. Array di atas adalah array dengan tipe data int dengan nama arr dan ukuran 1.000.000. Pada umumnya array dideklarasikan secara global. Perlu diingat bahwa ukuran dari array adalah statis yakni tidak dapat diubah setelah pendeklarasian.

Terdapat juga jenis array yang ukurannya dapat berubah atau dinamis, array ini pada C++ disebut dengan vektor, kita akan membahas tentang vektor lebih lanjut pada bab .

Untuk memasukkan nilai pada array, pada umumnya kita ingin menggunakan for loop yang mana codenya dapat ditulis sebagai berikut:

#include <iostream>
using namespace std;

int arr[1000000];

int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> arr[i];
    }
    return 0;
}

Untuk mengakses suatu elemen dari suatu array, dapat dituliskan nama_array[indeks] seperti code di bawah ini, kita juga dapat mendeklarasikan array sebagaimana dituliskan di bawah.

#include <iostream>
using namespace std;

string arr[3] = {"Nama", "Saya", "Pak", "Dengklek"};

int main(){
    cout << arr[0];
    return 0;
}

Pada terminal, program akan mengeluarkan Nama.

Dalam dunia pemrograman kompetitif, kerap kita mendeklarasikan array dengan ukuran yang sedikit lebih banyak dari jumlah yang diperlukan. Hal ini guna mengantisipasi Verdict Runtime Error dikarenakan akses di luar batas

★Array Multidimensi

Array Dua Dimensi

Array dua dimensi adalah sebuah array yang berisi sebuah array di dalamnya. Biasanya array dua dimensi dipakai untuk mempresentasikan sebuah tabel, koordinat kartesius dan matriks.

Misalkan kita ingin membuat sebuah matriks yang berukuran 3 x 4. Dalam C++, kita dapat membuat matriks tersebut menggunakan array dua dimensi seperti program di bawah ini:

#include <iostream>
using namespace std;

int arr[3][4];
int main(){
    //Code Anda di sini.
    return 0;
}

Pendeklarasian array dua dimensi dapat dituliskan seperti array biasa pada umumnya, namun dengan tambahan satu kurung siku []. Masing-masing kurung siku tersebut mempresentasikan ukuran dari baris dan kolom pada tabel. Berikut merupakan ilustrasi dari array 2 dimensi di atas:

Baris/Kolom
0
1
2
3

0

arr[0][0]

arr[0][1]

arr[0][2]

arr[0][3]

1

arr[1][0]

arr[1][1]

arr[1][2]

arr[1][2]

2

arr[2][0]

arr[2][1]

arr[2][2]

arr[2][3]

Untuk memasukkan nilai pada array dua dimensi, pada umumnya kita menggunakan nested for loop karena array dua dimensi memiliki baris dan kolom:

#include <iostream>
using namespace std;

int arr[3][4];
int main(){
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 4; j++){
            cin >> arr[i][j];
        }
    }
    return 0;
}

for loop dengan int i = 0; i < 3; i++ berfungsi sebagai perulangan baris, sedangkan for loop dengan int j = 0; j < 4; i++ berfungsi sebagai perulangan kolom.

Selain dari menggunakan nested for loop, kita juga dapat memasukkan nilai pada array dua dimensi secara langsung seperti berikut:

#include <iostream>
using namespace std;

int arr[3][4] = {{1, 2, 3, 4}, 
                {5, 6, 7, 8}, 
                {9, 10, 11, 12}};
int main(){
    //Code Anda di sini.
    return 0;
}
Baris/Kolom
0
1
2
3

0

1

2

3

4

1

5

6

7

8

2

9

10

11

12

Array Tiga DImensi (Opsional)

Array Tiga Dimensi adalah sebuah array yang berisi array dua dimensi di dalamnya atau array yang penomoran indeks-nya menggunakan 3 buah angka. Analogi yang sering dipakai seperti titik koordinat dalam diagram kartesius 3D.

Pendeklarasian array tiga dimensi tidak jauh berbeda dengan array dua dimensi yang kita pelajari sebelumnya. Berikut merupakan cara pendeklarasian array tiga dimensi: tipedata nama-variabel[ukuran x][ukuran y][ukuran z];

#include <iostream>
using namespace std;

int arr[2][2][2];
int main(){
    //Code Anda di sini.
    return 0;
}

Program di atas mengilustrasikan sebuah koordinat kartesius 3D dengan ukuran (2 x 2 x 2).

Sama halnya dengan array dua dimensi, untuk memasukkan nilai pada array tiga dimensi maka kita harus menggunakan nested for loop namun dengan 3 for loop seperti pada contoh program dibawah ini.

#include <iostream>
using namespace std;

int arr[2][2][2];
int main(){
    for(int i = 0; i < 2; i++){
        for(int j = 0; j < 2; j++){
            for(int k = 0; k < 2; k++){
                cin >> arr[i][j][k];
            }
        }
    }
    return 0;
}

for loop dengan int i = 0; i < 2; i++ berfungsi sebagai perulangan ukuran x, for loop dengan int j = 0; j < 2; i++ berfungsi sebagai perulangan ukuran y dan for loop dengan int k = 0; k < 2; k++ berfungsi sebagai perulangan ukuran z.

Selain dari menggunakan nested for loop, kita juga dapat memasukkan nilai pada array tiga dimensi secara langsung seperti berikut:

#include <iostream>
using namespace std;

int arr[2][2][2] = {
                    {
                     {1, 2},
                     {3, 4},
                    },
                    {
                     {5, 6},
                     {7, 8},
                    }
                   };
int main(){
  cout << "Element di [0][0][0]: "<< arr[0][0][0] << endl;
  cout << "Element di [0][0][1]: "<< arr[0][0][1] << endl;
  cout << "Element di [0][1][0]: "<< arr[0][1][0] << endl;
  cout << "Element di [0][1][1]: "<< arr[0][1][1] << endl;
  cout << "Element di [1][0][0]: "<< arr[1][0][0] << endl;
  cout << "Element di [1][0][1]: "<< arr[1][0][1] << endl;
  cout << "Element di [1][1][0]: "<< arr[1][1][0] << endl;
  cout << "Element di [1][1][1]: "<< arr[1][1][1] << endl;
    return 0;
}

Output:

Element di [0][0][0]: 1
Element di [0][0][1]: 2
Element di [0][1][0]: 3
Element di [0][1][1]: 4
Element di [1][0][0]: 5
Element di [1][0][1]: 6
Element di [1][1][0]: 7
Element di [1][1][1]: 8

Alokasi Memori (Opsional)

Alokasi memori adalah proses dimana program dan layanan komputer ditugaskan dengan ruang memori fisik atau virtual. Dengan kata lain, alokasi memori adalah proses pemesanan sebagian atau seluruh memori komputer untuk pelaksanaan program dan proses tertentu.

Stack

Untuk ukuran memori stack implementasi tiap OS bisa berbeda-beda, seperti contoh ukuran memori stack di linux adalah 8MiB (8 x 1024 x 1024) bytes. Alokasi stack ini tidak bisa gagal, jika gagal maka telah terjadi stack overflow. Memori stack ini bersifat terbatas dan tidak bisa diubah ukurannya atau hanya dealokasi ketika out of scope. Compiler juga bisa mengeluarkan warning apabila kita menggunakan memori stack lebih dari 2048 bytes dari sebuah fungsi.

Contoh alokasi stack

int arr[X];
char str[MAX];

Heap

Ukuran memori heap ini tak terbatas dan dinamis. Tergantung jumlah memori yang terpasang. Alokasi memori heap bisa gagal. Memori heap tidak seperti stack. Kita bebas untuk mendealokasikannya kapan saja.

Biasanya STLnya C++ menggunakan memori ini, oleh karena itu ukuran STL seperti vector dan string bisa dinamis.

Untuk alokasi array / memori dinamis bisa menggunakan new dari C++ atau malloc dan calloc dari cstdlib. Contoh kode yang menggunakan memori heap.

char *ptr = (char *)malloc(100);
vector<int> vec;
string str = "Hello";

Static

Memori static dialokasikan di awal program dan hanya akan dibebaskan ketika program berakhir.

static snow char[100];

Daftar Soal

Sumber
Nama Soal
Tingkat Kesulitan
Bahasa

Mudah

Indonesia

Mudah

Indonesia

Mudah

Indonesia

Sedang

Indonesia

Sedang

Indonesia

Sulit

Indonesia

★

Struktur Data
Array Dinamis
TLX TOKI
Balik Daftar
TLX TOKI
Tzaph dan tipe barisan
TLX TOKI
Linear Search
TLX TOKI
Modus Terbesar
TLX TOKI
Dua bilangan yang hilang
TLX TOKI
Pasang bilangan
Contoh bentuk diagram kartesius 3D (sumber – )
wikipedia