[Powered by Google Translate] [Seksyen 4] [Kurang Selesa] [Nate Hardison] [Universiti Harvard] [Ini adalah CS50.] [CS50.TV] Baiklah, selamat kembali ke seksyen. Dalam seksyen minggu ini kita akan melakukan beberapa perkara. Kami akan recap pertama Masalah Set 2, yang merupakan set Caesar dan masalah Vigenère. Dan kemudian kita akan menyelam ke dalam Kuiz 0 ulasan dan menghabiskan sedikit masa Mengimbas kembali apa yang kita telah bercakap tentang dalam setiap kuliah setakat ini, dan kami juga akan melakukan beberapa masalah dari kuiz tahun sebelumnya. Itu cara anda lelaki itu mempunyai cara yang baik untuk bersedia untuk itu. Untuk bermula, saya telah boot beberapa penyelesaian yang baik untuk menetapkan masalah sebelumnya, Set Masalah 2, ke dalam ruang ini. Jika kalian semua melanda pautan ini, dan jika anda klik nama saya dan klik pada semakan pertama saya anda akan melihat caesar.c, yang adalah apa yang saya melihat. Mari kita bercakap tentang perkara ini benar-benar cepat. Ini adalah hanya satu penyelesaian sampel. Ini tidak semestinya penyelesaian yang sempurna. Terdapat banyak cara yang berbeza untuk menulis ini, tetapi terdapat beberapa perkara yang saya mahu untuk menyerlahkan yang saya lihat seperti yang saya telah penggredan, kesilapan biasa yang saya fikir penyelesaian ini melakukan pekerjaan yang sangat baik pengendalian. Yang pertama mempunyai beberapa jenis komen header di atas. Pada baris 1 hingga 7 anda melihat butiran, apa sebenarnya program ini lakukan. Satu amalan standard yang baik apabila anda menulis kod C tanpa mengira jika program anda yang terkandung dalam fail tunggal atau sama ada ia berpecah sejak beberapa fail adalah untuk mempunyai beberapa jenis penghalaan komen di atas. Ini adalah juga bagi orang-orang yang keluar dan menulis kod dalam dunia sebenar. Ini adalah di mana mereka akan meletakkan maklumat hak cipta. Berikut adalah termasuk #. Pada 16 baris ada ini # menentukan, yang kita akan kembali ke dalam hanya sedikit. Dan kemudian sekali fungsi bermula, mula dibina utama sekali, kerana program ini telah semua yang terkandung dalam fungsi tunggal perkara yang pertama yang berlaku dan ini adalah sangat simpulan bahasa dan tipikal program C yang mengambil masa dalam baris arahan hujah adalah bahawa ia segera memeriksa untuk kiraan hujah, argc. Betul di sini kita melihat bahawa program ini menjangkakan 2 hujah yang tepat. Ingat ada bahawa hujah pertama itulah satu khas yang sentiasa nama program yang sedang berjalan, nama fail boleh laku. Dan sebagainya apa ini tidak adalah ia menghalang pengguna daripada menjalankan program ini dengan hujah-hujah yang lebih atau kurang. Sebab kita mahu untuk memeriksa hak ini jauh adalah kerana kita sebenarnya tidak boleh mengakses pelbagai argv di sini pasti sehingga kita telah diperiksa untuk melihat bagaimana ia adalah besar. Salah satu kesilapan yang biasa saya lihat ialah orang akan segera pergi dalam dan merebut argv [1]. Mereka akan merebut hujah utama daripada array dan lakukan untuk i memeriksa, dan kemudian mereka akan melakukan ujian untuk argc serta ujian seterusnya, sama ada atau tidak hujah pertama sememangnya suatu integer pada masa yang sama, dan yang tidak bekerja kerana dalam kes itu bahawa tidak ada hujah-hujah yang dibekalkan anda akan meraih hujah yang tidak ada atau cuba untuk merebut salah satu yang tidak ada. Perkara besar lain yang anda perlu melihat adalah bahawa anda sentiasa mahu mencetak beberapa jenis mesej ralat membantu kepada pengguna untuk menyesuaikan mereka. Saya pasti anda telah semua program yang dikendalikan di mana semua tiba-tiba ia kemalangan, dan anda akan mendapat dialog ini masuk akal sedikit yang muncul dan berkata sesuatu yang teruk samar dan mungkin memberikan anda kod ralat atau sesuatu seperti itu yang tidak masuk akal. Ini adalah di mana anda benar-benar ingin memberikan sesuatu yang berguna dan disasarkan kepada pengguna supaya apabila mereka berjalan mereka pergi "Oh," muka sawit. "Saya tahu apa yang perlu dilakukan. Saya tahu bagaimana untuk menetapkan ini." Jika anda tidak mencetak mesej, kemudian anda akhirnya sebenarnya meninggalkan pengguna untuk pergi memeriksa kod sumber anda untuk mengetahui apa yang telah salah. Terdapat juga beberapa kali bahawa anda akan menggunakan kod ralat yang berbeza. Di sini kita hanya menggunakan satu untuk mengatakan terdapat ralat, terdapat ralat, terdapat ralat. Program-program yang lebih besar, sering program yang dipanggil oleh program lain, akan kembali beberapa jenis kod ralat khas dalam senario yang berbeza programatik berkomunikasi apa yang anda akan sebaliknya hanya menggunakan mesej Inggeris bagus untuk. Sejuk. Seperti yang kita bekerja bawah, anda boleh melihat kita tarik keluar utama. Kami menguji untuk melihat jika kekunci sesuai. Kami mendapat mesej dari pengguna. Sebab kita melakukannya dalam hal ini melakukan gelung while dan ini adalah sesuatu yang kita akan meliputi dalam sedikit sedikit tetapi ia ternyata bahawa jika anda menaip kawalan D apabila anda mendapatkan GetString yang segera pada terminal apa yang sebenarnya tidak adalah ia menghantar aksara khas kepada program ini. Ia dipanggil ELF atau akhir watak fail. Dan dalam kes itu, rentetan mesej kita akan menjadi batal, jadi ini bukanlah sesuatu yang kami diperiksa dalam masalah ini menetapkan sendiri. Tetapi seperti yang kita pergi, sekarang bahawa kita telah mula bercakap tentang petunjuk dan memori peruntukan dinamik pada timbunan, memeriksa batal apabila anda mempunyai fungsi yang mungkin kembali null sebagai nilai adalah sesuatu yang anda akan mahu untuk mendapatkan dalam tabiat menjalankan. Ini adalah di sini terutamanya untuk ilustrasi. Tetapi apabila anda melihat GetString pada masa depan, jadi dari Set Masalah 4 pada, anda akan mahu untuk menyimpan ini dalam minda. Sekali lagi, ini bukan satu isu untuk Set Masalah 3 sama ada kerana kita telah tidak dilindungi lagi. Akhirnya, kita sampai ke bahagian ini di mana kita mendapat untuk gelung penyulitan utama, dan terdapat beberapa perkara yang berlaku di sini. Pertama, kita melelar atas rentetan mesej keseluruhan sendiri. Di sini kita telah disimpan panggilan strlen dalam keadaan, yang bilangan anda telah menegaskan tidak merupakan cara terbaik untuk pergi. Ia ternyata dalam kes ini ia juga tidak besar, sebahagiannya kerana kita sedang mengubahsuai kandungan mesej itu sendiri di dalam gelung, jadi jika kita mempunyai mesej yang 10 aksara panjang, kali pertama kita mula bahawa untuk gelung strlen akan kembali apa? 10. Tetapi jika kita kemudian mengubah suai mesej, mengatakan kita mengubah suai watak-5, dan kita buang dalam watak \ 0 di kedudukan ke-5, pada lelaran berikutnya strlen (mesej) tidak akan kembali apa yang ia lakukan kali pertama kami terlelar, tetapi ia sebaliknya akan kembali 5 kerana kita melemparkan bahawa null, dan panjang rentetan ditakrifkan oleh kedudukan itu \ 0. Dalam kes ini, ini adalah cara terbaik untuk pergi kerana kami sedang mengubahsuai ia di tempat. Tetapi anda perasan bahawa ini adalah sebenarnya menghairankan mudah untuk menyulitkan jika anda boleh mendapatkan matematik yang betul. Apa yang diperlukan adalah untuk memeriksa sama ada atau tidak surat yang anda sedang mencari di huruf besar atau huruf kecil. Sebab kita hanya perlu untuk memeriksa itu dan kita tidak perlu untuk memeriksa kes adalah alfa adalah kerana jika watak huruf besar atau jika ia adalah huruf kecil maka ia pasti aksara abjad, kerana kita tidak mempunyai angka yang besar dan huruf kecil. Perkara lain yang kita lakukan dan ini adalah sedikit sukar kita telah diubahsuai Caesar standard cipher formula yang kita berikan dalam spesifikasi set masalah. Apa yang berbeza di sini adalah bahawa kita ditolak dalam modal kes huruf besar, dan kemudian kita tambah modal A kembali di akhir. Saya tahu beberapa anda telah melakukan ini dalam kod anda. Adakah mana-mana anda melakukan ini dalam penghujahan anda? Yang anda lakukan ini. Bolehkah anda menjelaskan apa ini tidak, Sahb? Dengan menolak ia keluar, kerana anda lakukan arena sejurus selepas ia, anda perlu mengambil ia keluar, supaya cara anda mendapat [batuk] kedudukan. Dan kemudian dengan menambah kembali kemudian anda beralih lebih daripada satu yang anda mahu. Ya, sebenarnya. Apa Sahb berkata adalah bahawa apabila kita mahu menambah mesej kami dan kunci kita bersama dan kemudian arena, arena yang oleh NUM_LETTERS, jika kita tidak skala mesej kami ke pelbagai sesuai 0-25 pertama, maka kita mungkin berakhir sehingga mendapat jumlah yang benar-benar pelik kerana nilai-nilai yang kita sedang melihat apabila kita melihat mesej [i], apabila kita melihat watak engan mesej teks biasa kami, nilai tempat dalam julat ini 65-122 berdasarkan nilai ASCII bagi huruf besar A melalui z huruf kecil. Dan sebagainya apabila kita MOD sebanyak 26 atau oleh NUM_LETTERS, kerana itu adalah menentukan # kami di sebelah kanan atas di sini, itu akan memberi kita nilai itu dalam julat 0-25, dan kami memerlukan satu cara untuk kemudian skala yang kembali dan mendapatkan ia dalam julat ASCII yang sesuai. Cara paling mudah untuk berbuat demikian adalah untuk hanya skala semua turun ke dalam julat 0-25 untuk memulakan dengan, dan kemudian mengalihkan segala-galanya kembali pada akhir. Satu lagi kesilapan biasa yang saya lihat orang lari ke jika anda tidak benar-benar melakukan bersisik ini segera dan anda menambah mesej dan kunci bersama-sama dan anda menambah mereka, berkata, ke dalam pembolehubah char, masalah dengan itu sejak mesej [i] adalah satu jumlah yang agak besar untuk memulakan dengan- ingat ia sekurang-kurangnya 65 jika ia satu huruf besar watak- jika anda mempunyai kunci yang besar, katakan, sesuatu seperti 100, dan anda menambah mereka 2 bersama-sama ke dalam char ditandatangani anda akan mendapat limpahan. Anda akan mendapatkan nilai yang lebih besar daripada 127, yang merupakan nilai terbesar bahawa pembolehubah char boleh memegang. Sekali lagi, itulah sebabnya anda akan mahu untuk melakukan yang jenis perkara untuk bermula dengan. Sesetengah orang mendapat sekitar kes itu dengan melakukan jika lain dan menguji untuk melihat jika ia akan melimpah sebelum berbuat demikian, tetapi cara ini mendapat sekitar yang. Dan kemudian dalam penyelesaian ini kita cetak keseluruhan rentetan pada akhir sangat. Orang lain dicetak watak pada satu-satu masa. Kedua-duanya adalah hebat. Pada ketika ini, adakah anda semua mempunyai sebarang pertanyaan, sebarang komen tentang perkara ini? Perkara yang anda suka, perkara yang anda tidak suka? Saya mempunyai satu soalan. Mungkin saya terlepas semasa penerangan anda, tetapi bagaimana program ini melangkau ruang untuk menyambung kunci kepada panjang teks? Ini adalah hanya Caesar cipher. >> Oh, maaf, yeah. Ya, kita akan melihat bahawa. Dalam cipher Caesar kita mendapat sekitar bahawa kerana kita hanya dibalik aksara. Kami hanya berputar mereka jika mereka besar atau huruf kecil. Kalian berasa cukup baik tentang perkara ini? Berasa bebas untuk menyalin rumah ini, mengambil, bandingkan apa yang anda semua menulis. Pasti berasa bebas untuk menghantar soalan tentang hal itu juga. Dan sekali lagi, menyedari bahawa matlamat sini dengan masalah anda menetapkan bukan untuk mendapatkan anda lelaki untuk menulis kod yang sesuai untuk set masalah anda. Ia adalah satu pengalaman pembelajaran. Yeah. Kembali ke do gelung while, jika ia bersamaan batal, jadi batal hanya bermaksud apa-apa, mereka hanya tekan enter? Nol ialah nilai penunjuk khas, dan kita gunakan batal apabila kita mahu katakan kita mempunyai pembolehubah penunjuk yang menunjuk ke apa-apa. Dan begitu biasanya ia bermakna bahawa ini pembolehubah, pembolehubah mesej adalah kosong, dan di sini, kerana kita menggunakan jenis CS50 rentetan khas, apakah jenis tali CS50? Pernahkah anda melihat apa yang ia adalah apabila Daud ditarik balik hud dalam kuliah? Ia funky ia adalah penunjuk, betul? Okay, yeah. >> Ia adalah * char. Dan sebagainya benar-benar kita boleh menggantikan ini di sini * dengan mesej char, dan sebagainya fungsi GetString, jika ia tidak berjaya mendapatkan rentetan daripada pengguna, ia tidak boleh menghuraikan rentetan, dan satu kes di mana ia tidak boleh menghuraikan rentetan jika jenis pengguna akhir watak fail, D kawalan, yang tidak adalah sesuatu yang biasanya anda lakukan, tetapi jika itu berlaku maka fungsi akan kembali nilai nol ini sebagai satu cara untuk mengatakan "Hei, saya tidak mendapatkan rentetan." Apa yang akan berlaku jika kita tidak meletakkan mesej null =, yang merupakan sesuatu yang kita tidak melakukan lagi? Mengapa yang akan menjadi masalah di sini? Kerana saya tahu bahawa kita bercakap sedikit dalam syarahan mengenai kebocoran memori. Ya, mari kita berbuat demikian, dan mari kita lihat apa yang berlaku. Soalan Basil adalah apa yang berlaku jika kita tidak benar-benar mempunyai mesej ini = ujian batal? Mari kita tatal ke atas ke atas. Kalian boleh mengulas keluar ini. Sebenarnya, saya akan menyimpannya di dalam semakan. Ini akan menjadi Semakan 3. Apa yang anda perlu lakukan untuk menjalankan program ini adalah anda perlu klik ikon ini gear sehingga di sini, dan anda akan mempunyai untuk menambah hujah untuk ia. Anda akan mempunyai untuk memberi hujah utama kerana kita mahu lulus dalam hujah baris arahan. Di sini saya akan memberikan nombor 3. Saya suka 3. Sekarang zoom kembali, menjalankan program ini. Ia berlari, menyusun, membina. Di sini kita pergi. Ia menunggu akan diminta. Jika saya menaip sesuatu seperti hello-mana yang pergi? Oh, program saya mengambil masa terlalu lama untuk menjalankan. Saya jawing terlalu lama. Di sini ia pergi. Sekarang saya menaip hello. Kita lihat bahawa ia menyulitkan sewajarnya. Sekarang apa yang berlaku jika kita melakukan GetString segera kembali batal? Ingat, saya berkata bahawa kita melakukannya dengan menekan kawalan D pada masa yang sama. Saya akan tatal ke atas sini. Kami akan berjalan lagi. Bangunan. Terdapat ia pergi. Sekarang apabila saya mencecah kawalan D Saya mendapat ini garis yang mengatakan opt/sandbox50/bin/run.sh, kesalahan Segmentasi. Pernahkah anda semua melihat bahawa sebelum ini? [Pelajar] Mengapa ada tidak >> Maaf? [Pelajar] Mengapa tiada sampah teras dalam kes ini? Sampah teras adalah soalan mengapa terdapat tiada sampah teras di sini? Persoalannya ialah bahawa mungkin ada, tetapi dump teras adalah fail yang mendapat disimpan di dalam cakera keras. Dalam kes ini kita telah dilumpuhkan tapak teras pada pelayan jangka supaya kita tidak ada orang yang seg faulting dan membina tan tapak teras. Tetapi anda boleh mendapatkan satu. Tapak teras adalah jenis perkara yang anda sering boleh melumpuhkan, dan kadang-kadang anda lakukan. Kesalahan segmentasi, untuk menjawab soalan anda, Basil, mengatakan bahawa kita cuba untuk mengakses penunjuk yang tidak bersedia untuk menunjukkan apa-apa. Ingat Binky dalam video apabila Binky cuba untuk pergi mengakses penunjuk itu tidak menunjuk kepada apa-apa? Dalam kes ini saya rasa teknikal penunjuk menunjuk kepada sesuatu. Ia menunjuk ke null, yang teknikal 0, tetapi yang ditakrifkan sebagai dalam segmen yang tidak boleh diakses oleh program anda, supaya anda mendapat suatu kesalahan segmentasi kerana anda tidak mengakses memori yang dalam segmen yang sah seperti segmen timbunan atau segmen timbunan atau segmen data. Sejuk. Sebarang pertanyaan lanjut mengenai Caesar? Mari kita bergerak ke atas. Mari kita lihat pada 2 Semakan benar-benar cepat. Itulah Vigenère. Di sini di Vigenère kami akan berjalan melalui satu ini cukup cepat kerana, sekali lagi, Vigenère dan Caesar adalah agak serupa. Komen Header sebelum ini, # Define adalah sebelum untuk mengelakkan menggunakan nombor-nombor sihir. Perkara yang baik mengatakan bahawa kita mahu untuk bergerak ke abjad yang berbeza atau sesuatu seperti itu. Bukannya perlu pergi manual menukar semua 26 dalam kod kita boleh menukar ini kepada 27 atau jatuh ke bawah jika kita telah menggunakan huruf yang berbeza, bahasa yang berbeza. Sekali lagi, kita telah mendapat cek ini kiraan hujah, dan benar-benar anda hampir boleh mengambil ini sebagai templat. Cukup banyak setiap program yang anda menulis harus mempunyai- jika ia mengambil baris arahan hujah-beberapa urutan garisan yang berbunyi seperti ini pada awal-awal lagi. Itulah salah satu ujian kewarasan pertama yang anda mahu lakukan. Di sini apa yang kita tidak telah kita memastikan bahawa kata kunci adalah sah, dan yang cek kedua yang kita lakukan. Notis lagi yang kita dipisahkan ini dari argc dan 2. Perhatikan bahawa dalam kes ini satu perkara yang kita terpaksa lakukan adalah sebaliknya menggunakan i kita mahu untuk mengesahkan keseluruhan rentetan, dan untuk melakukan bahawa anda sebenarnya perlu pergi watak oleh watak lebih tali. Tiada cara yang baik untuk memanggil sesuatu pada kerana walaupun, sebagai contoh, i akan kembali 0 jika ia tidak dapat menghurai integer, supaya tidak pun bekerja. Sekali lagi, mesej bagus memberitahu pengguna tepat apa yang berlaku. Maka di sini, sekali lagi, kami juga mengendalikan kes di mana pengguna jenis watak D kawalan rawak. Dan kemudian Charlotte mempunyai soalan awal tentang bagaimana kita menguruskan untuk melangkau ruang dalam rentetan di sini kami. Ini adalah jenis yang serupa dengan apa yang kita lakukan dengan program Myspace yang kita lakukan dalam seksyen ini, dan cara ini bekerja ialah bahawa kita dikesan bilangan huruf yang kita akan melihat. Seperti yang kita berjalan atas rentetan mesej, seperti yang kita berjalan lebih watak oleh watak, kita menjejaki indeks sebagai sebahagian daripada kami untuk gelung, dan kemudian kita juga dikesan bilangan huruf, jadi bukan aksara khas, bukan angka, bukan putih ruang bahawa kita akan dilihat dalam pembolehubah berasingan. Dan maka penyelesaian ini mengubah kekunci untuk mendapatkan integer utama sebenar, dan ia adakah itu on the fly, betul sebelum ia kemudian pergi untuk menyulitkan mesej watak sebenar. Terdapat beberapa penyelesaian yang sempurna terlalu besar yang akan mengubah kekunci apabila menguji kesahihan kekunci. Di samping untuk memastikan bahawa watak dan kata kunci telah aksara abjad ia juga bertukar bahawa ke integer dalam julat 0-25 maka skip perlu untuk berbuat demikian kemudian di dalam ini untuk gelung. Sekali lagi, anda lihat di sini ini adalah benar-benar kod yang sama yang tepat bahawa kita digunakan dalam Caesar pada ketika ini. Anda melakukan perkara yang sama, jadi helah sebenar memikirkan bagaimana untuk menjadikan kata kunci ke dalam integer. Satu perkara yang kita lakukan di sini yang sedikit tebal kita mengulangi frasa ini, saya rasa anda boleh memanggil ia, 3 kali berasingan pada baris 58, 59, dan 61. Seseorang boleh menjelaskan apa sebenarnya frasa ini tidak? Ia mengakses watak, seperti yang anda kata. Ya, ia adalah [didengar] watak dalam kata kunci, dan sebagainya ia adalah bilangan huruf dilihat kerana anda hanya bergerak di sepanjang kata kunci sekali anda telah melihat surat itu, supaya akan berkesan melangkau ruang dan barangan seperti itu. Ya, sebenarnya. Dan kemudian sekali anda telah melihat kosong kata kunci anda hanya arena supaya anda bergerak ke belakang sekitar. Tepat sekali. Itulah penjelasan yang sempurna. Apa yang Kevin berkata bahawa kita mahu indeks ke dalam kata kunci. Kami mahu mendapatkan watak num_letters_seen, jika anda akan, tetapi jika num_letters_seen melebihi panjang kata kunci, cara kita dapat kembali ke julat yang sesuai ialah kita menggunakan pengendali arena berkesan membalut di sekitar. Sebagai contoh, seperti dalam jangka pendek, kata kunci kami adalah daging, dan 5 huruf panjang. Tetapi kita telah melihat 6 huruf dalam teks biasa kita pada ketika ini dan disulitkan 6. Kami akan berakhir sehingga mengakses num_letters_seen, yang 6, arena panjang kata kunci, 5, dan supaya kita akan mendapat 1, dan sebagainya apa yang kita akan lakukan ialah kami akan mengakses dalam watak pertama kata kunci kami pada ketika itu. Baiklah, apa-apa soalan mengenai Vigenère sebelum kita bergerak ke atas? Kalian berasa cukup baik tentang perkara ini? Sejuk, besar. Saya mahu pastikan bahawa anda semua akan mendapat peluang untuk melihat kod yang kita fikir kelihatan baik dan mempunyai peluang untuk belajar daripada. Ini akan menjadi yang terakhir kita akan menggunakan ruang untuk masa ini, dan kami pergi untuk peralihan sekarang, dan saya akan pergi ke cs50.net/lectures supaya kita boleh melakukan sedikit kajian kuiz. Cara terbaik saya berfikir untuk mula melakukan kuiz ulasan adalah untuk datang ke laman Kuliah ini, cs50.net/lectures, dan di bawah setiap tajuk minggu, jadi jika saya melihat di sini pada 0 Minggu, Saya melihat bahawa kita mempunyai senarai topik yang kita dilindungi di titik 0 Minggu. Jika mana-mana topik-topik ini kelihatan biasa kepada anda anda pasti akan mahu untuk kembali dan kerokan nota kuliah dan mungkin malah agunan melalui ceramah-ceramah, menonton mereka sekali lagi jika anda mahu untuk mendapatkan rasa untuk apa yang berlaku dengan setiap topik-topik. Saya akan mengatakan tambahan ini satu tahun sumber sejuk kita telah mendapat ini adalah seluar yang kita telah mencipta, dan jika anda melihat pada 0 Minggu, kita tidak mempunyai semua topik yang dilindungi, tetapi kita telah mendapat agak beberapa daripada mereka, beberapa yang lebih sukar, jadi menonton seluar pendek ini lagi adalah cara yang baik untuk mendapatkan anda sehingga kelajuan. Secara khususnya, saya akan dimasukkan ke dalam palam bagi 3 di bawah, kerana saya lakukan mereka. Tetapi jika anda sedang bergelut dengan binari, bit, hex, yang jenis barangan, binari adalah tempat yang hebat untuk bermula. ASCII adalah salah satu yang baik untuk melihat juga. Anda juga boleh menonton saya pada kelajuan 1.5x jika saya akan terlalu lambat untuk anda. Sejak kajian itu, berasa bebas untuk berbuat demikian. Hanya untuk memulakan benar-benar cepat, kita akan pergi melalui beberapa masalah-masalah ini kuiz hanya untuk cepat melahirkan melalui. Sebagai contoh, mari kita lihat pada 16 masalah bahawa saya telah mendapat hak di sini di papan. Kami telah mendapat pengiraan berikut dalam binari, dan kita mahu untuk menunjukkan apa-apa kerja. Okay, saya akan memberikan pukulan. Kalian harus mengikuti bersama-sama dengan kertas, dan kami akan melakukan ini benar-benar cepat. Kita mahu untuk melaksanakan pengiraan berikut dalam perduaan. Saya telah mendapat 00110010. Dan saya akan menambah ia 00110010. Untuk matematik genius mengikuti bersama-sama di rumah, ini berkesan mendarabkan dengan 2. Mari kita mulakan. Kami akan mengikuti algoritma penambahan yang sama yang kita lakukan apabila kita menambah nombor perpuluhan bersama-sama. Betul-satunya perbezaan di sini adalah bahawa kita gelung kembali sekitar apabila kita mempunyai 1 + 1 bukan sekali kita sampai ke 10. Jika kita bermula dari kanan, benar-benar cepat, apa angka pertama? [Pelajar] 0. >> [Nate H.] 0. Besar, angka kedua? [Pelajar] 1. [Nate H.] Adakah ia 1? 1 + 1? [Pelajar] 10. [Nate H.] Tepat sekali, jadi apakah angka bahawa saya menulis betul-betul di bawah 2 yang ditambah bersama-sama? [Pelajar] 1, 0, atau 0 dan kemudian membawa 1. [Nate H.] 0 dan bawa 1, sebenarnya. Satu depan sehingga, Basil, anda. Apa yang ketiga? >> [Basil] 1. [Nate H.] 1, sempurna. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Yeah, dan apa yang saya lakukan? [Pelajar] 1. [Nate H.] Dan apa yang saya lakukan? Dan kemudian saya bawa 1. Sempurna, Sahb? >> [Sahb] Sekarang anda mempunyai 1. [Nate H.] Dan saya lakukan apa-apa di sini? [Sahb] Kemudian untuk satu seterusnya anda mempunyai 1 kerana anda membawa lebih daripada 1. [Nate H.] Besar, jadi di sini kita boleh menyelesaikan ia. Sejuk. [Pelajar] Adakah 0 + 0 = 0? 0 + 0 = 0. 1 + 1, seperti yang anda kata, 10, atau 1, 0, sebaliknya. 10 adalah tepat kerana saya 10 bermakna nombor 10, dan ia adalah quirk bagaimana kita mewakili apabila kita menulis. Kami mewakili nombor 2 1, 0, dan nombor 10 adalah sedikit berbeza. Apakah jenis baik tentang binari adalah bahawa ada benar-benar tidak bahawa banyak kes anda perlu belajar. Ada 0 + 0 = 0, 0 + 1 = 1, 1 + 1 adalah 0, dan kemudian bawa 1, dan kemudian anda boleh lihat di sini pada ruang ketiga dari kanan kita terpaksa 1, 1, dan 1. Dan 1 + 1 + 1 adalah 1, dan anda membawa lagi 1. Apabila anda melakukan samping binari, agak mudah. Saya melakukan lebih beberapa ini kepada kewarasan memeriksa dirimu sebelum anda pergi kerana ini adalah mungkin sesuatu yang kita akan melihat pada kuiz. Sekarang mari kita buat satu ini datang juga. Mari kita buat masalah 17. Kami akan menukar nombor binari berikut kepada nombor perpuluhan. Saya telah mendapat 10100111001. Ingat dalam video binari yang saya lakukan Saya berjalan melalui beberapa contoh, dan saya menunjukkan bagaimana semua kerja-kerja apabila anda melakukannya dalam perpuluhan. Apabila anda bekerja dalam perwakilan perpuluhan Saya fikir kita pada ketika ini dalam kehidupan kita supaya fasih di dalamnya bahawa ia adalah agak mudah untuk menyembunyikan mekanik bagaimana ia sebenarnya berfungsi. Tetapi untuk melakukan recap cepat, jika saya mempunyai nombor 137 ini benar-benar bermakna dan lagi, ini adalah dalam perpuluhan perwakilan- nombor 137 dalam perpuluhan bermakna bahawa saya mempunyai 1 x 100 + 3 x 10 + 7 x 1. Ini adalah semua tinggal di skrin. Dan kemudian jika anda melihat nombor-nombor di sini, 100, 10 dan 1, anda lihat bahawa mereka sebenarnya semua kuasa 10. Saya mempunyai 10 ², 10 ¹, dan 10 hingga sifar. Kami mempunyai jenis yang sama perkara dalam binari, kecuali bahawa asas kami, seperti yang kita panggil ia, adalah 2 bukannya 10. Ini 10s bahawa saya menulis di sini di bawah, ini ² 10, 10 ¹, 10 hingga sifar, 10 adalah asas kami, dan eksponen, 0, 1, atau 2, tersirat oleh kedudukan angka dalam bilangan yang kita menulis. 1, jika kita melihat ia, ini 1 dalam kedudukan ke-2. 3, adalah dalam kedudukan 1, dan 7 adalah dalam kedudukan 0. Itulah bagaimana kita mendapat pelbagai atlet bawah untuk asas kami. Berikutan semua ini we'll-sebenarnya, anda tahu apa? Kami akan lakukan-mana butang batal saya pergi? Terdapat ia pergi. Saya suka ini perkara batal. Berikutan ini, saya berfikir bagi saya sekurang-kurangnya cara paling mudah untuk mula menukar nombor binari atau nombor perenambelasan mana asas adalah 16 dan bukan 10 atau 2 adalah untuk pergi ke hadapan dan menulis asas dan eksponen untuk semua nombor dalam nombor perduaan saya di atas. Jika kita bermula dari kiri ke kanan lagi, yang jenis bertentang, Saya akan menukar kembali kepada hitam di sini, kami mempunyai 2 ke kedudukan 0, dan kemudian kita mempunyai 2 ¹, 2 ², dan kemudian 2 hingga 3, 2 hingga 4, 2 5, 6, 7, 8, 9, dan 10. Nombor-nombor yang saya telah ditulis keluar semua atlet. Saya hanya menulis asas di sini dalam 3 tahun pertama hanya untuk ruang. Pada ketika ini, saya akan pergi ke hadapan dan saya sebenarnya akan memadam barangan yang kita lakukan dalam perpuluhan, jika itu okay. Anda semua telah mendapat. Mereka anda menonton talian saya pasti akan dapat memundurkan saya jika anda ingin. Menghidupkan kembali ke kandang. Kini, apa yang kita boleh lakukan jika anda lelaki tidak benar-benar sehingga kelajuan pada kuasa anda 2, yang benar-benar sejuk. Ia berlaku. Saya faham. Saya pernah wawancara pekerjaan di mana saya diberitahu saya perlu tahu semua kuasa 2 melalui 2 hingga 30hb. Ia bukan kerja saya. Bagaimanapun, anda semua boleh pergi ke hadapan dan melakukan matematik di sini, tetapi dengan binari ia tidak benar-benar masuk akal, dan juga ia masuk akal dengan perpuluhan atau perenambelasan sama ada, untuk melakukan matematik di mana anda mempunyai sifar. Anda boleh melihat saya mempunyai 0 di sini, 0 di sini, 0 di sini, 0 di sini, 0 di sini, 0 di sini. Mengapa ia mungkin tidak masuk akal untuk melakukan matematik sebenar untuk mengira kuasa yang sesuai 2 untuk jawatan itu? Tepat sekali, seperti Charlotte berkata, ia akan menjadi 0. Juga mungkin menyelamatkan diri masa jika mengira kuasa 2 tidak adalah saman kuat anda. Dalam kes ini, kita hanya perlu untuk mengira ia untuk 2 0 yang adalah? [Pelajar] 1. [Nate H.] 1, 2 3, yang adalah? [Pelajar] 8. >> [Nate H.] 8. 2 ke 4? [Pelajar] 2. Saya minta maaf, 1. [Nate H.] 2 kepada 4, 16, sebenarnya. 2 kepada 5, Kevin? >> 32. [Nate H.] 32, 2 kepada 8? [Pelajar] 32 x 8, 256. [Nate H.] Perfect. Dan 2 ke 10? [Pelajar] 1024. [Nate H.] Yeah, 1024. Apabila kita telah mendapat nombor-nombor ini kita boleh jumlah mereka semua. Dan ini adalah di mana ia adalah benar-benar penting untuk melakukan beberapa perkara. Satu pergi perlahan dan menyemak kerja anda. Anda boleh memberitahu bahawa terdapat adalah 1 pada akhir nombor ini, jadi saya pasti perlu mendapatkan nombor ganjil akibat saya, kerana semua orang-orang lain akan menjadi nombor genap memandangkan bahawa ia adalah nombor perduaan. Perkara lain untuk dilakukan adalah jika anda sampai ke tahap ini pada ujian dan anda telah ditulis ia keluar sejauh ini dan anda kehabisan masa melihat bilangan mata bahawa masalah ini adalah bernilai. Masalah ini, seperti yang anda lihat jika saya menyelak kembali ke komputer riba saya benar-benar cepat- masalah ini adalah bernilai 2 mata, jadi ini bukanlah jenis tambahan anda perlu pergi melalui jika anda benar-benar tertekan dengan masa. Tetapi kita akan menukar kembali untuk iPad, dan kita akan pergi melalui ia benar-benar cepat. Saya suka melakukan nombor kecil pertama kerana saya mendapati bahawa lebih mudah. Saya suka 32 dan 8 kerana mereka pergi bersama-sama dengan agak mudah, dan kita mendapat 50. 16 dan 1 mendapat 17. Terdapat kita akan mendapat 57, dan kemudian kita boleh melakukan rehat ini, jadi kita boleh lakukan 57, 156. Datang pada. Man, baik, mari kita lihat. Kami mempunyai 57, 256, dan 1024. Pada ketika ini, saya agak hanya pergi melalui. Saya tidak mempunyai petunjuk. Saya jelas perlu membaca sehingga mengenai perkara ini. 7, 6, dan 4, anda akan mendapat 17. 1, 5, 5, 2, 13. Maka kita akan mendapat 3, dan kemudian kita dapatkan 1. 1337. Easter telur, sesiapa? Sesiapa yang mengenali nombor ini? Chris mengiktiraf nombor. Apakah maknanya, Chris? [Chris] Leet. Leet, jadi jika anda melihat ini, ia kelihatan seperti leet. Barangan Hacker. Watch out for jenis barangan pada separuh penggal atau kuiz, sebaliknya bahawa. Jika anda melihat bahawa jenis barangan dan anda tertanya-tanya "Huh," yang sebenarnya mungkin bermakna sesuatu. Saya tidak tahu. David suka meletakkan ia masuk Ia adalah satu cara yang baik untuk kewarasan check it. Seperti okay, saya boleh melihat apa yang berlaku. Itulah Minggu 0/Week 1 barangan. Jika kita menghidupkan kembali untuk komputer riba kita sekarang, mengezum keluar, dan beberapa perkara lain. Ada ASCII, yang kita telah melakukan banyak dengan set masalah. Ini tanggapan modal A. Apa yang benar-benar? Mengetahui ia integer perpuluhan. 65 adalah apa yang ia dipetakan ke dalam jadual ASCII, dan itulah maka bagaimana komputer menulis, dan itulah bagaimana kita telah mendapat diri dengan sebenarnya bertulis modal aksara A dan watak huruf kecil dalam beberapa penyelesaian dan set masalah yang anda telah lakukan. Beberapa perkara-perkara lain. Kami telah mendapat kenyataan, ungkapan boolean, syarat, gelung, pembolehubah dan benang. Mereka semua seolah-olah masuk akal untuk sebahagian besar? Beberapa istilah ini adalah funky sedikit pada masa-masa. Saya suka berfikir satu kenyataan sebagai sesuatu yang paling bahagian yang berakhir dengan semicolon. Penyata seperti x = 7, yang menetapkan pembolehubah, mungkin dipanggil x = 7. Mungkin x adalah juga jenis yang boleh menyimpan nombor 7, jadi ia adalah satu int atau mungkin apungan atau pendek atau char, sesuatu seperti itu. Satu ungkapan boolean menggunakan double-sama dan bang yang sama atau tidak sama, kurang daripada, lebih besar daripada, kurang daripada atau sama, semua jenis yang barangan. Syarat kemudian adalah kenyataan jika lain. Saya akan ingat bahawa anda tidak boleh mempunyai seorang lain tanpa sepadan jika. Begitu juga, anda tidak boleh mempunyai seorang lain jika tanpa sepadan jika. Gelung, ingat 3 jenis gelung kita telah mengetuk kepada anda untuk pasangan terakhir seksyen dan set masalah. Menggunakan buat sementara apabila anda mendapat input pengguna, menggunakan manakala gelung sehingga keadaan tertentu adalah benar, dan kemudian menggunakan mereka untuk gelung jika anda perlu tahu yang lelaran gelung anda kini adalah bagaimana saya berfikir tentang hal itu. Atau jika anda melakukan untuk setiap aksara dalam rentetan saya mahu melakukan sesuatu, bagi setiap elemen dalam array Saya mahu melakukan sesuatu untuk elemen yang. Benang dan acara. Ini kita telah tidak dilindungi begitu jelas dalam C, tetapi ingat ini dari scratch. Ini adalah tanggapan mempunyai skrip yang berbeza. Ini adalah juga tanggapan ini penyiaran acara. Sesetengah orang tidak menggunakan penyiaran dalam projek-projek mereka pada mulanya, yang benar-benar sejuk, tetapi ini adalah 2 cara yang berbeza mengendalikan isu ini yang lebih besar dipanggil keserentakan, yang adalah bagaimana anda mendapatkan program-program untuk melaksanakan atau seolah-olah melaksanakan pada masa yang sama? Tugas yang berbeza berjalan manakala tugas-tugas lain juga berjalan. Ini adalah bagaimana sistem operasi anda seolah-olah bekerja. Ini adalah mengapa walaupun, sebagai contoh, Saya telah mendapat pelayar saya berjalan, saya juga boleh bertukar pada Spotify dan memainkan lagu. Itulah lebih benda konsep untuk memahami. Saya akan mengambil melihat pada benang pendek jika anda ingin mengetahui lebih lanjut mengenai itu. Mari kita lihat, saya percaya terdapat mungkin telah masalah mengenai perkara ini dalam salah satu daripada ini. Sekali lagi, saya fikir benang dan peristiwa tidak adalah sesuatu yang kita akan meliputi dalam C hanya kerana ia adalah ketara lebih sukar daripada di Scratch. Anda tidak perlu bimbang tentang hal itu di sana, tetapi pasti memahami konsep, memahami apa yang berlaku. Sebelum kita bergerak ke atas, mana-mana soalan di Minggu 0 bahan? Semua orang berasa cukup baik? Memahami pembolehubah dan apa pembolehubah? Melangkah. Minggu 1. Beberapa perkara di sini yang tidak terutamanya dilindungi dalam kajian kuiz semestinya dan juga lebih konsep perkara untuk berfikir tentang. Yang pertama adalah tanggapan ini apa kod sumber, penyusun dan kod objek. Sesiapa? Basil. Adakah kod objek yang saya maksudkan kod sumber adalah apa yang anda masukkan ke dalam dilafaz, dan kod objek adalah apa dilafaz meletakkan keluar supaya komputer anda boleh membaca program. Tepat sekali. Kod sumber kod C yang anda sebenarnya menaip sehingga. Kod objek adalah apa yang anda dapatkan daripada dilafaz. Ia adalah 0 dan 1s dalam format binari yang. Kemudian apa yang berlaku ialah apabila anda mempunyai sekumpulan fail objek, mengatakan anda sedang menyusun projek atau program yang menggunakan fail kod sumber yang pelbagai, yang oleh konvensyen diberi lanjutan fail c. Itulah sebabnya kita mempunyai caesar.c, vigenère.c. Jika anda menulis program Jawa anda memberikan mereka lanjutan. Java. Program Python mempunyai lanjutan. Py sering. Sebaik sahaja anda mempunyai fail berbilang c, anda menyusun mereka. Dilafaz memuntahkannya keluar semua ini ringan binari. Kemudian kerana anda hanya mahu 1 program anda mempunyai pautan pemaut semua objek ini memfailkan bersama-sama ke dalam 1 fail boleh laku. Ini juga apa yang berlaku apabila anda menggunakan perpustakaan CS50, sebagai contoh. Perpustakaan CS50 adalah kedua-dua yang h file kepala bahawa anda membaca, yang # includecs50.h. Dan kemudian ia juga perpustakaan fail binari khas yang telah disusun yang 0 dan 1s, dan bahawa-l bendera, jadi jika kita pergi kembali ke kawasan kami dan kita melihat benar-benar cepat pada apa yang berlaku di sini apabila kita melihat pada command dilafaz kami, apa yang kita telah mendapat ini adalah fail kod sumber kami di sini. Ini adalah sekumpulan bendera pengkompil. Dan kemudian pada akhir sangat, ini-l bendera pautan dalam perduaan fail sebenar untuk ini 2 perpustakaan, perpustakaan CS50 dan kemudian perpustakaan matematik. Memahami setiap jenis tujuan fail ' dalam proses penyusunan adalah sesuatu yang anda akan mahu untuk dapat memberikan sekurang-kurangnya gambaran tahap yang tinggi. Kod sumber datang masuk kod Objek keluar. Fail kod objek menghubungkan bersama-sama, dan anda mendapat yang indah, fail boleh laku. Sejuk. Inilah juga di mana anda boleh mendapatkan kesilapan di mata berganda dalam proses penyusunan. Ini adalah di mana, sebagai contoh, jika anda mengambil keluar ini bendera menghubungkan, bendera CS50, dan anda meninggalkan ia di Ruang atau apabila anda menjalankan kod anda, ini adalah di mana anda akan mendapat kesilapan dalam fasa yang menghubungkan, dan pemaut akan berkata, "Hei, anda dipanggil GetString fungsi yang dalam perpustakaan CS50. " "Anda memberitahu saya ia adalah di perpustakaan CS50, dan saya tidak dapat mencari kod untuk itu." Itulah di mana anda perlu untuk menghubungkan, dan itulah yang berasingan dari kesilapan pengkompil kerana pengkompil melihat sintaks dan yang jenis barangan. Ia adalah baik untuk mengetahui apa yang berlaku apabila. Perkara lain yang perlu tahu tentang. Saya akan mengatakan anda pasti mahu mengambil melihat pada pendek atas typecasting yang dilakukan oleh Jordan untuk memahami apa yang ints adalah di bawah hood, apa yang aksara adalah di bawah hood. Apabila kita bercakap mengenai ASCII dan kita sebenarnya melihat jadual ASCII, apa yang yang melakukan memberi kita di bawah melihat hud bagaimana komputer sebenarnya mewakili modal A dan 7 digit dan koma dan tanda tanya. Komputer juga mempunyai cara-cara yang khas untuk mewakili nombor 7 sebagai integer. Ia mempunyai cara yang khas untuk mewakili nombor 7 sebagai nombor titik terapung, dan mereka adalah sangat berbeza. Typecasting adalah bagaimana anda memberitahu komputer "Hei, saya mahu anda untuk menukar dari satu perwakilan kepada perwakilan yang lain. " Mengapa tidak kita mengambil melihat itu. Saya juga ingin mengambil melihat ringkas mengenai perpustakaan dan pendek pada penyusun. Mereka yang bercakap tentang proses penyusunan, apa perpustakaan, dan pergi atas beberapa soalan-soalan yang anda mungkin akan diminta. Soalan pada bahan Minggu 1? Adakah terdapat mana-mana topik di sini yang kelihatan menakutkan anda ingin untuk menutup? Saya cuba untuk meniup melalui kebanyakan topik-topik ini lebih awal supaya kita boleh mendapatkan petunjuk dan melakukan sedikit rekursi. Pemikiran? Apa-apa sahaja untuk melindungi? Masa untuk coklat mungkin? Kalian bekerja melaluinya. Saya akan terus menghirup pada kopi saya. Minggu 2. Panggilan yang baik, panggilan yang baik. Minggu 2 kita bercakap sedikit lebih lanjut mengenai fungsi. Dalam masalah pertama beberapa set kita tidak benar-benar menulis apa-apa fungsi di semua selain daripada mana fungsi? [Pelajar] Main. >> Main, tepat. Dan jadi kami telah melihat pakaian yang berbeza yang utama memakai. Ada satu di mana ia tidak mengambil hujah-hujah, dan kita hanya mengatakan tidak sah di antara kurungan, dan kemudian ada satu lagi di mana kita tidak mahu mengambil hujah baris arahan, dan seperti yang kita lihat, yang mana anda mempunyai int argc dan tali argv pelbagai atau sekarang bahawa kita telah benar-benar terdedah tali untuk menjadi * char bahawa ia adalah kita akan mula menulis ia sebagai char * argv dan kemudian kurungan. Dalam Set Masalah 3, anda semua melihat sekumpulan fungsi, dan anda dilaksanakan sekumpulan fungsi, melukis, mencari, perebutan. Prototaip semua ditulis di sana untuk anda. Apa yang saya mahu bercakap tentang di sini dengan fungsi benar-benar cepat adalah bahawa terdapat 3 bahagian untuk mereka apabila anda menulis fungsi. Anda perlu menentukan jenis pulangan fungsi. Anda perlu nyatakan nama untuk fungsi, dan kemudian anda perlu menentukan senarai hujah atau senarai parameter. Sebagai contoh, jika saya adalah untuk menulis fungsi untuk meringkaskannya sekumpulan integer dan kemudian kembali kepada saya jumlah apa yang akan menjadi jenis pulangan saya jika saya mahu kepada jumlah integer dan kemudian kembali jumlah? Kemudian nama fungsi. Jika saya pergi ke hadapan dan menulis dalam hijau, bahagian ini adalah jenis pulangan. Bahagian ini ialah nama. Dan kemudian di antara kurungan adalah di mana saya memberi hujah, sering disingkatkan sebagai args, kadang-kadang dipanggil params bagi parameter. Dan jika anda mempunyai satu, anda hanya nyatakan satu. Jika anda mempunyai berbilang anda memisahkan setiap satu dengan koma. Dan bagi setiap hujah yang anda berikan 2 perkara yang Kevin? [Kevin] Anda perlu memberikan jenis dan kemudian nama. Dan kemudian nama, dan nama adalah nama yang anda hendak gunakan untuk merujuk kepada hujah bahawa dalam fungsi jumlah, dalam fungsi yang anda sedang menulis. Anda tidak perlu untuk contoh, jika saya akan meringkaskannya, berkata, pelbagai integer we'll melakukan pelbagai int, dan saya akan memberikan saya beberapa pendakap kerinting sana- kemudian apabila saya lulus pelbagai fungsi jumlah Saya lulus dalam kedudukan pertama senarai hujah. Tetapi pelbagai bahawa saya lulus dalam tidak perlu mempunyai arr nama. Tiba akan menjadi bagaimana saya merujuk kepada hujah bahawa dalam badan fungsi. Perkara lain yang kita perlu mengambil kira, dan ini adalah sedikit berbeza daripada fungsi, tetapi saya fikir ia adalah satu titik penting, adalah bahawa dalam C apabila saya menulis berfungsi seperti ini bagaimana saya tahu berapa banyak elemen dalam array ini? Ini adalah agak soalan helah. Kita bercakap tentang ini sedikit dalam seksyen minggu lepas. Bagaimana saya tahu bilangan unsur-unsur di dalam pelbagai dalam C? Adakah terdapat cara? Ia ternyata bahawa tidak ada cara untuk mengetahui. Anda perlu lulus secara berasingan. Terdapat satu helah yang boleh anda lakukan jika anda berada dalam fungsi yang sama di mana array telah diisytiharkan, dan anda bekerja dengan pelbagai timbunan. Tetapi itu hanya berfungsi jika anda berada dalam majlis yang sama. Sebaik sahaja anda lulus array ke fungsi yang lain atau jika anda telah mengisytiharkan array dan anda meletakkan pelbagai bahawa pada timbunan itu, anda telah digunakan malloc  dan yang jenis barangan, maka semua pertaruhan adalah di luar. Kemudian anda sebenarnya perlu untuk lulus sekitar hujah khas atau parameter lain memberitahu anda berapa besar array. Dalam kes ini, saya mahu menggunakan koma: saya maaf, ia terkeluar skrin di sini- dan saya lulus dalam hujah lain  dan memanggilnya len int untuk panjang. Satu perkara yang mungkin datang pada kuiz meminta anda untuk menulis atau melaksanakan sesuatu fungsi tertentu dipanggil. Jika kita tidak memberikan anda prototaip, jadi keseluruhan perkara ini di sini, ini keadaan kucar-kacir keseluruhan dipanggil akuan fungsi atau prototaip fungsi, ini adalah salah satu perkara pertama yang anda akan mahu untuk memakukan jika ia tidak diberi kepada anda segera kuiz. Itu helah lain yang saya telah belajar adalah bahawa mengatakan kita lakukan memberi anda prototaip bagi fungsi, dan kita katakan, "Hei, anda telah mendapat untuk menulis." Di dalam pendakap kerinting bahawa anda mempunyai kuiz jika anda perasan bahawa terdapat satu jenis pulangan dan anda notis bahawa jenis pulangan adalah sesuatu yang lain daripada tidak sah, yang bermaksud bahawa fungsi tersebut tidak akan kembali apa-apa, maka salah satu perkara yang anda pasti mahu lakukan adalah menulis beberapa jenis penyata pulangan pada akhir sangat fungsi. Kembali, dan dalam kes ini, kita akan meletakkan kosong kerana kita mahu untuk mengisi ruang kosong. Tetapi ini mendapat anda berfikir dengan cara yang betul tentang bagaimana aku hendak untuk mendekati masalah ini? Dan ia mengingatkan anda anda akan mempunyai untuk kembali nilai pemanggil fungsi. Yeah. >> [Pelajar] Adakah gaya memohon apabila kita menulis kod kuiz? Seperti lekukan dan yang jenis barangan? >> [Pelajar] Yeah. Tidak, tidak seperti banyak. Saya fikir banyak-ini adalah sesuatu yang kita akan menjelaskan pada kuiz pada hari, tetapi biasanya bimbang tentang # termasuk dan yang jenis barangan, ia adalah jenis luar. [Pelajar] Adakah anda perlu mengulas kod tulisan tangan anda? Adakah anda perlu mengulas kod tulisan tangan anda? Mengulas sentiasa baik jika anda bimbang tentang kredit separa atau anda mahu untuk berkomunikasi niat anda untuk gred. Tetapi saya, sekali lagi, akan menjelaskan pada kuiz sendiri dan pada hari kuiz, tetapi saya tidak percaya bahawa anda akan dikehendaki untuk menulis komen, tidak. Biasanya tidak, tetapi ia pasti jenis perkara di mana anda boleh berkomunikasi niat anda, seperti "Hei, ini adalah di mana saya akan dengan ia." Dan kadang-kadang yang boleh membantu dengan kredit separa. Sejuk. Basil. [Basil] Apakah perbezaan antara mengisytiharkan, katakan, int lang dalam hujah atau parameter berbanding mengisytiharkan pembolehubah dalam fungsi? Wow, kopi pergi ke salur udara. [Basil] Seperti yang perkara yang kita mahu dimasukkan ke dalam hujah. Ya, itulah persoalan yang besar. Bagaimana anda memilih apa perkara yang anda mahu dimasukkan ke dalam hujah-hujah berbanding apa perkara yang perlu anda lakukan dalam fungsi? Dalam kes ini kita termasuk kedua-dua ini sebagai hujah kerana mereka sesuatu bahawa sesiapa yang akan menggunakan fungsi jumlah perlu untuk menentukan perkara-perkara. Fungsi Kesimpulannya, seperti yang kita bercakap tentang, tidak mempunyai cara untuk mengetahui bagaimana besar array ia mendapat dari pemanggil atau sesiapa yang menggunakan fungsi jumlah. Ia tidak mempunyai cara untuk mengetahui bagaimana besar pelbagai yang. Sebab kita lulus panjang ini di sini sebagai hujah kerana itulah sesuatu yang kita pada dasarnya memberitahu pemanggil fungsi, sesiapa yang akan menggunakan fungsi jumlah, "Hei, bukan sahaja yang anda perlu untuk memberikan kita array ints, anda juga perlu memberitahu kita bagaimana besar pelbagai bahawa anda telah memberikan kita. " [Basil] Mereka kedua-duanya akan menjadi hujah baris arahan? Tidak, ini adalah hujah sebenar yang anda akan lulus untuk fungsi. Biar saya buat halaman baru di sini. [Basil] Seperti nama akan lulus- [Nate H.] Jika saya mempunyai int utama (tidak sah), dan saya akan meletakkan di titik 0 pulangan saya ke sini di bawah, dan berkata saya mahu untuk memanggil fungsi jumlah. Saya ingin katakan int x = jumlah (); Untuk menggunakan fungsi jumlah saya perlu lulus dalam kedua-dua array yang saya mahu untuk meringkaskannya dan panjang array, jadi ini adalah di mana menganggap saya mempunyai pelbagai ints, katakan saya mempunyai int numbaz [] = 1, 2, 3, jenis penggunaan yang digodam sehingga sintaks di sana, maka apa yang saya akan lakukan adalah dalam jumlah saya mahu lulus dalam kedua-dua numbaz dan Nombor 3 untuk memberitahu fungsi jumlah "Baiklah, di sini adalah pelbagai saya mahu anda untuk meringkaskannya." "Berikut adalah saiznya." Adakah yang masuk akal? Adakah itu menjawab soalan anda? Dalam banyak cara ia tidak selari apa yang kita sedang lakukan dengan utama apabila kita mempunyai hujah-hujah baris arahan. Satu program seperti Caesar cipher, sebagai contoh, yang diperlukan hujah baris arahan tidak akan dapat berbuat apa-apa. Ia tidak akan tahu bagaimana untuk menyulitkan jika anda tidak memberitahu apa kunci untuk digunakan atau jika anda tidak beritahu apa rentetan anda mahu menyulitkan. Mendorong untuk input, ini adalah di mana kita telah mendapat 2 mekanisme yang berbeza untuk mengambil input dari pengguna, untuk mengambil maklumat dari pengguna. Untuk Set Masalah 1 kita lihat GetInt ini, GetString, cara GetFloat mendorong untuk input, dan yang dipanggil menggunakan aliran input standard. Ia adalah sedikit berbeza. Ia adalah sesuatu yang boleh anda lakukan pada satu-satu masa berbanding dengan apabila kamu sembah program, apabila anda memulakan program ini berjalan. Hujah baris arahan semua dinyatakan apabila anda memulakan program berjalan. Kami telah mencampurkan dua daripada mereka. Apabila kita menggunakan hujah ke fungsi, ia adalah sama seperti hujah baris arahan untuk utama. Ia adalah apabila anda sembah fungsi yang anda perlu untuk memberitahu apa sebenarnya ia perlu untuk melaksanakan tugasnya. Satu lagi perkara yang baik untuk melihat dan saya akan membiarkan anda melihat ia dalam masa lapang anda, dan ia telah diliputi dalam kuiz ini tanggapan skop dan pembolehubah tempatan berbanding pembolehubah global. Adakah memberi perhatian itu. Sekarang kita sedang mendapatkan barangan ini lain, dalam 3 Minggu kami mula bercakap tentang mencari dan menyusun. Mencari dan sorting, sekurang-kurangnya dalam CS50, adalah amat pengenalan kepada beberapa bahagian yang lebih teori sains komputer. Masalah mencari, masalah sorting adalah besar, masalah kanun. Bagaimana anda mencari beberapa tertentu dalam pelbagai berbilion integer? Bagaimana anda mencari nama tertentu di dalam buku telefon yang disimpan pada komputer riba anda? Dan supaya kita memperkenalkan idea ini kali jangka asimptot untuk benar-benar mengira berapa lama, bagaimana keras masalah ini adalah, berapa lama mereka ambil untuk menyelesaikan. Dalam, saya percaya, kuiz tahun 2011 ada masalah yang saya fikir merit meliputi sangat cepat, yang satu ini, masalah 12. O tidak, ia adalah Omega. Di sini kita bercakap tentang jangka masa terpantas mungkin untuk algoritma tertentu dan kemudian masa berjalan perlahan mungkin. Ini Omega dan O adalah benar-benar hanya jalan pintas. Mereka pintasan notasi untuk mengatakan bagaimana pantas dalam kes yang terbaik mungkin akan menjalankan algoritma kami, dan bagaimana perlahan dalam kes terburuk mungkin algoritma kami akan berjalan? Mari kita buat beberapa ini, dan ini juga dilindungi pendek pada notasi asimptot, yang saya sangat mengesyorkan. Jackson melakukan kerja yang benar-benar baik. Dengan carian perduaan, kita bercakap tentang carian binari sebagai algoritma, dan biasanya kita bercakap tentang dari segi O. besar Apakah O besar? Apakah masa jangka perlahan mungkin carian binari? [Pelajar] N ²? Tutup, saya rasa serupa dengan itu. Ia banyak yang lebih cepat daripada itu. [Pelajar] Perduaan? >> Ya, carian dedua. [Pelajar] Ia log n. Log n, jadi apa yang tidak log n bermakna? Ia bahagian setiap lelaran. Tepat sekali, jadi dalam kes yang lebih perlahan mungkin, mengatakan jika anda mempunyai pelbagai yang disusun juta integer dan nombor anda sedang mencari sama ada elemen yang sangat pertama dalam array atau elemen yang sangat terakhir dalam array. Ingat, algoritma carian binari berfungsi dengan melihat elemen tengah, melihat jika itulah perlawanan yang anda sedang mencari. Jika ia, maka besar, anda mendapati ia. Dalam kes terbaik, berapa cepat tidak jangka carian binari? [Pelajar] 1. 1, ia adalah masa yang berterusan, besar Wahai 1. Yeah. [Pelajar] Saya mempunyai satu soalan. Apabila anda mengatakan log n, anda maksudkan dengan hormat kepada asas 2, kan? Ya, supaya perkara yang lain. Kami mengatakan n log, dan saya rasa apabila saya berada di sekolah menengah Saya sentiasa menganggap bahawa log asas 10. Yeah, jadi ya, sila layari asas 2 biasanya adalah apa yang kita gunakan. Sekali lagi, akan kembali ke carian binari, jika anda sedang mencari sama ada elemen pada akhir sangat atau elemen di awal-awal lagi, kerana anda bermula di tengah-tengah dan kemudian anda membuang mana 1/2 tidak memenuhi kriteria yang anda sedang mencari, dan anda pergi ke separuh seterusnya dan separuh seterusnya dan separuh seterusnya. Jika saya mencari elemen terbesar dalam array juta integer Saya akan mengurangkan separuh pada log kebanyakan 1 juta kali sebelum saya akhirnya menguji dan melihat bahawa unsur Saya mencari adalah dalam terbesar atau dalam indeks tertinggi array, dan yang akan mengambil log n, log 1 juta kali. Bubble apapun. Adakah anda semua ingat jenis algoritma gelembung? Kevin, anda boleh memberi saya recap cepat daripada apa yang berlaku dalam algoritma apapun gelembung? [Kevin] Pada asasnya, ia akan melalui segala-galanya dalam senarai. Ia kelihatan pada dua yang pertama. Jika yang pertama adalah lebih besar daripada satu kedua ia swap mereka. Kemudian ia membandingkan kedua dan ketiga, perkara yang sama, swap, ketiga dan keempat, semua jalan ke bawah. Besar nombor akan mengikuti sehingga akhir. Dan selepas gelung bagaimanapun banyak anda selesai. Tepat sekali, jadi apa yang Kevin berkata bahawa kami akan menonton lebih besar nombor gelembung sehingga akhir array. Sebagai contoh, adakah anda keberatan berjalan kita melalui contoh ini jika ini adalah pelbagai kami? [Kevin] Anda akan mengambil masa 2 dan 3. 3 adalah lebih besar daripada 2, jadi anda menukar mereka. [Nate H.] Hak, jadi kami menukar ini, dan supaya kita mendapat 2, 3, 6, 4, dan 9. [Kevin] Kemudian anda membandingkan 3 dan 6. 3 adalah lebih kecil daripada 6, jadi anda meninggalkan mereka, dan 6 dan 4, anda akan menukar mereka kerana 4 adalah lebih kecil daripada 6. [Nate H.] Betul, jadi saya mendapat 2, 3, 4, 6, 9. [Kevin] Dan 9 adalah lebih besar daripada 6, jadi anda meninggalkan ia. Dan anda akan kembali melalui sekali lagi. [Nate H.] Adakah saya dilakukan pada ketika ini? >> [Kevin] No Dan mengapa saya tidak dilakukan pada ketika ini? Kerana ia kelihatan seperti pelbagai saya diselesaikan. Saya melihat ia. [Kevin] Pergi melalui sekali lagi dan pastikan bahawa terdapat tidak lebih swap sebelum anda boleh berhenti sepenuhnya. Tepat sekali, jadi anda perlu untuk menyimpan pergi melalui dan pastikan bahawa tiada swap bahawa anda boleh membuat pada ketika ini. Ia adalah benar-benar hanya bernasib baik, seperti yang anda kata, bahawa kita akhirnya hanya perlu membuat 1 pas melalui dan kita sedang disusun. Tetapi untuk melakukan ini dalam kes umum, kita sebenarnya akan mempunyai untuk melakukan ini berulang-ulang kali. Dan sebenarnya, ini adalah satu contoh kes yang terbaik, seperti yang kita lihat dalam masalah ini. Kami melihat bahawa kes terbaik n. Kami pergi melalui masa array 1. Apakah kes terburuk yang mungkin bagi algoritma ini? [Kevin] N ². Dan apakah rupa yang suka? Apa yang akan melihat pelbagai seperti itu akan mengambil masa ² n? [Kevin] [didengar] disusun. Tepat sekali, jadi jika saya mempunyai array 9, 7, 6, 5, 2, pertama 9 akan gelembung sepanjang jalan sehingga. Selepas 1 lelaran kita akan mempunyai 7, 6, 5, 2, 9. Kemudian 7 akan gelembung up, 6, 5, 2, 7, 9, dan sebagainya dan sebagainya. Kita akan mempunyai untuk pergi melalui pelbagai keseluruhan n kali, dan anda sebenarnya boleh mendapatkan sedikit lebih tepat daripada ini kerana sekali kita telah berpindah 9 sepanjang jalan sehingga ke jawatan terakhir mungkin kita tahu bahawa kita tidak perlu untuk membandingkan terhadap elemen yang lagi. Sebaik sahaja kita mula menggelegak 7 sehingga kita tahu bahawa kita boleh berhenti sekali 7 adalah betul sebelum 9 kerana kita sudah berbanding 9 kepadanya. Jika anda melakukan ini dalam cara yang bijak, ia tidak benar-benar, saya rasa, bahawa banyak masa. Anda tidak akan membandingkan semua kemungkinan [didengar] kombinasi setiap kali tunggal anda pergi melalui setiap lelaran. Tetapi masih, apabila kita bercakap tentang ini terikat atas kita katakan bahawa anda sedang melihat n ² perbandingan sepanjang jalan melalui. Mari kita kembali, dan sejak kita bermula untuk mendapatkan sedikit kesuntukan masa Saya akan mengatakan anda pasti perlu pergi melalui seluruh jadual ini, mengisi semua keluar. Fikirkan contoh. Fikirkan contoh konkrit. Itu benar-benar berguna dan membantu untuk melakukan. Lukiskan ia keluar. Ini adalah jenis jadual yang seperti anda pergi melalui dalam bidang sains komputer anda benar-benar harus bermula untuk tahu ini hati oleh. Ini adalah jenis soalan yang anda dapat dalam wawancara. Ini adalah pelbagai perkara-perkara yang baik untuk mengetahui, dan berfikir tentang kes-kes di pinggir, benar-benar memikirkan bagaimana untuk berfikir tentang mengetahui bahawa untuk menyelesaikan gelembung array terburuk mungkin untuk menyelesaikan dengan itu adalah salah satu yang dalam susunan terbalik. Petunjuk. Mari kita bercakap sedikit tentang petunjuk. Dalam beberapa minit terakhir kita ada di sini Saya tahu ini adalah sesuatu bersama-sama dengan fail I / O yang agak baru. Apabila kita bercakap mengenai petunjuk sebab kita mahu bercakap tentang petunjuk adalah kerana, satu, apabila kita sedang berusaha dalam C kita benar-benar pada tahap yang agak rendah berbanding dengan bahasa pengaturcaraan yang paling moden. Kami sebenarnya mampu untuk memanipulasi pembolehubah dalam ingatan, memikirkan ke mana mereka hendak pergi sebenarnya terletak dalam RAM kami. Sebaik sahaja anda telah pergi untuk mengambil kelas sistem operasi anda akan melihat bahawa, sekali lagi, jenis pengekstrakan. Itu bukan sebenarnya kes itu. Kami telah mendapat memori maya yang menyembunyikan butiran dari kami. Tetapi kini anda boleh mengandaikan bahawa apabila anda mempunyai program, contohnya, apabila anda mula menjalankan program-cipher Caesar anda Saya akan bertukar kembali kepada iPad saya benar-benar cepat- bahawa pada program yang sangat awal, jika anda mempunyai, katakan, 4 gigabait RAM pada laptop anda, anda mendapat mengetepikan sebahagian ini, dan kita akan panggil RAM ini. Dan ia bermula di tempat kita pergi untuk memanggil 0, dan ia berakhir di tempat yang kita akan memanggil 4 gigabait. Saya benar-benar tidak boleh menulis. Man, yang digodam. Apabila program anda melaksanakan sistem operasi mengukir RAM, dan ia menentukan segmen yang berbeza untuk bahagian yang berlainan program anda, kuasailah Down sini kawasan ini adalah jenis tanah tidak lelaki. Apabila anda pergi sedikit lebih jauh di sini anda telah mendapat sebenarnya tempat di mana kod program untuk kehidupan anda. Itu kod binari sebenar, bahawa fail boleh laku sebenarnya mendapat dimuatkan ke dalam memori apabila anda menjalankan program, dan ia hidup dalam segmen kod. Dan sebagai program anda melaksanakan pemproses kelihatan di segmen kod ini untuk mengetahui apakah arahan yang seterusnya? Apakah garis seterusnya kod saya perlu untuk melaksanakan? Terdapat juga segmen data, dan ini adalah di mana mereka pemalar rentetan mendapat disimpan bahawa anda telah menggunakan. Dan kemudian lebih jauh sehingga ada tempat ini dipanggil timbunan itu. Kami mengakses memori di sana dengan menggunakan malloc, dan kemudian ke arah sangat atas program anda terdapat timbunan, dan itulah di mana kita telah bermain bagi kebanyakan permulaan. Ini bukan skala atau apa-apa. Banyak ini adalah sangat bergantung kepada mesin, sistem operasi bergantung, tetapi ini adalah agak bagaimana perkara mendapatkan chunked sehingga. Apabila anda menjalankan program dan anda mengisytiharkan pembolehubah dipanggil x- Saya akan menarik kotak lain bawah, dan ini akan menjadi RAM serta. Dan saya akan untuk melihat. Kami akan menarik garis bergerigi untuk menunjukkan ini hanya bahagian kecil RAM dan tidak semua ia sebagai kita melukis di atas. Jika saya mengisytiharkan satu pembolehubah integer dipanggil x, maka apa yang saya benar-benar mendapatkan pemetaan yang disimpan dalam jadual simbol program saya yang menghubungkan x nama kepada rantau ini memori yang saya telah disediakan di sini antara bar menegak. Jika saya mempunyai baris kod dalam program saya yang mengatakan bahawa x = 7 pemproses tahu "Oh, okay, saya tahu bahawa x kehidupan di lokasi ini dalam ingatan." "Saya akan pergi ke hadapan dan menulis 7 satu di sana." Bagaimana ia tahu apa lokasi ini adalah dalam ingatan? Nah, itu semua dilakukan pada masa kompil. Pengkompil menjaga memperuntukkan di mana setiap pembolehubah akan pergi dan mewujudkan pemetaan khas atau sebaliknya menghubungkan titik antara simbol dan di mana ia pergi, nama pembolehubah dan di mana ia akan hidup dalam ingatan. Tetapi ternyata bahawa kita sebenarnya boleh mengaksesnya dalam program-program kami juga. Ini mendapat penting apabila kita mula bercakap tentang beberapa struktur data, yang merupakan satu konsep bahawa kita akan memperkenalkan kemudian. Tetapi untuk sekarang, apa yang anda boleh tahu bahawa saya boleh membuat penunjuk ke lokasi ini, x. Sebagai contoh, saya boleh mencipta pembolehubah penunjuk. Apabila kita mewujudkan satu penuding kita menggunakan notasi bintang. Dalam kes ini, ini mengatakan saya akan mewujudkan penunjuk int. Ia adalah satu jenis sama seperti mana-mana lain. Kami memberikan pembolehubah seperti y, dan kemudian kita menetapkan ia sama dengan alamat, alamat. Dalam kes ini, kita boleh menetapkan y ke titik x dengan mengambil alamat x, yang kita lakukan dengan #: glib ini, dan kemudian kami menetapkan y menunjukkan. Apa ini pada dasarnya tidak ialah jika kita melihat RAM kami ini mencipta pembolehubah yang berasingan. Ia akan memanggilnya y, dan apabila garis kod ini melaksanakan ia sebenarnya akan mewujudkan penunjuk yang sedikit yang kita biasanya menarik sebagai anak panah, dan ia menetapkan y untuk menunjukkan ke x. Ya. [Pelajar] Jika x ialah sudah penunjuk, anda akan hanya melakukan int * y = x bukannya mempunyai #: glib? Ya. Jika x sudah penunjuk, maka anda boleh menetapkan 2 petunjuk sama antara satu sama lain, di mana y tidak akan menunjukkan kepada x, tetapi ia akan menunjukkan apa-apa x menunjuk ke. Malangnya, kita berada di luar masa. Apa yang saya ingin katakan pada ketika ini, kita boleh bercakap tentang offline ini, tetapi saya akan mengatakan mula bekerja melalui masalah ini, # 14. Anda boleh lihat sudah ada sedikit diisi untuk anda di sini. Anda boleh melihat bahawa apabila kita mengaku 2 petunjuk, int * x * y, dan ambil perhatian bahawa menunjuk * sebelah pembolehubah adalah sesuatu yang telah dilakukan pada tahun lepas. Ia ternyata bahawa ini adalah serupa dengan apa yang kita lakukan tahun ini. Ia tidak kira di mana anda menulis * apabila anda mengisytiharkan penunjuk. Tetapi kita telah menulis * seterusnya jenis kerana yang menjadikan ia sangat jelas bahawa anda mengisytiharkan pembolehubah penunjuk. Anda boleh melihat bahawa mengisytiharkan 2 petunjuk memberikan kita 2 kotak. Di sini apabila kita menetapkan x sama untuk malloc apa ini mengatakan mengetepikan memori dalam timbunan. Ini kotak kecil di sini, bulatan ini, terletak pada timbunan. X menunjuk kepada ia. Perhatikan bahawa y masih tidak menunjuk kepada apa-apa. Untuk mendapatkan memori untuk menyimpan nombor 42 ke x kita akan menggunakan apa notasi? [Pelajar] * x = 42. Tepat sekali, * x = 42. Ini bermakna mengikuti anak panah dan membuang 42 di sana. Di sini di mana kita menetapkan y dan x kita y telah menunjuk ke x. Sekali lagi, ini adalah sama seperti apa yang Kevin berkata mana kita menetapkan y sama ke x. Y tidak menunjuk ke x. Sebaliknya, ia menunjuk ke apa x menunjuk serta. Dan kemudian akhirnya dalam kotak terakhir ini terdapat 2 perkara yang mungkin yang boleh kita lakukan. Salah satunya adalah kita boleh mengatakan * x = 13. Satu perkara lagi ialah kita boleh mengatakan Alex, adakah anda tahu apa yang kita boleh lakukan di sini? Anda boleh mengatakan * x = 13 atau- [Pelajar] Anda boleh mengatakan apa sahaja int. [Nate H.] Jika ini telah dirujuk sebagai pembolehubah int kita boleh berbuat demikian. Kita juga boleh mengatakan * y = 13 kerana kedua-dua mereka sedang menunjuk ke tempat yang sama, supaya kita boleh menggunakan sama ada berubah-ubah untuk sampai ke sana. Yeah. >> [Pelajar] Apa yang ia akan kelihatan seperti jika kita hanya mengatakan int x ialah 13? Yang akan mengisytiharkan pembolehubah baru yang dipanggil x, yang tidak akan bekerja. Kita akan mempunyai perlanggaran kerana kita diisytiharkan x untuk menjadi penunjuk di sini. [Pelajar] Jika kita hanya mempunyai kenyataan itu dengan sendirinya apa yang ia akan kelihatan seperti dari segi bulatan? Jika kita mempunyai x = 13 maka kita akan mempunyai kotak, dan bukannya mempunyai anak panah keluar dari kotak, kita akan menarik ia sebagai hanya 13. [Pelajar] Dalam kotak. Okay. Terima kasih kerana menonton, dan nasib baik pada Kuiz 0. [CS50.TV]