01. Persiapan

Sebelum bisa menulis program C++, ada empat hal yang perlu disiapkan:

  1. Compiler C++ (program yang mengubah kode menjadi file yang bisa dijalankan).
  2. Editor kode.
  3. Terminal untuk mengetik perintah.
  4. Akun di satu situs penilai daring (online judge) untuk berlatih.

Bab ini menyiapkan keempatnya di Windows 10 atau 11.

Apa yang sebenarnya dikerjakan compiler

Prosesor komputer tidak mengerti kata cout atau return. Yang dimengerti hanyalah instruksi biner. Compiler adalah penerjemahnya, dan ia bekerja dalam tiga tahap:

Tahap Masukan Keluaran Kesalahan khasnya
prapengolahan halo.cpp teks yang sudah digabung iostream: No such file (salah tulis #include)
kompilasi teks tadi kode mesin per file expected ';', not declared in this scope
penautan (link) kode mesin halo.exe undefined reference to 'main'

Tahap pertama menyalin isi berkas yang ditulis pada #include ke dalam kodemu. Tahap kedua menerjemahkan hasilnya menjadi instruksi prosesor. Tahap ketiga menyatukan potongan-potongan itu, termasuk kode pustaka standar, menjadi satu berkas .exe yang bisa dijalankan sendiri.

Tiga akibat praktisnya:

  • Kesalahan ketik ditemukan sebelum program berjalan. Ini keuntungan besar di lomba: banyak kesalahan yang di bahasa lain baru terlihat saat program jalan, di C++ sudah ditolak lebih dulu.
  • Mengubah kode saja tidak cukup. .exe lama tidak ikut berubah, jadi setiap perubahan harus diikuti compile ulang.
  • Hasilnya cepat. Program C++ berjalan sebagai instruksi prosesor langsung, tanpa penerjemah yang ikut berjalan. Inilah alasan hampir semua peserta OSN memakai C++.

1. Pasang compiler C++

C++ tidak dijalankan langsung seperti bahasa skrip. Kode harus di-compile dulu menjadi file .exe, baru file itu yang dijalankan. Program yang melakukannya bernama compiler.

Ada dua pilihan. Pasang salah satu saja:

Cara Compiler Perintah compile Catatan
A g++ dari MinGW-w64 g++ sama dengan compiler di penilai daring dan OSN; dipakai di seluruh buku
B MSVC dari Visual Studio cl installer grafis; perintahnya berbeda, lihat tabel padanan di Cara B

Kalau belum punya alasan khusus, pilih Cara A.

Cara A: MinGW-w64 (g++) lewat winget

Paket yang dipasang adalah WinLibs, yaitu g++ dan MinGW-w64 dalam satu paket, terbitan Brecht Sanders. Pemasangannya lewat winget, alat pemasang software bawaan Windows 10 dan 11. Tidak perlu hak administrator.

  1. Tekan tombol Windows, ketik PowerShell, lalu buka Windows PowerShell.

  2. Periksa bahwa winget tersedia:

     winget --version

    Kalau muncul nomor versi (misalnya v1.x.y), lanjut ke langkah 3. Kalau muncul 'winget' is not recognized, buka Microsoft Store, cari App Installer, klik Install atau Update, lalu tutup dan buka ulang PowerShell.

  3. Pasang compiler. Salin perintah ini apa adanya, termasuk huruf besar dan titiknya:

     winget install --id BrechtSanders.WinLibs.POSIX.UCRT -e --source winget
    • Pada pemakaian pertama, winget bertanya Do you agree to all the source agreements terms?. Ketik Y, lalu Enter.
    • Unduhannya berukuran ratusan megabyte. Tunggu sampai muncul Successfully installed.
    • Di akhir juga muncul pesan Path environment variable modified; restart your shell to use the new value. Artinya folder compiler sudah dimasukkan ke PATH, tetapi hanya jendela yang dibuka setelah ini yang membacanya.
  4. Tutup semua jendela PowerShell, dan juga VS Code kalau sudah terbuka. Lalu buka satu jendela PowerShell baru.

  5. Periksa hasilnya:

     g++ --version

    Baris pertama keluarannya diawali g++ dan memuat nomor versi. Kalau muncul, compiler sudah siap. Lanjut ke bagian 2.

Kalau g++ tetap tidak dikenali

Kalau langkah 5 menjawab 'g++' is not recognized as the name of a cmdlet, function, script file, or operable program, folder compiler belum ada di PATH. Tambahkan secara manual:

  1. Di PowerShell, cari lokasi g++.exe:

     Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Recurse -Filter g++.exe | Select-Object -ExpandProperty DirectoryName

    Keluarannya satu baris yang diakhiri \mingw64\bin. Blok baris itu dengan mouse lalu tekan Ctrl + C untuk menyalinnya. Kalau tidak ada keluaran sama sekali, pemasangan di langkah 3 belum selesai: jalankan ulang langkah 3 dan baca pesan terakhirnya.

  2. Tekan tombol Windows, ketik environment variables, buka Edit environment variables for your account.

  3. Di bagian atas (User variables), pilih Path, klik Edit....

  4. Klik New, tempel folder dari langkah 1 (Ctrl + V), lalu klik OK di setiap jendela.

  5. Tutup semua jendela PowerShell dan VS Code, buka PowerShell baru, lalu jalankan g++ --version lagi.

Untuk melihat g++ mana yang sedang dipakai, ketik where.exe g++. Di PowerShell, perintah where tanpa .exe adalah perintah lain, jadi akhiran .exe itu perlu.

Cara B: Visual Studio (MSVC)

Visual Studio (bukan Visual Studio Code) membawa compiler C++ milik Microsoft bernama MSVC. Perintahnya cl, bukan g++.

  1. Buka https://visualstudio.microsoft.com, unduh Visual Studio Community (gratis), lalu jalankan installer-nya.

  2. Di tab Workloads, centang Desktop development with C++. Biarkan pilihan di panel kanan apa adanya. Klik Install, lalu tunggu sampai selesai.

    Pemasangan yang sama bisa dilakukan dari PowerShell:

     winget install --id Microsoft.VisualStudio.Community -e --source winget --override "--add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --passive --norestart"
  3. Tekan tombol Windows, ketik Developer PowerShell, lalu buka Developer PowerShell for VS.

  4. Ketik:

     cl

    Keluarannya diawali Microsoft (R) C/C++ Optimizing Compiler Version dan diakhiri baris usage: cl [ option... ] filename... [ /link linkoption... ]. Kalau muncul, compiler sudah siap.

cl hanya dikenali di jendela Developer PowerShell for VS (atau Developer Command Prompt for VS). Di PowerShell biasa, cl menjawab 'cl' is not recognized walaupun Visual Studio sudah terpasang dengan benar. Ini bukan kerusakan: Visual Studio sengaja tidak memasukkan compiler-nya ke PATH umum.

Buku ini menulis setiap perintah compile dalam bentuk g++. Kalau memakai Cara B, ganti dengan padanannya:

g++ (dipakai di buku) MSVC (Cara B)
g++ -std=c++17 -O2 -o halo halo.cpp cl /nologo /std:c++17 /O2 /EHsc halo.cpp
-std=c++17 /std:c++17
-O2 /O2
-o halo tidak perlu: nama .exe diambil dari nama file .cpp
(tidak ada padanan) /EHsc: aktifkan penanganan exception standar C++
(tidak ada padanan) /nologo: jangan cetak baris hak cipta setiap compile

Menjalankan programnya sama: ./halo. Selain halo.exe, cl juga meninggalkan halo.obj; file itu boleh dihapus.

Penilai daring dan mesin OSN memakai g++, bukan MSVC. Kode yang memakai fitur khusus g++ seperti #include <bits/stdc++.h>, __gcd, atau __int128 tidak bisa di-compile dengan cl. Sebaliknya, kode yang lolos di cl belum tentu lolos di g++. Semua kode di buku ini hanya memakai C++17 standar sehingga bisa di-compile dengan keduanya, tetapi untuk latihan lomba jangka panjang Cara A lebih aman.

2. Pasang editor kode

Gunakan Visual Studio Code (disingkat VS Code). Gratis, jalan di Windows, dan dipakai banyak programmer profesional.

  1. Buka https://code.visualstudio.com dan unduh installer-nya.
  2. Jalankan. Di layar Select Additional Tasks, centang Add to PATH dan Register Code as an editor for supported file types.
  3. Buka VS Code setelah pemasangan selesai.
  4. Pasang ekstensi C++:
    • Klik ikon Extensions di bilah kiri (atau Ctrl + Shift + X).
    • Ketik C++ di kotak pencarian.
    • Pilih ekstensi C/C++ terbitan Microsoft.
    • Klik Install.

Ekstensi ini menambahkan pewarnaan sintaks, autocomplete, dan tanda error langsung di file .cpp.

3. Terminal

VS Code punya terminal bawaan. Buka dengan Ctrl + ` (tombol backtick, biasanya di bawah Esc).

Di terminal inilah kamu mengetik dua perintah yang akan dipakai sepanjang buku ini: satu untuk compile, satu untuk menjalankan hasilnya.

Terminal VS Code hanya mengenal compiler yang sudah ada di PATH saat VS Code dibuka. Kalau compiler dipasang sementara VS Code terbuka, tutup semua jendela VS Code lalu buka lagi.

Pengguna Cara B (Visual Studio). Terminal VS Code yang dibuka dari menu Start tidak mengenal cl. Buka VS Code lewat Developer PowerShell supaya terminalnya ikut mengenal cl:

  1. Tutup semua jendela VS Code.
  2. Buka Developer PowerShell for VS.
  3. Ketik code, lalu Enter.

Lakukan ini setiap kali mulai belajar. Untuk memeriksa, ketik cl di terminal VS Code; keluarannya harus sama dengan langkah 4 Cara B.

4. Uji semuanya

  1. Di VS Code pilih File → Open Folder..., klik New Folder, beri nama osn, klik Select Folder.

  2. Tekan Ctrl + N untuk file baru.

  3. Ketik:

     #include <iostream>
     using namespace std;
    
     int main() {
         cout << "Halo, OSN!" << endl;
         return 0;
     }
  4. Simpan sebagai halo.cpp di folder itu (Ctrl + S).

  5. Buka terminal (Ctrl + `) dan ketik dua perintah ini:

     g++ -std=c++17 -O2 -o halo halo.cpp
     ./halo

    Pengguna Cara B mengetik ini:

     cl /nologo /std:c++17 /O2 /EHsc halo.cpp
     ./halo

    cl mencetak nama file halo.cpp saat meng-compile. Itu bukan error.

