Belajar dengan Contoh
Salah satu cara terbaik untuk belajar bagaimana program dalam bahasa baru adalah dengan melihat banyak program contoh. Cara terbaik untuk melakukannya adalah menyalin dan menempel setiap program di bawah ini menjadi file teks dan mengompilasinya. Kemudian, coba eksperimennya. Dengan memperluas contoh program ini, Anda akan memahami berbagai aspek C++, dan Anda akan merasa lebih percaya diri ketika tiba waktunya untuk menulis program awal.
Contoh 1: Buat compiler Anda berfungsi.
Jika Anda belum melakukannya, salin dan tempel program klasik berikut menjadi file teks dan mengompilasinya. Petunjuk kompilasi tersedia di sini.
Sepertinya Anda telah mengerjakan detail program ini dalam tutorial, jadi kami tidak akan memberikan deskripsi baris demi baris di sini. Ada beberapa hal tetapi, terkait keterbacaan. Hal ini mengacu pada komentar dan pemformatan yang membantu membuat program mudah dibaca, dipahami, dan dikelola.
- Setiap program yang kita tulis dimulai dengan komentar {i>header<i}, memberikan nama penulis, informasi kontak mereka, deskripsi singkat, dan penggunaan (jika relevan). Setiap fungsi dimulai dengan komentar tentang operasi dan penggunaan.
- Kami menambahkan komentar penjelasan menggunakan kalimat lengkap, setiap kali kode bukan mendokumentasikan dirinya sendiri. Misalnya, jika pemrosesannya rumit, tidak jelas, menarik, atau penting.
- Selalu gunakan nama deskriptif: variabel adalah kata-kata yang dipisahkan dengan huruf kecil oleh _, seperti pada my_variable. Nama fungsi menggunakan huruf besar untuk menandai kata, seperti di MyExcitationFunction(). Konstanta dimulai dengan "k" dan gunakan huruf besar untuk menandai kata, seperti dalam kDaysInWeek.
- Indentasi adalah kelipatan dua. Tingkat pertama adalah dua spasi; jika lebih jauh indentasi diperlukan, kita menggunakan empat spasi, enam spasi, dll.
// hello.cpp: Maggie Johnson // Description: a program that prints the immortal saying "hello world" #include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
Beberapa eksperimen untuk dicoba:
- Yang paling penting adalah memastikan Anda dapat mengompilasi dan menjalankan program ini.
- Ubah program di atas untuk mencetak "Hello World!" 4 kali dalam untuk 6 baris, di mana masing-masing baris dicetak dalam 17 spasi. Menggunakan for-loop untuk melakukan hal ini. Klik di sini untuk mempelajari cara memformat output dengan cout. Klik di sini untuk melihat solusinya.
- Dengan menggunakan program yang baru saja Anda selesaikan, cari tahu cara mencetak "Halo Dunia!" rata kiri di dalam isian yang berisi 17 spasi ({i>default<i} biasanya adalah rata kanan). Klik di sini untuk melihat solusinya.
Contoh 2: Mendapatkan beberapa input
Sangat mudah untuk mendapatkan {i>input<i} dari {i>keyboard<i} di C++ menggunakan {i>cin<i}. Berikut ini contohnya:
// get_input.cpp: Maggie Johnson // Description: Illustrate the use of cin to get input. #include <iostream> using namespace std; int main() { int input_var = 0; // Enter the do while loop and stay there until either // a non-numeric is entered, or -1 is entered. Note that // cin will accept any integer, 4, 40, 400, etc. do { cout << "Enter a number (-1 = quit): "; // The following line accepts input from the keyboard into // variable input_var. // cin returns false if an input operation fails, that is, if // something other than an int (the type of input_var) is entered. if (!(cin >> input_var)) { cout << "You entered a non-numeric. Exiting..." << endl; break; // exit the do while loop } if (input_var != -1) { cout << "You entered " << input_var << endl; } } while (input_var != -1); cout << "All done." << endl; return 0; }
Sebuah eksperimen:
- Ketika kesalahan input dibuat, streaming akan "berhenti", pengembalian cin
false, dan program akan berhenti. Sangat penting untuk menghindari
kesalahan seperti
seperti yang kita lakukan dalam program di atas. Tapi bagaimana jika kita ingin
memulihkan dari kesalahan,
daripada menghentikan program? Ada dua langkah
untuk memulihkan dari
pesan {i>error<i}:
- Hapus error dengan cin.clear().
- Hapus karakter yang salah dari streaming. Salah satu cara untuk melakukan ini adalah dengan cin.ignore().
Tulis program yang dapat memulihkan data dari input yang buruk menggunakan dua langkah ini. Gunakan Google untuk menelusuri cara kerja metode ini. Solusi kami ada di sini.
Contoh 3: Apa yang dihasilkan oleh program ini?
#include <iostream> using namespace std; int main() { cout << " 1\t2\t3\t4\t5\t6\t7\t8\t9" << endl << "" << endl; for (int c = 1; c < 10; c++) { cout << c << "| "; for (int i = 1; i < 10; i++) { cout << i * c << '\t'; } cout << endl; } return 0; }
Contoh 4: Menguraikan membuat semuanya menjadi lebih mudah...
Saatnya bagi kita untuk mulai menulis game komputer! Yang pertama ini akan sedikit sederhana, tapi sudah menjadi suatu permulaan. Tugas kita adalah menulis program yang mengimplementasikan tebakan game. Program kami menghasilkan angka acak antara 0 dan 100. Pemain harus menebak angka rahasianya. Program ini memberikan petunjuk seperti "itu terlalu tinggi" atau "itulah terlalu rendah" sampai pemain akhirnya menebak angka rahasianya.
Kita akan mengerjakan game ini dalam tiga langkah.
- Cari tahu cara menghasilkan angka acak dalam rentang nilai tertentu.
- Buat fungsi utama yang memproses satu tebakan dari pemain, dan memberikan petunjuk.
- Menambahkan hal yang diperlukan agar pemain dapat menebak beberapa kali angka tersebut.
Proses pengembangan ini disebut dekomposisi, yang berarti memecah tugas menjadi sub-tugas, yang masing-masing mudah dilakukan.
Dimulai dengan langkah 1, lakukan penelusuran Google untuk melihat cara membuat angka acak menggunakan C++. Coba telusuri "rand C++". Berikut adalah solusi kami.
Untuk langkah 2, kita perlu menerima input bilangan bulat dari pemutar (dengan memeriksa {i>error <i}pada cin), kemudian memeriksanya terhadap nomor rahasia tersebut. Coba dan tulis bagian game ini sendiri sebelum memeriksa solusi.
Terakhir, kita perlu menambahkan loop yang terus mengumpulkan tebakan dari pemain sampai akhirnya mereka menebak angka rahasianya. Setelah menyelesaikan bagian materi ini Anda, silakan lihat solusi kami.
Dekomposisi adalah salah satu keterampilan yang paling penting untuk dipelajari oleh {i>programmer<i}. Mampu memecah tugas menjadi bagian-bagian yang mudah dikelola, dan kemudian menyelesaikan satu tugas pada suatu waktu sangatlah penting, tidak peduli seberapa besar atau kecilnya proyek tersebut. Berikut beberapa kesempatan lain bagi Anda untuk mempraktikkan dekomposisi.
- Banyak tugas sehari-hari yang memberikan kesempatan untuk membangun keterampilan dalam dekomposisi.
Mungkin akan mengejutkan Anda saat mengetahui bahwa pikiran Anda hanya bekerja dengan cara ini!
Misalnya, jika saya harus membersihkan dapur yang sangat berantakan (mungkin beberapa gadis kecil baru saja memanggang kue), saya memecah tugasnya untuk membuat rencana, dan untuk memastikan bahwa saya tidak perlu mengerjakan ulang pekerjaan itu nanti. Saya tidak ingin mencuci lantai terlebih dahulu jika ada berbagai macam barang di konter yang harus dibersihkan - saya akan mungkin harus membersihkan pekerjaannya lagi. Jadi, mungkin saya menempatkan semua bahan pergi terlebih dahulu; memindahkan semua piring ke tempat cuci piring; membersihkan penghitung; mencuci piring; dan terakhir, membersihkan lantai. Ada cara lain untuk melakukan tugas ini, tetapi dengan memikirkannya terlebih dahulu, hal ini membantu saya dalam menentukan rencana yang tidak memerlukan pengerjaan ulang.
Gunakan tugas sehari-hari sebagai contoh untuk mengembangkan keterampilan Anda dekomposisi. Siapa tahu - bahkan bisa membuat Anda lebih efisien di rumah!
- Pemisah persekutuan terbesar dari dua bilangan bulat adalah bilangan terbesar yang
membagi keduanya secara merata. Misalnya, gcd(12, 18) = 6, gcd(-4, 14) = 2.
Cara paling efisien untuk menghitung gcd adalah dengan algoritma Euclidean. {i>Write<i}
sebuah program dengan fungsi untuk menghitung
gcd untuk dua bilangan bulat. Coba lakukan
tanpa rekursi terlebih dahulu - ini akan membantu Anda memahami bagaimana algoritma
berhasil.
Tentukan sub-tugas Anda secara eksplisit, misalnya, temukan kode untuk algoritme; membuat fungsi non-rekursif untuk algoritma; dll. Berikut adalah solusi kami.
Contoh 5: Puzzle Matematika
Salah satu kekuatan komputasi adalah mampu melakukan pencarian {i>brute force<i} untuk solusi untuk suatu masalah. Fitur uji coba dan error tidak masalah untuk beberapa masalah. Faktanya, komputer sangat bermanfaat untuk mengatasi masalah-masalah tersebut. Pertimbangkan ini:
Harga kuda $10, babi seharga $3, dan kelinci hanya $0,50. Seorang petani membeli 100 hewan seharga $100, berapa banyak setiap hewan yang ia beli?
Ada solusi yang sangat sederhana untuk masalah ini. Lihat apakah Anda dapat menemukan sebelum Anda melihat milik kami.
Berikut cara lainnya yang bisa dicoba:
Berapa banyak cara untuk menyusun 6 buku yang berbeda, dari kiri ke kanan, di rak?
Kali ini kami hanya akan memberikan solusinya dan memungkinkan Anda menulis program: 720.
Contoh 6: String untuk dipertimbangkan
Apa yang dihasilkan dari program berikut?
#include <iostream> using namespace std; int main() { string str1 = "To be or not to be, that is the question"; string str2 = "only "; string str3 = str1.substr(6, 12); str1.insert(32, str2); str1.replace(str1.find("to be", 0), 5, "to jump"); str1.erase(9, 4); cout << str1 << endl; for (int i = 0; i < str3.length(); i++) cout << str3[i]; cout << endl; }
Klik di sini untuk mendapatkan bantuan.
Contoh 7: Langkah selanjutnya dengan dekomposisi - Hari pertama Anda di pekerjaan
Anda baru saja mendapat posisi sebagai tenaga penjualan untuk perusahaan {i>ExerShoe<i}, yang berspesialisasi sepatu olahraga kelas atas seharga sekitar $225 per pasang. Bos telah memberi Anda tiga opsi kompensasi, yang harus Anda pilih sebelum memulai pelatihan tanggal:
- Gaji langsung $600 per minggu;
- Gaji $7,00 per jam ditambah komisi 10% atas penjualan;
- Tanpa gaji, tetapi komisi 20% dan $20 untuk setiap pasang sepatu yang dijual
Sebagai {i>programmer<i} C++ ahli, Anda dapat menulis program untuk memutuskan pilihan kompensasi terbaik.
Pendekatan umum dalam melakukan dekomposisi untuk program yang lebih besar adalah membuat fungsi utama yang dibaca seperti garis besar untuk memecahkan masalah. Lalu: kita menulis fungsi untuk melakukan setiap tugas.
Berikut adalah tahap pertama di program utama:
GetInput(WeeklySales); CalcMethod1(WeeklySales); CalcMethod2(WeeklySales); CalcMethod3(WeeklySales);
Lihat apakah Anda dapat menerapkan setiap fungsi ini, sebelum melihat solusi.
Contoh 8: Apa yang tersedia di tempat yang tersedia?
Apa output dari program berikut?
// scope.cpp, Maggie Johnson // Description: A program to illustrate different scopes #include <iostream> using namespace std; int a = 18; int b = 6; int function1(int a, int b) { return a - b; } int function2() { int c; c = a + b; return c; } int main() { int b = 12; int c = 0; a = function1(b, a); c = function2(); cout << "a: " << a << " b: " << b << " c: " << c << endl; }
Setelah menemukan jawaban, lihat versi kode yang kami komentari di sini.
Contoh 9: Memproses File
Pemrosesan file di C++ dilakukan menggunakan fstream. Untuk menyimpan ke file, kita deklarasikan ofstream, dan buka menggunakan "out" mode. Periksa dalam contoh berikut.
// file.cpp, Maggie Johnson // Description: An illustration of file processing #include <fstream> #include <iostream> using namespace std; int main() { char first_name[30], last_name[30]; int age; char file_name[20]; // Collect the data. cout << "Enter First Name: "; cin >> first_name; cout << "Enter Last Name: "; cin >> last_name; cout << "Enter Age: "; cin >> age; cout << endl << "Enter the name of the file: "; cin >> file_name; // Create an ofstream called People, open the stream for output. ofstream People(file_name, ios::out); // Write the output to the stream. People << first_name << endl << last_name << endl << age << endl; return 0; }
- Lihat apakah Anda dapat mengetahui cara membuka file yang baru saja dibuat, dan menampilkan yang mengupload data.Berikut adalah solusi kami.
- Sekarang lihat apakah Anda dapat memodifikasi program ini untuk memungkinkan pengguna memasukkan banyak catatan data menggunakan sebuah {i>loop <i}. Kita juga ingin membaca kembali semua data, satu merekam pada satu waktu.Berikut adalah solusi kami.
Sekarang Anda siap untuk mencoba beberapa latihan dan project Anda sendiri.
Bagaimana rasanya menjadi seorang insinyur perangkat lunak di Google
Baca tentang bagaimana rasanya bekerja dengan Google di situs Anda.
Latihan dan Proyek
Latihan berikut akan memberi Anda lebih banyak latihan dengan C++ dasar. Kami tidak memberikan solusi untuk latihan ini dan proyek karena kami ingin Anda bekerja dengan siswa lain dalam materi sebelumnya.
- Nada suara kriket yang umum berbanding lurus dengan suhu saat ini.
Menambahkan 40 ke jumlah waktu dentingan kriket dalam satu menit, lalu membagi
nilai 4 itu akan menghasilkan suhu. Menulis program yang menggunakan input
jumlah bunyi kerik dalam satu menit dan mencetak suhu saat ini. Sebagai
contoh,
Number of chirps: 120 The temperature is: 40.0 degrees.
- Tulis program yang akan menghitung nilai akhir Anda untuk materi pemrograman
yang Anda ambil. Berikut adalah skema penilaiannya:
Final grades will be based on the following: 40% Assignments 15% Midterm Examination 35% Final Examination 10% Class Participation Grade
Program Anda harus meminta pengguna untuk menghitung empat nilai tugas, ujian tengah semester, nilai akhir dan bagian. Kemudian, skor akhir dihitung dan dicetak. Untuk melakukan perhitungan, Anda menghitung rata-rata empat nilai tugas secara bersamaan dan kemudian kalikan dengan 0,4 (40%). Kemudian, kalikan skor tengah semester dengan 0,15, yang terakhir dengan 0,35 dan nilai partisipasi dengan 0,1. Kemudian Anda menjumlahkan semua hasil perkalian tersebut.
Gunakan fungsi di mana pun Anda bisa dalam program ini. Anda dapat membuat fungsi untuk mendapatkan input dengan meneruskan string yang akan ditampilkan sebagai parameter dalam sebuah penjelasan. Berikut ini adalah contoh operasi:
Enter the score for the first assignment. 75 Enter the score for the second assignment. 85 Enter the score for the third assignment. 82 Enter the score for the fourth assignment. 94 Enter the score for the midterm. 81 Enter the score for the final. 89 Enter the score for the section grade. 100 The final grade is: 86.9
- Karena stopwatch elektronik menjadi lebih murah dan lebih akurat, kami tidak akan
keraguan dibanjiri dengan
pengukuran waktu yang tidak mungkin akurat. Menulis program
yang mengambil periode waktu dalam satuan detik sebagai input, dan menghasilkan jumlah
jam, menit, dan detik yang diwakilinya. Misalnya,
Number of seconds: 3662 Hours: 1 Minutes: 1 Seconds: 2
- Misalnya kita ingin mencetak banner untuk hal berikut:
"PENJUALAN BEBANG MENJADI TIGA POH TERBEKU"
Kita ingin hurufnya cukup besar karena ini adalah spanduk:
dll.FFFFF F FFF F F EEEEE E EEE E EEEEE
Sebagai dekomposer masalah yang baik, Anda mungkin memperhatikan bahwa alih-alih menempatkan semua {i>cout<i} di fungsi utama, akan jauh lebih efisien untuk memasukkannya ke dalam fungsi. Kita bisa menulis "printE" fungsi dan "printZ" fungsi dan seterusnya.
Tulis program dengan fungsi yang membuat spanduk kata atau frasa dengan banyak huruf yang berulang. Beberapa kemungkinan:
FREEZY BREEZE MAKES FLEAS SNEEZE TWEETLE BEETLE PADDLE BATTLE SIX SICK CHICKS KICK SUE SEWS SUE'S SOCKS BEN BENDS BIM'S BROOM
- Ini "angka ajaib" masalah: Minta pengguna memasukkan kode tiga digit
angka yang angka pertamanya lebih besar dari angka terakhirnya. Program Anda akan membalikkan
angka, dan mengurangi pembalikan dari angka asli. Terakhir,
membalikkan angka yang dihasilkan, dan
menambahkannya ke bentuk yang tidak dibalik. Output
hasil akhir proyek. Angka asli yang dimasukkan pengguna harus berupa bilangan bulat
(bukan tiga karakter). Pikirkan tentang cara menulis
{i>function<i} yang membutuhkan
bilangan bulat sebagai input dan mengembalikan
kebalikan angka tersebut. Contoh:
input number: 901 reverse it: 109 subtract: 901 - 109 = 792 reverse it: 297 add: 297 + 792 = 1089
- Hukum tersebut mewajibkan produsen produk makanan untuk menempatkan tanggal kedaluwarsa
pada produk mereka, tetapi ada celah dalam undang-undang: hal itu tidak mengharuskan
tanggal kedaluwarsa dalam bentuk apa pun. Jadi, dapat ditulis dalam
Swahili dan masih sah.
Sepupu ketiga Ralph Nader, Nadine, adalah Food Quality Spy. Dia telah belajar bahwa banyak produsen produk makanan mulai menulis kode tanggal kedaluwarsa produk untuk menjaga agar pelanggan tidak mengetahui berapa umur esensial.
Namun, encoding tersebut memungkinkan toko untuk mengetahui tanggal kedaluwarsa jika karena suatu alasan, mereka ingin melakukannya.
Salah satu metode encoding yang populer:
- enkode bulan dari Jan hingga Des sebagai 'A' sampai 'L'
- enkode setiap digit tanggal sebagai 'Q' sampai 'Z'
- enkode tahun sebagai 'A' sampai 'Z' artinya 1 sampai 26 yang kemudian ditambahkan pada tahun 1995.
Nadine menemukan sepotong roti yang cukup diragukan dengan tanggal ini: ARZM. Tulis program untuk menentukan tanggal.
- Ini adalah analogi angka untuk trik kartu yang terkenal. Minta pengguna untuk memasukkan angka tiga digit. Bayangkan angka sebagai ABC (di mana A, B, C adalah tiga digit nomor). Sekarang, temukan sisa bilangan yang dibentuk oleh ABC, BCA, dan CAB jika dibagi 11. Kita akan menyebut sisa ini X, Y, Z. Tambahkan sebagai X+Y, Y+Z, Z+X. Jika salah satu jumlahnya ganjil, tingkatkan atau kurangi 11 (operasi mana pun yang menghasilkan angka positif lebih sedikit dari 20; perhatikan jika jumlahnya 9, cukup laporkan dan hentikan prosesnya). Terakhir, bagi setiap penjumlahan menjadi dua. Digit yang dihasilkan adalah A, B, C. {i>Write<i} program yang mengimplementasikan algoritma ini.
Pada contoh berikut, lakukan dekomposisi sebelum menulis program. Gunakan fungsi jika memungkinkan untuk membuat program yang terstruktur dengan baik.
Aplikasi: Memvisualisasikan Musik dengan Animasi
Insinyur perangkat lunak membuat berbagai macam aplikasi yang sering kali menarik dan inovatif. Dalam setiap modul materi ini, kami menyajikan aplikasi berbeda yang digunakan insinyur dirancang dan diimplementasikan, untuk membantu Anda memahami semua area yang berbeda di mana insinyur/teknik bekerja.
Berikut adalah salah satu aplikasi yang dibuat untuk memvisualisasikan musik.