[MUZIK Bermain] DAVID J. MALAN: Baiklah. Ini adalah CS50 dan ini adalah permulaan Minggu 2. Dan anda akan ingat bahawa lebih pasangan yang lalu minggu, kita telah memperkenalkan komputer sains dan, seterusnya, pengaturcaraan. Dan kami mula cerita dengan cara Awal, bahawa bahasa grafik dari Media Lab MIT'S. Dan kemudian yang paling baru-baru ini, minggu lepas, adakah kita memperkenalkan higher-- yang bahasa peringkat rendah dikenali sebagai C, sesuatu yang semata-mata teks. Dan, sememangnya, kita masa lalu diterokai dalam konteks yang beberapa konsep. Ini, ingat, adalah sangat Program pertama kita melihat. Dan program ini, cukup mudah, mencetak, "hello, dunia." Tetapi ada begitu banyak seolah-olah ajaib berlaku. Ada #include ini dengan kurungan sudut. Ada int. Ada (tidak sah). Ada kurungan, pendakap kerinting, koma bertindih, dan banyak lagi. Dan sebagainya, ingat bahawa kami memperkenalkan Scratch supaya kita boleh, ideal, melihat masa lalu bahawa sintaks, barangan yang benar-benar tidak semua yang intelek menarik tetapi awal adalah, benar-benar, agak sukar untuk membalut fikiran anda di sekitar. Dan, sememangnya, salah satu yang paling biasa perkara yang awal dalam kelas pengaturcaraan, terutama bagi mereka yang kurang selesa, adalah untuk kecewa dengan dan tersandung oleh sintaksis tertentu kesilapan, apatah lagi kesilapan logik. Dan demikian di antara matlamat kita hari ini, sebenarnya, akan adalah untuk melengkapkan anda dengan beberapa teknik penyelesaian masalah untuk bagaimana untuk lebih menyelesaikan masalah sendiri dalam bentuk debugging. Dan anda akan ingat, terlalu, bahawa persekitaran yang diperkenalkan Kali terakhir dipanggil CS50 IDE. Ini adalah perisian berasaskan web yang membolehkan anda untuk program dalam awan, jadi untuk bercakap, sambil mengekalkan semua anda fail bersama-sama, seperti yang kita akan sekali lagi hari ini. Dan ingat kita yang semula topik ini di sini, antaranya fungsi, dan gelung, dan pembolehubah, dan ungkapan Boolean, dan syarat-syarat. Dan sebenarnya beberapa lagi yang kita diterjemahkan dari dunia Scratch ke dunia C. Tetapi bangunan asas blok, boleh dikatakan, benar-benar masih minggu lepas yang sama. Malah, kita benar-benar hanya mempunyai sekeping teka-teki yang berbeza, jika anda akan. Daripada yang ungu menyimpan blok, kita bukannya telah printf, yang fungsi ini dalam C yang membolehkan anda untuk mencetak sesuatu dan format ia pada skrin. Kami memperkenalkan CS50 Perpustakaan, di mana anda ada sekarang di get_char pelupusan anda, dan get_int dan get_string, dan beberapa fungsi lain yang dengan baik, melalui mana anda boleh mendapatkan input dari papan kekunci pengguna sendiri. Dan kami juga mengambil melihat pada perkara seperti bool these-, dan char, dan dua, float, int, tali long_long. Dan ada juga jenis data lain dalam C. Dalam erti kata lain, apabila anda mengisytiharkan pembolehubah untuk menyimpan beberapa nilai, atau apabila anda melaksanakan fungsi yang mengembalikan beberapa nilai, anda boleh menentukan apa jenis nilai iaitu. Adakah tali, seperti jujukan aksara? Adakah nombor, seperti integer? Adakah ia satu titik terapung nilai, atau sebagainya? Jadi dalam C, tidak seperti calar, kita sebenarnya mula menentukan jenis data kami kembali atau menggunakan. Tetapi, sudah tentu, kita juga berlari ke beberapa had asas pengkomputeran. Dan khususnya, ini bahasa C, ingat bahawa kami mengambil lihat pada limpahan integer, realiti bahawa jika anda hanya mempunyai jumlah terhingga memori atau, khususnya, beberapa terhingga bit, anda hanya boleh mengira begitu tinggi. Dan supaya kita melihat contoh ini di sini mana kaunter dalam kapal terbang, sebenarnya, jika berjalan cukup lama akan melimpah dan menyebabkan perisian kesilapan yang berpotensi fizikal sebenar. Kami juga melihat terapung titik ketakpersisan, realitinya bahawa dengan hanya beberapa terhingga bit, sama ada 32 atau 64, anda hanya boleh menentukan pelbagai nombor selepas titik perpuluhan, selepas itu anda mula mendapat tidak tepat. Jadi misalnya, satu pertiga dalam dunia di sini, dalam dunia manusia, kita tahu hanya nombor terhingga daripada 3 yang selepas titik perpuluhan. Tetapi komputer tidak boleh semestinya mewakili nombor terhingga nombor jika anda hanya membenarkan ia beberapa jumlah terhingga maklumat. Jadi bukan sahaja kita melengkapkan anda dengan kuasa yang lebih besar dari segi bagaimana anda boleh meluahkan diri anda papan kekunci dari segi pengaturcaraan, kami juga terhad apa anda sebenarnya boleh lakukan. Dan sesungguhnya, pepijat dan kesilapan boleh timbul daripada orang-orang jenis isu. Dan sesungguhnya, antara topik hari ini akan menjadi topik-topik seperti debugging dan sebenarnya mencari di bawah hood bagaimana perkara yang telah diperkenalkan minggu lepas sebenarnya dilaksanakan supaya anda lebih baik memahami kedua-dua keupayaan dan batasan bahasa seperti C. Dan sebenarnya, kami akan mengupas kembali lapisan yang paling mudah struktur data, sesuatu yang dinamakan array, yang Scratch berlaku untuk memanggil "senarai." Ia adalah sedikit yang berbeza dalam konteks itu. Dan kemudian kami juga akan memperkenalkan salah satu daripada pertama masalah domain khusus kami dalam CS50, dunia kriptografi, seni berebut atau dalam ciphering maklumat supaya bahawa anda boleh menghantar mesej rahsia dan menyahkod mesej rahsia antara dua orang, A dan B. Jadi sebelum peralihan kita ke dunia baru, mari kita cuba untuk melengkapkan anda dengan beberapa teknik yang anda boleh menghapuskan atau mengurangkan sekurang-kurangnya beberapa daripada kekecewaan bahawa anda mungkin dihadapi sepanjang minggu lepas sahaja. Malah, lebih awal daripada anda such-- beberapa masalah pertama anda dalam C. Dan kemungkinan adalah, jika anda seperti saya, kali pertama anda cuba untuk menaip program, walaupun anda berfikir secara logik program ini adalah agak mudah, anda sangat baik mungkin melanda dinding, dan pengkompil tidak akan bekerjasama. Membuat atau dilafaz tidak akan untuk benar-benar melakukan bidaan anda. Dan mengapa yang mungkin? Nah, mari kita lihat pada, mungkin, satu program yang mudah. Saya akan pergi ke hadapan dan menyimpan ini dalam fail yang sengaja dipanggil buggy0.c, kerana saya tahu ia dapat dipercayai sama sekali terlebih dahulu. Tetapi saya mungkin tidak sedar bahawa jika ini merupakan program pertama atau kedua atau ketiga bahawa saya benar-benar membuat diri saya sendiri. Jadi, saya akan pergi ke hadapan dan menaip, int utama (tidak sah). Dan kemudian di dalam pendakap kerinting saya, yang sangat biasa ( "hello, world-- garis sendeng terbalik, n ") - dan koma bertitik. Saya telah menyimpan fail. Sekarang saya akan turun ke bawah ke tetingkap terminal saya dan jenis make buggy0, kerana, sekali lagi, nama fail hari ini adalah buggy0.c. Jadi saya menaip membuat buggy0, Enter. Dan, oh, Astaga, ingat dari masa lalu yang tiada mesej ralat adalah satu perkara yang baik. Jadi tiada output adalah satu perkara yang baik. Tetapi di sini saya mempunyai jelas beberapa beberapa kesilapan. Jadi baris pertama output selepas menaip membuat buggy0, ingat, output agak berjela-jela yang dilafaz itu. Di bawah hood, CS50 IDE dikonfigurasi untuk menggunakan sejumlah besar pilihan dengan pengkompil ini supaya anda tidak perlu untuk berfikir tentang mereka. Dan itu semua yang baris pertama cara yang bermula dengan dilafaz. Tetapi selepas itu, masalah mula membuat penampilan mereka. Buggy0.c pada baris 3, watak 5, ada yang besar, kesilapan merah. Apakah itu? Tersirat mengisytiharkan fungsi perpustakaan printf dengan jenis int (const char *, ...) [-Werror]. Maksud saya, ia dengan cepat mendapat sangat sukar difahami. Dan sesungguhnya, pada mulanya sepintas lalu, kita tidak akan mengharapkan anda untuk memahami keseluruhan daripada mesej itu. Dan sebagainya salah satu pelajaran untuk hari ini akan untuk adalah untuk cuba untuk notis corak, atau perkara yang sama, kepada kesilapan anda mungkin mempunyai dihadapi pada masa lalu. Jadi mari kita mengusik selain hanya kata-kata yang kelihatan biasa. Besar, ralat berwarna merah jelas simbolik sesuatu yang salah. tersirat mengisytiharkan perpustakaan fungsi printf. Jadi, walaupun saya tidak begitu faham apa tersirat mengisytiharkan fungsi perpustakaan cara, masalah itu pasti berkaitan dengan printf entah bagaimana. Dan sumber isu yang mempunyai kaitan dengan mengisytiharkan ia. Mengisytiharkan fungsi adalah menyebutkan itu buat kali pertama. Dan kami sentiasa istilah minggu lepas mengisytiharkan prototaip fungsi ini, sama ada dengan satu baris di bahagian atas anda fail sendiri atau dalam fail header dipanggil. Dan dalam apa fail lakukan kita katakan minggu lepas bahawa printf adalah quote, unquote, diisytiharkan? Dalam apa fail adalah prototaip? Jadi, jika anda masih ingat, perkara yang pertama saya ditaip, hampir setiap program time-- lalu dan secara tidak sengaja sebentar tadi bermula menaip myself-- adalah salah sini-- ini hash-- #include