Keluarannya:

Halo, OSN!

Kalau baris itu muncul, seluruh persiapan sudah beres.

Perintah pertama membaca halo.cpp dan menghasilkan halo.exe. Perintah kedua menjalankan halo.exe. Di PowerShell, ./halo dan .\halo.exe sama-sama bekerja. Setiap kali kode diubah, compile ulang dulu — menjalankan ./halo saja akan memakai hasil compile yang lama.

Arti dua tanda tambahan pada perintah compile:

Bagian Arti
-std=c++17 pakai aturan bahasa C++ versi 2017
-O2 optimalkan kecepatan program hasil compile
-o halo beri nama halo untuk file hasilnya

Standar c++17 dipilih karena dipakai di banyak lomba pemrograman, termasuk penilai daring yang akan kita pakai.

Alur kerja sehari-hari

Sepanjang buku ini kamu akan mengulang lingkaran empat langkah yang sama. Hafalkan bentuknya sekarang supaya tidak perlu dipikirkan lagi nanti:

  1. Tulis atau ubah kode di editor, lalu simpan (Ctrl + S).
  2. Compile: g++ -std=c++17 -O2 -o halo halo.cpp (Cara B: cl /nologo /std:c++17 /O2 /EHsc halo.cpp)
  3. Jalankan: ./halo
  4. Bandingkan keluarannya dengan yang diharapkan. Kalau berbeda, kembali ke langkah 1.

