[MUSIC PLAYING] Allison Buchholtz-AU: Hey everyone. Selamat Datang pertama Anda Bagian CS50 resmi. Seperti yang dapat Anda, lihat ini Bagian CS50-seperti, hanya untuk menarik agenda kami untuk hari ini. Jadi, siapa saya, karena saya yakin Anda semua bertanya-tanya. Saya TF Anda. Aku tidak hanya mahasiswa acak siapa yang meniru TF Anda. Dan aku akan pergi melalui jenis memiliki bagian akan mengalir, harapan yang kita miliki, sumber daya, seterusnya dan sebagainya. Kita akan berbicara tentang array, ASCII fungsi, argumen baris perintah, dan itu tidak di sini, tapi Saya juga akan membantu Anda jenis berpikir melalui pset berikutnya untuk minggu ini. Yang saya yakin Anda semua akan menghargai. Jadi, pertama question-- siapa saya, selain TF riang Anda di sini. Aku Alison Buchholtz-Au. Ini adalah tahun kedua saya TFing CS50. Saya juga TF CS51 di musim semi. Anda mungkin melihat lagi ada jika Anda memutuskan untuk mengambil itu. Saya juga PAF, sehingga setiap Freshmen-- dan jika Anda tidak mahasiswa baru, ini adalah tahun ketiga saya sebagai sesama menasihati. Saya sangat berpengalaman dalam menasihati Anda pada kehidupan dan program dalam CS, bukan dalam CS. Saya seorang Ilmu Komputer Concentrator. Saya seorang senior di Adams House, rumah terbaik. Dan sebelum saya beralih ke CS saya Sophomore Spring, Aku benar-benar seorang insinyur biomedis. Aku akan pergi ke sekolah Med. Aku akan menjadi seorang ahli bedah trauma. Dan itu telah benar-benar berubah sejak saya mengambil CS50. Aku mengambil kursus Sophomore saya jatuh. Itu adalah pengenalan pertama saya ke CS pernah. Saya adalah salah satu dari 78% dari Anda yang telah nol pengalaman datang, dan itu benar-benar mengubah hidup saya. Dan sekarang saya sedang bekerja di Microsoft, dan TF indah Anda. Dan CS50 merupakan salah satu pengalaman terbaik bahwa aku sudah di sini di Harvard-- baik mengambil kelas dan mampu membantu mengajar siswa seperti Anda. Jadi aku sangat bersemangat bahwa Anda semua di sini. Dalam kasus Anda datang terlambat, ada permen, yang Anda harus merasa bebas untuk datang ambil, atau mengirim orang lain untuk mengambil untuk Anda. tidak apa-apa. Saya tidak ingin makan itu. Kamar memiliki cukup cokelat, jadi kalian harus mencoba dan menyelesaikan itu. Aku tahu ada 100 buah, tapi seperti, 04:00 pada hari Senin, Saya pikir semua orang bisa menggunakan beberapa gula. Jadi semua Anda yang resmi dalam bagian saya harus mendapatkan email dari saya dengan nomor telepon saya, email address-- merasa bebas untuk menambahkan saya di Gchat, jangan ragu untuk menambahkan saya di Facebook, dan juga untuk sisa Anda, Anda dapat email saya di sini. Ada dua H. Semua orang selalu melakukan seperti dua L's atau dua C. Dua H di nama belakang. Jika tidak itu akan bangkit, dan Aku tidak akan mendapatkan email Anda. Jadi jangan ragu untuk email saya, untuk menghubungi saya kapan saja. Saya mungkin tidak mendapatkan kembali ke Anda dalam waktu 24 menit, tapi aku berjanji untuk kembali kepada Anda dalam waktu 24 jam. Jika Anda menelepon saya setengah jam sebelum pset Anda adalah karena, Anda menjadi seperti, Aku tidak tahu apa yang saya lakukan Allison. Bantu saya. Aku akan menenangkan Anda, tapi pada akhir hari, jika Anda memanggil saya setengah jam sebelum pset Anda adalah karena dengan tidak tertulis, Aku akan menjadi seperti, well, mungkin saatnya untuk menggunakan hari terlambat. Jadi saya akan merespon semua Anda permintaan dalam cara yang sangat tepat waktu. Ponsel saya biasanya melekat pada tangan saya. Saya biasanya merespon lebih lebih cepat dari 24 jam, tapi aku hanya bisa menjamin respon 24 jam. Baik. Jadi mengapa kita di sini? Juga, jika Anda memiliki pertanyaan di setiap saat, tolong beritahu saya. Saya bicara banyak. Saya bicara cepat, tapi tolong merasa bebas untuk mengganggu saya. Ini memberi saya ruang untuk bernapas juga. Jadi bagian yang waktu bagi kita untuk benar-benar hanya menyelam di, mendapatkan beberapa tangan-pengalaman, untuk pergi melalui topik yang kami sebutkan di kelas atau dalam bahan studi yang kami sarankan untuk kalian secara online. Dan kita benar-benar akan pergi melalui beberapa dari mereka sumber daya dalam sedikit. Jadi beberapa catatan pada bagian dukungan. CS50-- salah satu hal yang membuat itu salah satu kelas favorit saya adalah perasaan bahwa Anda tidak pernah sendirian. Kami memiliki staf lebih dari 100 orang yang ada di sini untuk membantu Anda. Kami memiliki jam kantor Senin sampai Kamis. Jadi ada begitu banyak orang yang cinta kelas hanya sebanyak seperti yang saya lakukan dan yang benar-benar di sini karena mereka ingin berada di sini. Sebagian besar dari kita adalah mahasiswa, dan ini seperti kelas kelima di samping ke seluruh pekerjaan kami. Dan itu banyak pekerjaan, tetapi kita melakukannya karena kita menyukainya, dan kita benar-benar senang untuk mengajarkan Anda dan membantu berbagi kegembiraan kami untuk hal ini dan kelas ini. Jadi silakan manfaatkan. Datang berbicara dengan kami. Aku kesepian ketika siswa saya tidak berbicara dengan saya, jadi jika Anda ingin, datang bergaul dengan saya. Ini akan menjadi besar. Jadi bagian jelas salah satu hal terbesar Anda. Kita akan pergi melalui hal-hal yang Anda pelajari di kuliah, melakukan beberapa contoh singkat ketika kita punya waktu, dan umumnya jenis mendapatkan ide tentang hal-hal Anda harus berpikir tentang untuk masalah Anda mengatur. Shorts-- berapa banyak orang sebenarnya menonton video dari awal Anda pendek? Siapapun mengenali saya? Jadi mereka sangat besar. Anda pasti harus menonton mereka. Banyak pekerjaan telah dimasukkan ke dalamnya. Dan mereka hanya dimaksudkan untuk menjadi gigitan-ukuran potongan bagi Anda untuk hanya menonton selama tiga atau empat menit dan mendapatkan pemahaman yang lebih baik dari konsep. Berjalan throughs-- bagaimana banyak orang telah menyaksikan berjalan-through untuk yang sebelumnya? Zamyla menakjubkan, bukan? Seperti, aku berharap aku Zamyla kadang-kadang. Jadi pasti menggunakan walk-through Anda. Dia akan memecahnya menjadi potongan-potongan kecil, menggigit-ukuran. Dan ketika Anda memiliki ini besar Spesifikasi dari set masalah Anda, itu akan menjadi benar-benar penting untuk dapat langsung mencari tempat untuk memulai dan bekerja perlahan-lahan melalui itu. Baiklah, kami juga memiliki Study50, yang adalah study50.harvard.edu, saya percaya. Anda bisa saja Google belajar, dan itu akan datang. Ini adalah salah satu sumber daya terbaik yang kita miliki. Ini adalah PowerPoint dengan catatan dan praktek masalah bagi Anda dengan solusi yang Anda dapat benar-benar berjalan melalui. Jadi jika Anda pernah ingin lebih banyak latihan, lebih dari yang kita lakukan di bagian atau lebih dari set masalah Anda, ini adalah benar-benar tempat saya mendorong Anda untuk pergi. Dibangun musim panas lalu oleh beberapa teman yang benar-benar baik saya. Dan itu menakjubkan. Bahkan, banyak slide bahwa saya akan menggunakan untuk Bagian akan datang dari Study50. Jadi banyak TF menggunakannya. Dan akhirnya, seperti yang saya disebutkan, jam kantor. Jika Anda mengalami kesulitan dengan pekerjaan rumah, Anda mengalami kesulitan dengan konsep, datang ke kantor jam. Pergi di awal minggu jika Anda bisa. Keluar ke quad, karena agak jauh. Tidak ada yang suka untuk berjalan di luar sana. Tapi itu adalah untuk keuntungan Anda, karena maka Anda akan memiliki semua TF ini, [Tak terdengar] mengelilingi Anda. Dan terutama sekarang, hanya tip, Kamis sangat dingin sekarang di Mather karena psets Anda akan jatuh tempo pada hari Kamis. Dan yang mengetahui ingin menggunakan hari terlambat Anda belum. Jadi jika Anda memiliki masalah dengan konsep, ada banyak TF yang ada untuk membantu Anda. Jadi datang ke Mather, Kamis. Jika Anda ingin melihat saya, Aku akan berada di sana. Saya biasanya melakukan pekerjaan rumah saya sendiri, karena tidak ada yang mau membantu saya. Jadi datang melihat kami. Temui kami di tengah jalan. Jadi berapa banyak orang telah menghadiri kuliah atau menonton secara online? Berapa banyak orang pergi ke Super seksi minggu lalu? Keren. Itu sebenarnya cukup banyak. Berapa banyak dari Anda telah membaca Anda spek untuk minggu ini, untuk pset Anda? Ooh, aku bangga kalian! Lebih permen untuk kalian. Baik, jadi apa yang kita maksud "Menemui kami di tengah jalan," adalah Bagian yang benar-benar hanya akan menjadi super berguna bagi Anda jika Anda datang setelah membaca Anda spesifikasi untuk pset Anda. Karena ketika saya pergi melalui gambaran hal yang harus Anda melihat keluar untuk, itu tidak akan membuat sebanyak akal jika Anda tidak tahu apa masalah Anda mengatur yang akan meminta Anda untuk dilakukan. Jika Anda tidak datang ke bagian, jelas Saya tidak dapat yang berguna bagi Anda. Aku tidak akan tersinggung jika Anda tidak datang ke bagian saya sekarang, tapi pasti Anda harus. Jika Anda tidak dapat, menonton secara online. Mereka ada karena suatu alasan. Tambang akan segera ke sana. Seperti yang Anda perhatikan, kita sedang direkam, sehingga akan segera ke sana untuk kalian. Selain itu, akan lectures-- itu jelas di mana Anda mendapatkan mulai dari materi Anda di sini. Jadi saya pasti akan mencoba dan membantu Anda sebanyak yang saya bisa, tapi aku hanya bisa bertemu dengan Anda sejauh ini. Anda harus jenis menemui kami setengah jalan di sana. Grading-- begitu, kalian semua yang mendapat email dari saya, Anda bagian resmi saya. Aku akan grading psets Anda. Dan aku hanya ingin mengatakan, satu hal yang Anda benar-benar harus memperhatikan adalah komentar. Komentar sering lebih berguna dari skor aktual kami memberikan. Dan komentar sebenarnya di mana saya menghabiskan banyak waktu saya ketika saya grading. Jadi saya akan menghargai jika Anda membacanya. Dan mereka benar-benar bagaimana Anda akan untuk mempelajari lebih lanjut tentang desain dan gaya dan hal-hal yang merupakan sedikit kurang dipotong dan kering. Jadi benar-benar memperhatikan kepada mereka komentar. Jika Anda memiliki pertanyaan tentang mereka, atau pertanyaan tentang skor Anda, silahkan datang bicara padaku baik sebelum bagian, Aku mungkin akan nongkrong di lobi, atau sesudahnya. Jika Anda ingin menjadwalkan satu-on-one meeting tentang bagaimana Anda dapat membantu meningkatkan nanti masalah set, just let me know. Dan kemudian hanya beberapa tips untuk kalian. Jadi salah satu hal terbesar Saya selalu menekankan kepada bagian saya ketika Anda belajar bagaimana kode adalah untuk menulis hal-hal di atas kertas pertama. Jika Anda memiliki rencana permainan untuk di mana kode Anda perlu untuk pergi dan apa yang dibutuhkan untuk lakukan dan itu dipecah menjadi potongan-potongan kecil pseudocode kode yang telah ditulis, Anda akan menjadi kurang mungkin untuk membuat kesalahan sintaks atau membuat jika loop yang tidak memiliki lagi. Jika Anda tahu di mana Anda akan secara keseluruhan, Anda kecil kemungkinannya untuk membuat ini kecil kesalahan yang kadang-kadang akan membawa Anda jam untuk memperbaikinya, karena Anda seperti, di mana saya hilang braket ini? Pada catatan itu, silakan gunakan Style50. Terutama ketika Anda akan jam kantor, jika kode Anda semua beralih ke satu sisi, itu adalah kebijakan program bahwa kita dapat mengatakan, memperbaikinya sehingga terlihat seperti Style50 mengatakan seharusnya, dan kemudian kami akan membantu Anda. Sehingga akan membuat hidup Anda lebih mudah. Ini akan membuat hidup kita lebih mudah. Semua orang bahagia. Semua orang mendapat nilai yang lebih baik. Bukankah itu yang kita semua inginkan? Jadi menulis hal-hal di atas kertas sebelum Anda pernah menyentuh komputer Anda. Bicara hal-hal pada tingkat tinggi, dan pastikan Anda tahu di mana Anda akan pergi. Dan jika Anda tidak yakin, duduk dengan seseorang dan berjalan mereka melalui langkah demi langkah apa kode Anda yang seharusnya dilakukan. Dan sembilan dari 10, Anda akan seperti, oh, aku lupa sebuah jika kondisi atau saya lupa titik koma di sini atau Saya memperbarui salah variabel ini. Jadi mereka adalah tips saya untuk sukses. Jadi sejak sekitar setengah dari Anda melihat seperti Anda menghadiri Super bagian, Aku hanya akan sangat sebentar pergi melalui loop, yang tidak pada agenda asli kita. Tapi mereka benar-benar penting. Dan aku akan baik kecepatan melalui mereka sebelum kita masuk ke bagian kami yang sebenarnya. Sebelum saya melakukan itu, apakah ada setiap questions-- logistik, secara pribadi, apakah ada apa pun yang Anda inginkan untuk mengetahui tentang saya atau sekitar bagian atau kelas pada umumnya? Semua baik? OK, keren. Indah. Jadi loops-- kalian harus semua mengenali potongan-potongan ini dari awal. Jadi loop pada dasarnya hanya cara bagi kita untuk melakukan sesuatu beberapa beberapa kali, beberapa diulang tindakan berdasarkan beberapa bersyarat. Jadi kita memiliki tiga jenis. Kami memiliki untuk loop, sementara, dan do-while. Jadi untuk loops-- hanya kita memiliki sangat tata letak umum di sini dari untuk loop. Dan ini sangat bagus untuk ketika Anda tahu bagaimana berkali-kali sesuatu perlu mengeksekusi. Ketika kita berbicara tentang loop lain, Anda akan melihat mengapa itu merupakan perbedaan penting. Tapi untuk loop untuk sesuatu set. Anda tahu Anda dapat menghitung jumlah atau Anda tahu berapa kali Anda ingin ini terulang di awal. Jadi jika Anda lihat di sini, kita memiliki hanya semacam umum kerangka kerangka untuk untuk loop di sini. Jadi untuk-inisialisasi, ini adalah di mana variabel diinisialisasi. Dengan Mario, saya yakin kalian lakukan sesuatu seperti int i sama dengan 0. Di situlah yang akan terjadi dengan warna biru. Anda memiliki kondisi Anda, yang adalah apa yang diperiksa setiap kali. Jika kondisi ini benar, maka sisa kode dijalankan. Kemudian akan menjalankan again-- dan bertanya. Dan kemudian kita harus memperbarui, di mana Anda memperbarui variabel Anda. Jadi, sekali lagi, dengan seperti Mario, saya yakin kalian melakukan sesuatu seperti i plus plus. Jadi setiap kali loop berlari, aku punya diperbarui sehingga bahwa ketika kami memeriksa itu terhadap beberapa kondisi, itu berubah. Karena jika Anda hanya memiliki variabel statis, jika dijalankan pertama kali, itu hanya akan mengeksekusi jauh. Jadi, Anda harus memastikan bahwa Anda memperbarui variabel Anda dengan benar. Dan kami juga memiliki hanya representasi visual di sana. Semua orang baik? Untuk loop. Seharusnya melihat ini di pset Anda. Keren. Jadi di sini hanya sebuah contoh yang mudah. Cetak Ini adalah CS50! 10 kali. Dan jadi kita harus inisialisasi kami, seperti yang kita lihat di sana, dengan int i sama dengan 0, untuk i kurang dari 10, dan saya plus plus. Dan itu akan mencetak bahwa 10 kali. Jadi sementara loops-- sementara loop ketika besar Anda lakukan belum tentu harus tahu berapa kali itu akan memperbarui pada awalnya. Anda hanya memiliki beberapa Kondisi yang diperiksa. Dan ini bisa menjadi sesuatu seperti while-- mari kita mengambil contoh dari pset Anda. Jika Mario, Anda mencoba untuk masukan angka negatif. Benar? Kau seharusnya kembali meminta pengguna Anda. Jadi Anda bisa mengatakan, baik, jika input pengguna sesuatu yang kurang dari nol, re-cepat mereka. Dan aku yakin yang mungkin memiliki sesuatu bahwa beberapa dari Anda digunakan dalam kode Anda. Jadi itu adalah hal yang sederhana. Anda memiliki sementara, beberapa kondisional yang diperiksa setiap kali kode berjalan untuk mengeksekusi. Jika bernilai true, kita menjalankannya. Kalau tidak, kita tidak. Dan apa yang benar-benar sesuatu important-- Saya berpikir bahwa David berbicara tentang di lecture-- adalah kawat gigi. Apapun itu dalam kawat gigi adalah apa yang dijalankan. Jika Anda lupa mereka kawat gigi, itu hanya akan menjadi garis langsung setelah beberapa saat dieksekusi. Jadi jika Anda memiliki tiga hal-hal yang seharusnya terjadi ketika ini Kondisi bernilai true, dan Anda tidak memiliki orang-orang kawat gigi, hanya hal pertama yang akan terjadi. Jadi sangat sadar di mana Anda meletakkan kawat gigi Anda. Jika Anda tetap dengan Style50, ini pasti akan membantu Anda. Keren. Jadi ini adalah hitung mundur dari 10 sampai nol. Dan seperti yang Anda lihat di sini, kita menginisialisasi beberapa meja di luar itu. Satu hal yang berbeda adalah kita tidak menginisialisasi variabel kami dalam loop sementara kami. Ini diinisialisasi di luar itu. Kami hanya hanya menempatkan kondisi di untuk sementara kami. Jadi dalam hal ini, itu sementara hitung lebih besar dari nol. Dan kami mencetak apa count kita, dan kemudian kami pengurangan variabel kita. Dan itu juga hal lain untuk melihat. Pembaruan kita tidak terjadi dalam bagian pertama dari loop sementara. Ini akan benar-benar terjadi dalam kawat gigi, tubuh teks Anda. Jadi jangan-sementara loops-- do-while loop yang besar untuk validasi pengguna. Jadi beberapa dari Anda mungkin memiliki juga menggunakan ini di pset Anda. Anda dapat mengatakan, lakukan, seperti, meminta pengguna untuk input. Dan kemudian saat, seperti, yang masukan kurang dari beberapa nomor. Jadi untuk kasus eksplisit dengan Mario, itu akan melakukan printf, masukkan integer, dan kemudian beberapa bilangan bulat sama dengan getInt. Dan kemudian itu akan benar-benar mengeksekusi kode yang pertama. Anda akan benar-benar memiliki semacam integer. Dan kemudian Anda bisa mengatakan, sementara integer yang kurang dari nol. Jadi apa yang akan lakukan adalah itu akan mengeksekusi setidaknya sekali. Ini akan memeriksa kondisi. Jika kondisi ini benar, itu akan berjalan lagi. Jadi do-while loop besar untuk validasi pengguna, karena Anda tahu kode akan mengeksekusi setidaknya sekali, sedangkan dengan sementara loop, Anda tidak dijamin bahwa itu akan mengeksekusi sekali. Ini akan memeriksa kondisi pertama dan kemudian memutuskan untuk melaksanakannya, sementara do-while akan mengeksekusi kode pertama dan kemudian memeriksa untuk melihat apakah Anda perlu mengulanginya. Apakah perbedaan itu masuk akal untuk semua orang? OK. Keren. Jadi dalam hal ini, ini adalah jenis dari apa yang saya bicarakan, ini re-petunjuk sampai Anda mendapatkan angka positif. Jadi kita tahu bahwa printf "Masukkan angka positif" dan benar-benar meminta untuk itu masukan akan terjadi setidaknya sekali. Jika pengguna jahat dan terus memasukkan angka negatif, yang tahu berapa kali itu akan mengeksekusi. Tapi kode ini dijamin untuk mengeksekusi setidaknya sekali. Dan itulah mengapa itu bagus untuk memvalidasi input. Dan Anda akan menggunakan cukup sedikit. Baiklah, pertanyaan sejauh ini? Kami semua baik? Apakah saya berbicara terlalu cepat? Kita baik? OK. Mengagumkan Jadi kita akan pergi ke depan dan berbicara tentang array. Keren. Jadi array pada dasarnya hanya struktur data yang memungkinkan kita untuk menyimpan hal dari jenis yang sama. Jadi jika Anda pernah memiliki sebuah array, itu baik hanya akan memiliki int atau itu hanya akan memiliki mengapung atau itu hanya akan memiliki karakter. Anda tidak akan memiliki int dengan char dengan pelampung dengan ganda. Satu hal. Array hanya satu ukuran, atau mereka hanya satu jenis. Jadi di sini kita memiliki sebuah array ukuran tiga dengan tiga bilangan bulat di dalamnya. Mereka bisa mengapung, tapi kami akan mengatakan int mereka. Jadi satu hal yang harus disadari adalah bahwa array adalah ukuran set ketika Anda menginisialisasi mereka, dan mereka tidak easily-- karena Anda semua kurang nyaman, Anda hanya harus menganggap mereka sebagai tidak mampu untuk memperpanjang ukuran. Namun besar Anda berangkat array di awal, itu ukuran itu akan untuk tinggal, karena array blok kontinu memori. Dan ketika kalian dapatkan menjadi sedikit lebih bagaimana memori sebenarnya diletakkan di disk dan dalam tumpukan dan tumpukan, itu akan membuat sedikit lebih masuk akal. Tapi Anda hanya bisa memikirkan seperti, itu hanya deretan ruang pada disk Anda. Dan Anda tidak dapat menjamin bahwa ada akan menjadi ruang bebas setelah. Anda bisa menginisialisasi array tiga dan kemudian mungkin Anda menginisialisasi array lain dari lima kemudian, dan itu tepat setelah itu. Jadi jika Anda adalah untuk pergi tempat terakhir tiga yang pertama array, Anda akan menulis lebih dari sesuatu yang lain. Jadi array are-- untuk kalian, hanya menganggap mereka sebagai ukuran tetap. Jadi menciptakan array-- Anda akan perlu untuk melakukan hal ini cukup sedikit. Jadi dengan cara yang sama bahwa kita memiliki struktur umum untuk kami untuk loop, kami memiliki bagus umum struktur untuk array kita. Karena mereka dari satu jenis, semua elemen dalam array adalah dari satu jenis, Anda perlu menginisialisasi apa jenis itu. Jadi, seperti yang Anda lihat di sini, kita memiliki bagus sedikit tipe data braket. Jadi jika kita membuat sebuah int array, yang akan int. Jika kita membuat char array, itu akan menjadi arang. Jika kita membuat string array, itu akan menjadi tali. Dan kemudian nama array, apa pun yang Anda ingin untuk menjadi. Jadi mungkin itu nilai tes atau mungkin itu mahasiswa atau mungkin itu permen. Apa pun yang Anda memutuskan untuk nama Anda array, itulah yang akan. Dan kemudian di kurung, Anda akan memiliki ukuran yang Anda inginkan. Jadi, apakah kita menyimpan 10 siswa atau kita menyimpan 15 jenis permen? Apa yang tidak. Jadi, dalam contoh kita di sini, kami menciptakan sebuah array ukuran tiga, yang kalian lihat di sini di sebelah kanan. Dan ketika kami pertama kali menginisialisasi itu, segala sesuatu diatur ke nol. Jadi itu hanya berpikir seperti sebuah batu tulis kosong. Kami memiliki semua ruang ini, kita memiliki semua kotak-kotak ini kita bisa menempatkan data kami ke dalam, tapi mereka hanya kosong untuk saat ini. Jadi jika kita ingin benar-benar menetapkan mereka nilai-nilai ini, kami melakukannya sebagai tepat di bawah sini menunjukkan. Jadi Anda memiliki apa pun nama Anda array dan kemudian apa indeks yang Anda inginkan. Sehingga indeks hanya mengacu pada, seperti, apa Slot kita sedang melihat. Dan suatu hal yang penting untuk melihat adalah bahwa array nol-diindeks. Jadi jika kita ingin ruang pertama dalam memori array kami, itu akan menjadi nol. Jika kita ingin kedua, itu akan menjadi satu. Jika kita ingin ketiga, itu akan menjadi dua. Seterusnya dan sebagainya. Yang juga mengapa, secara konvensional, ketika kita lakukan untuk loops-- saya yakin kalian bertanya-tanya, mengapa kita mulai pada 0 vs 1? Dan itu karena ketika kita transisi dalam menggunakan array, itu peta dengan benar. Jadi jika Anda ingin iterate ke dalam array, itu membuat lebih banyak akal untuk apakah saya sama dengan 0, karena kita tahu bahwa akan sesuai ke tempat pertama dalam memori. Semua orang baik dengan itu? Keren. Dan kemudian pada bagian bawah di sini adalah hanya cara lain untuk menginisialisasi array. Anda masih memiliki Anda tipe data dan nama, tapi bukan benar-benar menempatkan ukuran di sana, Anda hanya dapat melakukan kurung kosong. Dan kemudian dengan ini keriting kawat gigi di bagian bawah, Anda hanya dapat memasukkan data yang Anda ingin dipisahkan dengan koma. Dan itu akan secara otomatis mengatakan, OK, saya melihat Anda memiliki tiga hal dalam kawat gigi ini. Jadi saya tahu bahwa saya perlu mengalokasikan tiga blok memori dan kemudian menyimpan mereka. Jadi versi pertama yang mungkin Anda gunakan jika Anda meminta pengguna untuk masukan nilai-nilai sehingga Anda dapat iterate melalui array dan ask-- mendapatkan beberapa int untuk memasukkan mereka. Jika Anda tahu nilai-nilai sebelumnya, itu membuat banyak lebih masuk akal untuk menggunakan cara kedua. Tetapi pada kebanyakan kasus, Anda mungkin tidak tahu apa nilai-nilai tersebut akan menjadi. Keren. Ada pertanyaan lain? Baiklah. Jadi mengakses elements-- jadi satu hal besar tentang array adalah bahwa mereka acak Akses, yang berarti bahwa Anda tidak harus melihat melalui setiap blok. Jika Anda tahu bahwa Anda ingin apa yang ada di blok dua, Anda bisa saja mengatakan, beri saya blok dua. Dan itulah mengapa ini indeks sangat penting, dan itulah bagaimana kita benar-benar mengaksesnya. Jadi dalam hal ini, seperti yang kita lihat sebelumnya ketika kami menetapkan nilai-nilai, di salah satu sebelumnya, kami memiliki nama dan Indeks kami ingin akses, kan? Jadi dengan cara yang sama, itu semua kita lakukan untuk benar-benar menarik bahwa data keluar. Kami memiliki nama dan kami memiliki indeks yang kita inginkan. Jadi dalam hal ini, untuk loop di sini di bagian bawah, siapa pun tahu apa yang dilakukannya, apa yang akan mencetak? Mmhmm? Tepat. Jadi ya, itu hanya iterasi melalui. i sama dengan zero-- kita dapat berjalan melalui kode hanya cepat. i sama dengan nol, saya kurang dari tiga pada titik ini, kan? Jadi yang memeriksa keluar. Dan kita katakan, OK, cetak f apa yang ada di suhu i. i adalah nol di sini ketika kami pertama kali iterate, jadi kami pergi ke tempat pertama ini, dan kita katakan, OK, 65 adalah nomor kita ingin mencetak. Sehingga akan mencetak 65 dan kemudian melakukan baris baru. saya akan update, sehingga mencetak 87. Ini update lagi, dan itu akan mencetak 30. Semua orang keren? Mengagumkan. Baik. Jadi inilah jenis satu hal yang saya katakan bagaimana Anda dapat melacak Rata seseorang dan mengapa Anda akan menggunakan pertama cara memulainya bukannya itu cara kedua. Dan ini hanya melewati. Dan melihat kita memiliki ukuran kelas 30. Dan kita menginisialisasi ini array int yang ukuran 30. Dan kemudian kita iterasi melalui dan kami meminta pengguna untuk memasukkan skor untuk masing-masing dan kemudian menugaskan ke tempat tertentu di memori suatu tempat di array. Keren? Apakah itu masuk akal untuk semua orang? Mmhmm? Jadi hashtag mendefinisikan ukuran kelas 30 adalah direktif preprocessor, yang hanya berarti gets-- memiliki untuk melakukan seperti proses kompilasi. Anda dapat menganggap itu sebagai variabel global. Cara kita melakukannya adalah typically-- memungkinkan kode Anda agar lebih mudah berubah. Jadi mari kita mengatakan bahwa ukuran kelas kami tiba-tiba pergi 30-15, jika aku tidak didefinisikan dengan cara ini, saya akan harus melalui seluruh program saya dan mengubah setiap contoh dari 30-15. Tapi dengan ini, saya bisa mengubah satu spot, dan segala sesuatu yang lain perubahan. Jika Anda pernah ingin melakukan hash menentukan dalam kasus di mana Anda melacak beberapa mengatur jumlah skor untuk kelas atau Anda menggunakan nomor yang akan digunakan, seperti, seluruh program yang sangat panjang, itu lebih baik untuk menentukan bahwa pada awalnya sehingga jika pernah berubah, Anda mendapatkan untuk mengubah satu tempat, bukan 100. Ya? SISWA: Antara melakukan hal itu dan hanya menyatakan [tak terdengar] lebih di bagian atas. Allison Buchholtz-AU: Jadi hubungannya dengan efficient-- itu semacam di luar lingkup apa yang bisa kita bahas di bagian ini. Ini harus berbuat lebih banyak dengan efisiensi dan bagaimana hal-hal benar-benar bekerja dalam proses kompilasi. Jika Anda ingin benar-benar tahu tentang hal itu, saya senang untuk mengirimkan email dengan sumber daya tentang hal itu. Hash mendefinisikan cenderung pilihan untuk hal-hal. Dan seperti yang Anda kode lebih, Anda jenis belajar nuansa ketika Anda harus menggunakan global yang dibandingkan hash menentukan. Tapi untuk saat ini, Anda tidak benar-benar memiliki khawatir tentang hal itu adalah bahwa jawaban singkat. Semua orang baik dengan itu? Dan juga, jika Anda ingin menggunakan hash mendefinisikan, itu benar-benar penting untuk melihat bahwa nama harus dalam huruf besar semua. Kami tidak hanya melakukan CLASS SIZE menjadi dramatis. Ini benar-benar harus dalam huruf besar semua. Keren. Apa pun ada? Kita baik? Indah. Selamat Datang. OK, jadi saya ingin kalian lihat ini dan lihat apakah Anda dapat menemukan bug. Aku akan memberikan petunjuk. Itu suatu tempat di bahwa untuk loop. Mmhmm? SISWA: Harus kurang dari sama dengan 2. ALLISON: Jadi bisa kurang dari atau sama dengan 2, atau bisa juga kurang dari 3. Dan apa alasan untuk itu? SISWA: The [tidak terdengar], 0, 1, 2. ALLISON: Tepat. Jadi dalam berbagai ukuran n, kita hanya memiliki indeks n minus 1. Keren. Dan kemudian kita bisa benar-benar gila dan mendapatkan array multi-dimensi. Salah satu masalah ketika saya mengambil itu di saya tahun dibutuhkan array multi-dimensi, dan saya pikir salah satu dari mereka mungkin memerlukan tahun ini, jadi nyaman. Membungkus kepala Anda sekitar sekarang. Ini akan kembali menghantui Anda, tetapi dalam cara yang sejuk. Jadi Anda benar-benar dapat hanya berpikir array multi-dimensi sebagai array dari array. Sehingga Anda dapat jenis memikirkan top ini baris sebagai potongan pertama dari memori. Dan yang satu ini adalah potongan kedua memori, dan baris terakhir adalah potongan ketiga memori. Dan dalam itu, ada sebuah array. Tapi tentu saja, akan lebih mudah untuk menggambarkan seperti ini. Jadi Anda menginisialisasi dengan cara yang sama. Ini adalah karakter dewan tiga oleh tiga. Jadi Anda memiliki tiga baris dan tiga kolom. Kami mewakili cara ini. Dan anda dapat mengaksesnya dengan cara yang sama, kolom dengan baris. Dan 1,1 seperti yang kita lihat di sini. Kami menetapkan nol, nol di sana. 2,0 dan 0,2. Jadi Anda hanya akan mengakses them-- jika yang pernah dilakukan aljabar linear, dengan cara yang sama Anda mengakses sebuah elemen dalam matrik, itu ide yang sama di sini. Jadi Anda dapat berhubungan kembali ke matematika. Anda tidak perlu khawatir terlalu banyak tentang ini sekarang. Ini baik untuk memiliki eksposur, untuk tahu bahwa Anda bisa melakukannya. Anda dapat membuat beberapa gila number-- Anda bisa membuat array gila adalah semua aku akan mengatakan. [Tidak terdengar] Ia mendapat sedikit gila, tapi itu benar-benar keren. Mengagumkan. Dan kemudian, jadi kita memiliki contoh di sini. Ini menghitung panjang string. Jadi berapa banyak orang tahu bahwa string yang Anda gunakan hanya array karakter? OK, ya. Jadi kalian mungkin berpikir bahwa Anda belum array digunakan sebelumnya, tapi setiap saat Anda menggunakan GetString di Perpustakaan CSView, kau sebenarnya hanya meminta array karakter. Dan kami mengurus semua bahwa dalam back-end untuk Anda. Tapi Anda telah menggunakan array sejak Anda mulai. Anda hanya tidak tahu itu belum. Dan setiap kali Anda memiliki array karakter atau array yang menyimpan string, hal terakhir selalu apa disebut terminator null, yang adalah ini di sini. Dan itu adalah pada akhir setiap kata yang Anda menyimpan. Jadi jika kita ingin mengetahui Panjang string, kita dapat mengatakan, baik, Anda tahu, isi blok yang tidak sama dengan null terminator kami. Itu berarti bahwa ada beberapa karakter ada yang kita benar-benar peduli itu bagian dari kata. Anda meningkatkan panjang Anda. Dan kemudian ketika kita benar-benar bisa akhir kata, itu akan mengakhiri dan itu akan kembali panjang bagi kita. Mmhmm? SISWA: Apakah ruang dihitung sebagai null terminator? ALLISON: Jadi spasi adalah bukan null terminator. Jadi jika Anda memiliki multiple-- ruang sebenarnya nilai ASCII tertentu. SISWA: Apa seru sama lagi? ALLISON: Jadi, ini adalah apa yang Anda lihat. Jika Anda pernah mendengar saya di jam kantor, Aku selalu menyebutnya, seperti, Bang sama. Jadi bang tidak. Jadi ini bukan sama. Jadi jika Anda mencoba untuk melihat apakah ada sesuatu yang salah, Anda tahu selalu lakukan, Bang apapun variabel, dan jika itu palsu, itu bernilai true dan Anda dapat melakukan hal-hal keren dengan itu. Lebih pada nanti. Keren. Semuanya baik di sana? Mengagumkan. Jadi sekarang saatnya orang-orang Anda untuk bekerja, karena saya sudah bicara. Jadi saya ingin Anda untuk hanya membuat array dengan bilangan bulat satu, dua, dan tiga, dan kemudian telah mereka dicetak. Anda tidak harus melakukan, seperti, utama, bla, bla, bla, apa pun. Aku hanya ingin kau menginisialisasi array dan kemudian membuat untuk loop untuk mencetak mereka out-- atau loop sementara, terserah Anda. Aku hanya akan memberikan pasangan menit untuk bekerja pada itu. Aku akan beristirahat suaraku. Jika Anda memiliki pertanyaan, saya senang untuk datang dan berbicara dengan kalian. Jangan ragu untuk berbicara dengan satu sama lain. Dapatkan lebih banyak permen. Bahkan, saya hanya akan berjalan-jalan dengan permen. Bagaimana? Apakah Anda ingin apapun? Orang lain di ruangan ini ingin permen? Anda juga dapat mengambil lebih dari satu, guys. Ambil segenggam jika Anda ingin. Mungkin juga. Semua orang baik? OK. Juga, aku akan membuat Formulir Google anonim, dan kalian hanya bisa mengirimkan umpan balik setelah setiap bagian jika ada sesuatu yang ingin memperbaiki atau sesuatu yang ingin dilakukan. Jika saya sedikit terlalu penuh semangat untuk Anda, saya bisa nada turun. Aku akan membuat itu dan mengirim bahwa kepada Anda semua setelah itu. Baik. Jadi mari kita mulai dari kecil. Bagaimana kita akan menginisialisasi array kita? Apa jenis array kita? Int, kan? OK, jadi apa yang Anda inginkan untuk memanggil array Anda? Int array, keren. Baiklah, jadi kita memiliki int array int sama, dan apa yang kita miliki setelah itu? SISWA: [tak terdengar] kurung. ALLISON: Braces. Dan kemudian di dalam kawat gigi? Satu koma dua koma tiga. Keren. Jadi tidak apa-apa. Jadi sekarang kita memiliki kita untuk loop. Jadi dalam bagian pertama dari kami untuk loop, apa yang kita miliki? SISWA: i sama dengan 0? ALLISON: Jadi int i sama dengan 0, dan lalu apa kondisi kita? Apa yang saya akan kurang dari? Kurang dari tiga, dan bagaimana kita kita update i? i plus plus, memperbarui dengan satu. Dan kemudian kita akan memiliki beberapa printf dari integer, dan apa itu terakhir bagian yang sebenarnya akan mengatakan apa yang harus kita mencetak? Ini akan menjadi nama array, yang merupakan array int, kan? Dan apa yang ada di kurung dari array int? i. [? Jadi saya?] Disebut saya Misalnya, tapi ada Anda pergi. Bukan yang buruk. Semua orang baik? Keren. Jadi kita sudah selesai dengan array. Selamat. Anda berhasil iterate melalui semua the-- ya? SISWA: [tidak terdengar] ALLISON: Ya. SISWA: Saya punya pertanyaan. Anda seharusnya indent kawat gigi? ALLISON: Jadi kawat gigi harus berbaris dengan untuk loop, dan kemudian semuanya di dalam kurung harus menjorok. SISWA: OK, seharusnya untuk loop menjorok? ALLISON: Untuk loop tidak perlu menjorok pada saat ini. Jika Anda berada di utama, jika kita benar-benar memiliki fungsi utama di sini, itu akan menjorok dari utama. Tapi dalam kasus ini, itu baik-baik saja. Ya, pertanyaan. SISWA: Apakah Anda harus memiliki kurung setelah contoh? ALLISON: Ya, jika Anda menginisialisasi seperti itu. Jadi ingat, ini adalah yang kedua cara menginisialisasi array di mana kita memiliki kawat gigi, dan kemudian aktual kami Data dipisahkan dengan koma dalam. SISWA: Saya pikir ada kurung misalnya bahwa. ALLISON: Tidak, mereka kawat gigi. Mereka kawat gigi. Jika Anda memulainya bahwa cara kedua, itu kawat gigi. Jika kita mengatakan, int example-- jika kami hanya ingin array kosong untuk int, itu akan int contoh kurung tiga. Tanda kurung merupakan ukuran. Bila Anda memiliki kawat gigi, itu adalah data aktual Anda memasukkan ke dalamnya dengan cara ini. Kita dapat menggulir kembali sangat cepat. Jadi dalam satu ini, ini hanya kami Array awal, inisialisasi. Dan di sini, kita secara individual menugaskan tempat kepada mereka, jadi ini merupakan indeks dari kami array, itulah sebabnya mengapa kita memiliki kurung. Tapi di sini, jika Anda perhatikan, kita sudah meninggalkan kurung kami tanpa ukuran, dan kita menginisialisasi itu dengan data aktual all-in-one dengan kawat gigi. SISWA: Jadi kenapa tidak kita miliki kurung dalam contoh ini? ALLISON: Jadi, di mana bagian? SISWA: Bukankah kita mengatakan, int contoh kurung sama dengan kawat gigi [tidak terdengar] kurung misalnya. ALLISON: Oh, maaf. Kau benar. Kami memiliki kurung di sana. Maaf guys, saya buruk. Ya, Anda harus memiliki kurung setelah contoh. Kau benar. SISWA: [tak terdengar] tidak melakukannya. ALLISON: Tidak, Anda harus memiliki kurung, karena kalau tidak, tidak akan mendeklarasikan array. SISWA: [tak terdengar]. Maaf tentang itu. ALLISON: Maaf, Anda harus kurung setelah contoh. Typo. Baik menangkap, bintang emas untuk Anda. Juga, jika Anda mengajukan pertanyaan, jika kalian hanya akan memberitahu saya nama Anda, Aku ingin itu. Aku akan senang untuk dapat tahu semua nama Anda. Aku tidak akan dingin meneleponmu, aku benar-benar jangan hanya ingin tahu nama Anda. Jadi tolong benar-benar memberitahu saya nama Anda. Leah: Leah. ALLISON: Leah. OK, jadi functions-- saya tahu secara singkat mereka berbicara tentang hal ini selama kuliah. Jadi fungsi adalah jenis hanya seperti ini sedikit gigitan-ukuran hal-hal di mana Anda lulus dalam input, sesuatu ajaib terjadi, dan Anda mendapatkan output. Keren. Jadi Anda benar-benar menggunakan banyak ini sudah. Dapatkan int, dapatkan tali, cetak f. Ini semua adalah fungsi di mana Anda hanya memanggil mereka, ada banyak hal yang ajaib terjadi di latar belakang bahwa Anda tidak perlu melihat, dan Anda mendapatkan apa yang Anda inginkan. Atau setidaknya Anda mendapatkan apa yang Anda harap Anda inginkan. Dan pada dasarnya titik fungsi, dan salah satu tema utama CS, adalah untuk memecahkan kode Anda menjadi potongan-potongan dikelola. Ketika Anda mulai menulis program-program yang sangat panjang, atau dalam Scratch ketika Anda memiliki ide besar ini untuk permainan, Anda harus mampu untuk memecahkannya ke, seperti, OK, bagaimana saya memulai? Apa potongan-potongan kecil yang saya butuhkan? Oh, saya harus meminta pengguna untuk sesuatu. Sekarang saya perlu untuk mencetak sesuatu. Oh, saya perlu untuk menghitung nilai ini. Dan belajar bagaimana untuk memecah Anda kode dan masalah besar Anda memiliki menjadi potongan-potongan kecil dan menciptakan fungsi sebenarnya adalah salah satu dari pilar besar CS. Jadi Anda bisa memikirkan fungsi seperti seperti kotak hitam, kotak hitam ajaib, bahwa Anda meletakkan segala sesuatu ke dan Anda mendapatkan beberapa output. Dan sisanya dari program tidak perlu selalu tahu apa yang terjadi di dalam kotak hitam. Semua itu peduli apa masuk dan apa yang keluar. Keren. Jadi mengapa fungsi? Organization-- seperti yang saya katakan, ketika Anda berurusan dengan basis kode yang sangat besar, bagaimana Anda mengatur kode Anda akan jauh lebih mudah jika Anda menggunakan fungsi. Karena Anda akan dapat menjadi, seperti, OK, ini adalah apa fungsi ini tidak dan inilah yang satu lagi tidak. Dan Anda dapat dengan mudah melihat bagaimana mereka semua cocok bersama-sama. Jadi melanggar itu ke dalam semua ini subparts dikelola. Jadi simplification-- Saya yakin kalian semua melihat ini, seperti yang saya katakan, dengan Scratch. Anda memiliki ide besar ini, dan Anda seperti, bagaimana melakukan semua pekerjaan ini? Tetapi jika Anda mendekatinya sedikit demi sedikit, Anda berkata, OK, bagaimana cara membuat satu sprite mengapung di layar? Itu sedikit lebih mudah. Penggunaan begitu baik fungsi merek kode Anda lebih mudah untuk dibaca. Itu membuat lebih mudah untuk debug yang sebagai Anda masuk ke set masalah kemudian Anda, Anda akan benar-benar ingin dapat dilakukan. Dan mereka juga lebih mudah untuk merancang dan mengimplementasikan. Anda dapat kode sebuah kecil berfungsi relatif cepat dan pastikan bekerja dibandingkan mencoba untuk membuat program lama ini seluruh dan kemudian jenis pergi melalui dan melihat apa yang bekerja dan apa yang tidak. Dan kemudian usabilitas. Jadi fungsi hanya perlu untuk ditulis sekali, dan kemudian Anda dapat menggunakannya sebanyak mungkin. Jadi, seperti, dalam arti ramah lingkungan. Jika Anda memiliki hal-hal seperti cetak f, di mana Anda harus menuliskan sihir yang berlangsung di balik mencetak f setiap saat Anda ingin mencetak sesuatu, Anda akan sangat sakit dan lelah itu pada akhir. Salah satu hal yang Anda akan belajar di kemudian kelas CS, atau salah satu yang terbaik nasihat saya mendapatkan adalah, jika Anda menyalin dan menyisipkan kode, mungkin harus fungsi. Jika Anda memiliki yang sama persis baris di seluruh kode Anda, jika Anda faktor mereka, kode Anda mungkin akan menjadi, seperti, lima kali lebih pendek dan jauh lebih mudah dibaca. Dan alih-alih mencoba untuk memecahkan masalah semua tempat-tempat ini berbeda di mana hal-hal mungkin salah, Anda memiliki satu fungsi bahwa Anda mendapatkan untuk memecahkan masalah. Dan aku berjanji, banyak ini mungkin tampak agak abstrak sekarang, tetapi karena Anda masuk ke kemudian dan masalah kemudian set, itu akan membuat banyak lebih masuk akal dan benar-benar didorong rumah. Apakah ada pertanyaan tentang fungsi sejauh ini? Mengapa kita menggunakan mereka? Aku tahu kita belum sempat ke sepele belum. Jadi mendefinisikan function-- seperti array, kita perlu semacam of-- ini hanya output umum. Jadi ini adalah fungsi yang hanya akan kubus beberapa masukan. Dan pada halaman berikutnya, sebenarnya, kita memiliki semua hal-hal kecil ini mengagumkan di sini. Jadi, bisa semua orang baca bahwa, karena penasaran? Aku tahu ungu dan hitam mungkin agak sulit. Tapi hal-hal besar untuk tahu-- jadi yang pertama satu di sini adalah jenis kami kembali. Jadi ini adalah berbicara tentang output fungsi ini ketika, dalam hal ini, kami dimasukkan ke dalam beberapa nomor, apa yang kita mendapatkan adalah bahwa nomor potong dadu. Jadi harus int dalam kasus ini. Mungkin itu akan menjadi ganda atau sesuatu yang lain nanti, tapi dalam kasus ini, itu adalah int. Dengan c, Anda selalu membutuhkan tipe kembali. Ini akan menjadi int. Ini akan menjadi pelampung. Ini akan menjadi ganda. Tapi Anda harus menentukan apa Fungsi ini akan kembali. Jika tidak, akan berteriak Anda, dan itu tidak dapat dikompilasi. Anda akan sedih, dan aku akan sedih. Dan itu tidak baik. OK. Dan kemudian kita memiliki nama fungsi kita. Dan seperti yang Anda lihat di sini, dengan c ada paradigma yang sangat konsisten ini. Apa tipe Anda, apa nama, dan kemudian beberapa hal lain di akhir. Jadi kita memiliki tipe kami kembali, Nama fungsi kita, dan kemudian kita memiliki kepala kami dengan daftar parameter kami. Jadi daftar parameter adalah, apa fungsi ini akan mengambil dalam? Sebuah daftar parameter hanyalah sebuah sinonim untuk, apa masukan dari kami? Dan dengan cara yang sama bahwa kita harus mendefinisikan fungsi kita dan memberikan return mengetik, masing-masing masukan kami perlu memiliki tipe yang terkait dengannya. Jadi kita tahu apa fungsi kita benar-benar dapat bekerja dengan. Jadi dalam hal ini, kami memiliki beberapa masukan int. Jadi sekali lagi, itu akan menjadi jenis dan apa yang Anda menyebutnya. Dan kemudian, seperti yang Anda lihat di sini, kita memiliki tubuh kita. Jadi kita memiliki beberapa output int, yang hanya kami masukan kali sendiri kali itu sendiri, yang hanya batu itu. Dan kemudian kita kembali bahwa output. Jadi seperti yang Anda lihat di sini, kami memiliki int kali int kali int, sehingga mengembalikan sebuah int, yang telah dinyatakan ada. Jadi semuanya kohesif. Semuanya senang. Fungsi Anda akan berjalan. Dan ini adalah hal umum. Jadi selalu memiliki jenis kembali, Nama, dan daftar parameter Anda. Setiap hal dalam Anda daftar parameter, atau masukan, perlu memiliki tipe yang terkait dengannya. Dan kemudian Anda memiliki Anda Tubuh di sini dengan apa pun Anda ingin lakukan dengan masukan Anda. Dan maka jelas Anda ingin kembali sesuatu. Kadang-kadang fungsi hanya akan kembali. Mereka tidak benar-benar kembali sesuatu untuk Anda gunakan. Tapi Anda harus kembali dalam beberapa cara. Dan ketika Anda membuat fungsi sendiri, kita bisa masuk ke yang sedikit lebih dalam. Secara pribadi, jika Anda ingin, ada banyak hal yang berbeda yang dapat Anda lakukan di sana. Semua orang baik? Apa pun dalam daftar ini yang Anda inginkan saya untuk pergi ke, bahwa Anda tidak mengerti? Semua orang baik di sana? Keren. Mengagumkan. OK, jadi kita meletakkan semua bersama-sama ini sekarang. Jadi kita memiliki beberapa masukan int kubus, jadi ini adalah program lengkap di sini. Sampai sekarang, saya sudah jenis telah memberikan Anda orang potongan yang mungkin pergi dalam sebuah program. Kami baru saja melihat fungsi. Tapi inilah seluruh program. Jadi berapa banyak dari Anda ingat prototipe kata dari kuliah? Keren. Kami punya satu. Siapa namamu? STEPH: Steph. ALLISON: Steph? OK, mengagumkan. Jadi, apakah Anda ingat apa prototipe adalah? SISWA: Anda mengatakan [tidak terdengar] sebelum Anda benar-benar berurusan dengan itu. ALLISON: Apakah Anda ingat mengapa? SISWA: No. ALLISON: OK. Bintang emas. Jadi ya, prototipe kami sebelumnya, karena jika tidak, compiler kita akan berteriak pada kami. Itu akan berkata, OK, apa fungsi kubus ini? Seperti, Anda benar-benar memiliki mengatakan apa-apa tentang hal ini. Ini seperti ketika Anda berjalan ke ruang kelas, dan seseorang seperti, ada kuis hari ini. Dan Anda seperti, Anda tidak pernah mengatakan kepada saya tentang hal ini. Saya tidak senang dengan kami. Prototipe pada dasarnya seperti silabus Anda mengatakan, melihat. Kepala. Ada akan menjadi kuis pada hari ini. Jangan panik ketika Anda sampai ke sana. Kau akan baik-baik saja. Jadi semua prototipe dilakukan adalah memberitahu utama, saya akan menggunakan fungsi ini. Aku berjanji aku mendefinisikan nanti. Jangan panik ke arahku. Hanya mengkompilasi dan melakukan apa yang saya memberitahu Anda untuk. Jadi kita memiliki prototipe ada hanya untuk membuat kompiler kita bahagia. Dan itu pada dasarnya janji bahwa Anda telah menetapkan fungsi ini kemudian dan bahwa Anda tidak hanya menelepon Hal acak ini yang tidak tahu apa yang Anda akan lakukan. Jadi dalam hal ini, kita memiliki utama di sini. Kami menginisialisasi beberapa bilangan bulat x. Itu dua. Kita akan mencetak apa x adalah. Kita akan kubus x. Seperti yang Anda lihat, kami telah kami deklarasi fungsi di sini bahwa kita berbicara tentang sebelumnya. Ini akan kubus x, dan kemudian, jika kita ingat, fungsi kubus sebenarnya mengembalikan sebuah integer untuk kami, yang disimpan di x lagi sehingga kita dapat mencetak delapan, atau kubus x sekarang. Apakah itu masuk akal untuk semua orang? Kita baik? Baik. Mengagumkan. Baik. Berapa banyak dari kalian ingat ini jadi ini pada dasarnya hanya Anda stack dan heap Anda, hanya visualisasi bagaimana memori disimpan di sini. Jadi kami hanya ingin membuat Pastikan bahwa Anda memahami bagaimana ini diwakili dalam memori. Jika Anda mengambil kelas seperti CS61 dan hal-hal kemudian, Anda bisa belajar ini jauh lebih secara mendalam, dan itu benar-benar keren. Saya sangat merekomendasikan hal ini. Tapi untuk saat ini, saya akan memberikan Anda gambaran yang luas sehingga Anda tidak perlu mengetahui sepele. Jadi atas hanya segmen teks yang berisi angka nol yang sebenarnya dan yang, biner untuk itu. Dan ini digunakan untuk menyimpan variabel global jika Anda memiliki. Ketika Anda bergerak ke bawah, kita memiliki, seperti yang Anda lihat di sini, Data diinisialisasi, diinisiasi data, dan kemudian tumpukan. Jadi kita tidak benar-benar bicara tentang tumpukan sekarang. Kita akan sampai ke sana nanti. Untuk saat ini, aku hanya akan gelombang tangan saya dan menjadi seperti, Anda tidak perlu tahu tentang hal ini sekarang. Tapi kami akan berbicara sedikit sedikit tentang stack. Jadi stack adalah where-- kita memiliki zoom in. Ini sebenarnya bagaimana program kita hanya melihat terjadi pada memori. Jadi apa yang terjadi adalah, setiap kali kita memanggil fungsi, kita mendapatkan apa yang disebut stack bingkai, yang merupakan salah satu dari ini. Parameter sehingga utama dunia. Jadi mereka adalah hal-hal bahwa kita masuk ke utama. Jadi mereka di sini di bagian bawah, karena itulah hal pertama yang kita sebut. Dan kemudian kita sampai ke dunia utama penduduk setempat, dan ketika kita mengatakan bahwa, kita berarti variabel lokal yang disimpan dalam utama. Jadi penduduk setempat di sini akan, seperti, x sama dengan dua dalam kasus ini. Karena yang diterjemahkan ke utama. Apakah semua orang ingat ruang lingkup, akan lebih dari itu dalam kuliah? OK. Jadi, hanya variabel-variabel yang diinisialisasi dalam utama. Jadi itulah mengapa kita memiliki utama [? vokal. ?] Dan kemudian dalam waktu utama, kita sebut kubus. Benar? Jadi kita mendapatkan frame yang lain dengan parameter kubus ini. Jadi dalam hal ini, kubus ini parameter sekarang x yang kita berlalu dalam, dua yang kami melewati di. Dan kemudian penduduk setempat kubus, yang merupakan dimana cubing yang sebenarnya terjadi. Dan kemudian ia kembali. Jadi apa yang terjadi adalah sebagai kubus sebenarnya apa yang seharusnya dilakukan, itu kembali. Ketika ia kembali, frame ini daun, dan yang kembali ke utama. Dan kemudian dalam waktu utama, kami benar-benar dapat mencetaknya. Jadi, ketika Anda kembali sesuatu, ketika fungsi Anda kembali, itu seperti menyampaikan nilai-nilai ke bingkai bawah dan kemudian meninggalkan. Dan hal-hal harus menjalankan dalam rangka. Dan ketika Anda sampai ke program yang lebih besar, kita dapat membuat lebih dingin dan lebih rumit diagram. Tetapi untuk sekarang, ini adalah hanya gambaran umum sehingga Anda memiliki jenis yang pemahaman tentang apa terjadi ketika Anda memanggil fungsi dan bagaimana yang benar-benar terlihat dalam memori. Keren? Semua orang baik? Mengagumkan. Jadi ini adalah salah satu yang hanya mencoba untuk swap hal. Seperti yang kita lihat di sini, kami memiliki prototipe fungsi kita sehingga compiler kami tidak berteriak pada kami. Kami memiliki beberapa utama, dan kami ingin beralih x dan y. Mereka tidak melakukan demo ini dalam kuliah lagi, memiliki mereka? Mereka belum? OK. Jadi kita akan pergi lebih dari ini sangat singkat. Anda akan masuk ke contoh ini lebih secara mendalam, saya pikir, pekan ini. Dan kemudian minggu depan kita bisa benar-benar menyelam ke mengapa ini tidak bekerja. Jadi kita memiliki kekosongan ini Fungsi sini-swap. Jadi batal hanya berarti bahwa tidak ada yang dikembalikan. Dan kami memiliki pertukaran int dan int b. Dan kami memiliki beberapa sementara variabel itu adalah. a akan ditugaskan untuk b, dan kemudian b akan ditugaskan untuk temp sehingga dan b nilai-nilai yang sekarang beralih. Tapi, twist plot, ini tidak bekerja. Dan bagian dari itu sebenarnya memiliki hubungannya dengan fakta bahwa dan b di sini, orang-orang yang bisa lewat di di sini, sebenarnya salinan x dan y. Jadi ketika fungsi benar-benar kembali, switch salinan tapi tidak x aktual dan y ini. Jadi salah satu cara untuk berpikir tentang hal ini adalah itu-- berpura-pura ini adalah swap. OK? Jadi dalam utama, kami memiliki x dan y diinisialisasi. Tapi ketika kita benar-benar naik untuk frame ini dengan swap, kita melewati nilai-nilai lebih dari untuk itu, dan mereka diinisialisasi. Dan mereka hanya pernah tinggal di sini. Jadi a dan b tinggal di sini. Dan mereka mendapatkan bertukar. Tapi ketika kita kembali, kita tidak melakukan apa saja dengan a dan b. sebuah dan b cuti dengan fungsi kita. Dan x dan y tetap sama. Anda akan mendapatkan lebih ke bagaimana memperbaikinya dan bagaimana kita benar-benar berurusan dengan itu nanti. Tapi itu hanya satu hal untuk jenis diingat. Menggunakannya untuk masa depan. Jangan khawatir jika itu tidak membuat semua rasa di dunia. Mereka adalah salinan adalah hal terbesar. Jika Anda akan mengambil apa-apa jauh dari itu, Anda lulus dalam salinan. Jadi aslinya tetap sama. Semua orang baik? Keren. Jadi argumen baris perintah. Saya yakin pada awalnya kalian semua memiliki orang-orang besar, seperti, void utama int. Dan Anda seperti, OK keren. Aku tidak benar-benar peduli. Ini hanya apa yang saya harus menulis. Tapi dalam program baru Anda, terutama di pset ini, dan mengapa ada kapur di tanah? Dengan pset berikutnya, Anda akan melihat ini. Int main, int arg c, tali busur v, kurung. Jadi, dari apa yang kita hanya pelajari hari ini, apa kita berpikir bahwa parameter kedua atau Elemen kedua adalah di sini? Ini sebuah array. Apa jenis array? String array, ya. Keren. Jadi itulah bagaimana Anda akan akan menyatakan ini sekarang. Apakah ada yang ingat apa ini berdiri untuk? Tidak ada? Hmm? SISWA: arg c. ALLISON: Jadi arg c terus counter. Ini adalah int. Itu nomor, kan? Jadi apa yang Anda pikirkan angka itu dari? Ya. Jadi arg c adalah jumlah string yang membentuk baris perintah. Jadi jika kita do-- sebenarnya, ada contoh setelah ini, jadi saya tidak akan maju dari diriku sendiri. Ini adalah jumlah string yang hanya membuat baris perintah Anda. Jadi, ketika Anda lakukan, seperti, dot slash Mario, itu salah satu string yang membuat itu. Dalam bagian ini, Anda benar-benar akan makan hal-hal ke dalam baris perintah, karena saya yakin kalian yang telah membaca melihat spec. Jadi dalam kasus-kasus, mungkin Anda akan memiliki dua atau tiga argumen. Ini akan menjadi hal yang berguna untuk digunakan. Dan kemudian arg v, seperti kami katakan, hanya sebuah array string. Sehingga sebenarnya menyimpan apa Anda masukan ke dalam baris perintah. Jadi kita memiliki ini. Anda memiliki beberapa dot slash menyalin outfile infile. Jadi, jika arg c adalah jumlah string bahwa kita melewati ke perintah line, apa c arg kami dalam kasus ini? Tiga. Tepat. Jadi apa arg v dari nol? Jadi apa hal pertama yang kita telah disimpan? Dot slash copy, tepatnya. Dan kemudian yang kedua akan infile. Ketiga akan outfile. Jadi bagaimana dengan arg v tiga? Akan null, karena itulah akhir array kita, kan? Keren. Dan kemudian bagaimana dengan seperenam? Ini semacam pertanyaan jebakan. Ish. Apakah kita tahu apa itu? Ini tidak terdefinisi. Kami tidak tahu apa yang bisa. Itu pun yang benar setelah array dalam memori, dan kami tidak tahu apa itu. Dan itu berbahaya untuk menyentuh orang-orang hal, karena untuk semua yang Anda tahu, itu adalah beberapa bagian dari memori yang Anda tidak boleh mengakses atau null. Dan dapat melakukan hal-hal gila. Ini disebut over-pengindeksan Anda terikat untuk array Anda. Jangan pergi di luar batas-batas Anda array, atau hal buruk bisa terjadi. Anda kembali dan, seperti, hukum fisika telah hancur atau sesuatu. Keren. Apakah itu masuk akal untuk semua orang? Tidak terlalu buruk. Jadi sekarang, semua orang Bagian favorit, ulasan pset. Yay! OK. Jadi bagi anda yang belum membaca pset spec, Anda melakukan beberapa benar-benar keren dengan kriptografi. Anda akan membuat Caesar Cipher dan Vigenere Cipher. Anda pasti harus membaca spek untuk melihat bagaimana pekerjaan mereka. Dan jika Anda mengalami kesulitan tentang apa yang benar-benar harus lakukan, silahkan datang bicara padaku, email saya atau teks saya. Aku sekitar. Jadi ada tiga utama hal di sini bahwa kita ingin berbicara about-- hanya jenis perpanjangan kuliah. Hal-hal yang Anda mungkin tidak tahu tentang, petunjuk bermanfaat dan alat-alat. Jadi kita akan melakukan tinjauan singkat dari ASCII, karena itu akan menjadi super penting bagi Vigenere Cipher ini. Kita akan konversi input baris perintah, yang akan sangat membantu untuk Caesar Cipher. Dan kemudian modulo. Keren. Jadi, ASCII peta karakter untuk nomor. Ini adalah grafik yang besar. Anda harus memiliki ini bookmarked suatu tempat. Anda akan ingin untuk jangka menengah-pertama Anda. Aku cukup yakin setiap orang memiliki ini grafik pada lembar jangka menengah mereka. Jadi mempelajarinya. Love it. Tetap berguna. Ini akan berguna. Dan semua itu adalah sebuah encoding yang memetakan abjad, angka, dan karakter lain untuk angka untuk komputer kita. Karena tentu saja, dalam end, segala sesuatu yang kita simpan akan mendapatkan dikonversi turun ke nol dan yang, jadi kita perlu beberapa cara untuk mewakili teks dan karakter yang kita semua digunakan untuk melihat sebagai semacam nomor. Jadi seperti yang kita lihat di sini, kami memiliki huruf A, yang ada di sana. Ini 65. Dan huruf kecil A adalah 97. Jadi Anda dapat mencari out-- seperti yang saya katakan sebelumnya, jika Anda memiliki array beberapa string, apa masing-masing memiliki null terminator. Ini akan menjadi ruang. Ruang memiliki special-- sendiri Saya lupa di mana itu adalah di sini. Ah. 32 adalah ruang. Jadi semuanya peta untuk itu. Jadi kita memiliki matematika ASCII. Pro tip-- di Vigenere ini, Anda mungkin tergoda untuk mengkonversi nomor Anda ke bilangan bulat, tapi praktek sebenarnya lebih baik untuk dapat menggunakan karakter seperti ini ketika Anda benar-benar memanipulasi mereka. Jadi jika Anda ingin menggunakan angka, Anda bisa. Tapi cara yang lebih baik, atau cara yang kita cenderung ingin kalian untuk melakukannya, cara ini di mana Anda benar-benar mengurangi karakter. Jadi saya ingin kalian jenis mencari ini keluar. Mengapa Anda tidak mencoba setiap orang lain? Begitu juga yang pertama, sepertiga, dan yang kelima. Karena saya ingin memastikan bahwa kita berbicara tentang segala sesuatu yang kita perlu bicarakan. Aku hanya akan mengatakan, salah satu hal penting to-- oh tunggu, kalian belum melihat yang satu ini. OK jadi melakukan tiga pertama. Mari kita melakukan itu. Karena kita harus berbicara tentang Modulo. Aku tahu. Matematika sulit. Anda dapat menggunakan kalkulator. Tidak apa-apa. Atau menarik tabel ASCII, karena Anda mungkin akan menginginkan hal itu. Keren. Jadi saya akan cepat berjalan kalian melalui ini. Jadi orang tabel ASCII berhenti? Apa numerik kami nomor untuk huruf kecil A? SISWA: Tujuh. ALLISON: Jadi huruf kecil A adalah 97 dan huruf A adalah 65. Jadi 97 dikurangi 65? AUDIENCE: 32? ALLISON: 62, ya. Jadi dalam hal ini, apa apakah itu mencetak? Itu yang pertama? Jika kita memiliki persen d, apakah itu menunjukkan? SISWA: Sejumlah. ALLISON: Kami mencetak out jumlah yang sebenarnya. Jadi kita benar-benar akan untuk mencetak 32 di sini. Dan jika ini adalah persen c, 32 akan memberi kita ruang. Jadi pemahaman bahwa karakter dapat dicetak baik sebagai angka dan sebagai karakter yang sebenarnya benar-benar penting, dan membayar perhatian pada jenis yang sebenarnya yang kita lakukan di sini. Keren. Jadi untuk setiap orang lain dari ini, apa yang kita akan mencetak? SISWA: Sebuah karakter. ALLISON: Sebuah karakter. Keren. Jadi jika kalian ingin tahu, Anda dapat bekerja ini keluar pada Anda sendiri. Jika Anda mengalami kesulitan, email saya. Tapi yang kedua akan mencetak huruf kecil b. Yang ketiga akan mencetak sebuah huruf B. keempat yang akan mencetak out huruf besar C, dan yang terakhir akan menjadi huruf kecil A. Dan satu-- terakhir kita benar-benar akan untuk masuk ke dalam apa yang persen gila tanda bahkan berarti dalam beberapa slide. Jadi cobalah mereka sendiri. Jika Anda memiliki masalah, silahkan datang bicara padaku. Jika Anda biasanya di Adams aula D, Anda mungkin akan menemukan saya sekitar. Jadi, atoi. Berapa banyak dari Anda telah melihat ini fungsi atau mendengar tentang hal itu sama sekali? Siapa? Keren. Jadi apa yang sebenarnya berdiri adalah ASCII ke integer. Jadi apa yang dapat Anda lakukan adalah, dengan Caesar, bagi mereka yang membaca spec, Anda akan melakukan dot slash Caesar setelah Anda menulis program Anda, dan kemudian Anda akan masukan beberapa nomor yang Anda ingin mengkodekan pesan rahasia Anda dengan. Tapi, jika kita ingat, semua kami input disimpan sebagai string. Benar? Kami memiliki v array yang arg itu semua tipe string. Jadi, jika Anda hanya mencoba untuk menarik satu itu, akan berpikir bahwa itu satu atau nomor apa pun Anda digunakan sebenarnya karakter. Jadi Anda akan mendapatkan beberapa hasil gila. Jadi jika Anda benar-benar ingin mengubahnya menjadi integer yang dapat Anda gunakan untuk memanipulasi kata atau pesan Anda, Anda akan ingin menggunakan atoi. atoi hanya mengkonversi string ke int. Jadi jika kita memiliki serangkaian 12, jika kita sebut atoi pada 12, atau apa pun masukan yaitu, itu benar-benar akan kembali Anda integer. Bukan karakter atau string 12. Yang, ketika Anda mulai menambahkan bahwa untuk angka, akan sangat berbeda, karena string 12 adalah beberapa nomor gila di ASCII, tetapi integer 12 sebenarnya 12, yang adalah apa yang Anda inginkan. Jadi, Anda ingin memastikan untuk menggunakan atoi. Anda akan ingin ini di Caesar, karena Anda membutuhkan int disediakan oleh pengguna pada command line. Tapi ketika mereka dimasukkan ke dalam perintah line, itu disimpan sebagai string untuk mulai dengan. Apakah itu masuk akal? Anda tidak perlu memerlukan ini untuk Vigenere. Dengan Vigenere, seperti yang saya katakan sebelumnya, Anda harus mencoba dan menggunakan Matematika ASCII yang terlihat lebih seperti ini, di mana Anda benar-benar menggunakan karakter yang kita diberikan kepada Anda. Keren. Semua orang baik di sana? Mengagumkan. Jadi modulo. Jadi bagaimana jika Anda diberi sejumlah besar ini untuk Caesar? Anda memiliki gagasan bahwa jika Anda di Z dan Anda diberi nomor dua, itu berarti Anda need-- Z menjadi yang kedua surat setelah itu sendiri, kan? Jadi, Anda perlu entah bagaimana membungkus, dan modulo adalah cara untuk melakukan itu. Jadi semua yang dilakukannya itu memberikan sisanya dari pembagian Nomor pertama oleh kedua. Dan kami memiliki beberapa contoh untuk membuat beton lebih sedikit. Tapi pada dasarnya, Anda menggunakan modulo ketika Anda ingin membuat sesuatu membungkus. Jadi jika Anda hanya ingin angka satu sampai delapan, Anda dapat menggunakan modulo pada setiap lain nomor, dan itu akan selalu kembali nomor dari nol sampai delapan. Jadi beberapa examples-- jika kami memiliki 55 modulo 10, itu hanya memberi Anda sisa 55 dibagi dengan 10, yang akan menjadi 5. Dan kemudian tiga modulo lima, ada yang menebak apa yang akan terjadi? Tiga. Jadi jika Anda memiliki sejumlah kecil sebelum Modulo, tidak bisa masuk secara merata. Itu nol. Jadi hanya mengembalikan jumlah itu sendiri. Jadi delapan modulo delapan akan? SISWA: Zero. ALLISON: Zero. Karena masuk merata. 16 modulo 15? AUDIENCE: Satu. ALLISON: Cool. Dan kemudian yang terakhir ini hanya untuk menunjukkan you-- Anda mungkin bertanya-tanya, OK, apa urutan operasi di sini? Apakah kita membagi lebih dulu? Apakah kita modulo pertama? Jadi modulo memegang prioritas yang sama sebagai divisi atau perkalian, dan asosiatif kiri. Jadi itu dengan cara yang sama. Anda akan selalu melakukan kurung, maka perkalian, pembagian, dan modulo dalam urutan dari kiri ke kanan. Aturan sehingga standar. Hanya menaruhnya di kategori yang sama sebagai divisi dan perkalian. Jadi dalam hal ini, kita akan memiliki 1 ditambah 2 memberi kita 3. Kita kalikan dengan 2, sehingga kita mendapatkan 6. Kami modulo bahwa dengan 2, yang memberi kita? SISWA: 0. ALLISON: 0. Dan kemudian kita tambahkan 2, jadi kami mendapatkan 2 dalam kasus terakhir ini. Jadi modulo-- Anda pasti akan berpikir tentang cara untuk memasukkan bahwa ketika Anda membungkus sekitar alfabet. Jika Anda berada di Z dan Anda perlu untuk memindahkan maju tiga ruang untuk sampai ke C, ada yang seluruh konsep membungkus di sekitar. Jadi saya akan menyerahkan kepada kalian untuk mencari tahu bagaimana tepatnya Anda akan menggunakannya. Tapi yang pasti alat yang berguna untuk pset Anda minggu ini. Saya sangat suka ini. Ini adalah salah satu psets favorit saya. Kemudian setelah Anda melakukannya, jika Anda memiliki teman, Anda bisa, seperti, saling mengirim rahasia lainnya pesan dan pastikan bekerja. Karena akan mendekripsi itu atau apa pun. Banyak menyenangkan. Dan itu adalah akhir bagian. Aku selesai awal. Saya masih memiliki 15 menit dengan kalian, jadi jika ada sesuatu bahwa Anda ingin pergi lebih lanjut, saya akan senang untuk melakukan itu. Pertanyaan lain pada pset Anda bagi anda yang sudah mulai atau membaca spec. Apa pun yang kita sudah bicara tentang dalam satu jam terakhir dan 15 menit yang Anda ingin saya untuk jenis pengulangan, saya akan senang untuk. Atau kita bisa menyebutnya berhenti, dan Anda dapat semua meninggalkan dan mengambil lebih permen dengan Anda saat Anda pergi. Tetapi jika ada tersisa apapun pertanyaan, tolong beritahu saya. Anda juga dapat datang dan berbicara dengan saya setelah itu. Aku berjanji tidak menggigit. Ada lagi? Semua orang baik? Perasaan semua orang seperti mereka dapat menangani pset ini? Anda akan menjadi orang baik-baik saja. Jam kerja yang ada karena suatu alasan. Keren. Baiklah. Nah, dalam hal ini, terima kasih kasih banyak untuk datang. Saya berharap untuk melihat Anda minggu depan. Akan ada lebih banyak permen. Mungkin ada hal-hal menarik lainnya. Dan saya berharap untuk mendapatkan untuk mengetahui semua Anda tahun ini.