01. Persiapan
Sebelum bisa menulis program C++, ada empat hal yang perlu disiapkan:
- Compiler C++ (program yang mengubah kode menjadi file yang bisa dijalankan).
- Editor kode.
- Terminal untuk mengetik perintah.
- 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.
.exelama 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.
Tekan tombol Windows, ketik
PowerShell, lalu buka Windows PowerShell.Periksa bahwa
wingettersedia:winget --versionKalau 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.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,
wingetbertanyaDo you agree to all the source agreements terms?. KetikY, 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 kePATH, tetapi hanya jendela yang dibuka setelah ini yang membacanya.
- Pada pemakaian pertama,
Tutup semua jendela PowerShell, dan juga VS Code kalau sudah terbuka. Lalu buka satu jendela PowerShell baru.
Periksa hasilnya:
g++ --versionBaris 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:
Di PowerShell, cari lokasi
g++.exe:Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Recurse -Filter g++.exe | Select-Object -ExpandProperty DirectoryNameKeluarannya 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.Tekan tombol Windows, ketik
environment variables, buka Edit environment variables for your account.Di bagian atas (User variables), pilih Path, klik Edit....
Klik New, tempel folder dari langkah 1 (Ctrl + V), lalu klik OK di setiap jendela.
Tutup semua jendela PowerShell dan VS Code, buka PowerShell baru, lalu jalankan
g++ --versionlagi.
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++.
Buka https://visualstudio.microsoft.com, unduh Visual Studio Community (gratis), lalu jalankan installer-nya.
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"Tekan tombol Windows, ketik
Developer PowerShell, lalu buka Developer PowerShell for VS.Ketik:
clKeluarannya diawali
Microsoft (R) C/C++ Optimizing Compiler Versiondan diakhiri barisusage: 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.
- Buka https://code.visualstudio.com dan unduh installer-nya.
- Jalankan. Di layar Select Additional Tasks, centang Add to PATH dan Register Code as an editor for supported file types.
- Buka VS Code setelah pemasangan selesai.
- 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:
- Tutup semua jendela VS Code.
- Buka Developer PowerShell for VS.
- 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
Di VS Code pilih File → Open Folder..., klik New Folder, beri nama
osn, klik Select Folder.Tekan Ctrl + N untuk file baru.
Ketik:
#include <iostream> using namespace std; int main() { cout << "Halo, OSN!" << endl; return 0; }Simpan sebagai
halo.cppdi folder itu (Ctrl + S).Buka terminal (Ctrl + `) dan ketik dua perintah ini:
g++ -std=c++17 -O2 -o halo halo.cpp ./haloPengguna Cara B mengetik ini:
cl /nologo /std:c++17 /O2 /EHsc halo.cpp ./haloclmencetak nama filehalo.cppsaat 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:
- Tulis atau ubah kode di editor, lalu simpan (Ctrl + S).
- Compile:
g++ -std=c++17 -O2 -o halo halo.cpp(Cara B:cl /nologo /std:c++17 /O2 /EHsc halo.cpp) - Jalankan:
./halo - 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:
- TLX (https://tlx.toki.id) — dikelola TOKI, berisi arsip soal OSN dan latihan berbahasa Indonesia.
- Codeforces (https://codeforces.com) — berbahasa Inggris, soalnya sangat banyak dan ada kontes rutin.
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 -O2di 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.cppyang terus ditimpa tidak meninggalkan apa-apa. - Uji dengan berkas masukan, bukan mengetik ulang angka setiap kali.
Cara
Get-Content masukan.txt | ./halodi 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.cpplalu./halo. Dengan Visual Studio, perintah compile-nyacl /nologo /std:c++17 /O2 /EHsc halo.cpp, dijalankan dari Developer PowerShell for VS. -std=c++17menetapkan versi bahasa,-O2mempercepat program hasilnya,-omemberi 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.