[Bermain muzik] SPEAKER 1: Ini adalah CS50 dan ini adalah permulaan dalam seminggu dua. Jadi, mari kita menyelam terus ke dalam sesuatu iaitu kereta, jadi untuk bercakap. Jadi, di sini adalah CS50 IDE dan saya telah ditarik ke atas terlebih dahulu ini screen-- sialan ia. Spoiler berjaga-jaga. Baiklah. Saya telah ditarik ke atas skrin ini di sini, yang mempunyai program yang sangat mudah. Jika kita tatal ke bawah, yang paling ini hanya Komen, tetapi di sini dalam barisan 13 hingga 17 kita ada program. Ia sintaksis sah, yang bermaksud jika Saya menyusun, ia akan menyusun dan menjalankan, tetapi ia adalah kereta. Program ini mendakwa dalam komen sehingga atas bahawa ia harus mencetak 10 bintang, tetapi ia tidak. Dan berdasarkan pengalaman anda, atau tidak lama lagi untuk menjadi pengalaman dengan C, boleh anda secara logik membezakan mengapa ini, sebenarnya, buggy? Ya? PENONTON: Ia pergi dari sifar hingga 10. Itulah 11 lelaran. SPEAKER 1: Ya. Jadi, ia akan dari sifar sehingga melalui dan sama dengan 10, yang sudah tentu adalah 11 lelaran. Jadi, ia akan cetak, sesungguhnya, 11 bintang. Jadi, konvensyen sains komputer dalam kebanyakan bahasa pengaturcaraan adalah, sememangnya, hanya untuk mula mengira pada sifar, tetapi mengira sehingga tetapi tidak melalui nilai yang anda benar-benar mengambil berat tentang. Sekarang, ini adalah satu perkara yang mengambil sedikit yang membiasakan diri dan juga Awal, direka kerana ia adalah untuk pengaturcara bukan atau komputer tidak saintis dan untuk kanak-kanak sebahagian besarnya, direka untuk mempunyai anda mula mengira umumnya pada satu. Dan itulah denda. Anda benar-benar boleh mula mengira pada satu-satu jika itu lebih selesa. Dan mengira sehingga dan hingga 10, tetapi anda akan sedar terutamanya pada minggu ini dan lebih dari itu hanya begitu banyak perkara dalam pengaturcaraan menganggap bahawa 0 adalah yang pertama angka yang anda mengira, yang anda akan mendapati lebih mudah hanya untuk mendapatkan ke dalam tabiat ini permulaan dari sifar dan mengira sehingga nilai anda hargai sekarang daripada mendapatkan pergi. Jadi, yang tetap itu. Kami mengubah kurang daripada atau sama dengan hanya kurang daripada. Mari kita lihat pada contoh yang kedua di sini. Jadi, program ini juga mendakwa dalam yang Komen sehingga atas bahawa ia harus mencetak sepuluh bintang, tetapi ia tidak. Apa yang bug di sini? Jadi, what-- dan maaf, mari kita jelas. 10 bintang. Satu bagi setiap baris, tetapi ia tidak. Jadi, sebenarnya, saya pergi ke hadapan dan menyusun yang satu ini kerana ia sedikit kurang membersihkan berdasarkan perihalan itu. Biar saya pergi ke dalam direktori sumber kami. Membuat kereta satu slash dot, satu kereta. OK, saya melihat 11 bintang, yang masih bermasalah, tetapi mereka juga semua berada dalam satu baris. Apakah isu itu di sini? Yeah. PENONTON: [didengar]. SPEAKER 1: Ya. Jadi ini adalah kehalusan yang anda boleh ingat saya membuat sebutan ringkas. Walaupun segala-galanya kelihatan cantik, dan ia baik dilekukan, dan ia jenis kelihatan calar seperti di garis 16 dan 17 adalah, sesungguhnya, dilekukan di bawah bahawa untuk gelung. Itu tidak penting. Komputer tidak tahu atau melihat ruang putih. Ruang putih adalah hanya untuk kita manusia, segi gaya. Komputer tidak tahu apabila anda mempunyai pendakap kerinting, yang akan, sesungguhnya, menyelesaikan masalah ini. Jadi, jika kita benar-benar masuk dan jelas dimasukkan ke dalam ini pendakap kerinting yang akan menyelesaikan masalah ini dengan menjelaskan kepadamu pengkompil bahawa saya sebenarnya ingin melaksanakan dua baris kod sekali lagi, dan sekali lagi, dan lagi. Tetapi apa yang penjelasan yang asas? Betul? Kami tidak tegas perlu kerinting pendakap sepanjang masa, walaupun ia mungkin yang terbaik amalan untuk masuk ke dalam tabiat itu pula walaupun ia menambah dua aksara untuk kod anda. mengapa? PENONTON: [didengar]? SPEAKER 1: Ya jadi itu penyelesaian yang lain sama sekali. Betul? Terutamanya jika pada pandangan pertama anda tidak benar-benar menghargai apa yang sedang berlaku. Nah, pasti kita boleh hanya melakukan dua perkara sekaligus dan hanya mengelakkan masalah sama sekali. Dan itulah denda, tetapi kini, untuk tujuan hari ini, apa yang satu penjelasan pepijat? Kenapa semua orang-bintang dalam satu baris? Ya? PENONTON: Nampaknya jika anda mempunyai satu baris kod, anda boleh melakukannya tanpa mereka. SPEAKER 1: Tepat sekali. Ini hanyalah konvensyen manusia. Orang ramai menyedari bahawa ia adalah satu sedikit menjengkelkan atau membosankan perlu meletakkan pendakap kerinting semua masa jika semua yang anda mahu lakukan adalah melaksanakan satu baris kod. Jadi, manusia telah memilih beberapa masa lalu bahawa itulah denda. Jika anda ingin meletakkan semua gelung anda kepada hanya garis yang salah seperti ini, itulah denda dengan single koma bertitik pada akhir. Tetapi anda hanya boleh melakukan satu itu talian tanpa pendakap kerinting. Jadi, apabila gaya CS50 panduan seperti yang akan menunjukkan anda kepada, anda akan melihat bahawa umumnya ia adalah tabiat yang baik untuk masuk ke dalam ini sehingga anda kesesatan agak selesa dari jenis-jenis konvensyen dan melakukan perkara yang anda sendiri. Selagi anda sendiri konsisten. Dan kita akan bercakap lebih lanjut mengenai gaya sedikit lewat hari ini. Jadi, biarlah saya membuka satu program lain. Sudah tentu, kita perlu menetapkan bahawa 10 juga. Biar saya pergi ke hadapan dan menulis sebenar program cepat yang saya akan memanggil, katakan, gelung dot C. Jadi, gelung dot C. Dan dalam gelung dot C saya akan mempunyai, termasuk saya standard / O dot H int tidak sah utama. Dan sekarang mari kita lakukan, sesungguhnya, gelung. Jadi, 4 int Saya mendapat sifar. Saya adalah kurang daripada, katakan, 50. Saya plus, plus. Dan kemudian di sini mari kita teruskan dan jangan mencetak F. Dan kemudian saya ingin mencetak Saya dan barisan baru, koma bertitik. Dan ini perlu mencetak semua nombor dari sifar sehingga 50? Seorang ketua beberapa mengangguk. Beberapa nos. Apakah pepijat sudah? Apakah kesilapan yang mudah saya buat? Yeah. PENONTON: [didengar]. SPEAKER 1: Ya. Jadi, walaupun ia kelihatan seperti ini adalah apa yang saya berniat, ingat bahawa saya juga hanya satu watak ASCII. Jadi, jika saya katakan, print "I." Ia benar-benar akan untuk mencetak I. Jadi, jika saya mahu plug-in pemegang tempat yang nilai saya benar-benar perlu untuk melakukan ini dan kemudian palam-dalam Nilai I dinamik. Jika tidak saya hanya akan mendapat 50 I pada skrin. Jadi, biarlah saya pergi ke hadapan dan membuat gelung ini, menjalankan, dan, sememangnya, kita semua jalan sehingga melalui 49. Dan jika saya tatal ke masa saya melihat nombor sifar pada permulaan. Nah, bagaimana jika saya jenis skru sehingga? Bagaimana jika saya melakukan ini? Hanya kerana saya tidak berfikir. Apa yang program ini. Setelah menyusun semula dan berlari, akan melakukan secara logik? PENONTON: Tiada apa-apa. SPEAKER 1: Tiada apa-apa. Kenapa begitu? PENONTON: Saya direka untuk sifar. Jadi, keadaan ini palsu. SPEAKER 1: Ya, betul-betul. Semua kod adalah betul, sintaksis. Ini akan menyusun, ini Kod akan berjalan, tetapi ia tidak akan berbuat apa-apa yang berguna kerana saya memulakan saya kepada sifar. Kami kemudian memeriksa, adalah saya lebih besar daripada 50? Jelas sekali, tidak, tidak. Jadi gelung tidak melaksanakan sama sekali. Bagaimana jika kita melakukan sesuatu sedikit lebih melulu? Jadi, apa yang jika kita lakukan seperti int Saya mendapat sifar. Dan sekarang mari saya menggunakan manakala gelung, yang merupakan keadaan lain. Dan semasa saya katakan, ketika saya adalah lebih besar daripada atau sama dengan sifar, dan kemudian di sini Saya teruskan dan menyimpan fail, membuat gelung. Dan saya kira-kira untuk menjalankannya. Apa yang saya akan melihat ini masa dengan gelung sementara? Yeah. PENONTON: Satu gelung tak terhingga? SPEAKER 1: gelung tak terhingga? Ya, dan mengapa? PENONTON: Kerana ia sentiasa sifar. SPEAKER 1: Ya. Jadi, saya adalah dimulakan sebagai sifar. Sudah tentu saya sentiasa lebih besar daripada atau sama dengan 0 sebagai hasilnya. Jadi, saya hanya akan melihat ini tak terhingga. Dan kini, ini telah datang sekali atau dua kali kepada ketua kursus ini. Apa yang berlaku apabila anda mempunyai gelung tak terhingga? PENONTON: Kawalan C. SPEAKER 1: Ya. Jadi Kawalan C akhirnya akan bertindak balas. Malangnya, kami telah dicetak berjuta-juta dan berjuta-juta sifar sudah dan sebagainya komputer mempunyai jenis mendapat mendahului saya. Jadi, ia akan mengabaikan saya untuk sedikit. Tetapi jika anda hanya tekan Control C beberapa kali pada Mac atau PC papan kekunci anda, akhirnya ia harus, sesungguhnya, ditamatkan. Dan jika tidak, kami akan menunjukkan kepada anda beberapa teknik tidak lama di mana anda sebenarnya boleh membunuh secara paksa program, sama seperti dalam Windows dan Mac OS, jika perlu. Tetapi mari kita cuba sesuatu yang lain. Mari kita sebenarnya kenaikan I. Adakah ini masih akan menjadi tak terhingga? Biarlah aku berlari ini. Dan sekarang anda boleh jenis melihat apa yang berlaku. Ini juga adalah gelung tak terhingga. Tetapi ini adalah sedikit soalan helah. Adakah ini akan mencetak nombor selama-lamanya? PENONTON: No. SPEAKER 1: No. Mengapa? Saya mendengar beberapa nos di sini. Someone-- Yeah. PENONTON: Anda tidak mempunyai cukup bit untuk benar-benar menyimpan berterusan. SPEAKER 1: Baiklah. Jadi, saya tidak mempunyai cukup bit untuk menyimpan berterusan. Jadi, apa yang akan berlaku? Ia hanya akan berhenti? PENONTON: Pada satu ketika ia akan menutup the-- SPEAKER 1: Ia akan ditutup gelung ke bawah, tetapi mengapa? Apa yang akan berlaku pada sangat akhir sempadannya? Ya? PENONTON: Ia akan kitaran kembali ke nombor negatif. SPEAKER 1: Untuk nombor negatif, atau jika kita hanya merawat positif, sifar sekurang-kurangnya. Jadi ya, sama sekali. Ingat bahawa kita melihat masa lalu bahawa jika anda kenaikan bit anda salah terlalu banyak kali, dan kami sudah berjaga limpahan kapasiti int anda atau apa sahaja jenis data adalah, anda berada akan membungkus, mungkin, dua nombor negatif. Atau jika anda telah menentukan bahawa anda pelbagai hanya boleh menjadi positif, yang anda boleh lakukan, tetapi kami telah tidak dilihat itu lagi, anda mungkin berakhir sekurang-kurangnya kembali pada sifar. Walaupun, sebenarnya ya. Dalam kes ini, negatif nombor, di mana gelung akan menamatkan kerana saya tidak, sebenarnya, lebih besar daripada atau sama dengan sifar jika ia negatif. Jadi, malangnya, bagaimana lama kita perlu menunggu? Sekarang kita berada sehingga apa, 2000000-ish? Kita seperti 2 bilion, kita akan perlu menunggu sehingga kita benar-benar dapat melihat gejala ini. Tetapi kita dapat melihat ia sedikit lebih cepat, maybe-- mari kita lihat jika kita boleh mengganggu. Datang pada. Walaupun menu yang muncul perlahan-lahan. Baiklah. Jadi, kita akan kembali kepada yang lama. Ia adalah satu yang baik time-- sialan, anak anjing. Ia adalah masa yang baik untuk beberapa pengumuman. Jadi, jika anda mungkin suka untuk melibatkan diri dalam YHack, yang acara yang ditaja oleh rakan-rakan kami di Yale. Dan, sememangnya, beberapa kursus ini TFS di Yale adalah terlibat dengan ini. YHack merupakan antarabangsa hack-a-thon yang dianjurkan oleh dan diadakan di Yale, membawa bersama-sama 1500 seperti penggodam yang berfikiran kreatif dan semua seluruh dunia. Jika ini adalah kepentingan, lihat di sini. Jika ini adalah terlalu ringkas pada skrin, mengambil lihat slaid hari ini untuk URL untuk yhack.org. Jadi, juga beberapa pengumuman yang cepat. Jadi, secara rasmi bahagian akan mula minggu depan di sini dan di New Haven. Perlu diingat anda akan mendapat satu e-mel kemudian hujung minggu ini yang paling mungkin. Ia mengambil masa yang lama untuk CS50 seksyen, memandangkan semua orang di kelas dan semua orang bergerak di sekitar. Dan semua Felo Pengajaran ' jadual juga masih mengukuhkan, tetapi harap sabar menunggu untuk e-mel dan jika perlu berkenaan, anda boleh semula seksyen di sana selepas. Study.cs50.net. Jadi, walaupun anda seorang peserta yang berterusan di bahagian, menyedari bahawa hampir semua daripada sumber-sumber yang kita gunakan dalam bahagian boleh didapati secara umum di CS50 Belajar di URL ini di sini. Jadi, jika anda pernah suka kepada kajian semula bahan daripada bahagian, atau membaca di hadapan, atau anda tidak boleh membuat ia beberapa minggu, sedar bahawa slaid sampel, dan masalah, dan definisi, dan banyak lagi semuanya di sana juga. Waktu pejabat menyambung semula hari ini, dan esok, dan Rabu, dan Khamis menyemak kursus ini laman web untuk jadual. Dan juga, kini melancarkan hari ini adalah CS50 Bincangkan. Jadi, jika dan apabila anda mempunyai soalan untuk satu sama lain atau untuk kakitangan kursus ini, dan biasanya bekerja pada beberapa set masalah, sedar bahawa anda tidak semestinya perlu kembali kepada manusia depan anda. Jika tidak ada seorang pun di sana, anda boleh mendekati kami dan rakan-rakan sekelas dalam talian melalui CS50 Bincangkan. Jadi, ini adalah perbincangan papan untuk kursus ini, dan sedar bahawa ini mungkin yang terbaik tempat untuk bermula apabila anda mempunyai soalan apabila di luar waktu pejabat khususnya. Makan tengah hari yang akan bermula pada minggu ini juga. Pada Bomba dan Ais [Didengar] di New Haven. Sila lihat pada perjalanan ini laman web untuk RSVP. First come, first serve untuk itu. Jika anda tidak mendapat dalam minggu ini kami akan melakukan yang ini paling setiap hari Jumaat sepanjang tempoh itu. OK, dan kini satu perkataan tentang penggredan. Terutamanya dalam kita masukkan masalah menetapkan satu, yang keluar minggu ini, dan masalah menetapkan dua dan selepas itu. Bagaimana kita pergi tentang menilai P set dan menilai kualiti itu? Jadi, ia adalah empat paksi yang kita gunakan dalam CS50, dan mereka empat sini. Skop, yang menangkap pada angka yang asas betapa banyak P set adakah anda menangani. Ia kira-kira sepadan dengan usaha, dan ia adalah cara kami untuk menguasai adakah anda cuba separuh P ditetapkan, semua P yang ditetapkan. Ini adalah sesuatu yang mudah untuk mendapatkan yang sempurna skor pada jika anda lakukan, sesungguhnya, cuba setiap aspek P yang ditetapkan. Jadi, ingatlah bahawa dalam fikiran. Ketepatan adalah tepat. Adakah kerja kod anda sebagai spesifikasi dan sebagai sampel penyelesaian staf mencadangkan bahawa kod anda perlu, sebenarnya, bekerja. Semak 50, jika anda telah tidak dipenuhi ia lagi, adalah di P menetapkan satu spesifikasi dan akan secara amnya memberikan anda ya / tidak jawapan sama ada kod anda adalah betul. Sekurang-kurangnya setakat yang kita akan untuk menilai ia berdasarkan ujian yang kita berjalan dalam program itu. Design adalah lebih subjektif. Ini adalah bagaimana yang ditulis dengan baik adalah kod anda. Dan ini adalah sesuatu yang anda akan mendapat lebih baik pada masa ke masa, dan ia adalah sesuatu yang kita akan memberi maklum balas lebih kualitatif pada. Dan dengan reka bentuk saya mungkin bermakna tidak lama anda mungkin akan terdorong dalam beberapa P bersedia untuk melakukan sesuatu loopingly, tetapi mempunyai mungkin tiga, atau empat, atau lima gelung hadapan bersarang atau semasa bersarang gelung. Yang biasanya perlu mula untuk membuat anda merasa jijik dan secara amnya akan menjadi reka bentuk yang tidak dipertimbangkan. Dan anda akan mula melihat di dalam kelas dan daripada cara kelas yang baik untuk melakukan sesuatu, cara-cara yang tidak baik dalam melakukan sesuatu yang semua mungkin betul, tetapi tidak semestinya direka dengan baik. Seperti menulis esei. Anda mungkin boleh untuk meletakkan perkataan pada halaman yang tatabahasa yang betul, tetapi esei atau tesis mereka dalam hanya benar-benar tidak keruan atau unpersuasive. Dan sebagainya yang mungkin analog di dunia bertulis daripada reka bentuk yang tidak atau baik. Dan gaya, juga, adalah agak subjektif. Tetapi sekurang-kurangnya kita harapkan konsisten. Ini adalah bagaimana cantik adalah kod anda. Adakah perkara-perkara baik dilekukan? Adakah pembolehubah anda juga dinamakan / Apakah semua kurungan anda dan pendakap kerinting selaras seperti yang seharusnya? Kami mempunyai panduan gaya CS50 sebagai set masalah akan menunjukkan anda di. Mereka lebih selesa berada dialu-alukan untuk sesat itu selagi anda bekerja sendiri konsisten. Dan ini juga adalah satu pengajaran kami akan mengukuhkan dalam seksyen. Jadi, jika semua ini adalah sedikit cepat, merealisasikan P set dan seksyen akan masuk ke dalam lebih mendalam tidak lama lagi. Tetapi secara umumnya kita ada sangat sedikit baldi untuk CS50. Skor umumnya pada skala yang satu hingga tiga, atau 1-5. Kami sebenarnya-- dan saya tidak boleh mengatakan ini cukup pada minggu pertama. Tiga adalah baik. Jadi, walaupun, ya, tiga daripada lima normal, matematik, mungkin 60 peratus atau seperti tolak D. Tiga adalah, sebenarnya, yang baik. Dan, sebenarnya, kami menjangka kebanyakan pelajar di dalam kelas untuk memulakan jangka masa sekitar berdua-dua, dan bertiga, dan merangkak. Mungkin tidak begitu banyak lima. Tidak terlalu banyak yang. Tetapi secara umumnya bermula pada tempat yang manis dalam keluk supaya sebagai masa berlalu, ada sebenarnya ruang untuk, dan peluang untuk perkembangan atas. Jadi, jangan menyamakan tiga dengan 60%. Ia lebih abstrak daripada itu. Formula yang kita mengira gred wajaran seperti berikut. Ketepatan adalah bernilai yang paling. Design adalah bernilai sedikit kurang. Gaya bernilai sedikit kurang. Dan ini secara amnya menangkap jumlah masa yang masuk ke dalam mendapatkan setiap paksi ini sahaja yang betul. Gaya adalah sangat mudah, harus super cepat, tetapi ia adalah satu tabiat yang mudah untuk mendapatkan malas tentang. Ketepatan mungkin mengambil anda kebanyakan masa. Mengejar beberapa kekuatan bug mengambil bahawa jam tambahan atau lebih, dan sebagainya, jaringan akhirnya menangkap itu. Dan sebagainya, kini perkataan yang lebih serius. Sejak CS50 mempunyai perbezaan, untuk lebih baik atau untuk lebih teruk, menjadi mungkin lebih baik berkenalan dengan isu-isu akademik kejujuran daripada kebanyakan mana-mana kursus lain. Dan sesungguhnya, ia adalah untuk pengetahuan saya yang kami menghantar lebih ramai pelajar, malangnya, untuk tujuan disiplin setiap tahun akibat. Jadi, demi kepentingan penuh pendedahan, mari kita bercakap secara ringkas tentang apa yang berlaku di dalam CS50, dan apa yang anda boleh lakukan, dan apa yang anda boleh menjadi sedar. Jadi, di sini sejak tahun 2007, apabila Saya mewarisi kursus ini, adalah jumlah kes Papan Iklan. Papan iklan adalah disiplin Harvard badan, atau kini Penasihat Honor, mana kes-kes yang dirujuk apabila pelajar melakukan sesuatu yang kursus ini sukatan pelajaran tidak munasabah. Tidak terdapat satu pola sebenar di sini, saya akan berkata. Ia turun naik ke atas tahun tetapi secara umumnya ini adalah jumlah kes-kes yang dirujuk. Bilangan pelajar yang terlibat? Ia juga berbeza-beza. Biasanya, pada tahun lepas untuk Contohnya, 29 pelajar di Harvard adalah Ad menaiki, jadi untuk bercakap. 29 daripada mereka pelajar semasa, dua daripada mereka pelajar terlebih dahulu, yang bekerjasama dalam beberapa cara yang tidak diingini. Dan kemudian dari segi peratusan, ia biasanya kira-kira 3% kelas yang, malangnya, membuat jenis-jenis keputusan. Jadi, tahun lepas adalah 3.5% badan pelajar CS50 itu adalah Ad menaiki, jadi untuk bercakap. Jadi, apakah semua ini bermakna? Dan apa yang kita benar-benar melakukan? Jadi, sebagai pendedahan sepenuhnya, kita sama sekali, kerana ahli-ahli sains komputer, mempunyai alat perisian di tangan kita dan ia sangat mudah bagi kita, dalam keadilan, rakan-rakan yang lain yang tidak menyeberangi ayat-ayat ini untuk menyeberangi membandingkan setiap penyerahan tahun ini terhadap setiap penyerahan sejak lapan tahun yang lalu. Perisian melakukan ini. Dan akhirnya ia mata manusia yang memutuskan sama ada atau tidak untuk merujuk beberapa perkara untuk pengadilan lanjut, tetapi perisian pasti membantu. Dan ini, terus-terang, sebab itu yang saya rasa kita ada nombor seperti besar dalam CS50. Ia bukan kerana CS50 pelajar atau CS lebih umumnya apa-apa kurang jujur daripada mana-mana pelajar lain, ia hanya kita mempunyai alat dan teknik-teknik yang boleh digunakan untuk mengambil pas pertama ini. Tetapi kita memerhatikan pada semua perkara-perkara ini dan juga, sekali lagi, demi kepentingan mengiktiraf kerja yang yang sedang dimasukkan dalam dengan majoriti super kelas. Dan dasar kursus ini kejujuran akademik, walaupun ia adalah sekumpulan perenggan panjang dengan sekumpulan peluru yang diharapkan agak boleh dibaca, ia benar-benar tidak mendidih ke munasabah. Dan peraturan yang terbaik daripada ibu jari yang kami menawarkan sehingga dalam sukatan pelajaran adalah ini, intipati bagi semua kerja yang mengemukakan kepada kursus ini mesti anda sendiri. Dan sesungguhnya, di hampir semua orang-orang kes yang dirujuk untuk tindakan tatatertib ia adalah kerana seseorang lewat pelajar malam biasanya bertukar kod nya lebih secara terang-terangan kepada seorang rakan sekelas, yang kemudiannya diterima pakai keseluruhannya atau ketara daripadanya. Tetapi benar-benar, ini adalah OK. Dan sesungguhnya, di pejabat jam, slip kertas anda telah diserahkan jika anda datang oleh pejabat jam seminggu lalu menggalakkan sebanyak. Anda benar-benar dialu-alukan dan digalakkan untuk membincangkan set masalah dengan rakan-rakan. Untuk membantu antara satu sama lain apabila tersandung. Tetapi secara umumnya kemestian sekiranya menjadi ini, "apabila kamu minta tolong, anda boleh menunjukkan kod anda kepada orang lain, tetapi anda tidak boleh melihat mereka. " Jadi, dalam erti kata lain, jika saya bergelut dengan beberapa set P dan saya duduk di sana dalam bilik makan, atau di perpustakaan, atau di dalam bilik darjah cuba untuk mencari beberapa kesalahan, Saya pasti boleh tunjukkan kod saya pada skrin saya kepada orang yang duduk di sebelah kepada saya, pasti kakitangan, tetapi juga rakan sekelas. Tetapi jika penyelesaian yang rakan sekelas saya menawarkan adalah, oh, di sini hanya mengambil lihat apa Saya lakukan, yang melintasi garisan. Dan saya akan berani mengatakan bahawa secara amnya satu perkara yang munasabah bagi kebanyakan orang untuk dengan mudah mengesan garis. Dan sebagainya, melihat sukatan pelajaran untuk maklumat lanjut. Dan sekarang salah satu yang lebih aspek kontroversi sukatan pelajaran CS50 yang saya fikir saya akan bercakap dengan dalam kesimpulan di sini adalah klausa penyesalan kononnya. Jadi, di sini semua baik cetak. Tetapi secara umum yang telah kita lihat sejak 8 tahun campur lalu itu, sesungguhnya, hampir semua CS50 kes-kes kesalahan akademik telah hasil hanya miskin membuat lewat malam keputusan. Hasil daripada tekanan, hasilnya kekurangan makan, kurang tidur, terlalu banyak set P, terlalu banyak tarikh akhir, terlalu banyak komitmen. Tekanan membina dalam 2:00, 3:00 AM, 4:00 AM, dengan tarikh akhir yang menjulang. Kebanyakan pelajar dalam kes-kes baru sahaja membuat keputusan yang buruk bahawa mereka dengan baik mungkin menyesal keesokan harinya jika tidak minit kemudian, tetapi sehingga tahun lepas tidak ada injap keluaran yang pelajar-pelajar boleh sebenarnya membuka untuk benar-benar menangani kepala masalah pada tanpa ketakutan menjadi boot dari kolej sama sekali. Dan, sememangnya, kami memperkenalkan ini fasal penyesalan pada tahun lepas, yang mengatakan bahawa jika dalam 72 jam, tiga hari, menyeberangi beberapa baris ditetapkan dalam sukatan pelajaran anda tampil ke hadapan untuk satu kursus ini kepala dan kami akan mempunyai sembang mengenainya. Masih terdapat beberapa hasil, bertentangan dengan apa yang telah dilaporkan yang berlawanan. Masih ada beberapa hasil yang adalah diambil tindakan oleh kursus ini, umumnya zeroing satu set P atau mengambil tindakan lain, tetapi kita akan, sesungguhnya, mengendalikan diri kita dan tidak maka kembalikanlah ia lebih tinggi adalah hasil mungkin menjadi lebih teruk. Dan, sememangnya, untuk berkongsi apa yang berlaku tahun lepas, dalam tempoh lapan tahun, dan kini sembilan tahun, pengajaran kursus ini dan selepas tinkering dengan pelbagai tombol, beralih pelbagai mendail lebih masa lalu beberapa tahun kejujuran akademik, dan melihat setiap data yang tidak jelas kesan, walaupun ucapan seperti ini, ini adalah tangan ke bawah perkara yang terbaik kami telah diperkenalkan pedagogically dalam tempoh lapan tahun bersama-sama ayat-ayat ini dalam CS50. 19 pelajar datang ke hadapan di bawah fasal ini tahun lepas. Kami tidak mengambil sebarang tindakan untuk tujuh orang pelajar, menentukan bahawa mereka tidak perlu bimbang. Mereka tidak mempunyai, pada hakikatnya, melintasi garis, tetapi ia adalah chat yang baik untuk mempunyai tetap. Kami menumpukan perhatian 11 markah yang telah dihantar. Dan dalam satu kes kami menyoal pelajar untuk melakukan set masalah. Tetapi yang lebih menarik, secara jujur, dengan ini 19 perbualan, yang merupakan cara yang lebih daripada saya dijangka mempunyai, setiap daripada mereka 10 minit untuk mungkin satu jam panjang, juga membawa untuk menyalakan beberapa isu mengenai isu-isu kekeluargaan, isu-isu kawan, isu-isu kesihatan mental yang kita ketika itu bekerja, dengan berkat, pemastautin pelajar Dekan, atau rakan-rakan, atau mana-mana nombor lain sumber sokongan. Jadi bahawa ini adalah dengan jauh salah kegunaan yang terbaik pada masa ini dan salah satu daripada campur tangan terbaik. Dengan itu berkata, ia tidak mempunyai input kepada kadar pengesanan ketidakjujuran akademik amnya. Dan saya berani mengatakan, subset ini pelajar tahun lepas adalah demografi yang kita sebelum ini tidak pernah dikenal pasti sebelum dan tidak pernah disambung sebelum ini. Dan sebagainya, ini adalah kisah-kisah kejayaan yang indah walaupun mereka telah dibawa ke cahaya dalam masa kurang daripada keadaan yang optimum. Jadi, ingatlah ini kerana anda membuat, mungkin, beberapa keputusan yang buruk diri lewat malam, bahawa ada jalan lain begitu lama sebagai pelajar di dalam keadaan yang memiliki dan datang ke hadapan supaya kita boleh mempunyai bahawa jenis chat dan menanganinya dengan cara yang itulah pendidikan, dan kemudian kita boleh meletakkannya di belakang kita pada hari berikutnya. Jadi tanpa berlengah-lengah lagi, mengambil tepi off perbualan ini, sebab anak anjing sehingga IS hanya untuk memecahkan ais untuk seketika. Dan malangnya, mereka semuanya, tetapi apa yang sepatutnya berlaku di sini adalah semua orang sepatutnya untuk kagum dan jenis berehat selepas itu perbualan yang sangat berat. Tetapi nampaknya saya meletakkan anak anjing tidur. Tetapi jika anda pergi ke ini CS50 anak anjing laman web slash, anda boleh menonton mereka sepanjang hari. Terutama mungkin 2:00, atau 03:00, atau 04:00 pada waktu malam untuk melihat melegakan tekanan kecil di sana. Jadi itulah mengurangkan anak anjing. Baiklah. Tidak menyeronokkan itu? OKAY. Jadi, kembali kepada beberapa komputer sains, jika saya boleh. Jadi, ingat bahawa masa lalu kami mula tidak melihat hanya pada utama, yang adalah fungsi lalai, apabila bendera hijau diklik setara, tetapi kita juga mula secara ringkas menulis beberapa fungsi kita sendiri. Dan setakat ini tiada seorang pun daripada fungsi-fungsi ini telah begitu besar atau penuh daging. Anda akan masuk ke dalam orang-orang yang lebih besar fungsi mungkin, P menetapkan 2, P menetapkan 3, pasti P menetapkan 4 dan seterusnya. Buat masa ini sebahagian besar daripada program anda, jika tidak semua daripada mereka, sudah tentu untuk P set 1 boleh dilakukan sepenuhnya dalam utama. Jika program anda hanya lima baris, 10 baris, malah 20 barisan panjang, sempurna munasabah untuk menulisnya semua dalam utama dan tidak kepada lebih merumitkan kod anda, tetapi apa yang kita lakukan hari ini dan seterusnya cuba juga memperkenalkan beberapa teknik reka bentuk yang baik supaya sebagai kod anda mendapat lebih rumit dan sebagai masalah anda mahu untuk menyelesaikan mendapat lebih keras dan lebih menarik anda mempunyai, jenis, alat-alat dalam toolbox anda dengan yang untuk mereka bentuk penyelesaian yang baik kepada mereka. Jadi, mari kita lihat cepat kembali program ini dari minggu lepas saya, yang adalah fungsi sifar dot C. Dan perhatian bahawa, agak mudah, ia kelihatan seperti ini dengan dua fungsi, utama dan nama cetak. Dan memikirkan kembali atau mungkin kejuruteraan terbalik hari ini, apa yang motivasi untuk memperkenalkan satu majlis di talian 28 dipanggil, Nama cetak? Atau apakah ini satu contoh dalam segi prinsip atau bawa pulang, jika anda akan. Sesetengah murmurs. Apa? Yeah penguraian supaya berfungsi adalah jenis cara mewah untuk mengatakan, mengurai program anda kepada bahagian-bahagian konstituennya dan kemudian menggunakan bahagian-bahagian untuk berhimpun secara keseluruhannya. Jadi, itu juga adalah hanya jenis daripada hal yg sudah, tetapi ini mungkin juga contoh yang lebih baik daripada sesuatu yang hanya dipanggil abstraksi. Betul? Pengekstrakan akan menjadi salah satu tema yang berulang-ulang dalam CS50 dan juga sains komputer secara umum kerana ia adalah teknik yang anda boleh menyelesaikan masalah dengan lebih berkesan kerana anda boleh menulis penyelesaian yang lebih intuitif dan dengan cara yang bersisik dan boleh difahami oleh orang lain. Apa yang saya maksudkan dengan itu? Jadi, boleh dikatakan ia adalah lebih mudah dibaca untuk melihat program seperti ini, super pendek walaupun ia adalah. Apabila anda melihat pada baris 22 bahawa ada fungsi yang dipanggil, nama cetak. Bahawa nama sahaja mengatakan apa yang dilakukan. Fungsi yang nampaknya mengambil input antara kurungan, yang dan nampaknya membuat sesuatu, mungkin mencetak nama. Dan sebagainya, walaupun kita benar-benar boleh mempunyai melakukan apa yang kita lakukan pada minggu yang lalu, yang hanya mengambil baris ini sebenar kod, menghilangkan ini, dan mendapatkan menghapuskan ini semua bersama-sama, kita semacam disarikan jauh tanggapan mencetak nama. Saya tidak peduli jika anda menggunakan cetak def. Saya tidak peduli jika anda mempunyai peratus S dan garis sendeng terbalik N. Ini adalah butiran yang amat sukar difahami. Apa yang saya tidak mengambil berat tentang sebagai programmer mencetak nama. Dan sebagainya, apa cara yang lebih baik untuk berbuat demikian daripada dengan memanggil fungsi, nama cetak? Dan sebagainya, yang merupakan salah satu motivasi untuk berbuat sesuatu seperti ini. Menjadikan kod lebih mudah dibaca, lebih boleh diguna semula, dan juga diri deskriptif. Sekarang, mari kita lihat pada contoh yang lain, yang merupakan fungsi satu, mana kita mempunyai di sini. Jadi, ini adalah mungkin lebih menarik kerana, dalam kes ini, Saya tidak mahu hanya mendapat int. Saya ingin mendapatkan int yang positif. Dan ternyata untuk mendapatkan yang positif int yang anda perlu lakukan sekumpulan kerja keras. Betul? Ia bukan satu talian mudah memanggil seperti nama cetak adalah, yang diakui kurang menarik. Untuk mendapatkan int yang positif, logically-- biarlah saya skrol kembali ke bawah untuk menyembunyikan ini. Apa yang anda perlu lakukan? Seperti semua alat yang kita ada pada masa ini sedang perkara seperti cetak def dari Standard Perpustakaan dan juga dari perpustakaan CS50 kami mempunyai Dapatkan Int, dan Dapatkan Float, Dapatkan Long Long, Dapatkan String, tetapi satu-satunya, Germane, sekarang ialah Dapatkan Int. Jadi, jika alat yang hanya anda mempunyai dalam kotak alat anda Dapatkan Int, bagaimana kita pergi tentang melaksanakan ia untuk mendapatkan int positif? PENONTON: Buat log dan semak sama ada input yang mereka memberi adalah positif atau tidak. SPEAKER 1: Perfect. Tepat sekali. Satu lagi alat yang kita ada dalam kita toolbox dari satu atau dua minggu yang lalu hanyalah membina gegelung. Dan sebagainya, yeah, jika kita menggunakan seketika gelung, atau do manakala gelung, atau hadapan yang gelung kita mungkin boleh lari dengan mana-mana dalam bentuk tertentu. Kita boleh melaksanakan konsep get int positif dengan hanya menggunakan Dapatkan Int, dan kemudian hanya menyimpan memanggil lagi dan pestering pengguna sehingga dia benar-benar memberikan kita apa yang kita mahu. Dan sehingga kini, ini abstraksi proses mendapat int yang positif ke dalam fungsi yang dipanggil Dapatkan Positif Int adalah lebih sedikit menarik kerana melihat ini. Ini adalah seperti 10 tambah baris kod yang terlibat dalam mendapatkan int yang positif, dan saya tidak peduli bagaimana anda melakukannya. Apa yang saya peduli adalah bahawa anda boleh melakukannya, dan saya telah tersembunyi segala butir-butir di belakang fungsi dipanggil Dapatkan Positif int itu, sesungguhnya, mempunyai tugasan ini manakala gelung. Dan melihat minggu lalu bagi sintaks di sana, tetapi ia hanya mengisytiharkan N, dan ia mencetak keluar arahan kepada pengguna. Ia menyeru Dapatkan Int dan kemudian ia memeriksa keadaan ini sekali lagi, dan sekali lagi, dan sekali lagi sehingga pengguna bekerjasama. Oleh sebab itu, satu semakan waras sahaja. Bagi mereka yang mungkin biasa dengan beberapa pengaturcaraan, mengapa N diisytiharkan, mengapa saya membuat N luar do manakala gelung? Mengapa pada baris 29 dan tidak pada seperti 33, misalnya. PENONTON: Kerana apabila anda mengisytiharkan ia di luar, ia jenis lebih, scope-- yang lebih besar SPEAKER 1: Baik. PENONTON: --and jika anda mengisytiharkan ia di dalam gelung, [didengar] kerana ia tidak tahu mengenainya. SPEAKER 1: Tepat sekali. Jika saya boleh simplify-- ia adalah satu isu skop. Dan skop merujuk kepada konteks di yang berubah-ubah yang wujud atau boleh digunakan. Dan peraturan yang baik ibu jari di sini ialah secara amnya apabila anda mengisytiharkan atau membuat pembolehubah yang anda hanya boleh menggunakan ia di dalam yang paling dekat memeluk pendakap kerinting. Jadi apa maksudnya? Jika saya, sebaliknya, membatalkan dan pergi dengan sesuatu yang berasa sedikit lebih mudah. Betul? Line 32 hanya kelihatan lebih bersih kepada saya sekarang. Saya melakukan kedua-dua perkara di sekali dan kemudian memberikan tangan kanan ke tangan kiri. Masalahnya sekarang berdasarkan bahawa definisi skop adalah bahawa N boleh digunakan dalam talian 31 dan 32 di dalam gelung ini, tetapi di mana mengikut definisi yang ia tidak boleh digunakan? Selaras apa? Yeah. PENONTON: 35. SPEAKER 1: 35. Pasti tidak 35. Dan juga di mana lagi? PENONTON: 34. SPEAKER 1: Genap 34 adalah bermasalah kerana ia adalah luar pendakap kerinting. Dan sebagainya sebenarnya, mari kita lihat apa yang berlaku. Betul? Ini mungkin kelihatan sedikit intuitif atau tidak mungkin, tetapi mari kita lihat apa yang pengkompil telah mengatakan apabila kita pergi ke direktori sumber hari ini. Membuat fungsi satu. Oh, my god. Well, saya akhirnya selesai yang, dengan cara itu. Baiklah. Dan apa isu di sini? Sangat sukar difahami untuk melihat. Tetapi di sini adalah apa yang saya typed-- membuat fungsi satu. Berikut adalah apa yang membuat disebabkan, yang sebenarnya menggunakan dilafaz pengkompil dengan beberapa orang-orang bendera bahawa kita akan melihat sekali lagi tidak lama lagi. Dan sekali lagi, sentiasa kelihatan di ralat yang pertama, kerana ia hanya mungkin mempunyai melata yang kesan bermakna pada baris lain. Jadi apa ini bermakna bahawa masalah adalah dalam fungsi 1.c. Ia berada di talian 32. Dan ia di ruangan, atau watak, 13. Oleh itu, apabila editor teks anda yang boleh membantu anda mengenal pasti di mana isu ini. Jadi, jika saya tatal ke atas, apakah garis 32? Itu memang satu ini yang sudah menekankan n ubah hak sini-- yang tidak digunakan. Tetapi ia tidak digunakan. Saya menggunakannya. Tetapi pengkompil yang keliru, kerana ia hanya wujud di dalam skop ini. Oleh itu, saya tidak boleh menggunakannya di sini. Saya tidak boleh menggunakan di sini. Dan pengkompil, oleh itu, tidak peduli yang saya cuba. Ia seolah-olah yang tidak digunakan dalam skop yang sebenar. Oleh itu, kita boleh meluaskan skop dengan melakukan apa yang kami mula with-- int n. Dan walaupun ia tidak kelihatan elegan, mungkin, dan kami mengambil satu baris tambahan di sini, kini ia dalam skop mana-mana. Jadi mari kita cuba lagi. Oleh itu, satu fungsi. Nice. Dan kini jika saya jika saya menjalankan fungsi satu, mari kita negatif 10, -1, 0, 1, dan ia memang berkesan. Jadi ada penyelesaian yang lain di sini. Awak tahu tak? Bagaimana jika saya benar-benar sedang bergelut dengan ini? Saya tidak tahu di mana n sepatutnya pergi. Awak tahu tak? Saya hanya akan meletakkan ia semua cara di bahagian atas fail saya di sini. Apa yang akan lakukan, yang anda fikir? Ya? PENONTON: [didengar]. SPEAKER 1: Ya. Jadi saya telah membuat ia global, jadi untuk bercakap. Jika anda mempunyai pembolehubah itu di luar semua fungsi anda yang dibenarkan, dan kod yang harus menyusun, dan n kini boleh juga didapati bukan sahaja di get int positif, tetapi juga dalam main-- yang adalah membimbangkan sedikit kerana ada sudah menjadi n di utama, jadi lebih kepada yang dalam hanya moment-- yang tetapi ini akan dianggap sebagai reka bentuk yang tidak. Baiklah. Jika anda perlu mengambil jalan keluar sesuatu seperti, oh, saya akan hanya meletakkan ia di sini kerana kod seolah-olah menyusun biasanya tidak amalan terbaik. Sebaliknya anda mahu memilih skop yang sempit mungkin untuk pembolehubah anda, yang bermakna pergi dengan reka bentuk awal kami, yang adalah di sini. Sekarang sebagai diketepikan, jika anda tidak mempunyai yang sepercaman dinamakan-pembolehubah di sini, cara c akan mengendalikan this-- walaupun ini tidak akan berlaku terlalu often-- adalah bahawa ini adalah masih betul-betul halus di sini. Tetapi definisi ini n selaras 22 akan shadow satu global. Jadi yang satu ini akan bekerja dalam utama, dan yang global sebenarnya akan dikenakan apabila anda berada dalam mendapatkan int positif Tetapi lebih kepada yang masa yang lain, tetapi hanya bagi mereka yang ingin tahu. Jadi ringkasnya, kita menetapkan ini di sini. Sekarang mari kita mengusik selain dua-bahagian lain sebelum kita melihat satu baris terakhir kod dalam program ini. Dapatkan int positif. Pada bahagian kiri daripada perkataan adalah int perkataan. Apa yang menandakan yang anda fikir? Setakat ini kami telah kebanyakannya dilihat tidak sah. Ya? PENONTON: Ia jenis pembolehubah yang anda meminta kira-kira. SPEAKER 1: Ya Ia jenis, biarlah saya tidak mengatakan berubah-ubah, tetapi jenis nilai bahawa saya meminta kembali untuk. Dan sesungguhnya, itulah intuitif sini, mudah-mudahan. Betul? Jika anda ingin mendapatkan int positif, apa yang anda mahu function-- seperti kami sukarelawan dari minggu yang lalu ke tangan anda kembali sekeping kertas dengan int di atasnya? Dan dengan itu kita telah dinyatakan bahawa apa yang dikenali sebagai jenis pulangan fungsi ini adalah mendapatkan int positif. Jika kita tidak mahu ia kembali apa-apa, anda mengatakan tidak sah. Jika anda mahu ia kembali rentetan, anda mengatakan tali. Jika anda mahu ia kembali apungan, anda mengatakan apung. Tetapi satu-satunya yang boleh digunakan di sini secara logik, kerana saya menggunakan get int, walaupun saya menyekat kepada nilai-nilai positif, adalah untuk kembali int. Jadi sebaliknya, apakah maknanya bahawa ada kekosongan dalam kurungan? Apa yang kurungan umumnya menentukan? Ya? PENONTON: Ia bermakna fungsi ini tidak benar-benar mendapatkannya. SPEAKER 1: Ia bermakna fungsi ini sebenarnya tidak mendapat apa? PENONTON: Satu input. SPEAKER 1: input, sekalipun. Maka sesungguhnya, jika kurungan di sini anda nyatakan tidak sah, yang hanya bermakna saya tidak mahu apa-apa input. Saya akan berurusan dengan masalah diri saya sendiri. Dan sesungguhnya, anda tidak perlu memberitahu mendapat apa-apa int positif. Anda hanya berkata, dapatkan int positif, dan yang fungsi ini hendak pergi dan melakukan perkara. Tetapi ada adalah satu helah sedikit saya telah telah bermain di sini masa ini keseluruhan memastikan kod ini menyusun. Perhatikan bahawa int-- mendapatkan positif int void-- berada di talian 27. Tetapi atas sebab tertentu yang seolah-olah pelik ia juga di sini di talian 16. Dan hanya untuk menjadikannya lebih menarik saya akan mengulangi ini supaya ia sempurna sama. Dan saya telah berkata prototaip dengan komen satu baris sedikit. Apakah yang akan berlaku jika saya memadamkannya, Dan sekarang jalankan lagi membuat fungsi 1, masukkan. Alamak. Tunggu sekejap. Di mana tab saya? Huh? Bersedia. Membuat fungsi 1. Di sana kami pergi. OKAY. Telah tidak disimpan dengan betul. Jadi, saya fikir ada sedikit bug di sini di mana saya tidak melihat nama tab pada masa ini. Jadi apa yang sedang berlaku di sini? Pengakuan tersirat fungsi mendapatkan int positif adalah tidak sah di C99. Jadi mengelirukan lagi. Jadi apa petunjuk ini? Nah, ternyata bahawa C agak bodoh. Nah, itu pengaturcaraan bahasa, atau sebaliknya pengkompil adalah. Ia hanya mengetahui apa yang anda perlu mengajar, dan ia hanya akan tahu sesuatu jika anda diajar sebelum ini. Dalam erti kata lain, utama pada masa ini, Saya cuba untuk memanggil fungsi dipanggil mendapatkan int positif. Tetapi pengkompil tidak akan untuk melihat bahawa mendapatkan int positif wujud sehingga garisan 26. Dan jadi apa pengkompil tidak hanya kesilapan sebaik sahaja ia mendapat untuk beratur 17, berkata pengisytiharan tersirat untuk mendapatkan int positif, yang hanya cara mewah untuk mengatakan, saya tidak tahu apa yang mendapat int positif lagi. Bahasa-bahasa lain seperti Jawa dan Python dan Ruby mungkin melihat ke hadapan. C tidak. Dan begitu cara kita menetapkan ini adalah salah satu daripada dua cara. Sama ada satu, jika masalah ini adalah yang mendapat int positif tidak pernah berlaku sebelum ini, baik, biarlah saya hanya bergerak ke atas. Yang akan menyelesaikan masalah ini. Tetapi secara umumnya, ia adalah dianggap teknik yang lebih baik untuk meletakkan fungsi utama anda sekurang- terbaik supaya manusia membaca kod anda mengetahui apa yang program ini tidak, kerana utama tidak dikebumikan semua jalan di bawah atau di tengah-tengah. Ia adalah di bahagian paling atas. Jadi yang tidak merasa ideal. Dan anda sebenarnya boleh mendapatkan ke dalam situasi di mana jika panggilan satu fungsi yang lain, yang panggilan lain, anda boleh masuk ke satu isu di mana tidak boleh pergi daripada yang lain, secara logik. Ia hanya tidak mungkin. Dan sebagainya perjalanan ke tempat kerja sekitar ini adalah untuk hanya mengambil tandatangan fungsi ini, jadi untuk speak-- baris pertama di mana ia declared-- dan hanya copy, paste ia di bahagian, tetapi tidak dengan braces-- kerinting hanya dengan koma bernoktah. Ia seperti tanda-tanda kecil apa yang akan datang. Dan sebenarnya, setiap masa ini apabila kita telah melihat perkara seperti io.h standard dan cs50.h, begitu juga, dalam orang-orang dot h fail yang ada prototaip lain. Dan kita akan melihat bahawa tidak lama lagi. Jadi ringkasnya, apabila anda mempunyai program dalam fail dengan pelbagai fungsi selain utama, anda hampir sentiasa mau memberitakan hanya dengan cara pertama mereka line, diikuti oleh koma bertitik, di bahagian paling fail. Itu adalah banyak sekaligus. Ada soalan? Ada soalan? Baiklah. Jadi mari kita beralih kemudian kepada sesuatu seperti batuk. Oh. Bagaimana sesuai. Baiklah. Batuk. Jadi di sini adalah c pelaksanaan program kita lakukan pada hari yang lain di Scratch yang sangat mudah hanya kata batuk, batuk, batuk. Baiklah. Dan seseorang berkata beberapa hari lalu bahawa ada cara membersihkan kod ini sehingga sudah. Semua betul? Sebaik sahaja anda menyalin dan menampal reka bentuk mungkin tidak baik. Sekurang-kurangnya sekali kita dapat empat atau lima atau 20 batuk, rasanya amalan yang tidak baik. Kami hanya menyimpan salinan, menampal. Apakah penyelesaian yang jelas untuk membersihkan program ini sehingga? PENONTON: Loop. SPEAKER 1: Ya. Jadi menggunakan gelung. Dan kita boleh menggunakan untuk gelung, manakala gelung, apa-apa bilangan pendekatan. Dan sesungguhnya, itulah yang yang kita lakukan dalam versi satu di sini. Saya bukannya ditulis semula ia dalam versi salah satu cough.c menjadi batuk hanya dalam masa untuk gelung. Baiklah, tetapi ada satu peluang sekarang untuk jenis permulaan untuk mereka bentuk ini sedikit lebih seperti pengajaran yang kita diajar masa yang lalu, yang this-- menganggap bahawa saya mahu untuk mewujudkan fungsi yang dipanggil batuk, mari kita mempertimbangkan untuk seketika apa yang ia akan kelihatan seperti. Jadi, jika saya mahu sesuatu batuk, saya hanya perlu menggunakan cetak f di dalam majlis itu. Dan sesungguhnya saya. Dan sebenarnya, semua ini masa, bila-bila masa anda berada mencetak sesuatu untuk skrin, seorang programmer akan memanggil bahawa kesan sampingan. Ia bukan saya menyerahkan kembali seseorang nilai. Ia saya mengambil beberapa tindakan yang mungkin visual jelas. Tetapi batuk fungsi ini, adakah ia kembali apa-apa yang berdasarkan pada baris pertama? Tidak, kerana jenis pulangan adalah tidak sah, yang hanya bermakna ia tidak menyerahkan saya apa-apa kembali. Ia mungkin melakukan sesuatu visual, tetapi ia tidak menyerahkan saya menyokong sehelai kertas seperti minggu lepas. Adakah ia memerlukan input? No. Oleh karena itu, tidak sah di sini juga. Jadi ini juga adalah sejenis lebih-kejuruteraan masalah ini. Betul? Saya telah membuat program yang lebih kompleks, lebih baris kod, Saya tidak pernah membuat apa-apa lebih berfungsi, tetapi ini akan menjadi batu loncatan, mungkin, untuk yang lebih luas konteks dengan kod yang lebih rumit. Tetapi bagaimana pula dengan ini? Apa yang telah saya done-- hanya sambil mengerling ke arah ini tanpa melihat komen di bahagian paling atas file-- apa yang ada Saya pada dasarnya dilakukan di sini dengan batuk saya pelaksanaan itu berbeza? Ya, di belakang? PENONTON: Jadikan ia supaya anda boleh mempunyai watak yang mematikan. SPEAKER 1: Ya. Jadi ini merasakan sejenis bagus. Betul? Ia seperti menambah ciri-ciri untuk anda program atau fungsi anda, dalam kes ini. Ia masih kembali apa-apa. Ia mungkin mempunyai kesan sampingan yang visual, kerana ia memanggil cetak f. Tetapi sekarang saya telah parametrized majlis itu, yang bermakna saya telah dinyatakan diambil input jenis int dan memanggilnya n, tetapi saya dapat memanggilnya apa-apa yang saya mahu. Malah, ia hanya boleh menjadi kali untuk menjadi lebih jelas. Dan kemudian saya hanya boleh mengubah ini di sini. Tetapi persoalannya adalah bahawa ini adalah bagaimana saya membuat fungsi yang mengambil input. Dan jika anda masih ingat Melibas melalui talian mungkin dalam satu daripada berjalan-lewat, yang keempat dan contoh batuk akhir, anda akan melihat di sini saya telah umum jenis further-- kod saya untuk cabutan lebih lanjut. Seperti batuk dan bersin, kedua-duanya kira-kira seperti mengatakan sesuatu atau membuat beberapa jenis bunyi. Simpan akan menjadi sama blok Scratch. Dan supaya apa yang saya lakukan dalam versi ini, mana kita boleh hanya renungan, adalah batuk adalah sama seperti berkata, [batuk], batuk, dan sementara itu, bersin adalah seperti mengatakan, [Achoo]. Oleh itu, saya telah umum untuk melaksanakan apa yang sekarang melaksanakan fungsi generik ini, mengatakan, yang menarik untuk tujuan hari ini hanya kerana ia masih tidak mempunyai jenis balasan. Tetapi berapa ramai input adakah ia mempunyai? PENONTON: Dua. SPEAKER 1: Dua. Dan jadi jika anda mahu mengambil dalam dua hujah, hanya memisahkan mereka dengan koma. Dan jika anda mahu untuk kemudian memanggil fungsi itu, melihat bahawa anda hanya memanggil katakan, quote, unquote, untuk hujah pertama, biasa n, untuk hujah kedua. Jadi sekali lagi, kita hanya perlu sekarang blok binaan supaya kita boleh sebenarnya melaksanakan beberapa fungsi kita sendiri. Baiklah. Sebarang pertanyaan mengenai ini? Jadi sekarang mari kita mengupas kembali lapisan jika demikian. Dan matlamatnya, akhirnya, adalah set masalah minggu depan akan berada di cryptogrophy-- seni berebut maklumat. Dan khususnya, maklumat yang akan anda menyulitkan atau menyahsulit akan menjadi teks. Dan sebagainya yang jenis jemputan soalan hari ini seperti juga, apa yang sedang berlaku di bawah hood dengan teks yang melebihi ASCII dari minggu sifar, dan bagaimana boleh kita benar-benar mula memanipulasi ia? Jadi di sini adalah nama Zamyla ini. Dan dalam teks, yang mungkin akan dimasukkan ke dalam seperti fungsi mendapatkan tali. Dan mulai sekarang, apabila anda melihat rentetan seperti this-- Z-A-M-Y-L-A-- mula memikirkan ia seolah-olah setiap daripada mereka watak-watak adalah dalam sekotak yang sendiri. Dan sesungguhnya, dalam seminggu atau lebih yang masa, setiap kotak-kotak akan mewakili secara khusus satu blok memory-- santapan memori. Jadi masing-masing huruf, akhirnya, akan mewakili 8 bit. Dan kami benar-benar akan melihat apa yang berlaku di bawah hood dalam komputer saya. Tetapi kerana tidak ia mencukupi hanya untuk melihat Zamyla melalui kanta ini, di mana setiap surat-surat yang ada dalam kotak sendiri. Dan baik yang mencukupi dalam C kita boleh mengakses setiap kotak-kotak secara langsung. Jadi, jika anda ingin mendapatkan yang pertama surat namanya, sangat mudah dalam C. Jika anda ingin mendapatkan lalu surat, sangat mudah dan juga dengan sekeping sintaks baru. Jadi, saya akan pergi ke hadapan ke dalam CS50 IDE dan membuka tali sifar titik C. Dan dalam contoh ini di sini, terdapat beberapa perkara yang baru berlaku. Jadi pertama selaras 19, kami telah melihat ini mendapatkan tali sebelum itu. Jadi hanya sebagai cek kewarasan cepat, jika seseorang boleh menawarkan sehingga secara lisan penjelasan yang orang biasa itu daripada apa yang berlaku di dalam talian 19. Seperti hanya menterjemahkan ini ke dalam Inggeris yang rakan sebilik tidak CS50 mungkin faham. Yeah. PENONTON: Mempunyai penggunaan input tali dan simpan dalam s berubah-ubah. SPEAKER 1: Baik. Mempunyai input pengguna rentetan dan menyimpannya dalam s berubah-ubah. Itu yang besar. Maka pada tangan kanan sampingan, kita panggil mendapatkan tali. Yang mengembalikan nilai yang yang tidak mendapat ditugaskan dari sebelah kanan ke kiri tangan sebelah ke dalam pembolehubah dipanggil s itu direka untuk menyimpan rentetan. Tepat sekali. Jadi sekarang beratur 22, semalam komen dalam talian 21, jelas mencetak rentetan yang satu aksara setiap baris. Tapi bagaimana? Jadi pertama sekali, kita memulakan I kepada 0. Dan maka bagaimana kita dapat akhir nama Zamyla ini? Nah, pada akhir Nama Zamyla, saya boleh taip secara manual dalam watak terakhir namanya entah bagaimana, atau bilangan itu. Betul? Jika kita kembali sini-- Z-A-M-L-- Y-L-A-- jadi saya boleh menaip. Apa yang indeks Surat terakhir Zamyla ini? Jika ini adalah 0-- bercakap seperti programmer-- 0, 1, 2, 3, 4, 5, Saya heard-- maka sesungguhnya, huruf terakhir nama Zamyla adalah yang keenam, tetapi jika kita mengira dari 0, ia akan menjadi nombor 5. Jadi menyimpan bahawa dalam fikiran di sini. Ternyata ada satu majlis di C dipanggil strlen, dan kembali pada hari dan sehingga hari ini masih, banyak pengaturcara memilih untuk menyegerakkan nama untuk mereka fungsi yang bunyi seperti kata-kata mereka cuba untuk mengatakan. Jadi strlen ialah panjang tali. Dan supaya apa yang akan panjang rentetan S kembali apabila Zamyla adalah input? PENONTON: Lima. SPEAKER 1: Z-A-M-Y-L. Enam. Betul? Apa yang panjang nama Zamyla ini? Betul? Dan hanya dalam realiti, enam huruf. Betul? Dan jadi apa maksudnya untuk gelung kita? Kami akan pergi dari 0 sehingga enam, yang akan memberi kita lima lelaran. Apa yang kami lakukan pada setiap lelaran? Nah, peratus C, seseorang fikirkan hari yang lain, bermakna pemegang tempat untuk apa? PENONTON: Char. SPEAKER 1: Hanya char. Jadi character-- tunggal tidak pelbagai watak-watak seperti rentetan. Dan kemudian inilah barisan baru bahawa kita telah mendapat mencetak. Dan kemudian di sini adalah sintaks baru. Jika anda ingin mencetak i-ke- watak dalam rentetan S, boleh dikatakan, anda hanya boleh mengatakan menamakan tali S, dan kemudian membuka kurungan persegi, dan kemudian ditutup kurungan persegi, dengan i di tengah-tengah. Dan ia sejenis baik dalam yang ia jenis kelihatan seperti segiempat sama seperti kuasa dua di mana ini Zamyla Watak wujud pada gambar yang di sana. Jadi, jika saya benar-benar menjalankan ini sekarang, mari kita lihat apa yang berlaku. Membuat rentetan 0 dot slash rentetan 0, dan kemudian saya akan menaip nama Zamyla ini. Tidak ada yang cepat, kerana saya tidak menggunakan cetak f, tetapi itulah denda. Saya hanya tahu apa yang perlu dilakukan. Dan sesungguhnya ia mencetak Nama Zamyla, satu bagi setiap baris. Sekarang mari kita menjadi sedikit melulu. Katakan bahawa saya tidak tahu tentang strlen dan saya menganggap, semua betul, tiada siapa yang akan mempunyai menamakan lebih besar daripada seperti 50 aksara. Mari kita pergi ke hadapan dan susun semula ini dan jalankan, dan kemudian taip Zamyla lagi. Secara logiknya, apakah program akan cuba untuk mencetak? Z-A-M-Y-L-A kemudian seperti 45 bait tidak diketahui ingatan. Dan sesungguhnya kita akan kembali idea ini ingatan. Tetapi secara logik, jika Nama Zamyla ialah yang panjang ini, seperti gambar di di sini, apa yang kita katakan adalah menjaga percetakan, percetakan menyimpan, menyimpan percetakan, percetakan menyimpan, menyimpan percetakan, sepanjang jalan ke watak-50, yang yang tahu apa yang akan berlaku. Jadi mari kita sebenarnya membaca. Mari kita menaip Zamyla. Menarik. Kami mendapat bertuah. Hanya sejumlah besar ruang putih. Oh. Ada satu watak funky. Ia kelihatan jenis seperti soalan pelik menandakan di sana, tetapi terdapat nama Zamyla ini. Mari kita benar-benar melulu. Bagaimana pula kita mencetak 500 blok kepada yang tidak diketahui? Mari kita pergi ke hadapan dan membuat ini juga dan kemudian semula jangka. Dan mari kita skrin penuh, kerana kita perlu melihat lebih banyak ruang. Zamyla. Bernasib baik lagi. Berani kita mendapatkan lebih melulu? Mari kita mendapatkan lebih banyak melulu. 50000 aksara. Sesungguhnya ini ialah bukan idea yang baik. Baiklah. Membuat rentetan 0. Ini akan menjadi demo terakhir kami. Zamyla. Ugh. Ugh. OKAY. Jadi ingatan saya adalah benar-benar kosong sekarang, yang sebenarnya jenis mudah. Apa yang saya cuba untuk mendapatkan supaya- hak semua. Dan sekarang saya hanya akan mendapat melulu. 500,000. Make-- mari skrin penuh itu. Enter. Zamyla. Di sana kami pergi. Saya tidak tahu apa yang adalah, tetapi ia kedengaran tidak baik. Baiklah. Dan sebenarnya, tidak lama lagi, jika anda berada di kalangan Beberapa yang bernasib baik dalam waktu pejabat dan dalam masalah menetapkan satu, anda dengan baik mungkin menghadapi ini. Segmentasi kesalahan sebenarnya tidak mempunyai erti yang jelas. Ini bermakna beberapa jenis kesilapan berkaitan dengan segmen memori. Dan dari segi orang biasa itu, ia bermakna kita menyentuh memory-- kami menggunakan RAM di komputer saya bahawa saya tidak perlu mempunyai akses kepada. Dan itulah apa yang kedua-dua kuat dan juga berbahaya mengenai C adalah bahawa anda benar-benar mempunyai akses penuh kepada keseluruhan memori program anda atau bait atau RAM, lebih khusus. Jadi, walaupun nama Zamyla ini hanya enam aksara, Saya masih boleh pergi mana-mana sahaja dalam ingatan saya mahu. Dan sebagai diketepikan, jika anda telah pernah membaca artikel beberapa selama ini tentang beberapa pelayan atau sesuatu program mendapat retak atau digodam itulah mengambil kesempatan daripada sesuatu dipanggil buffer overflow mengeksploitasi yang kita akan benar-benar bercakap tentang dalam beberapa minggu, itu secara amnya merujuk kepada entah bagaimana menipu komputer ke dalam berjalan dengan baik luar sempadan memori bahawa ia perlu mempunyai, dan mencari sesuatu berair kerana memory-- yang kata laluan, mungkin, cara yang memintasi beberapa nombor siri menyemak, atau hanya umumnya dapat untuk menipu komputer melaksanakan kod yang tidak bertujuan. Tetapi mari kita kembali kepada realiti hanya seketika di mana program ini adalah dilaksanakan dengan strlen, dan memperkenalkan satu perkara di sini. Apa yang baru di kalangan tiga baris atas? Jadi rentetan dot h. Ternyata ada perpustakaan ini dipanggil String Dot H, atau Perpustakaan tali, yang fail header, boleh dikatakan, adalah rentetan dot h yang memberikan saya akses kepada fungsi strlen ini. Jika saya tinggalkan itu, pengkompil adalah akan menjerit pada saya dalam bentuk tertentu. Tetapi anda tahu apa? Sekarang mari kita benar-benar nuanced. Selaras 22, ada sesuatu yang baik hati daripada inefficient-- buruk direka, arguably-- tentang baris ini kod. Fikirkan semula bagaimana untuk gelung dilaksanakan dan apakah langkah-langkah berlaku lagi dan lagi dan again-- pengawalan, keadaan, kod yang mendapat dilaksanakan, maka kenaikan atau perubahan itu, maka keadaan, kemudian kod, maka perubahan itu, maka keadaan, kemudian kod, maka perubahan itu, dan sebagainya. Jadi apa yang mungkin sedikit membimbangkan atau tidak dilakukan di sini? Ya, dengan warna biru. PENONTON: strlen adalah dipanggil banyak, banyak kali. SPEAKER 1: Ya. Jadi strlen dipanggil banyak kali, tetapi apa yang panjang Zamyla ini nama kali pertama gelung melaksanakan? PENONTON: Enam. SPEAKER 1: Enam. Nah, apa yang panjang namanya kali kedua kod melaksanakan? PENONTON: Enam. SPEAKER 1: Baiklah. Ia masih enam. Betul? Nama Zarla tidak mempunyai berubah, walaupun Saya sedang hanya sebahagian daripada huruf dalam namanya. Dan jadi hakikat bahawa saya berkesan bertanya soalan ini, apa yang panjang Zamyla, apa yang panjang daripada Zamyla, apa yang panjang Zamyla, enam kali berasingan, atau tujuh walaupun, hanya bodoh, kerana itulah yang tidak berubah jawapan itu. Dan supaya apa yang saya dapat sebenarnya lakukan adalah this-- dalam rentetan satu Saya mempunyai versi yang lebih baik sedikit di sini. There-- rentetan whoops-- dua saya mempunyai versi yang lebih baik sedikit di mana Saya lakukan this-- bukan hanya Memulakan i kepada 0, saya juga dengan koma mengisytiharkan pembolehubah kedua dipanggil n-- saya tidak perlu mengatakan int lagi. Saya tidak perlu, sebenarnya. Tetapi Aku berkata n. Dan kemudian saya memulakan n untuk yang strlen n, supaya sekarang berapa kali strlen mendapatkan dilaksanakan dalam jumlah? Hanya sekali. Dan hal ini adalah apa yang kita maksudkan awal tentang reka bentuk yang lebih baik. Sebenarnya apabila kod anda adalah betul, kembali dan berfikir melalui, aku menggunakan sedikit memori atau beberapa saat atau milisaat masa komputer sebagai mungkin untuk melaksanakan beberapa masalah? Dan saya akan untuk menatal dan hanya menyebut bahawa ada sebutan ini null dalam versi ini, tetapi kita akan kembali kepada yang lama. Kerana buat masa ini, mari kita lihat di mana ini akan membawa kita. Jadi satu, ternyata bahawa sekarang bahawa kita mempunyai keupayaan melihat watak individu, kita boleh memanfaatkan sesuatu dari minggu 0 yang sangat sukar difahami dan semacam tidak menarik pada masa itu. Tetapi sekarang, dan terutama apabila kita dapat Kriptografi dalam seminggu, ia akan menjadi cukup kuat. Ia ternyata bahawa dengan beberapa ints data types-- dan terapung dan aksara dan rentetan dan lain things-- sebahagian daripada mereka boleh dengan mudah ditukar kepada yang lain. Sebagai contoh, apabila kita bercakap tentang ASCII masa ago-- sini huruf besar A melalui M, dot, dot, dot-- kita berkata bahawa ada pemetaan antara huruf dan nombor. Dan sebenarnya, ia berlaku untuk huruf kecil juga. Huruf kecil adalah 97, modal adalah 65. Dan ada nombor dalam ASCII, yang hanya pemetaan ini sistem untuk semua orang-orang surat lain. Jadi apa maksudnya? Ya, saya akan pergi ke hadapan dan terbuka sehingga sebenar dengan cepat sesuatu yang dinamakan ASCII 0, yang sebahagian besar adalah komen. Dan sekali lagi talian anda sentiasa pandangan melalui komen-komen. Dan kita lihat apa yang ini akan lakukan. Jadi ia mendapat fungsi utama. Saya berkod keras nombor hanya untuk sekarang, kerana saya tahu apa yang saya lakukan. Saya tahu apa yang saya mahu lihat di sini. Dan saya telah dimulakan I hingga 65. Dan saya mengira sehingga melalui 26 huruf total. Dan apa yang saya akan mencetak satu baris pada satu masa jika anda boleh mentafsir ini selaras diketengahkan? Apa yang akan dicetak? Yeah. PENONTON: Adakah anda akan untuk mencetak surat yang sepadan dengan peta daripada nilai surat dan nilai integer? SPEAKER 1: Tepat sekali. Saya akan mencetak surat sepadan dengan nilai integer, dan sebaliknya, seperti berikut. Nah ini, seseorang berkata sebelum ini, hanya tempat untuk char. Ia masih adalah. Ini, sudah tentu, adalah pemegang tempat yang dengan tidak int-- barisan baru. Dan kini melihat, nilai pertama saya yang Saya memasang untuk pemegang tempat yang tidak hanya I. saya berkata, dalam kurungan, char I, yang char kurungan adalah memberitahu pengkompil, merawat Saya tidak seperti apa itu, yang merupakan nombor. Rawat ia sebagai watak sebenar. Manakala nilai kedua saya memasang dalam- Saya-- hanya perlu menjadi nombor. Jadi, jika saya menyusun program-- ini jadi ini adalah membuat ASCII 0, dot mengurangkan ASCII 0-- Saya hanya mendapat carta ini sedikit berguna yang menunjukkan saya semua kemungkinan pemetaan tanpa perlu fikir ia melalui atau penyelesaiannya pada saya sendiri. Dan saya juga mencetak, perhatikan huruf kecil, kerana beberapa baris kemudian, saya juga mencetak pemetaan ini juga, yang hanya untuk mengatakan bahawa sebaik sahaja anda memahami apa yang berlaku di bawah hood, boleh anda secara automatik menukar kembali dan sebagainya. Dan sebenarnya, sesiapa di antara kamu pernah melakukan ini di sekolah rendah atau mendengar tentang seseorang dongeng mengambil nota dan memberikannya kepada beliau atau rakannya di dalam kelas, tetapi anda hancur yang surat-surat seperti A menjadi B, dan B menjadi C, atau sesuatu lebih rumit daripada itu, baik, bagaimana anda akan pergi tentang melaksanakan bahawa sebagai seorang kanak-kanak? Nah, anda hanya jenis tahu A menjadi B, B menjadi C, tetapi secara matematik, apa yang kanak-kanak yang buat? Apa yang kamu menambah kepada setiap huruf? Berkesan, 1. Oleh itu, apabila anda menukar A ke B, itu jenis seperti menukar 65-66, yang secara matematik bermakna hanya menambah 1. Dan jadi jika anda adalah untuk melaksanakan teknik menipu yang sedikit untuk guru anda di dalam kod, anda mungkin melakukan perkara tersebut hanya dengan menambah satu huruf bersama-sama. Jadi tidak lama lagi, kami akan melihat bagaimana kita boleh mengambil kesempatan daripada yang sebenarnya perebutan benar dan menguraikan maklumat. Dalam pada itu, tahu bahawa kita telah mula untuk memperkenalkan pasangan perpustakaan lain sini-- tali satu hari ini. Dan laman web yang sangat berguna mudah-mudahan anda akan dipanggil reference.cs50.net, yang tenaga pengajar telah meletakkan bersama-sama, supaya jika anda mahu melihat ke atas kerja-kerja bagaimana strlen, anda boleh mula menaip nama fungsi ini, klik strlen sana, dan kemudian penjelasan yang kurang selesa akan muncul. Atau jika anda mahu pegawai itu Penjelasan berasaskan Linux, anda boleh klik lebih selesa di sebelah kanan atas, dan ia akan membentangkan maklumat yang sama, tetapi dari segi yang lebih kompleks. Itu adalah satu sumber yang berguna untuk benar-benar tahu apa yang semua tidak. Lain kali kita akan kita lihat pada Ovaltine dan lebih, dan memperkenalkan diri ke dunia kriptografi. Sebelum itu, kita akan melihat anda pada minggu ini. Dan kini, Colton Ogden. Jumpa anda pada hari Rabu. [Bermain muzik] [Bermain muzik] SPEAKER 1: Apakah yang [Bleep] yang kamu buat? SPEAKER 1: Saya sedang makan pencuci mulut saya? Bagaimana anda makan? Dengan tangan anda? [Bermain muzik]