PROFESSOR: Jadi agenda untuk minggu ini, tidak banyak hal. Tapi mudah-mudahan, sangat membantu dan relevan untuk kalian minggu ini. Tapi kita akan menghabiskan mungkin 15, 20 menit hanya cepat berbicara tentang Daftar link. Daftar link yang akan akan dibahas pada kuis. Jadi mungkin itu akan sangat membantu untuk belajar sedikit tentang apa itu. Kita akan menghabiskan besar Mayoritas bagian hari ini akan lebih kuis nol masalah praktek. Dan kemudian kita akan menghemat mungkin 20, 30 menit pada akhir untuk setiap pertanyaan berlama-lama ada yang memiliki. Dan kemudian, yang terakhir lima menit, aku akan untuk memberikan pidato pompa untuk kuis. Kalian semua ingin berada di sini untuk itu. Karena itu akan menjadi waktu yang baik. Baiklah, sehingga beberapa materi tentang Daftar link. Bagaimana mereka biasanya terstruktur adalah Anda memiliki apa yang disebut node, kan? Anda memiliki hal-hal ini disebut node, yang struct. Aku akan pergi ke cara membuat node di slide berikutnya. Tapi pada dasarnya semua terkait daftar adalah adalah data yang telah dirangkai melalui pointer. Dan keuntungan yang kita miliki menggunakan linked list lebih, mungkin, seperti array, adalah fakta bahwa dalam array Anda perlu satu blok berdekatan dari memori semua di tempat yang sama, salah satu demi satu, untuk dapat memiliki itu. Sedangkan linked list, Anda bisa memiliki potongan kecil acak memori seluruh komputer Anda dirangkai oleh pointer. Dan dengan cara ini Anda dapat mengakses informasi yang datang satu demi satu lainnya, setelah yang lain tanpa perlu hanya sepotong besar memori di komputer Anda di suatu tempat. Dan jadi ini adalah salah satu utama alasan mengapa kita menggunakan link list. Kedua, itu sangat mudah untuk secara dinamis mengubah ukuran daftar link yang karena dalam array, ketika Anda mendeklarasikan array, Anda memiliki nilai yang ditetapkan tertentu. Katakanlah saya ingin menciptakan array 10 bilangan bulat. Saya membuat sebuah array dari 10 bilangan bulat, dan hanya itu. Ini 10. Aku tidak tahu apa yang harus dilakukan setelah itu. Jika saya ingin membuat 11, tidak bisa melakukannya. Jika saya ingin membuatnya 9, tidak bisa melakukannya. Sedangkan dalam daftar link, anda dapat menambah dan menghapus dan menyisipkan mana pun Anda inginkan. Anda dinamis dapat mengubah ukuran Anda struktur di sini, struktur data Anda. Dan yang memberi kita banyak lebih banyak fleksibilitas ditambahkan bahwa kita tidak biasanya memiliki dengan array. Siapapun bingung pada dasar struktur cara daftar link atau mengapa kita harus menggunakan salah satu dari array? Ya, kita akan pergi lebih detail bagaimana untuk benar-benar membuat satu. Tapi ini hanya jenis arti umum sekarang. Keren. Dan array dirangkai dari hal-hal kecil yang indah ini disebut node. Semua node yang adalah jenis struct. Ingat, sebuah struct adalah jika Anda ingin untuk membuat jenis tertentu variabel dalam C yang sudah tidak ada, Anda, sebagai programmer, benar-benar dapat membuat yang sendiri. Dan jenis data struktur disebut node, sebenarnya telah dibuat oleh kami, bahwa tidak ada dalam C sendiri. Dan cara yang Anda membuat satu adalah Anda harus header dari typedef struct, yang memberitahu compiler saya sekitar untuk membuat struct. Kami akan nama itu "simpul." Dan di dalam kita akan untuk mendeklarasikan variabel dalam, yang akan menyimpan nilai. Dan kemudian kita juga akan telah pointer yang disebut "berikutnya" yang menunjuk ke depan node dalam link list. Dan kemudian Anda menyelesaikan itu dari dengan hanya mengulangi simpul lagi sehingga compiler tahu, OK itulah akhir dari struct saya. Dan dengan cara ini, kita baik menciptakan array kecil yang lucu semacam itu dengan nilai dan dengan pointer. Dan Anda dapat menghubungkan mereka semua bersama-sama dengan mereka pointer. Sehingga mereka semua dapat menjadi semacam dirangkai dalam rantai. Keren. Dapatkah Anda mendengar bahwa sedikit lebih baik? AUDIENCE: Ya. PROFESSOR: Baiklah. Jadi cara itu, seperti kalian lihat, daftar link yang khas terstruktur adalah Anda memiliki kepala. Anda memiliki nilai kepala yang tidak yang ditunjukkan oleh setiap pointer lainnya. Tapi itu akan menunjuk, atau referensi, node lain. Simpul setelah akan referensi simpul setelah itu, dan seterusnya dan sebagainya sampai akhirnya Anda memukul akhir daftar link anda. Dan Anda tidak akan memiliki pointer ada. Dan sebagainya, berpikir seperti, rantai, atau bahkan jika ada dari kalian yang dibuat, saya tidak tahu, seperti dengan buah loop ketika Anda masih kecil. Anda akan string mereka bersama-sama dan memakainya di leher Anda. Pikir itu hal yang sama persis. Anda memiliki hal-hal kecil yang Anda bisa string bersama yang mengarah ke satu setelah itu, satu setelah itu, dan seterusnya dan sebagainya sampai Anda memiliki rantai dari struktur data Anda dapat menggunakan namun Anda suka. Jadi cara ini kita akan biasanya memasukkan atau menghapus setiap node dari link Daftar ini sangat berbeda tergantung di mana simpul yang. Jadi, misalnya, karena pointer selalu menunjuk nilai tertentu, ketika Anda menghapus atau menyisipkan node, Anda ingin memastikan bahwa pointer adalah semua menunjuk pada hal yang benar. Jadi jika Anda ingin memasukkan berpotensi node baru dengan nilai satu dalam link diurutkan daftar, kita semua tahu di sini dari gambar yang akan masuk antara kepala dan dua, kan? Karena salah satu cocok di sana. Namun cara di mana kita akan melakukan itu adalah dengan terlebih dahulu dereferencing pointer dari kepala dan mengirimkan bahwa untuk satu. Tapi kami datang ke masalah di sini. Dapatkah orang melihat apa masalahnya adalah jika kita dereference pertama pointer dari kepala ke satu? Masalah apa yang mungkin kita mengalami jika kita mencoba untuk menambahkan ini ke depan array kita? AUDIENCE: [tidak terdengar] PROFESSOR: Tepat. Jadi di sini kita memiliki pointer yang sekali menunjuk dari kepala ke dua. Tetapi jika Anda menyingkirkan yang pointer, Anda menunjuk ke satu, kita sekarang tidak tahu ke mana harus pergi untuk menemukan dua. Karena seperti yang saya katakan sebelumnya, Anda punya sepotong raksasa memori di komputer Anda. Semua node ini bisa secara acak diselingi di setiap tempat di komputer Anda. Dan Anda tidak tahu bagaimana untuk pergi tentang menemukan itu. Dan sehingga Anda harus memiliki pointer menunjuk ke semua node di akhir. Atau jika Anda secara tidak sengaja dereference satu tanpa menugaskan pertama nilai pertama, Anda hanya akan kehilangan semuanya setelah itu. Jadi apa yang kita akan lakukan adalah, Anda akan pertama ingin membuat pointer pada node Anda ingin memasukkan. Arahkan ke mana Anda ingin masukkan ke, dan kemudian setelah itu Anda bisa menunjukkan kepala kembali ke satu. Apakah itu masuk akal untuk semua orang di sini? Besar. Anggap saja sebagai seperti rantai. Jika Anda menambahkan rantai, itu semacam intuitif bagaimana Anda akan pergi tentang memasukkan itu. OK, sehingga sebenarnya banyak lebih pendek daripada yang saya pikir itu akan, lima menit omongan pada daftar link di. Hanya jadi kalian memiliki Ide dasar dari apa itu. Di sini kita memiliki agenda untuk kuis nol. Jangan biarkan ini mengintimidasi Anda. Aku tahu itu banyak informasi. Hal ini terlihat sangat menakutkan. Ini juga banyak, saya berpikir, CSC jenis hal. Hal-hal seperti string heksadesimal, pointer, alokasi memori dinamis adalah istilah terdengar sangat menakutkan. Tapi kita akan istirahat mereka down, melakukan beberapa latihan soal sehingga kalian semua siap untuk tes ini. Berapa banyak dari kalian memiliki sudah mulai belajar? OK, kalian mungkin ingin untuk memulai memulai pada itu, karena kuis besok. Atau Kamis untuk sebagian dari Anda. Ya, jadi kita akan pergi atas beberapa masalah praktik. Jika kalian semua ingin mengambil keluar selembar kertas, pensil. Kita akan hanya menghabiskan Sebagian besar dari bagian hari ini akan lebih beberapa yang jadi kalian harus ide dari apa yang diharapkan pada kuis. OKE. Beberapa logistik Rincian juga, bagi siapa pun yang belum pernah ke link yang ada, jika Anda pergi ke cs50.yale.edu, di bagian depan Halaman ini ada link yang mengatakan "Tentang Quiz Zero." Link membawa Anda ke sana. Jika Anda belum membacanya, silahkan baca itu. Karena memberitahu Anda benar-benar penting informasi mengenai kuis. Aku akan melakukan ini keluar dari bahwa hanya karena, secara fisik, jika kalian tidak tahu di mana untuk pergi, kita akan memiliki masalah. Dan jadi jika Anda terakhir dalam hal dengan A untuk N, pergi ke auditorium sekolah hukum. Dan jika dimulai terakhir Anda dengan P sampai Z, pergi ke Davies Auditorium. Dan ini hanya berlaku untuk orang di bagian Rabu. Jika Anda mengambil kuis di Kamis, Anda pergi ke SSS 114 di mana kuliah Anda biasanya adalah. AUDIENCE: [tidak terdengar] PROFESSOR: O ke Z, Anda akan untuk pergi ke auditorium Davies. Aku akan mengubah itu, kan? Oh, ya, Anda hanya gagal secara otomatis. Oh ya, itu Anda Christa. Ya, saya buruk. Yap, O ke Z, Anda akan untuk pergi ke Davies Auditorim. Aku akan memperbaiki ini setelah saya meng-upload. Ya. Dan kemudian juga sesuatu penting untuk diingat adalah bahwa Rabu, jika Anda resmi terdaftar di bagian Rabu, Anda harus mengambil kuis Anda pada hari Rabu. Dan jika Anda terdaftar di Kamis, Anda harus mengambil kuis Kamis. Dan itu selama waktu kelas. Mana, saya pikir itu seperti 1:00 untuk 02:15 pada hari Rabu dan 2:30-03:45 pada hari Kamis. Jika Anda memiliki konflik yang tak terdamaikan, Alasan dekan adalah satu-satunya hal, sayangnya, kita bisa mengambil. Karena kita telah memiliki Sebagian besar permintaan untuk beralih dari Rabu sampai Kamis. Yang kita tidak bisa menghormati kecuali kami memiliki permintaan Dean. OKE. Jadi sebelum kita mulai pada beberapa masalah praktek, Aku hanya akan pergi ke Andy tips untuk sukses. Kalian, ketika Anda belajar, Anda benar-benar ingin berlatih menulis kode dengan tangan. Pertama kali saya pernah mengambil kuis CS, aku tidak praktek menulis kode dengan tangan sebelum dan itu sangat mengejutkan bagaimana sulitnya. Ketika kalian tidak masuk ke dalam kebiasaan mengetik segala sesuatu, datang sangat alami menjadi mampu telah autocompleted kurung dan titik koma sana. Ketika Anda menulis itu dengan tangan, kadang-kadang sangat, sangat mudah untuk melupakan titik koma, atau lupa untuk menutup braket, atau lupa untuk menutup titik dua, atau semacam itu. Jadi, ketika Anda menulis kode dengan tangan, itu merasa sangat berbeda. Jadi kalian, ketika Anda bekerja melalui beberapa masalah praktek, itu akan baik untuk benar-benar berlatih hari ini. Atau besok, saya kira, jika Anda mengambil kuis pada hari Kamis. Kedua, kita memiliki yang terakhir, seperti, senilai delapan tahun praktek kuis online. Kuis tahun ini mungkin akan sangat, sangat mirip dengan mereka semua. Mereka semua sangat mirip. Anda jenis masuk ke dalam gaya jenis pertanyaan yang kita minta, jenis fungsi yang kita akan menulis dalam, et cetera, et cetera. Jadi mengambil kuis praktek, terutama di bawah kendala waktu. 75 menit untuk melakukan kuis ini tidak banyak jumlah waktu. Ini sangat, sangat lama. Dan sehingga kalian benar-benar ingin memastikan bahwa kalian dalam kebiasaan menulis kode dengan tangan cepat. Karena Anda tidak ingin pertama waktu untuk melihat kuis panjang yang berada di kuis Anda. Kalian benar-benar ingin memastikan Anda berlatih terlebih dahulu. Keempat, Anda ingin meninjau kuliah dan bagian slide. Anda tidak perlu menghafal hal. Sebenarnya, semua orang diperbolehkan satu lembar catatan kertas putih, depan dan belakang. Kalian dapat mengetik atau menulis. Jika Anda menemukan diri Anda perlu untuk menghafal apa-apa, meletakkannya pada lembar itu. Saya jamin, Anda tidak ingin terjebak di tengah-tengah kuis yang menjadi seperti, oh yeah, apa runtime semacam ini dibandingkan semacam itu. Hanya menaruhnya dan menyalinnya langsung dari lembar catatan Anda. Maka Anda benar-benar bisa hanya menggunakan Anda otak untuk berpikir tentang masalah-masalah daripada harus mengingat fakta. Dan benar-benar memanfaatkan dari rincian niche yang Anda pikir Anda perlu untuk menghafal, celepuk bawah pada lembar ulasan. OK, pertanyaan logistik tentang kuis sebelum kita mulai beberapa masalah kuis berlatih? Ya? AUDIENCE: Saya tidak punya kesempatan untuk melihat kuis [tidak terdengar] tapi itu akan menjadi aplikasi sebagian besar, atau ada juga akan menjadi, seperti, pertanyaan pengetahuan? PROFESSOR: Ini jauh. Jadi, cara yang saya akan dijelaskan kuis is-- saya mengumpulkan beberapa masalah praktek yang saya ditarik dari semua kuis. Tapi Anda akan melihat bahwa ada dua utama jenis pertanyaan kami akan meminta Anda. Satu adalah detail tingkat yang sangat rendah barang. Kami akan memberikan sepotong kecil kode dan mengatakan, ada kesalahan di sini? Apa yang akan mencetak sini? Apa yang akan kode ini menghasilkan, dan lain-lain. Jadi tingkat yang sangat rendah rincian informasi. Dan di sisi lain, kita harus sangat tingkat tinggi pertanyaan berbasis pengetahuan. Bisakah Anda menjelaskan apa yang perbedaan antara pencarian biner dan pencarian linear? Mengapa kita ingin menggunakan salah satu dari yang lain? Mungkin, apa yang GDB? Mengapa kita ingin menggunakan GDB? Tingkat yang lebih tinggi, lebih mendasar pertanyaan pemahaman. Jadi Anda akan melihat campuran dua dari mereka di kuis Anda. Ada lagi sebelum kita kepala langsung ke dalamnya? OKE. AUDIENCE: Satu lagi. PROFESSOR: Oh, satu lagi. Maaf. AUDIENCE: Ya, itu semua benar. Jadi kau mengatakan 75 menit adalah terlalu pendek, seperti itu tidak mungkin bahwa kita akan menyelesaikan? Atau, seperti, 75 menit adalah persis seperti banyak waktu seperti yang kita butuhkan jika kita tepat disiapkan? PROFESSOR: OK, jadi kuis menantang. Hal ini jelas menantang. Anda akan menemukan diri Anda pendek pada waktu. Anda mungkin akan memukul, seperti 10, 15 menit untuk pergi, dan menjadi seperti, kotoran. Saya telah begitu banyak tersisa untuk dilakukan. Dan itu benar-benar baik-baik saja. Semua orang akan merasakan hal yang sama. Hanya akan sangat menyadari berapa banyak waktu yang Anda miliki. Dan jadi itu sebabnya saya memberitahu Anda orang melakukan kuis praktek. Karena itu benar-benar memberikan rasa apa kuis akan menjadi seperti. Jadi jika Anda menemukan diri Anda menjadi mampu selesai praktek kuis dalam jumlah yang baik waktu, Anda dapat mengatur langkah Anda sendiri dengan baik, maka Anda tidak akan memiliki masalah Rabu atau Kamis. Keren. Jadi jika semua orang wants-- saya pikir kebanyakan orang memiliki lembar kertas keluar sudah. Aku akan dasarnya hanya memberikan contoh pertanyaan, memberikan kalian, seperti, beberapa menit untuk melakukannya. Dan kita akan pergi sebagai kelas apa jawaban mereka adalah. Jadi ini adalah sangat khas pertanyaan awal kita akan meminta Anda, hanya mengkonversi angka antara basis yang berbeda. Biner, seperti yang kalian bisa ingat, adalah basis dua. Desimal adalah basis 10, atau apa yang kita sebagai manusia biasanya menafsirkan. Heksadesimal adalah basis 16, yang adalah nol melalui sembilan serta A sampai F. Jadi ada empat nomor saya meminta kalian untuk mengkonversi sini. Saya akan memberikan Anda suka, tiga sampai empat menit untuk memikirkan bagaimana kami akan pergi untuk memecahkan ini. AUDIENCE: Apakah kita diperbolehkan kalkulator? PROFESSOR: Anda tidak akan perlu kalkulator, ya. Saya pikir Selain itu dasar, saya pikir, adalah semua kalian akan diminta untuk melakukan. Dan hanya jadi aku agak memiliki arti dari ketika semua orang dilakukan, mencari, gelombang, saya tidak tahu, tersenyum, terlihat senang jika Anda sudah selesai. Ya. Mungkin beberapa menit lagi. OK, mari kita membawanya dalam. Aku sengaja akan memberi kalian sedikit waktu dari Anda mungkin perlu melakukan beberapa masalah ini, hanya karena saya ingin memastikan bahwa kami melewati sekelompok masalah. Jadi jangan khawatir jika Anda tidak memiliki kesempatan untuk menyelesaikan. Benar-benar OK asalkan Anda memiliki ide tentang bagaimana untuk pergi tentang ini. Jadi mari kita pergi ke depan dan melakukan yang pertama. Jadi pertama, apakah ada yang ingin memberitahu saya dalam biner, apa yang masing-masing digit ini mewakili dalam hal nilai-nilai mereka? Ya? AUDIENCE: Dua ke listrik nol, 2-1. PROFESSOR: Tepat. Begitu. Tepat, sehingga biasanya ketika kita berada di dasar 10 semua ini mewakili adalah, seperti, 10 ke dasar nol, kan? Itu tempat yang Anda. Semua tempat 10 ini Anda adalah 10 pangkat satu. Tempat Anda 100 adalah 10 dengan kekuatan dua. Apapun basis Anda berada di akan hubungannya dengan hal yang sama persis, hanya dengan basis yang berbeda. Jadi biner, semua yang adalah basis dua. Anda akan mengkonversi semua digit menjadi dua kekuasaan apapun dari digit itu. Dan dalam hal ini, kita dapat memiliki cara yang lebih mudah mampu menambah atau jumlah semua angka dalam rangka untuk diubah menjadi basis 10. Jadi tidak ada yang ingin memberitahu saya apa yang jawaban yang pertama adalah di dasar sepuluh? AUDIENCE: Dua, [tidak terdengar] PROFESSOR: Ya. AUDIENCE: 42. PROFESSOR: 42, di sana Anda pergi. Jadi cara kita mendapat jawaban ini adalah dengan melakukan dua yang pertama, yang merupakan dua. Ditambah dua ketiga, yang delapan. Ditambah dua sampai kelima, yang adalah apa pun yang tersisa. Anda jumlah mereka dan itu 42. Apakah ada yang bingung tentang bagaimana kita punya itu? Selain itu begitu mendasar, seperti Aku berkata, Anda harus OK. Jika tidak, baik, kita dapat berlatih itu juga. Tapi itu benar semua. Keren. Apakah ada yang ingin memberi saya menjawab yang kedua juga? 50? Baik. Siapapun bingung tentang bagaimana kita punya yang baik? Keren, aku akan memiliki jawaban pada slide berikutnya. Jadi jangan khawatir jika Anda perlu mencatatnya. OK, jadi heksadesimal adalah sedikit lebih sulit. tapi aku akan menunjukkan kalian jalan pintas untuk bagaimana melakukannya. Jadi heksadesimal, seperti yang Anda ingat, semua itu adalah menjadi 16. Dan karena kita sebagai manusia tidak benar-benar memiliki 16 angka untuk menyatakan bahwa, kita pergi dari nol sampai sembilan, yang pertama kami 10 nilai-nilai, dan kemudian kita melakukan A sampai F, yang enam nilai berikutnya. Dan cara termudah untuk pergi dari setiap bilangan biner ke heksadesimal adalah untuk istirahat mereka menjadi dua bagian. Dan sehingga setiap bilangan biner kami akan memberikan Anda mungkin akan memiliki delapan digit. Anda hanya dapat mematahkan mereka di tengah. Jadi yang pertama satu-- satu satu, satu satu, satu, satu, satu satu. Jenis berpikir itu, Anda tahu, menggambar slash atau koma di antara mereka. Dan Anda hanya dapat mengkonversi langsung apa pun ini adalah untuk pertama jumlah heksadesimal, dan apa pun di sini adalah untuk kedua dari heksadesimal. Jadi ingat dari notasi umum, apa nilai heksadesimal mulai dengan? AUDIENCE: Zero. PROFESSOR: 0x. Jadi kita tahu bahwa setiap kali kami meminta Anda untuk mengkonversi jumlah apapun untuk heksadesimal, atau setiap kali Anda melihat nomor yang dimulai dengan 0x, Anda tahu bahwa itu adalah nilai heksadesimal. Dan kemudian Anda akan diminta untuk menentukan apa dua digit ini. Dan cara Anda melakukannya, menghitung-hitung bahwa setengah dan menghitung-hitung setengah itu. Jadi, dalam contoh ini, apa yang akan satu, satu, satu, satu itu? Apa nilai itu? Itu akan F, kan? Itu akan 15. Jadi ini akan menjadi F. Satu, satu, satu, satu di sini juga F. Jadi satu, satu, satu, satu, satu, satu, satu, satu dalam heksadesimal, semua itu adalah 0xFF. Karena setengah ini diwakili F, nilai 15, setengah ini diwakili F, nilai 15. Karena ingat, kami menghitung dari nol sampai sembilan. Adalah seperti 10, B adalah seperti 11, F adalah 15. Apakah itu masuk akal untuk semua orang bagaimana kami dapatkan dari biner ke hexadesimal? AUDIENCE: Dan bagaimana kita mendapatkan 15 dari satu, satu, satu, satu? PROFESSOR: Ya, ini adalah biner, kan? Bayangkan ini hanya bilangan biner. Jadi Anda memiliki dua ke zeroth, yang merupakan salah satu. AUDIENCE: Oh, OK. Jadi Anda hanya total itu keluar. PROFESSOR: Ya, dan kemudian Anda hanya berjumlah bahwa keluar. Itu semua itu. AUDIENCE: OK. PROFESSOR: OK. AUDIENCE: Jadi Anda pergi dari biner ke desimal ke heksadesimal? PROFESSOR: Itulah Cara termudah untuk melakukannya, ya. Anda tidak akan ke desimal karena desimal hanya memiliki nol sampai sembilan. Kami hanya jenis membelah ini menjadi dua. AUDIENCE: [tidak terdengar] menggunakan desimal untuk menemukan apa itu cocok untuk di heksadesimal. PROFESSOR: Maksudku, kau menghitung-hitung menggunakan matematika dasar. AUDIENCE: Ya. PROFESSOR: Ya, cukup banyak. Hal ini sedikit membingungkan. Tapi hanya tahu bahwa Anda dapat membagi apa pun nilai ini menjadi hanya bagian. Lihat, apa ini dalam biner? Apa jumlah itu? Ini akan menjadi sesuatu dari nol sampai F. Berikut juga akan menjadi sesuatu dari nol sampai F. Dan kemudian Anda dapat menempatkan dua di sana. AUDIENCE: OK. PROFESSOR: Yep. OKE. Jadi kalian ingin coba yang berikutnya kemudian? Nol, satu, nol satu, satu, nol, satu nol. Saya akan memberikan orang-orang seperti 30 detik, karena Anda mungkin tidak tahu trik untuk bagaimana melakukan ini sebelumnya. OK, orang ingin mendapatkan satu ini tembakan? 0x5A. PROFESSOR: 0x5A. 5a. Baik. Jadi ini di sini akan be-- Anda ingin untuk memberitahu kami bagaimana Anda punya itu? Pertama, bagaimana Anda mendapatkan lima? AUDIENCE: Karena nol, satu, nol, satu adalah lima. PROFESSOR: Apakah semua orang mengerti mengapa nol, satu, nol, satu adalah lima? Anda punya satu di sini. Anda tidak dalam dua yang pertama. Dalam dua sampai kedua, Anda memiliki satu, yaitu empat. Jadi Anda menambahkan empat ditambah satu, Anda memiliki lima. Semua orang baik? OKE. Dan kemudian apa ini dan mengapa? Apa nomor yang A sesuai dengan? AUDIENCE: 10. PROFESSOR: Dan apa ini dalam basis dua? AUDIENCE: [tidak terdengar] PROFESSOR: Tepat. Jadi nilai ini kedua di sini akan 0x5A. Semua orang yang baik tentang bagaimana mengkonversi? Ini jauh lebih sederhana dari yang Anda pikirkan. Aku hanya ingin memastikan Anda tahu tips-tips dan trik untuk bagaimana melakukan hal itu. AUDIENCE: Mengapa Anda hanya membagi itu di tengah-tengah seperti itu? Hanya seperti, OK, aku hanya akan peduli ini pertama [tidak terdengar]? PROFESSOR: Karena itulah sebenarnya cara nilai-nilai heksadesimal diwakili. 0x, yang benar-benar berarti apa-apa selain memberitahu Anda bahwa itu angka heksadesimal. Dan ini selalu merupakan empat digit pertama. Dan ini selalu merupakan empat digit terakhir. Dan dua digit hanya sesuai dengan bit yang berbeda. AUDIENCE: Jadi kita akan always-- PROFESSOR: Kau selalu akan mendapatkan delapan bit nilai. AUDIENCE: Apakah itu hanya ingin sesuatu di sini atau bahwa hal seluruh? PROFESSOR: Itu hanya hal di komputer, ya. AUDIENCE: OK. Mengagumkan. PROFESSOR: Juga, sehingga dalam contoh ini kita dikonversi dari biner ke desimal, dan dari biner ke heksadesimal. Kalian ingin memastikan Anda juga berlatih akan sebaliknya. Jadi jika saya memberi Anda 0xFF, Anda bisa menarik bahwa dalam biner, kan? Anda mengkonversi F ke biner, yang merupakan salah satu, satu, satu, satu, mengkonversi F ke biner, yang adalah salah satu, satu, satu, satu. Jadi kami akan meminta Anda untuk melakukan sebaliknya. Jadi desimal ke biner, atau heksadesimal ke biner. Jadi, Anda ingin membuat Pastikan Anda tahu kedua cara. Kami mungkin akan meminta Anda kombinasi dari keduanya. Ya, Anda punya pertanyaan? Saya dapat see-- Anda baik? AUDIENCE: Ya. PROFESSOR: OK. Apakah saya baik untuk menghapus ini? Besar. Baiklah, jadi jawaban di sini jika ada penasaran nanti dan bingung. OKE. AUDIENCE: Apakah itu penting jika kita menempatkan surat-surat kami di gedung DPR atau huruf kecil? PROFESSOR: Itu, karena dalam heksadesimal, dengan konvensi, semua karakter huruf besar. Jadi A sampai F adalah akan menjadi huruf besar. Jika Anda menempatkan huruf kecil, saya tidak tahu jika kita tentu akan menandai salah. Tapi secara teoritis, itu tidak secara teknis bagaimana Anda seharusnya untuk memilikinya. Jadi mereka semua harus huruf besar. Ya, pertanyaan yang bagus. OKE. Pertanyaan kedua. Pertimbangkan program ini indah di sini. Saya akan mengajukan pertanyaan, Aku akan datang kembali ini. Jadi, pertama, apa yang ada di dalam standar io.h yang menarik bagi program? Kedua, apa batal menandakan sejalan tiga? Dan ketiga, apakah kembali nol dari utama, sebagai jalur enam, umumnya menandakan? Jika kalian ingin menulis mereka down, karena saya harus beralih kembali untuk slide hanya sehingga Anda dapat melihat kode. Ini adalah contoh dari, seperti, mungkin pertanyaan tingkat yang lebih tinggi di mana kami meminta Anda apa hal-hal berarti dalam sebuah program. Semua orang yang baik bagi saya untuk kembali ke slide? OK keren. Jadi saya akan memberikan kalian seperti mungkin tiga menit untuk melihat satu cepat nyata ini. OK, jadi ini satu seperti cukup mudah, konseptual. Apakah ada yang ingin memberitahu saya apa pertama dalam oleh hash termasuk file library io.h kami standar? Mengapa kita perlu perpustakaan yang termasuk untuk program ini? Apa di sini yang kita butuhkan untuk? Ya? AUDIENCE: Apakah bahwa ketika Anda menempatkan printf itu? PROFESSOR: Tepat. Jadi printf, setiap kali Anda mengambil input dari user dan mencetak sesuatu ke layar, yang standar input, perpustakaan output. Anggap saja bahwa way-- input, output. Apakah saya memiliki output? Ya. Jadi saya tahu bahwa saya akan selalu perlu perpustakaan standarisasi i.o. Jadi printf adalah fungsi yang kita butuhkan untuk mengakses dan hashtag termasuk perpustakaan i.o standar. OKE. Kedua, apa batal menandakan? Kami memiliki int main (void), apa membatalkan sini berarti di sini pada baris ketiga? Ya, di belakang. AUDIENCE: [tidak terdengar] PROFESSOR: Tepat. Jadi ingat, kita telah belajar dimulai dengan pset kami bahwa Anda benar-benar bisa tentukan baris perintah argumen bahwa program Anda, bahwa Anda Fungsi utama, mengambil sebagai Anda, pengguna, menyebutnya. Jika kita memiliki kekosongan, itu berarti bahwa Anda hanya bisa menjalankan program secara langsung tanpa argumen baris perintah. Semua orang yang jelas tentang itu? OKE. Dan terakhir mengapa kita repot-repot melakukan ini hal pengembalian nol di sini? Mengapa kita bahkan memiliki int main? Mengapa kita tidak bisa hanya memiliki kekosongan void main? Ya? AUDIENCE: Hanya sehingga kita bisa pastikan bahwa program ini keluar berhasil, sebagai menentang jika itu bernomor. Dan kita akan tahu bahwa itu yang berbeda kesalahan. PROFESSOR: Ya, persis. Ini hanya sangat Hal konvensional yang kita lakukan, adalah bahwa hanya pada akhir program Anda, hanya untuk memastikan bahwa fungsi utama Anda berjalan dengan benar, kita selalu ingin melakukan kembali nol. Meskipun kita mungkin harus tidak melihat bahwa dicetak di mana saja. Karena sebagai programmer, Anda tahu, jika Anda memiliki banyak baris yang berbeda dari kode dan Anda tidak tahu di mana ini akan salah, dan jika kesalahan terjadi, Anda ingin pastikan bahwa Anda mendapatkan kesalahan itu. Dan biasanya jika terjadi salah kita akan memiliki kembalinya satu hanya untuk memastikan kita tahu bahwa itu adalah. Jadi jika Anda melihat kembali sebuah nol, yang biasanya berarti program anda adalah dieksekusi dengan sukses. Baik? Keren. OK, program kedua di sini. Pertimbangkan bahwa. Dan jika kalian melihat mengapung, kalian mungkin bisa memiliki ide yang baik dari apa yang Saya akan meminta Anda. Jadi, ketika program ini mengeksekusi, seperti yang Anda lihat, Saya menyatakan pelampung dalam fungsi utama saya. Saya penamaan itu "menjawab," dan aku pengaturan yang sama dengan satu dibagi dengan 10. Saya mencetak, untuk satu desimal, float itu. Dan kemudian aku kembali nol. Jadi ketika menjalankan program, berpikir kembali ke serakah sekarang, Program ini mencetak 0,0. Seperti kita semua tahu, mudah-mudahan kita semua tahu, satu dibagi dengan 10 bukanlah 0.00, itu 0,1. Tapi menjelaskan mengapa program ini berpikir yang 1 dibagi dengan 10 cetakan ke 0,1 lain dari 0,1? Saya akan memberikan kalian mungkin seperti 30 detik hanya cepat berpikir tentang itu dan aku akan kembali ke program. OKE. Siapapun ingin mencobanya? Dalam tiga kalimat atau kurang, karena biasanya kami akan membatasi semua jawaban untuk tiga kalimat atau kurang sehingga Anda tidak hanya memuntahkan hal-hal acak ke kuis Anda. Ya, mengambil tembakan. AUDIENCE: Jadi saya pikir ada ini hal yang disebut, seperti, [tidak terdengar] Jadi mungkin ada, misalnya, mungkin ada, seperti, 0,09, yang mana Anda mencetak pertama digit, itu akan 0.0? PROFESSOR: Tutup, tidak cukup. Christabell? AUDIENCE: Kau membagi satu dan 10, dan mereka berdua bilangan bulat. Dan cara bahwa itu akan untuk menyimpannya sebagai integer. Dan integer terdekat akan 0,0. Dan jadi itu 0,1. PROFESSOR: Ya, itu benar-benar baik. Itulah jawaban yang benar. Jadi ini adalah sangat membingungkan Konsep untuk banyak anak-anak. Dan aku benar-benar ingin memastikan bahwa ini diperkuat di kepala semua orang. Jadi apa yang kita sebut mengambang titik ketidaktepatan, di mana alasan mengapa banyak program Anda di serakah tidak bekerja pada awalnya adalah karena Anda lupa untuk membuang variabel Anda. Jadi apa yang dikatakan Christabell adalah sepenuhnya benar. Sebuah float secara inheren tidak tepat. Karena dalam komputer, tepat, kita harus jumlah terbatas bit memori bisa kita gunakan untuk mewakili angka. Jadi, misalnya, ID CS50 ini is-- Saya pikir itu adalah komputer 64-bit. Sebuah float hanya dapat diwakili dengan jumlah yang terbatas dari mereka bit. Dan 0,1 dengan nol yang tak terbatas, yang adalah 0,1, kan? Tapi kita tidak bisa benar-benar menyimpan nomor di komputer kita. Kami hanya tidak memiliki memori yang cukup untuk melakukannya. Dan pendekatan terdekat dari apa yang disimpan dalam memori sebenarnya sesuatu seperti 0.000 sesuatu, sesuatu, sesuatu, sesuatu. Yang, setelah Anda memotong itu, putaran ke 0.0. Dan jadi contoh ini adalah salah satu yang menunjukkan banyak masalah kita memiliki setiap kali kita berada mencoba salah melakukan matematika tanpa casting sebagai bilangan bulat yang berbeda. Jadi hanya berhati-hati dari hal ini terjadi. Pada kuis, jika kita memberikan blok kode dan itu seperti, apa yang mencetak di akhir? Dan jika itu beberapa nilai acak Anda orang harus tahu mengapa itu terjadi. Ya? AUDIENCE: Batas adalah menyingkirkan semuanya setelah titik tertentu? [Tidak terdengar] PROFESSOR: Ya, jadi sebenarnya ini adalah contoh yang sangat buruk, karena 0.100 apapun sebenarnya akan memotong ke 0,1. Tetapi jika Anda adalah untuk menjalankan itu-- aku tidak ingat, karena tahun lalu mereka berlari pada program yang berbeda. Mereka berlari di sesuatu yang disebut yang CS50 Appliance, yang berbeda dari ID. Itu adalah sistem 32-bit, saya pikir. Dan jadi ada nomor yang berbeda. Tapi pada dasarnya, hanya tahu bahwa seluruh konsep pemotongan dan bagaimana itu hanya memotong hal off. Dan jadi jika rounds-- AUDIENCE: Tanpa pembulatan. PROFESSOR: Tepat. Ya. Keren. Hi, di belakang. Kami hanya akan membahas beberapa Ulasan kuis pertanyaan. Baiklah. Jadi mempertimbangkan program yang berbeda di sini. Aku akan memberikan kalian sebuah beberapa menit untuk membaca lebih ini. Ini adalah sesuatu yang sangat untuk baru-baru ini yang saya pikir meniup banyak dari Anda pikiran orang itu. Tapi kami akan berbicara melalui ini lagi hanya untuk memastikan Anda memahaminya sepenuhnya. OKE. OKE. Siapapun membutuhkan lebih banyak waktu untuk membaca kode ini? OKE. Jadi menurut saya yang dalam program ini saya menciptakan dua string dengan menggunakan GetString. Satu disebut dan satu disebut t. Dan jika mereka sama sama satu sama lain, harus mencetak "Anda ketik hal yang sama. " Tapi elsewise, itu akan mencetak, "Anda diketik hal yang berbeda, "benar? Tampaknya sangat, sangat sederhana. Tapi, bagaimanapun, jika saya benar-benar mencoba untuk menulis program ini, tampaknya bahwa bahkan ketika saya input string yang sama persis, masih mencetak, "Anda diketik hal yang berbeda! " Apakah ada yang ingin mengambil menembak mengapa program ini selalu menjawab bahwa input berbeda, bahkan ketika kata-kata sendiri sama? Jadi jika saya harus input-- David cinta menggunakan contoh seperti ibu, kan? Huruf kecil M-O-M untuk S, T sama dengan huruf kecil M-O-M. Jika aku berlari melalui kode itu, mengapa hal itu mencetak "Anda mengetik hal yang berbeda?" Apakah ada yang membutuhkan lebih banyak waktu untuk berpikir tentang hal ini? OK, saya pikir kita baik. Ya? AUDIENCE: OK, jadi itu sesuatu tentang di mana itu disimpan dalam memori, kan? PROFESSOR: Yep. AUDIENCE: Dimana itu seperti, apakah ini string s disimpan di memori spot-- Aku menciptakan this-- adalah nol. PROFESSOR: Tentu. AUDIENCE: Dan tali t disimpan di tempat memori, seperti, 167, dan kemudian nol tidak sama 167. PROFESSOR: Tepat. OK, jadi ingatlah ini luar biasa wahyu kami menjelaskan kepada kalian minggu terakhir ini, bahwa string tidak benar-benar ada? Ketika kita membuat sesuatu yang disebut tali kami, pada kenyataannya, menciptakan sesuatu yang disebut bintang arang. Yang semua itu adalah pointer ke string atau array karakter. Dan dalam contoh ini, jika saya adalah untuk masukan M-O-M jalan bahwa komputer saya akan menyimpannya adalah dalam memori backslash nol, kan? Empat karakter, karakter, akan disimpan di suatu tempat. Dan kemudian keempat karakter, backslash nol, disimpan di tempat lain, kan? Saya tidak tahu di mana alamat adalah, mereka di suatu tempat di komputer saya. Tapi aku tidak tahu persis di mana mereka berada. Ketika saya membuat sebuah string s, semua yang benar-benar adalah pointer ke mulai dari string ini. Dan ketika saya menciptakan nilai t ini, semua itu adalah pointer ke sini. Dan ketika Anda mencoba untuk menyamakan dan memeriksa untuk melihat apakah s adalah sama dengan sama dengan t, komputer benar-benar hanya kembali ke Anda alamat m ini dan alamat m itu. Dan karena mereka dua bagian yang terpisah dari data yang yang disimpan dalam dua berbeda alamat di komputer Anda, komputer Anda tidak akan pernah mengenali mereka sebagai sama. Apakah ada yang ingin memberikan tembakan pada apa yang kita harus dilakukan jika kita ingin memperbaiki ini dan memiliki program berjalan yang benar sebagai gantinya? Pikirkan tentang hal itu selama beberapa detik. Apa yang kita butuhkan untuk mengubah ke mendapatkan fungsi program ini cara kita inginkan berfungsi? Ya, ingin mengambil bacokan di itu? AUDIENCE: Bisakah kita mencoba untuk dereference pointer dan periksa melalui array? PROFESSOR: Itu salah satu cara untuk melakukannya. Jadi, siapa namamu lagi? Maaf, mengingatkan saya. Zee: Zee. PROFESSOR: Ya, jadi apa Zee disarankan akan benar-benar bekerja. Kanan? Kita bisa dereference pointer dan benar-benar pergi dan akses data fisik dalam sini. Dan kami hanya bisa membandingkan seluruh layar. Kita dapat mengatakan, OK, pointer, memberikan apa yang ada di dalamnya sini. Ini akan mengembalikan m. Dan aku akan mengatakan, pointer, memberikan apa yang ada di dalamnya sini. Mengembalikan m. Apakah pertandingan mereka? Iya nih. Kemudian kita lanjutkan. Kami terus memeriksa seluruh dua string sepanjang jalan sampai akhir dan melihat apakah mereka adalah sama, jika semua nilai-nilai yang sama. Dan jika semua nilai-nilai yang sama, maka kita tahu string adalah benar. Benar-benar, itu bagaimana kita akan melakukannya? Apakah ada yang bingung tentang semua ini? Seluruh konsep bagaimana string benar-benar hanya pointer, dan bagaimana mereka tidak benar-benar ada? Dan mengapa kita mendapatkan error seperti cara kita mendapatkannya? Karena saya jamin kalian, pointer dan alokasi tali dan memori akan datang. Ya? AUDIENCE: [tidak terdengar] dereference itu, Anda hanya menempatkan bintang [tidak terdengar] PROFESSOR: Benar. Jadi untuk derererence pointer sarana untuk pergi ke alamat dari pointer dan memperoleh data, nilai ada. Dan cara untuk melakukannya adalah pointer bintang. Jangan bingung itu. AUDIENCE: [tidak terdengar]. PROFESSOR: Ya. AUDIENCE: Jadi Anda hanya bisa menulis jika bintang s sama t bintang sederajat. PROFESSOR: Yah, tidak. Tidak. AUDIENCE: Itu tidak cukup baik, kan? PROFESSOR: Ini bukan, karena kau hanya memeriksa huruf pertama. Anda mungkin akan perlu semacam lingkaran yang beriterasi setiap satu karakter di kedua string. Ya. Jadi jika Anda ingin hanya memeriksa untuk melihat jika mereka mulai dengan hal yang sama, Anda bisa lakukan jika, bintang s adalah sama dengan bintang t. Maka Anda tahu bahwa setidaknya mereka dimulai dengan karakter yang sama. Ya? AUDIENCE: Jadi jalan Anda yang akan seperti tertanam untuk loop atau pointer? PROFESSOR: Ya. Cukup banyak hanya untuk loop. Ingat, David di kelas disebutkan gula sintaksis gratis? Dan dia ini sangat Hal membingungkan bintang t ditambah satu, di mana ia akan mengintegrasikan melalui dan memindahkan pointer? Cara yang lebih mudah untuk melakukan ini hanya t i. Jadi itu hanya sebuah array. Cara yang Anda akan memiliki untuk loop yang berlari dari nol sampai i, di mana i adalah panjang tali, Anda bisa saja menulis bahwa alih-alih melakukan Seluruh pointer, hal referensi. Jadi hal-hal ini persis setara dalam komputer Anda. Kalian mungkin tidak akan perlu tahu bahwa, tapi itu baik untuk hanya jenis ada di belakang pikiran Anda. Hanya tahu bahwa komputer mengakui blok yang berbeda dari kode sebagai hal yang sama. Karena ini hanya jauh lebih user ramah bagi kita untuk hadir seperti itu array. Itu hanya lebih mudah. AUDIENCE: Jadi gunakan strlen seperti, get-- PROFESSOR: Ya. AUDIENCE: OK. PROFESSOR: Anda bisa menggunakan strlen atau, jika Anda tidak memiliki strlen Anda hanya dapat melakukan up sampai Anda menekan backslash nol untuk keduanya. Entah akan bekerja. Ya. AUDIENCE: Jadi untuk dereference setiap karakter tunggal jika kita benar-benar menulis kode ini, kita hanya bisa melakukan t kurung i suka dengan bintang di depannya? PROFESSOR: Ya, sama sederajat s braket i, dan kemudian terus bergerak i bawah sampai anda menekan akhir. Ya, itulah yang akan Anda lakukan. Dan aku benar-benar akan memiliki berikutnya contoh ketika kita benar-benar menulis strlen sehingga kalian akan jenis dari bisa bermain-main dengan itu sedikit. Jadi semua orang jelas hanya pada memori, string, pointer, alamat kualitas? Beberapa konsep tingkat yang lebih tinggi yang Anda kehendak untuk kebutuhan pasti tahu pada kuis besok. Baiklah. Baik. Ya. OK, jadi satu hal yang kita akan juga meminta Anda, seperti yang kita lakukan setiap tahun pada kuis, adalah, anggaplah bahwa Anda sudah lupa (yang kita tampaknya lupa untuk melakukan setiap tahunnya) di mana file header strlen dinyatakan. Dan jadi kita harus menulis ulang diri kita sendiri. Berikut adalah daftar pedoman bahwa kita dapat hadir Anda orang di mana Anda bisa berasumsi bahwa s string tidak akan null. Anda dapat mengasumsikan bahwa s akan diakhiri dengan garis miring terbalik nol. Jadi, Anda tahu itu apa itu akan berakhir dengan. Dan, misalnya, bahwa panjang halo akan menjadi lima. Sehingga Anda dapat mengasumsikan bahwa halo akan lima, H-E-L-L-O. Anda tidak harus mengasumsikan bahwa Backside nol account untuk panjang. Hal ini terakhir di sini, tidak khawatir integer overflow. Apakah ada yang ingat apa integer overflow adalah? AUDIENCE: Goes luar Panjang [tak terdengar]. PROFESSOR: Ya, bisa Anda jelaskan sedikit, apa artinya? AUDIENCE: Jadi, saya kira itu akan kembali untuk contoh truncating sebelumnya. Tapi jika Anda memiliki begitu banyak nomor yang melampaui jumlah bit bahwa Anda benar-benar dapat menetapkan bahwa itu akan hanya semacam terputus. PROFESSOR: Ya, seterusnya khas komputer, berapa banyak bit yang kita miliki? AUDIENCE: 32? PROFESSOR: Ya, 32, benar. Dan jadi itulah, apa, empat miliar, dua miliar? Empat miliar, hingga empat miliar bilangan bulat positif, kan? Dua miliar negatif, dua miliar positif, tergantung pada bagaimana Anda ingin melakukannya. Dan jadi pada dasarnya kita dapat memiliki cukup bilangan bulat yang bisa naik untuk dua sampai 31 minus 1, kan? Karena sekali kita memukul dua untuk ke-32, kita tidak memiliki banyak memori di komputer kita. Dan, secara teoritis, saya bisa datang dengan nomor yaitu, seperti, dua sampai 46 orang. Ini sejumlah besar-ass, tetapi secara teoritis Anda bisa. Dan meluap sehingga bilangan bulat adalah jika Anda mencoba untuk membuat integer yang melampaui apa yang komputer Anda mampu menyimpan. Dan kalian untuk contoh ini tidak memiliki khawatir tentang kami memberikan Anda raksasa string yang dua dengan karakter 32 panjang. Yang akan benar-benar berarti. Baiklah, jadi aku hanya akan memberikan kalian struktur dasar ini. Anda akan membuat fungsi yang disebut int strlen mana lulus dalam, bintang char, atau tali, pointer ke string disebut s. Baiklah, setiap orang menyalin yang turun. Keren. Oops-- cara lain. Jadi ini adalah jenis seperti sepotong sulit masalah, jadi saya akan memberikan kalian mungkin lima sampai enam menit untuk jenis brainstorming dan menulis fungsi ini. AUDIENCE: Kami tidak melakukan akun untuk [tidak terdengar], kita tidak harus menggunakan bilangan bulat? PROFESSOR: Tidak, Anda tidak. Saya akan memberikan kalian petunjuk. Sebuah loop sementara mungkin sangat berguna di sini. Ya. Berikut permen. Permen juga akan tersedia untuk kuis, saya pikir. Jadi kalian akan semua bergula besok. Dapat Aku-- Anda mendapatkannya. AUDIENCE: OK. PROFESSOR: Ya. Mungkin 30 detik lebih atau lebih. Baiklah, jika Anda tidak dilakukan, tidak ada kekhawatiran. Kami akan bergerak melalui ini bersama-sama. OKE. Jadi aku akan hanya tata letak yang struktur dasar untuk fungsi ini di sini. Int strlen. Pertama, apakah ada yang ingin memberitahu apa menandakan bahwa int? Kita perlu memiliki fungsi ini. AUDIENCE: Strlen [tak terdengar]. PROFESSOR: Tepat. Jadi apapun yang terjadi di sini, kita perlu kembali integer. Dan seperti yang ditentukan dalam spec, kami ingin return-- Pergi untuk itu guys, hanya terus. Itu semua baik. Makan semua jadi saya tidak memiliki untuk mengambil kembali, benar-benar. Int hanya menandakan bahwa Anda akan kembali integer. Apa arang ini bintang s? Maksudnya itu apa? AUDIENCE: Seperti, apa yang menjadi masukan dalam. PROFESSOR: Tepat. Dan apa yang hampir hal yang sama seperti bintang arang? AUDIENCE: String? PROFESSOR: Tepat. Jadi semua yang kita lakukan adalah memberikan ini pointer ke string. OKE. Keren. Juga, jangan lupa, jika kita lupa untuk memberikan tanda kurung ini, jangan lupa untuk menulis mereka sendiri. Karena secara teoritis, kode Anda salah jika Anda lupa untuk menulis mereka. Hanya selalu memperhatikan. Seperti, hal-hal kecil bahwa Anda tidak melihat ketika Anda pemrograman pada laptop Anda, karena laptop Anda melakukannya untuk Anda? Jangan lupa saat Anda sedang menulis dengan tangan. Ya? AUDIENCE: Tapi bagaimana salah? Seperti, kita mendapatkan seluruh masalah yang salah? PROFESSOR: Tidak, tidak. Jangan khawatir. Ini sebenarnya secara teoritis mungkin bagi Anda untuk mendapatkan poin penuh pada pertanyaan bahkan jika kode Anda akan tidak pernah berjalan di kehidupan nyata. Saya sarankan Anda tidak mencoba untuk membuat itu terjadi. Sebagai contoh, seperti jika semuanya yang ada di sini adalah benar, tapi Anda lupa usus atau braket, kode Anda tidak akan benar-benar menjalankan. Tapi kita mungkin penuh belas kasihan. Ya? AUDIENCE: Apakah Anda harus mengomentari tulisan tangan kita? PROFESSOR: Tidak, tidak, tidak kekhawatiran tentang itu. Tidak ada komentar. Gaya harus baik. Seperti, tidak Smush semuanya pada satu baris. Kami tidak akan bahagia dengan Anda jika Anda melakukan itu. Apakah ada yang ingin memberikan baris pertama? Petunjuk, itu sangat mudah. Ya? AUDIENCE: Int, n sama dengan nol. Hanya mengatur counter. PROFESSOR: Jadi kita ingin beberapa semacam counter, kan? Aku hanya akan nama itu "menghitung" untuk memudahkan pembacaan. Apa yang kita ingin mengatur itu sama dengan? AUDIENCE: Zero. PROFESSOR: Yep. Titik koma. Ini juga titik koma gambar yang sangat aneh. Hanya berlatih melakukan hal itu. Jadi kami ingin pertama memiliki counter tipe int. Karena kita ingin menghitung berapa banyak karakter atau huruf yang dalam string ini, kan? Sangat mudah langkah pertama. OK, mungkin sedikit lebih kompleks sekarang, bagaimana yang akan kita melakukannya? Apakah ada yang ingin memberi saya baris kode yang mungkin dapat membantu lingkaran melalui apa pun ini? Ya, jiwa berani di belakang? AUDIENCE: OK, maka sementara titik tanda bintang, yang yeah, bintang s, tidak sama dengan nol, kemudian melakukan sesuatu? PROFESSOR: Itu benar-benar, benar-benar dekat. Benar-benar dekat. Jadi aku akan mengatasi dua hal dengan itu. Pertama-tama, itu bukan nol. Apa itu? Ini null terminator, yang backslash nol. Jadi mereka berbeda dalam hal bagaimana mereka disimpan. Jadi kau benar-benar dekat. Dan kedua, kita tidak ingin hanya memindahkan pointer. Kami ingin benar-benar mengakses nilai-nilai, kan? Dan bagaimana kita melakukannya? Sangat mudah. Jangan berpikir tentang pointer, tidak berpikir tentang kenangan. Kembali ke seminggu dua kursus ini. AUDIENCE: [tidak terdengar]. PROFESSOR: Sampai, ingat? Apa string? Bagaimana mereka disimpan dalam memori? AUDIENCE: Mereka mengangkat. PROFESSOR: Mereka dibangkitkan. Jadi bagaimana kita mengakses masing-masing karakter di dalam? AUDIENCE: [tidak terdengar]. PROFESSOR: Tepat. Jadi while-- apa yang terjadi di dalam sini? S dari - AUDIENCE: I. PROFESSOR: Oh, saya tidak ada, apakah itu? AUDIENCE: Oh, hitung? PROFESSOR: Kami hanya bisa menggunakan count, kita tidak bisa? AUDIENCE: Maaf, saya menyebutnya saya. PROFESSOR: Ya, itu semua baik. Kami memiliki variabel di sini yang sudah dinyatakan sebagai counter kami. Jadi kenapa tidak kita hanya menggunakan bergerak melalui loop sementara? Apakah itu masuk akal? Jadi sementara s dari count-- tidak ada yang ingin untuk memberikan apa yang terjadi setelah di sini? AUDIENCE: Ini tidak sama. PROFESSOR: Apakah tidak sama, kan? Ini bang sama, tanda seru sama, apapun kalian ingin menyebutnya tidak equal-- AUDIENCE: [tidak terdengar]. PROFESSOR: Ya. Ingat kutipan tunggal untuk char, tanda kutip ganda adalah untuk string. Hati-hati saat menggunakan mereka. Jadi ketika kita melihat melalui array, karakter terakhir, kita tahu kita tidak ingin untuk menjadi backslash nol. Jadi sementara. Kami tidak di akhir string. Apa yang ingin kita lakukan di dalam? AUDIENCE: Kami ingin menambah counter sehingga itu penting plus plus? PROFESSOR: Tepat. Jadi di sini kita akan melakukan menghitung, menghitung plus plus. Hilang satu baris lagi. Kita sudah hampir sampai. Apa yang kita lupa lakukan? AUDIENCE: Kembali nol? PROFESSOR: Anda ingin kembali nol? AUDIENCE: Tidak, kembali ke strlen. Tunggu. PROFESSOR: Yang disimpan dalam? AUDIENCE: Hitung. Menghitung. PROFESSOR: Tepat. Jadi di sini kita akan kembali menghitung. Karena apa yang kita lakukan di sini ultimately-- kita memiliki variabel counter yang akan kenaikan melalui string kita. Kita akan terus, terus pergi, sekitar dan di dalam lingkaran ini. Dan sementara kita tidak di akhir ini string, yang merupakan null terminator. Dan setiap kali kita pergi melalui itu, kita menambah counter kami. Dan kita akan lanjut bersama dalam array ini. Dan pada akhirnya, setelah kami memukul null terminator, kita tahu, oh, kita bisa istirahat, kembali menghitung. Kami memiliki strlen kami. Apakah semua orang mengerti bagaimana ini dilaksanakan? Sementara loops-- Aku tahu kita belum dilakukan terlalu banyak dengan mereka, tapi mereka biasanya sangat, sangat berguna jika Anda tidak tahu apa yang Anda berhenti Kondisi tentu harus. Pertanyaan? AUDIENCE: Dapatkah kita menulis nol pada kondisi sementara? PROFESSOR: Sementara? Ya, jadi dalam masalah ini saya harus Anda orang menganggap bahwa s tidak akan null. Karena ingat, secara teoritis, jika saya memberi Anda pointer yang terlalu besar memori, itu akan memberi Anda nol, kan? Itulah yang operasi Sistem akan melakukan. Jadi jika saya tidak memberitahu Anda untuk mengasumsikan s akan null, Anda perlu memeriksa. Jadi di sini, Anda akan lakukan, jika s sama sama nol, kembali satu. Sesuatu seperti itu. AUDIENCE: [tidak terdengar] nol. PROFESSOR: OK, saya akan memberitahu Anda mengapa kita tidak bisa melakukan itu. Karena ingat di memori, kanan, di sini. Kami akan pergi ke sini. Anda punya blok raksasa memori semua dengan grid bahwa toko nilai yang berbeda, kan? Dan sehingga semua string is-- untuk Misalnya, jika kita ingin masukan halo, itu akan menjadi H-E-L-L-O backslash nol, kan? Dan kemudian siapa tahu, seperti acak hal-hal yang di sini setelah itu. Kami tidak benar-benar tahu apa yang ada. Dan jika Anda adalah untuk melakukan bukannya backslash nol, null, hal itu mungkin tidak null. Karena itu hanya mungkin berarti beberapa acak hal-hal lain yang tidak termasuk dalam string Anda. Dan cara yang kita selalu tahu bahwa string berakhir adalah dengan backslash nol. Dan sehingga selalu bagaimana kita memeriksa untuk melihat akhir dari string. Null, segala cara yaitu jika Anda memiliki pointer tidak ada, pertama-tama, atau jika memori Anda hanya begitu besar yang Anda tidak dapat mengembalikannya, maka itu akan menjadi nol. Jadi berhati-hati ketika membedakan perbedaan antara nol dan backslash nol. Ya. Semua orang OK dengan ini? OKE. Jadi saya harus kalian menuliskan strlen. Feasibly kami juga bisa meminta Anda menulis keluar A ke saya, ingat bahwa "Atwoa" atau apa pun kalian ingin menyebutnya? Fungsi yang di Vigenere dan Caesar, yang mengkonversi nilai Ascii ke integer? Yang juga telah datang di kuis masa lalu fungsi kami sudah meminta Anda untuk menulis. Hampir semua fungsi bahwa Anda telah digunakan dan sangat mudah untuk menulis sendiri, sensor seperti lebih rendah, adalah atas, untuk menurunkan, untuk bagian atas. Fungsi yang akan mengkonversi string dari huruf kecil ke huruf besar. Kita semua tahu bagaimana melakukan itu, kan? Ini cukup mudah. Hanya ingin memastikan bahwa Anda can-- itu proses berpikir yang sama. Anda hanya iterate melalui dan Anda mengubah hal. Anda baik menghitung atau ketika Anda mengubah hal-hal yang berbeda. Saya akan suggest-- saya tidak tahu apakah kita akan meminta Anda untuk menghafal apa modal A atau Z modal, atau huruf kecil atau huruf kecil A z berada di Ascii, tapi saya akan menyarankan mungkin menulis yang turun dalam kasus kita lakukan. Hanya sehingga kalian punya referensi. Seperti huruf A, apa, 197? Dan kemudian huruf kecil seperti 50 sesuatu. 65, yeah, di sana Anda pergi. Jadi hanya cukup banyak tahu Perbedaan antara mereka adalah 32. Itu cukup penting. Ya. Apakah saya yang baik ini? OKE. AUDIENCE: Kita bisa teoritis menulis beberapa ini turun juga di little-- kami PROFESSOR: Anda secara teoritis hanya bisa menyalin fungsi turun. Itu benar. AUDIENCE: Tidak [tidak terdengar]. PROFESSOR: Kalian memiliki lembar. Kalian memiliki lembar catatan. Anda dapat mengetik itu. Anda dapat menulis. Anda dapat melakukan apapun yang Anda inginkan dengan itu. Ya. Jadi secara teoritis, jika Anda ingin, pergi untuk. AUDIENCE: [tidak terdengar] tapi kami tidak benar-benar tentu perlu ingat nilai, kita bisa hanya menggunakan untuk atas atau ke Fungsi yang lebih rendah, kan? PROFESSOR: Ya. Tetapi jika kita memberi Anda sebuah pertanyaan yang mengatakan menulis ke atas, maka Anda akan perlu untuk menuliskannya. Jadi kalian bisa berasumsi bahwa Anda orang memiliki akses ke semua fungsi, tetapi jika Anda ingin menggunakan untuk atas atau ke rendah, apa yang Anda juga harus lakukan? AUDIENCE: [tidak terdengar] menggunakan CS50 [tidak terdengar] PROFESSOR: Apakah CS50.h? Hati-hati disana. Jadi untuk bagian atas, untuk menurunkan, adalah atas, lebih rendah, fungsi yang melibatkan manipulasi string yang semua dalam baik Ascii yang atau dalam perpustakaan matematika atau dalam perpustakaan tali. Jadi, jika kalian menggunakan mereka fungsi, hati-hati untuk mengingat untuk menyertakan header yang. Jadi mungkin juga sesuatu yang Anda ingin memasukkan dalam lembar Anda, apa header? Apa perpustakaan Anda telah menggunakan? Fungsi apa dalam perpustakaan tersebut? Ini penting. Ya? AUDIENCE: Bisakah kita hanya polisi keluar dan melakukan hashtag melalui benar-benar setiap surat yang pernah kita terlihat seperti pada semua pertanyaan? PROFESSOR: Anda bisa. Saya tidak tahu bagaimana bahagia kita akan menjadi ke kelas kuis bahwa ketika setiap bagian dari kode adalah dua kali lebih lama karena perlu. Saya tidak tahu, kita mungkin melepas titik untuk gaya. Tapi secara teoritis Anda Kode akan benar. Kalian bisa polisi dan hanya meliputi segala sesuatu. Itu bagus juga, ya. AUDIENCE: [tidak terdengar]. PROFESSOR: Ya. Saya akan menyarankan tidak melakukan hal itu sekalipun. Ya. AUDIENCE: Cool. PROFESSOR: Pertanyaan yang bagus. AUDIENCE: Jadi, skenario terburuk. PROFESSOR: Kasus terburuk. Jika Anda benar-benar lupa, Anda bisa melakukan itu. Ya. Yep, kode ada di sana. Saya menggunakan n bukan hitungan tetapi, Anda tahu, apa pun mengapung perahu Anda. AUDIENCE: Tunggu, jadi kami tidak perlu hashtag termasuk karena kita mulai int? PROFESSOR: Ya, saya hanya menduga bahwa kami diminta untuk menulis fungsi. Jika Anda ingin menjadi aman, Anda mungkin bisa menaruhnya di sana. Tapi aku hanya tidak repot-repot, ya. Aku bahkan tidak tahu jika Anda membutuhkan perpustakaan untuk ini. Karena Anda tidak benar-benar mencetak apa-apa atau apa, kan? Ya, saya tidak tahu apakah Anda perlu perpustakaan. OKE. Ini juga sedikit lebih bersama garis manipulasi memori. Semacam ini sedikit rumit. Pikirkan ini. Anda memiliki fungsi yang disebut func. Aku bisa menamakannya apapun, tapi saya memilih untuk nama itu func. Saya memilikinya di atas utama saya. Ingat, Anda ingin memiliki fungsi setelah utama Anda, Anda ingin memastikan Anda termasuk prototipe atas. Tapi dalam kasus ini itu begitu singkat bahwa saya merasa bahwa saya bisa saja memasukkannya di atas utama. Saya tidak perlu memiliki prototipe, karena itu sudah tertulis di atas. Jadi semua yang saya lakukan dalam fungsi utama saya adalah menciptakan bilangan bulat x sama dengan 10. Saya memanggil fungsi func saya, dan kemudian mencetak sesuatu. Dan kemudian itu benar-benar apa func lakukan. Kalian ingin memikirkan ini. Karena itu sedikit rumit. Ini sangat, sangat sulit, sebenarnya. Memikirkan apa ini Program akan keluaran. Saya akan memberikan kalian dua menit. Baik diskusi? AUDIENCE: Ya. PROFESSOR: Ya. Baiklah, jadi ini adalah rumit karena suatu alasan. Dan ini adalah mengapa saya ingin membawa ini untuk perhatian semua orang. Apakah ada yang ingin memberikan saya saran, upaya? Apa yang akan mencetak ini? Benar-benar baik-baik saja jika Anda salah. Ya? AUDIENCE: Saya pikir itu 100 dan kemudian 10 pada dua baris terpisah. PROFESSOR: Dan 10? Apakah ada yang punya tebakan lain? Ya? AUDIENCE: Mungkin hanya 10 karena func tidak kembali apa-apa? PROFESSOR: OK, jadi kami memiliki menebak nomor satu adalah bahwa menebak nomor dua adalah hanya akan mencetak 10. Apakah ada yang punya tebakan lain? OKE. Jadi mari kita berjalan melalui ini, kan? Setiap kali Anda mendapatkan bagian dari kode, tidak hanya melihat itu dan menjadi seperti, ah, itu begitu banyak hal! Aku begitu bingung! Seperti, menenangkan diri. Hanya tahu bahwa Anda hanya bisa melihat melalui baris demi baris kode. Itu semua itu. Ini seperti membaca buku. Jadi dengan fungsi apapun, kita selalu mulai main. Jadi kita akan mulai int void main, bahkan program sudah lari ke bawah, kan? Mulai di void main. Int x sama dengan 10. Jadi aku akan menghapus ini. Aku akan menarik memori hanya begitu Anda orang dapat jenis melihat apa yang terjadi. Ingat di sini kita memiliki setumpuk kita? Sampai di sini kita memiliki kami menimbun suatu tempat di sini. Stack tumbuh, kan? Dan dalam stack, Anda memiliki listrik berfungsi serta semua variabel lokal induk. Jadi di sini, int x sama 10. Dalam fungsi utama kami kami menciptakan sebuah variabel yang disebut x. Kami sedang menyiapkan yang sama dengan 10. Di sini Anda punya beberapa x, dan Anda pengaturan yang sama dengan 10, kanan, dalam utama. Semua orang baik? Fungsi. Jadi sekarang, dalam utama kami fungsi, kami memanggil fungsi kita sudah tertulis di atas. Jadi kita sekarang sedang memasuki fungsi kedua. Kita akan membuat lain variabel int x sama dengan 100. Apa yang terjadi di sini di stack? Apa yang terjadi ketika Anda memanggil Fungsi yang menciptakan variabel baru? Apa yang terjadi di sini di stack? AUDIENCE: [tidak terdengar] tumpukan di atas? PROFESSOR: Ya. Sehingga benar-benar menciptakan salinan. Dan jenis tumpukan di atas. Pikirkan stack-- stack buku, tumpukan apa-apa. Tumpukan di atas, pertama di terakhir keluar, bertahan, keluar pertama. Jadi itu akan membuat x sini. Itu akan memiliki semua funcs variabel. Besar. Jadi sekarang kita memiliki dua yang berbeda x yang merupakan dua hal yang sangat berbeda. Kemudian kita akan mencetak keluar integer dari x. Jadi mari kita mencetak 100, kan? Karena di sini itu 100. Jadi itulah hal pertama bahwa itu akan mencetak. Karena ini kembali fungsi apa-apa, sekarang fungsi itu, bahwa garis di utama dilakukan. Semua orang baik dengan saya sejauh ini? Jadi kita sekarang melalui dua dari tiga baris fungsi utama kami. Sekarang kita akan baris ketiga. Kita akan printf. Apa x ini dalam utama? Apa yang mewakili? Apa nilai adalah x sekarang? AUDIENCE: 100. PROFESSOR: Ini 100? AUDIENCE: Masih 10. PROFESSOR: Masih 10. Ya. Karena ingat, dalam func kami, x sama dengan 100. Tetapi jika kita kembali fungsi utama kami, variabel yang disimpan dalam tempat yang berbeda di stack kami. Jadi sekarang kita perlu kembali ke tumpukan utama, induk variabel lokal. Dan di sini x sama dengan 10. Dan kita akan mencetak 10. Jadi dia benar-benar tepat. Kita akan memiliki output 100 dan 10. Ya? AUDIENCE: Bila Anda malloc, apakah itu tumpukan atau tumpukan yang [tidak terdengar]? PROFESSOR: Bila Anda malloc, Anda mengambil memori dari tumpukan dan mengalokasikan itu. Sehingga Anda tidak memiliki main dengan semua ini. Jadi saya kira takeaway lebih besar di sini adalah sesuatu yang disebut ruang lingkup. Bagi Anda yang berada di review sesi tadi malam, kita berbicara sebentar tentang hal ini. Lingkup mendefinisikan bagaimana dan ketika variabel Anda ada. Atau dalam apa frame lakukan variabel Anda ada. Cukup banyak aturan praktis umumnya adalah, variables-- Anda jika Anda membuat mereka dalam braces-- keriting mereka ada hanya di dalam orang-orang kurung kurawal. Jadi misalnya dalam fungsi kami func, Anda melihat dua kawat gigi. Jika Anda membuat apa di dalamnya, kemungkinan semua yang Anda lakukan adalah menciptakan tumpukan dan menyimpan yang ada. Hal yang sama di utama. Itu hanya disimpan dalam utama. Juga Anda ingin menjadi sangat, sangat berhati-hati di sini. Karena lingkup juga meminjamkan sendiri untuk contoh yang berbeda. Jadi misalnya untuk lingkaran, untuk int i sama dengan 0. Saya kurang dari, saya tidak tahu, 10. Saya plus plus. Dan Anda punya kode di dalamnya, kan? Dimana variabel ini, i, sebenarnya hanya ada? Hanya dalam untuk Anda lingkaran. Jadi saya yakin banyak dari kalian memiliki mungkin mengalami kesalahan ini saat Anda melakukan program di psets Anda. Berapa banyak dari kalian telah mencoba menggunakan i luar untuk loop dan memiliki kesalahan? Seperti bilangan bulat Rintisan atau semacam itu? Alasan mengapa itu terjadi adalah karena di sini Anda menciptakan sesuatu yang hanya ada dalam lingkaran untuk Anda. Dan jika Anda mencoba untuk menggunakannya, saya tidak benar-benar ada di luar itu. Jadi pada dasarnya komputer mengatakan, saya tidak tahu apa yang Anda bicarakan. Yang aku tahu adalah bahwa saya di sini, tapi sekarang tidak lagi. Jadi jika saya harus membuat untuk loop di dalam, kan? Dan aku akan membuat yang lain, seperti int j, dan memilikinya melakukan apa pun. Dan Anda memiliki kode dalam loop yang, j hanya ada di sini. Tapi itu juga ada dalam i. Dan j hanya ada dalam hal ini untuk loop, sedangkan saya ada di seluruh hal. Semua orang yang jelas? Hal yang sama dengan pernyataan bersyarat jika Anda ingin menciptakan sesuatu. Hal yang sama dengan loop sementara jika Anda ingin menciptakan sesuatu. Itu sesuatu yang harus sangat, sangat berhati-hati. Jadi ini adalah masalah yang benar-benar baik di merasakan bahwa itu menunjukkan dua hal. Ini menunjukkan pertama, lingkup. Dan itu menunjukkan juga alokasi memori. Karena kalian harus tahu bahwa fungsi tumbuh ke atas di tumpukan. Dan bahwa ketika Anda menelepon fungsi, Anda sedang menciptakan dasarnya tumpukan baru memori. Yang sangat berbeda dari apa memori utama Anda adalah. Ya. Wah! Semua orang OK itu? Itu membingungkan. Topik yang sangat baik untuk pergi lebih, karena Anda mungkin akan mendapatkan beberapa rumit hal-hal seperti itu pada kuis. Ya. Keren. Aku akan menempatkan Anda mendapatkan 100 pada satu line dan kemudian 10 di sisi lain. Ya, sangat baik. OK, sekarang kalian akan mendapatkan kesempatan untuk menjadi TA. Anda bisa menjawab semua indah email yang kadang-kadang saya mendapatkan. Jadi, Dear Andi, saya melihat saya pikir ada sesuatu yang beres dengan compiler saya. Saya yakin bahwa kode saya benar, tapi saya terus mendapatkan kesalahan segmentasi setiap kali saya menjalankan. Apa yang sedang terjadi? Tolong bantu, banyak cinta. Jika kalian punya sesuatu seperti bahwa bagaimana Anda akan merespon? Ini sebenarnya sangat umum pertanyaan kami akan meminta Anda. Apakah jika, kami akan memberi Anda skenario, kami akan memberi kita tebakan terbaik Anda pada apa yang terjadi. Ada yang punya menusuk apa yang terjadi? Ya? AUDIENCE: Mungkin dereferenced yang null, sesuatu seperti pointer menunjuk pada sesuatu null. PROFESSOR: Ya, itu akan menjadi contoh ketika itu akan terjadi. Tapi apa gambar yang lebih besar apa yang terjadi di sini? AUDIENCE: Apakah Anda mencoba untuk mengakses memori yang Anda tidak seharusnya memiliki akses ke? PROFESSOR: Tepat. Jadi pikirkan kesalahan seg, off batas, area terbatas di memori bahwa Anda tidak harus menyentuh. Jadi cukup banyak ketika Anda mencoba untuk index-- seperti misalnya, Anda telah mengumumkan Array dari nol sampai sembilan. Tetapi Anda mencoba untuk menyentuh 10 yang nilai, Anda tidak memiliki akses ke. Karena Anda belum menyatakan. Dan sehingga komputer Anda akan untuk melihat bahwa menjadi seperti, uh oh, Anda mencoba untuk pergi luar batas indeks. Aku akan memberikan Anda kesalahan segmentasi. Pikirkan sebagai segmen, kan? Segmen ekstra, kesalahan adalah ketika Anda mencoba untuk melanggar sesuatu dan Anda tidak harus ada. Segmentation fault adalah kapan Anda mencoba untuk menyentuh hal-hal bahwa Anda tidak harus menyentuh. Contoh begitu umum adalah indeks. Tentu saja, jika Anda mencoba menyentuh itu nol, yang juga akan bekerja dengan baik. Jika pointer Anda mencoba untuk menyentuh hal-hal yang seharusnya tidak menyentuh, yang juga bisa bekerja dengan baik. Kebanyakan biasanya Anda akan melihat hal ini dalam sebuah array. Semua orang baik? AUDIENCE: Jadi jika Anda ingin untuk mengakses titik 10 dan hanya ada batas sembilan atau sesuatu. PROFESSOR: Ya, persis. Cukup banyak. Keren. Sayang Andi. Jadi kita punya ini indah hal yang disebut macam. Jika Gabung sort-- seperti yang kita saw dalam contoh ketika David melakukan seluruh Hal di class-- mengapa, jika itu jauh lebih cepat daripada salah satu jenis lain, mengapa kita repot-repot mengetahui salah satu jenis lain? Apa pertanyaan ini benar-benar meminta Anda? Apa tiga word-- AUDIENCE: Apa trade-off? PROFESSOR: Tepat. Itulah pertanyaan apa yang bertanya. Apa trade-off antara Menggabungkan semacam ayat setiap jenis lain? AUDIENCE: Membawa memori, kan? PROFESSOR: Apakah Anda menjelaskan bahwa sedikit lebih? Pertama mari kita menjelaskan toko Gabung. Bagaimana Merge sort bekerja? AUDIENCE: Jadi bekerja dengan membagi segala sesuatu menjadi setengah dan kemudian menempatkan bersama-sama dan realokasi itu dalam rangka, seperti setiap kali Anda menggabungkan set. PROFESSOR: Cukup banyak. Jadi aku bisa menggambar hal ini, tapi itu akan membawa saya lima menit untuk menarik keluar. Lihat kembali ke slide bagian di mana kita tertutup Gabung semacam. Persis. Jadi cara Gabung semacam karya itu membagi hal-hal di setengah, dan kemudian itu hanya terlihat di nilai pertama dari semua itu dan hanya yang macam. Terus menciptakan array baru dan menempatkan hal-hal yang lebih dan lebih dalam rangka. Dan sementara itu benar-benar, benar-benar cepat karena it's-- Anda tahu, pencarian biner adalah n log n. Anda sedang menciptakan begitu banyak array yang berbeda bahwa Anda menggunakan sejumlah besar memori. Dan sementara itu lebih cepat, trade off di sini adalah bahwa Anda menggunakan lebih banyak memori. Dan sebagainya, petunjuk, macam dan pencarian ditutupi lebih banyak tahun ini dari mereka telah di tahun-tahun sebelumnya. Kalian harus melihat bahwa tercermin sesuai pada kuis. Saya pasti akan menghabiskan waktu akan atas apa semua jenis yang berbeda adalah, bagaimana pencarian biner, bagaimana linear kerja pencarian. Bagaimana mungkin pseudocode kode yang keluar. Apa kali berjalan? Sesuatu seperti kali berjalan sangat mudah untuk menyalin ke lembar catatan, kanan? Ini sangat sulit ketika Anda di tengah-tengah ujian dan Anda harus mencari tahu. Mencatatnya. Saya jamin Anda Anda akan perlu tahu itu. Apa trade-off? Kasus terburuk, skenario kasus terbaik untuk mereka semua, sangat mengenal. Ya? AUDIENCE: Apakah kita perlu tahu bagaimana kode Gabung semacam? Seperti, kita perlu ingat rekursif itu? PROFESSOR: Saya sangat meragukan itu, hanya karena itu seperti yang cukup rumit. Tapi itu mungkin tidak tidak layak jika kita meminta Anda untuk menggunakan pseudocode itu. Ya. Yap, OK, satu lagi. Ini mungkin telah datang di Anda bagian terakhir dalam sedikit. Ya? Apakah semua orang dengar itu? OK, jadi cukup banyak pertama semua, apa jenis program akan memberikan Anda sebuah output seperti ini? Ingat kami meminta Anda untuk belajar tentang jenis baru dari alat debugging? Apa nama itu? Valgrind, tepat Itu adalah program di mana Anda bisa menelepon yang bisa melacak semua memori Anda menggunakan program dan yang sedang terjadi. Jadi jika Anda punya sesuatu, seperti, pasti hilang, 40 byte dalam satu blok. Mungkin Anda tidak mengingat untuk membebaskan itu. Karena jika Anda menggunakan byte memori, itu berarti Anda sudah diakses bahwa memori, tetapi Anda belum bisa membebaskan. Jadi, Anda ingin membuat Pastikan bahwa Anda juga menggunakan free-- itu adalah function-- untuk membebaskan semua dari memori dialokasikan oleh malloc. Keren. Jadi slide ini, saya akan memiliki itu. Ini di mana-mana di banyak kuliah, di banyak bagian slide. Anda benar-benar ingin memastikan Anda hanya tahu semua ini. Baik dalam lembar catatan Anda atau jika Anda ingin menghafal itu, merasa bebas untuk. Itu benar-benar, benar-benar, benar-benar penting. Juga sangat baik pertanyaan yang kita mungkin bertanya. Mengapa Seleksi sort-- melihat Seleksi sort-- semua runtimes yang n kuadrat. Terlepas dari bagaimana daftar datang ke Anda sebagai, jadi mengapa Seleksi sort-- Saya akan memberikan kalian 30 kedua berpikir tentang hal ini. Karena itu agak membingungkan. Ini melibatkan beberapa pemikiran konseptual. Mengapa kali run akan sama di kedua skenario kasus terburuk dan terbaik? Ya? AUDIENCE: Karena Seleksi semacam setiap posisi atau ruang dalam array kecil ini Hal atau apa pun. Jadi, bahkan dalam skenario kasus terbaik, bahkan jika itu sempurna diurutkan, masih harus menjadi seperti, OK, satu. Di tempat pertama saya, saya memiliki satu. Dan pergi melalui semua dari mereka. OK, satu adalah yang terkecil. Dan kemudian ia pergi lagi dan seperti, OK, dua adalah yang terkecil dari semua hal. Tapi itu masih harus memeriksa setiap satu. PROFESSOR: Ya. Jadi misalnya, katakan saja kami telah daftar, sudah diurutkan, array 1-5. Cara Seleksi macam adalah bahwa ia pergi melalui, cek kedua. Kemudian memeriksa dua. Dan kemudian memeriksa, dan memeriksa. Itu terus memeriksa semua dari mereka, terlepas dari apakah atau tidak itu benar-benar diurutkan. Karena itu hanya cara semacam bekerja. Dan pertanyaan ini adalah jenis seperti pertanyaan konseptual kami akan meminta. Di mana pertama, Anda tahu seperti apa Seleksi adalah, tepat, untuk dapat untuk menjawab pertanyaan itu. Anda harus dapat memahami konseptual apa yang terjadi. Dan kemudian Anda dapat menerapkannya dan berpikir, OK mari kita bayangkan skenario terburuk. Mereka semua dalam urutan. Bagaimana yang akan mempengaruhi itu? Bagaimana jika itu urutan menaik? Jika itu sudah diurutkan? Bagaimana yang akan mempengaruhi runtimes? Dan kemudian Seleksi semacam, Anda akan melihat bahwa itu tidak benar-benar peduli. Karena Anda sedang memeriksa semua nilai terlepas dari apa yang terjadi. Dan hal yang baik untuk diingat. Mengapa beberapa macam berbeda dari orang lain dan bagaimana cara terbaik dan skenario kasus terburuk akan mempengaruhi semua dari mereka. Aku akan benar-benar memukul di macam karena yang akan di kuis. Ya. OKE. Ada enam menit tersisa. Saya dapat mengambil tiga menit dari pertanyaan. Saya juga bisa menggantung sekitar untuk seperti 20 menit setelah bagian jika Anda ingin mengajukan pertanyaan juga. Apakah ada yang hanya benar-benar singkat pertanyaan atau masalah konseptual mereka jelas tentang sekarang? Ya? AUDIENCE: Dapatkah Anda berbicara sedikit sedikit tentang operator bitwise? PROFESSOR: Ya. Operator sehingga bitwise adalah sesuatu yang Anda mungkin mungkin hanya ingin menempatkan pada lembar Anda. Jadi quickly-- Saya tidak ingin untuk pergi terlalu banyak secara mendalam karena Harvard, dalam tinjauan mereka sesi, ditutupi dengan cukup baik. Operator bitwise, ada lima dari mereka, kan? Ada ini, yang x atau fungsi, ada ampersand, yang merupakan dan. Pipa, yang merupakan atau. Dan kemudian Anda memiliki dua berbagai jenis pergeseran. Jika saya memberikan dua nilai, jika Saya memberikan, seperti, satu dan satu. Apa yang akan mengevaluasi? Jika saya memberi Anda benar dan benar, yang benar? Bagaimana benar atau salah? Masih benar, kan? Karena ada satu atau. Kami kemungkinan besar akan memberikan nomor. Jadi ingat, satu sama dengan benar, nol sama palsu. Dan kami mungkin memberikan hal-hal ini dan meminta Anda untuk memberitahu kami apa yang terjadi. Harvard mencakup itu dalam pertama 10 menit dari sesi studi mereka benar-benar, benar-benar baik. Jadi kalian ingin membuat Pastikan Anda melihat kembali itu. AUDIENCE: Apakah pisa5 akan berada di kuis? PROFESSOR: No. Bahkan tidak melihat pisa5 sekarang. Sulit. Hanya bahkan tidak repot-repot mencari di pisa5. Namun, karena beberapa petunjuk dan saran, saya akan menyarankan Anda mulai pisa5 segera setelah kuis berakhir. Ini akan menjadi yang paling sulit Minggu, tapi kemudian kalian akan diteruskan pada bukit-bukit bergulir hijau dan anak anjing, dan itu baik-baik saja. Kelas ini akan signifikan lebih mudah setelah pset kelima. Jam kerja: AUDIENCE adalah hari Minggu, Senin? PROFESSOR: Ya, jadi jam kantor akan Minggu ke Senin untuk pset tersebut. Jam kantor malam ini pada dasarnya hanya akan menjadi ulasan untuk kuis. Jika ada yang ingin datang dan meminta yang TA pertanyaan, kami akan berada di sana. Aku akan mengambil mungkin satu pertanyaan lagi kalau ada yang memiliki pertanyaan? Ya? AUDIENCE: Saat Anda mendefinisikan node, [tidak terdengar] jika Anda mengatakan bintang node dan kemudian berikutnya, melakukan komputer secara otomatis memahami bahwa Anda mengacu pada pointer lain? PROFESSOR: No. AUDIENCE: Anda harus relink itu [tidak terdengar]? PROFESSOR: Jadi pada dasarnya struct dari sebuah node, ingat, itu seperti Anda membuat node dan maka Anda memiliki pointer disebut berikutnya. Semua yang Anda lakukan adalah memiliki struktur ada. Anda harus menetapkan bahwa pointer di suatu tempat. Jadi komputer tidak tahu apa yang dilakukannya belum. Anda harus benar-benar menetapkan saat Anda membuat daftar Anda terkait. Dan itulah yang terutama pset 5 akan di. Sehingga tidak ada kekhawatiran tentang salah sekarang yang benar. AUDIENCE: Jadi kita tidak perlu terlalu fokus pada daftar link hanya konsepsi umum? PROFESSOR: Hanya cukup banyak tumpukan, antrian, daftar link, pohon, tabel hash. Hanya dapat mengetahui apa yang mereka. Kami tidak akan meminta Anda suka sesuatu yang spesifik karena kita belum benar-benar melakukan pset yang mencakup semua itu belum. Jadi dalam dua menit terakhir sebelum Saya membuat Anda bebas untuk membunuh kuis ini. Cukup banyak, seperti, berpikir tentang bagaimana jauh kalian datang di kelas ini. Saya ingat ketika seminggu dua kelas ini, sebagian dari Anda menghabiskan tiga jam menulis air. Berapa lama waktu yang membawa Anda orang untuk menulis air sekarang? 30 detik, mungkin? Pikirkan tentang berapa banyak kalian telah belajar. CS adalah subjek benar-benar, benar-benar keras. Tidak ada keraguan itu. Sulit, itu sebabnya tidak ada studi itu. Hanya saja sulit. Dan itu benar-benar baik-baik saja. Dan aku benar-benar bangga bahwa semua orang telah sampai sejauh ini. Psets tidak mudah. Mereka mengambil banyak waktu. Kalian, aku tidak akan pernah meminta Anda untuk menulis permainan 15 atau Vigenere pada pset tersebut. Tidak perlu panik hanya tentang itu. Semua kami pengujian di sini adalah untuk mengevaluasi pengetahuan konseptual Anda, serta karena beberapa keterampilan dasar coding. Tes ini dirancang untuk benar-benar menantang. Seperti, ia dirancang bagi Anda untuk tidak mendapatkan 100. Ini juga dirancang bagi Anda untuk mungkin tidak dapat menyelesaikan dalam 75 menit. Dan itu benar-benar baik-baik saja. Saya seorang mahasiswa sendiri. Aku tahu, aku benci kalau aku berjalan dari kuis seperti, kotoran. Itu benar-benar sulit. Mungkin apa yang akan happen-- dan itu benar-benar baik-baik saja, Aku bilang kalian sekarang. Cara hal-hal ini tidak tinggi sekali. Dan bagi Anda yang telah mendapatkan, seperti, bertiga pada set masalah Anda, itu tidak berarti Anda akan mendapatkan 60 persen di kelas ini. Jika Anda mendapatkan 60% pada kuis, yang tidak berarti Anda akan mendapatkan D di kelas ini. Kita melihat, terutama saya, untuk Bagi Anda di bagian saya, Saya melihat seberapa keras kalian semua bekerja. Dan saya melacak itu. Kalian akan baik-baik saja. Tidak ada memori kelembagaan kebahagiaan di akhir semester. Karena semua anak-anak Harvard memberitahu teman-teman mereka, oh, Anda akan baik-baik. Tidak ada yang memberitahu kalian bahwa di sini. Jadi saya harus memberitahu kalian bahwa di sini. Kalian akan baik-baik saja. Saya sangat bangga dengan semua dari kalian. Tes akan sulit. Belajar untuk itu, dan setelah itu hanya membuangnya. Dapatkan siap untuk belajar hal-hal baru. Dan makan permen. Kami sudah memiliki banyak permen. Tidur malam yang baik. Jangan tidak tidur, karena yang akan benar-benar buruk. CS banyak logika. Jika Anda tidak tidur, Anda tidak bisa berfungsi, dan otak Anda tidak bisa berfungsi. Dan saya akan berada di sini untuk selanjutnya 20 menit jika ada yang ingin untuk menggantung di sekitar. Kalian akan membunuhnya. Semoga berhasil.