SPEAKER 1: Baiklah. Selamat kembali. Ini adalah Minggu Dua CS50, dan kami mempunyai setakat ini telah menggunakan fungsi tetapi sebahagian besarnya mengambil mereka untuk diberikan. Kami telah menggunakan printf yang mempunyai kesan sampingan percetakan perkara pada skrin. Kami telah menggunakan get-int, dapatkan terapung. Tetapi bagaimana jika anda benar-benar mahu untuk mewujudkan fungsi anda sendiri, sebagai sebahagian daripada anda mungkin telah mula lakukan untuk Set Masalah Satu, walaupun tidak perlu ketat? Nah, mari kita pergi ke hadapan dan mengkaji semula bahawa Masalah hanya meminta pengguna untuk nama dan percetakan mereka sesuatu di skrin, tetapi cuba untuk beberapa faktor persamaan yang kita telah dilihat dalam kod kami setakat ini. Jadi oleh yang saya maksudkan yang berikut. Saya akan pergi ke hadapan dan mewujudkan program yang baru, sila hubungi ia hello.c seperti biasa. Saya akan pergi ke hadapan dan memberikan diri saya termasuk io.h standard di atas. Saya akan juga memberikan diri preemptively perpustakaan CS50 supaya Saya tidak dapat menjerit oleh pengkompil. Dan sekarang saya akan pergi ke hadapan dan mengisytiharkan int, utama, tidak sah. Dan kemudian di sini, ini adalah di mana saya mahu untuk memulakan untuk outsource fungsi untuk beberapa fungsi lain yang saya sendiri pagi akan menulis tetapi yang tidak kini wujud. Sebagai contoh, katakan bahawa saya mahu satu fungsi yang membolehkan saya mencetak hello, koma, dan maka beberapa nama pengguna. Bukannya terus berbuat printf hello,% s, ia tidak akan menjadi baik jika terdapat hanya fungsi yang dipanggil tidak printf tetapi nama cetak? Jadi, dalam erti kata lain, saya ingin dapat menulis program yang tidak sedikit sesuatu seperti ini. Pertama, saya akan mengatakan printf anda nama, sekali gus menyebabkan pengguna untuk memberi saya nama beliau, dan kemudian saya akan menggunakan s tali biasa kepada mengisytiharkan rentetan. Berikan saya ubah rentetan jenis, memanggilnya s, dan simpan dalam bahawa menyebabkan memanggil mendapatkan tali. Tetapi sekarang dalam beberapa minggu yang lepas, saya akan mempunyai agak tediously dilakukan hello,% s / n. Dan dalam erti kata lain, kita telah melihat ini contoh sekumpulan kali, dan ia adalah satu contoh remeh kerana terdapat hanya satu baris kod supaya ia benar-benar bukan masalah besar untuk terus menaip lagi. Tetapi menganggap bahawa ini selaras kod sebenarnya telah menjadi beban, dan ia bukan satu baris kod tetapi ia 10 baris kod dua minggu dari sekarang, dan anda hanya mendapat letih menyalin dan menampal atau penaipan semula kod yang sama. Bukankah lebih baik daripada melakukan printf hello,% s dan sebagainya, bukankah lebih baik jika terdapat hanya fungsi yang dipanggil nama cetak yang mengambil hujah - dalam erti kata lain, ia mengambil input - dan kemudian koma bertitik. Jadi fungsi itu, tidak akan ia akan bagus jika itu wujud? Kemudian saya tidak akan perlu bimbang tentang apa printf, apa% s dan semua ini kerumitan yang tidak semua yang menarik. Mereka adalah berguna. Jadi nama cetak, malangnya, tidak dicipta kira-kira 40 tahun campur lalu. Tiada siapa yang terfikir untuk menulisnya. Tetapi itulah keindahan yang mempunyai bahasa pengaturcaraan, seperti di Awal anda boleh menentukan blok adat, jadi dalam C dan bahasa yang paling mana-mana, boleh anda menentukan fungsi anda sendiri, boleh anda menentukan fungsi anda sendiri. Jadi, walaupun kita mendapat utama oleh secara automatik untuk bebas, kita boleh mengisytiharkan fungsi kita sendiri. Jadi, saya akan membuat beberapa bilik di sini top up, dan saya akan mengisytiharkan saya fungsi sendiri yang akan kelihatan sedikit pelik pada mulanya tetapi kami akan datang kembali ke ini tidak lama lagi. Saya akan mengatakan tidak sah, dengan itu menunjukkan fungsi ini tidak sesuatu, mempunyai kesan sampingan, tetapi ia tidak kembali sesuatu kepada saya dalam cara yang sama yang mendapat int atau mendapatkan tali sendiri tidak. Dan saya akan memberikan fungsi ini nama nama cetak, dan saya akan menentukan bahawa lelaki ini akan mengambil rentetan, dan saya akan memanggil bahawa Nama tali. Saya boleh memanggilnya apa-apa yang saya mahu, tetapi saya mahu kod saya untuk menjadi diri mendokumenkan. Dalam erti kata lain, jika salah satu daripada anda adalah untuk membuka fail ini dan membacanya, anda boleh jenis kesimpulan dari nama yang input apakah peranan yang ia sepatutnya untuk bermain. Dan kini di bawah itu, saya akan membuka kerinting bersedia dan kerinting bersedia tertutup, dan sebagainya notis saya diikuti yang sama corak pada garis empat melalui tujuh sebagai Saya telah mengikuti selama seminggu yang baik serta sekarang, katakan antara sembilan dan garis 14 yang mengarang utama. Dalam erti kata lain, mencetak nama adalah fungsi yang lain. Sekarang, pengkompil tidak akan tahu untuk memanggil perkara ini secara automatik kerana saya benar-benar hanya dicipta, tetapi ia akan tahu masih memanggil utama secara automatik, dan kemudian tentu dalam line 13, saya memanggil fungsi saya sendiri. Dan kerana saya telah mengumumkan bahawa fungsi di atas garis empat sebelum utama, ini akan mengajar pengkompil apa yang quote, unquote, "nama print" bermakna dan apa yang perlu dilakukan. Jadi saya jenis memberikan adat baru menghalang dalam konteks, berkata, scratch. Jadi di sini, saya boleh meletakkan bahawa sangat biasa atau corak berulang kod saya terus menulis di dalam kelas, printf % S hello,% s / n ", - apa yang saya mahu meletakkan di sini? S? Jadi saya mahu meletakkan nama dalam konteks ini. Jadi notis sedikit dikotomi di sini. Kerana saya mengisytiharkan fungsi saya sendiri dan saya agak sewenang-wenangnya dipanggil ia mencetak nama, dan kerana saya telah yang dinyatakan dalam kurungan ini fungsi mengambil satu hujah, jenis yang merupakan tali - jadi ia adalah satu perkataan atau frasa atau sesuatu seperti itu - dan Saya memanggil nama hujah, bahawa bermakna satu-satunya yang berubah-ubah dalam skop, jadi untuk bercakap, adalah nama. S hanya wujud antara apa yang dua pendakap kerinting, sudah tentu? Baik benar-benar, seperti baris 10 melalui 14, jadi sama seperti pada hari Isnin tidak boleh menggunakan S, tetapi apa yang boleh saya lakukan adalah lulus S ke dalam nama cetak. Mencetak nama hanya kebetulan untuk memberikan alias, sinonim, nama samaran, memanggil nama, dan kini menggunakannya dalam bidang ini. Jadi sekarang biarlah saya simpan ini, zum keluar. Biar saya pergi ke hadapan dan membuat khabar. Kelihatan baik. Tidak meludah apa-apa kesilapan. . / Hello Enter. Apakah nama saya? Daud. Dan hello Daud. Jadi tidak semua yang menarik, tetapi hanya berfikir sekarang. Anda kini mempunyai bahan yang sama seperti yang kita lakukan di Scratch untuk membuat fungsi kita sendiri. Tetapi ada sedikit gotcha a. Katakan bahawa saya tidak benar-benar berfikir ini melalui dan saya benar-benar tanpa benar-benar berfikir tentang ia menulis yang berfungsi di sini. Berasa sempurna yang munasabah. Dalam Scratch ada tanggapan lokasi dalam skrip anda. Anda boleh meletakkan satu di sini, salah satu di sini, satu di sini, dan ia mungkin mula untuk melihat berantakan sedikit jika anda tidak meletakkan ia keluar kemas, tetapi ia tidak kira di mana fizikal skrip berada di skrin. Malangnya di C - dan ini adalah seperti bahasa seperti Jawa dan Python dan lain-lain yang anda mungkin biasa dengan - malangnya dalam C, perintah tidak masalah kerana menonton apa yang akan berlaku sekarang. Fungsi lalai yang akan untuk melaksanakan, sudah tentu, utama. Utama akan memanggil nama cetak atas line lapan, tetapi malangnya, pengkompil tidak akan tahu bahawa nama cetak wujud sehingga ia sampai ke garis 11, yang malangnya ialah akan menjadi terlalu lewat. Jadi mari kita buat membuat hello. Dan kini damn, kesilapan dua dijana. Jadi sekarang biarlah saya tatal ke atas dengan sangat pertama, seperti yang kita sentiasa perlu dilakukan, dan melihat bahawa ia menjerit pada saya, "Perisytiharan tersirat fungsi mencetak nama. " Oleh itu, kita telah melihat mesej ini sebelum ini, pengakuan tersirat fungsi. Apabila kita melihat bahawa jenis kesilapan? Apabila saya tidak termasuk perpustakaan. Jika saya terlupa cs50.h dan saya akan mendapat menjerit untuk mendapatkan tali atau mendapatkan int. Tetapi dalam kes ini, ini cetak fungsi nama tidak ada di dalam perpustakaan, bukan? Ia adalah benar-benar dalam fail ini, jadi apa yang benar-benar masalah ini? Baik malangnya dalam bahasa C, ia akan membawa anda begitu amat benar-benar bahawa jika anda mahu fungsi yang dipanggil nama cetak untuk wujud, anda perlu melaksanakan yang berfungsi di bahagian paling atas anda kod supaya ia boleh diakses untuk mengurangkan fungsi, tetapi terus-terang, yang menjadi ceroboh dengan cepat. Secara peribadi, saya suka meletakkan utama pertama kerana maka ia sangat jelas apa ini program tidak pada pandangan pertama. Dan ditambah, anda boleh masuk ke dalam sudut pelik kes-kes di mana jika x mahu untuk memanggil y tetapi y mungkin panggilan x, anda hanya fizikal sebenarnya tidak boleh meletakkan satu di atas yang lain. Tetapi ternyata dalam C, kita boleh menyelesaikan masalah ini sangat mudah. Saya akan meletakkan sedikit ruang di sini, dan saya hanya akan preemptively, walaupun agak redundantly, pergi untuk mengajar pengkompil bahawa wujud fungsi dipanggil nama cetak, ia mengambil tali, dan saya akan memanggil ia menamakan koma bertitik. Jadi ini kini dalam talian empat, yang kita tidak pernah melihat sebelum ini, adalah perisytiharan daripada nama cetak fungsi, tetapi ia hanya janji bahawa fungsi ini akan akhirnya ditakrifkan, akhirnya dilaksanakan. Ini sekarang saya boleh meninggalkan sahaja kerana sekarang ini adalah definisi itu, pelaksanaan, jenis batu yang terakhir pelaksanaan ini fungsi tertentu. Jadi terus terang ia bodoh, ia adalah menjengkelkan, tetapi ini adalah cara C, dan ia kerana ia akan membawa anda beribu-sangat dan seperti komputer terus terang harus, sahaja apa yang anda beritahu kepada lakukan, dan supaya pesanan adalah penting. Supaya menyimpan bahawa dalam fikiran dan sekali lagi, mula notis berulang corak. Kemungkinan anda akan, jika anda tidak mempunyai sudah, mula menghadapi mesej seperti ini yang pada pandangan pertama kelihatan sepenuhnya samar, tetapi jika anda mula untuk mencari kata-kata utama seperti "Perisytiharan tersirat," beritahu seorang fungsi dalam kes ini - dan terus-terang, anda kadang-kadang walaupun mendapat sedikit hijau simbol lobak merah yang memberitahu anda di mana isu ini mungkin adalah - anda boleh mula bekerja dengan cara anda melalui lagi mesej ralat ghaib. Sebarang pertanyaan mengenai penulisan anda fungsi sendiri dengan cara ini? Mari kita melakukan sesuatu itu adalah satu sedikit lebih menarik. Daripada hanya melakukan sesuatu yang mempunyai kesan sampingan percetakan, izinkan saya pergi hadapan dan menyimpan fail baru, dan kita akan memanggil positive.c ini, walaupun ia akan menjadi sedikit berbeza berbanding masa lalu. Dan kali ini, saya ingin untuk melaksanakan semula contoh positive.C masa lepas, yang yang memaksa pengguna untuk memberi saya integer positif. Tetapi saya terpaksa menggunakan mendapatkan int kali terakhir. Bukankah telah baik jika terdapat fungsi yang dipanggil mendapatkan int positif bahawa saya hanya boleh outsource ini sekeping fungsi ke? Jadi perbezaan di sini ialah kita akan melaksanakan mendapatkan int positif, tetapi tidak seperti Nama cetak yang mempunyai kesan sampingan - ia tidak kembali sesuatu kepada saya seperti nombor atau rentetan - mendapatkan int positif, sudah tentu, akan kembali, mudah-mudahan, int yang positif. Jadi mari kita buat ini. Termasuk cs50.h, Termasuk standard io.h. Int sah utama. Dan kini di sini, saya akan pergi ke hadapan dan katakan int, memanggilnya n, sama mendapatkan int positif. Dan seperti mendapatkan int sudah wujud kerana kakitangan menulis, saya akan menganggap buat masa ini yang mendapat int positif wujud, dan kini saya akan untuk pergi ke hadapan dan berkata printf, terima kasih untuk% i / n ", n. Jadi sekarang jika saya menyusun program ini, apa yang yang akan berlaku di terminal saya tingkap di bahagian bawah skrin? Saya akan mungkin mendapatkan kesilapan yang sama seperti sebelum ini. Jadi mari kita cuba ini. Buat positif. Dan sekali lagi, pengakuan tersirat fungsi, mendapatkan int positif. Jadi kita boleh menyelesaikan masalah ini dalam beberapa cara. Saya akan memastikan ia mudah dan hanya meletakkan akuan saya di sini dan mendapatkan int positif. Saya perlu tandatangan kononnya. Tandatangan hanya merujuk kepada estetika baris pertama program. Jadi apa yang perlu mendapatkan positif int pulangan? Jadi int. Maksud saya ideal, ia akan kembali sesuatu seperti int positif, tetapi yang tidak wujud. Kami tidak melihat bahawa di antara data kami jenis, jadi kita perlu untuk berurusan dengan Hakikat bahawa kita mempunyai sangat sedikit jenis data untuk bekerja dengannya. Tetapi kita boleh kembali int an dan hanya percaya bahawa ia akan menjadi positif. Ia akan dipanggil mendapatkan int positif. Dan kini bagaimana pula hujah? Adakah ia mengambil apa-apa input? Adakah ia memerlukan input? Jadi ia tidak perlu tahu dalam apa-apa terlebih dahulu. Dapatkan tali tidak, mendapatkan int tidak. Printf tidak - ia perlu mempunyai beberapa input berlalu ke dalamnya - dan nama cetak diperlukan input tertentu, tetapi mendapat int positif tidak. Jadi saya akan jelas memberitahu sah pengkompil. Sah ialah ketiadaan apa-apa lagi. Jadi tidak sah bermakna apa-apa yang sedang berlaku di dalam orang kurungan, koma bertitik. Dan kini di bawah fail saya - dan jenis lagi, saya hanya menjadi satu dubur di sini meletakkan utama di bahagian atas, yang adalah amalan yang baik kerana cara ini, bila-bila masa anda atau orang lain membuka fail anda, fungsi adalah di sana. Anda boleh menyelam dari satu persegi. Jadi sekarang saya akan salinan ini, mendapatkan sah int positif, tetapi saya tidak akan melanda koma sekarang. Saya akan membuka pendakap kerinting, dan sekarang saya perlu meminjam idea dari hari Isnin. Jadi seperti yang anda masih ingat, kita melakukan sesuatu suka melakukan perkara berikut semasa sesuatu yang tidak benar. Dan apa yang saya lakukan? Saya sesuatu seperti memberi saya integer positif, sedikit yang segera. Saya boleh menggunakan apa-apa perkataan yang saya mahu. Dan kemudian saya digunakan apa? Int n sama mendapatkan int, ada hujah untuk itu. Dan notis perbezaan. Apabila anda memanggil fungsi, apabila anda menggunakan fungsi, anda tidak dimasukkan ke dalam tidak sah. Anda hanya berbuat demikian apabila mengisytiharkan fungsi, mengajar pengkompil apa ia harus harapkan. Jadi anda tidak perlu meletakkan membatalkan sana sendiri. Dan kini apa yang keadaan saya? Well, n tidak sama dengan yang positif, tetapi itu hanya pseudo-kod. Jadi bagaimana saya meluahkan ini lebih bersih? Jadi kurang daripada atau sama dengan sifar. Jadi sekali lagi, notis yang anda boleh lakukan kurang daripada atau sama dengan. Walaupun ia adalah dua berasingan simbol, anda boleh melakukannya papan kekunci anda seperti itu. Tetapi masih ada bug yang Saya diskrukan masa lalu juga. Saya perlu mengaku - betul-betul. Saya perlu mengaku n luar gelung. Jadi saya perlu meletakkan n di sini, dan saya tidak ingin-mengisytiharkan semula di sini supaya saya dapat berubah-ubah baru. Saya hanya mahu memberi nilai di sini. Dan sekarang saya tidak cukup dilakukan di sini. Biar saya mendapatkan lebih awal daripada diri saya sendiri dan berpura-pura saya dilakukan. Buat positif, dan kini ada kesilapan baru. Kawalan sampai akhir fungsi tidak sah. Jadi mesej ralat baru, tetapi jika anda jenis daripada mengusik selain setiap satu daripada kata-kata, ia mungkin membayangkan apa yang salah. Mengawal. Kawalan hanya bermaksud kepada perintah operasi dalam program. Komputer dalam kawalan dan sesuatu yang tidak kena. Jadi ia sampai ke penghujung fungsi tidak sah. Apa fungsi ia nampaknya merujuk kepada? Apa fungsi adalah tidak sah? Jadi mendapatkan int positif, dan sedikit mengelirukan dalam telaga itu, ia adalah jenis tidak sah. Ia mempunyai spesifikasi yang sah untuk hujah, tetapi output akan menjadi n jenis. Jadi perkataan di sebelah kiri adalah dipanggil jenis pulangan. Perkataan di dalam di sini adalah sifar atau lebih hujah-hujah bahawa fungsi yang diperlukan. Jadi, apa yang perlu saya lakukan? Pada ketika ini di dalam kod saya, line 21 di mana segera berkelip sekarang, saya mempunyai int positif dalam pembolehubah yang dipanggil n. Bagaimana saya memberikan kembali kepada utama? Betul-betul. Kembali n koma bertitik. Jadi hanya sebagai Colton kembali sekeping kertas dengan jawapan kepada saya dengan menjatuhkan sekeping kertas di hitam sedikit kotak di atas meja, untuk berbuat demikian dalam kod, anda benar-benar hanya menulis, kembali n, dan ia seolah-olah telah Colton saya menyerahkan sesuatu kembali fizikal. Dalam kes ini, apa yang berlaku adalah mendapatkan int positif akan menyerahkan kembali apa yang mungkin positif integer untuk siapa? Di manakah nilai yang berakhir? Yang berakhir dalam pembolehubah ini, n, dan maka kita teruskan dengan garis sembilan. Jadi, dalam erti kata lain, perintah operasi, program ini bermula melaksanakan, dan pengkompil menyedari, oh, anda mahu perpustakaan? Biar saya pergi merebut apa sahaja yang di dalam itu. Oh, anda mahu perpustakaan IO standard? Biar saya pergi merebut apa sahaja yang di dalam itu. Apakah pengkompil berkata kepada dirinya apabila ia mencecah garis empat? Oh, anda berjanji untuk melaksanakan fungsi dipanggil mendapatkan positif, tetapi kita akan kembali kepada yang kemudian, sesuatu bersama-sama orang-orang baris. Tidak sah utama Int hanya bermakna di sini keberanian program saya. Line tujuh hanya pendakap kerinting. Line lapan mengatakan di sebelah kiri, memberi saya 32 bit untuk integer, memanggilnya n. Pada sebelah kanan, ia adalah berkata mendapatkan int positif. Sekarang berhenti mari kita bahawa cerita kerana sekarang Saya tidak terus bergerak kursor saya ke bawah. Kursor saya sekarang pergi ke sini kerana kini mendapat int positif melaksanakan. Int n diisytiharkan. Melakukan yang berikut. Printf memberi saya integer positif. Dapatkan int an dari pengguna, menyimpannya dalam n, dan mungkin melakukan ini lagi dan lagi. Gelung Ini bermakna kod ini mungkin melaksanakan atas dan ke bawah seperti ini lagi dan sekali lagi, tetapi apabila pengguna akhirnya bekerjasama dan memberi saya yang positif int, saya mencecah line 21, di mana titik nombor diserahkan kembali, dan yang mana satu saya perlu menyerlahkan sekarang? Nine. Kawalan, jadi untuk bercakap, kembali untuk beratur sembilan. Itulah garis yang kini bertanggungjawab. Itulah apa yang telah berlaku di kali ini di bawah hood, tetapi apabila kita telah menggunakan fungsi seperti printf atau bahkan mendapatkan tali bahawa orang lain menulis untuk anda, kawalan sedang menyerahkan line kod pergi ke orang lain oleh baris demi baris. Ia hanya kita tidak dapat melihat dan kami boleh tidak benar-benar menggambarkan ia dalam program kerana ia adalah dalam beberapa lain fail pada cakera keras Tanpa diketahui kepada kami. Jadi mari kita sebenarnya menyusun dan menjalankan ini sekarang. Buat positif. Menyusun, itulah kemajuan. . / Positif. Berikan saya integer positif. Mari kita menjadi sukar. Negatif 1. Zero. Mari kita memberikan 50. Terima kasih untuk 50, dan sebagainya kawalan kini telah kembali. Mana-mana soalan, maka, pada itu? Ya? [Didengar]. Katakanlah lagi. Oh, soalan yang baik. Jadi, anda mungkin notis selari di sini bahawa Saya jenis memotong sudut pada. Selaras 12, saya berkata, mendapatkan int positif kembali int, tetapi oleh yang sama logik, ia kini berdiri untuk sebab itu dalam garisan enam, saya mengatakan bahawa pulangan utama an int, tetapi apa yang kita tidak mempunyai ada dalam mana-mana program kita? Kami tidak pernah mempunyai sebutan ini kembali kata kunci. Jadi ia ternyata bahawa dalam C, sekurang-kurangnya versi bahawa kita menggunakan dibuat pada tahun 1999, secara teknikal, ini adalah berlaku untuk anda secara automatik. Bila-bila masa anda melaksanakan program dan anda melaksanakan fungsi dipanggil utama, yang berfungsi akan kembali sifar oleh lalai jika anda tidak mengatakan sebaliknya, dan sifar hanya konvensyen. Dunia kembali sifar itu menunjukkan bahawa semua adalah baik, berkesan meninggalkan kita dengan empat bilion perkara-perkara yang mungkin boleh pergi salah supaya jika kita kembali satu, yang mungkin menandakan kod yang bermakna ini perkara yang salah. Kita boleh kembali dua, yang bermaksud perkara ini lain pergi salah. Kita boleh kembali empat bilion, yang bermakna perkara ini lain pergi salah. Dan jika kini anda berfikir tentang anda sendiri PC atau Mac, anda mungkin ingat bahawa kadang-kadang anda mendapat mesej ralat samar daripada perisian yang anda menggunakan, dan kadang-kadang ia mempunyai manusia Penerangan mesra, tetapi ada sering kod atau nombor pada skrin? Jika ini tidak datang ke fikiran, hanya memerhatikan keluar untuk itu. Itulah biasanya apa yang kod merujuk kepada. Mereka dimasukkan ke dalam Microsoft Word dan program-program lain supaya jika anda memfailkan laporan pepijat dengan syarikat itu, anda boleh memberitahu mereka, oh, saya mendapat ralat bilangan 45. Dan beberapa kembali programmer di syarikat boleh melihat bahawa di dalam nya kod dan berkata, oh, itu kerana saya membuat bug ini dan itulah sebabnya pengguna mendapat mesej ini. Tetapi terus terang, ia hanya sedikit mengganggu dan sedikit membosankan untuk menyimpulkan bahawa, sekurang-kurangnya kami beberapa program pertama, jadi kami telah telah meninggalkan ia. Tetapi semua masa ini setiap seorang daripada anda fungsi utama telah diam-diam telah ini line ditambah secara automatik untuk anda oleh pengkompil, hanya dengan konvensyen menjimatkan masa. [Didengar]. Anda tidak perlu untuk memasukkannya ke dalam utama. Itu denda. Anda perlu termasuk jika anda telah melaksanakan fungsi seperti ini. Jika tidak rata fungsi keluar tidak akan bekerja. Tetapi dalam utama, ia tidak perlu. Dalam satu atau dua minggu, kami akan mula mendapat menjadi kebiasaan bahawa apabila kita ingin memulakan menandakan kesilapan. Really good soalan. Rehat begitu cepat lisan untuk menyebut bahawa Jumaat ini, kita tidak akan makan tengah hari per se, tetapi kita akan makan malam bersama beberapa pelajar dan kakitangan. Jika anda ingin untuk menyertai kami, berasa bebas untuk pergi ke cs50.net/rsvp. 06:00 Jumaat ini. Ruang adalah, seperti biasa, terhad, tetapi kita akan terus melakukan ini di hampir setiap minggu jika ruang kehabisan minggu ini. Jadi cliffhanger yang kita berhenti di Isnin adalah bahawa rentetan boleh sebenarnya diindeks ke dalam, yang hanya bermakna anda boleh mendapatkan pada watak yang pertama, watak kedua, watak ketiga dan sebagainya, kerana anda boleh berkesan berfikir tali, seperti hello, sebagai dalam kes ini lima surat di dalam kotak. Dan anda boleh mendapatkan di setiap orang kotak dengan apa yang kita sintaks memperkenalkan pada hari Isnin? Mereka kurungan pada keyboard anda. Itu hanya bermakna pergi ke lokasi sifar. Kita mula mengira pada sifar, jadi kurungan sifar menandakan h, kurungan satu menandakan e, dan sebagainya. Dan supaya semua masa apabila kita telah menggunakan tali dan menaip "hello" dan "dunia" dan perkara-perkara lain di skrin, ia telah disimpan dalam kotak seperti ini. Dan mengambil tekaan. Apakah setiap kotak mewakili fizikal di dalam komputer anda? [Didengar]. Maaf? Watak-watak. Jadi watak, dalam kes ini rentetan, dan watak yang hanya lapan bit atau satu bait. Jadi, anda mungkin sekurang-kurangnya samar-samar biasa dengan hakikat bahawa anda komputer mempunyai ingatan. Ia mempunyai dua jenis memori sekurang-kurangnya. Satu adalah cakera keras di mana anda menyimpan barangan selama-lamanya, dan itulah biasanya besar supaya anda boleh mempunyai filem dan muzik dan sebagainya. Kemudian anda mempunyai satu lagi jenis memori dikenali sebagai RAM, R-A-M, Random Access Ingatan, dan ini adalah jenis memori yang digunakan apabila komputer anda berjalan tetapi jika anda kehilangan kuasa atau anda bateri mati, apa-apa yang disimpan dalam RAM akan hilang jika anda kehilangan kuasa sama sekali kerana ia bukan berterusan. Anda biasanya mempunyai, hari ini, satu persembahan itu, dua persembahan, mungkin lebih. Dan terbalik RAM adalah bahawa ia adalah lebih banyak, lebih cepat daripada cakera keras atau keadaan pepejal memandu hari ini, tetapi ia biasanya lebih mahal jadi anda mempunyai kurang daripada itu. Jadi perbualan hari ini benar-benar merujuk untuk RAM, yang jenis memori yang wujud hanya semasa ada kuasa yang dimasukkan ke dalam komputer anda. Oleh itu, apabila anda menaip dalam H-E-L-L-O, Enter pada keyboard, H akan dalam satu bait RAM, E yang sedang berlaku di satu lagi bait RAM, seperti seluruh perkataan. Jadi ingat apa yang kita dapat untuk melakukan masa lalu adalah ini. Biar saya pergi ke hadapan dan membuka fail bahawa kita dipanggil string.c, dan ingat bahawa ia kelihatan sedikit sesuatu seperti ini. Biar saya sebenarnya melancarkan kembali dan menukar kepada apa yang ia kelihatan seperti, panjang rentetan s. Jadi melihat program itu di sini. Kami termasuk perpustakaan CS50 supaya yang boleh kita gunakan mendapatkan tali. Kami termasuk io.h standard supaya kita boleh menggunakan printf. Mengapa kita termasuk string.h? Ini adalah sesuatu yang baru pada hari Isnin. Jadi kita mahu panjang tali. Str Leng. Orang memutuskan tahun yang lalu, mari kita hanya menjadi ringkas. Daripada memanggil ia "panjang tali," mari kita memanggilnya "str Leng" dan membiarkan tokoh dunia yang keluar, dan maka itulah apa yang kita dapat akses kepada dengan string.h. Ini adalah biasa. Ini adalah biasa. Ini adalah biasa. Ini adalah sedikit baru. Selaras 22 - dan kita akan kembali ini, tetapi untuk sekarang tahu - dan anda hanya akan tahu ini daripada mempunyai membaca dokumentasi atau jika anda tahu C sudah - mendapatkan tali kadang-kadang boleh skru sehingga. Jika pengguna adalah benar-benar pertentangan atau memberikan kerjasama dan dia hanya tidak menaip apa-apa pada papan kekunci atau jenis begitu banyak pada keyboard yang ia menguasai memori komputer, dalam teori, dapatkan tali dapat kembali sesuatu yang lain daripada rentetan aksara. Ia boleh mengembalikan nilai khas yang dipanggil NULL dalam semua topi, N-U-L-L, dan ini adalah hanya nilai sentinel kononnya. Ia adalah satu nilai khas yang melambangkan sesuatu yang buruk berlaku dalam kes ini. Ia adalah ketiadaan rentetan. Jadi menyeimbangkan saya memeriksa hanya supaya, cerita panjang pendek, str Leng dan fungsi-fungsi lain yang datang dengan C, jika mereka mengharapkan tali tetapi anda lulus mereka ketiadaan tali, jika anda meninggal mereka NULL, komputer atau program hanya akan kemalangan terang-terangan. Ia akan hang. Ia akan membuang beberapa mesej ralat. Perkara-perkara buruk yang akan berlaku. Jadi, walaupun ini masih tidak yang jelas - ini akan lebih masuk akal dalam seminggu atau dua - selaras 22, ini hanya contoh kesilapan diri pemeriksaan pertahanan hanya dalam kes satu-satu masa daripada sesuatu juta masalah, sekurang- program-kurangnya saya tidak akan kemalangan. Jadi, jika s tidak sama dengan sesuatu yang buruk, Saya mempunyai ini untuk gelung, dan ini adalah di mana kita mempunyai yang lain sekeping baru sintaksis. Saya mempunyai untuk gelung iterating dari sifar sehingga panjang s. Dan kemudian di sini, saya adalah seorang percetakan daripada s golongan i, tetapi kenapa saya menggunakan% c semua tiba-tiba dan bukannya% s walaupun walaupun s adalah rentetan? Ia adalah watak, bukan? S adalah rentetan, tetapi s sesuatu kurungan, s kurungan i di mana saya adalah sifar atau satu atau dua, itu individu watak dalam tali, dan sebagainya untuk itu, printf perlu dimaklumkan bahawa ia merupakan satu watak yang diharapkan. Dan kemudian ingat, adakah ini program sebenarnya lakukan? Dicetak di tiang. Ya, betul-betul. Ia hanya dicetak perkataan yang saya menaip ruang, satu watak dalam satu barisan. Jadi mari kita lihat ini lagi. Oleh itu, tali. Disusun OK. . / Tali. Izinkan saya menaip H-E-L-L-O, Masukkan, dan sesungguhnya aku mendapatkannya, satu per baris. Jadi biarlah saya melakukan satu pengoptimuman sini. Jika anda berfikir tentang hal itu, terutamanya jika anda telah diprogramkan sebelum ini, ada boleh dikatakan satu ketidakcekapan dalam talian 24. Dalam erti kata lain, ia tidak semestinya reka bentuk yang terbaik. Mudah, sekurang-kurangnya sekali anda ingat apa yang str Leng, tetapi ia melakukan sesuatu yang bodoh yang berpotensi. Apa yang mungkin? [Didengar]. Tepat sekali. Ia memeriksa panjang s setiap kali walaupun H-E-L-L-O sentiasa akan menjadi lima watak. Setiap kali melalui gelung ini, lima tidak berubah-ubah. Saya mungkin menokok i, tetapi apa ialah panjang s pada setiap lelaran gelung ini? Ia adalah lima, ia lima, ia lima, dan namun saya tetap meminta ini mempersoalkan sekali lagi dan lagi dan lagi. Sekarang terus-terang, komputer adalah begitu bodoh cepat, tiada siapa akan notis Perbezaan dalam kes ini, tetapi ini jenis keputusan reka bentuk miskin boleh mula menambah sehingga jika pengkompil sendiri tidak cuba untuk menetapkan ini untuk anda yang ia biasanya tidak akan, pada kurangnya dalam perkakas. Jadi, saya akan melakukan ini. Saya akan menambah koma selepas ubah pertama saya, i. Saya akan memberikan saya satu lagi berubah-ubah, ia memanggil n, hanya dengan konvensyen untuk nombor, dan kemudian saya akan memberikan n nilai rentetan panjang s. Dan kemudian saya akan menukar keadaan saya menjadi apa? Saya akan mengubah keadaan saya untuk sementara i adalah kurang daripada n. Jadi sekarang, berapa kali saya memeriksa panjang s? Sebaik sahaja, tetapi ia OK untuk memeriksa i terhadap n sekali lagi dan sekali lagi kerana sekarang mereka nilai-nilai yang tidak benar-benar berubah. Sekarang untuk sekarang, hanya tahu bahawa bila-bila masa anda memanggil fungsi, terdapat sedikit atas, tidak cukup untuk menggalakkan anda benar-benar dari yang pernah menggunakan fungsi, tetapi pasti apabila ada baris kod suka itu - dan garis akan mendapat lebih menarik tidak lama - di mana ada peluang untuk berfikir, jika saya taip kod ini, berapa banyak kali ia akan melaksanakan? Anda akan mula melihat dari masa ke masa prestasi program anda boleh memang berubah. Malah, salah satu daripada masalah itu kami telah menetapkan dilakukan pada tahun-tahun lalu melibatkan melaksanakan, seperti yang anda boleh ingat dari minggu sifar, satu pemeriksa ejaan, tetapi mengeja pemeriksa yang direka untuk menyokong kamus 150,000 ditambah kata-kata yang kita berikan anda semua. Anda perlu menulis kod yang banyak kata-kata ke dalam RAM, jadi ke kotak seperti yang kita lihat pada skrin seketika yang lalu, dan kemudian secepat yang anda boleh, anda perlu berupaya untuk menjawab soalan bentuk, adalah perkataan ini silap eja? Adakah perkataan ini silap eja? Adakah perkataan ini silap eja? Dan dalam sesuatu seperti itu apa yang kita telah dilakukan pada tahun-tahun lalu yang menjadikannya, walaupun pada opt-in secara pilihan, satu persaingan pelbagai, di mana pelajar yang menggunakan RAM yang kurang dan kurang masa, kitaran CPU kurang, akhirnya menggelegak sehingga bahagian atas sedikit pemimpin lembaga atau kedudukan yang kita memakai laman utama kursus ini seperti yang kita telah dilakukan pada tahun-tahun yang lalu. Jadi sekali lagi, benar-benar pilihan, tetapi ini bercakap kepada peluang reka bentuk yang lebih awal sekali kita mulakan bangunan di atas beberapa blok binaan asas. Jadi biarlah saya kembali kepada gambarajah ini untuk hanya seketika dan mendedahkan sedikit sesuatu yang lebih. Ini sememangnya adalah rentetan, dan kita telah mengambil kesempatan daripada beberapa perpustakaan, io.h standard yang telah - Printf. Printf, antara lain. cs50.h, yang telah mendapatkan int dan mendapatkan tali dan sebagainya, string.h, yang mempunyai str Leng. Tetapi ternyata ada satu lagi. Terus terang, terdapat banyak dan banyak tajuk fail yang mengisytiharkan fungsi untuk perpustakaan, tetapi ini adalah ctype.h sebenarnya akan menjadi agak berfaedah kerana saya akan untuk pergi ke hadapan dan melaksanakan salah satu program lain di sini. Biar saya pergi ke hadapan dan membuka sesuatu Saya menulis terlebih dahulu dikenali sebagai capitalize.c, dan mari kita lihat bagaimana kerja-kerja ini. Perhatikan bahawa saya menggunakan, dalam versi ini itu, tiga fail biasa. Perhatikan bahawa dalam line 18, saya mendapat baris teks. Notis dalam line 21, saya mendakwa bahawa kod berikut akan kesempatan s, apa sahaja yang pengguna ditaip dalam, dan bagaimana saya melakukannya? Nah, saya mengambil - pengajaran daripada masa lalu - Saya mengisytiharkan i dan n dan iterating lebih watak-watak dalam rentetan. Dan kemudian apa yang blok ini kod dalam talian 24 hingga 27 lakukan dari segi orang biasa itu? Huruf kecil surat belakang. Tepat sekali. Jika s kurungan i - jadi jika i-ke- watak s, yang tertentu char dalam tali, adalah lebih besar daripada atau sama dengan huruf kecil dan - ingat bahawa Ampersand double menandakan dan - dan ciri-ciri yang sama, s kurungan i, adalah kurang daripada atau sama dengan huruf kecil z, yang bermakna ia adalah satu b atau a atau c atau dot, dot, dot, atau z, yang bermaksud ia adalah kecil. Apa yang saya mahu lakukan dalam kes itu? Well, saya boleh melakukan ini agak cryptically, tetapi mari kita mengusik ini selain. Saya akan memanggil printf, mencetak% c kerana saya mahu untuk mencetak semula ini watak pada skrin. Saya kemudian akan mengambil s kurungan i, i-ke-watak dalam s, dan mengapa yang saya lakukan ini helah sedikit di sini, huruf kecil A modal tolak? Apakah yang akan memberi saya, secara umumnya bercakap? [Didengar]. Tepat sekali. Saya tidak ingat - ia adalah 65 untuk modal A. Saya tidak benar-benar ingat apa yang huruf kecil adalah, tetapi tidak kira. Komputer yang tahu. Jadi dengan berkata, huruf kecil tolak modal A, ia adalah pelik untuk menjadi menolak satu char daripada yang lain, tetapi apakah aksara di bawah hood? Mereka hanya nombor. Jadi apa sahaja yang nombor-nombor, membiarkan komputer ingat bukannya saya manusia. Jadi huruf kecil modal tolak adalah akan memberikan saya perbezaan. Ia berlaku kepada 32, dan yang akan kes huruf kecil b dan modal B dan sebagainya. Ia kekal konsisten, bersyukur. Jadi saya pada dasarnya berkata, mengambil huruf kecil huruf, tolak luar yang perbezaan standard, dan bahawa berkesan perubahan s kurungan dari i huruf kecil untuk, sudah tentu, huruf besar, tanpa saya benar-benar perlu berfikir mengenai atau ingat, apakah mereka nombor kita bercakap tentang apabila lapan sukarelawan datang di atas pentas? Sekarang Sementara itu, pada yang lain, jika ia tidak huruf kecil seperti yang ditentukan dengan garis 24, hanya mencetak. Saya hanya ingin menyentuh watak-watak yang telah sebenarnya asalnya huruf kecil. Jadi mari kita lihat ini. Buat kesempatan. Disusun, OK. . / Mengambil kesempatan. Dan biarlah saya menaip H-E-L-L-O dalam huruf kecil Enter. Dan melihat bahawa ia ditukar ke dalam huruf besar. Biar saya melakukan ini lagi dengan perkataan yang berbeza. Bagaimana D-A-V-I-D dengan D pertama dipermodalkan sebagai nama yang biasanya adalah? Enter. Notis ia masih betul. Ia hanya outputted yang pertama D berubah melalui yang lain membina. Jadi ingat, kemudian, satu beberapa perkara di sini. Satu, jika anda mahu untuk memeriksa dua keadaan sekali gus, anda boleh dan mereka bersama-sama seperti yang kita meramalkan. Anda boleh membandingkan watak-watak dalam cara ini dan berkesan merawat watak sebagai nombor, tetapi terus terang saya katakan, ini adalah begitu bodoh samar saya tidak akan ingat bagaimana untuk tampil dengan ini dari awal tanpa hujah melaluinya sekian sedikit masa. Bukankah telah baik jika seseorang di luar sana menulis fungsi dipanggil adalah rendah yang boleh menjawab untuk saya benar atau palsu, watak ini adalah huruf kecil? Juga bersyukur kerana, sesiapa sahaja yang menulis ctype.h berjaya melakukannya. Biar saya pergi di sini dan menambah ctype untuk c jenis, dan sekarang biarlah saya pergi ke sini dan menulis semula baris ini seperti berikut. Jadi, jika ia dipanggil lebih rendah, saya menuntut, s golongan i, maka saya akan memadam kedua-dua baris sama sekali. Jadi sekarang orang lain, saya berharap, menulis fungsi yang dipanggil adalah lebih rendah, dan ia bertukar keluar yang mereka lakukan dan mereka diisytiharkan ia dalam ctype.h. Dan sekarang saya akan meninggalkan line 27 sahaja, saya akan meninggalkan line 31 sahaja, tetapi notis berapa banyak saya telah mengetatkan kod saya. Ia kini lebih bersih. Ia kurang sukar untuk melihat melalui kerana sekarang majlis itu, lebih-lebih lagi, adalah begitu hebat dinamakan ia hanya melakukan apa yang ia berkata. Jadi sekarang saya akan untuk menyelamatkan ini. Saya akan zum keluar. Dan seperti dalam Scratch anda boleh mempunyai Booleans, nilai Boolean benar atau palsu, yang betul-betul apa yang menurunkan berkesan pulangan. Biar saya susun semula. Biar saya semula run. Dan sekarang mari kita cuba lagi, H-E-L-L-O, Enter. Itulah yang cukup baik. Dan cuba sekali lagi, pastikan saya tidak skru sesuatu sehingga. Yang dipermodalkan juga. Tetapi ini tidak cukup baik kerana Perkara lain yang saya tidak akan ingat kecuali saya bekerja melalui ia benar-benar berhati-hati, katakan, kertas ini selaras celaka. Bukankah lebih baik jika terdapat fungsi dipanggil atas? Nah ternyata terdapat dalam ctype.h juga. Saya akan pergi ke hadapan dan menaip - izinkan saya membawa talian yang kembali. Sebaliknya ini di sini, izinkan saya pergi ke hadapan dan berkata, menggantikan% c itu hasil daripada memanggil fungsi ini untuk atas tentang sifat i-ke-s. Dan kini melihat ia semakin sedikit seimbang. Saya mempunyai untuk mengesan berapa banyak kurungan saya telah dibuka dan ditutup. Jadi sekarang ia lebih bersih. Kini program ini semakin lebih baik dan lebih baik yang direka boleh dikatakan kerana ia banyak lagi boleh dibaca tetapi ia tidak mari kita betul. Buat kesempatan. . / Mengambil kesempatan. H-E-L-L-O. Mari kita berjalan sekali lagi, D-A-V-I-D. OK, jadi kita masih dalam cukup baik bentuk. Tetapi sekarang ke atas. Saya mencadangkan supaya ada satu lagi perbaikan kita boleh membuat yang akan benar-benar baik, yang benar-benar boleh mengetatkan sehingga kod ini dan benar-benar memberi kita lima daripada lima reka bentuk, misalnya. Apa yang akan lebih baik untuk menghilangkan? Well, melihat bagaimana bodoh lama blok ini kod adalah hanya untuk melakukan sesuatu yang mudah. Sekarang sebagai diketepikan, seperti yang anda mungkin mempunyai dilihat dalam seksyen super lepas ini hujung minggu, anda tidak tegas perlu pendakap kerinting apabila anda hanya mempunyai satu baris kod, walaupun kami mencadangkan menjaga mereka supaya ia membuat banyak lebih jelas, seperti di U berbentuk Scratch ini blok, apa yang di dalam cawangan. Tetapi ia tidak akan menjadi baik jika ke atas, apabila diberi input, menjadikannya huruf besar jika ia tidak, dan apa yang akan menjadi indah dalam kes yang bertentangan jika ia sudah huruf besar? Hanya lulus melalui dan biarkan dia bersendirian. Jadi mungkin ia itu. Saya boleh cuba dan hanya berharap bahawa ia tidak, tetapi biarlah saya memperkenalkan satu perkara yang lain. Daripada menggunakan ini terbina dalam terminal tingkap turun di sini, ingat bahawa icon persegi hitam ini memberikan anda tetingkap terminal yang lebih besar yang boleh saya penuh skrin jika saya mahu? Jadi ternyata mereka jenis aneh dinamakan, tetapi ada perkara-perkara ini dipanggil laman lelaki, laman manual, lelaki untuk jangka pendek, dan saya boleh mengakses oleh menaip manusia - apa yang saya mahu jenis yang? Manusia atas. Dan kini notis jika wujud berfungsi dalam komputer, dalam kes ini perkakas, yang hanya sistem operasi Linux, ia akan untuk memberi saya satu set agak samar daripada output, tetapi anda akan mendapati lebih masa itu ia sentiasa diformat cukup banyak sama supaya anda mula untuk mendapatkan digunakan untuk ia. Notis di atas ke atas, dan nampaknya adalah dokumentasi yang sama bagi yang lebih rendah. Sesiapa yang menulis ia memotong beberapa sudut dan meletakkan semuanya pada satu halaman. Tujuan perkara-perkara ini dalam hidup adalah untuk menukar surat kepada atas atau kecil. Perhatikan bahawa di bawah Sinopsis, halaman lelaki itu mengajar saya apa yang saya perlu fail termasuk untuk menggunakan perkara ini. Ia memberi saya tandatangan bagi fungsi, kedua-dua mereka, walaupun walaupun kita sekarang hanya mengambil berat tentang satu. Berikut adalah penerangan kini. Untuk menukarkan atas surat c kepada huruf besar jika boleh. Masih tidak nafikan bahawa, tetapi biarlah saya kini lihat di bawah nilai pulangan, perkara itu diserahkan kembali. Jadi nilai yang dikembalikan ialah daripada surat ditukar atau c jika penukaran tidak mungkin. Apakah c? Watak asal. Watak asal dan kita tahu bahawa dengan, sekali lagi, akan naik kepada sinopsis, dan sesiapa yang menulis ini fungsi hanya memutuskan bahawa input untuk ke atas dan ke bawah adalah hanya sewenang-wenangnya akan dipanggil c. Mereka boleh dipanggil yang paling apa-apa yang mereka mahu, tetapi mereka disimpan semudah c. Jadi saya telah berunding halaman lelaki itu. Ayat ini meyakinkan saya bahawa jika ia bukan satu huruf kecil, ia akan hanya memberi saya kembali c, yang merupakan sempurna, yang bermakna saya boleh menghilangkan keadaan lain saya. Jadi biarlah saya kembali ke GEdit, dan sekarang mari saya hanya melakukan ini. Saya akan tulis pernyataan printf saya. Saya akan pergi ke hadapan dan kanan di dalam untuk cetak gelung yang keluar, dan mendapatkan menghilangkan kini keseluruhan ini jika membina. Tidak adalah idea yang buruk, dan ia adalah sangat banyak betul dan selaras dengan segala yang kita telah mengajar, tetapi tidak perlu. Sebaik sahaja anda sedar beberapa perpustakaan fungsi wujud bahawa orang lain menulis, atau mungkin anda menulis di tempat lain dalam fail, anda boleh menggunakannya dan benar-benar mula mengetatkan kod. Dan apabila saya mengatakan sesuatu seperti gaya yang baik, hakikat bahawa orang ini dipanggil berfungsi untuk atas, atau sebelum ini adalah rendah adalah hebat berguna kerana mereka sangat deskriptif. Anda tidak mahu untuk memanggil fungsi anda x dan y dan z, yang mempunyai banyak, makna yang lebih kurang. Mana-mana soalan-soalan mengenai siri yang penambahbaikan? Jadi memadai untuk mengatakan salah satu takeaways adalah lebih sebagai masalah anda sendiri set - mungkin masalah set satu, tetapi pasti P menetapkan dua dan seterusnya, walaupun apabila mereka yang betul tidak semestinya bermakna mereka adalah sempurna hanya lagi atau terutamanya direka. Itulah paksi lain untuk mula berfikir tentang. Jadi ini adalah di dalam rentetan anda memori komputer, tetapi jika anda mempunyai keseluruhan sekumpulan watak-watak seperti H-E-L-L-O dalam RAM, dan andaikan bahawa anda dalam program anda memanggil mendapatkan tali berkali-kali seperti yang anda memanggil mendapatkan tali sekali, maka anda memanggil mendapatkan tali lagi. Nah, apa yang akan berlaku dari masa ke masa? Dalam erti kata lain, jika anda mempunyai garis kod, walaupun di luar konteks, seperti rentetan s mendapat - mari kita buat ini. Nama rentetan sama mendapatkan tali. Jadi menganggap bahawa baris kod yang dimaksudkan untuk meminta pengguna untuk namanya. Ini sejajar seterusnya kod bertujuan untuk meminta pengguna untuk atau sekolahnya, dan talian ini akan datang, dan sebagainya. Katalah kita terus bertanya pengguna yang lain dan satu lagi dan satu lagi tali. Mereka akan tinggal di dalam memori pada masa yang sama. Satu tidak akan mengalahkan yang lain. Sekolah tidak menimpa lain. Tetapi di manakah mereka semua berakhir di dalam ingatan? Nah, jika kita mula untuk menarik pada skrin, yang boleh kita gunakan benda ini di sini seperti papan hitam, jika ini hitam segi empat mewakili komputer saya ingatan, saya akan sewenang-wenangnya bermula membahagikan ia sehingga ke dataran kecil, setiap yang mewakili satu bait memori. Terus terang, jika anda mempunyai gigabait RAM hari ini, anda mempunyai satu bilion bait memori dalam komputer anda, jadi satu bilion ini dua. Jadi memadai untuk mengatakan, ini tidak benar-benar mengikut skala. Tetapi kita boleh terus menarik semua ini jelas tidak mengikut skala dataran, dan ini secara kolektif mewakili memori komputer saya. Sekarang kita hanya akan melakukan dot, dot, dot. Jadi, dalam erti kata lain, apabila saya kini mendorong pengguna dengan rentetan get memberi saya tali, apa yang berlaku? Jika jenis pengguna dalam "hello," yang berakhir dalam H-E-L-L-O. Tetapi andaikan pengguna itu jenis dalam - sebenarnya, saya tidak sepatutnya dilakukan hello kerana kita meminta mereka nama-nama mereka. Jadi mari kita kembali jika saya boleh melakukan ini. Jadi jika saya taip D-A-V-I-D untuk nama saya, tetapi ingat bahawa baris kedua kod telah mendapatkan tali lagi untuk mendapatkan sekolah mereka. Di mana perkataan yang bahawa pengguna jenis dalam akan pergi seterusnya? Well, mungkin ia akan pergi ke H-A-R-V-A-R-D. Jadi, walaupun saya telah disediakan sebagai dua baris, ini hanya sejumlah bait dalam anda RAM komputer. Ada masalah sekarang kerana sekarang jika saya menggunakan RAM dalam ini sangat berpatutan tetapi sejenis cara naif, apa yang boleh anda nampaknya tidak membezakan? Jika satu bermula dan di mana salah satu hujung, bukan? Mereka jenis kabur bersama-sama. Jadi ternyata komputer tidak melakukan ini. Biar saya sebenarnya skrol kembali dalam masa yang beberapa watak-watak, dan bukannya Harvard akan segera selepas nama pengguna, pengguna sebenarnya mendapat, di belakang tabir, aksara khas dimasukkan oleh komputer untuk dia atau dia. / 0, atau dikenali sebagai watak nul annoyingly dipanggil N-U-L, tidak N-U-L-L, tetapi anda menulisnya sebagai / 0. Ia hanya semua bit sifar adalah penanda dalam antara perkataan pertama yang pengguna ditaip dan kedua. Jadi Harvard sebenarnya kini berakhir sebagai urutan ini watak-watak dan satu lagi / 0. Jadi, dalam erti kata lain, dengan mempunyai ini nilai sentinel, lapan sifar berdampingan bit, kini anda boleh mula untuk membezakan salah satu watak dari yang lain. Jadi semua masa ini apa yang telah "hello" adalah sebenarnya "hello" dengan / 0, dan Sementara itu, ada juga yang mungkin RAM menjadi agak sedikit lebih di dalam komputer. Biar saya melakukan satu perkara lain sekarang. Ia ternyata bahawa semua ini kuasa dua kita telah melukis, mereka, ya, tali, tetapi secara umum, perkara-perkara ini adalah tatasusunan. Array hanya sebahagian memori itu kembali ke belakang untuk kembali ke belakang, dan anda biasanya menggunakan array dengan cara notasi ini kurungan persegi. Oleh itu, kita akan melihat ini agak sedikit dari masa ke masa, tetapi biarlah saya pergi ke hadapan dan membuka, mari kita memanggilnya peringkat umur. Dan notis apa yang boleh kita lakukan dengan ini cara yang sama, sedikit sintaks lebih sedikit di sini. Jadi, dalam talian 17 program ini - sebenarnya, membiarkan saya menjalankan program pertama supaya kita boleh melihat apa yang perkara ini tidak. Izinkan saya membuat panggilan peringkat umur untuk menyusun program ini. . Peringkat umur /. Berapa ramai orang yang berada di dalam bilik? Memanggilnya tiga. Umur orang yang pertama? 18, 19, dan 20. Dan kini agak mustahil, saya hanya telah membuat satu program yang umur mereka tiga orang. Jadi ada peluang jelas bagi sesetengah aritmetik menyeronokkan di sini. Syukurlah, matematik adalah betul. 18 pergi ke 19, 19 pergi 20 dan sebagainya. Tetapi apa yang benar-benar bertujuan untuk menjadi ilustrasi di sini ialah bagaimana kita menyimpan peringkat umur mereka tiga orang. Biar saya mengezum masuk pada apa yang berlaku di sini. Jadi pertama, ini beberapa baris pertama perlu akan mendapat cukup biasa. Saya hanya mendorong pengguna untuk beberapa orang di dalam bilik. Kemudian saya menggunakan mendapatkan int dan lakukan semasa untuk melakukan ini sekali lagi dan lagi dan lagi. Kami telah melihat corak yang sebelum ini, tetapi line 27 yang baru dan sebenarnya agak berguna, dan akan menjadi semakin berguna. Perhatikan apa yang berbeza dalam talian 27 adalah bahawa saya muncul untuk mengisytiharkan int dipanggil peringkat umur, tetapi menunggu. Ia bukan sahaja peringkat umur int. Ada ini kurungan persegi, dalam yang n. Jadi golongan n dalam konteks ini, tidak dalam satu kenyataan di sini tetapi printf dalam talian tunggal 27, baris ini adalah berkata, memberi saya n Ints, setiap yang adalah jenis int. Jadi ini adalah baldi, jadi untuk bercakap, di, dalam kes ini, tiga integer kembali ke kembali ke belakang supaya saya berkesan mempunyai tiga pembolehubah. Alternatif, untuk menjadi jelas, akan ini. Jika saya mahu pelajar pertama umur, saya mungkin melakukan ini. Jika saya mahu pelajar yang kedua umur saya mungkin melakukan ini. Jika saya mahu pelajar ketiga umur, saya mungkin melakukan ini. Dan tuhan melarang kita perlu semua orang umur dalam bilik ini - Maksud saya, ini adalah satu palang pintu dari banyak salinan, paste lagi dan lagi dan lagi. Dan ditambah sekali saya menyusun program ini, jika pelajar lain berjalan di lebih daripada pintu itu, kini nombor saya pembolehubah adalah tidak betul. Jadi apa yang baik tentang array adalah seperti Sebaik sahaja anda mula berasa diri anda menyalin dan menampal, kemungkinan adalah bahawa adalah tidak pendekatan yang terbaik. Array dinamik berpotensi. Saya tidak tahu terlebih dahulu berapa ramai orang akan berada di dalam bilik, tetapi saya tahu saya perlu n daripada mereka, dan saya akan n memikirkan apabila tiba masanya. Ini sejajar kod sekarang bermakna, beri saya sebahagian memori yang kelihatan seperti ini di mana bilangan kotak pada skrin bergantung sepenuhnya pada n yang pengguna ditaip masuk Jadi sekarang sepanjang program ini adalah sebenarnya cukup sama dengan apa yang kita hanya lakukan dengan watak-watak. Notis saya mempunyai untuk gelung bermula pada baris 30. Jadi sejurus selepas saya mendapat pelbagai, saya melelar dari y bersamaan dengan sifar pada sehingga n. Saya hanya mempunyai ini printf nafikan Mesej hanya mengatakan, beri saya umur orang #% i, jadi nombor satu, nombor dua, nombor tiga. Dan mengapa saya lakukan ini? Terus terang, manusia lebih suka untuk mengira dari satu atas sehingga manakala ahli sains komputer, sifar di atas. saintis komputer tidak akan menggunakan jenis ini program, jadi kita akan hanya mula mengira pada satu-satu seperti orang normal. Dan kini dalam talian 33, notis sedikit sekeping berbeza sintaksis. Umur i-ke-dalam yang berubah-ubah jenis pelbagai akan mendapat int an. Dan kini akhir sekali, ini hanya aritmetik di sini. Saya membuat keputusan dalam gelung berasingan untuk menuntut beberapa masa berlalu, dan kini dalam ini gelung berasingan, ayat-ayat ini melaksanakan. Satu tahun dari sekarang, orang i akan i lama tahun, tetapi notis ini bukanlah berubah-ubah i. Ini kini% i untuk int. Dan notis sebagai pemegang tempat pertama, saya pasangkan i campur 1, supaya kita mengira seperti orang biasa. Dan kemudian untuk nilai umur mereka, lama i tahun, saya mengambil masa yang lama kurungan i - dan mengapa saya melakukan tambah satu di sini? Mereka hanya berusia. Ia adalah pilihan bodoh saya program. Mereka hanya berumur satu tahun. Saya boleh menaip apa-apa bilangan yang Saya benar-benar mahu di sana. Jadi apa yang sebenarnya semua relevan di sini? Baiklah, biar saya sebenarnya skrol kembali di sini dan cat gambar apa yang akan berlaku. Apa yang kita akan lakukan dengan kami seterusnya Set Masalah Dua yang berkecimpung dalam dunia kriptografi. Jadi ini adalah rentetan aksara, jadi urutan pelbagai aksara, dan apa adakah ini katakan? Ia bukan dalam versi dalam talian satu slaid. Jadi saya mendakwa bahawa ini sama ini, iklan bodoh dari bertahun-tahun lalu yang benar-benar mungkin ingat salah satu asal-usulnya. Jadi ini adalah satu contoh penyulitan atau kriptografi. Ia ternyata bahawa jika anda mahu sebenarnya menghantar maklumat atau berkongsi maklumat dengan seseorang yang selamat, seperti mesej seperti ini, anda boleh berebut huruf. Tetapi biasanya, perkataan yang tidak hancur secara rawak. Mereka permuted dalam beberapa cara atau diubah dalam beberapa cara supaya - oops. Itulah spoiler menyeronokkan untuk masa akan datang. Jadi, anda boleh merancang apa yang nampaknya O ke B. Perhatikan bahawa garisan sehingga permodalan bijak. Rupa-rupanya menjadi r e. Rupa-rupanya F-H-E-R menjadi S-U-R-E. Jadi ternyata ada pemetaan, dan dalam kes ini ada yang agak bodoh pemetaan jika sesiapa telah digambarkan ia keluar? Ini adalah sesuatu yang dinamakan Rot 13 Putar 13. Ia adalah bodoh penyulitan mekanisme kerana ia benar-benar hanya menambah 13 hingga setiap satu daripada huruf, bodoh dalam erti kata bahawa jika anda hanya mempunyai sedikit masa lapang di tangan anda dan pensil, atau anda hanya fikir ia melalui dalam kepala anda, anda boleh cuba semua tambahan mungkin - satu, dua, tiga, dot, dot, dot, 25 hanya memutarkan keseluruhan abjad, dan akhirnya, anda akan memikirkan apa mesej ini. Jadi, jika anda melakukan sesuatu seperti ini di sekolah gred lulus mesej kepada anda kawan baik, jika sekolah gred anda guru hanya membaca melalui mesej dan kasar memaksa penyelesaian, anda mungkin telah mendapat jawapan oleh itu. Sekarang sudah tentu, dalam dunia sebenar, kriptografi yang lebih canggih. Ini adalah coretan teks dari sistem komputer yang mempunyai nama pengguna dan kata laluan, kerana hampir semua kita lakukan, dan ini adalah apa yang mungkin kata laluan anda kelihatan seperti jika disimpan di keras anda memandu tetapi dalam bentuk disulitkan. Ini bukan sahaja satu putaran surat, A ialah B dan B ialah C. Ini adalah lebih canggih, tetapi ia menggunakan apa yang diketahui umum sebagai kunci rahsia kriptografi. Gambar ini menceritakan seperti berikut cerita dengan ikon ini. Di sebelah kiri, kita mempunyai apa yang kami akan memanggil teks biasa. Dalam dunia kriptografi, jelas teks hanya mesej asal ditulis dalam bahasa Inggeris atau Perancis atau mana-mana bahasa sekalipun. Jika anda ingin menyulitkan, kita akan lulus ia bergambar melalui mangga, jadi beberapa jenis algoritma, beberapa fungsi atau program yang seseorang menulis yang duduk huruf diharapkan complicatedly lebih daripada sekadar menambah 13 kepada setiap daripada mereka. Apa yang anda dapat daripada proses yang di tengah ada dipanggil cyphertext. Jadi jenis perkataan seksi. Ia hanya bermakna ia adalah disulitkan versi teks biasa. Dan hanya jika anda mempunyai rahsia yang sama, 13 atau tolak 13, anda dapat menyahsulit mesej seperti itu. Jadi dalam Set Masalah Dua, antara perkara anda akan lakukan jika dalam Hacker Edition, anda akan mempunyai untuk menulis kod untuk memecahkan kata laluan ini, memikirkan apa yang mereka dan bagaimana mereka disulitkan, walaupun kita lakukan memberi anda sedikit petunjuk sepanjang jalan. Dalam Edisi Standard, kita memperkenalkan beberapa rahsia, penyulitan mekanisme, satu dipanggil Caesar, satu dipanggil Vigenere, yang masih sifer putaran di mana A menjadi sesuatu, B menjadi sesuatu, tetapi anda perlu lakukan ia programatik kerana sesungguhnya akan menjadi rahsia utama yang terlibat yang biasanya sebilangan atau kata kunci yang hanya penghantar dan penerima ini Mesej perlu memahami. Sekarang, ini sebenarnya mempunyai jelmaan dalam dunia sebenar. Ini, misalnya, adalah anak yatim sedikit Cincin penyahkod rahsia Annie, dan anda sebenarnya boleh melaksanakan ini sifer putaran - A menjadi sesuatu, B menjadi sesuatu - dengan beberapa roda, satu di luar, satu di bahagian dalam itu bahawa jika anda berputar roda atau cincin, anda sebenarnya boleh membariskan huruf dengan huruf yang berbeza, mendapat kod rahsia. Dan sebagainya sebagai cliffhanger untuk hari ini, apa yang saya fikir saya akan lakukan adalah sedikit throwback bahawa jika anda menghidupkan TV pada 24 Disember, anda boleh menonton filem iklan nauseum untuk 24 jam berturut-turut. Tetapi hari ini, saya akan buka di sini dan memberikan kita hanya dua minit dari pedagogically berkaitan Krismas Story dengan rakan-rakan kecil bernama Ralphie. [MAIN SEMULA VIDEO] -Jadilah ia dikenali kepada segala-galanya yang Ralph Parker adalah dengan ini dilantik sebagai ahli Anak-Anak Yatim Little Annie rahsia bulatan dan adalah berhak kepada semua penghormatan dan manfaat berlaku kepadanya. -Ditandatangani, Little Orphan Annie. Balas, Pierre Andre dalam dakwat. Kepujian dan faedah sudah pada usia sembilan tahun. [Menjerit ON RADIO] Ayuh, mari kita mendapatkan pada dengannya. Saya tidak memerlukan semua itu jazz tentang penyeludup dan lanun. -Dengar malam esok bagi pengembaraan penutup hitam kapal lanun. Kini, sudah tiba masanya untuk Rahsia Annie Mesej untuk anda ahli bulatan rahsia. Ingat, anak-anak. Hanya ahli Circle Rahsia Annie boleh decode mesej rahsia Annie. Ingat, Annie adalah bergantung kepada anda. Set pin anda untuk B2. Berikut adalah mesej. 12, 11, 2 - -Saya dalam mesyuarat rahsia pertama saya. -25, 14, 11, 18, 16 - -Pierre adalah pada malam ini suara besar. Saya boleh memberitahu mesej yang malam ini adalah benar-benar penting. -3, 25. Itulah mesej dari Annie dirinya. Ingat, jangan beritahu sesiapa. -90 Saat kemudian, saya dalam satu-satunya bilik di rumah di mana seorang budak sembilan boleh duduk di privasi dan decode. Aha, B. saya pergi ke depan. E. Perkataan pertama adalah "tidak." S. Ia telah datang lebih mudah sekarang. U. 25. Itu R. -Ayuh, Ralphie. Saya terpaksa pergi. I'll-betul turun, Ma. Pakar Gee. -T. O. Pastikan anda. Pastikan untuk apa? Apa yang Anak-Anak Yatim Little Annie cuba katakan? Pastikan untuk apa? -Ralphie, Randy telah mendapat untuk pergi. Anda akan sila datang keluar? -Baiklah, Ma. Saya akan segera keluar. -Saya telah mendapat lebih dekat dengan sekarang. Ketegangan adalah amat dahsyat. Apakah ia? Nasib planet boleh tergantung di kira-kira. -Ralphie, pergi Randy terpaksa. I'll-betul keluar untuk menangis dengan kuat. -Hampir di sana. Jari saya terbang. Fikiran saya perangkap besi. Setiap liang digetarkan. Ia adalah hampir jelas. Ya, ya, ya, ya, ya. -Pastikan anda minum Ovaltine anda. Ovaltine? A komersial tdk bagus? Celaka. [AKHIR VIDEO MAIN SEMULA] SPEAKER 1: Ini adalah CS50, dan bahawa akan Set Masalah Dua. Jumpa anda minggu depan. SPEAKER 2: Pada seterusnya CS50, ini berlaku. SPEAKER 1: Jadi, satu topik yang kita tidak mempunyai melihat setakat ini bahawa petunjuk fungsi. Kini, penunjuk fungsi hanya alamat awam fungsi, tetapi lebih seperti - anak a -