1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Minggu 2, Sambungan] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Universiti Harvard] 3 00:00:04,220 --> 00:00:06,880 [Ini adalah CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Semua hak. Ini adalah CS50, dan ini adalah akhir 2 minggu. 5 00:00:10,990 --> 00:00:14,410 Jika anda mengharapkan untuk menjadi lapar sekitar masa ini esok, 6 00:00:14,410 --> 00:00:18,620 tahu bahawa kita akan mengadakan esok kumpulan kecil, Khamis, 1:15. 7 00:00:18,620 --> 00:00:21,360 Terdapat URL ini di sini jika anda ingin untuk RSVP. 8 00:00:21,360 --> 00:00:26,740 Ruang adalah terhad, jadi maafkanlah jika borang yang telah diisi oleh masa anda mengisi ini. 9 00:00:26,740 --> 00:00:29,300 Satu lagi URL, walaupun, yang mungkin menarik minat ini. 10 00:00:29,300 --> 00:00:32,369 Dalam hanya kira-kira masa sebulan, kursus ini akan disediakan 11 00:00:32,369 --> 00:00:36,890 semua lebih meluas melalui EDX, melalui mana orang di Internet akan dapat mengikuti bersama-sama, 12 00:00:36,890 --> 00:00:39,380 melibatkan diri dalam kursus ini agak aktif, sebenarnya. 13 00:00:39,380 --> 00:00:42,270 Mereka akan menggunakan Appliance CS50 dan CS50 Bincangkan 14 00:00:42,270 --> 00:00:45,490 dan kebanyakan alat perisian pelbagai yang kita sudah telah menggunakan semester ini. 15 00:00:45,490 --> 00:00:48,710 Dan salah satu inisiatif kita ingin mengambil sebagai percubaan tahun ini 16 00:00:48,710 --> 00:00:51,930 adalah untuk melihat betapa banyak kandungan kita boleh menterjemahkan 17 00:00:51,930 --> 00:00:53,960 ke dalam bahasa lisan dan bertulis yang lain. 18 00:00:53,960 --> 00:00:57,500 Jadi, jika anda mungkin mempunyai kepentingan dalam mengambil bahagian dalam projek ini 19 00:00:57,500 --> 00:01:02,270 di mana kami akan menyediakan transkrip dan sarikata Bahasa Inggeris untuk kuliah kursus 20 00:01:02,270 --> 00:01:05,450 dan seluar pendek dan seminar dan seksyen dan sebagainya, 21 00:01:05,450 --> 00:01:08,200 jika anda bercakap dengan lancar atau menulis dengan lancar beberapa bahasa lain, 22 00:01:08,200 --> 00:01:12,290 kita akan suka untuk melibatkan diri anda dalam projek ini di mana anda mengambil satu atau lebih video, 23 00:01:12,290 --> 00:01:15,200 menterjemahkannya ke dalam bahasa anda tahu cukup baik. 24 00:01:15,200 --> 00:01:18,700 >> Untuk memberi anda rasa antara muka, ada ini antara muka berasaskan web pengguna 25 00:01:18,700 --> 00:01:22,090 bahawa kita akan menggunakan yang akan mewujudkan asasnya UI seperti ini. 26 00:01:22,090 --> 00:01:24,290 Ini saya mengajar Halloween dahulu, 27 00:01:24,290 --> 00:01:27,390 dan di sebelah kanan di sana dalam hitam sebelah setem masa, 28 00:01:27,390 --> 00:01:31,210 anda akan melihat pelbagai perkara yang keluar dari mulut saya bahawa hari, 29 00:01:31,210 --> 00:01:34,850 dan kemudian di bawah anda akan dapat untuk menterjemahkan ke dalam bahasa lain 30 00:01:34,850 --> 00:01:38,690 apa sebenarnya pemetaan di antara keduanya, dalam kes ini, Bahasa Inggeris, mengatakan, Sepanyol. 31 00:01:38,690 --> 00:01:40,440 Jadi ia sebenarnya alat yang sangat user-friendly. 32 00:01:40,440 --> 00:01:43,370 Anda boleh putar balik dan pantas ke hadapan sangat mudah dengan kekunci pintas. 33 00:01:43,370 --> 00:01:47,490 Jadi jika anda ingin mengambil bahagian dalam eksperimen ini dan mempunyai kata-kata anda dilihat dan dibaca 34 00:01:47,490 --> 00:01:51,850 oleh berpotensi beribu-ribu orang di luar sana, sila berasa bebas untuk menyertai. 35 00:01:51,850 --> 00:01:54,350 Satu perkataan tentang kucing dari Isnin. 36 00:01:54,350 --> 00:02:00,350 Supaya kami telah menghantar mesej yang terlalu menakutkan, lakukan sedar bahawa, seperti waktu pejabat mencadangkan 37 00:02:00,350 --> 00:02:03,300 dan sebagai bahagian mencadangkan, reka bentuk kursus adalah amat 38 00:02:03,300 --> 00:02:07,360 telah pelajar bekerjasama dan bercakap untuk bekerja melalui set masalah 39 00:02:07,360 --> 00:02:11,260 dan masalah bersama-sama, dan benar-benar garis hanya datang ke, 40 00:02:11,260 --> 00:02:16,010 sekali lagi, kerja anda akhirnya mengemukakan seharusnya anda sendiri. 41 00:02:16,010 --> 00:02:18,860 Dan sebagainya agak jujur, dalam waktu pejabat, ia adalah benar-benar biasa, 42 00:02:18,860 --> 00:02:22,240 ia benar-benar dijangka malah, untuk berbual dengan beberapa orang kawan di sebelah anda. 43 00:02:22,240 --> 00:02:24,370 >> Jika dia sedang bergelut dengan beberapa topik dan anda seperti, 44 00:02:24,370 --> 00:02:27,940 "Oh, baik, izinkan saya memberi anda gambaran sepintas lalu beberapa baris kod yang saya tulis," itulah denda, 45 00:02:27,940 --> 00:02:31,250 yang berlaku, dan yang amat kondusif, saya fikir, dengan proses pembelajaran. 46 00:02:31,250 --> 00:02:36,750 Jika garis mendapat melintasi adalah apabila kepala adalah jenis condong ke sini untuk saat terlalu banyak 47 00:02:36,750 --> 00:02:41,160 atau minit untuk yang benar-benar telah menjadi peluang nyahhalang untuk rakan anda, 48 00:02:41,160 --> 00:02:44,160 dan sudah tentu apabila perkara mendapat ditukar melalui e-mel dan Dropbox dan sebagainya, 49 00:02:44,160 --> 00:02:45,640 terdapat juga baris. 50 00:02:45,640 --> 00:02:48,620 Jadi dengan cara semua berasa selesa dan berasa digalakkan untuk berbual dengan rakan-rakan 51 00:02:48,620 --> 00:02:52,810 dan rakan sekelas tentang psets dan lebih dan hanya menyedari bahawa apa yang anda akhirnya mengemukakan 52 00:02:52,810 --> 00:02:57,340 benar-benar harus menjadi produk ciptaan anda dan bukan orang lain. 53 00:02:57,340 --> 00:03:00,490 Dan sebagainya salah satu masalah domain khusus untuk pset2, 54 00:03:00,490 --> 00:03:04,740 yang akan keluar malam esok lewat, adalah untuk menyelam ke dalam dunia kriptografi, 55 00:03:04,740 --> 00:03:08,970 yang merupakan seni menyulitkan atau bergegas maklumat, 56 00:03:08,970 --> 00:03:12,600 dan ini akhirnya berkaitan dengan dunia keselamatan. 57 00:03:12,600 --> 00:03:16,560 Kini, keselamatan bagi kebanyakan kita datang dalam bentuk mekanisme yang agak biasa. 58 00:03:16,560 --> 00:03:19,050 Semua kita mempunyai nama pengguna dan kata laluan, 59 00:03:19,050 --> 00:03:23,450 dan kita semua mempunyai nama pengguna dan kata laluan yang sangat buruk, kemungkinan besar. 60 00:03:23,450 --> 00:03:28,240 >> Jika kata laluan anda adalah sama pada beberapa laman web, yang mungkin bukan idea yang terbaik, 61 00:03:28,240 --> 00:03:30,070 seperti yang kita akan membincangkan ke arah akhir semester. 62 00:03:30,070 --> 00:03:34,720 Jika kata laluan anda ditulis pada nota melekit - jenaka tidak - pada monitor anda, 63 00:03:34,720 --> 00:03:38,350 yang juga tidak semestinya reka bentuk yang terbaik tetapi agak satu fenomena biasa. 64 00:03:38,350 --> 00:03:42,470 Dan jika anda tidak menggunakan kriptografi untuk menyulitkan kata laluan anda, 65 00:03:42,470 --> 00:03:44,210 mereka terdedah. 66 00:03:44,210 --> 00:03:47,270 Jadi, jika anda berfikir anda menjadi super bijak dengan mempunyai dokumen Word tersembunyi 67 00:03:47,270 --> 00:03:49,910 tempat pada cakera keras anda yang mempunyai semua kata laluan anda 68 00:03:49,910 --> 00:03:53,670 tetapi ia adalah dalam folder bahawa tiada siapa yang akan melihat, yang terlalu tidak adalah satu mekanisme yang sangat selamat. 69 00:03:53,670 --> 00:03:56,990 Dan jadi apa pset2 akan memperkenalkan ini seni kriptografi 70 00:03:56,990 --> 00:04:02,010 dan bergegas maklumat supaya perkara-perkara seperti kata laluan adalah semua lebih selamat. 71 00:04:02,010 --> 00:04:05,790 Konteks di sini adalah bahawa dengan data tidak selamat 72 00:04:05,790 --> 00:04:07,930 datang peluang untuk menyulitkan dan perebutan ia. 73 00:04:07,930 --> 00:04:11,470 Dan sebagainya ini, misalnya, adalah satu contoh mesej disulitkan. 74 00:04:11,470 --> 00:04:14,700 Ini sebenarnya mengatakan sesuatu dalam bahasa Inggeris, tetapi ia adalah jelas tidak sepenuhnya jelas. 75 00:04:14,700 --> 00:04:18,279 Dan kita akan datang bulatan penuh hari ini untuk mengusik selain apa mesej ini rahsia di sini. 76 00:04:18,279 --> 00:04:23,490 Tetapi dalam dunia sebenar komputer, perkara-perkara tidak walaupun kelihatan seperti mereka mungkin frasa Bahasa Inggeris. 77 00:04:23,490 --> 00:04:28,430 Sebagai contoh, ini adalah apa yang anda mungkin mendapati pada standard Linux atau Mac atau komputer UNIX 78 00:04:28,430 --> 00:04:32,070 dalam fail yang pernah suatu masa dahulu dipanggil fail kata laluan. 79 00:04:32,070 --> 00:04:34,200 >> Kini ia telah berpindah ke tempat lain. 80 00:04:34,200 --> 00:04:39,210 Tetapi jika anda melihat di tempat yang betul pada sistem, anda akan melihat bukan sahaja username anda 81 00:04:39,210 --> 00:04:43,400 atau bahawa orang lain pada sistem, tetapi anda akan melihat versi disulitkan kata laluan mereka. 82 00:04:43,400 --> 00:04:47,980 Malah, perkataan kubur sana menunjukkan bahawa barangan berikut adalah disulitkan, 83 00:04:47,980 --> 00:04:52,680 dan ini siri surat yang seolah-olah rawak dan huruf dan nombor dan sebagainya 84 00:04:52,680 --> 00:04:56,480 boleh dibuka hanya dengan umumnya mengetahui beberapa rahsia - 85 00:04:56,480 --> 00:04:58,840 perkataan rahsia, rahsia nombor - 86 00:04:58,840 --> 00:05:03,160 dan sebagainya sememangnya, seni kriptografi akhirnya bisul ke mempercayai sejenis 87 00:05:03,160 --> 00:05:05,650 dan mengetahui sesuatu yang orang lain tidak. 88 00:05:05,650 --> 00:05:10,090 Jadi kita akan meneroka ini dalam sedikit lebih terperinci hari ini dan dalam pset untuk datang. 89 00:05:10,090 --> 00:05:12,200 Dan kini satu perkataan pada pas / gagal. 90 00:05:12,200 --> 00:05:15,360 Terutamanya kerana sesetengah daripada anda telah menyelam ke pset1, Appliance, 91 00:05:15,360 --> 00:05:19,080 dan sebuah dunia yang sangat baru untuk diri sendiri, menyedari bahawa kekecewaan dan kekeliruan 92 00:05:19,080 --> 00:05:21,700 dan hanya masalah teknikal agak dijangka, 93 00:05:21,700 --> 00:05:24,180 terutama dengan pset pertama, di mana terdapat hanya begitu banyak baru, 94 00:05:24,180 --> 00:05:27,730 hanya mendapat biasa dengan ls dan cd dan semua arahan batin 95 00:05:27,730 --> 00:05:33,050 dan persekitaran baru, dan itulah berasingan dari bahan sebenar dan pengaturcaraan sendiri. 96 00:05:33,050 --> 00:05:36,940 Jadi sedar juga bahawa terdapat pasti waktu pejabat yang wujud sebagai struktur sokongan. 97 00:05:36,940 --> 00:05:38,880 >> Seksyen bermula Ahad ini akan datang. 98 00:05:38,880 --> 00:05:42,960 Tetapi yang paling penting, jika anda rasa hanya bahawa ini bukan dunia untuk anda, 99 00:05:42,960 --> 00:05:44,710 menyedari bahawa ia benar-benar tidak hanya mengambil masa. 100 00:05:44,710 --> 00:05:48,600 Dan kalaulah tidak bagi peluang ini tahun lalu untuk saya mengambil pas kelas / gagal, 101 00:05:48,600 --> 00:05:50,990 secara jujur, saya tidak akan telah pun menjejakkan kaki di dalam kelas. 102 00:05:50,990 --> 00:05:53,690 Dan anda boleh menukar sehingga, katakan, hari Isnin kelima kursus, 103 00:05:53,690 --> 00:05:58,280 jadi jika anda berada di pinggir kini, menyedari bahawa bukannya kepala ke beberapa perairan yang lain sama sekali, 104 00:05:58,280 --> 00:06:01,260 tidak pasti mempertimbangkan hanya berubah untuk lulus / gagal. 105 00:06:01,260 --> 00:06:04,570 Sekali lagi, tidak benar-benar budaya ini di sini di Harvard mengambil perkara lulus / gagal 106 00:06:04,570 --> 00:06:08,670 sejak semua orang benar-benar mahu untuk mencapai atau overachieve, 107 00:06:08,670 --> 00:06:11,130 tetapi terus terang, ini adalah cara yang indah untuk mencuba sesuatu yang keluar 108 00:06:11,130 --> 00:06:16,720 yang mungkin tidak biasa kepada anda, dan anda akan berakhir lakukan, dalam kebanyakan kes, agak halus, 109 00:06:16,720 --> 00:06:18,210 mungkin banyak untuk mengejutkan anda. 110 00:06:18,210 --> 00:06:20,980 Dan dari segi yang lebih konkrit, apa yang saya fikir lulus / gagal umumnya tidak, 111 00:06:20,980 --> 00:06:22,940 terutamanya kerana anda mungkin telah mengalami dengan pset0, 112 00:06:22,940 --> 00:06:26,560 jika anda meletakkan dalam 10 jam, 15 jam, 25 jam ke beberapa pset 113 00:06:26,560 --> 00:06:29,920 dan anda hanya terhantuk kepala anda terhadap dinding dan ia mendapat super pada lewat malam 114 00:06:29,920 --> 00:06:33,950 tetapi anda telah mengambil pset 90% dari jalan dan anda hanya tidak dapat memikirkan satu perkara, 115 00:06:33,950 --> 00:06:36,520 lulus / gagal benar-benar mengambil kelebihan luar kelas seperti ini, 116 00:06:36,520 --> 00:06:39,100 di mana anda boleh menyusun gembira berkata, "Okay, saya tahu ia tidak sempurna, 117 00:06:39,100 --> 00:06:42,350 tetapi saya bekerja pantat saya mengenai perkara ini, saya cukup gembira dengan mana ia berakhir, " 118 00:06:42,350 --> 00:06:44,850 dan yang akan memenuhi harapan pas / gagal. 119 00:06:44,850 --> 00:06:47,540 Jadi jangan menyimpan bahawa dalam fikiran. Semua hak. 120 00:06:47,540 --> 00:06:50,520 >> Jadi orang-orang yang telah berjuang untuk menggunakan Universiti Harvard Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 tahu bahawa terdapat SSID CS50, sambungan Wi-Fi, yang terapung di sekeliling 122 00:06:54,780 --> 00:06:56,490 bahawa anda mungkin mempunyai nasib yang lebih baik untuk. 123 00:06:56,490 --> 00:07:00,130 Ia adalah ironis sedikit bahawa kata laluan untuk ini, jika anda ingin mencuba untuk menyambung ke ini 124 00:07:00,130 --> 00:07:08,350 untuk kelajuan yang lebih baik - dan marilah kita tahu jika ia tidak baik - 12345, sepanjang jalan sehingga 8 125 00:07:08,350 --> 00:07:10,910 kerana 8 adalah lebih selamat daripada 5. 126 00:07:10,910 --> 00:07:16,910 Jadi, jika anda memerlukan kata laluan Wi-Fi, menyambung ke CS50 tanpa wayar di sini, 12345678, 127 00:07:16,910 --> 00:07:20,380 dan paparkan dalam CS50 Bincangkan jika anda masih mempunyai isu penyambungan sekejap, 128 00:07:20,380 --> 00:07:25,420 dan kita akan membiarkan kuasa yang akan tahu untuk ruang ini. Semua hak. 129 00:07:25,420 --> 00:07:32,230 Jadi penggoda cepat, terutamanya bagi mereka yang peminat lelaki atau perempuan semua perkara Apple. 130 00:07:32,230 --> 00:07:37,460 Apa yang saya digali daripada beberapa tahun kembali fail ini di sini, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 hanya untuk jenis membuat lebih konkrit dan lebih kompleks 132 00:07:39,930 --> 00:07:42,560 beberapa program C yang lebih asas kita telah menulis. 133 00:07:42,560 --> 00:07:46,910 Jadi saya membuka fail ini, iUnlock.c. Ia boleh didapati pada halaman Ceramah untuk hari ini. 134 00:07:46,910 --> 00:07:49,810 Pada sebelah kiri anda lihat satu senarai panjang fungsi. 135 00:07:49,810 --> 00:07:53,230 Jadi rakan-rakan yang menulis ini menulis banyak fungsi, lebih daripada sekadar utama. 136 00:07:53,230 --> 00:07:57,340 Dia menggunakan sekumpulan keseluruhan perpustakaan di sini, dan jika kita mula menatal, 137 00:07:57,340 --> 00:08:04,890 apa ini sebenarnya adalah yang pertama, saya percaya, retak untuk iPhone asal. 138 00:08:04,890 --> 00:08:09,830 >> Apabila anda mahu untuk jailbreak iPhone asal, yang bermaksud untether daripada AT & T 139 00:08:09,830 --> 00:08:13,710 dan sebenarnya memasang perisian khas di atasnya dan melakukan perkara-perkara bahawa Apple tidak mahu orang untuk melakukan, 140 00:08:13,710 --> 00:08:18,480 seseorang mengambil masa untuk memikirkan bagaimana mereka boleh mengeksploitasi kelemahan perisian, 141 00:08:18,480 --> 00:08:22,690 kesilapan, pepijat, dalam perisian Apple, dan dengan itu dilahirkan iUnlock.c - 142 00:08:22,690 --> 00:08:26,760 bahawa jika anda disusun pada komputer anda dan dipasang ia ke bawah 143 00:08:26,760 --> 00:08:29,430 yang disambungkan ke komputer anda melalui, katakan, kabel USB, 144 00:08:29,430 --> 00:08:32,450 ini akan memberikan anda keistimewaan pentadbiran atau akar di bawah anda 145 00:08:32,450 --> 00:08:34,620 dan membiarkan anda lakukan cukup banyak apa sahaja yang anda mahu. 146 00:08:34,620 --> 00:08:36,400 Dan sebagainya telah ada ini kucing yang menarik dan permainan tetikus 147 00:08:36,400 --> 00:08:39,340 antara Apple dan seluruh dunia khususnya kerana mereka, seperti banyak syarikat, 148 00:08:39,340 --> 00:08:43,350 cuba untuk mengunci barangan mereka ke bawah supaya anda hanya boleh lakukan dengan apa yang mereka ingin. 149 00:08:43,350 --> 00:08:47,360 Tetapi terima kasih kepada orang-orang seperti ini dan pemahaman butiran tahap rendah - 150 00:08:47,360 --> 00:08:50,830 dan dalam kes ini pengaturcaraan C - dan banyak membina biasa 151 00:08:50,830 --> 00:08:55,280 bahawa kita telah mula bermain dengan, anda mampu untuk benar-benar memanfaatkan perkakasan 152 00:08:55,280 --> 00:08:59,250 dengan cara yang anda lihat patut dan tidak semestinya beberapa entiti korporat. 153 00:08:59,250 --> 00:09:01,600 Jadi, sebagai contoh, saya tidak mempunyai idea apa yang semua ini adalah melakukan, 154 00:09:01,600 --> 00:09:03,580 tetapi GetVersion kedengaran cukup mudah, 155 00:09:03,580 --> 00:09:05,710 dan ia kelihatan seperti ini adalah fungsi yang orang ini menulis. 156 00:09:05,710 --> 00:09:09,250 Ia mengambil beberapa jenis integer sebagai hujah, tidak kembali apa-apa, 157 00:09:09,250 --> 00:09:13,710 tetapi nampaknya gelung dengan gelung sini dan jika keadaan, jika rehat keadaan, 158 00:09:13,710 --> 00:09:16,770 dan entah bagaimana berkaitan dengan nombor versi jika kita tatal ke bawah, 159 00:09:16,770 --> 00:09:19,650 walaupun banyak kata kunci ini akan menjadi baru. 160 00:09:19,650 --> 00:09:22,590 Dan terdapat banyak keseluruhan fungsi di sini tidak pernah kita lihat dan mungkin tidak pernah melihat 161 00:09:22,590 --> 00:09:24,350 sepanjang semester. 162 00:09:24,350 --> 00:09:29,160 >> Pada akhir hari, ia mengikut peraturan yang sama dan logik bahawa kita telah bermain dengan setakat ini. 163 00:09:29,160 --> 00:09:34,340 Jadi ini adalah terlalu lama untuk memecahkan 3 iPhone anda atau 4s atau tidak lama lagi 5S hari ini, 164 00:09:34,340 --> 00:09:38,830 tetapi tahu bahawa ia semua amat berasal dari dunia ini yang kita telah menyelam ke dalam. 165 00:09:38,830 --> 00:09:42,280 Mari kita lihat pada contoh yang sedikit lebih mudah: 166 00:09:42,280 --> 00:09:46,260 yang satu ini, hanya untuk mendapatkan panas dengan sintaks tertentu dan juga beberapa jenis data lain 167 00:09:46,260 --> 00:09:48,910 bahawa kita telah bercakap tentang tetapi tidak benar-benar dilihat dalam C. 168 00:09:48,910 --> 00:09:53,670 Ini adalah fail yang dipanggil positive1.c, dan setiap komen-komen di atas, 169 00:09:53,670 --> 00:09:56,070 ini hanya menuntut bahawa pengguna memberikan nombor positif. 170 00:09:56,070 --> 00:09:59,910 Jadi ia adalah satu contoh gelung do-sementara, yang bagus untuk program pengguna interaktif 171 00:09:59,910 --> 00:10:02,070 di mana anda perlu untuk memberitahu pengguna untuk melakukan sesuatu, 172 00:10:02,070 --> 00:10:05,530 dan jika mereka tidak bekerjasama anda menjerit pada mereka atau menolak input mereka. 173 00:10:05,530 --> 00:10:10,480 Kes di titik: Saya akan melakukan garisan 19 melalui 24 174 00:10:10,480 --> 00:10:14,620 selagi pengguna tidak memberikan saya nombor positif. 175 00:10:14,620 --> 00:10:21,340 Detail di sini on line 18, kenapa Saya mengaku n atas gelung ini keseluruhan membina 176 00:10:21,340 --> 00:10:26,870 berbanding sebelah kanan hingga 22 barisan di mana saya benar-benar peduli untuk mendapatkan n? Yeah. 177 00:10:26,870 --> 00:10:29,330 [Pelajar] Skop. >> Yeah, jadi isu ini skop. 178 00:10:29,330 --> 00:10:31,770 Dan dari segi orang biasa, apakah skop merujuk kepada? 179 00:10:34,880 --> 00:10:41,560 Yeah. >> [Sambutan pelajar didengar] >> Bolehkah anda bercakap sedikit lebih kuat? 180 00:10:41,560 --> 00:10:45,440 [Pelajar] di mana anda boleh mengakses pembolehubah yang. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Di mana anda boleh mengakses pembolehubah tertentu. 182 00:10:47,610 --> 00:10:50,990 Dan secara amnya, kemestian setakat ini telah bahawa skop beberapa pembolehubah 183 00:10:50,990 --> 00:10:56,140 ditakrifkan oleh pendakap kerinting yang paling terkini yang anda telah lihat. 184 00:10:56,140 --> 00:11:03,070 >> Dan demikian dalam kes ini, jika saya membuat kesilapan mengisytiharkan n on line 22, garis yang akan bekerja. 185 00:11:03,070 --> 00:11:10,840 Saya akan mendapat int, dan saya akan meletakkan ia ke dalam n yang berubah-ubah di baris 22, 186 00:11:10,840 --> 00:11:17,060 tetapi yang baris kod sekarang akan tidak mempunyai idea apa yang saya bercakap tentang? >> [Pelajar] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, dan ia bertukar keluar 24 juga kerana dalam kes ini ia jatuh di luar daripada pendakap kerinting. 188 00:11:23,840 --> 00:11:28,550 Jadi hanya sedikit kacau ganggu tetapi sangat mudah diselesaikan dengan hanya mengisytiharkan pembolehubah 189 00:11:28,550 --> 00:11:30,700 luar fungsi sendiri. 190 00:11:30,700 --> 00:11:32,760 Kita akan lihat nanti hari ini anda boleh pergi satu langkah ke hadapan 191 00:11:32,760 --> 00:11:34,940 dan anda juga boleh mendapatkan sedikit malas. 192 00:11:34,940 --> 00:11:39,660 Dan ini tidak disyorkan secara umum, tetapi anda juga boleh mendapatkan malas 193 00:11:39,660 --> 00:11:44,150 dan meletakkan pembolehubah global, jadi untuk bercakap, tidak dalam fungsi, bukan di dalam gelung, 194 00:11:44,150 --> 00:11:49,800 tetapi dalam fail sendiri, luar semua fungsi anda telah ditulis, seperti yang saya lakukan di sini on line 15. 195 00:11:49,800 --> 00:11:55,220 Ini secara umumnya disukai, tetapi sedar ini adalah satu penyelesaian yang kadang-kadang masalah-masalah lain, 196 00:11:55,220 --> 00:11:56,910 kerana akhirnya kita akan melihat. 197 00:11:56,910 --> 00:11:59,500 Jadi sekarang kita akan meninggalkan ia seperti ini, tetapi mari kita lihat jika kita boleh menulis semula ini 198 00:11:59,500 --> 00:12:02,360 hanya untuk memulakan menyatakan diri kita sedikit berbeza. 199 00:12:02,360 --> 00:12:05,550 Program ini, hanya perlu jelas, adalah positive1. 200 00:12:05,550 --> 00:12:11,980 Biar saya teruskan di sini dan dalam tetingkap terminal saya membuat positive1, Masukkan. 201 00:12:11,980 --> 00:12:15,080 Menyusun okay. Saya akan untuk menjalankan positive1, tekan Enter. 202 00:12:15,080 --> 00:12:19,250 Saya menuntut bahawa anda memberi saya integer positif. Saya akan mengatakan -1. Yang tidak bekerja. 203 00:12:19,250 --> 00:12:22,340 0, 99. Itu seolah-olah untuk bekerja. 204 00:12:22,340 --> 00:12:25,310 Mungkin tidak ujian paling ketat, tetapi sekurang-kurangnya ia adalah cek kewarasan bagus 205 00:12:25,310 --> 00:12:27,100 bahawa kita berada di landasan yang betul. 206 00:12:27,100 --> 00:12:29,570 >> Jadi sekarang mari saya pergi ke hadapan dan membuka versi 2 ini, 207 00:12:29,570 --> 00:12:32,800 dan apa yang berbeza? 208 00:12:32,800 --> 00:12:39,030 Ia melaksanakan perkara yang sama, tetapi apa yang melompat keluar sebagai jelas berbeza masa ini? 209 00:12:40,790 --> 00:12:47,090 Ini bool hijau. Ia ditonjolkan dalam hijau, kata kunci ini dikenali sebagai bool, yang merupakan jenis data. 210 00:12:47,090 --> 00:12:50,510 Ia tidak datang dibina dalam semua versi C. 211 00:12:50,510 --> 00:12:52,650 Anda perlu termasuk perpustakaan tertentu. 212 00:12:52,650 --> 00:12:56,460 Dalam kes kami, saya termasuk perpustakaan CS50 supaya kita mempunyai akses kepada bool. 213 00:12:56,460 --> 00:12:59,860 Tetapi di baris 18, kita seolah-olah mempunyai nilai Boolean sini dipanggil bersyukur. 214 00:12:59,860 --> 00:13:02,190 Saya boleh dipanggil apa-apa ini, tetapi saya memanggilnya bersyukur 215 00:13:02,190 --> 00:13:04,750 hanya untuk jenis menyampaikan beberapa makna semantik. 216 00:13:04,750 --> 00:13:07,700 Jadi pada mulanya on line 18, saya nampaknya tidak bersyukur 217 00:13:07,700 --> 00:13:12,230 kerana nilai bersyukur Boolean dimulakan palsu dalam 18 baris. 218 00:13:12,230 --> 00:13:16,500 Dan kemudian ia seolah-olah apa yang saya telah dilakukan di sini dalam barisan 21 melalui 23 219 00:13:16,500 --> 00:13:19,200 Saya hanya jenis ditulis semula logik saya. 220 00:13:19,200 --> 00:13:26,100 Jadi tidak berfungsi berbeza, tetapi di baris 22 sekarang saya memeriksa jika int pengguna telah disediakan 221 00:13:26,100 --> 00:13:31,360 adalah lebih besar daripada 0, maka saya hanya menukar nilai berterima kasih kepada true. 222 00:13:31,360 --> 00:13:35,590 Dan mengapa saya berbuat demikian? Kerana di baris 25, nampaknya saya akan untuk memeriksa keadaan. 223 00:13:35,590 --> 00:13:39,760 Adakah gelung ini manakala bersyukur adalah palsu. 224 00:13:39,760 --> 00:13:42,960 Jadi saya mencadangkan ini sebagai alternatif kepada versi 1 225 00:13:42,960 --> 00:13:47,050 kerana ia sekurang-kurangnya sedikit lebih intuitif mungkin, ia sedikit lebih mendalam dalam Bahasa Inggeris. 226 00:13:47,050 --> 00:13:51,980 Jadi melakukan perkara-perkara berikut semasa anda tidak bersyukur atau sementara bersyukur adalah palsu. 227 00:13:51,980 --> 00:13:56,220 Dan masa ini juga saya nampaknya tidak ingati apa yang pengguna ditaip dalam 228 00:13:56,220 --> 00:14:00,050 kerana notis tidak ada n ubah, jadi sebenarnya, satu pembohongan putih sedikit di sana. 229 00:14:00,050 --> 00:14:03,290 >> Fungsi, program ini adalah sedikit berbeza sekali kita sampai kepada bahagian bawah ia 230 00:14:03,290 --> 00:14:04,960 kerana saya tidak mengingati apa yang n. 231 00:14:04,960 --> 00:14:09,120 Tetapi saya mahu untuk menunjukkan di sini juga bahawa walaupun kita telah melihat GetInt 232 00:14:09,120 --> 00:14:13,780 dan GetString yang digunakan di sebelah kanan satu tanda sama setakat 233 00:14:13,780 --> 00:14:17,310 supaya kita ingat nilai teknikalnya, yang tidak tegas perlu. 234 00:14:17,310 --> 00:14:20,290 Jika atas apa jua sebab anda hanya tidak peduli untuk menyimpan nilai, 235 00:14:20,290 --> 00:14:25,540 anda hanya mahu untuk memeriksa nilai, notis bahawa kita hanya boleh menulis ini sebagai GetInt, 236 00:14:25,540 --> 00:14:27,320 terbuka paren, paren rapat. 237 00:14:27,320 --> 00:14:30,570 Bahawa fungsi akan kembali nilai, seperti yang kita telah berkata. 238 00:14:30,570 --> 00:14:32,220 Ia akan memberi anda kembali int. 239 00:14:32,220 --> 00:14:34,460 Dan jadi jika anda mental memikirkan perkara ini berlaku, 240 00:14:34,460 --> 00:14:38,190 apabila saya menaip dalam 99, GetInt mengembalikan nombor 99, 241 00:14:38,190 --> 00:14:41,840 dan sebagainya konsep, ia seolah-olah kod saya sebenarnya ini. 242 00:14:41,840 --> 00:14:45,950 Jadi, jika 99 memang lebih besar daripada 0, maka bersyukur menjadi benar, 243 00:14:45,950 --> 00:14:50,810 maka garis 25 sedar aduh, kita lakukan kerana saya kini bersyukur, 244 00:14:50,810 --> 00:14:53,970 dan di baris 26, kita hanya berkata, "Terima kasih kerana integer positif!" 245 00:14:53,970 --> 00:14:55,960 apa yang ia berlaku untuk menjadi. 246 00:14:55,960 --> 00:14:59,140 Sekarang mari kita buat gula sintaktik sedikit di sini, jadi untuk bercakap. 247 00:14:59,140 --> 00:15:04,670 Mari kita lihat jika kita boleh membersihkan 25 ini selaras dengan varian ini ketiga dan terakhir dalam positive3. 248 00:15:04,670 --> 00:15:13,600 >> Notis-satunya perbezaan sekarang ialah apa baris kod? >> [Pelajar] 25. >> [Malan] Yeah, 25. 249 00:15:13,600 --> 00:15:17,680 Dan kita telah tidak benar-benar melihat silap mata ini sahaja lagi, tetapi kita tidak melihat tanda seru pada hari Isnin, 250 00:15:17,680 --> 00:15:21,070 yang menandakan apa? >> [Pelajar] Tidak. >> Tidak atau penafian. 251 00:15:21,070 --> 00:15:23,510 Jadi mengambil nilai Boolean dan flip nilainya. 252 00:15:23,510 --> 00:15:25,810 Benar menjadi palsu, palsu menjadi benar. 253 00:15:25,810 --> 00:15:30,420 Jadi ini, saya akan mencadangkan, walaupun sedikit lebih intuitif cara menulis kod 254 00:15:30,420 --> 00:15:33,430 kerana saya masih memulakan berterima kasih kepada palsu, saya masih melakukan perkara-perkara berikut, 255 00:15:33,430 --> 00:15:36,010 Saya menetapkan berterima kasih kepada true apabila tiba masanya, 256 00:15:36,010 --> 00:15:40,880 tetapi kini anda boleh benar-benar hanya menterjemahkan kod ini secara lisan kiri ke kanan, 257 00:15:40,880 --> 00:15:45,630 sementara (bersyukur); kerana bang atau titik seru menandakan tanggapan tidak, 258 00:15:45,630 --> 00:15:47,580 jadi sementara tidak bersyukur. 259 00:15:47,580 --> 00:15:49,900 Jadi sekali lagi, kita tidak memperkenalkan sebarang konsep baru per se. 260 00:15:49,900 --> 00:15:53,730 Kita bercakap tentang Booleans kembali apabila kita bermain dengan Scratch, 261 00:15:53,730 --> 00:15:56,720 tetapi sedar sekarang kita hanya boleh mula menulis kod kita dalam pelbagai cara. 262 00:15:56,720 --> 00:16:01,060 Jadi, terutamanya dalam pset1 jika anda jenis berjuang untuk memikirkan cara untuk menulis beberapa program, 263 00:16:01,060 --> 00:16:04,340 kemungkinan adalah anda berada dalam nasib kerana ada boleh menjadi apa-apa bilangan penyelesaian 264 00:16:04,340 --> 00:16:06,110 bahawa anda boleh berlaku ke atas. 265 00:16:06,110 --> 00:16:10,500 Sebagai contoh, ini adalah hanya 3 bagi walaupun yang paling mudah program. Semua hak. 266 00:16:10,500 --> 00:16:14,200 Dan sekarang ingat pada hari Isnin kita meninggalkan pada nota ini dengan nilai-nilai kembali. 267 00:16:14,200 --> 00:16:18,450 Jadi untuk kali pertama kita menulis satu program yang tidak hanya mempunyai utama; 268 00:16:18,450 --> 00:16:22,550 ia juga mempunyai fungsi tersendiri adat yang saya tulis di sini. 269 00:16:22,550 --> 00:16:26,810 Jadi di baris 31 melalui 34 saya telah melaksanakan fungsi kiub. 270 00:16:26,810 --> 00:16:30,240 Ia tidak kompleks. Ia hanya * a * a dalam kes ini. 271 00:16:30,240 --> 00:16:34,750 Tetapi apa yang penting mengenainya adalah bahawa saya mengambil input dalam bentuk 272 00:16:34,750 --> 00:16:39,180 dan saya kembali output dalam bentuk * a * a. 273 00:16:39,180 --> 00:16:43,560 Jadi sekarang saya mempunyai keupayaan, banyak seperti saya digunakan dengan prinf sahaja, 274 00:16:43,560 --> 00:16:47,240 untuk memanggil fungsi ini dengan memanggil fungsi kiub. 275 00:16:47,240 --> 00:16:51,970 >> Dan fungsi kiub mengambil beberapa input, dan fungsi kiub kembali output beberapa. 276 00:16:51,970 --> 00:16:56,960 Sebaliknya, printf hanya melakukan sesuatu. 277 00:16:56,960 --> 00:17:00,840 Ia tidak kembali apa-apa yang kita mengambil berat tentang, walaupun sebagai selain ia tidak memulangkan nilai; 278 00:17:00,840 --> 00:17:03,110 anda hanya umumnya mengabaikan ia. 279 00:17:03,110 --> 00:17:06,510 Printf hanya melakukan sesuatu. Ia mempunyai kesan sampingan percetakan skrin. 280 00:17:06,510 --> 00:17:11,770 Sebaliknya di sini, kita mempunyai fungsi kiub, yang sebenarnya mengembalikan sesuatu. 281 00:17:11,770 --> 00:17:15,520 Jadi bagi mereka yang biasa dengan ini, ia adalah satu idea yang agak mudah. 282 00:17:15,520 --> 00:17:19,640 Tetapi bagi mereka yang kurang biasa dengan idea ini lulus dalam input dan mendapatkan kembali output, 283 00:17:19,640 --> 00:17:21,950 mari kita cuba hanya sesuatu yang mudah super. 284 00:17:21,950 --> 00:17:25,490 Adakah sesiapa yang selesa datang di atas pentas secara ringkas? 285 00:17:25,490 --> 00:17:28,040 Anda perlu menjadi selesa dengan kamera pada anda juga. Yeah? Okay. 286 00:17:28,040 --> 00:17:31,240 Apa nama anda? >> [Pelajar] Ken. >> Ken. Semua hak. Ken, datang ke atas. 287 00:17:31,240 --> 00:17:35,050 Ken akan menjadi fungsi kejayaannya di sini. 288 00:17:35,050 --> 00:17:38,720 Mari kita pergi ke hadapan dan melakukan ini. Mari kita mendapat mewah sedikit. 289 00:17:38,720 --> 00:17:42,260 Nice to meet you. Selamat datang ke peringkat pusat. Semua hak. 290 00:17:42,260 --> 00:17:46,640 Mari kita memukul butang ini di sini. Semua hak. 291 00:17:46,640 --> 00:17:49,820 Jadi di sini anda mempunyai papan hitam moden, 292 00:17:49,820 --> 00:17:53,470 dan apa yang saya adalah fungsi utama, misalnya, 293 00:17:53,470 --> 00:17:56,460 dan saya tidak mempunyai iPad dalam tangan saya. 294 00:17:56,460 --> 00:17:59,710 >> Saya tidak benar-benar ingat bagaimana untuk - Baiklah, saya tidak boleh mengatakan bahawa. 295 00:17:59,710 --> 00:18:02,480 Saya tidak benar-benar mempunyai tulisan tangan yang baik, 296 00:18:02,480 --> 00:18:05,520 dan sebagainya Oleh itu, saya mahu anda untuk mencetak sesuatu pada skrin bagi saya. 297 00:18:05,520 --> 00:18:12,040 Saya menjadi program utama, dan saya akan mempunyai anda mengatakan ini 298 00:18:12,040 --> 00:18:16,720 dengan menulis dalam calar ayam saya dan kemudian lulus anda input. 299 00:18:16,720 --> 00:18:20,400 Jadi bodoh walaupun latihan ini adalah, konsep fungsi dan memanggil fungsi 300 00:18:20,400 --> 00:18:22,400 dan mengembalikan fungsi benar-benar bisul turun ini. 301 00:18:22,400 --> 00:18:26,260 Saya utama, saya baru sahaja menulis printf, quote-unquote sesuatu pada skrin, 302 00:18:26,260 --> 00:18:29,110 Saya menjalankan program ini, dan secepat printf mendapat dipanggil, 303 00:18:29,110 --> 00:18:32,880 ia mengambil masa satu hujah atau satu parameter kadang-kadang antara petikan berganda. 304 00:18:32,880 --> 00:18:35,880 Berikut adalah hujah itu. Saya lulus ia ke Ken. 305 00:18:35,880 --> 00:18:39,020 Beliau adalah kotak hitam menulis beberapa beberapa tahun yang lalu 306 00:18:39,020 --> 00:18:41,510 yang nampaknya hanya tahu bagaimana untuk mencetak perkara pada skrin. 307 00:18:41,510 --> 00:18:43,150 Jadi melaksanakan. 308 00:18:49,280 --> 00:18:51,280 Itu bukan buruk. Sangat baik. 309 00:18:51,280 --> 00:18:55,510 Jadi sekarang Ken dilakukan melaksanakan. Adakah dia perlu menyerahkan saya kembali apa-apa? 310 00:18:55,510 --> 00:18:57,470 Tidak bahawa kita telah melihat setakat ini. 311 00:18:57,470 --> 00:19:00,460 Sekali lagi, printf tidak sebenarnya mengembalikan nombor, tetapi kita akan mengabaikan bahawa buat masa sekarang 312 00:19:00,460 --> 00:19:03,470 kerana kita tidak pernah digunakan. Jadi itulah untuk Ken. 313 00:19:03,470 --> 00:19:08,580 Dan jadi sekarang utama mengambil alih kawalan program lagi 314 00:19:08,580 --> 00:19:11,060 kerana bahawa baris kod, printf, dilakukan melaksanakan. 315 00:19:11,060 --> 00:19:14,050 Dan kita pergi tentang cara kami, melaksanakan apa jua garisan lain terdapat. 316 00:19:14,050 --> 00:19:17,320 Jadi sekarang mari kita cuba satu contoh yang sedikit berbeza. 317 00:19:17,320 --> 00:19:24,940 Kali ini di sini mari kita mula-mula mengosongkan skrin, dan kali ini kita akan melakukan fungsi cubing, 318 00:19:24,940 --> 00:19:27,080 tetapi kali ini, saya menjangkakan nilai output. 319 00:19:27,080 --> 00:19:29,180 >> Jadi mari kita pergi ke hadapan dan melakukan ini. 320 00:19:29,180 --> 00:19:35,790 Kini saya mempunyai satu baris kod yang mengatakan x mendapat kiub x. 321 00:19:41,370 --> 00:19:46,370 Baris kod, ingat, kelihatan seperti ini: x = kiub (x); 322 00:19:46,370 --> 00:19:50,930 Jadi bagaimana ini akan bekerja? Mari kita pergi ke hadapan dan memberikan anda skrin putih lagi. 323 00:19:50,930 --> 00:19:54,070 Saya akan menulis sekarang nilai x, 324 00:19:54,070 --> 00:20:01,400 yang pada masa ini dalam masa yang berlaku kepada menjadi, katakan, 2 untuk memastikan ia mudah. 325 00:20:01,400 --> 00:20:06,150 Saya telah diturunkan pada sehelai kertas nilai 2, yang merupakan nilai x saya. 326 00:20:06,150 --> 00:20:10,920 Saya menyerahkannya kepada Ken. >> Dan saya hanya menulis jawapannya? >> Yeah, mari kita hanya menulis jawapannya. 327 00:20:12,760 --> 00:20:18,940 Okay. Dan kini dia telah kembali saya sesuatu. Sempurna. Nice segue. 328 00:20:18,940 --> 00:20:23,120 Jadi sekarang dia tangan saya kembali nilai 8 dalam kes ini, dan apa yang saya lakukan dengan ia? 329 00:20:23,120 --> 00:20:28,250 Sebenarnya - mari kita lihat, mendapatkan hak ini. Apa yang saya akan lakukan dengan ia? 330 00:20:28,250 --> 00:20:33,440 Sekarang saya akan mengambil nilai ini dan sebenarnya menyimpan dalam bit-bit yang sama dalam ingatan. 331 00:20:33,440 --> 00:20:35,170 Tetapi notis aku jenis berjuang di sini. 332 00:20:35,170 --> 00:20:38,210 Saya sedikit keliru kerana di mana saya sebenarnya menulis nilai x, 333 00:20:38,210 --> 00:20:43,150 kerana apa yang saya baru sahaja dilakukan adalah fizikal tangan Ken sekeping kertas yang mempunyai nilai 2, 334 00:20:43,150 --> 00:20:46,590 yang x, dan sesungguhnya, itulah sebenarnya apa yang berlaku. 335 00:20:46,590 --> 00:20:50,210 Jadi ternyata bahawa apabila anda memanggil fungsi dan anda lulus dalam hujah 336 00:20:50,210 --> 00:20:53,290 seperti hello, dunia atau anda lulus dalam hujah seperti 2, 337 00:20:53,290 --> 00:20:57,110 secara amnya, anda lulus dalam salinan hujah itu. 338 00:20:57,110 --> 00:21:00,730 Dan sebagainya hanya kerana saya menulis nombor 2 di sini dan menyerahkan kepada Ken, 339 00:21:00,730 --> 00:21:04,720 yang mesti bermakna bahawa saya masih mempunyai salinan nilai 2 tempat 340 00:21:04,720 --> 00:21:08,890 kerana sesungguhnya, sekarang bahawa saya telah mendapat kembali nilai 8, saya perlu kembali dalam RAM 341 00:21:08,890 --> 00:21:12,130 dan sebenarnya menulis 8 di mana saya pernah nombor 2. 342 00:21:12,130 --> 00:21:16,950 Jadi visual, ingat ini tanggapan lulus di, secara literal, salinan nilai. 343 00:21:16,950 --> 00:21:20,780 >> Ken tidak perkara itu, tangan saya kembali sesuatu - dalam kes ini nilai seperti 8 - 344 00:21:20,780 --> 00:21:24,980 dan kemudian saya perlu melakukan sesuatu dengan nilai yang jika saya mahu memastikan ia sekitar. 345 00:21:24,980 --> 00:21:29,650 Jadi semua ini akan kembali untuk menjadi semua terlalu biasa tidak lama lagi. 346 00:21:29,650 --> 00:21:34,920 Thank you so much untuk demo ini di sini, Ken. [Tepukan] 347 00:21:34,920 --> 00:21:36,920 Sangat baik dilakukan. 348 00:21:36,920 --> 00:21:42,690 Mari kita lihat bagaimana yang akhirnya berkaitan dengan beberapa fungsi memanggil yang kita telah lakukan di sini. 349 00:21:42,690 --> 00:21:47,910 Biar saya pergi ke hadapan dan membawa kita kembali kepada contoh cubing di sini. 350 00:21:47,910 --> 00:21:53,300 Notis bahawa jika kita mahu sebenarnya mula mengambil ini dengan lebih lanjut, 351 00:21:53,300 --> 00:21:57,570 kita akan mempunyai untuk menjadi sedar akan hakikat bahawa x nombor yang sedang berlalu di sini 352 00:21:57,570 --> 00:22:01,530 adalah berbeza daripada apa yang sebenarnya diluluskan untuk fungsi. 353 00:22:01,530 --> 00:22:05,880 Jadi sekali lagi, ini lulus dengan salinan akan menjadi agak yg dalam hanya seketika. 354 00:22:05,880 --> 00:22:09,580 Mari kita melihat sesuatu yang tidak cukup berfungsi dengan betul lagi. 355 00:22:09,580 --> 00:22:13,250 Saya akan pergi ke hadapan dan membuka contoh kereta ketiga, yang cacat oleh alam semula jadi, 356 00:22:13,250 --> 00:22:18,550 dan ia dipanggil buggy3 dan ia melaksanakan fungsi bertukar-tukar. 357 00:22:18,550 --> 00:22:25,110 Di sini kita mempunyai fungsi utama yang telah x dan y sewenang-wenangnya dimulakan untuk 1 dan 2, masing-masing. 358 00:22:25,110 --> 00:22:27,700 Kita boleh menggunakan GetInt, tetapi kita hanya perlu senaman mudah, 359 00:22:27,700 --> 00:22:30,170 jadi ia adalah keras berkod sebagai 1 dan 2. 360 00:22:30,170 --> 00:22:35,340 Dalam baris 21 dan 22, kita nampaknya mencetak x dan y, 1 per baris. 361 00:22:35,340 --> 00:22:39,720 Kemudian on line 23, saya mendakwa saya bertukar-tukar nilai-nilai ini, dot, dot, dot. 362 00:22:39,720 --> 00:22:44,170 Saya nampaknya memanggil fungsi dalam barisan 24 swap dipanggil yang mengambil masa 2 hujah. 363 00:22:44,170 --> 00:22:48,300 Ia benar-benar legit untuk fungsi untuk mengambil 2 hujah. Kami telah melihat printf melakukannya sudah. 364 00:22:48,300 --> 00:22:51,830 >> Jadi swap nampaknya mengambil x dan y, dan seperti namanya, 365 00:22:51,830 --> 00:22:54,670 Saya berharap bahawa ia akan menukar ini 2 nilai. 366 00:22:54,670 --> 00:23:00,090 Jadi maka saya menuntut on line 25 "bertukar!" dan saya mencetak semula x dan y 367 00:23:00,090 --> 00:23:03,070 di bawah andaian bahawa mereka telah memang telah bertukar. 368 00:23:03,070 --> 00:23:06,080 Tetapi jika saya benar-benar menjalankan program ini - izinkan saya membuka tetingkap terminal, 369 00:23:06,080 --> 00:23:09,860 izinkan saya membuat buggy3 - seperti namanya, ini tidak akan berakhir dengan baik 370 00:23:09,860 --> 00:23:15,770 kerana apabila saya tekan Enter, notis bahawa x ialah 1, y 2, 371 00:23:15,770 --> 00:23:19,420 dan lagi pada akhir program, mereka masih, pada hakikatnya, sama. 372 00:23:19,420 --> 00:23:22,960 Jadi berdasarkan demonstrasi tadi dengan Ken, apa yang sebenarnya berlaku? 373 00:23:22,960 --> 00:23:28,710 Mari kita menyelam ke dalam fungsi swap ini. Ia adalah super pendek. Ia hanya beberapa baris kod lama. 374 00:23:28,710 --> 00:23:34,520 Tetapi apa masalah asas yang berdasarkan cerita mudah memberitahu di sini dengan Ken? 375 00:23:34,520 --> 00:23:36,670 Mengapa swap rosak? 376 00:23:36,670 --> 00:23:39,660 [Pelajar] Anda menyimpan salinan, bukan pembolehubah. 377 00:23:39,660 --> 00:23:43,980 Tepat sekali. Kami menyimpan salinan, bukan pembolehubah sendiri. 378 00:23:43,980 --> 00:23:47,170 Dalam erti kata lain, swap nampaknya mengambil masa 2 hujah, int, 379 00:23:47,170 --> 00:23:49,370 dan ia sewenang-wenangnya dipanggil a dan b, 380 00:23:49,370 --> 00:23:54,420 dan di sini saya telah lulus dalam x dan y, yang masing-masing 1 dan 2, 381 00:23:54,420 --> 00:23:58,770 tetapi saya tidak benar-benar lulus dalam x, saya tidak benar-benar lulus dalam y, 382 00:23:58,770 --> 00:24:01,450 Saya lulus satu salinan x dan salinan y. 383 00:24:01,450 --> 00:24:04,510 Ia hampir seolah-olah anda disalin dan ditampal ke dalam swap 384 00:24:04,510 --> 00:24:07,810 nilai-nilai yang anda mahu ia untuk benar-benar memanipulasi. 385 00:24:07,810 --> 00:24:14,480 Jadi, jika itulah kes, apabila saya permulaan program yang melaksanakan garis 35 kemudian 36, 386 00:24:14,480 --> 00:24:18,650 apabila saya sampai ke garis 37, pada ketika ini dalam cerita, apakah nilai? 387 00:24:21,040 --> 00:24:25,050 Pada ketika ini dalam cerita, line 37, apakah nilai pada ketika ini? >> [Pelajar] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Ia hanya perlu 1, betul, kerana x telah diluluskan pada sebagai hujah pertama, 389 00:24:29,280 --> 00:24:33,080 dan fungsi ini hanya sewenang-wenangnya memanggil hujah pertama. 390 00:24:33,080 --> 00:24:38,200 Begitu juga adalah y Hujah kedua, dan ia hanya sewenang-wenangnya memanggil b hujah kedua. 391 00:24:38,200 --> 00:24:40,990 >> Dikotomi ini sebenarnya agak hanya dijelaskan. Fikirkanlah. 392 00:24:40,990 --> 00:24:43,320 Tiada seorang pun daripada kami telah bertemu dengan orang yang menulis printf, 393 00:24:43,320 --> 00:24:50,770 begitu pasti, dia tidak mempunyai idea apa pembolehubah kami 30 tahun kemudian akan dipanggil. 394 00:24:50,770 --> 00:24:56,650 Jadi perlu ada perbezaan antara apa yang anda memanggil pembolehubah dalam fungsi anda menulis 395 00:24:56,650 --> 00:25:02,080 dan apa yang anda memanggil pembolehubah dalam fungsi anda memanggil atau menggunakan. 396 00:25:02,080 --> 00:25:05,340 Jadi dalam erti kata lain, saya telah menulis pembolehubah saya sebagai x dan y, 397 00:25:05,340 --> 00:25:08,890 tetapi jika orang lain telah ditulis fungsi swap, dia pasti tidak akan tahu 398 00:25:08,890 --> 00:25:10,690 apa pembolehubah saya akan dipanggil, 399 00:25:10,690 --> 00:25:13,830 jadi sedar bahawa ini adalah mengapa anda mempunyai dualiti nama. 400 00:25:13,830 --> 00:25:16,750 Secara teknikalnya, saya boleh melakukan ini secara kebetulan, 401 00:25:16,750 --> 00:25:20,080 tetapi mereka masih akan lulus sebagai salinan. 402 00:25:20,080 --> 00:25:23,650 Ia hanya akan menjadi satu kebetulan tulen estetik jika bahawa orang yang menulis swap 403 00:25:23,650 --> 00:25:26,150 telah menggunakan nama yang sama. 404 00:25:26,150 --> 00:25:32,370 Jadi pada ketika ini dalam cerita, line 37, adalah 1, b ialah 2, dan kini saya meneruskan untuk menukar mereka. 405 00:25:32,370 --> 00:25:34,900 Pertama sekali, izinkan saya sebenarnya melakukan ini lebih hanya. 406 00:25:34,900 --> 00:25:36,690 Saya tidak tahu apa yang mereka 3 baris kod telah lakukan. 407 00:25:36,690 --> 00:25:41,210 Biar saya hanya melakukan ini: b = a; a = b; dilakukan. 408 00:25:41,210 --> 00:25:44,690 Mengapa ini pecah, secara logiknya? 409 00:25:46,490 --> 00:25:48,900 Ia adalah jenis perkara yang intuitif, bukan? 410 00:25:48,900 --> 00:25:52,560 Jadi menjadi b dan b menjadi, 411 00:25:52,560 --> 00:25:57,730 tetapi masalahnya ialah bahawa secepat line 37 melaksanakan, apa nilai a dan b? 412 00:25:57,730 --> 00:26:03,410 Yang sama, 1, kerana anda telah clobbered, jadi untuk bercakap, anda telah berubah b menyamai. 413 00:26:03,410 --> 00:26:08,890 Jadi, apabila talian 37 telah dilaksanakan, yang hebat, anda kini mempunyai 2 salinan nombor 1 414 00:26:08,890 --> 00:26:13,350 dalam fungsi ini, maka apabila kamu katakan dalam 38 baris a = b, 415 00:26:13,350 --> 00:26:17,640 anda jenis diskru kerana anda hanya memberikan 1-1. 416 00:26:17,640 --> 00:26:20,580 Anda telah jenis kehilangan nilai yang anda mengambil berat tentang. 417 00:26:20,580 --> 00:26:23,220 Jadi, dalam versi asal ini, notis apa yang saya lakukan. 418 00:26:23,220 --> 00:26:26,850 Saya bukannya mempunyai barisan ketiga kod yang kelihatan seperti ini. 419 00:26:26,850 --> 00:26:28,580 Saya mengisytiharkan pembolehubah sementara. 420 00:26:28,580 --> 00:26:32,170 >> Tmp adalah nama yang sangat biasa bagi pembolehubah sementara, dan ia adalah int 421 00:26:32,170 --> 00:26:34,580 kerana ia mempunyai untuk memadankan apa yang saya mahu untuk membuat salinan. 422 00:26:34,580 --> 00:26:39,770 Saya menyimpan salinan dalam satu tmp, jadi sekali talian 37 telah disempurnakan, 423 00:26:39,770 --> 00:26:45,860 nilai a adalah - cek kewarasan cepat - 1, nilai b 2, 424 00:26:45,860 --> 00:26:48,970 dan nilai tmp juga 1. 425 00:26:48,970 --> 00:26:52,060 Jadi sekarang saya melaksanakan garis 38. 426 00:26:52,060 --> 00:27:00,540 Setelah barisan 38 melaksanakan, mengambil pada nilai b. Dan b adalah 2, jadi kini 2. 427 00:27:00,540 --> 00:27:05,210 Jadi pada ketika ini dalam cerita, adalah 2, b 2, dan tmp adalah 1, 428 00:27:05,210 --> 00:27:11,060 jadi sekarang secara logik, kita boleh nilai hanya tmp mencebur ke b dan kami sudah selesai. 429 00:27:11,060 --> 00:27:12,800 Jadi kita telah menyelesaikan masalah itu. 430 00:27:12,800 --> 00:27:17,720 Malangnya, apabila saya menjalankan program ini di dalam borang ini, ia tidak sebenarnya menukar sebarang nilai. 431 00:27:17,720 --> 00:27:20,100 Tetapi untuk menjadi jelas, mengapa? 432 00:27:23,660 --> 00:27:26,450 Saya tetap masalah logik daripada hanya seketika lalu, 433 00:27:26,450 --> 00:27:31,020 tetapi sekali lagi, jika saya menjalankan program ini, x dan y kekal tidak berubah 434 00:27:31,020 --> 00:27:33,310 menjelang akhir pelaksanaan program. 435 00:27:33,310 --> 00:27:37,220 [Komen pelajar didengar] >> Kami telah tidak dikembalikan apa-apa, jadi yang benar. 436 00:27:37,220 --> 00:27:39,670 Tetapi ternyata ada sedikit masalah di sini kerana setakat ini, 437 00:27:39,670 --> 00:27:44,170 satu-satunya perkara yang kita telah dapat kembali adalah satu perkara, dan ini adalah sekatan C. 438 00:27:44,170 --> 00:27:49,070 Anda hanya boleh kembali benar-benar satu nilai, di mana saya jenis yang terperangkap di sini 439 00:27:49,070 --> 00:27:53,310 kerana saya dapat kembali nilai baru x atau saya boleh memulangkan nilai baru y, 440 00:27:53,310 --> 00:27:55,190 tetapi saya mahu kedua-dua belakang. 441 00:27:55,190 --> 00:27:58,650 Jadi kembali tidak penyelesaian yang mudah di sini. 442 00:27:58,650 --> 00:28:01,710 Tetapi masalah yang asasnya ialah, mengapa? Apa yang telah kita sebenarnya bertukar? 443 00:28:01,710 --> 00:28:04,190 [Pelajar] a dan b. >> A dan b. 444 00:28:04,190 --> 00:28:08,230 Tetapi a dan b adalah salinan x dan y, yang bermakna kita hanya melakukan semua kerja-kerja ini, 445 00:28:08,230 --> 00:28:11,650 kita hanya menghabiskan masa selama 3 minit bercakap tentang fungsi swap dan semua 3 pembolehubah ini, 446 00:28:11,650 --> 00:28:15,420 dan yang hebat, sempurna betul dalam pengasingan, 447 00:28:15,420 --> 00:28:20,740 tetapi dan skop b sahaja dalam ayat-ayat ini di sini. 448 00:28:20,740 --> 00:28:24,790 >> Jadi seperti gelung, jika anda mengisytiharkan integer i dalam gelung, 449 00:28:24,790 --> 00:28:28,760 begitu juga, jika anda sedang mengisytiharkan a dan b dalam fungsi yang anda telah ditulis, 450 00:28:28,760 --> 00:28:33,320 mereka hanya dalam sah fungsi itu, yang bermakna secepat swap dilakukan melaksanakan 451 00:28:33,320 --> 00:28:38,470 dan kita pergi dari 24 baris ke baris 25, x dan y tidak pernah berubah sama sekali. 452 00:28:38,470 --> 00:28:42,790 Anda hanya membazirkan banyak keseluruhan masa bertukar-tukar salinan pembolehubah. 453 00:28:42,790 --> 00:28:47,010 Jadi ternyata bahawa penyelesaian untuk ini sebenarnya tidak jelas. 454 00:28:47,010 --> 00:28:50,670 Ia bukan agak mencukupi untuk mengembalikan nilai kerana kita hanya boleh kembali 1 nilai, 455 00:28:50,670 --> 00:28:53,470 dan saya benar-benar mahu untuk menukar kedua-dua x dan y pada masa yang sama, 456 00:28:53,470 --> 00:28:55,210 jadi kita akan perlu kembali kepada ini. 457 00:28:55,210 --> 00:29:01,020 Tetapi untuk sekarang, menyedari bahawa isu asasnya berasal dari fakta bahawa a dan b adalah salinan 458 00:29:01,020 --> 00:29:03,630 dan mereka berada dalam skop mereka sendiri. 459 00:29:03,630 --> 00:29:05,050 Mari kita cuba untuk menyelesaikan masalah ini dalam beberapa cara. 460 00:29:05,050 --> 00:29:11,250 Biar saya sebenarnya tatal kembali ke sini dan membuka, katakan, varian keempat ini, buggy4. 461 00:29:11,250 --> 00:29:13,370 Bagaimana tentang perkara ini? 462 00:29:13,370 --> 00:29:17,810 Ini adalah masalah yang serupa tetapi lebih mudah untuk melihat sebelum kita mengambil menikam menyelesaikan ia. 463 00:29:17,810 --> 00:29:24,190 Program ini dipanggil kenaikan, dan ia nampaknya initializes integer x 1 di baris 18. 464 00:29:24,190 --> 00:29:28,150 Saya kemudian mendakwa x ialah 1, saya kemudiannya mendakwa "incrementing ..." 465 00:29:28,150 --> 00:29:33,730 Saya kemudian memanggil kenaikan, tetapi kemudian dalam baris 22 dan 23, saya mendakwa ia telah incremented, 466 00:29:33,730 --> 00:29:40,220 Saya mendakwa x ialah kini apa sahaja ia adalah - 2, mungkin - tetapi program ini adalah kereta. 467 00:29:40,220 --> 00:29:42,610 Apa masalah? 468 00:29:43,440 --> 00:29:50,160 Yeah. >> [Sambutan pelajar didengar] >> Tepat sekali. 469 00:29:50,160 --> 00:29:52,490 Jadi x telah diisytiharkan, jelas, on line 18. 470 00:29:52,490 --> 00:29:54,700 Itu adalah di dalam pendakap kerinting utama. 471 00:29:54,700 --> 00:29:58,440 Jadi jawapan yang mudah di sini adalah bahawa manakala x wujud di sini, 472 00:29:58,440 --> 00:30:03,930 ia tidak wujud di baris 32, jadi program ini sebenarnya bahkan tidak akan menyusun. 473 00:30:03,930 --> 00:30:07,940 Pengkompil apabila saya cuba menyusun kod ini akan menjerit pada saya 474 00:30:07,940 --> 00:30:14,100 tentang beberapa pengecam yang tidak diisytiharkan atau sesuatu yang bermaksud sedemikian. Malah, mari kita cuba. 475 00:30:14,100 --> 00:30:18,470 Ini adalah membuat buggy4. Sana ia. 476 00:30:18,470 --> 00:30:22,110 Penggunaan 'x' pengecam tidak diisytiharkan di baris 32. 477 00:30:22,110 --> 00:30:25,580 Dan sebenarnya, mari kita menjadi lebih jelas di sini hari ini supaya ini adalah berguna 478 00:30:25,580 --> 00:30:27,580 dalam waktu pejabat dan di rumah. 479 00:30:27,580 --> 00:30:29,300 >> Perhatikan bahawa ia adalah sedikit cryptically ditulis. 480 00:30:29,300 --> 00:30:37,270 Tetapi hakikat bahawa mempunyai dilafaz menjerit pada kami, mengatakan buggy4.c: 32:5, sebenarnya adalah berguna. 481 00:30:37,270 --> 00:30:42,050 Ia bermakna bahawa kesilapan adalah pada 32 baris pada kedudukan watak 5. 482 00:30:42,050 --> 00:30:46,700 Jadi 1, 2, 3, 4, 5. Itulah, sebenarnya, mana masalah ini. 483 00:30:46,700 --> 00:30:49,790 Dan juga, terlalu, ingat pada waktu pejabat dan di rumah, saya bernasib baik di sini. 484 00:30:49,790 --> 00:30:52,990 Saya mempunyai satu kesilapan. Ia akan menjadi agak mudah untuk menetapkan. 485 00:30:52,990 --> 00:30:55,990 Tetapi jika anda mendapat skrin sepenuh mesej ralat hangat, 486 00:30:55,990 --> 00:31:00,330 lagi menyedari bahawa satu panhandle hanya mungkin gejala satu teratas. 487 00:31:00,330 --> 00:31:03,450 Jadi sentiasa mengejar turun bug anda dari atas ke bawah 488 00:31:03,450 --> 00:31:05,820 kerana terdapat hanya mungkin kesan rantaian daisy 489 00:31:05,820 --> 00:31:09,240 yang mencadangkan anda mempunyai cara yang lebih banyak masalah daripada anda sebenarnya lakukan. 490 00:31:09,240 --> 00:31:15,150 Jadi bagaimana kita boleh memperbaiki ini jika matlamat saya adalah untuk kenaikan x? >> [Pelajar] Buat x global. 491 00:31:15,150 --> 00:31:17,060 Okay, jadi kita boleh membuat x global. 492 00:31:17,060 --> 00:31:20,480 Mari kita mengambil jalan pintas yang saya memberi amaran tentang awal, tetapi palang pintu, kita hanya perlu cepat, 493 00:31:20,480 --> 00:31:25,730 jadi mari kita hanya mengatakan x int di sini. Itu membuatkan x global. 494 00:31:25,730 --> 00:31:31,800 Jadi sekarang utama mempunyai akses kepada dan kenaikan telah akses kepada, 495 00:31:31,800 --> 00:31:34,110 dan sebagainya biarlah saya pergi ke hadapan dan menyusun ini sekarang. 496 00:31:34,110 --> 00:31:37,630 Buat buggy4, Enter. Nampaknya untuk menyusun sekarang. 497 00:31:37,630 --> 00:31:41,230 Mari kita menjalankan buggy4. Dan ia seolah-olah benar-benar bekerja. 498 00:31:41,230 --> 00:31:45,150 Ini adalah salah satu daripada perkara-perkara itu melakukan seperti yang saya katakan, tidak seperti yang saya lakukan, 499 00:31:45,150 --> 00:31:47,010 kerana saya baru sahaja dilakukan di sini, kerana secara umum, 500 00:31:47,010 --> 00:31:50,440 program kami akan mendapat lebih menarik dan lebih lama daripada ini, 501 00:31:50,440 --> 00:31:56,390 dan jika penyelesaian untuk masalah hidup hanya meletakkan semua pembolehubah di atas fail anda, 502 00:31:56,390 --> 00:31:59,690 sangat cepat program mendapatkan horrifically sukar untuk menguruskan. 503 00:31:59,690 --> 00:32:02,190 Ia mendapat sukar untuk berfikir sehingga nama-nama pembolehubah baru, 504 00:32:02,190 --> 00:32:05,240 ia menjadi sukar untuk memahami apa ubah melakukan apa, 505 00:32:05,240 --> 00:32:08,460 dan sebagainya secara umum, ini tidak merupakan penyelesaian yang baik. 506 00:32:08,460 --> 00:32:10,030 Jadi mari kita buat ini lebih baik. 507 00:32:10,030 --> 00:32:12,160 Kita tidak mahu menggunakan pembolehubah global di sini. 508 00:32:12,160 --> 00:32:16,240 >> Saya tidak mahu untuk kenaikan x, jadi saya dapat jelas - 509 00:32:16,240 --> 00:32:18,670 pada akhir hari, ini adalah jenis cerita bodoh kerana kita hanya melakukan ini - 510 00:32:18,670 --> 00:32:24,450 tetapi jika saya tidak tahu tentang pengendali itu atau saya tidak dibenarkan untuk menukar dalam utama itu sendiri, 511 00:32:24,450 --> 00:32:30,730 bagaimana lagi saya boleh melaksanakan Ken di sini masa ini tidak kiub tetapi untuk kenaikan? 512 00:32:31,380 --> 00:32:33,190 Bagaimana saya boleh mengubah perkara ini di sini? Yeah. 513 00:32:33,190 --> 00:32:38,480 [Pelajar] Lulus dalam x dan kemudian kembali [didengar] >> Okay, baik. 514 00:32:38,480 --> 00:32:41,900 Jadi mengapa tidak saya lulus dalam x dan kemudian bukannya kembali, 515 00:32:41,900 --> 00:32:44,870 kenapa saya tidak hanya kembali x + 1. 516 00:32:44,870 --> 00:32:47,710 Satu pasangan lebih banyak perkara perlu mengubah di sini. Saya pada landasan yang betul. 517 00:32:47,710 --> 00:32:49,770 Apa lagi yang saya perlukan untuk tweak? Orang lain. Yeah. 518 00:32:49,770 --> 00:32:51,740 [Sambutan pelajar didengar] 519 00:32:51,740 --> 00:32:54,730 Saya perlu untuk menukar jenis pulangan kenaikan kerana ia tidak membatalkan. 520 00:32:54,730 --> 00:32:57,780 Terbatal tiada bermakna dipulangkan, tetapi jelas kini ia adalah, 521 00:32:57,780 --> 00:32:59,830 jadi ini keperluan untuk menukar kepada - >> [pelajar] int. 522 00:32:59,830 --> 00:33:02,740 int untuk menjadi konsisten dengan apa sahaja yang saya sebenarnya kembali. 523 00:33:02,740 --> 00:33:05,180 Kini sesuatu yang lain masih kereta di sini. Yeah. 524 00:33:05,180 --> 00:33:08,400 [Sambutan pelajar didengar] >> [Malan] Jadi saya perlu kenaikan x? 525 00:33:08,400 --> 00:33:12,080 [Sambutan pelajar didengar] >> [Malan] Ah, jadi saya perlu untuk lulus x. 526 00:33:12,080 --> 00:33:16,660 Jadi saya perlu melakukan ini di sini. >> [Komen pelajar didengar] 527 00:33:16,660 --> 00:33:20,050 [Malan] Jadi prototaip, saya perlu menukar ini di sini. 528 00:33:20,050 --> 00:33:22,930 Jadi ini telah menjadi int, ini telah menjadi - 529 00:33:22,930 --> 00:33:25,620 hmm, saya sebenarnya mempunyai pepijat ke sini. Mari kita menetapkan ini yang pertama. 530 00:33:25,620 --> 00:33:29,590 Apakah yang perlu ini sebenarnya? Ia mendapat untuk menjadi sesuatu int. 531 00:33:29,590 --> 00:33:32,700 Ia boleh x, tetapi terus terang, jika anda mula memanggil semua x pembolehubah anda, 532 00:33:32,700 --> 00:33:35,390 ia akan mendapat kurang dan kurang jelas yang mana. 533 00:33:35,390 --> 00:33:39,560 >> Jadi mari kita hanya sewenang-wenangnya memilih konvensyen penamaan yang berbeza untuk fungsi pembantu saya, 534 00:33:39,560 --> 00:33:41,940 fungsi Saya menulis. Kami akan memanggilnya, atau kita boleh memanggil ia - 535 00:33:41,940 --> 00:33:45,010 Mari kita memanggilnya nombor untuk menjadi lebih jelas. 536 00:33:45,010 --> 00:33:47,560 Jadi maka saya perlu kembali apa jua nombor campur 1, 537 00:33:47,560 --> 00:33:50,740 dan kini saya mempunyai untuk menukar 1 perkara lain di sini dan satu perkara lain di sini. 538 00:33:50,740 --> 00:33:54,350 Apa yang saya perlu untuk menukar pada 21 baris pertama? >> [Sambutan pelajar didengar] 539 00:33:54,350 --> 00:33:57,610 [Malan] saya perlu sediakan x. Saya tidak boleh hanya memanggil kenaikan (x). 540 00:33:57,610 --> 00:34:01,960 Saya perlu ingat jawapan dengan menukar nilai x di sebelah kiri. 541 00:34:01,960 --> 00:34:04,680 Dan walaupun x kini di kiri dan kanan, yang benar-benar halus 542 00:34:04,680 --> 00:34:08,860 kerana sebelah kanan mendapat dilaksanakan terlebih dahulu kemudian mendapat plopped ke dalam perkara kiri - 543 00:34:08,860 --> 00:34:10,600 x dalam kes ini. 544 00:34:10,600 --> 00:34:12,159 Dan kemudian akhir sekali, ini adalah menetapkan yang mudah sekarang. 545 00:34:12,159 --> 00:34:17,230 Ini hanya perlu menandingi apa yang turun di bawah, beberapa int. 546 00:34:17,230 --> 00:34:20,570 Jadi sekumpulan keseluruhan perubahan untuk fungsi benar-benar bodoh 547 00:34:20,570 --> 00:34:24,420 tetapi wakil-wakil daripada perkara-perkara yang kita semakin akan mahu lakukan. 548 00:34:24,420 --> 00:34:27,090 Supaya membuat buggy4. Saya diskrukan sehingga suatu tempat. 549 00:34:27,090 --> 00:34:30,139 Oh, Tuhan saya. Lima kesilapan dalam program 6-line. 550 00:34:30,139 --> 00:34:35,690 Jadi apa yang salah on line 18, watak 5? 551 00:34:35,690 --> 00:34:39,610 Jadi saya perlu mengisytiharkan int, ini. 552 00:34:39,610 --> 00:34:41,920 Mari kita lihat. Terdapat sekumpulan keseluruhan kesilapan lain. 553 00:34:41,920 --> 00:34:47,010 Oh, Tuhan saya - 19, 18, 21 - tetapi sekali lagi, mari kita hanya mengosongkan skrin, L Kawalan di sini, 554 00:34:47,010 --> 00:34:49,380 dan memutarkan dilafaz. 555 00:34:49,380 --> 00:34:51,340 Jadi 5 masalah ini adalah sebenarnya hanya bahawa 1. 556 00:34:51,340 --> 00:34:57,520 Jadi sekarang mari kita menjalankan buggy4, Enter. Huh, x telah incremented betul. 557 00:34:57,520 --> 00:35:02,720 Semua hak. Sebarang pertanyaan mengenai bagaimana untuk menokokkan nombor? Yeah. 558 00:35:02,720 --> 00:35:09,870 [Soalan pelajar didengar] >> Soalan yang baik. 559 00:35:09,870 --> 00:35:14,220 Bagaimana ia bahawa saya hanya boleh menukar x ke nombor dan program akan tahu dengan serta-merta? 560 00:35:14,220 --> 00:35:16,200 >> Sekali lagi, fikirkan ia sebagai abstraksi ini. 561 00:35:16,200 --> 00:35:21,600 Jadi jika saya utama dan Ken adalah kenaikan, terus-terang, saya tidak peduli apa Ken panggilan iPad beliau. 562 00:35:21,600 --> 00:35:26,570 Saya tidak peduli apa yang dia memanggil apa-apa yang mempunyai kaitan dengan pelaksanaan fungsi ini. 563 00:35:26,570 --> 00:35:33,340 Ini adalah terperinci pelaksanaan bahawa, saya yang utama, tidak perlu mengambil berat tentang. 564 00:35:33,340 --> 00:35:38,250 Dan sebagainya hanya menukar secara konsisten dalam fungsi - nombor di sini dan nombor di sini - 565 00:35:38,250 --> 00:35:40,960 adalah semua ia mengambil masa begitu lama seperti yang saya susun semula. 566 00:35:40,960 --> 00:35:44,180 Ia adalah jenis seperti jika anda berfikir tentang ramai daripada kita, anda dengan lesen memandu 567 00:35:44,180 --> 00:35:46,770 yang telah didorong atau jika anda telah pun dipandu dalam kereta, 568 00:35:46,770 --> 00:35:50,950 kebanyakan kita tidak mempunyai idea bagaimana sebuah kereta berfungsi di bawah hood. 569 00:35:50,950 --> 00:35:54,970 Dan benar-benar, jika anda membuka hud, kebanyakan kita - termasuk saya sendiri - 570 00:35:54,970 --> 00:35:56,940 tidak akan benar-benar tahu apa yang kita sedang melihat, 571 00:35:56,940 --> 00:35:59,220 jenis seperti anda mungkin merasakan dengan barangan seperti hak ini sekarang. 572 00:35:59,220 --> 00:36:01,480 Tetapi kita tidak benar-benar perlu untuk menjaga bagaimana kereta itu berfungsi, 573 00:36:01,480 --> 00:36:05,970 kita tidak perlu peduli apa yang semua rod dan omboh dan kabel di dalam kereta 574 00:36:05,970 --> 00:36:08,160 sebenarnya lakukan. 575 00:36:08,160 --> 00:36:12,770 Jadi sesuatu seperti apa yang anda panggil omboh tidak kira di sini dalam kes ini. Idea yang sama. 576 00:36:12,770 --> 00:36:25,300 Yeah. >> [Soalan pelajar didengar] 577 00:36:25,300 --> 00:36:29,180 Jika terdapat lebih banyak kegunaan masa xa ubah yang lalu, 578 00:36:29,180 --> 00:36:32,150 anda, pengaturcara, akan mempunyai untuk menukar mereka di mana-mana. 579 00:36:32,150 --> 00:36:36,600 Atau anda benar-benar boleh melakukan File, Menu, dan kemudian Cari, Ganti - sesuatu seperti itu - 580 00:36:36,600 --> 00:36:39,170 tetapi anda akan perlu untuk membuat perubahan-perubahan sendiri. 581 00:36:39,170 --> 00:36:47,450 Anda perlu konsisten. >> [Pelajar] Jika terdapat pelbagai pembolehubah [didengar] 582 00:36:47,450 --> 00:36:53,100 Sesuatu perintah tertentu seperti sini, jika ini adalah int nombor lain? >> [Pelajar] yang betul. 583 00:36:53,100 --> 00:36:56,590 [Malan] Yeah. Perintah perkara apabila anda memanggil fungsi. 584 00:36:56,590 --> 00:37:00,050 >> Jadi, jika saya telah memanggil kenaikan di sini dengan sesuatu koma sesuatu, 585 00:37:00,050 --> 00:37:01,680 ada pemetaan langsung. 586 00:37:01,680 --> 00:37:05,690 Pembolehubah pertama, apa sahaja yang ia dipanggil, dibuat salinan hujah yang pertama di sini. 587 00:37:05,690 --> 00:37:07,760 Maaf. Ini tidak seharusnya kurungan. 588 00:37:07,760 --> 00:37:11,490 Hujah barisan kedua dengan satu kedua. Jadi perintah, ya, perkara-perkara. Semua hak. 589 00:37:11,490 --> 00:37:17,020 Maaf. Saya mengambil cara yang lama untuk sampai ke sana. Soalan-soalan lain? Semua hak. 590 00:37:17,020 --> 00:37:20,610 Jadi mari kita lihat jika kita tidak dapat gambaran apa yang sebenarnya berlaku di sini 591 00:37:20,610 --> 00:37:23,090 di bawah hood, jadi untuk bercakap. 592 00:37:23,090 --> 00:37:26,640 Ini ialah sebuah segiempat tepat yang mungkin mewakili memori komputer anda. 593 00:37:26,640 --> 00:37:30,970 Malah jika anda tidak mempunyai idea bagaimana memori berfungsi atau bagaimana kerja-kerja RAM, 594 00:37:30,970 --> 00:37:33,940 sekurang-kurangnya menganggap bahawa anda mempunyai tandan ia hari ini. 595 00:37:33,940 --> 00:37:36,280 Anda telah mendapat megabait, anda telah mendapat gigabait, 596 00:37:36,280 --> 00:37:40,870 dan kita tahu dari 0 minggu yang bait hanya apa? >> [Pelajar] 8 bit. 597 00:37:40,870 --> 00:37:42,950 8 bit, bukan? Jadi 8 sifar dan 1. 598 00:37:42,950 --> 00:37:45,880 Jadi, jika komputer anda mempunyai persembahan RAM, 2 gig RAM pada hari ini, 599 00:37:45,880 --> 00:37:55,030 anda mempunyai bilion atau 2 bilion bait memori atau kira-kira 8000000000 atau 16 bilion bit 600 00:37:55,030 --> 00:37:56,890 di dalam komputer anda. 601 00:37:56,890 --> 00:38:00,590 Berbeza dengan contoh Willy sedikit tdk jelas, ia bukan zarah magnet biasanya lagi. 602 00:38:00,590 --> 00:38:04,450 Semakin dalam komputer riba sekurang-kurangnya - ia adalah pemacu keadaan pepejal, SSDs, 603 00:38:04,450 --> 00:38:08,580 yang hanya tidak mempunyai bahagian yang bergerak. Ia adalah semua elektronik. Ia adalah semua berasaskan elektrik. 604 00:38:08,580 --> 00:38:14,060 Jadi berfikir segi empat ini sebagai hanya mewakili 1 atau 2 gigabait memori yang anda ada. 605 00:38:14,060 --> 00:38:16,020 >> Jadi ia adalah sebahagian memori. 606 00:38:16,020 --> 00:38:19,830 Dunia sains komputer telah jenis dibahagikan 607 00:38:19,830 --> 00:38:22,950 ketulan ingatan untuk melakukan perkara-perkara yang berbeza. 608 00:38:22,950 --> 00:38:27,190 Sebagai contoh, jika ini adalah RAM komputer anda, seperti yang dicadangkan oleh segiempat tepat di sana, 609 00:38:27,190 --> 00:38:31,130 ia ternyata bahawa oleh konvensyen, di atas RAM anda, jadi untuk bercakap, 610 00:38:31,130 --> 00:38:33,660 secara umumnya apa yang dipanggil segmen teks. 611 00:38:33,660 --> 00:38:36,740 Mereka adalah 0 dan 1s bahawa anda telah kumpulkan. 612 00:38:36,740 --> 00:38:39,020 Jadi, apabila kita telah melihat di bawah hood pada apa yang a.out adalah, 613 00:38:39,020 --> 00:38:41,980 semua ini 0 dan 1s, apabila anda menjalankan program, 614 00:38:41,980 --> 00:38:46,290 mereka 0s dan 1s dimuatkan dari cakera keras anda ke dalam sesuatu yang dinamakan RAM, 615 00:38:46,290 --> 00:38:49,320 dan RAM mereka meletakkan di atas. 616 00:38:49,320 --> 00:38:52,770 Sementara itu, anda mempunyai perkara-perkara lain: memulakan data, uninitialize data. 617 00:38:52,770 --> 00:38:57,510 Mereka 2 swaths ingatan merujuk kepada pembolehubah global, yang anda tidak sering menggunakan 618 00:38:57,510 --> 00:39:00,760 tetapi kadang-kadang jika anda lakukan, mereka akhirnya di sana juga. 619 00:39:00,760 --> 00:39:04,260 Kemudian terdapat beberapa perkara lain: pembolehubah persekitaran, yang kita tidak akan banyak menghabiskan masa di, 620 00:39:04,260 --> 00:39:06,860 tetapi kemudian 2 perkara penting yang akan datang kembali sepanjang semester, 621 00:39:06,860 --> 00:39:08,550 timbunan dan longgokan. 622 00:39:08,550 --> 00:39:12,210 Jadi kebanyakan memori komputer anda dikhaskan apabila menjalankan program 623 00:39:12,210 --> 00:39:15,370 untuk sesuatu yang dipanggil timbunan dan sesuatu yang dipanggil timbunan itu. 624 00:39:15,370 --> 00:39:18,840 Kami tidak akan bercakap mengenai timbunan itu hari ini, tetapi kita akan bercakap tentang timbunan. 625 00:39:18,840 --> 00:39:24,600 Timbunan yang dimaksudkan untuk nampak visual dulang makan dewan makan di Mather House 626 00:39:24,600 --> 00:39:28,110 atau di mana-mana jua anda berada di mana kakitangan dewan makan membersihkan mereka setiap hari, 627 00:39:28,110 --> 00:39:30,180 mereka timbunan mereka dari lantai sehingga, 628 00:39:30,180 --> 00:39:34,550 dan begitu juga, dalam ingatan, terdapat idea ini meletakkan sesuatu pada timbunan, 629 00:39:34,550 --> 00:39:36,860 meletakkan sesuatu pada timbunan, meletakkan sesuatu pada timbunan. 630 00:39:36,860 --> 00:39:38,240 Dan apa yang kita maksudkan dengan ini? 631 00:39:38,240 --> 00:39:41,860 >> Mari kita zoom di atas hanya separuh lebih rendah daripada gambar ini, RAM komputer anda, 632 00:39:41,860 --> 00:39:44,330 untuk mencadangkan perkara-perkara berikut. 633 00:39:44,330 --> 00:39:48,170 Ia ternyata bahawa apabila anda menjalankan program seperti a.out atau hello - 634 00:39:48,170 --> 00:39:50,100 apa jua program yang anda telah ditulis - 635 00:39:50,100 --> 00:39:54,020 lagi, mereka 0 dan 1s dimuatkan dari cakera keras anda, yang merupakan storan jangka panjang, 636 00:39:54,020 --> 00:39:57,230 tetap ada walaupun apabila anda tarik plag, dimuatkan ke dalam RAM. 637 00:39:57,230 --> 00:40:00,610 RAM adalah lebih cepat daripada cakera keras - ia adalah lebih kecil daripada cakera keras - 638 00:40:00,610 --> 00:40:03,300 tetapi ia adalah di mana program-program hidup semasa anda menjalankan mereka. 639 00:40:03,300 --> 00:40:08,230 Jadi anda klik dua kali program pada Mac atau PC, ia dimuatkan dari cakera keras ke dalam RAM. 640 00:40:08,230 --> 00:40:11,520 Sebaik sahaja ia dimuatkan ke dalam RAM, pergi 0s dan 1s di atas jalan, 641 00:40:11,520 --> 00:40:16,610 segmen kononnya teks, tetapi kemudian secepat program anda sebenarnya bermula berjalan, 642 00:40:16,610 --> 00:40:21,360 Fungsi utama dipanggil, dan utama, seperti yang kita telah melihat, sering mempunyai pembolehubah tempatan, 643 00:40:21,360 --> 00:40:24,870 dan ia mempunyai ints dan rentetan dan aksara dan sebagainya. 644 00:40:24,870 --> 00:40:29,180 Jadi, jika program anda yang telah bertulis atau program yang anda telah mengklik dua kali 645 00:40:29,180 --> 00:40:32,970 digunakan beberapa pembolehubah dalam utama, 646 00:40:32,970 --> 00:40:37,240 mereka akhirnya pada bawah timbunan anda memori, jadi untuk bercakap. 647 00:40:37,240 --> 00:40:39,410 Lebih kukuh, apakah ini sebenarnya bermakna? 648 00:40:39,410 --> 00:40:48,450 Ini hanya bermaksud bahawa jika kita telah pergi ke nombor bait RAM dalam komputer anda, 649 00:40:48,450 --> 00:40:55,750 notis bahawa ini mungkin bilangan bait 0, ini mungkin bilangan bait 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 semua jalan sehingga kepada 2 bilion akan semua cara sehingga ada di bahagian atas. 651 00:41:01,480 --> 00:41:05,880 Jadi, dalam erti kata lain, apabila kita bercakap tentang RAM atau ingatan dari segi bait, 652 00:41:05,880 --> 00:41:11,500 ia hanya bermaksud bahawa seseorang telah memutuskan apa yang bilangannya setiap mereka ketulan memori. 653 00:41:11,500 --> 00:41:16,650 Jadi apabila anda perlukan 32 bit untuk int atau anda memerlukan 8 bit untuk char, 654 00:41:16,650 --> 00:41:18,840 di mana mereka akhirnya dalam ingatan? 655 00:41:18,840 --> 00:41:22,350 >> Konsepnya, mereka hanya berakhir di bawah perkara ini dipanggil timbunan. 656 00:41:22,350 --> 00:41:25,870 Tetapi apa yang menarik sekarang ialah apabila utama panggilan fungsi - 657 00:41:25,870 --> 00:41:28,750 andaikan satu fungsi yang dipanggil foo, hanya nama arbitrari - 658 00:41:28,750 --> 00:41:32,330 apa yang berlaku yang utama adalah di bahagian bawah timbunan ini memori; 659 00:41:32,330 --> 00:41:35,680 foo kini diletakkan di atas utama dalam ingatan. 660 00:41:35,680 --> 00:41:40,990 Jadi mana-mana pembolehubah tempatan yang foo telah berakhir jenis konsep atas mereka yang utama. 661 00:41:40,990 --> 00:41:47,070 Jika foo panggilan lagi fungsi yang dipanggil bar, pembolehubah-pembolehubah berakhir di sini. 662 00:41:47,070 --> 00:41:50,120 Jika bar menyeru sesuatu yang lain, di sini, di sini, di sini. 663 00:41:50,120 --> 00:41:53,830 Jadi apa yang menarik tentang menjalankan program adalah bahawa anda memanggil fungsi 664 00:41:53,830 --> 00:41:57,750 dan sebagai fungsi panggilan fungsi dan seperti fungsi panggilan fungsi, 665 00:41:57,750 --> 00:42:01,470 anda membina ini timbunan fungsi dalam ingatan. 666 00:42:01,470 --> 00:42:06,890 Dan hanya sekali pulangan fungsi manakah anda mula mendapat memori yang kembali. 667 00:42:06,890 --> 00:42:10,860 Jadi salah satu cara paling mudah kehabisan memori dalam program komputer 668 00:42:10,860 --> 00:42:14,360 adalah untuk menulis fungsi yang tidak pernah kembali. 669 00:42:14,360 --> 00:42:18,900 Jadi, sebagai contoh, mari kita menunjukkan seberapa banyak dengan program yang sengaja kereta. 670 00:42:18,900 --> 00:42:22,230 Biar saya pergi ke hadapan dan # include , 671 00:42:22,230 --> 00:42:25,000 int utama (tidak sah), 672 00:42:25,000 --> 00:42:32,940 dan saya akan lakukan manakala (2> 1), yang mungkin akan tidak pernah berubah kepada kami, 673 00:42:32,940 --> 00:42:37,560 dan biarkan saya pergi ke hadapan sekarang dan melakukan printf. 674 00:42:37,560 --> 00:42:40,700 Sebenarnya, itu akan menjadi kurang menarik visual. Mari kita melakukan ini. 675 00:42:40,700 --> 00:42:50,240 Untuk int i = 0; i> 0 - mari kita membuat kesilapan ini - i + +. 676 00:42:50,240 --> 00:42:52,720 Dan jangan printf sini. Mari kita mengamalkan apa yang saya telah berkhotbah. 677 00:42:52,720 --> 00:43:00,190 Mari kita mempunyai kaedah di sini, korus terbatal, dan kami akan mengatakan int i, 678 00:43:00,190 --> 00:43:06,830 dan kemudian saya akan mengatakan printf - tidak, mari kita membuat ini lebih menarik. 679 00:43:06,830 --> 00:43:15,790 Mari kita sebenarnya tidak mencetak apa-apa pada semua. Mari kita hanya melakukan ini: korus (i). 680 00:43:15,790 --> 00:43:20,390 Semua hak. Jadi ini adalah kereta kerana mengapa? 681 00:43:20,390 --> 00:43:23,380 Saya membuat ini sebagai saya pergi kerana program sebenarnya tidak berbuat apa-apa kepentingan. 682 00:43:23,380 --> 00:43:25,320 >> Tetapi itu bukan matlamat. 683 00:43:25,320 --> 00:43:29,630 Matlamatnya adalah untuk menulis program yang utama fungsi melakukan apa, nampaknya? 684 00:43:30,720 --> 00:43:32,860 Memanggil sendiri. Dan sebenarnya, kita tidak perlu gelung. 685 00:43:32,860 --> 00:43:37,200 Mari kita walaupun memudahkan ini hanya supaya tidak kehilangan penglihatan benar-benar pepijat asas. 686 00:43:37,200 --> 00:43:39,640 Panggilan Utama korus untuk menyanyi beberapa korus, 687 00:43:39,640 --> 00:43:41,440 maka saya melakukan sesuatu yang bodoh dan saya mempunyai korus korus panggilan 688 00:43:41,440 --> 00:43:43,760 kerana saya menganggap orang lain telah pergi untuk melaksanakan ia mungkin, 689 00:43:43,760 --> 00:43:47,210 dan sekarang ini tidak akan untuk menyusun lagi. Saya perlu melakukan apa? 690 00:43:47,210 --> 00:43:49,970 Saya memerlukan prototaip, ingat. 691 00:43:49,970 --> 00:43:56,110 Jadi saya perlu mempunyai sehingga sini korus terbatal (int i); 692 00:43:56,110 --> 00:43:59,210 Jadi sekarang jika saya pergi ke sini - sebenarnya, mari kita gunakan tetingkap yang lebih besar. 693 00:43:59,210 --> 00:44:01,980 Mari kita pergi ke hadapan dan membuat korus. 694 00:44:01,980 --> 00:44:06,490 Mari kita pergi ke hadapan dan membuat korus. 695 00:44:06,490 --> 00:44:08,370 Penggunaan daripada pengecamnya tidak diisytiharkan i. 696 00:44:08,370 --> 00:44:12,500 Oh, yang bodoh. Kita tidak memerlukan hujah. Mari kita hanya melakukan ini. 697 00:44:12,500 --> 00:44:16,370 Saya ingin kita telah mula cara ini. Ia akan menjadi satu program yang lebih mudah untuk menulis. 698 00:44:16,370 --> 00:44:25,590 Di sana. Sekarang mari kita pergi ke tetingkap terminal saya, jalankan lagi dilafaz, dan di sini kita pergi. 699 00:44:25,590 --> 00:44:28,460 Itu adalah benar-benar berpuasa. 700 00:44:28,460 --> 00:44:31,150 Apa yang sebenarnya hanya berlaku, walaupun? 701 00:44:31,150 --> 00:44:33,730 Nah, sekarang saya akan menambah barisan cetak supaya kita boleh lihat. 702 00:44:33,730 --> 00:44:43,490 Biar saya katakan printf ("Saya di sini") - tiada pembolehubah. Kita akan meninggalkan ia seperti itu. 703 00:44:43,490 --> 00:44:47,480 Izinkan saya jalankan. Izinkan saya jalankan korus. 704 00:44:47,480 --> 00:44:57,380 Dan ... datang. Terus pergi. 705 00:44:57,380 --> 00:44:59,930 Sebagai mengetepikan, mengapa ia tidak terhempas lagi? 706 00:44:59,930 --> 00:45:02,080 Kesalahan segmentasi berlaku cepat super sebelum ini. 707 00:45:02,080 --> 00:45:06,570 [Sambutan pelajar didengar] >> Tepat sekali. Jadi ia mengambil masa untuk mencetak, kan? 708 00:45:06,570 --> 00:45:08,610 Ia hanya mengambil kerja lebih pada bahagian komputer. 709 00:45:08,610 --> 00:45:10,620 Dan ada ia adalah: Segmentasi bersalah. 710 00:45:10,620 --> 00:45:12,340 >> Jadi melihat betapa cepat program berjalan. 711 00:45:12,340 --> 00:45:14,130 Jika anda tidak mencetak apa-apa, puasa super. 712 00:45:14,130 --> 00:45:18,770 Tetapi kita masih mendapat ini kesilapan segmentasi kerana apa yang telah berlaku? 713 00:45:18,770 --> 00:45:21,210 Jika anda berfikir tentang bagaimana memori komputer anda dibentangkan, 714 00:45:21,210 --> 00:45:28,740 ini berlaku menjadi utama, tetapi di sini mari kita hanya memanggil korus ini, dan mari kita memanggil korus ini. 715 00:45:28,740 --> 00:45:34,550 Dan kini jika saya lakukan estetika saya, ini hanya akan mengatakan korus, korus, korus, 716 00:45:34,550 --> 00:45:40,550 korus, korus, korus, korus, iklan nauseum, dan akhirnya, apa yang akan berlaku? 717 00:45:40,550 --> 00:45:45,630 Jika gambar besar, secara literal, ini, apa yang hanya berlaku konsepnya? 718 00:45:46,520 --> 00:45:48,630 Timbunan lebihan longgokan itu. 719 00:45:48,630 --> 00:45:51,940 Atau lebih teruk, anda hanya ditakluki segala-galanya, termasuk segmen teks, 720 00:45:51,940 --> 00:45:54,590 yang adalah 0 dan 1s yang mewakili program anda. 721 00:45:54,590 --> 00:45:57,080 Secara ringkas, ini adalah hanya super, buruk super. 722 00:45:57,080 --> 00:45:58,830 Program anda telah melambung di luar kawalan. 723 00:45:58,830 --> 00:46:01,220 Anda menggunakan memori cara yang lebih daripada yang anda hendak 724 00:46:01,220 --> 00:46:03,960 semua kerana kesilapan bodoh dalam kes ini, 725 00:46:03,960 --> 00:46:08,040 atau dalam kes ini satu fungsi yang sangat sengaja dilakukan memanggil sendiri. 726 00:46:08,040 --> 00:46:09,500 Sekarang, ini tidak semua yang buruk. 727 00:46:09,500 --> 00:46:13,800 Fungsi yang menggelarkan diri mereka sebenarnya mempunyai kuasa yang besar apabila anda menggunakannya dengan betul. 728 00:46:13,800 --> 00:46:15,800 Saya telah tidak digunakan dengan betul di sini. 729 00:46:15,800 --> 00:46:19,780 Jadi ini bukan semua buruk, tetapi hakikat bahawa saya tidak pernah benar-benar berhenti memanggil diri 730 00:46:19,780 --> 00:46:23,520 adalah kelemahan asas di sini program ini. 731 00:46:23,520 --> 00:46:26,400 Jadi di mana kita akan pergi dengan semua ini? Apa yang benar-benar berlaku? 732 00:46:26,400 --> 00:46:30,340 Apabila saya memanggil fungsi kenaikan seperti yang kita telah lakukan pada mereka contoh, 733 00:46:30,340 --> 00:46:33,420 Saya mempunyai nilai seperti 1 yang saya lulus masuk 734 00:46:33,420 --> 00:46:37,570 Saya lulus dalam satu salinan nombor 1, jadi berikut berlaku. 735 00:46:37,570 --> 00:46:44,240 Mari kita pergi ke kenaikan contoh, lelaki ini betul-betul di sini. 736 00:46:44,240 --> 00:46:46,870 Berikut adalah apa yang sebenarnya berlaku. 737 00:46:46,870 --> 00:46:53,400 Apabila saya memanggil kenaikan dan saya lulus dalam x, bergambar, apa yang berlaku di sini adalah ini. 738 00:46:53,400 --> 00:46:59,520 >> Jika saya mempunyai nilai 1 disimpan di sini dan saya sebenarnya menyeru kenaikan, 739 00:46:59,520 --> 00:47:04,330 yang kini dikenali sebagai korus - iPad membaling saya di sini. 740 00:47:04,330 --> 00:47:09,760 Mari kita memanggil kenaikan ini, dan kita tidak tahu apa fungsi ini seterusnya akan menjadi. 741 00:47:09,760 --> 00:47:14,840 Jadi apa yang sebenarnya berlaku di sini tempat di utama saya mempunyai sebahagian memori 742 00:47:14,840 --> 00:47:17,000 yang menyimpan nombor 1. 743 00:47:17,000 --> 00:47:19,380 Apabila saya memanggil kenaikan, saya menggunakan satu lagi sebahagian memori, 744 00:47:19,380 --> 00:47:21,230 tetapi sekarang saya mempunyai salinan 1. 745 00:47:21,230 --> 00:47:26,660 Apabila saya kenaikan nilai itu, ini menjadi 2, 746 00:47:26,660 --> 00:47:30,560 tetapi apa yang berlaku secepat pulangan kenaikan? 747 00:47:30,560 --> 00:47:33,630 Memori ini hanya akan diserahkan kembali kepada sistem operasi, 748 00:47:33,630 --> 00:47:37,450 yang bermaksud semua yang anda telah melakukan apa-apa yang berguna. 749 00:47:37,450 --> 00:47:43,120 1 yang pada asalnya terkandung dalam utama sebenarnya masih ada. 750 00:47:43,120 --> 00:47:44,890 Jadi di mana kita akan pergi dengan ini? 751 00:47:44,890 --> 00:47:49,770 Ia ternyata bahawa dalam ingatan anda mempunyai urutan ini kembali-ke-belakang bait 752 00:47:49,770 --> 00:47:53,050 bahawa anda boleh meletakkan barangan di dalam, dan ia ternyata bahawa kita sudah melihat sesuatu 753 00:47:53,050 --> 00:47:55,390 yang melibatkan meletakkan sesuatu kembali ke belakang untuk kembali ke belakang. 754 00:47:55,390 --> 00:47:59,860 Apakah rentetan yang berdasarkan 1 minggu dan kini minggu 2? 755 00:48:00,020 --> 00:48:01,980 Ia hanya satu koleksi aksara. 756 00:48:01,980 --> 00:48:04,310 Jadi ia ternyata hanya kerana anda boleh meletakkan nombor dalam ingatan, 757 00:48:04,310 --> 00:48:06,990 sama anda boleh meletakkan watak-watak dalam ingatan. 758 00:48:06,990 --> 00:48:10,530 Dan apabila kita mula meletakkan watak-watak dalam ingatan kembali ke belakang untuk kembali ke belakang, 759 00:48:10,530 --> 00:48:13,620 ia ternyata bahawa menggunakan mudah perkara seperti untuk gelung atau gelung sementara, 760 00:48:13,620 --> 00:48:17,170 kita boleh melelar dari kiri ke kanan ke atas watak-watak dalam rentetan 761 00:48:17,170 --> 00:48:20,600 dan mula mengurut mereka ke dalam watak yang berbeza sama sekali - 762 00:48:20,600 --> 00:48:23,370 boleh menjadi b, b boleh menjadi c - 763 00:48:23,370 --> 00:48:27,780 supaya akhirnya, kita boleh mengambil hukuman Bahasa Inggeris yang sebenarnya masuk akal 764 00:48:27,780 --> 00:48:30,310 dan menukar setiap mereka satu huruf pada satu masa 765 00:48:30,310 --> 00:48:34,400 dengan berjalan melalui memori komputer kita kiri ke kanan untuk benar-benar menyulitkan. 766 00:48:34,400 --> 00:48:35,810 Jadi mari kita rehat lima minit kami di sini, 767 00:48:35,810 --> 00:48:40,730 dan apabila kita kembali, kita akan memulakan proses ini bergegas maklumat. 768 00:48:42,020 --> 00:48:43,520 >> Semua hak. 769 00:48:43,520 --> 00:48:48,070 Sebelum kita menyelam ke dalam beberapa kripto dan perkara-perkara yang dipanggil array, 770 00:48:48,070 --> 00:48:51,470 izinkan saya berhenti untuk sebarang pertanyaan kerana saya rasa seperti saya benar-benar jenis kelam-kabut 771 00:48:51,470 --> 00:48:54,080 beberapa topik-topik. Jadi mari kita menetapkan sekarang jika kita boleh. 772 00:48:54,080 --> 00:48:58,700 Kami hanya bercakap tentang nilai-nilai kembali, kita bercakap tentang hujah-hujah, 773 00:48:58,700 --> 00:49:03,250 dan kita bercakap tentang idea ini, yang kita akan datang kembali ke dalam beberapa minggu akan datang, 774 00:49:03,250 --> 00:49:08,720 melihat memori sebagai sekumpulan keseluruhan ini dulang disusun, jadi untuk bercakap, 775 00:49:08,720 --> 00:49:12,660 dari bawah atas sehingga, bahawa setiap dulang yang mendapat meletakkan pada timbunan 776 00:49:12,660 --> 00:49:16,530 mewakili fungsi yang sedang dipanggil. 777 00:49:17,900 --> 00:49:20,260 Apa-apa soalan? 778 00:49:20,260 --> 00:49:22,640 Biar saya tanya soalan di sini. 779 00:49:22,640 --> 00:49:27,890 Biar saya memudahkan belakang ini kepada apa yang ia sebelum beberapa Q & A. awal kami 780 00:49:27,890 --> 00:49:35,570 Hakikat bahawa kenaikan mempunyai kurungan terbuka, beberapa int, ditutup kurung - 781 00:49:35,570 --> 00:49:39,110 apakah mewakili nombor int? 782 00:49:39,110 --> 00:49:42,790 [Pelajar] hujah Satu. >> Satu hujah. Okay. Tetapi apa hujah? 783 00:49:42,790 --> 00:49:46,370 [Pelajar tindak balas didengar] >> Apa itu? >> [Pelajar] Sesuatu yang anda lulus masuk 784 00:49:46,370 --> 00:49:49,940 Okay, jadi sesuatu yang anda lulus masuk Dan lebih amnya, ia hanya input. 785 00:49:49,940 --> 00:49:52,450 Jika anda telah menulis fungsi dan tujuan yang berfungsi dalam kehidupan 786 00:49:52,450 --> 00:49:55,770 adalah untuk melakukan sesuatu yang sedikit berbeza setiap kali anda menggunakannya, 787 00:49:55,770 --> 00:50:00,110 maka satu-satunya cara bagi yang berlaku benar-benar akan kelihatan untuk menyediakan ia dengan input 788 00:50:00,110 --> 00:50:03,510 supaya ia boleh melakukan sesuatu yang berbeza dengan input yang setiap masa. 789 00:50:03,510 --> 00:50:06,650 >> Jadi, anda perlu untuk menentukan dua perkara apabila fungsi mengambil input. 790 00:50:06,650 --> 00:50:09,590 Anda perlu nyatakan nama yang anda mahu untuk memberi input yang 791 00:50:09,590 --> 00:50:12,700 semata-mata untuk kemudahan anda sendiri supaya anda boleh merujuk kepada 792 00:50:12,700 --> 00:50:16,540 dalam fungsi yang anda sendiri menulis, seperti yang saya lakukan di sini dalam 32 baris. 793 00:50:16,540 --> 00:50:20,800 Tetapi anda juga perlu untuk menentukan jenis kerana C adalah bahasa pengaturcaraan 794 00:50:20,800 --> 00:50:25,940 yang hanya memerlukan bahawa jika anda mahu pembolehubah, anda perlu memberitahu komputer apa jenis data ia adalah, 795 00:50:25,940 --> 00:50:30,200 sebahagian besar supaya ia tahu berapa banyak bit untuk memperuntukkan bagi pembolehubah yang 796 00:50:30,200 --> 00:50:33,020 kerana ia boleh menjadi 6 - maaf, ia tidak akan menjadi 6. 797 00:50:33,020 --> 00:50:37,080 Ia boleh menjadi 16, ia boleh menjadi 8, ia boleh menjadi 32, walaupun 64, 798 00:50:37,080 --> 00:50:39,130 tetapi komputer perlu tahu. 799 00:50:39,130 --> 00:50:43,180 Sekarang, int pada sebelah kiri mewakili apa, sebaliknya? 800 00:50:46,350 --> 00:50:48,850 [Pelajar tindak balas didengar] >> Apa itu? >> [Pelajar] Jenis fungsi. 801 00:50:48,850 --> 00:50:53,610 Jenis fungsi dan, lebih khusus, jenis output. Betul. 802 00:50:53,610 --> 00:50:57,380 Jadi, manakala perkara dalam kurungan mewakili input, jika ada, 803 00:50:57,380 --> 00:50:59,660 perkara ke kiri mewakili output. 804 00:50:59,660 --> 00:51:03,530 Dan dalam kes ini, kenaikan nampaknya kembali int, 805 00:51:03,530 --> 00:51:07,690 dan sebagainya int adalah jenis pulangan fungsi ini. 806 00:51:07,690 --> 00:51:09,340 Apakah maknanya untuk pulangan? 807 00:51:09,340 --> 00:51:15,090 Secara harfiah, anda menggunakan pulangan kata kunci dan kemudian jika apa yang anda kembali 808 00:51:15,090 --> 00:51:18,600 hak kata kunci ialah integer, 809 00:51:18,600 --> 00:51:21,660 maka itu adalah memang konsisten dengan apa yang kita telah dijanjikan. 810 00:51:21,660 --> 00:51:26,410 Anda tidak dapat melakukan sesuatu seperti ini - hello, dunia - kerana itu adalah rentetan. 811 00:51:26,410 --> 00:51:28,860 >> Jelas sekali, ia bukan integer. 812 00:51:28,860 --> 00:51:33,140 Jadi dalam jangka pendek, beban adalah benar-benar kepada kami, pengaturcara, khusus 813 00:51:33,140 --> 00:51:37,770 apa yang kita sedang kembali dan kemudian sebenarnya pergi tentang kembali ia. 814 00:51:37,770 --> 00:51:43,440 Konteks di sini sekarang ialah bahawa memori komputer anda adalah gigabit, 2 gigabait - 815 00:51:43,440 --> 00:51:45,920 apa sahaja - mungkin ia lebih, mungkin ia adalah kurang, 816 00:51:45,920 --> 00:51:49,050 tetapi komputer memandang ia sebagai mempunyai bahagian yang berbeza. 817 00:51:49,050 --> 00:51:51,200 Sesuatu yang pergi ke sana, sesuatu yang lain naik sana, 818 00:51:51,200 --> 00:51:54,290 barangan yang berbeza berlaku di tengah-tengah, dan hari ini kita hanya mula bercerita, 819 00:51:54,290 --> 00:51:56,340 tetapi kita akan datang kembali ke masa ini lebih. 820 00:51:56,340 --> 00:51:59,980 Buat masa sekarang, hanya sekeping memori kita benar-benar mengambil berat tentang adalah segmen teks 821 00:51:59,980 --> 00:52:03,360 kerana yang hanya mewakili 0 dan 1s bahawa dilafaz telah outputted. 822 00:52:03,360 --> 00:52:06,050 Jadi apabila anda menjalankan arahan pada keyboard seperti a.out 823 00:52:06,050 --> 00:52:09,110 atau anda klik dua kali ikon pada Mac OS atau Windows, 824 00:52:09,110 --> 00:52:11,880 program anda dimuatkan dari cakera keras anda ke dalam RAM 825 00:52:11,880 --> 00:52:16,330 dan ia plopped di atas RAM komputer anda, jadi untuk bercakap. 826 00:52:16,330 --> 00:52:20,450 Sementara itu, sebagai program anda mula berjalan dan utama mendapat dipanggil 827 00:52:20,450 --> 00:52:23,640 dalam program ini anda menulis atau program Microsoft atau Apple menulis, 828 00:52:23,640 --> 00:52:27,860 mana-mana pembolehubah tempatan akhirnya di bawah sana di bahagian bawah memori komputer anda. 829 00:52:27,860 --> 00:52:33,230 Tetapi jika panggilan utama lagi fungsi itu sendiri mempunyai pembolehubah atau hujah, mereka akhirnya di atasnya. 830 00:52:33,230 --> 00:52:36,680 Dan jika fungsi yang menyeru sesuatu, mereka akhirnya atas, atas, atas ia. 831 00:52:36,680 --> 00:52:41,460 >> Dan hanya sekali fungsi dilakukan melaksanakan tidak timbunan dulang, jadi untuk bercakap, 832 00:52:41,460 --> 00:52:43,240 mula untuk mendapatkan lebih rendah dan lebih rendah. 833 00:52:43,240 --> 00:52:48,250 Dan ini adalah apa itu, secara ringkas, menjelaskan mengapa apabila anda memanggil kiub 834 00:52:48,250 --> 00:52:51,550 atau anda memanggil kenaikan, anda lulus dalam salinan nilai. 835 00:52:51,550 --> 00:52:55,520 Dan apa yang bermakna bergambar adalah bahawa anda benar-benar menulis nombor 1 836 00:52:55,520 --> 00:53:00,460 dalam bahagian lain ingatan, perubahan yang 1 hingga 2 dalam kes kenaikan 837 00:53:00,460 --> 00:53:04,820 atau ke 8 dalam kes kiub dan kemudian membuang memori yang jauh 838 00:53:04,820 --> 00:53:09,140 secepat kenaikan atau pulangan fungsi kiub. Soalan. 839 00:53:09,140 --> 00:53:12,900 [Pelajar] mana pemboleh ubah sejagat yang disimpan? 840 00:53:12,900 --> 00:53:18,100 Pembolehubah global disimpan dalam apa yang kini dipanggil data dimulakan atau data yang tidak diisytiharkan, 841 00:53:18,100 --> 00:53:21,920 perbezaan jika anda mempunyai pembolehubah global dan anda mengatakan ia segera nilai 842 00:53:21,920 --> 00:53:24,640 dengan tanda sama, ia berakhir di atas sana, 843 00:53:24,640 --> 00:53:29,200 dan jika anda hanya berkata x int; dengan tiada nilai, ia berakhir sedikit lebih rendah dalam RAM 844 00:53:29,200 --> 00:53:31,710 hanya dengan konvensyen. 845 00:53:31,710 --> 00:53:34,940 Soalan-soalan lain? Semua hak. 846 00:53:34,940 --> 00:53:37,340 Jadi gambar ini akan kembali seperti yang kita mendapatkan lebih berkuasa 847 00:53:37,340 --> 00:53:39,170 dengan apa yang kita boleh lakukan dengan komputer, 848 00:53:39,170 --> 00:53:42,720 tapi sekarang, mari kita mempunyai intro ringkas kepada kriptografi, 849 00:53:42,720 --> 00:53:46,080 jenis tertentu kriptografi yang tidak menyelesaikan semua masalah di dunia 850 00:53:46,080 --> 00:53:47,720 tetapi tidak menyelesaikan sebahagian daripada mereka. 851 00:53:47,720 --> 00:53:51,700 Dalam kes ini di sini, kita mempunyai sesuatu yang dipanggil rahsia utama kriptografi. 852 00:53:51,700 --> 00:53:56,410 Rahsia utama kriptografi, seperti namanya, mendapat keselamatan dari rahsia. 853 00:53:56,410 --> 00:54:00,690 >> Sebagai contoh, jika anda telah kembali di sekolah gred dan anda telah lulus surat cinta rahsia sedikit 854 00:54:00,690 --> 00:54:04,850 untuk lelaki atau perempuan anda telah menghancurkan, jika anda mahu lulus nota bahawa melalui penonton, 855 00:54:04,850 --> 00:54:08,380 anda mungkin tidak akan menulis apa-apa nota dalam Bahasa Inggeris atau apa sahaja bahasa ibunda anda. 856 00:54:08,380 --> 00:54:13,340 Sebaliknya, anda mungkin menyulitkan atau anda mungkin hanya menghantar mereka mesej teks pada hari ini. 857 00:54:13,340 --> 00:54:15,460 Tetapi anda sebenarnya mungkin pas mereka nota sepanjang kelas. 858 00:54:15,460 --> 00:54:18,700 Dan untuk melakukan ini selamat dalam apa-apa cara yang anda rakan-rakan dan guru 859 00:54:18,700 --> 00:54:22,650 tidak tahu apa yang anda menulis, anda mungkin tampil dengan algoritma yang agak mudah, 860 00:54:22,650 --> 00:54:25,920 muda walaupun anda mungkin, hanya perebutan perkataan. 861 00:54:25,920 --> 00:54:28,130 Jadi bukannya menulis anda mungkin menulis b, 862 00:54:28,130 --> 00:54:30,220 bukannya b anda mungkin menulis c, 863 00:54:30,220 --> 00:54:32,140 bukan c anda mungkin menulis d, dan sebagainya. 864 00:54:32,140 --> 00:54:34,360 Atau anda boleh tampil dengan terjemahan yang lebih canggih 865 00:54:34,360 --> 00:54:36,720 surat surat yang berbeza. 866 00:54:36,720 --> 00:54:39,740 Tetapi tangkapan adalah lelaki atau perempuan kepada siapa anda menghantar nota ini 867 00:54:39,740 --> 00:54:45,020 keperluan untuk mengetahui sesuatu, yang adalah apa yang jelas? >> [Pelajar] Apa yang anda menghantar. 868 00:54:45,020 --> 00:54:49,720 Apa rahsia anda, seperti apa yang adalah bahawa pemetaan antara dan b dan c dan d 's. 869 00:54:49,720 --> 00:54:54,650 Adakah ia hanya menambah 1 kepada setiap huruf untuk pergi dari a hingga b, b c? 870 00:54:54,650 --> 00:54:56,670 Adakah ia lebih kompleks daripada itu? 871 00:54:56,670 --> 00:55:01,540 >> Jadi anda dan menghancurkan anda perlu mempunyai maklumat ini rahsia, 872 00:55:01,540 --> 00:55:03,190 tetapi terdapat jenis tangkapan-22 di sini. 873 00:55:03,190 --> 00:55:06,830 Jika ini adalah kali pertama anda menghantar surat cinta ini melalui kelas, 874 00:55:06,830 --> 00:55:10,720 bagaimana yang lelaki atau perempuan akan tahu apa rahsia walaupun? 875 00:55:10,720 --> 00:55:13,930 Begitu rahsia utama kripto tidak menyelesaikan semua masalah di dunia, 876 00:55:13,930 --> 00:55:16,320 dan sebenarnya terdapat hubungan di sini bahawa kita akan kembali ke arah akhir semester. 877 00:55:16,320 --> 00:55:25,110 Begitu juga adakah kebanyakan kita tidak tahu seseorang yang bekerja, misalnya, di Amazon.com, 878 00:55:25,110 --> 00:55:28,190 dan lagi ramai daripada kita mungkin telah membeli barangan di Amazon.com, 879 00:55:28,190 --> 00:55:31,990 dan kami telah diajar untuk menganggap bahawa transaksi e-dagang adalah selamat. 880 00:55:31,990 --> 00:55:36,470 URL mungkin mengatakan https, ada mungkin ikon mangga bodoh sedikit tempat, 881 00:55:36,470 --> 00:55:39,930 terdapat beberapa jenis kriptografi mendapatkan maklumat kad kredit anda 882 00:55:39,930 --> 00:55:42,160 antara anda dan Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Dan lagi jika kriptografi melibatkan mengetahui beberapa rahsia 884 00:55:45,430 --> 00:55:48,620 tetapi saya tidak tahu sesiapa di Amazon dan saya pasti tidak disusun sebarang jenis rahsia 885 00:55:48,620 --> 00:55:52,710 dengan seseorang di Amazon, bagaimana komputer saya atau pelayar saya berbuat demikian? 886 00:55:52,710 --> 00:55:55,720 Ia ternyata terdapat lain-lain jenis kriptografi sama sekali yang menyelesaikan masalah itu. 887 00:55:55,720 --> 00:55:57,670 Tetapi hari ini, kita akan memberi tumpuan pada satu yang mudah 888 00:55:57,670 --> 00:56:00,290 di mana anda boleh menguruskan terlebih dahulu untuk mengetahui beberapa rahsia 889 00:56:00,290 --> 00:56:03,760 seperti +1 atau beberapa pemetaan antara a dan b. 890 00:56:03,760 --> 00:56:05,840 Dan proses kriptografi umumnya melibatkan ini. 891 00:56:05,840 --> 00:56:08,620 Anda mempunyai beberapa teks biasa, digambarkan di sini di sebelah kiri, 892 00:56:08,620 --> 00:56:12,930 anda menjalankan melalui beberapa jenis algoritma atau prosedur untuk menyulitkan - 893 00:56:12,930 --> 00:56:15,100 mungkin itu hanya menjadi b, b menjadi c - 894 00:56:15,100 --> 00:56:17,490 dan kemudian anda berakhir dengan tulisan rahsia. 895 00:56:17,490 --> 00:56:20,380 Sementara itu, sekali menghancurkan anda menerima nota ini rahsia, 896 00:56:20,380 --> 00:56:24,200 dia mempunyai kemudian menyahsulit oleh umumnya menterbalikkan algoritma yang 897 00:56:24,200 --> 00:56:27,190 supaya mendapatkan kembali teks biasa. 898 00:56:27,190 --> 00:56:28,960 Terdapat jelmaan fizikal ini. 899 00:56:28,960 --> 00:56:31,680 >> Sebagai contoh, ini adalah penyahkod rahsia cincin, 900 00:56:31,680 --> 00:56:35,110 dan ini adalah cincin dalam erti kata bahawa terdapat dua cepat di sini. 901 00:56:35,110 --> 00:56:38,490 Di pinggir luar perkara ini, ada huruf A hingga Z, 902 00:56:38,490 --> 00:56:40,340 walaupun mereka berada dalam susunan rawak, 903 00:56:40,340 --> 00:56:42,880 dan di bahagian dalam, terdapat sebenarnya beberapa nombor 904 00:56:42,880 --> 00:56:46,620 seperti dengan cincin ini anda jenis boleh bertukar luar tetapi tidak dalam 905 00:56:46,620 --> 00:56:49,140 untuk beratur nombor dengan huruf. 906 00:56:49,140 --> 00:56:53,020 Dari filem dipanggil A Story Krismas, anda akan melihat bahawa Ralphie sedikit 907 00:56:53,020 --> 00:56:58,000 begitu bersemangat untuk mengetahui apa mesej rahsia Anak-Anak Yatim Little Annie kepadanya 908 00:56:58,000 --> 00:57:02,570 yang telah disampaikan, saya fikir, dalam bentuk mesej angka pada kotak bijirin 909 00:57:02,570 --> 00:57:07,220 dan anda mempunyai untuk mengumpul semua kad kecil yang datang dalam kotak bijirin, 910 00:57:07,220 --> 00:57:09,770 anda terpaksa untuk mel mereka dalam, anda terpaksa untuk mendapatkan kembali cincin penyahkod rahsia 911 00:57:09,770 --> 00:57:13,910 supaya akhirnya, anda boleh memikirkan apa pemetaan adalah antara huruf dan nombor 912 00:57:13,910 --> 00:57:15,550 atau surat dan surat. 913 00:57:15,550 --> 00:57:19,520 Bagaimana dalam komputer kita boleh pergi tentang melaksanakan atau mewakili perkara-perkara seperti ini? 914 00:57:19,520 --> 00:57:22,560 Kita memerlukan cara menyatakan diri kita sedikit lebih fleksibel 915 00:57:22,560 --> 00:57:25,080 daripada pembolehubah kami setakat ini telah dibenarkan. 916 00:57:25,080 --> 00:57:29,000 Kami telah ints, kita telah aksara, kita telah terapung dan beregu dan beberapa yang lain, 917 00:57:29,000 --> 00:57:34,200 tetapi mereka adalah cebisan individu memori yang tidak benar-benar membenarkan kita untuk meluahkan perkara 918 00:57:34,200 --> 00:57:36,440 seperti perkataan dan ayat dan frasa. 919 00:57:36,440 --> 00:57:38,630 Malah, kita telah dipanggil rentetan perkara-perkara, 920 00:57:38,630 --> 00:57:42,660 tetapi kami berjanji bahawa ini adalah benar-benar hanya peringkasan di perpustakaan CS50 921 00:57:42,660 --> 00:57:45,540 bahawa kita berniat untuk mengupas kembali. 922 00:57:45,540 --> 00:57:47,500 Dan jadi mari kita mulakan untuk berbuat demikian di sini. 923 00:57:47,500 --> 00:57:49,840 Biar saya pergi ke hadapan dan membuka fail - 924 00:57:49,840 --> 00:57:54,100 semua fail-fail ini boleh didapati, seperti biasa, dalam talian - array.c dipanggil 925 00:57:54,100 --> 00:57:58,960 untuk menyelesaikan masalah yang berkaitan dengan rentetan tetapi yang cat gambar di sini 926 00:57:58,960 --> 00:58:01,520 bagaimana kita mungkin menggunakan sesuatu yang dinamakan array. 927 00:58:01,520 --> 00:58:04,050 >> Pelbagai jenis data. 928 00:58:04,050 --> 00:58:10,730 Ia adalah satu jenis pembolehubah kejayaannya yang mempunyai pelbagai jenis data yang lebih kecil di dalamnya 929 00:58:10,730 --> 00:58:12,680 kembali ke belakang untuk kembali ke belakang. 930 00:58:12,680 --> 00:58:16,980 Jadi, sebagai contoh, jika kita mahu untuk menulis program kecil yang memberikan anda purata kuiz anda 931 00:58:16,980 --> 00:58:19,780 bagi kursus seperti 50 yang mempunyai 2 kuiz, 932 00:58:19,780 --> 00:58:23,450 anda sangat mudah boleh menulis program ini berasaskan walaupun pada beberapa bahan minggu lepas 933 00:58:23,450 --> 00:58:28,830 dengan menggunakan GetInt dan beberapa pembolehubah: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Dan ia agak mudah. 935 00:58:30,550 --> 00:58:33,500 Ia mungkin 10, 20 baris kod maks untuk melaksanakan program 936 00:58:33,500 --> 00:58:38,940 yang meminta pengguna untuk 2 markah kuiz dan kemudian mengira purata mereka 937 00:58:38,940 --> 00:58:42,020 dengan menambah mereka bersama-sama, membahagikan dengan 2, dan kemudian mencetak keputusan. 938 00:58:42,020 --> 00:58:46,400 Kita mungkin boleh lakukan yang cukup mudah sekarang selepas beberapa beberapa minit. 939 00:58:46,400 --> 00:58:49,450 Tetapi masalahnya ialah yang mengandaikan bahawa 50 mempunyai 3 kuiz atau 4. 940 00:58:49,450 --> 00:58:52,830 Katakan bahawa anda mahu menggunakan program yang sama untuk kelas yang mempunyai mingguan kuiz. 941 00:58:52,830 --> 00:58:55,100 Fikirkan tentang kelas yang telah mingguan kuiz. 942 00:58:55,100 --> 00:58:58,840 Jika terdapat 16 atau jadi minggu dalam satu semester, sekarang anda mempunyai 16 pembolehubah: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, quiz4 int. 944 00:59:03,030 --> 00:59:06,870 Sebaik sahaja anda mula melihat lebihan ini, ini menyalin dan menampal kod, 945 00:59:06,870 --> 00:59:09,810 ia harus bermula untuk membuat anda ingin terdapat satu cara yang lebih baik. 946 00:59:09,810 --> 00:59:13,610 Dan bersyukur, kerana tatasusunan ada. Jadi mari kita buat ini. 947 00:59:13,610 --> 00:59:16,700 Pertama, izinkan saya memperkenalkan satu perkara yang sangat mudah bahawa kita telah tidak digunakan setakat ini, 948 00:59:16,700 --> 00:59:18,820 tetapi anda akan melihat ia kadang-kadang dalam kod. 949 00:59:18,820 --> 00:59:21,270 >> Ini adalah apa yang biasanya dipanggil pemalar. 950 00:59:21,270 --> 00:59:24,410 Jadi ia adalah berterusan dalam erti kata bahawa nilai ini tidak pernah berubah. 951 00:59:24,410 --> 00:59:26,450 Konvensyen manusia apabila mewujudkan pemalar 952 00:59:26,450 --> 00:59:30,420 adalah untuk menggunakan semua huruf besar hanya supaya ia benar-benar menonjol dalam kod anda, 953 00:59:30,420 --> 00:59:34,270 dan kata kunci khas yang anda gunakan dalam C # menentukan. 954 00:59:34,270 --> 00:59:39,970 Jadi kita katakan # menentukan, maka ruang, maka perkataan yang anda mahu gunakan untuk nama pemalar 955 00:59:39,970 --> 00:59:41,730 dan kemudian nilai pemalar. 956 00:59:41,730 --> 00:59:44,710 Perhatikan ini adalah berbeza daripada memberikan sesuatu kepada pembolehubah. 957 00:59:44,710 --> 00:59:46,430 Tiada sama menandatangani, terdapat tiada koma bernoktah. 958 00:59:46,430 --> 00:59:49,140 Ini adalah apa yang umumnya dikenali sebagai arahan prapemproses, 959 00:59:49,140 --> 00:59:50,840 tetapi lebih kepada bahawa masa yang lain. 960 00:59:50,840 --> 00:59:56,350 Buat masa sekarang, ini mewujudkan nilai yang tidak berubah dipanggil kuiz 961 00:59:56,350 --> 00:59:58,290 nilai sebenar yang bernombor 2. 962 00:59:58,290 --> 01:00:02,180 Jadi di mana-mana anda melihat kuiz, kuiz, kuiz seluruh fail ini, 963 01:00:02,180 --> 01:00:04,230 itu hanya nombor 2. 964 01:00:04,230 --> 01:00:06,550 Jika saya melihat utama sekarang, mari kita lihat bagaimana kerja-kerja ini. 965 01:00:06,550 --> 01:00:09,770 Pertama, ia kelihatan sedikit samar, tetapi ia adalah semua barangan dari 1 minggu. 966 01:00:09,770 --> 01:00:12,210 Tanya pengguna untuk gred. Bagaimana kita melakukan ini? 967 01:00:12,210 --> 01:00:17,350 Dalam 22 baris - ini adalah benar-benar bahagian yang berair - Saya mengaku apungan 968 01:00:17,350 --> 01:00:23,240 tetapi tidak hanya apungan tunggal. Saya mengisytiharkan, sebaliknya, pelbagai nilai-titik terapung. 969 01:00:23,240 --> 01:00:27,700 Itu ubah akan dipanggil gred, seperti yang tersirat di sini, 970 01:00:27,700 --> 01:00:31,420 tetapi sekeping hanya sintaks baru maka ini kurungan persegi. 971 01:00:31,420 --> 01:00:37,280 Hakikat bahawa saya telah berkata gred apungan dan kemudian kurungan terbuka dan kemudian nombor - 972 01:00:37,280 --> 01:00:40,980 notis jika ini adalah pemalar ini adalah sama seperti yang kita lakukan ini - 973 01:00:40,980 --> 01:00:46,840 ini bermakna, "Hei komputer, memberi saya 2 terapung dan mari kita secara kolektif memanggil mereka gred." 974 01:00:46,840 --> 01:00:51,780 >> Ini adalah Berbeza dengan proses yang lebih membosankan seperti ini: apungan grade1; 975 01:00:51,780 --> 01:00:54,580 terapung grade2; dan sebagainya. 976 01:00:54,580 --> 01:00:58,310 Jadi array membolehkan kita untuk melaksanakan idea ini tetapi lebih kurang messily, 977 01:00:58,310 --> 01:01:04,560 dalam apa-apa cara yang bahawa kita boleh menulis 1 baris kod dan bukannya, katakan, 16 untuk semester 16 minggu. 978 01:01:04,560 --> 01:01:09,060 Saya tidak mahu keras-kod 2 kerana jika anda berfikir tentang ini sekarang secara logik, 979 01:01:09,060 --> 01:01:12,560 andaikan tahun depan CS50 perubahan kepada 3 kuiz sebaliknya 980 01:01:12,560 --> 01:01:15,010 dan saya mempunyai nombor 2 di sini, saya mempunyai nombor 2 di sini, 981 01:01:15,010 --> 01:01:17,210 Saya mempunyai nombor 2 di sini, nombor 2 di sini. 982 01:01:17,210 --> 01:01:19,890 Ia menjadi sangat membosankan dan sangat mudah untuk skru sehingga 983 01:01:19,890 --> 01:01:26,550 dan sengaja menukar 1 nilai kepada 3 dan terlepas beberapa nilai lain 2. 984 01:01:26,550 --> 01:01:30,660 Jadi saya akan sebaliknya abstrak ini jauh dan menggunakan ini berterusan bahawa, 985 01:01:30,660 --> 01:01:32,520 seperti namanya, tidak pernah berubah. 986 01:01:32,520 --> 01:01:35,870 Dan kini tidak kira sama ada kita mempunyai berbeza kuiz tahun ini atau seterusnya, 987 01:01:35,870 --> 01:01:39,380 Saya hanya perlu untuk menukar ia di satu tempat di sini di atas. 988 01:01:39,380 --> 01:01:41,230 Jadi itulah semua pemalar adalah. 989 01:01:41,230 --> 01:01:47,100 Sementara itu, ciri konsep baru yang pelbagai. 990 01:01:47,100 --> 01:01:55,030 Jadi kurungan persegi memberikan saya ini terapung yang banyak dan membolehkan saya kolektif memanggil mereka gred sini. 991 01:01:55,030 --> 01:01:56,720 Jadi sekarang mari kita lihat apa yang saya akan lakukan. 992 01:01:56,720 --> 01:01:59,220 Di sini dalam 24 baris adalah permulaan untuk gelung. 993 01:01:59,220 --> 01:02:03,380 >> Ini adalah benar-benar mewah tiada. Ia hanya menggunakan kuiz bukannya beberapa berkod keras. 994 01:02:03,380 --> 01:02:06,740 Tetapi tiada apa-apa yang intelektual berbeza ada dari minggu lepas. 995 01:02:06,740 --> 01:02:11,650 Ini adalah hanya printf, jadi printf ("Kuiz #% d daripada% d:") 996 01:02:11,650 --> 01:02:16,670 kerana saya hanya ingin mencetak keluar memberi saya kuiz nombor 1 2 dan kemudian 2 of 2. 997 01:02:16,670 --> 01:02:18,480 Jadi ini adalah satu perkara semata-mata estetik. 998 01:02:18,480 --> 01:02:21,000 Tetapi bahagian yang menarik sekarang adalah dalam 27 baris. 999 01:02:21,000 --> 01:02:27,840 Dalam usaha untuk mengisi salah satu daripada dua ruang letak dengan nilai titik terapung, 1000 01:02:27,840 --> 01:02:29,640 anda sekali lagi menggunakan kurungan persegi. 1001 01:02:29,640 --> 01:02:35,170 Dalam kes ini, saya menggunakan i kerana ini untuk gelung telah bermula dengan i menyamai apa nilai, nampaknya? 1002 01:02:35,170 --> 01:02:36,670 [Pelajar] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Jadi pada lelaran pertama gelung ini, ia seolah-olah saya menulis ini dalam kod, 1004 01:02:40,990 --> 01:02:46,310 tetapi pada lelaran kedua gelung ini, ia seolah-olah saya menulis ini dalam kod saya. 1005 01:02:46,310 --> 01:02:49,970 Tetapi hakikat bahawa saya menggunakan pembolehubah adalah sempurna kerana, seperti namanya, 1006 01:02:49,970 --> 01:02:52,600 ia berbeza-beza nilainya pada setiap lelaran, 1007 01:02:52,600 --> 01:02:55,900 jadi saya mengisi array ini satu tempat pada satu masa. 1008 01:02:55,900 --> 01:02:57,380 Apakah array ini kelihatan seperti? 1009 01:02:57,380 --> 01:03:01,570 Sebab saya menarik segi empat tepat super mudah pada skrin di sini sebelum ini adalah atas sebab ini. 1010 01:03:01,570 --> 01:03:05,590 Pelbagai adalah hanya sebahagian memori yang diikuti oleh sebahagian yang lain memori 1011 01:03:05,590 --> 01:03:08,570 diikuti oleh sebahagian yang lain memori dan sebagainya. 1012 01:03:08,570 --> 01:03:13,120 Jadi, jika pelbagai saya adalah saiz 2 dalam kes ini di sini, semua saya akan melakukan 1013 01:03:13,120 --> 01:03:20,200 dengan menaip dalam skor kuiz saya suka sini - Saya mendapat 100 pada satu ini dan kemudian saya mendapat 99 pada satu ini - 1014 01:03:20,200 --> 01:03:24,970 maka memori ini mungkin tidak boleh digunakan kerana saya hanya meminta komputer 1015 01:03:24,970 --> 01:03:26,840 untuk pelbagai saiz 2. 1016 01:03:26,840 --> 01:03:28,600 Mereka dataran masih ada, kan? 1017 01:03:28,600 --> 01:03:32,670 Anda masih mempunyai 2 gigabait RAM walaupun anda hanya meminta untuk 2 terapung. 1018 01:03:32,670 --> 01:03:36,840 Jadi idea di sebalik tatasusunan adalah bahawa komputer hanya mengambil sebahagian memori 1019 01:03:36,840 --> 01:03:41,340 dan kemudian apportions lebih kecil keping kembali ke belakang untuk kembali ke belakang. 1020 01:03:41,340 --> 01:03:43,310 Dan supaya semua pelbagai. 1021 01:03:43,310 --> 01:03:47,350 >> Ia adalah sebahagian yang berdampingan dalam ingatan yang anda boleh meletakkan perkara. 1022 01:03:47,350 --> 01:03:50,700 Ini berlaku kemudian melakukan hanya beberapa aritmetik membosankan. 1023 01:03:50,700 --> 01:03:54,640 Jika saya skrol ke bawah sini, ini adalah di mana saya kemudian melelar lebih array. 1024 01:03:54,640 --> 01:03:58,020 Saya tampil dengan hasil tambah semua nilai dalam array, 1025 01:03:58,020 --> 01:04:02,470 dan kemudian saya menggunakan fungsi bulat di sini untuk benar-benar melakukan jumlah dibahagikan dengan kuiz. 1026 01:04:02,470 --> 01:04:06,320 Tetapi biarlah saya melambai tangan saya pada itu sebagai jenis aritmetik yang cukup untuk sekarang. 1027 01:04:06,320 --> 01:04:08,370 Tetapi semua itu melakukan untuk saya akhirnya mengira purata. 1028 01:04:08,370 --> 01:04:13,580 Jadi kuiz pertama ditambah kuiz kedua dibahagikan dengan 2 dan kemudian percetakan ia keluar sebagai int. 1029 01:04:13,580 --> 01:04:17,280 Tetapi mari kita kini peralihan kepada contoh yang berbeza dipanggil string1, 1030 01:04:17,280 --> 01:04:20,700 yang cat gambar yang sama tetapi menggunakan tali. 1031 01:04:20,700 --> 01:04:23,940 Biar saya pergi ke hadapan dan memudahkan ini hanya seketika. 1032 01:04:23,940 --> 01:04:27,090 Memaafkan lekukan sekarang. 1033 01:04:27,090 --> 01:04:30,870 Notis dalam 19 barisan contoh ini, saya mendapat satu rentetan dari pengguna. 1034 01:04:30,870 --> 01:04:34,640 Tetapi notis apa yang saya seterusnya melakukan dalam baris 22 dan seterusnya. 1035 01:04:34,640 --> 01:04:41,250 Saya sebenarnya iterating i sehingga - dan ini adalah helah baru - strlen, tali panjang. 1036 01:04:41,250 --> 01:04:44,880 Ini adalah fungsi yang datang dengan C bahawa jika anda lulus ia rentetan, 1037 01:04:44,880 --> 01:04:47,730 ia memberitahu anda berapa banyak aksara dalam rentetan itu. Itu semua. 1038 01:04:47,730 --> 01:04:51,550 Dan hakikat bahawa ia adalah strlen bukannya panjang rentetan adalah hanya kerana ia lebih ringkas. 1039 01:04:51,550 --> 01:04:55,100 Tiga puluh tahun yang lalu, orang suka untuk menulis perkara yang ringkas yang mungkin, 1040 01:04:55,100 --> 01:04:57,630 jadi kami telah disimpan konvensyen itu di sini. 1041 01:04:57,630 --> 01:05:00,660 i + + hanya bermakna kenaikan i dalam setiap lelaran. 1042 01:05:00,660 --> 01:05:02,990 Dan kini notis ini, yang benar-benar menarik. 1043 01:05:02,990 --> 01:05:09,180 Dalam baris 24, saya katakan, "Komputer, memberikan saya watak, 8 bit, dan memanggil ia c." 1044 01:05:09,180 --> 01:05:12,630 Tetapi apakah ini di sebelah kanan berkata? 1045 01:05:13,490 --> 01:05:16,530 Dalam bahasa Inggeris, apakah yang mewakili? 1046 01:05:16,530 --> 01:05:18,730 [Pelajar] watak pertama dalam array. 1047 01:05:18,730 --> 01:05:20,790 Tepat sekali. Berikan saya watak pertama dalam array. 1048 01:05:20,790 --> 01:05:24,090 Atau lebih amnya, memberikan saya watak engan dalam array. 1049 01:05:24,090 --> 01:05:26,100 Dan menyedari ia adalah penting kini bahawa sebagai ahli-ahli sains komputer, 1050 01:05:26,100 --> 01:05:27,890 kita sebenarnya mengira dari 0. 1051 01:05:27,890 --> 01:05:29,720 >> Anda tidak mempunyai budi bicara sekarang untuk memulakan melakukan ini. 1052 01:05:29,720 --> 01:05:34,160 Sekarang anda perlu berkelakuan selaras dengan jangkaan komputer dan mengira dari 0 1053 01:05:34,160 --> 01:05:38,180 kerana [0] akan menjadi watak pertama dalam rentetan, 1054 01:05:38,180 --> 01:05:42,150 [1] akan menjadi yang kedua, [2] akan menjadi ketiga, dan sebagainya. 1055 01:05:42,150 --> 01:05:49,720 Jadi program ini, jika saya menyusun, ini sekali lagi string1, jadi membuat string1, 1056 01:05:49,720 --> 01:05:54,670 dan kini saya telah menjalankan string1 dalam tetingkap terminal saya. 1057 01:05:54,670 --> 01:05:58,330 Ia menunggu untuk input, jadi saya akan menaip di David, Masukkan, 1058 01:05:58,330 --> 01:06:02,540 dan kini ia mencetak Daud semua pada garisan yang berbeza kerana notis apa yang saya lakukan. 1059 01:06:02,540 --> 01:06:05,820 Saya mencetak satu aksara pada satu masa. 1060 01:06:05,820 --> 01:06:10,100 Kami tidak akan pergi ke terperinci hari ini mengenai perkara ini, tetapi saya dipadam seketika lalu semakan ini di sini. 1061 01:06:10,100 --> 01:06:15,480 Ia ternyata bahawa jika pengguna itu berkelakuan tidak senonoh, pertentangan, atau hanya keliru, 1062 01:06:15,480 --> 01:06:20,210 anda sebenarnya boleh gagal untuk memberi rentetan beberapa panjang. 1063 01:06:20,210 --> 01:06:22,860 Jika anda memukul kunci yang salah pada papan kekunci, anda mungkin memberi rentetan tidak pada semua, 1064 01:06:22,860 --> 01:06:26,950 atau jika anda berniat jahat, anda mungkin cuba untuk paste dalam bernilai gigabit esei 1065 01:06:26,950 --> 01:06:29,290 untuk mengisi rentetan ini, dan jika komputer kehabisan memori, 1066 01:06:29,290 --> 01:06:32,710 ia ternyata bahawa kita akan mendapatkan kembali nilai ini khas dipanggil NULL. 1067 01:06:32,710 --> 01:06:35,580 Jadi untuk sekarang, hanya tahu bahawa terdapat nilai ini khas dipanggil NULL 1068 01:06:35,580 --> 01:06:39,580 yang akan membolehkan kita untuk memeriksa apabila kita berada di luar ingatan, antara perkara-perkara lain. 1069 01:06:39,580 --> 01:06:45,630 Tetapi jika saya membuka sehingga kini string2, notis satu perbezaan di sini. 1070 01:06:45,630 --> 01:06:48,210 Notis satu perbezaan di sini dengan string2. 1071 01:06:48,210 --> 01:06:51,340 Mempunyai Dengan string2, ini bagi gelung adalah sedikit berbeza. 1072 01:06:51,340 --> 01:06:55,010 >> Biar saya memadam NULLs supaya kita boleh bercakap tentang mereka masa yang lain. 1073 01:06:55,010 --> 01:06:57,800 Apa yang berbeza tentang gelung masa ini? 1074 01:06:59,620 --> 01:07:01,670 Saya boleh kembali ke contoh sebelumnya. 1075 01:07:01,670 --> 01:07:08,580 Jadi itulah versi 2, ini adalah versi 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Panggilan strlen adalah di mana? 1078 01:07:16,660 --> 01:07:18,860 Ia adalah di bahagian pertama untuk gelung. 1079 01:07:18,860 --> 01:07:21,830 Mana-mana pemikiran tentang mengapa saya lakukan ini? Yeah. 1080 01:07:21,830 --> 01:07:24,560 [Pelajar] Jadi anda tidak memanggil fungsi setiap kali tunggal. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Jadi kita tidak memanggil fungsi setiap kali tunggal. Tepat sekali. 1082 01:07:26,440 --> 01:07:28,300 Ingat dari untuk gelung yang mereka mudah super 1083 01:07:28,300 --> 01:07:31,770 sebaik sahaja anda jenis faham bahawa ini adalah pengawalan, keadaan, dan kemas kini. 1084 01:07:31,770 --> 01:07:34,750 Masalahnya ialah bahawa keadaan yang berlaku pada setiap lelaran gelung. 1085 01:07:34,750 --> 01:07:40,010 Dan sebagainya dalam contoh ini di sini, apa yang buruk tentang hakikat bahawa ini adalah keadaan saya? 1086 01:07:40,010 --> 01:07:41,830 [Pelajar] Anda memanggil strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Anda memanggil strlen lagi dan lagi dan lagi. 1088 01:07:44,340 --> 01:07:47,410 Tetapi apabila saya telah ditaip di David, panjang tali itu adalah 5, 1089 01:07:47,410 --> 01:07:49,650 dan ia tidak akan berubah pada setiap lelaran gelung 1090 01:07:49,650 --> 01:07:51,670 kerana tali masih D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Jadi ini adalah satu petunjuk pada apa yang akan menjadi satu idea yang semakin penting 1092 01:07:55,320 --> 01:08:00,410 dikenali sebagai keputusan reka bentuk di mana hanya tidak membuat komputer melakukan kerja-kerja yang tidak perlu. 1093 01:08:00,410 --> 01:08:03,920 >> Sama seperti pratonton menyelinap daripada pset2, pset2 dalam edisi standard 1094 01:08:03,920 --> 01:08:07,030 akan mencabar anda untuk benar-benar melaksanakan beberapa bilangan sifer, 1095 01:08:07,030 --> 01:08:10,410 beberapa beberapa algoritma penyulitan, supaya anda kedua-duanya boleh menyulitkan 1096 01:08:10,410 --> 01:08:13,840 dan menyahsulit mesej rahsia sama seperti satu Ralphie sana dinyahkod. 1097 01:08:13,840 --> 01:08:16,810 Dalam edisi penggodam pset2, kami akan pergi sedikit lagi. 1098 01:08:16,810 --> 01:08:19,649 Kami akan tangan anda fail dari sistem komputer sebenar 1099 01:08:19,649 --> 01:08:23,479 yang mengandungi sekumpulan keseluruhan sebenar nama pengguna dan kata laluan disulitkan, 1100 01:08:23,479 --> 01:08:26,939 dan cabaran untuk edisi penggodam akan menjadi retak mereka kata laluan 1101 01:08:26,939 --> 01:08:33,200 dan memikirkan apa kriptografi atau apa rahsia telah digunakan untuk benar-benar menjana kata laluan mereka. 1102 01:08:33,200 --> 01:08:36,109 Dan kita akan melakukan ini dengan menggunakan ciri baru di sini C 1103 01:08:36,109 --> 01:08:40,630 bahawa saya akan memberikan anda hanya demo dikenali sebagai hujah baris arahan. 1104 01:08:40,630 --> 01:08:44,229 Ternyata, sebagai sebahagian daripada anda mungkin telah dilihat dalam seksyen atau di dalam buku teks, 1105 01:08:44,229 --> 01:08:48,260 utama tidak semestinya perlu menjadi tidak sah dalam kurungan. 1106 01:08:48,260 --> 01:08:52,430 Ia ternyata bahawa utama juga boleh ditulis seperti ini, dengan dua hujah, 1107 01:08:52,430 --> 01:08:56,870 argc dan argv, di mana argc bilangan perkataan 1108 01:08:56,870 --> 01:09:00,020 bahawa anda menaip selepas nama program pada baris arahan anda 1109 01:09:00,020 --> 01:09:03,420 dan argv adalah perkataan yang sebenar. 1110 01:09:03,420 --> 01:09:07,540 Dan sebagai kurungan persegi di sana mencadangkan, argv nampaknya array. 1111 01:09:07,540 --> 01:09:12,210 Ia akan menjadi rentetan selepas rentetan selepas rentetan dalam ingatan. 1112 01:09:12,210 --> 01:09:16,010 >> Jadi apa yang kita akan dapat melakukan bermula dengan pset 2 adalah sesuatu seperti ini. 1113 01:09:16,010 --> 01:09:21,350 Jika saya membuat argv1, yang merupakan satu contoh kita akan kembali pada hari Isnin, dan jalankan ia, 1114 01:09:21,350 --> 01:09:23,370 melihat bahawa ia nampaknya tidak berbuat apa-apa lagi. 1115 01:09:23,370 --> 01:09:25,490 Ia hanya mencetak namanya sendiri. 1116 01:09:25,490 --> 01:09:31,479 Tetapi jika saya katakan kelas selamat tinggal, notis bahawa program ini nampaknya lelaran 1117 01:09:31,479 --> 01:09:35,479 atas setiap perkataan yang telah ditaip di prompt. 1118 01:09:35,479 --> 01:09:41,630 Dan dengan cara yang mana kita akan mendapat akses kepada perkataan yang pengguna telah ditaip di prompt 1119 01:09:41,630 --> 01:09:49,160 adalah dengan menukar utama memulakan hujung minggu ini dari int utama (tidak sah) untuk int utama (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 dan dengan itu akan lahir hujah baris arahan. 1121 01:09:52,050 --> 01:09:57,100 Dan apabila anda mendapat benar-benar canggih di ini, anda akan dapat untuk menulis program yang benar-benar trippy 1122 01:09:57,100 --> 01:09:59,610 seperti yang satu ini di sini, yang pergi di atas dan di luar 1123 01:09:59,610 --> 01:10:03,940 beberapa fungsi yang kita lakukan setakat ini tetapi semua agak kuat. 1124 01:10:03,940 --> 01:10:08,950 >> Jadi kita akan meninggalkan ini dengan ini pada skrin, dan kita akan melihat anda pada hari Isnin. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]