Di PowerShell, tombol panah atas memanggil kembali perintah sebelumnya, jadi langkah 2 dan 3 cukup dua kali panah atas dan Enter. Kedua perintah juga bisa digabung menjadi satu baris sehingga program hanya berjalan kalau compile-nya berhasil:

g++ -std=c++17 -O2 -o halo halo.cpp; if ($?) { ./halo }

Bentuk yang sama untuk Cara B:

cl /nologo /std:c++17 /O2 /EHsc halo.cpp; if ($?) { ./halo }

Kesalahan yang paling sering di minggu pertama: mengubah kode, lupa compile, lalu bingung karena keluarannya tidak berubah. Kalau hasilnya terasa "tidak mau berubah", periksa dulu apakah langkah 2 benar-benar dijalankan dan tidak menampilkan pesan error.

Memberi masukan dari berkas

Mulai Bab 03, program membaca masukan. Mengetik ulang masukan yang sama setiap kali menguji melelahkan dan rawan salah. Simpan saja masukannya di sebuah berkas teks, misalnya masukan.txt, lalu alirkan ke program.

Di PowerShell:

Get-Content masukan.txt | ./halo

Di Command Prompt (cmd), bentuk yang lebih pendek juga bekerja:

halo.exe < masukan.txt

Cara ini persis seperti yang dilakukan penilai daring terhadap programmu: masukan datang dari berkas, bukan dari ketikan manusia. Membiasakannya sejak sekarang membuat pengujian kasus tepi di Bab 10 jauh lebih cepat.

