JASON Hirschhorn: Selamat Datang untuk tiga minggu, semua orang. Kami mempunyai sibuk tetapi menarik seksyen hadapan kita. Jadi pertama, kerana kita telah membuat beberapa Headway dengan kursus tetapi kita masih telah banyak pembelajaran yang perlu dilakukan, saya akan menunjukkan kepada anda semua beberapa sumber yang harus membuktikan untuk menjadi sangat membantu kerana anda bukan sahaja mendekati anda masalah menetapkan, tetapi juga mencerna semua bahan yang kita berikan anda lelaki dalam kuliah dan seluar pendek dan bahagian. Kemudian kita akan menghabiskan 20 pertama hingga 25 minit seksyen akan lebih GDB, yang anda mungkin atau mungkin tidak mempunyai digunakan pada ketika ini, tetapi ia adalah satu alat yang amat berguna yang akan membantu anda debug program anda. Banyak daripada anda mungkin telah menggunakan printf dalam tengah-tengah program anda untuk memikirkan apa pembolehubah equaled. GDB adalah lebih baik daripada printf dan tidak skru sehingga kod anda kerana anda berjalan pada fail boleh laku. Oleh itu, kita akan pergi ke 10 yang paling berguna menyuruh kamu perlukan untuk GDB, dan kami akan pergi latihan bersama-sama supaya dalam masalah menetapkan tiga dan seterusnya, anda boleh menggunakan GDB untuk membantu debug program anda. Dan akhirnya, kita akan pergi ke beberapa pemilihan dan pencarian algoritma yang anda lihat dalam kuliah, dan kami akan sebenarnya kod, bukan sahaja kod pseudo, tetapi kod carian binari, isih gelembung, dan jenis pemilihan. Oleh itu, saya mahu pergi lebih sumber. Ini adalah senarai yang banyak, dan ia font yang lebih kecil kerana saya mempunyai banyak untuk patut atas di sini. Tetapi ini bukan sahaja akan membantu anda, sekali lagi, dengan set masalah dan maklumat mencerna yang anda pelajari, tetapi pasti, datang masa kuiz, ini akan menjadi sangat membantu. Jadi pertama, kuliah nota. Jika anda pergi ke cs50.net/lectures dan tatal ke minggu tertentu dan hari, anda akan melihat bahawa terdapat nota bagi setiap syarahan, yang bukan semata-mata transkrip, tetapi versi disunting apa yang dibincangkan dalam kuliah dengan kod coretan dan tidbits lain membantu. Saya sangat mengesyorkan akan ke atas. Dan kemudian juga, ada kod sumber boleh didapati daripada setiap kuliah. Dan sekali lagi, slaid ini juga akan boleh didapati dalam talian di cs50.net/sections petang ini. Jadi kedua adalah seluar pendek setiap minggu itu topik perlindungan, biasanya 5 hingga 15 minit panjang. Dan orang-orang diharapkan akan memberikan anda buku asas besar mengenai topik-topik yang berbeza. Ketiga - dan ini adalah jenama baru ini tahun - adalah study.cs50.net. Jika anda belum diperiksa ia keluar, saya dinasihatkan supaya berbuat demikian. Anda dapat memilih topik. Kami mempunyai puluhan topik di sana. Sebagai contoh, anda memilih Fungsi. Ia memberikan anda beberapa slaid dan nota dengan fungsinya. Mereka sebenarnya slaid yang TFS digalakkan menggunakan selama kami persembahan di bahagian. Terdapat juga tips dan cara untuk berurusan dengan fungsi, dan ada masalah amalan yang membantu anda bekerja dengan fungsi. Kami juga memberi anda pautan ke pendek pada fungsi dan masa yang berfungsi telah datang dalam kuliah. Jadi study.cs50.net, jenama baru ini tahun, sumber hebat. Seterusnya, saya mempunyai seorang lelaki, yang merupakan pengguna arahan yang anda boleh menjalankan di baris arahan. Jadi, jika anda mempunyai sebarang soalan mengenai arahan, sebagai contoh, rand, yang kita dihadapi minggu lepas dalam seksyen dan anda telah mungkin dihadapi dalam masalah anda ditetapkan apabila melalui menjana kod, tetapi jika anda menaip lelaki rand, anda akan mendapat halaman yang memberitahu anda semua tentang rand. Ia memberikan apa yang diperlukan, yang parameter yang diperlukan, serta kembali jenis dan penerangan ringkas fungsi itu. Jadi lihat rand. Ia boleh menjadi sedikit panjang lebar dan mengelirukan, jadi kadang-kadang saya mendapati bahawa hanya Googling apa yang saya ingin tahu adalah cara terbaik untuk mencari jawapannya. Jadi berlatih dengan Google. Dapatkan baik di Google. Ia akan menjadi kawan terbaik anda. Selain Google, jika anda tidak dapat mencari ia di Google, cs50.net/discuss, ia forum perbincangan. Kemungkinan jika anda mempunyai satu soalan, satu 700 + rakan-rakan anda juga mempunyai yang soalan dan boleh meminta ia sudah dalam membincangkan forum dan telah ia menjawab. Jadi jika anda mempunyai soalan yang sama atau anda mempunyai soalan yang anda fikir mungkin orang lain mungkin telah menghadapi, menyemak cs50.net/discuss. Akhirnya, kedua-dua terakhir, jika anda mahu bercakap dengan seorang, pejabat sebenar manusia jam Isnin hingga Jumaat. Terdapat juga waktu pejabat dalam talian untuk pelajar lanjutan. Dan terakhir tetapi tidak kurang pentingnya, saya, tanda seru. Anda semua mempunyai maklumat hubungan saya. Jika anda memerlukan apa-apa, sila tidak pernah teragak-agak untuk menghubungi saya. Sentiasa berasa bebas untuk berbuat demikian. Sangat sedikit daripada anda telah menambah saya pada GChat, jadi yang telah mengecewakan, tetapi diharapkan yang akan berubah di antara ini dan seksyen seterusnya. Apa-apa soalan setakat ini pada sumber? Besar. Akhir sekali, satu lagi plug untuk maklum balas, sayat.me/cs50. Anda boleh memberi maklum balas tanpa nama bagaimana saya lakukan. Itu adalah benar-benar membantu minggu lepas. Saya mendapat beberapa komen dari anda semua betul selepas seksyen, ditambah dari pelajar-pelajar lain yang menonton ia dalam minggu ini, dan ia adalah sangat membantu. Saya akan cuba menghadkan penggunaan saya perkataan "manis," tetapi saya akan menunjukkan kepada saya semangat dan keseronokan dengan cara lain. Tetapi terdapat tambahan lain maklum balas substantif, kedua-dua plus dan delta. Oleh itu, sila, saya memberikan anda semua maklum balas pada set masalah anda. Jangan ragu untuk memberi maklum balas kepada pengajaran saya. Saya di sini untuk anda semua. Besar. Itu sahaja yang saya ada untuk bahagian pertama. Adakah sesiapa mempunyai apa-apa soalan setakat ini? Dan saya mempunyai nota untuk pusat kawalan. Pelajar Tambahan telah messaged saya mengatakan mereka tidak mendapat apa-apa audio, tetapi yang di luar kuasa saya untuk menetapkan. Jadi mudah-mudahan, yang mendapat diselesaikan tidak lama lagi. Jika anda menonton talian, hi, tetapi anda tidak boleh mendengar saya. Oleh itu, kita akan melalui GDB. GDB, kerana saya membayangkan sebelum ini, adalah alat debugging jauh lebih baik daripada printf. Jadi untuk bermula dengan GDB, kamu semua, jika anda mahu untuk membuka perkakas anda dan mengambil fail yang saya melalui e-mel kepada anda sebelum ini - fail ini juga akan boleh didapati dalam talian dalam sedikit - dan menjalankan GDB. / nama fail. Pertama, sudah tentu, anda perlu menyusun memfailkan kerana GDB hanya berfungsi pada fail boleh laku. Tetapi jika anda mahu untuk memulakan GDB, perkara pertama yang anda lakukan, anda menjalankan GDB. / Caesar. Jadi, itu nama program yang kami akan pergi bersamanya sekarang. Jadi, saya akan menulis membuat Caesar, yang akan memberikan saya fail boleh laku di sini yang ditekankan dalam hijau. Dan kemudian saya akan berjalan GDB. / Cesar. Dan ada anda pergi. Anda melihat kita mempunyai beberapa teks memberitahu saya tentang versi GDB, memberikan saya beberapa maklumat jaminan, dan kemudian kita mempunyai segera KDNK, yang kelihatan semacam daripada seperti garis prompt kita, tetapi anda melihat ia terbuka paren, GDB, paren dekat. Sebelum kita terus dan debug fail ini yang saya dihantar kepada anda semua, mari kita lihat beberapa arahan berguna jadi kami mempunyai rasa yang daripada apa yang kita akan meliputi. Arahan ini disenaraikan di sini di Susunan yang saya biasanya menggunakannya. Jadi saya memulakan program saya dengan menjalankan GBD. / Nama program ini, dalam kes ini, Caesar. Dan maka perkara pertama yang saya lakukan 99.9% masa itu jenis rehat bermakna. Yang menetapkan titik rehat di utama. Pada asasnya, apa yang anda lakukan di sana adalah program itu akan berhenti di utama supaya anda boleh mula memeriksanya talian demi baris, bukannya berjalan semua jalan melalui. Anda boleh memecahkan pada mata yang berbeza di kod anda, tetapi utama adalah umumnya tempat yang baik untuk bermula. Arahan seterusnya saya berjalan adalah jangka. Yang bermula program berjalan, dan jika anda perlu memasukkan baris arahan hujah, anda menjalankannya arahan itu. Berlari dengan hujah-hujah. Jadi kerana kita akan lebih versi yang C, yang merupakan program anda semua menulis untuk Serangga dua - satu ini, sudah tentu, mempunyai beberapa bug di dalamnya yang mudah-mudahan kita akan mencari - kita akan menjalankan jangka dengan beberapa program argumen baris kerana Caesar, sebagai anda semua tahu setiap masalah set spec, mengambil beberapa hujah baris arahan. Pasangan akan datang arahan, seterusnya seseorang itu sebenarnya dipanggil akan datang. Yang mengambil talian anda dengan talian melalui program anda. Jadi memukul n kemudian Masukkan membawa anda ke baris seterusnya, melaksanakan garis sebelumnya. Langkah bukan sahaja akan membawa anda ke baris seterusnya, tetapi ia membawa anda fungsi di dalam. Jadi jika anda telah menulis satu majlis di kod anda atau jika anda mahu untuk meneroka untuk i, sebagai contoh, anda boleh memukul s, dan bukannya pergi ke baris seterusnya fail yang anda akan melalui hak sekarang, anda benar-benar akan melangkah ke fungsi ini dan lihat kodnya. Senarai menunjukkan anda, dalam sangat mesra pengguna format, 10 atau lebih garisan sekitar di mana anda kini berada dalam kod anda jadi anda sebenarnya boleh melihat fail bukannya untuk menukar kembali dan alik antara pandangan yang berbeza. Cetak adalah seperti printf, seperti namanya. Yang menunjukkan anda apa jenis pemboleh ubah sama. Penduduk tempatan maklumat adalah benar-benar membantu. Ini adalah versi khas cetak. Penduduk tempatan Info menunjukkan anda semua tempatan pembolehubah, mencetak mereka semua keluar untuk anda yang pada masa ini. Jadi saya secara amnya, bukannya untuk mencetak empat pembolehubah bahawa saya tertanya-tanya tentang jika saya berada di dalam gelung, untuk Sebagai contoh, saya hanya menulis maklumat penduduk tempatan, dan ia akan menunjukkan kepada saya apa yang saya i kaunter sama, dan juga pelbagai bahawa saya bekerja di setaraf. Akhir sekali, terus. Menaip rehat berhenti anda pada ketika rehat. Anda boleh berjalan melalui talian oleh Selaras dengan depan dan langkah. Teruskan berjalan program untuk seterusnya memecahkan titik atau sehingga selesai jika tiada lagi mata pecah. Matikan membuang mata pecah jika anda memutuskan rehat di utama adalah tidak sesuai, anda mahu ditetapkan di tempat lain. Dan akhirnya q, berhenti, keluar dari GDB. Jadi program ini,. / Caesar, kita akan untuk melihat melalui sekarang dan kami akan menggunakan GDB untuk mencari pepijat dalam program ini. Saya berlari program ini lebih awal dengan Semak 50, dan saya mendapat satu berkerut. Semua ia wujud, ia disusun, ia lulus banyak ujian, tetapi untuk sebab-sebab tertentu, ia tidak lulus kelima ujian, menukarkan BARFOO, semua topi, ke dalam E-D-U-I-R-R, semua topi, menggunakan tiga sebagai kunci. Saya mendapat cukup dekat. Saya mendapat kira oleh satu huruf. Jadi ada beberapa kesilapan kecil di sini. Saya telah melihat melalui kod saya. Saya tidak dapat mencari penyelesaiannya. Mudah-mudahan, anda semua boleh membantu saya memikirkan apa pepijat ini. Jadi, itu kesilapan kita mencari. Mari kita bergerak ke dalam GDB. Sekali lagi, saya telah menjalankan GDB. / Caesar, jadi sekarang kita berada dalam GDB. Dan apa yang pertama perkara yang perlu saya lakukan? Saya baru sahaja memasuki GDB. Seseorang memberikan saya yang baik arahan untuk masuk. PELAJAR: Cuti utama. JASON Hirschhorn: Cuti utama. Hebat. Mari kita menaip yang masuk Anda semua boleh menonton di sini atau mengikuti bersama-sama pada komputer anda. Cuti utama, dan anda akan melihat titik pulang telah ditetapkan pada - ia memberi saya beberapa alamat ingatan pelik, dan ia juga memberikan saya nombor baris. Jika saya melihat kembali fail ini, Saya akan menyedari utama yang berlaku pada line 21. Apakah yang perlu saya berjalan akan datang? Adakah program saya berjalan? No Jadi apa yang perlu saya jalankan akan datang? PELAJAR: Run. JASON Hirschhorn: Run. Sekiranya saya hanya menjalankan jangka, atau jika Saya menambah beberapa perkara lain dalam? PELAJAR: Main dengan hujah. JASON Hirschhorn: Main dengan hujah-hujah arahan. Dan kerana saya debugging yang tertentu kes, saya boleh masuk yang hujah baris arahan. Jadi saya akan larikan tiga, yang, sekali lagi, output yang saya dapat dari Daftar 50. Program bermula. Kita melalui beberapa baris. Anda sekarang akan melihat bahawa kita berada di garis 21. Bagaimana saya tahu bahawa kita berada di line 21? Kerana jika anda melihat ke kiri tetingkap terminal saya, ia berkata line 21. Dan yang memberikan saya, sebenarnya, kod yang di garisan 21. Jadi saya misspoke lebih awal. Utama sebenarnya bukanlah di garisan 21. Utama adalah beberapa baris di atas 21. Tetapi pada line 21, itu mana kita pecah. Ini sejajar kod mempunyai belum dilaksanakan. Yang penting. Garis yang anda lihat tidak mempunyai dilaksanakan yet. Itulah baris berikutnya kod anda kira-kira untuk melaksanakan. Jadi garis depan, kerana anda semua mungkin biasa dengan, adakah ini keadaan memeriksa untuk melihat jika saya mempunyai memasuki satu hujah baris arahan. Dan untuk i, apa yang kedua sebahagian daripada yang lakukan? Apakah untuk i? PELAJAR: Menukar kepada integer. JASON Hirschhorn: Maaf? PELAJAR: Ia mengubah hujah untuk integer. JASON Hirschhorn: Jadi untuk i perubahan Arg v1 daripada rentetan untuk integer. Dan kemudian apa yang ia memeriksa? PELAJAR: Jika terdapat satu saat hujah baris arahan, selain daripada menjalankan program ini. JASON Hirschhorn: Dan apa yang separuh kedua ini Ungkapan Boolean memeriksa? Bahagian di sini, untuk i? PELAJAR: Jika ia negatif. JASON Hirschhorn: Pastikan apa? PELAJAR: Memastikan ia adalah, sebenarnya, positif. JASON Hirschhorn: Tepat sekali. Ini memeriksa untuk melihat jika ia negatif, dan jika ia adalah negatif, saya mempunyai rasa line kekuatan seterusnya akan saya menjerit pada pengguna. Jadi mari kita melanda akhir untuk melaksanakan baris ini. Kami tidak melihat baris yang menyatakan bahawa kalian mungkin dijangka menyaksikan menjerit di pengguna dan kemudian kembali, kerana baris ini tidak melaksanakan. Saya memasuki 3. Jadi saya, sebenarnya, masukkan dua arahan argumen baris, dan 3 adalah lebih besar daripada sifar. Oleh itu, kita melihat garis itu, kami dilaksanakan, tetapi kita tidak melangkah di dalam jika keadaan. Jadi sekarang, akan datang, saya melihat saya menetapkan utama int sama untuk i ARG v1. Jadi itulah saya mewujudkan utama berubah-ubah. Jadi jika saya mencetak utama sekarang, kerana yang membolehkan anda untuk melihat nilai dalam pembolehubah, utama sama 47. Itu yang pelik, tetapi sudah tentu, itu kerana saya tidak mempunyai dilaksanakan selaras yang belum. Jadi sekarang jika saya memukul n, melaksanakan garis itu, dan melakukan utama cetak, kunci akan sama dengan 3, iaitu apa yang kita mengharapkan ia sama. Jadi sekali lagi, dalam GDB, garis anda melihat anda belum dilaksanakan lagi. Anda perlu memukul n atau s atau nombor arahan lain untuk benar-benar melaksanakan garis itu. Utama cetak. Utama di 3. Setakat ini, begitu baik. String adalah teks biasa. Mari kita melaksanakan garis itu. Saya mendapat rentetan dari pengguna. Mari kita lihat dalam Semak saya 50, saya memasukkan BARFOO semua topi, jadi itulah yang saya akan masuk. Jika saya kini mencetak teks biasa. Anda akan melihat ia sama rentetan. Ia memberikan saya beberapa perenambelasan pelik lain nombor, tetapi ia dalam fakta mengatakan bahawa string saya adalah BARFOO. Jika saya mahu melihat apa yang utama di equaled ketika ini, bagaimana saya boleh menyemak utama? PELAJAR: utama Cetak. JASON Hirschhorn: kunci Cetak, betul-betul. Dan sebenarnya, ada jalan pintas. Jika anda bosan dengan menaip cetak, anda hanya boleh menaip p. Jadi p utama melakukan perkara yang tepat sama. Dan sekali lagi, saya melihat ia sama 3. Jika saya mahu mengetahui apa yang kedua-dua utama dan BARFOO equaled pada masa yang sama tetapi saya bosan menaip setiap satu daripada individu, saya boleh taip maklumat penduduk tempatan. Yang memberikan saya setaraf utama 3. Teks kosong sama BARFOO. Ia juga memberi saya dua perkara ini pelik di bahagian atas, pembolehubah ini saya dan ini n berubah-ubah. Mereka sebenarnya yang sedia ada dalam program utama saya. Kami tidak temui mereka lagi, tetapi sebagai pratonton, orang-orang wujud dalam saya untuk gelung. Jadi sekarang, mereka menyamai beberapa pelik nombor kerana mereka tidak dimulakan lagi, tetapi mereka masih wujud dalam ingatan, jadi mereka hanya ditetapkan untuk beberapa nilai sampah. Tetapi kita lihat utama di dataran teks di sana. Jadi saya akan melaksanakan garis ini, line 34, untuk gelung. Kita akan melompat ke dalam untuk gelung dengan memukul n. Dan kita di dalam gelung. Kami semasa mendaftar pertama kami. Dan sekali lagi, ini jenis harus melihat biasa kepada anda kerana ini adalah Program Caesar yang ditulis, tetapi sekali lagi, mempunyai beberapa jenis pepijat. Dan sekarang jika saya lakukan maklumat penduduk tempatan, kerana saya dalam yang untuk gelung, anda akan melihat bahawa saya sama dengan sifar, seperti yang kita harapkan. Itulah yang kita menetapkannya untuk dan dimulakan ia dalam untuk gelung. n sama 6. Yang juga masuk akal kerana kita menetapkan kepada strlen daripada teks biasa. Jadi yang saya suka lakukan penduduk tempatan maklumat atau cetak kepada pembolehubah sering memastikan bahawa semuanya selalu apa Saya mengharapkan ia sama. Dalam kes ini, segala-galanya adalah apa yang saya mengharapkan ia sama. Jadi mari kita mulakan bergerak melalui ini untuk gelung. Garis Saya kini di adalah talian 36, jika kosong teks i adalah lebih besar daripada dan dataran teks i adalah kurang daripada atau sama dengan z. Saya tahu masalah saya bukan dengan pertama saya surat, ia dengan huruf kedua. Jika kita melihat kembali Semak 50, B pergi ke E halus. Saya mengambil A dan meninggalkannya sebagai A, tidak menukar kepada D. Jadi sesuatu yang salah dengan surat kedua. Jadi, saya akan bergerak terdapat dalam kedua. Tetapi jika saya mahu untuk memeriksa apa yang nyata teks saya equaled dalam khusus ini kes, saya fikir ia harus apa? Apakah yang perlu saya teks biasa sama dalam ini pusingan pertama melalui untuk gelung? PELAJAR: Zero? JASON Hirschhorn: Teks Plain saya? Jadi ia perlu modal B. I, sudah tentu, sama dengan sifar, tetapi teks biasa kurungan sifar kurungan tertutup sama B kerana tali, seperti yang kita lihat minggu lepas, adalah pelbagai, jadi kita mendapat watak pertama dari itu. Jadi sekali lagi, jika saya dicetak teks biasa daripada Saya, saya, sebenarnya, mendapatkan watak B. Dan itu kemas, bukan? Saya tidak benar-benar mempunyai I. teks biasa Itu bukan salah satu pembolehubah saya menetapkan atau dimulakan, tetapi anda boleh mencetak keluar pelbagai seluruh perkara jika anda ingin. Tetapi mari kita bergerak melalui. Jika teks biasa saya adalah lebih besar daripada A dan teks biasa saya adalah kurang daripada atau sama dengan Z, yang jelas adalah benar kerana kita mempunyai B. modal saya akan menjalankan beberapa arahan di atasnya. Kami melihat matematik minggu lepas, jadi kita akan mengambilnya untuk diberikan bahawa ia berfungsi betul mengikut Semak 50. Ini pendakap kerinting, yang pertama menunjukkan bahawa saya telah keluar jika syarat, yang kedua menunjukkan bahawa saya keluar untuk gelung. Dan sekarang apabila saya mencecah Seterusnya, kita akan melihat kami kembali di untuk gelung lagi. Kita akan melalui untuk gelung lagi. Mari kita sebenarnya melangkah ke kedua lelaran untuk gelung dan jenis penduduk tempatan info. Jadi kita dalam lelaran kedua gelung untuk kami. Saya sama 1, yang kita harapkan. N bersamaan 6, yang kita harapkan. Sama Penting 3, yang kita harapkan. Dan teks biasa, anda akan melihat, sama EARFOO sekarang, bukan lagi kerana BARFOO dalam lelaran kami sebelum ini, B adalah ditukar kepada modal E. Jadi kita kira-kira menghadapi masalah ini, jadi ini adalah di mana kita akan menyelam ke dalam debugging itu. Tetapi adakah sesiapa mempunyai apa-apa soalan mengenai apa yang kami lakukan setakat ini? Hebat. Oleh itu, kita kira-kira untuk melaksanakan ini jika syarat, kurungan teks biasa saya menutup kurungan lebih besar daripada A dan teks biasa saya kurang daripada atau sama dengan Z. Tetapi sebelum Saya pergi ke dalam itu, kerana ini adalah di mana Saya tahu kesilapan saya adalah, saya ingin menunjukkan keluar teks biasa daripada I. Jadi mari kita meletakkan mencetak. Ia menyamai watak A, supaya Nampaknya setakat ini, semuanya berjalan dengan lancar dan baik. Jadi saya mengharapkan baris ini setiap logik saya, talian ini harus benar. Ia adalah satu huruf. Tetapi jika saya memukul n, kami sedar bahawa ini talian, sebenarnya, tidak melaksanakan. Saya melompat ke lagi jika. Mengapa yang berlaku? PELAJAR: Kerana anda mempunyai keadaan anda daripada teks biasa adalah lebih besar daripada A, tidak sama atau lebih daripada. JASON Hirschhorn: Jadi saya terpaksa teks biasa saya I lebih besar daripada A, tidak lebih besar daripada atau sama dengan. Jadi jelas, modal A tidak mencetuskan ini jika keadaan, dan kami lakukan tidak melangkah ke dalamnya, dan kami lakukan tidak peralihan perlu. Jadi itu sahaja, sebenarnya. Saya menemukan bug saya. Saya boleh kembali dalam fail sumber saya, mengubahnya, dan mengemaskini dan menjalankan Semak 50 lagi. Tetapi kita akan melihat, hanya untuk pedagogi ini demi, jika aku berterusan. Lain jika tidak melaksanakan sama ada, tetapi apa sebaliknya sama adalah arahan yang tidak berubah. Jadi ia tidak berubah sama sekali, dan jika saya mencetak teks biasa di sini, kita akan melihat akan melalui itu untuk gelung tidak, sebenarnya, menukar watak kedua di semua. Ia masih A. modal Jadi sekali lagi, kita debugged kesilapan kita. Kami menyedari bahawa terdapat beberapa logik hilang. Dan kita debugged ia lebih awal daripada masa sebelum sebenarnya melaksanakan garis itu, tetapi anda akan melihat kita hanya mempunyai Seterusnya melanda dan melompat dengan lain jika, yang bermakna bahawa jika keadaan adalah tidak benar. Kami tidak, sebenarnya, dapatkan hasil yang kita dijangkakan. Jadi, kita mungkin telah digesa, mempunyai kita tidak begitu bijak, untuk melihat bahawa jika keadaan dan memeriksa jika, sebenarnya, keadaan kita perlu menilai untuk benar dalam konteks semasa. Sekian sahaja untuk debugging program ini. Adakah sesiapa mempunyai apa-apa soalan? Apa perintah boleh saya mencecah berhenti GDB? Q. Dan kemudian saya akan digesa, berhenti juga? Ya atau tidak. Saya akan melanda ya, dan saya akan telah berhenti GDB. Sehingga adalah buku asas cepat untuk GDB. Sebenarnya, dalam senario yang sebenar, Saya melakukan ini pada waktu pejabat. Saya GDBed program ini tepat pada waktu pejabat dengan pelajar. Dan jika kita kembali kepada perintah-perintah kami melihat sebelum ini, kami menggunakan rehat utama, pertama perkara yang kita lakukan. Kami menggunakan jangka dengan hujah-hujah baris arahan, Perkara kedua yang kita lakukan. Kami menggunakan seterusnya banyak untuk bergerak kami melalui talian. Dan sekali lagi, versi pendek daripada seterusnya adalah n. Itulah dalam kurungan warna kelabu pada slaid. Kami tidak menggunakan langkah, tetapi kita tidak semestinya perlu untuk kes ini. Tetapi kita mungkin menggunakannya dalam sedikit kemudian pada hari ini jika kita debugging, untuk Sebagai contoh, carian binari binari apabila carian yang dipanggil dalam yang berasingan fungsi tetapi ada beberapa kesilapan dengannya. Kami akan mahu untuk melangkah ke panggilan ke carian binari dan sebenarnya debug ia. Senaraikan kami tidak menggunakan sama ada kerana kita mempunyai rasa yang baik kod kami, tetapi jika saya tidak mahu mendapatkan rasa kod apa yang saya adalah sekitar, saya hanya boleh menggunakan senarai. Cetak kita digunakan, penduduk tempatan maklumat kita digunakan. Teruskan kita tidak perlu untuk digunakan dalam ini kes, baik yang kita perlu menggunakan melumpuhkan, tapi kami tidak menggunakan berhenti. Sekali lagi, ini 10 arahan, amalan mereka. Jika anda memahami ini 10 arahan, anda perlu ditetapkan untuk debugging sebarang mengeluarkan dengan GDB. Oleh itu, kita kira-kira untuk pergi, sekali lagi, kepada crux seksyen hari ini, akan lebih ini pemilihan dan pencarian algoritma. Sebelum kita berbuat demikian, sekali lagi, apa-apa soalan, komen, kebimbangan untuk GDB? Begitu juga semua orang akan menggunakan GDB bukannya printf? Jadi semua orang, demi lamanya ini, semua orang mengangguk-angguk kepala mereka betul sekarang, jadi saya akan melihat anda pada waktu pejabat dan semua TFS akan melihat anda dan mereka akan berkata, menunjukkan saya bagaimana untuk menggunakan GDB, dan anda akan dapat untuk menunjukkan kepada mereka, bukan? Jenis? Mungkin mudah-mudahan. Sejuk. Jadi, kita akan bergerak ke pemilihan dan pencarian. Anda akan melihat saya mempunyai senarai sudah disusun bagi kami, tetapi itu tidak akan untuk kes sentiasa. Jadi dalam masalah yang ditetapkan spesifikasi untuk masalah menetapkan tiga, anda mempunyai seluar pendek bahawa anda boleh menonton, dan ia sebenarnya meminta anda untuk menonton mereka seluar pendek. Juga pada kuliah minggu lepas, kami pergi ke banyak algoritma ini, jadi saya tidak akan menghabiskan masa di dalam kelas akan lebih algoritma ini lagi atau lukisan gambar untuk bagaimana algoritma bekerja. Sekali lagi, maklumat yang anda boleh menonton semula kuliah, atau maklumat yang ditangkap cemerlang pada seluar untuk carian ini, semua yang boleh didapati di cs50.net. Jadi,, apa yang kita akan lakukan adalah menulis program-program ini. Kami mempunyai satu segi, model mental, bagaimana mereka bekerja, dan sebagainya apa yang kita akan lakukan adalah kod mereka untuk sebenar. Kami akan menjadikan model mental, gambar itu, jika anda akan, ke dalam kod sebenar. Dan jika anda sedikit keliru atau berjerebu kepada model mental, saya benar-benar memahami. Kami tidak sebenarnya akan melompat ke kod merta. Oleh itu, sambil segera ini dalam slaid ini meminta anda untuk kod carian binari, dan sebenarnya, versi lelaran daripada carian binari, perkara pertama yang saya benar-benar mahu anda lakukan adalah menulis beberapa kod pseudo. Jadi, anda mempunyai model mental ini bagaimana kerja-kerja carian binari. Keluarkan sehelai kertas jika anda mempunyai kita sedia ada, atau membuka editor teks, dan saya suka semua orang untuk menulis. Mengambil masa empat minit untuk menulis kod pseudo untuk carian binari. Sekali lagi, berfikir tentang bahawa model mental. Saya akan datang di sekitar jika anda mempunyai soalan dan kita boleh menarik gambar keluar. Tetapi pertama, sebelum kita mula pengaturcaraan, Saya ingin menulis kod pseudo untuk carian binari jadi apabila kita menyelam dalam, kami mempunyai beberapa arahan yang di mana kita harus pergi. PELAJAR: Bolehkah kita mengambil alih pelbagai nilai-nilai kita sudah disusun? JASON Hirschhorn: Jadi untuk carian binari untuk bekerja - persoalan yang bagus - anda perlu mengambil dalam disusun pelbagai nilai-nilai. Jadi menganggap ia akan berfungsi. Kami akan kembali ke slaid ini. Anda akan melihat ungu fungsi pengakuan adalah bool int binary_search nilai, nilai-nilai int, int n. Ini harus kelihatan biasa jika anda telah sudah menghampiri atau mendapat anda tangan kotor dengan masalah yang ditetapkan. Tetapi itu akuan fungsi anda. Sekali lagi, tidak perlu bimbang tentang yang banyak pada masa ini. Apa yang saya benar-benar mahu anda lakukan ialah mengambil empat minit untuk binari kod pseudo mencari, dan kemudian kami akan pergi atas bahawa sebagai satu kumpulan. Dan saya akan datang di sekitar. Jika anda mempunyai soalan, berasa bebas untuk mengangkat tangan anda. Mengapa tidak anda mengambil dua minit lagi selesaikan kod pseudo yang? Saya tahu ini mungkin kelihatan tidak masuk akal yang kita menghabiskan begitu banyak masa pada sesuatu yang tidak walaupun sebenarnya dalam C, terutamanya bagi lebih algoritma mencabar dan masalah set yang kita perlu memikirkan, bermula pada kod pseudo tidak membimbangkan mengenai sintaks, hanya bimbang tentang logik, adalah amat membantu. Dan dengan cara itu, anda tidak menyelesaikan dua masalah yang amat sukar sekali. Anda hanya memberi tumpuan kepada logik, dan maka anda bergerak ke dalam sintaks. OK. Mari kita mulakan akan melalui kod pseudo yang. Saya telah menulis di sini, binari carian kod pseudo. Kita harus menulis ini pada menaiki bersama-sama. Atau saya akan menulis dan anda akan memberi saya arahan yang saya perlukan. Jadi sesiapa sahaja boleh memberi saya yang pertama garis kod pseudo yang anda menulis untuk carian binari? Ya, Annie? PELAJAR: Walaupun panjang senarai adalah lebih besar daripada sifar. JASON Hirschhorn: Walaupun panjang daripada senarai yang lebih besar daripada sifar. Dan sekali lagi, kita lihat beberapa C-cari perkara sintaksis di sini. Tetapi sebahagian besar daripada ini adalah dalam bahasa Inggeris. Adakah sesiapa mempunyai apa-apa garisan mereka meletakkan sebelum ini dalam pseudo-kod mereka? PELAJAR: Dapatkan satu pameran daripada disusun nombor. JASON Hirschhorn: Anda menulis "mendapatkan pelbagai nombor disusun. "Per pengisytiharan fungsi, kita akan lulus pelbagai nombor disusun. PELAJAR: [didengar]. JASON Hirschhorn: Jadi kita akan mempunyai. Tetapi ya, jika kita tidak mempunyai itu, kami perlu menyusun pelbagai kami nombor, kerana carian binari hanya berfungsi pada tatasusunan disusun. Jadi sementara panjang senarai sama dengan sifar, saya akan dimasukkan ke dalam beberapa pendakap kerinting supaya ia kelihatan sedikit lebih seperti C. Tetapi ketika, seolah-olah map ke manakala gelung, jadi di dalam semasa ini gelung apa yang kita perlu lakukan untuk carian binari? Orang lain yang tidak memberikan saya suatu menjawab lagi tetapi yang menulis ini? PELAJAR: Pergi ke tengah senarai. JASON Hirschhorn: Tom. Pergi ke tengah senarai. Dan soalan susulan, apa kita buat sekali kita di pertengahan senarai? PELAJAR: Adakah cek sama ada itu nombor yang anda cari. JASON Hirschhorn: Cemerlang. Pergi pertengahan senarai dan memeriksa jika nilai kami ada - hebat. Adakah sesiapa mempunyai apa-apa lagi yang berbeza daripada ini? Itu betul-betul betul. Perkara pertama yang kita lakukan dalam carian binari adalah pergi ke tengah-tengah senarai dan menyemak untuk melihat jika nilai kami ada. Jadi saya menganggap jika nilai kita ada, apa yang kita lakukan? PELAJAR: Kita kembali sifar [didengar]. JASON Hirschhorn: Ya, jika kita nilai di sana, kami mendapati ia. Oleh itu, kita boleh memberitahu beberapa cara, bagaimanapun ini fungsi ditakrifkan, kami memberitahu pengguna kami mendapati ia. Jika tidak ada, walaupun, itu di mana ini mendapat rumit. Jadi, jika ia tidak ada, orang lain yang bekerja pada carian binari atau telah idea sekarang, apa yang kita lakukan? PELAJAR: Soalan. JASON Hirschhorn: Ya? PELAJAR: Adakah array sudah disusun? JASON Hirschhorn: Ya, kami menganggap array sudah disusun. PELAJAR: Jadi maka anda perlu menyemak jika nilai yang anda lihat adalah lebih besar daripada nilai yang anda mahu, anda boleh bergerak ke tengah separuh yang lain. JASON Hirschhorn: Jadi jika pertengahan senarai adalah lebih besar daripada apa yang kita cari, maka kita apa? Kami bergerak di mana? PELAJAR: Anda mahu berpindah ke separuh daripada senarai dengan nombor yang lebih rendah daripada itu. JASON Hirschhorn: Jadi kita akan panggilan yang sebelah kiri. Jadi jika pertengahan adalah lebih besar, kita boleh mencari separuh kiri senarai. Dan kemudian oleh carian, apa yang yang saya maksudkan dengan carian? PELAJAR: [didengar]. JASON Hirschhorn: Kami pergi ke tengah-tengah. Kita sebenarnya mengulangi perkara ini. Kita kembali melalui gelung sementara kami. Saya akan memberikan yang terakhir - lagi, jika, pertengahan adalah kurang daripada apa yang kita, apa yang kita lakukan di sini? PELAJAR: Pergi ke kanan. JASON Hirschhorn: Search kanan. Ini kelihatan baik, tetapi adakah sesiapa mempunyai apa-apa yang kita mungkin hilang atau apa sahaja yang anda meletakkan dalam pseudo-kod anda? Jadi ini adalah apa yang kita ada setakat ini. Walaupun panjang senarai adalah lebih besar daripada sifar, kita akan pergi ke tengah senarai dan memeriksa jika nilai kita di sana. Jika tengah-tengah adalah lebih besar, kita akan mencari kiri, lain jika tengah-tengah adalah kurang, kita akan mencari kanan. Oleh itu, kita semua mempunyai beberapa kebiasaan dengan dengan syarat yang kami gunakan dalam sains komputer dan alat-alat yang kita ada. Tetapi anda sudah akan melihat kami bercakap dalam bahasa Inggeris, tetapi kami mendapati banyak perkara yang seolah-olah map ke alat yang kita ada dalam pengekodan kit alat kami. Jadi hak off kelawar, kita tidak akan sebenarnya kod yet. Apa yang kita lihat di sini dalam bahasa Inggeris yang peta kepada perkara yang kita boleh menulis dalam C? PELAJAR: Walaupun. JASON Hirschhorn: Walaupun. Jadi selama ini di sini peta ke apa? PELAJAR: A gelung sementara. JASON Hirschhorn: A gelung sementara? Atau mungkin lebih amnya, gelung. Kami mahu melakukan sesuatu berulang. Jadi, kita akan kod gelung. Dan kita sudah tahu, kerana kita telah melakukan ini beberapa kali dan kita mempunyai banyak contoh di luar sana, bagaimana sebenarnya untuk menulis indeks ini untuk gelung. Jadi yang sepatutnya menjadi agak mudah. Kami akan dapat untuk mendapatkan bermula agak cepat. Apa lagi yang kita lihat di sini? Apa lain-lain struktur sintaks, perkara-perkara yang kita biasa dengan dalam C, kita sudah mempunyai rasa berdasarkan fakta yang ditentusahkan kira perkataan yang kita digunakan? Ya, Anna? [Didengar] hanya bergurau. Anna, teruskan. PELAJAR: Jika dan lagi. JASON Hirschhorn: Jika dan yang lain - di sini. Jadi, apa yang mereka kelihatan seperti? PELAJAR: Satu jika else. JASON Hirschhorn: Ya, syarat, bukan? Oleh itu, kita mungkin perlu menulis beberapa keadaan. Dan sekali lagi, walaupun mungkin mengelirukan pada pertama, kita biasanya mempunyai rasa yang kini bagaimana untuk menulis syarat dan sintaks untuk keadaan. Dan jika kita tidak, kita hanya mencari yang sintaks untuk keadaan yang, potong dan tampal itu, kerana kita tahu kita perlu keadaan di sini. Apa-apa perkara-perkara lain yang kita lihat peta yang ke perkara yang kita mungkin perlu lakukan dalam C? Ya, Aleha? PELAJAR: ini mungkin jelas, dengan hanya memeriksa jika nilai sama sesuatu. JASON Hirschhorn: Jadi bagaimana kita semak dan - jadi pergi ke tengah-tengah senarai dan memeriksa jika nilai kita di sana? Bagaimana kita melakukannya dalam C? Apa yang sintaks untuk itu? PELAJAR: Sama, sama. JASON Hirschhorn: Sama, sama. Jadi semak ini mungkin akan menjadi setaraf, sama. Oleh itu, kita akan tahu kita perlu tempat itu. Dan sebenarnya, hanya dalam menulisnya, kita melihat perkara-perkara lain. Kami akan perlu melakukan beberapa operator perbandingan di sana - hebat. Jadi ia sebenarnya kelihatan seperti, oleh dan yang banyak, kami telah tidak ditulis perkataan kod C yet. Tetapi kita mendapat model mental turun melalui ceramah-ceramah dan orang-orang seluar pendek. Kami menulis pseudo-kod sebagai satu kumpulan. Dan sudah, kami mempunyai 80% jika tidak 90% daripada apa yang kita perlu lakukan. Sekarang, kita hanya perlu memberi kod ia, yang sekali lagi, adalah masalah bukan remeh untuk menyelesaikan. Tetapi sekurang-kurangnya kita terjebak kepada logik. Sekurang-kurangnya sekarang apabila kita pergi ke waktu pejabat, Yang boleh saya katakan, saya tahu apa yang saya perlukan lakukan, tetapi anda boleh mengingatkan saya tentang sintaks? Atau walaupun waktu pejabat diasak, anda boleh Google untuk sintaks, bukan daripada tersangkut pada logik. Dan sekali lagi, dan bukannya cuba untuk menyelesaikan logik dan masalah sintaks semua sekaligus, ia sering lebih baik untuk memecahkan kedua-dua masalah sukar keluar ke dua yang lebih terkawal dan melakukan pseudo-kod pertama dan kemudian kod di C. Jadi mari kita lihat apa yang saya lakukan untuk pseudo-kod di hadapan masa. Walaupun panjang senarai adalah lebih besar daripada sifar, melihat tengah-tengah senarai. Jika nombor didapati kembali benar, lagi jika nombor yang lebih tinggi, carian kiri. Lain jika bilangan yang lebih rendah, carian betul, pulangan palsu. Jadi yang kelihatan hampir sama jika tidak hampir sama dengan apa yang kita menulis. Sebenarnya, Tom, apa yang anda kata pertama, melanggar pertengahan senarai dan jika bilangan didapati ke dalam kedua-dua kenyataan sebenarnya apa yang saya lakukan. Saya menggabungkan mereka di sana. Saya sepatutnya mendengar anda kali pertama. Jadi itu adalah pseudo-kod yang kita ada. Jika anda ingin sekarang, maaf, pergi menyokong kepada masalah awal kami. Mari kita kod binary.c. Jadi melaksanakan versi lelaran daripada carian binari menggunakan berikut pengisytiharan fungsi. Dan anda tidak perlu untuk menyalin ke bawah sahaja lagi. Saya sebenarnya akan membuka sehingga di sini binary.c. Jadi ada akuan fungsi di tengah-tengah skrin. Dan anda akan melihat saya mengambil pseudo-kod dari di pihak saya, tetapi hampir sama dengan apa yang kita menulis, dan meletakkan bahawa dalam untuk anda. Jadi sekarang, mari kita mengambil masa lima minit kod fungsi ini. Dan sekali lagi, jika anda mempunyai sebarang soalan, mengangkat tangan anda, beritahu saya, saya akan datang sekitar. PELAJAR: [didengar]. JASON Hirschhorn: Jadi saya mengambil binari yang carian definisi di atas, di laluan 12. Itulah yang saya mendapat untuk slaid saya. Dan kemudian semua ini pseudo-kod saya copy dan ditampal daripada slaid, slaid pseudo-kod. Saya masih tidak mendengar [didengar]. Jadi jika anda telah selesai anda perlaksanaan, saya mahu untuk memeriksa. Saya melalui e-mel anda fail helpers.h yang sebelum ini di dalam kelas ini. Dan ia akan menjadi boleh didapati dalam talian dan juga untuk muat turun untuk orang menonton seksyen kali ini ditangguhkan. Dan saya hanya menggunakan pengedaran generik kod dari pset3. Jadi saya mengambil find.C, menggunakan fail helpers.h saya bukannya fail helpers.h yang yang yang diberikan dalam kod pengedaran. Dan saya terpaksa membuat satu perubahan lain dalam find.C bukannya memanggil hanya semata-mata carian, hubungi binary_search. Jadi jika anda mahu menguji kod anda, tahu bahawa itu adalah bagaimana untuk melakukannya. Malah, apabila kita akan menjalankan kod ini sekarang, saya hanya membuat satu salinan direktori pset3 saya, sekali lagi, bertukar keluar fail pembantu dan kemudian dibuat bahawa berubah dalam find.C untuk memanggil binary_search bukan sekadar mencari. JASON Hirschhorn: Ya. Anda mempunyai soalan? PELAJAR: Tidak mengapa. JASON Hirschhorn: Tidak perlu risau. Nah, mari kita bermula. Kami akan memberi kod ini sebagai satu kumpulan. Satu nota yang lain. Sekali lagi, ini adalah, dengan mudah ditukar dalam untuk Set Masalah Tiga. Saya mempunyai fail helpers.h saya yang, bukan daripada helpers.h yang kami diberikan, mengisytiharkan carian binari, gelembung jenis, dan jenis pemilihan. Dan dalam find.c anda akan notis pada baris, apa yang itu, talian 68, kita panggil binari mencari bukannya carian. Jadi sekali lagi, kod yang boleh didapati dalam talian atau kod yang anda mewujudkan sekarang mudah ditukar dalam untuk p menetapkan 3 untuk memeriksa. Tetapi pertama, mari kita kod carian binari. Akuan Fungsi kami, kita kembali bool a. Kami mengambil integer dipanggil nilai. Kami mengambil pelbagai integer dipanggil nilai-nilai, dan kami mengambil n menjadi saiz array. Pada baris 10, di sini, saya mempunyai tajam termasuk stdbool.h. Adakah sesiapa tahu mengapa yang terdapat di sana? Jadi apakah yang baris kod lakukan? PELAJAR: Ia membolehkan anda untuk menggunakan jenis pulangan bool. JASON Hirschhorn: Tepat sekali. PELAJAR: Atau ia perpustakaan yang membolehkan menggunakan jenis pulangan bool. JASON Hirschhorn: Jadi mendadak termasuk talian stdbool.h memberikan saya beberapa definisi dan pengisytiharan untuk perkara-perkara bahawa saya dibenarkan untuk digunakan dalam perpustakaan ini. Jadi di kalangan mereka mengatakan bahawa ada jenis ini dipanggil bool, dan ia boleh benar atau palsu. Jadi itulah yang selaras yang tidak. Dan jika saya tidak mempunyai talian itu, saya akan mendapat masalah untuk menulis ini perkataan di sini, bool, di sana. Tepat betul. Jadi saya perlu bahawa dalam kod ini. OK. Jadi ini, sekali lagi, adalah lelaran versi, bukan satu rekursif. Oleh itu marilah kita memulakan. Mari kita mulakan dengan ini pertama baris kod pseudo. Dan mudah-mudahan, kita akan - atau tidak diharapkan. Kita akan pergi di sekitar bilik. Kami akan pergi baris demi baris, dan saya akan membantu anda memikirkan garis yang kita perlukan untuk menulis pertama. Jadi sementara panjang senarai adalah lebih besar daripada sifar. Mari kita mulakan di bahagian hadapan. Apa garis yang saya harus tulis di sini, dalam kod? PELAJAR: Walaupun kurungan n lebih besar daripada 0. JASON Hirschhorn: Walaupun n besar daripada 0. Jadi n adalah saiz senarai, dan kami memeriksa jika - [Suara INTERPOSING] JASON Hirschhorn: - maaf? PELAJAR: Bagaimana kita tahu bahawa n adalah saiz senarai? JASON Hirschhorn: Maaf. Spesifikasi Serangga, carian dan jenis fungsi yang anda perlukan untuk menulis, n adalah saiz senarai. Saya terlupa untuk menerangkan bahawa di sini. Tetapi ya. n adalah saiz senarai, dalam kes ini. Jadi sementara n lebih besar daripada 0. OK. Yang boleh membuktikan sedikit bermasalah walaupun, jika perkara pergi. Kerana kita akan terus untuk mengetahui Saiz senarai sepanjang ini fungsi, tetapi mengatakan kita mulakan dengan pelbagai 5 integer. Dan kita melalui dan kami telah kini mengecil ke bawah untuk pelbagai 2 integer. Yang 2 integer ialah? Saiz adalah 2 sekarang kita mahu melihat, tetapi yang 2 itu? Adakah ini masuk akal, soalan itu? OK. Saya akan meminta sekali lagi. Jadi kita mulakan dengan pelbagai ini 5 integer dan n sama dengan 5, bukan? Kami akan berjalan melalui sini. kita mungkin akan mengubah saiz, betul, seperti yang berlaku pada. Iaitu apa yang kita katakan kita mahu lakukan. Kita tidak mahu untuk mencari perkara yang penuh lagi. Jadi mengatakan kita mengubahnya dengan 2. Kami mengambil separuh senarai itu ganjil. Jadi hanya memilih 2. Jadi sekarang n bersamaan 2. Saya memohon maaf untuk golongan miskin penanda memadam kering. Betul? Dan kita mencari melalui senarai lagi dengan senarai saiz 2. Nah, pelbagai kami masih saiz 5. Kita katakan kita hanya mahu mencari 2 tempat di dalamnya. Jadi yang 2 tempat adalah mereka? Adakah ini masuk akal? Adakah mereka yang ditinggalkan 2 tempat? Adakah mereka betul 2 tempat ini? Adakah mereka tengah 2 tempat? Kami telah dipecahkan masalah ke bawah, tetapi kita sebenarnya tidak tahu yang mana sebahagian daripada masalah kami masih melihat, hanya dengan mempunyai ini 2 pembolehubah. Oleh itu, kita perlu sedikit lebih kemudian, manakala n lebih besar daripada 0. Kita perlu tahu di mana yang n adalah dalam array sebenar kami. Jadi adakah sesiapa mempunyai menukar ke garisan ini? Kebanyakan garis ini adalah sempurna betul. Adakah terdapat tambahan lain? Bolehkah kita menukar sesuatu yang keluar untuk n untuk membuat baris ini sedikit lebih baik? Mm-hm? PELAJAR: Bolehkah anda memulakan pembolehubah seperti panjang untuk n yang akan kemudiannya digunakan kemudian dalam fungsi? JASON Hirschhorn: Jadi memulakan panjang berubah-ubah untuk n, dan kami menggunakan yang kemudian? Tetapi kita hanya mengemaskini panjang dan kita masih menghadapi masalah ini di mana kita mengurangkan panjang masalah kita, tetapi kita tidak tahu di mana, sebenarnya, panjang yang dipetakan. PELAJAR: Bukankah yang akan berlaku kemudian apabila kamu katakan, mencari kiri, mencari betul? Anda akan pergi ke yang berbeza kawasan anda - JASON Hirschhorn: Kami akan pergi dengan sesuatu kawasan, tetapi bagaimana kita tahu yang pergi ke? Jika kita hanya mempunyai pelbagai dan ini n, bagaimana kita tahu di mana untuk pergi ke dalam array. Di belakang, ya? PELAJAR: Adakah anda mempunyai, seperti, yang lebih rendah terikat dan pembolehubah terikat atas atau sesuatu seperti itu? JASON Hirschhorn: OK. Jadi ini adalah idea yang lain. Bukan hanya mengesan yang saiz, kita mengesan lebih rendah dan pembolehubah terikat atas. Jadi bagaimana kita mengira saiz dari yang terikat dan terikat atas yang lebih rendah? [Suara INTERPOSING] JASON Hirschhorn: Penolakan. Dan juga mengesan lebih rendah terikat dan terikat atas untuk memberitahu kami, kita mencari kedua-dua? Adakah kita mencari kedua-dua di sini? Adakah kita mencari dua pertengahan? Mungkin bukan dua tengah, kerana ini, sebenarnya, adalah carian binari. Tetapi sekarang kita akan dapat untuk mendapatkan saiz, tetapi juga had array. Pada dasarnya, jika kita mempunyai yang besar ini buku telefon, kita merobek ia pada separuh. Kini kita tahu mana yang lebih kecil buku telefon adalah. Tetapi kita tidak benar-benar merobek buku telefon pada separuh. Kita masih perlu tahu di mana batas baru masalah kita adalah. Adakah sesiapa mempunyai apa-apa soalan tentang itu? Ya? PELAJAR: Adakah ia bekerja dengan mewujudkan satu berubah-ubah, i, yang anda kemudian hanya beralih kedudukan i berbanding dengan yang jawatan sekarang, dan panjang, n? JASON Hirschhorn: Dan apa yang i? PELAJAR: Seperti i menjadi seperti jenis - Seperti anda akan memulakan i menjadi kedudukan tengah array. Dan kemudian, jika nilai di kedudukan i dalam tengah array dalam didapati kurang daripada nilai yang anda perlukan, sekarang i menjadi panjang array, ditambah nilai i dibahagikan dengan 2. Seperti, lihat, anda beralih i - JASON Hirschhorn: Betul. PELAJAR: - sehingga - JASON Hirschhorn: Jadi saya hampir positif yang akan bekerja. Tetapi makhluk titik, anda memerlukan dua cebisan maklumat di sini. Anda boleh melakukannya dengan permulaan dan akhir, atau anda boleh melakukannya dengan saiz, dan kemudian beberapa penanda. Tetapi anda memerlukan dua keping maklumat di sini. Anda tidak boleh mendapatkan dengan dengan hanya satu. Adakah ini masuk akal? Jadi, kita akan pergi melalui, dan kita akan melakukan [didengar] dan mencipta beberapa penanda. Jadi what'd anda menulis dalam kod anda? PELAJAR: Saya hanya berkata int terikat satu adalah sama dengan 0. JASON Hirschhorn: Mari kita panggil yang int, bermula. PELAJAR: OK. JASON Hirschhorn: Yang membuat rasa lebih untuk saya. Dan? PELAJAR: Saya berkata, saya rasa, Int berakhir. JASON Hirschhorn: int berakhir. PELAJAR: Saya rasa, n tolak 1, atau sesuatu seperti itu. Seperti, elemen terakhir. JASON Hirschhorn: Jadi anda menulis, int bermula sama dengan 0, koma bertitik, dan int berakhir sama n tolak 1, koma bertitik. Jadi pada asasnya, apa yang kami lakukan di sini, 0 kedudukan pertama. Dan seperti yang kita tahu dalam tatasusunan, mereka tidak pergi sehingga n, mereka naik ke n tolak 1. Oleh itu, kita mempunyai beberapa batasan pelbagai kami. Dan ini batas awal berada batas-batas awal masalah kita. OK. Supaya bunyi yang baik. Kemudian jika kita kembali ke baris ini, manakala panjang senarai adalah lebih besar daripada 0, apa, daripada n, sekiranya kita masukkan ke dalam sini? PELAJAR: Tulis berakhir tolak permulaan. JASON Hirschhorn: Walaupun berakhir tolak bermula adalah lebih besar daripada 0? OK. Dan kita boleh, jika kita mahu membuat yang sedikit lebih bagus, apa yang lagi yang kita boleh buat? Jika kita mahu untuk membersihkan kod ini sedikit? Bagaimana kita menyingkirkan 0? Ini hanyalah soalan gaya. Ia betul sekarang. PELAJAR: Akhir yang tidak permulaan yang sama? JASON Hirschhorn: Kita boleh buat apa? [Suara INTERPOSING] PELAJAR: Berakhir adalah lebih besar? JASON Hirschhorn: Yeah. Kita hanya boleh lakukan semasa berakhir adalah lebih besar daripada awal. Betul. Kami tambah mula sisi lain itu, dan kita tidak perlu lagi ambil 0. Jadi ini hanya kelihatan bersih sedikit. OK. Oleh itu, walaupun panjang senarai adalah 0, kita menulis itu, manakala berakhir adalah lebih besar daripada permulaan. Kita akan dimasukkan ke dalam perlu kita pendakap kerinting, dan maka perkara pertama kami mahu lakukan ialah melihat mereka dalam senarai sedikit. Anda? Bolehkah anda memberi saya - PELAJAR: Jika kurungan nilai kurungan persegi - JASON Hirschhorn: Jika kurungan nilai kurungan persegi. PELAJAR: Akhir yang dibahagikan dengan 2. JASON Hirschhorn: Berakhir? PELAJAR: Saya melihat masalah dengan anda - JASON Hirschhorn: OK. Nah, melihat tengah-tengah. Bagaimana kita tahu apa yang tengah-tengah adalah? Yeah. Jadi biarlah saya memadam kod itu. Bagaimana kita tahu apa yang tengah-tengah adalah? Dalam apa-apa, apabila anda mempunyai awal dan akhirnya, bagaimana anda mencari tengah-tengah? PELAJAR: Anda purata. PELAJAR: Anda menambah mereka bersama-sama dan kemudian - JASON Hirschhorn: Tambah mereka bersama-sama dan kemudian? PELAJAR: Dan anda purata. Dibahagikan dengan 2. JASON Hirschhorn: Tambah mereka bersama-sama dan membahagi dengan 2. Jadi tengah int sama? Tom, anda boleh berikan kepada saya? PELAJAR: Bermula ditambah berakhir - JASON Hirschhorn: Permulaan ditambah berakhir. PELAJAR: Semua, kurungan, dibahagikan dengan 2. JASON Hirschhorn: Semua, dalam kurungan, dibahagikan dengan 2. Jadi yang memberikan saya tengah apa-apa, betul? PELAJAR: Anda juga perlu bundarkan ke atas. JASON Hirschhorn: Apa yang anda bermakna, saya perlu untuk pusingan tersebut? [Suara INTERPOSING] PELAJAR: Kerana jika Ia merupakan satu ganjil nombor, maka ia seperti - JASON Hirschhorn: Nah, OK. Jadi saya boleh bundarkan ke atas. Tetapi jika ia nombor ganjil, 5, saya boleh mengambil 1 dari tengah-tengah. Atau jika ia nombor genap, sebaliknya, itu kes yang lebih baik. Jika ia 4, kita hanya mempunyai 4, saya boleh mengambil yang pertama "tengah", quote, unquote atau kedua satu "tengah". Sama ada akan bekerja untuk carian binari, jadi saya tidak benar-benar perlu untuk pusingan itu. Tetapi ada satu perkara yang saya lain perlu melihat baris ini. Kita mungkin tidak sedar lagi, tetapi kita akan kembali kepadanya. Kerana baris ini sebenarnya masih memerlukan satu perkara yang lain. Tetapi setakat ini, kami telah menulis empat baris kod. Kami mempunyai permulaan kami dan berakhir penanda. Kami mempunyai gelung sementara kami, yang peta pada terus ke kod pseudo kami. Kami sedang mencari di tengah-tengah yang memetakan terus ke kod pseudo kami. Saya akan mengatakan ini pergi ke tengah-tengah senarai, baris ini kod. Dan kemudian, sebaik sahaja kami pergi ke tengah-tengah senarai, perkara yang akan datang yang perlu kita lakukan adalah memeriksa jika nilai kami ada untuk kod pseudo yang kita menulis lebih awal. Jadi bagaimana kita memeriksa jika nilai kami adalah di tengah-tengah senarai? Anda. Mengapa tidak anda melakukan ini? PELAJAR: Jika nilai kita adalah di tengah-tengah adalah sama dengan apa sahaja yang kita menetapkan - Maksud saya sama sama dengan - JASON Hirschhorn: Ia - OK. PELAJAR: Saya tidak pasti apa yang berubah-ubah kita cari untuk walaupun, adalah kerana - [Suara INTERPOSING] PELAJAR: [didengar]. JASON Hirschhorn: Tepat sekali. Per pengisytiharan majlis itu, kita cari nilai. Oleh itu, kita sedang mencari nilai yang dalam pelbagai nilai-nilai. Jadi anda betul-betul betul. Anda akan lakukan, jika kurungan nilai paren terbuka tengah ditutup setaraf kurungan sama nilai, dan di dalam sana apa yang perlu kita lakukan? Jika nilai kita di sana, apa yang kita perlu buat? [Suara INTERPOSING] PELAJAR: Kembali sifar. JASON Hirschhorn: Kembali benar. PELAJAR: Kembali benar. JASON Hirschhorn: Michael, apakah baris ini lakukan? PELAJAR: [didengar] program ini telah berjalan kursus, dan itu adalah ke atas, dan anda telah apa yang anda perlu lakukan? JASON Hirschhorn: Program atau apa? Dalam kes ini? PELAJAR: Fungsi ini. JASON Hirschhorn: Fungsi ini. Dan sebagainya, untuk kembali kepada apa sahaja yang dipanggil dan memberikannya nilai, benar. Tepat betul. Utama. Apakah jenis pulangan daripada utama, Michael? PELAJAR: int, integer? JASON Hirschhorn: int, betul-betul. Integer. Yang hanya satu soalan untuk memastikan anda semua telah di atasnya. Apa yang biasanya kembali, jika segala sesuatu berfungsi dengan baik? PELAJAR: Zero. JASON Hirschhorn: Zero. Tepat betul. PELAJAR: Jika ini hanya kembali benar, tidak ada maklumat yang diberikan tentang apa yang - Oh, ini hanya mengatakan bahawa yang nilai yang di dalam array. JASON Hirschhorn: Tepat sekali. Program ini tidak memberi maklumat di mana betul-betul nilai itu. Ia hanya berkata, ya, kami mendapati , atau tidak, kita tidak merasa. Jadi, jika bilangan ditemui, kembali benar. Well, sebenarnya kita hanya melakukan yang benar-benar cepat dengan garis yang satu kod. Jadi saya akan mencadangkan supaya garis kod pseudo. PELAJAR: Jangan kita perlu untuk menukar array? Ia harus nilai, tidak nilai, bukan? JASON Hirschhorn: Maaf. Terima kasih. PELAJAR: Yeah. JASON Hirschhorn: Keturunan ini harus nilai-nilai. Tepat betul. OK. Oleh itu, kita telah melihat senarai tengah. Jika nombor yang terdapat pulangan benar. Berterusan dengan kod pseudo kita, jika tengah adalah lebih besar, carian kiri. Jadi saya terpaksa di sini, jika nombor yang lebih tinggi, carian kiri. Constantine, anda boleh memberikan saya ini selaras kod? PELAJAR: Jika nilai pertengahan - JASON Hirschhorn: Jadi jika nilai - jika paren terbuka menghargai kurungan kurungan hampir pertengahan - PELAJAR: Apakah yang lebih kecil daripada nilai? JASON Hirschhorn: Apakah kurang daripada. PELAJAR: Kurang daripada nilai. JASON Hirschhorn: Nilai. Well, sebenarnya, anda mahu memeriksa jika bilangan - Maaf. Ini adalah sedikit mengelirukan. Tetapi lain jika jumlah dalam pertengahan senarai adalah lebih besar. PELAJAR: Oh, OK. JASON Hirschhorn: Saya akan mengubah itu. Lagi jika pertengahan adalah lebih tinggi, kita ingin mencari kiri, OK? Dan apa yang kita lakukan di dalam ini jika keadaan? PELAJAR: Bolehkah saya membuat perubahan kecil untuk keadaan, perubahan kepada yang lain jika? JASON Hirschhorn: Else jika? OK. Jadi kod ini akan melaksanakan kira-kira yang sama. Tetapi perkara yang baik tentang menggunakan jika, lagi jika, lain jika atau jika, lain jika, lagi bermakna hanya satu daripada mereka akan diperiksa, tidak semua tiga daripada mereka, berpotensi. Dan yang menjadikan ia sedikit lebih bagus pada komputer itu menjalankan program anda. Jadi [? Constantine,?] kami di dalam talian ini, lain jika nilai-nilai, kurungan pertengahan kurungan rapat adalah lebih besar daripada nilai. Apa yang perlu kita lakukan? Kita perlu mencari sebelah kiri. Bagaimana kita berbuat demikian? Saya akan memberikan anda satu permulaan. Kami mempunyai dua perkara ini dipanggil bermula dan berakhir. Jadi apa yang perlu berlaku untuk permulaan? Jika anda ingin mencari sebelah kiri senarai, kita akan mendapat awal semasa kami. Apa yang kita perlu melakukannya? PELAJAR: Kami awal ke tengah campur 1. JASON Hirschhorn: Jadi, jika kita mencari kiri? PELAJAR: Maaf, tolak tengah - supaya berakhir akan menjadi tengah tolak 1 dan permulaan - JASON Hirschhorn: Dan apa berlaku ke permulaan? PELAJAR: Ia tetap sama. JASON Hirschhorn: Jadi makna tetap sama. Jika kita mencari sebelah kiri, kita menggunakan permulaan yang sama - betul-betul betul. Dan berakhir? Maaf, apakah yang berakhir sama sekali lagi? PELAJAR: tolak Tengah 1. JASON Hirschhorn: tolak Tengah 1. Sekarang, mengapa tolak 1, bukan hanya pertengahan? PELAJAR: tengah ini adalah daripada gambar sudah, kerana kita mempunyai diperiksa bahawa itu keluar? JASON Hirschhorn: Itu betul-betul betul. Tengah-tengah adalah daripada gambar. Kami sudah diperiksa tengah-tengah. Oleh itu, kita tidak mahu "tengah-tengah," quote unquote, untuk terus berada dalam array yang kita cari. Jadi ini adalah hebat. Lagi jika nilai kurungan pertengahan adalah lebih besar daripada nilai berakhir setaraf tolak tengah 1. Jeff, bagaimana dengan baris terakhir ini? PELAJAR: Else. Nilai-nilai pertengahan adalah kurang daripada nilai? JASON Hirschhorn: Kami akan anda memberi saya lagi. Jadi, jika anda tidak memberi saya - PELAJAR: Jadi bermulanya akan ditambah tengah 1. JASON Hirschhorn: setaraf Bermula ditambah tengah 1, sekali lagi, untuk yang sama sebab itu Constantine memberi kami lebih awal. Dan pada akhirnya, yang tidak memberikan saya garis kod lagi? Pulangan palsu, Aleha, apa kita tulis di sini? PELAJAR: Kembali palsu. JASON Hirschhorn: Kembali palsu. Dan kita perlu berbuat demikian, kerana jika kita tidak merasa, kita perlu untuk mengatakan bahawa kita tidak menemuinya. Dan kita berkata kita akan mengembalikan bool, jadi kita pasti perlu kembali di suatu tempat bool. Jadi mari kita menjalankan kod ini. Saya sebenarnya akan - jadi kita di terminal. Kami akan membersihkan tingkap kami. Mari kita Buat Semua. Kami mendapati ada satu kesilapan. Ada satu ralat pada baris 15, dijangka koma bertitik di akhir pengisytiharan. Jadi apa yang saya terlupa? PELAJAR: Koma bertitik. JASON Hirschhorn: Koma bertitik sehingga di sini. Saya berfikir bahawa adalah kod Tom. Jadi Tom, [didengar]. Hanya bergurau. Mari kita jangan Buat Semua lagi. PELAJAR: Apa direktori Dropbox kita harus untuk ini? JASON Hirschhorn: Jadi anda boleh hanya menonton untuk sedikit ini. Tetapi sekali lagi, jika anda mahu untuk bergerak ini kod ke dalam direktori pset3 anda untuk mencuba ia keluar, itulah yang saya lakukan. Jika anda akan notis di sini - maaf, soalan yang baik. [? LS,?] Saya di sini kod find.c yang dari kod distro minggu ini. Saya mempunyai helpers.h. Saya mempunyai fail Make bahawa saya sebenarnya disunting sedikit untuk memasukkan ini baru fail kita menulis. Semua kod yang akan disediakan, tidak kod pengedaran, tetapi baru Buat fail, fail helpers.h baru ini akan boleh didapati dalam talian untuk muat turun. Sekali lagi, jadi mereka adalah Kod tambahan yang kita ada. Oleh itu, semua, setiap talian ini, membuat mencari, binari, gelembung pemilihan - membuat ketiga-tiga mereka dan mengumpulkan ke dalam ini find kod boleh laksana. Jadi secara amnya, kita tidak mahu untuk terus ke check50. Kami mahu menjalankan beberapa ujian ke atas kita sendiri. Tetapi hanya supaya kita boleh mempercepatkan ini sedikit, check50 2013 pset3.find akan berlalu dalam helpers.c-- tidak baik saya. Saya tidak mempunyai sekarang. Jadi, kita sebenarnya akan menjalankan kod untuk sebenar. Usage.find /, anda tahu apa yang bermakna? PELAJAR: Anda perlu kedua baris arahan di atasnya. JASON Hirschhorn: Saya perlu baris arahan kedua. Dan spesifikasi, saya perlu untuk memasuki apa yang kita cari. Jadi mari kita lihat 42. Kami akan menyimpannya dalam disusun, kerana kita telah tidak ditulis fungsi jenis lagi - 42, 43, 44. Dan Kawalan D tidak mencari jarum dalam sisa rumput kering itu. Itu tidak baik. Ia pasti ada. Mari kita cuba sesuatu yang lain. Mungkin kerana saya meletakkan pada permulaan. Mari kita buat 41, 42, 43. Di sana kami pergi. Ia menjumpainya. Mari kita meletakkan ia pada akhir masa ini, hanya supaya kita boleh teliti - 40, 41, 42. Tidak menemui jarum. Jadi saya sebutkan ini lebih awal. Malangnya, saya tahu ini akan berlaku. Tetapi untuk tujuan pedagogi, ia baik untuk meneroka ia. Ia tidak berfungsi. Untuk sebab-sebab tertentu, ia tidak boleh menemuinya. Kita tahu apa yang di sana, tetapi kita tidak menemuinya. Jadi satu perkara yang kita boleh lakukan ialah melalui GDB untuk mencari, tetapi tidak sesiapa, tanpa melalui GDB, mempunyai rasa di mana kita diskru? [? Madu? ?] PELAJAR: Saya rasa ia mungkin apabila berakhir adalah sama dengan permulaan, dan ia hanya satu senarai satu unsur. Kemudian ia hanya mengabaikan dan bukannya sebenarnya memeriksa ia. JASON Hirschhorn: Itu betul-betul betul. Apabila berakhir sama awal, kita masih mempunyai elemen dalam senarai kami? PELAJAR: Ya. JASON Hirschhorn: Ya, sebenarnya, kita mempunyai satu dan hanya satu elemen. Dan yang kemungkinan besar akan berlaku apabila, setiap kod yang kami diuji, kita berada di hadapan sisa rumput kering atau di akhir sisa rumput kering itu. Itulah di mana permulaan dan berakhir akan sama satu, dengan carian binari. Jadi, dalam kedua-dua kes ia tidak berjaya, kerana berakhir adalah sama dengan awal. Tetapi jika berakhir bersamaan dengan permulaan, adakah gelung selama ini dilaksanakan? Ia tidak. Kita bolehlah diperiksa itu lagi melalui GDB. Jadi bagaimana kita boleh menetapkan kod ini, kerana apabila manakala berakhir adalah sama dengan permulaan, kami juga mahu ini manakala gelung untuk menjalankan. Jadi apa yang menetapkan kita boleh membuat untuk beratur 18? PELAJAR: [didengar] adalah lebih besar daripada atau sama dengan. JASON Hirschhorn: Tepat betul. Walaupun berakhir adalah lebih besar daripada atau sama dengan permulaan. Jadi sekarang, kami memastikan untuk mendapatkan kes sudut pada akhir. Dan mari kita lihat. Mari kita berjalan kali ini satu lagi. Mari kita membuat semua. Sekali lagi, anda perlu hanya ikut bersama-sama di sini. Cari 41 kali ini. Hanya menyimpan ia konsisten. Cari 42. Mari kita meletakkan ia pada awal - 42, 43, 44. Kami menjumpainya. Supaya sememangnya perubahan kami lakukan. Itu adalah banyak pengekodan kita hanya lakukan, carian binari. Adakah sesiapa mempunyai apa-apa soalan sebelum Saya bergerak ke dalam barisan kita menulis dalam carian binari atau bagaimana kita digambarkan apa kita tidak memikirkan? Sebelum kita bergerak ke atas, saya juga ingin menunjukkan bahawa oleh dan besar, kita dipetakan pseudo-kod satu kami untuk salah ke kod kami. Kami memang mempunyai bahawa perkara rumit memikirkan dengan bermula dan berakhir. Tetapi telah anda tidak membuat kesimpulan bahawa keluar, anda akan telah menulis cukup banyak yang kod yang serupa, kecuali mereka atas dua baris. Dan kemudian anda akan sedar apabila anda berjaya dalam pemeriksaan dan kes-kes yang anda perlu sesuatu yang lain. Jadi, walaupun anda telah mengikuti kami talian pseudo-kod ke garisan, anda akan tunggu mendapat semua tetapi dua baris kod anda diperlukan untuk menulis. Dan saya bersedia untuk bertaruh bahawa kalian akan semua digambarkan bahawa daripada cukup cepat, bahawa anda diperlukan untuk meletakkan semacam penanda di sana untuk memikirkan di mana anda berada. Itu lagi, adalah kuasa menjalankan pseudo-kod di hadapan masa. Oleh itu, kita boleh melakukan logik yang pertama, dan kemudian kita boleh bimbang tentang sintaks. Kalaulah kami telah dikelirukan mengenai logik ketika cuba untuk menulis kod ini dalam C, kita akan mendapat semua sehingga merosakkan. Dan kemudian kita akan bertanyakan soalan mengenai logik dan sintaks dan bersirat mereka semua bersama-sama. Dan kita akan mendapat hilang dalam apa yang boleh dengan cepat menjadi satu masalah yang sukar. Jadi mari kita beralih kini untuk jenis pemilihan. Kami mempunyai 20 minit kiri. Jadi saya mempunyai perasaan yang kita tidak akan dapat mendapatkan melalui semua jenis pilihan dan jenis gelembung. Tetapi janganlah kita sekurang-kurangnya percubaan untuk menyelesaikan jenis pemilihan. Jadi melaksanakan pemilihan jenis menggunakan berikut akuan fungsi. Sekali lagi, ini diambil dari masalah set spesifikasi. Nilai Int adalah kurungan adalah pelbagai integer. Dan int.n adalah saiz array yang. Jenis Pemilihan akan untuk menyusun pelbagai ini. Jadi setiap model mental kita pemilihan jenis, kita tarik - pertama, kita pergi melalui senarai yang pertama masa, cari bilangan yang paling kecil, meletakkannya pada awal, mendapati kedua bilangan kecil, meletakkannya di kedudukan kedua jika kita mahu jenis secara menaik. Saya tidak memaksa anda untuk menulis pseudo-kod sekarang. Tetapi sebelum kita lakukan kod sebagai sebuah kelas di lima minit, kita akan menulis pseudo-kod jadi kita perlu rasa beberapa di mana kita akan. Jadi cuba untuk menulis kod pseudo- sendiri. Dan kemudian cuba untuk menjadikan yang pseudo-kod ke dalam kod. Kami akan melakukan yang sebagai satu kumpulan dalam lima minit. Dan sudah tentu, beritahu saya jika anda mempunyai sebarang pertanyaan. PELAJAR: Bahawa ia? JASON Hirschhorn: Lihat sejauh mana anda boleh mendapatkan dalam dua minit lagi. Saya faham anda tidak akan dapat selesai. Tetapi kita akan pergi ke ini sebagai satu kumpulan. Anda semua pengekodan jadi [didengar], jadi saya maaf untuk berhenti seketika apa yang anda lakukan. Tetapi mari kita pergi melalui ini sebagai satu kumpulan. Dan sekali lagi, carian binari, anda semua memberi saya satu jika tidak lebih baris kod. Terima kasih untuk itu. Kita akan melakukan perkara yang sama di sini, kod bersama-sama sebagai satu kumpulan. Jadi jenis pemilihan - mari kita menulis beberapa cepat pseudo-kod. Per model mental, boleh seseorang memberikan saya baris pertama pseudo-kod, sila? Apa yang saya mahu lakukan? PELAJAR: Walaupun senarai adalah keluar perintah. JASON Hirschhorn: OK, manakala senarai adalah keluar perintah. Dan apa yang kamu maksudkan "keluar perintah?" PELAJAR: Walaupun [didengar] belum disusun. JASON Hirschhorn: Walaupun senarai berada di luar perintah, apa yang kita lakukan? Berikan saya baris kedua, sila, Marcus. PELAJAR: Jadi mencari seterusnya bilangan yang paling kecil. Ini akan dilekukan. JASON Hirschhorn: Jadi mencari seterusnya bilangan yang paling kecil. Dan kemudian orang lain? Apabila kita mencari yang paling kecil seterusnya nombor, apa yang kita lakukan? Saya akan mengatakan mencari nombor paling kecil. Itulah apa yang kita mahu lakukan. Jadi mendapatkan nombor yang paling kecil. Maka apa yang kita lakukan? PELAJAR: [didengar] untuk permulaan. JASON Hirschhorn: Maaf? PELAJAR: Letakkan dalam permulaan senarai. JASON Hirschhorn: Jadi letakkan di dalam permulaan senarai. Dan apa yang kita lakukan dengan perkara yang yang pada mulanya senarai, bukan? Kami penggantian sesuatu. Jadi di mana kita meletakkan bahawa? Ya, Anna? PELAJAR: Di mana yang paling kecil beberapa adalah? JASON Hirshhorn: Jadi meletakkan awal senarai di mana bilangan yang paling kecil adalah. Jadi sementara senarai adalah daripada perintah, cari bilangan yang paling kecil, letakkan di dalam awal senarai, meletakkan permulaan senarai di mana bilangan yang paling kecil adalah. Marcus, anda boleh menyusun semula baris ini manakala senarai adalah keluar perintah? PELAJAR: Sementara jumlah yang belum disusun? JASON Hirshhorn: OK, jadi untuk tahu bahawa nombor belum disusun, apa yang perlu kita lakukan? Berapa banyak yang kita perlu pergi melalui senarai ini? PELAJAR: Jadi saya rasa untuk gelung, atau manakala, manakala nombor diperiksa kurang daripada panjang senarai? JASON Hirshhorn: OK, itu baik. Saya rasa saya misphrased soalan saya dengan baik. Saya hanya mencuba untuk mendapatkan sekurang- kita akan perlu pergi melalui seluruh senarai. Jadi sementara senarai adalah daripada perintah, bagi saya, adalah sukar untuk memetakan pada. Tetapi pada dasarnya, itu bagaimana Saya fikir tentang perkara ini. Pergi melalui seluruh senarai, cari bilangan yang paling kecil, letakkan dalam bermula - sebenarnya, anda betul. Mari kita meletakkan mereka kedua-duanya. Jadi sementara senarai adalah daripada perintah, kita perlu melalui seluruh senarai sekali, merasa yang paling kecil nombor, tempat ia pada awal senarai, meletakkan permulaan senarai di mana bilangan yang paling kecil adalah, dan kemudian jika Senarai masih keluar perintah, kami telah mendapat untuk pergi melalui ini proses lagi, bukan? Itulah sebabnya jenis pilihan, Big-O runtime seumpama pemilihan, sesiapa sahaja? PELAJAR: n kuasa dua. JASON Hirshhorn: n kuasa dua. Kerana seperti Marcus dan saya hanya sedar di sini, kita akan perlu melalui senarai senarai beberapa kali. Jadi melalui sesuatu panjang n n beberapa kali adalah sebenarnya n kuasa dua. Jadi ini adalah kod pseudo kami. Ini kelihatan sangat baik. Adakah sesiapa mempunyai apa-apa soalan mengenai kod pseudo yang? Kerana sebenarnya jenis pemilihan perlu mungkin datang 1-1, kod dari kod pseudo. Jadi apa-apa soalan mengenai logik kod pseudo yang? Sila tanya sekarang. Jenis pilihan - sementara senarai adalah keluar perintah, kita akan melaluinya dan mencari setiap kali yang paling kecil dan meletakkannya di hadapan. Jadi sementara senarai adalah daripada perintah, boleh seseorang memberikan saya bahawa baris kod yang tidak memberikan saya garis kod lagi, sila? Ia berbunyi seperti apa? PELAJAR: Itu satu untuk gelung. JASON Hirshhorn: Ia kedengaran suka untuk gelung. OK, anda boleh memberi saya untuk gelung? Untuk - PELAJAR: i Sama 0. JASON Hirshhorn: i atau - apa yang kita hilang? Apa yang berlaku di sini? PELAJAR: Int. JASON Hirshhorn: Tepat sekali. (Int i = 0; - PELAJAR: i