[MUSIC PLAYING] DAVID J. Malan: Baiklah. Ini adalah CS50 dan ini adalah awal dari Minggu 2. Dan Anda akan ingat bahwa lebih dari beberapa minggu terakhir, kami sudah memperkenalkan komputer ilmu pengetahuan dan, pada gilirannya, pemrograman. Dan kami mulai cerita dengan cara Scratch, bahwa bahasa grafis dari MIT'S Media Lab. Dan kemudian yang terakhir, minggu lalu, juga kita memperkenalkan higher-- a Bahasa tingkat rendah yang dikenal C, sesuatu yang murni tekstual. Dan, memang, terakhir kali kami dieksplorasi dalam konteks itu sejumlah konsep. Ini, ingat, adalah sangat Program pertama kita melihat. Dan program ini, cukup sederhana, mencetak, "Halo, dunia." Tapi ada begitu banyak tampak ajaib terjadi. Ada #include ini dengan kurung sudut ini. Ada int. Ada (void). Ada tanda kurung, kurung kurawal, semi-titik dua, dan banyak lagi. Dan, ingat bahwa kami memperkenalkan Scratch sehingga kita bisa, idealnya, melihat masa lalu bahwa sintaks, hal-hal yang benar-benar tidak semua yang intelektual menarik tetapi awal adalah, benar-benar, agak rumit untuk membungkus pikiran Anda sekitar. Dan, memang, salah satu yang paling umum hal pada awal kelas pemrograman, terutama bagi mereka yang kurang nyaman, adalah untuk mendapatkan frustrasi oleh dan tersandung oleh sintaksis tertentu kesalahan, belum lagi kesalahan logis. Dan di antara tujuan kami hari ini, benar-benar, akan adalah untuk membekali Anda dengan beberapa teknik pemecahan masalah untuk bagaimana untuk lebih memecahkan masalah sendiri dalam bentuk debugging. Dan Anda akan ingat juga, bahwa lingkungan yang kami memperkenalkan terakhir kali dipanggil CS50 IDE. Ini adalah perangkat lunak berbasis web yang memungkinkan Anda untuk program di awan, sehingga untuk berbicara, sekaligus menjaga semua Anda file bersama-sama, seperti yang kita lagi akan hari ini. Dan ingat kita bahwa ditinjau kembali topik ini di sini, di antara mereka fungsi, dan loop, dan variabel, dan ekspresi Boolean, dan kondisi. Dan sebenarnya beberapa lagi yang kita diterjemahkan dari dunia Scratch ke dunia C. Tapi bangunan fundamental blok, sehingga untuk berbicara, yang benar-benar masih sama pekan lalu. Bahkan, kami benar-benar hanya memiliki berbeda potongan puzzle, jika Anda mau. Alih-alih yang ungu menyimpan blok, kita malah telah printf, yang fungsi ini di C yang memungkinkan Anda untuk mencetak sesuatu dan format pada layar. Kami memperkenalkan CS50 Perpustakaan, di mana Anda memiliki sekarang di get_char Anda inginkan, dan get_int, dan get_string, dan beberapa fungsi lainnya sebagai baik, melalui mana Anda bisa mendapatkan masukan dari keyboard sendiri pengguna. Dan kami juga mengambil melihat hal-hal seperti ini-bool, dan char, dan double, float, int, long_long tali. Dan bahkan ada jenis data lain di C. Dengan kata lain, ketika Anda menyatakan variabel untuk menyimpan beberapa nilai, atau ketika Anda menerapkan fungsi yang mengembalikan beberapa nilai, Anda dapat menentukan apa yang jenis nilai yang. Apakah string, seperti urutan karakter? Apakah nomor, seperti integer? Adalah sebuah titik mengambang nilai, atau sejenisnya? Jadi di C, tidak seperti Scratch, kita benar-benar mulai menentukan apa jenis data kami kembali atau menggunakan. Tapi, tentu saja, kami juga berlari ke beberapa batasan dasar komputasi. Dan khususnya, ini bahasa C, recall bahwa kita mengambil melihat integer overflow, kenyataannya bahwa jika Anda hanya memiliki jumlah terbatas memori atau, secara khusus, jumlah terbatas bit, Anda hanya dapat menghitung begitu tinggi. Dan kita melihat contoh ini di sini dimana counter di pesawat terbang,, sebenarnya, jika berjalan cukup lama akan meluap dan mengakibatkan perangkat lunak potensi fisik kesalahan yang sebenarnya. Kami juga melihat mengambang Titik ketidaktepatan, kenyataannya bahwa dengan hanya jumlah terbatas bit, apakah itu 32 atau 64, Anda hanya dapat menentukan begitu banyak nomor setelah titik desimal, setelah itu Anda mulai mendapatkan tepat. Jadi misalnya, sepertiga di dunia di sini, di dunia manusia, kita tahu hanya jumlah tak terbatas 3s setelah titik desimal. Tetapi komputer tidak bisa selalu mewakili jumlah tak terbatas nomor jika Anda hanya memungkinkan beberapa jumlah terbatas informasi. Jadi tidak hanya kita membekali Anda dengan kekuatan yang lebih besar dalam hal bagaimana Anda dapat mengekspresikan diri di keyboard dalam hal pemrograman, kami juga terbatas apa Anda dapat benar-benar dilakukan. Dan memang, bug dan kesalahan dapat timbul dari orang-orang macam masalah. Dan memang, di antara topik hari ini akan menjadi topik seperti debugging dan benar-benar melihat di bawah tenda bagaimana hal diperkenalkan minggu lalu benar-benar diterapkan sehingga Anda lebih baik memahami baik kemampuan dan keterbatasan bahasa seperti C. Dan pada kenyataannya, kita akan mengupas lapisan-lapisan dari yang paling sederhana struktur data, sesuatu yang disebut array, yang Scratch terjadi untuk memanggil "daftar." Ini sedikit berbeda dalam konteks itu. Dan kemudian kami juga akan memperkenalkan salah satu pertama masalah domain-spesifik kami di CS50, dunia kriptografi, seni berebut atau dalam Pengkodean informasi sehingga Anda dapat mengirim pesan rahasia dan memecahkan kode rahasia antara dua orang, A dan B. Jadi sebelum kita transisi ke dunia baru, mari kita coba untuk membekali Anda dengan beberapa teknik dengan mana Anda dapat menghilangkan atau mengurangi setidaknya beberapa frustrasi Anda mungkin mengalami selama seminggu terakhir saja. Bahkan, di depan Anda such-- beberapa masalah pertama Anda di C. Dan kemungkinan besar, jika Anda seperti saya, pertama kalinya Anda mencoba untuk mengetik sebuah program, bahkan jika Anda berpikir logis program ini cukup sederhana, Anda mungkin sangat baik menabrak dinding, dan compiler tidak akan bekerja sama. Membuat atau dentang tidak akan untuk benar-benar melakukan penawaran Anda. Dan mengapa yang mungkin? Nah, mari kita lihat, mungkin, program yang sederhana. Aku akan pergi ke depan dan menyimpan ini dalam file sengaja disebut buggy0.c, karena saya tahu itu untuk akan cacat di muka. Tapi aku mungkin tidak menyadari bahwa jika ini adalah program pertama atau kedua atau ketiga bahwa aku benar-benar membuat diriku. Jadi aku akan pergi ke depan dan mengetikkan, int main (void). Dan kemudian di dalam kurung kurawal saya, sangat familiar ( "Halo, dunia-- backslash, n ") - dan semi-colon. Aku sudah menyimpan file. Sekarang aku akan turun ke jendela terminal saya dan jenis make buggy0, karena, sekali lagi, nama file saat ini adalah buggy0.c. Jadi saya ketik membuat buggy0, Enter. Dan, oh, gosh, ingat dari terakhir kali bahwa tidak ada pesan error adalah hal yang baik. Jadi tidak ada output adalah hal yang baik. Tapi di sini aku harus jelas beberapa jumlah kesalahan. Jadi baris pertama output setelah mengetik membuat buggy0, ingat, adalah output cukup verbose dentang ini. Di bawah kap mesin, CS50 IDE dikonfigurasi menggunakan sejumlah besar Pilihan dengan compiler ini sehingga Anda tidak memiliki untuk berpikir tentang mereka. Dan itulah yang baris pertama berarti yang dimulai dengan dentang. Tapi setelah itu, masalah mulai membuat penampilan mereka. Buggy0.c on line 3, karakter 5, ada, kesalahan merah besar. Apa itu? Secara implisit menyatakan fungsi perpustakaan printf dengan tipe int (const char *, ...) [-Werror]. Maksudku, itu sangat cepat akan sangat misterius. Dan tentu saja, pada awalnya Sekilas, kita tidak akan mengharapkan Anda untuk memahami keseluruhan pesan itu. Dan jadi salah satu pelajaran untuk hari ini akan menjadi mencoba untuk melihat pola, atau hal-hal serupa, kesalahan yang mungkin Anda miliki dihadapi di masa lalu. Jadi mari kita menggoda terpisah hanya kata-kata yang terlihat akrab. Besar, kesalahan merah jelas simbolis sesuatu yang salah. Secara implisit menyatakan fungsi perpustakaan printf. Jadi, bahkan jika saya tidak begitu mengerti apa implisit menyatakan fungsi perpustakaan berarti, masalah pasti berkaitan dengan printf entah bagaimana. Dan sumber masalah yang hubungannya dengan menyatakan hal itu. Mendeklarasikan suatu fungsi menyebutkan itu untuk pertama kalinya. Dan kami menggunakan terminologi minggu lalu mendeklarasikan prototipe fungsi ini, baik dengan satu baris di bagian atas Anda File sendiri atau dalam disebut file header. Dan di file apa juga kita katakan pekan lalu bahwa printf adalah kutipan, tanda kutip, menyatakan? Dalam file apa prototipe? Jadi, jika Anda ingat, hal pertama yang saya diketik, hampir setiap program time-- lalu dan sengaja sesaat lalu mulai mengetik myself-- adalah di sini-yang satu ini hash-- #include