5. Daftar di satu penilai daring

Di OSN, jawaban dikirim ke sebuah program penilai: ia menjalankan kodemu dengan banyak berkas masukan, membandingkan keluaranmu dengan jawaban benar, lalu memberi nilai. Berlatih di sistem yang mirip sejak awal membuat format soal OSN terasa biasa.

Dua pilihan yang umum dipakai pelajar Indonesia:

Buat akun di salah satunya sekarang. Mulai Bagian 2, beberapa PR meminta kamu mengirim jawaban ke sana, bukan sekadar menjalankannya di komputer sendiri.

Program untuk penilai daring membaca dari masukan standar dan menulis ke keluaran standar — tidak boleh ada pertanyaan seperti Masukkan angka: kecuali soal memintanya. Bab 03 membahas aturan ini secara rinci.

Kalau ada yang gagal

Gejala Penyebab yang paling sering
'winget' is not recognized App Installer belum terpasang atau belum diperbarui dari Microsoft Store
'g++' is not recognized PATH belum berisi folder compiler, atau jendela terminal belum dibuka ulang; lihat "Kalau g++ tetap tidak dikenali"
g++ dikenali di PowerShell, tetapi tidak di terminal VS Code VS Code sudah terbuka saat compiler dipasang; tutup semua jendela VS Code lalu buka lagi
'cl' is not recognized terminal bukan Developer PowerShell for VS, atau VS Code tidak dibuka dari sana
cl memberi peringatan C4530 tentang exception handler tanda /EHsc lupa ditulis
undefined reference to 'main' fungsi main salah tulis, atau file yang di-compile bukan file yang dimaksud
No such file or directory saat compile nama file salah, atau terminal berada di folder lain
./halo tidak dikenali compile gagal sehingga halo.exe belum ada
Permission denied saat compile halo.exe yang lama masih berjalan di jendela lain
keluaran tidak berubah setelah kode diubah file belum disimpan, atau belum di-compile ulang

Untuk memeriksa terminal sedang berada di folder mana, ketik pwd. Untuk melihat isi foldernya, ketik ls. Kalau file .cpp yang ingin di-compile tidak terlihat di daftar ls, berarti terminalnya berada di folder yang salah — pindah dengan cd nama-folder, atau buka ulang foldernya lewat File → Open Folder... di VS Code.

Saat meminta bantuan — ke guru, teman, atau forum — sertakan tiga hal: perintah yang kamu ketik, pesan error yang lengkap (disalin apa adanya, bukan diringkas), dan kode yang bersangkutan. Pesan error yang diringkas menjadi "errornya begitulah" membuat masalah yang sebenarnya sepele menjadi tidak bisa ditebak orang lain.

Tips OSN

Bab ini selesai dengan satu komputer yang siap dipakai. Bagian ini menjelaskan untuk apa kesiapan itu dipakai: bentuk lombanya, cara programmu dinilai, dan kebiasaan yang membedakan peserta yang lolos dari yang tidak.

Jenjang seleksinya bertingkat. OSN bidang Informatika disaring dari tingkat sekolah ke tingkat kabupaten/kota, lalu provinsi, lalu nasional. Peraturan tiap tingkat — jumlah soal, lama pengerjaan, bahasa pemrograman yang boleh dipakai — ditetapkan ulang setiap tahun oleh penyelenggara, jadi angka pastinya harus dibaca dari pengumuman resmi tahun berjalan, bukan dari cerita kakak kelas. Yang tidak berubah adalah bentuk soalnya: program yang membaca masukan standar, menulis keluaran standar, dan dinilai otomatis.

Penilaian dilakukan mesin, bukan manusia. Programmu dijalankan terhadap sekumpulan berkas uji yang tidak kamu lihat. Hasilnya berupa vonis:

Vonis Artinya
Accepted keluaran cocok untuk semua berkas uji
Wrong Answer ada keluaran yang tidak cocok, walau satu karakter
Time Limit Exceeded program benar tetapi terlalu lambat
Runtime Error program berhenti sendiri: pembagian nol, indeks di luar array, kode keluar bukan 0
Compile Error kode tidak bisa di-compile di mesin penilai

Tiga akibatnya langsung terasa sejak Bab 02:

  • Keluaran harus persis. Satu huruf kapital yang salah, satu spasi berlebih, atau satu kalimat pengantar seperti Masukkan n: sudah cukup untuk membuat jawaban yang benar dinilai Wrong Answer.
  • Kecepatan adalah bagian dari kebenaran. Program yang benar tetapi lambat tidak mendapat nilai. Bab 10 membahas cara memperkirakan kecepatan sebelum kode ditulis.
  • Compile di komputermu dulu. Compile Error di penilai daring adalah nilai nol untuk soal yang mungkin sudah benar. Karena itu perintah g++ -std=c++17 -O2 di bab ini dipakai apa adanya: sama dengan yang dipakai mesin penilai. Pengguna Cara B sebaiknya tetap memakai fitur C++17 standar saja, karena kode dinilai dengan g++.

Nilai sering diberikan bertahap. Banyak soal OSN dibagi menjadi beberapa subsoal dengan batasan yang berbeda — misalnya subsoal pertama menjamin n ≤ 100, subsoal terakhir mengizinkan n ≤ 1.000.000. Program lambat yang benar tetap mendapat nilai dari subsoal berbatas kecil. Karena itu jawaban paling sederhana yang benar selalu layak dikirim lebih dulu, baru diperbaiki. Buku ini melatih urutan itu mulai Bagian 3.

Kebiasaan yang perlu dibentuk sejak sekarang.

  • Simpan setiap program latihan, jangan ditimpa. Folder berisi seratus program lama adalah bahan belajar; folder berisi satu file a.cpp yang terus ditimpa tidak meninggalkan apa-apa.
  • Uji dengan berkas masukan, bukan mengetik ulang angka setiap kali. Cara Get-Content masukan.txt | ./halo di atas persis cara penilai menjalankan programmu.
  • Latihan berkala mengalahkan latihan borongan. Satu jam setiap hari memberi hasil yang jauh lebih baik daripada tujuh jam sekali seminggu, karena yang dilatih adalah kecepatan mengenali pola soal.
  • Catat setiap kesalahan yang memakan waktu lebih dari sepuluh menit. Daftar kesalahan sendiri jauh lebih berguna daripada daftar tips umum.

Jangan menghafal kode jawaban orang lain. Yang dinilai di OSN adalah kemampuan menurunkan penyelesaian dari soal yang belum pernah kamu lihat, dan soal OSN memang dirancang supaya tidak sama dengan soal tahun sebelumnya. Kode hafalan habis manfaatnya di soal pertama yang sedikit berbeda.

Ringkasan

  • C++ harus di-compile dulu menjadi .exe, baru dijalankan. Setiap perubahan kode berarti compile ulang.
  • Dua perintah yang dipakai sepanjang buku: g++ -std=c++17 -O2 -o halo halo.cpp lalu ./halo. Dengan Visual Studio, perintah compile-nya cl /nologo /std:c++17 /O2 /EHsc halo.cpp, dijalankan dari Developer PowerShell for VS.
  • -std=c++17 menetapkan versi bahasa, -O2 mempercepat program hasilnya, -o memberi nama berkas hasilnya.
  • Masukan uji sebaiknya disimpan di berkas dan dialirkan dengan Get-Content masukan.txt | ./halo, seperti cara penilai daring menjalankan programmu.
  • Program untuk penilai daring tidak boleh mencetak kalimat pengantar.

Bab berikutnya menulis program C++ pertama dan membedah setiap barisnya.