SPEAKER 1: Baiklah. Selamat datang kembali. Ini adalah Minggu Dua dari CS50, dan kami memiliki sejauh ini telah menggunakan fungsi tetapi sebagian besar diambil mereka untuk diberikan. Kami telah menggunakan printf yang memiliki efek samping dari pencetakan hal di layar. Kami telah menggunakan get-int, dapatkan mengapung. Tetapi bagaimana jika Anda benar-benar ingin membuat fungsi sendiri, karena beberapa Anda mungkin sudah mulai lakukan untuk Masalah Set One, meskipun tidak benar-benar diperlukan? Nah, mari kita pergi ke depan dan kembali bahwa masalah hanya meminta pengguna untuk nama dan mencetak sesuatu di layar, tetapi cobalah untuk faktor beberapa dari kesamaan bahwa kita sudah terlihat dalam kode kami sejauh ini. Jadi maksud saya berikut ini. Aku akan pergi ke depan dan menciptakan sebuah program baru, sebut saja itu hello.c seperti biasa. Aku akan pergi ke depan dan memberi diriku termasuk io.h standar di atas. Aku akan juga memberi diriku preemptively perpustakaan CS50 sehingga Saya tidak dimarahi oleh compiler. Dan sekarang aku akan pergi ke depan dan menyatakan int, utama, batal. Dan kemudian di sini, ini adalah di mana saya ingin untuk mulai outsourcing fungsi untuk beberapa fungsi lain yang aku sendiri akan menulis tapi itu tidak saat ini ada. Misalnya, bahwa saya ingin menulis fungsi yang memungkinkan saya untuk mencetak halo, koma, dan maka nama beberapa pengguna. Daripada terus melakukan printf halo,% s, tidak akan lebih baik jika hanya ada fungsi yang disebut tidak printf tapi nama cetak? Jadi dengan kata lain, saya ingin bisa menulis sebuah program yang tidak sedikit sesuatu seperti ini. Pertama, saya akan mengatakan printf Anda nama, sehingga mendorong pengguna untuk memberi saya namanya, dan kemudian aku akan menggunakan string s akrab bagi menyatakan string. Beri aku sebuah variabel bertipe string, menyebutnya s, dan simpan di bahwa hasil memanggil get tali. Tapi sekarang dalam beberapa pekan terakhir, saya akan agak perlahan dilakukan halo,% s / n. Dan dengan kata lain, kita pernah melihat ini Contoh beberapa kali, dan itu Contoh sepele, karena hanya ada satu baris kode sehingga benar-benar tidak masalah besar untuk terus-menerus mengetikkan lagi. Tapi anggaplah bahwa baris kode sebenarnya itu menjadi beban, dan itu bukan satu baris kode tapi itu 10 baris kode beberapa minggu dari sekarang, dan Anda hanya mendapatkan lelah menyalin dan menyisipkan atau mengetik ulang kode yang sama. Bukankah lebih bagus daripada melakukan printf halo,% s dan sebagainya, tidak akan lebih baik jika hanya ada fungsi yang disebut nama cetak yang mengambil argumen - dengan kata lain, dibutuhkan masukan - dan kemudian koma. Jadi fungsi itu, tidak akan itu akan baik jika itu ada? Maka saya tidak akan perlu khawatir tentang printf apa, apa% s dan semua kompleksitas ini yang tidak semua yang menarik. Mereka berguna. Jadi nama cetak, sayangnya, tidak menemukan sekitar 40 ditambah tahun yang lalu. Tidak ada yang berpikir untuk menulis itu. Tapi itulah keindahan memiliki bahasa pemrograman, seperti di Scratch Anda dapat menentukan blok kustom, sehingga di C dan sebagian bahasa apapun, bisa Anda mendefinisikan fungsi Anda sendiri, bisa Anda mendefinisikan fungsi sendiri. Jadi meskipun kita mendapatkan utama dengan otomatis gratis, kita dapat mendeklarasikan fungsi kita sendiri. Jadi aku akan membuat beberapa ruang di sini atas, dan aku akan menyatakan saya fungsi sendiri yang akan terlihat agak aneh pada awalnya tapi kami akan datang kembali ke ini sebelumnya lama. Aku akan mengatakan batal, sehingga menunjukkan fungsi ini tidak sesuatu, memiliki efek samping, tetapi tidak kembali sesuatu kepada saya dalam cara yang sama yang mendapat int atau mendapatkan string itu sendiri tidak. Dan aku akan memberikan fungsi ini nama nama cetak, dan aku akan menetapkan bahwa orang ini akan mengambil string, dan aku akan menyebutnya string name. Saya bisa menyebutnya apa pun yang saya inginkan, tapi saya ingin kode saya menjadi mendokumentasikan diri. Dengan kata lain, jika salah satu dari Anda adalah untuk membuka file ini dan membacanya, Anda bisa semacam menyimpulkan dari nama yang masukan apa peran yang seharusnya dimainkan. Dan sekarang di bawah itu, aku akan membuka keriting brace dan tertutup keriting brace, dan jadi perhatikan Saya sudah mengikuti yang sama pola pada baris empat sampai tujuh sebagai Saya sudah mengikuti selama seminggu baik ditambah sekarang antara, misalnya, garis sembilan dan 14 yang membentuk utama. Dengan kata lain, cetak nama adalah fungsi lain. Sekarang, compiler tidak akan tahu untuk memanggil hal ini secara otomatis karena saya benar-benar hanya menciptakannya, tetapi akan tahu masih memanggil utama secara otomatis, dan kemudian tentu saja dalam baris 13, saya memanggil fungsi saya sendiri. Dan karena saya telah menyatakan bahwa fungsi up on line empat sebelum main, ini akan mengajarkan compiler apa kutipan, tanda kutip, "nama cetak" berarti dan apa yang harus dilakukan. Jadi aku semacam memberikan kebiasaan baru blok dalam konteks, katakanlah, Scratch. Jadi di sini, saya dapat menempatkan bahwa sangat umum atau pola berulang kode saya tetap menulis di kelas, printf % S halo,% s / n ", - apa yang saya ingin menempatkan di sini? S? Jadi saya ingin menuliskan nama dalam konteks ini. Jadi perhatikan sedikit dikotomi di sini. Karena saya menyatakan fungsi sendiri dan saya agak sewenang-wenang disebut itu mencetak nama, dan karena aku sudah ditentukan dalam tanda kurung bahwa ini Fungsi mengambil satu argumen, jenis yang merupakan string - jadi kata atau frase atau sesuatu seperti itu - dan Saya menelepon bahwa nama argumen, bahwa berarti satu-satunya variabel yang ada di ruang lingkup, sehingga untuk berbicara, adalah nama. S hanya ada antara apa dua kurung kurawal, tentu saja? Yah benar, seperti baris 10 melalui 14, jadi hanya seperti pada hari Senin tidak dapat menggunakan S, tapi apa yang bisa saya lakukan adalah lulus S dalam nama cetak. Cetak nama Kebetulan untuk memberikan alias, sinonim, nama panggilan, menyebutnya nama, dan sekarang menggunakannya di baris ini. Jadi sekarang mari saya simpan ini, zoom out. Biarkan aku pergi ke depan dan membuat halo. Terlihat bagus. Tidak dimuntahkan kesalahan. . / Hello Enter. Siapa nama saya? David. Dan halo Daud. Jadi tidak semua yang menarik, tapi hanya berpikir sekarang. Sekarang Anda memiliki bahan yang sama seperti yang kita lakukan di Scratch untuk membuat fungsi kita sendiri. Tapi ada sedikit gotcha. Misalkan bahwa aku tidak benar-benar berpikir ini melalui dan saya benar-benar tanpa benar-benar berpikir tentang hal itu menulis yang berfungsi di sini. Terasa sangat masuk akal. Dalam Scratch tidak ada pengertian lokasi di script Anda. Anda bisa menempatkan satu di sini, satu di sini, satu di sini, dan mungkin mulai terlihat sedikit berantakan jika Anda tidak berbaring dengan rapi, tapi tidak peduli di mana secara fisik script berada di layar. Sayangnya di C - dan ini tidak seperti bahasa seperti Java dan Python dan lain-lain bahwa Anda mungkin akrab dengan - sayangnya dalam C, agar tidak penting karena menonton apa akan terjadi sekarang. Fungsi default yang akan untuk mengeksekusi, tentu saja, utama. Main akan memanggil nama cetak pada baris delapan, tapi sayangnya, compiler bahkan tidak akan tahu bahwa nama cetak ada sampai mencapai garis 11, yang sayangnya akan terlambat. Jadi mari kita lakukan membuat halo. Dan sekarang sialan, dua kesalahan yang dihasilkan. Jadi sekarang biarkan aku gulir ke atas untuk sangat pertama, karena kami harus selalu melakukan, dan melihat bahwa itu berteriak padaku, "Deklarasi implisit fungsi cetak nama. " Jadi kita telah melihat pesan ini sebelumnya, deklarasi implisit fungsi. Ketika kita telah melihat bahwa jenis kesalahan? Ketika saya tidak termasuk perpustakaan. Jika saya lupa cs50.h dan saya akan mendapatkan berteriak untuk mendapatkan tali atau mendapatkan int. Tapi dalam kasus ini, fungsi ini cetak namanya tidak di perpustakaan, kan? Ini benar-benar di file ini, sehingga apa benar-benar masalah? Nah sayangnya dalam C, itu akan membawa Anda sehingga sangat harfiah bahwa jika Anda ingin fungsi yang disebut nama cetak untuk ada, Anda juga harus menerapkan yang berfungsi pada bagian paling atas Anda kode agar dapat diakses untuk menurunkan fungsi, tapi terus terang, yang menjadi ceroboh sangat cepat. Secara pribadi, saya suka menempatkan utama pertama karena maka itu sangat jelas apa ini Program tidak pada pandangan pertama. Dan ditambah, Anda bisa masuk ke sudut aneh kasus di mana jika x ingin menelepon y tapi y sebut x, Anda hanya secara fisik tidak bisa benar-benar menempatkan satu di atas yang lain. Tapi ternyata di C, kita dapat memecahkan ini sangat sederhana. Aku akan menaruh sedikit ruang di sini, dan aku hanya akan Terlebih Dahulu, meskipun agak berlebihan, akan mengajarkan compiler bahwa ada fungsi disebut nama cetak, dibutuhkan string, dan aku akan menelepon itu nama titik koma. Jadi sekarang ini sejalan empat, yang kami belum pernah melihat sebelumnya, adalah sebuah deklarasi dari nama fungsi print, tapi itu hanya sebuah janji bahwa fungsi ini akan akhirnya didefinisikan, akhirnya diimplementasikan. Ini sekarang saya bisa meninggalkan sendirian karena sekarang ini adalah definisi, pelaksanaan, semacam mil terakhir pelaksanaan ini fungsi tertentu. Jadi terus terang itu bodoh, itu menjengkelkan, tapi ini adalah cara C adalah, dan itu karena membawa Anda sangat harfiah dan, sebagai komputer terus terang harus, hanya tidak persis apa yang Anda kirim ke lakukan, dan sehingga pemesanan sangat penting. Jadi ingatlah bahwa dalam pikiran dan lagi, mulai melihat terulangnya pola. Kemungkinan besar Anda akan, jika Anda belum sudah, mulai menemukan pesan seperti ini yang sekilas tampak benar-benar samar, tetapi jika Anda mulai untuk mencari kata-kata kunci seperti "Deklarasi implisit," menyebutkan dari fungsi dalam hal ini - dan terus terang, Anda kadang-kadang bahkan mendapatkan sedikit hijau simbol wortel yang memberitahu Anda di mana masalah mungkin - Anda dapat mulai bekerja dengan cara Anda melalui belum terlihat pesan kesalahan. Setiap pertanyaan untuk menulisnya fungsi sendiri dengan cara ini? Mari kita lakukan sesuatu itu adalah sedikit lebih menarik. Daripada hanya melakukan sesuatu yang memiliki efek samping dari pencetakan, biarkan aku pergi depan dan menyimpan file baru, dan kami akan sebut positive.c ini, meskipun itu akan menjadi sedikit berbeda dibandingkan terakhir kali. Dan kali ini, saya ingin kembali menerapkan waktu lalu misalnya positive.C, yang adalah memaksa pengguna untuk memberikan saya bilangan bulat positif. Tapi aku harus menggunakan mendapatkan int terakhir kali. Bukankah menyenangkan jika ada fungsi disebut mendapatkan int positif bahwa aku hanya bisa outsourcing ini bagian dari fungsi ke? Jadi perbedaan di sini adalah kita akan menerapkan mendapatkan int positif, tapi tidak seperti Nama cetak yang memiliki efek samping - itu tidak kembali sesuatu bagi saya seperti nomor atau string - mendapatkan int positif, tentu saja, akan kembali, mudah-mudahan, int positif. Jadi mari kita lakukan ini. Sertakan cs50.h, Termasuk standar io.h. Int void main. Dan sekarang di sini, aku akan pergi ke depan dan katakanlah int, sebut saja n, sama mendapatkan int positif. Dan seperti mendapatkan int sudah ada karena staf menulis itu, aku akan untuk menganggap untuk saat itu mendapatkan int positif ada, dan sekarang aku akan untuk terus maju dan mengatakan printf, terima kasih untuk% i / n ", n. Jadi sekarang jika saya mengkompilasi program ini, apa yang akan terjadi di terminal saya jendela di bagian bawah layar? Aku akan mungkin mendapatkan bahwa kesalahan yang sama seperti sebelumnya. Jadi mari kita coba ini. Membuat positif. Dan lagi, deklarasi implisit fungsi, dapatkan int positif. Jadi kita bisa menyelesaikan ini dalam beberapa cara. Aku akan tetap sederhana dan hanya menempatkan deklarasi saya sampai di sini dan mendapatkan int positif. Aku butuh yang disebut tanda tangan. Tanda tangan hanya mengacu dengan estetika baris pertama dari program ini. Jadi apa yang harus mendapatkan positif int kembali? Jadi int. Maksudku idealnya, itu akan kembali sesuatu seperti int positif, tapi itu tidak ada. Kami sudah tidak melihat bahwa di antara data kami jenis, jadi kita harus berurusan dengan Fakta bahwa kita memiliki sangat sedikit tipe data untuk bekerja dengan. Tapi kita bisa mengembalikan int dan hanya percaya bahwa itu akan positif. Ini akan dipanggil mendapatkan int positif. Dan sekarang bagaimana argumen? Apakah mengambil masukan apapun? Apakah perlu masukan apapun? Jadi tidak perlu tahu di muka apapun. Dapatkan string tidak, dapatkan int tidak. Printf tidak - itu harus memiliki beberapa masukan berlalu ke dalamnya - dan nama cetak diperlukan beberapa masukan, tapi sampai int positif tidak. Jadi aku akan secara eksplisit memberitahu kekosongan compiler. Void adalah tidak adanya hal lain. Jadi batal berarti tidak ada yang masuk ke dalam dari mereka kurung, koma. Dan sekarang di bawah file saya - dan lagi, aku hanya menjadi semacam anal di sini menempatkan utama di bagian atas, yang adalah praktik yang baik karena dengan cara ini, kapan saja Anda atau orang lain membuka file Anda, fungsi adalah di sana. Anda dapat menyelam di dari satu persegi. Jadi sekarang aku akan menduplikasi ini, mendapatkan batal int positif, tapi aku tidak akan memukul titik koma sekarang. Aku akan membuka kurung kurawal, dan sekarang aku perlu meminjam beberapa ide dari Senin. Jadi seperti yang Anda ingat, kita melakukan sesuatu seperti melakukan hal berikut saat sesuatu yang benar. Dan apa yang saya lakukan? Aku melakukan sesuatu seperti memberikan saya bilangan bulat positif, sedikit dari prompt. Saya bisa menggunakan kata-kata yang saya inginkan. Dan kemudian saya menggunakan apa? Int n sama mendapatkan int, tanpa argumen untuk itu. Dan melihat perbedaan. Bila Anda memanggil fungsi, bila Anda menggunakan fungsi, Anda tidak dimasukkan ke dalam kekosongan. Anda hanya melakukannya ketika mendeklarasikan fungsi, mengajar compiler apa itu harus berharap. Jadi Anda tidak perlu menempatkan membatalkan sana sendiri. Dan sekarang apa kondisi saya? Nah, n tidak sama dengan positif, tapi itu hanya pseudo-code. Jadi bagaimana cara mengungkapkan hal ini lebih bersih? Jadi kurang dari atau sama dengan nol. Jadi sekali lagi, melihat Anda dapat melakukan kurang dari atau sama dengan. Meskipun itu dua terpisah simbol, Anda dapat melakukannya pada keyboard Anda seperti itu. Tapi masih ada bug yang Aku kacau terakhir kali juga. Saya harus menyatakan - persis. Saya harus menyatakan n luar loop. Jadi saya harus menempatkan n di sini, dan saya tidak ingin kembali mendeklarasikan di sini supaya saya mendapatkan variabel baru. Saya hanya ingin memberikan nilai di sini. Dan sekarang aku tidak cukup dilakukan di sini. Biar terburu-buru dan berpura-pura aku sudah selesai. Membuat positif, dan sekarang ada kesalahan baru. Pengendalian mencapai akhir fungsi non-batal. Jadi pesan kesalahan baru, tetapi jika Anda jenis menggoda selain dari masing-masing kata-kata, mungkin mengisyaratkan apa yang salah. Kontrol. Kontrol hanya berarti untuk pesanan operasi dalam sebuah program. Komputer yang memegang kendali dan sesuatu yang tidak beres. Jadi mencapai akhir fungsi non-batal. Fungsi apa itu rupanya maksud? Apa fungsi non-batal? Jadi bisa int positif, dan sedikit membingungkan dalam sumur itu, itu semacam kekosongan. Memiliki spesifikasi batal untuk perusahaan argumen, tapi outputnya akan menjadi tipe n. Jadi kata di sebelah kiri adalah disebut tipe kembali. Kata di dalam sini adalah nol atau lebih argumen bahwa fungsi memakan waktu. Jadi apa yang harus saya lakukan? Pada titik ini dalam kode saya, line 21 di mana prompt berkedip sekarang adalah, saya memiliki int positif di dalam dari variabel yang disebut n. Bagaimana cara mengembalikannya ke main? Secara harfiah. Kembali n titik koma. Jadi seperti Colton kembali sepotong kertas dengan jawaban saya dengan menjatuhkan potongan kertas dalam hitam kecil kotak di atas meja, untuk melakukan itu dalam kode, Anda benar-benar hanya menulis, kembali n, dan itu seolah-olah Colton yang menyodorkan sesuatu kembali fisik. Dalam hal ini, apa yang terjadi adalah mendapatkan int positif akan menyerahkan kembali apa mungkin positif integer untuk siapa? Mana nilai yang berakhir? Itu berakhir dalam variabel ini, n, dan maka kita lanjutkan dengan garis sembilan. Jadi dengan kata lain, dalam rangka operasi, program ini dimulai melaksanakan, dan kompilator menyadari, oh, Anda ingin perpustakaan? Biarkan aku pergi ambil apa pun yang ada di dalamnya itu. Oh, Anda ingin perpustakaan IO standar? Biarkan aku pergi ambil apa pun yang ada di dalamnya itu. Apa compiler berkata kepada dirinya sendiri ketika hits line empat? Oh, Anda berjanji untuk melaksanakan fungsi yang disebut mendapatkan positif, namun kita akan kembali nanti, sesuatu sepanjang garis itu. Void main Int hanya berarti inilah keberanian dari program saya. Baris tujuh hanya penjepit keriting. Baris delapan mengatakan di sebelah kiri, berikan saya 32 bit untuk integer, sebut saja n. Di sisi kanan, itu mengatakan mendapatkan int positif. Sekarang mari kita jeda cerita karena sekarang Saya tidak terus bergerak kursor saya turun. Kursor saya sekarang turun di sini karena sekarang mendapatkan int positif mengeksekusi. Int n dinyatakan. Lakukan hal berikut. Printf memberi saya bilangan bulat positif. Dapatkan int dari pengguna, menyimpannya dalam n, dan mungkin melakukan ini lagi dan lagi. Loop ini berarti bahwa kode ini mungkin mengeksekusi atas dan ke bawah seperti ini lagi dan lagi, tapi ketika pengguna akhirnya bekerja sama dan memberi saya positif int, aku memukul line 21, di mana titik nomor diserahkan kembali, dan mana yang Aku harus menyorot sekarang? Sembilan. Control, sehingga untuk berbicara, kembali untuk berbaris sembilan. Itulah garis yang kini berkuasa. Jadi itulah apa yang telah terjadi di kali ini di bawah tenda, tetapi ketika kita telah menggunakan fungsi seperti printf atau bahkan mendapatkan string yang orang lain menulis untuk Anda, kontrol diserahkan baris kode pergi ke orang lain oleh baris demi baris. Hanya saja kita tidak bisa melihatnya dan kami tidak bisa benar-benar menggambarkan dalam hal ini Program karena dalam beberapa lainnya file di hard drive tanpa sepengetahuan kami. Jadi mari kita benar-benar mengkompilasi dan menjalankan sekarang. Membuat positif. Kompilasi, itu kemajuan. . / Positif. Beri aku bilangan bulat positif. Mari kita sulit. Negatif 1. Nol. Mari kita berikan 50. Terima kasih untuk 50, dan sehingga kontrol kini telah kembali. Semua pertanyaan, kemudian, pada itu? Ya? [Tak terdengar]. Katakanlah lagi. Oh, pertanyaan yang bagus. Jadi Anda mungkin melihat paralel di sini bahwa Aku agak memotong sudut pada. Sejalan 12, saya katakan, dapatkan int positif mengembalikan sebuah int, tapi itu sama logika, sekarang berdiri untuk alasan bahwa dalam jalur enam, aku mengatakan bahwa pengembalian utama int, tapi apa yang kita tidak pernah telah di salah satu program kami? Kami tidak pernah memiliki penyebutan kata ini kembali kunci. Jadi ternyata bahwa dalam C, setidaknya versi itu yang kita gunakan dibuat pada tahun 1999, secara teknis, ini adalah terjadi untuk Anda secara otomatis. Setiap kali Anda menerapkan program dan Anda melaksanakan fungsi yang disebut utama, fungsi yang akan kembali nol oleh default, jika Anda tidak mengatakan sebaliknya, dan nol hanya konvensi. Dunia kembali nol sehingga menunjukkan bahwa semuanya baik-baik, efektif meninggalkan kami dengan empat miliar hal yang mungkin yang bisa salah sehingga jika kita kembali satu, yang mungkin menandakan kode yang berarti ini hal yang tidak beres. Kita bisa kembali dua, yang berarti Hal ini lain beres. Kita bisa kembali empat miliar, yang berarti hal ini lain beres. Dan jika Anda sekarang berpikir tentang Anda sendiri PC atau Mac, Anda mungkin ingat bahwa kadang-kadang Anda mendapatkan pesan kesalahan yang rumit dari perangkat lunak yang Anda menggunakan, dan kadang-kadang memiliki manusia deskripsi ramah, tapi ada seringkali berupa kode atau nomor di layar? Jika ini tidak datang ke pikiran, hanya mengawasi keluar untuk itu. Itu biasanya apa ini Kode mengacu. Mereka termasuk dalam Microsoft Word dan program lain sehingga jika Anda mengajukan laporan bug dengan perusahaan, Anda dapat memberitahu mereka, oh, saya punya kesalahan nomor 45. Dan beberapa programmer kembali di perusahaan dapat melihat bahwa di nya kode dan berkata, oh, itu karena aku membuat bug ini dan itulah sebabnya pengguna mendapat pesan ini. Tapi terus terang, itu hanya sedikit mengganggu dan sedikit membosankan untuk menyimpulkan bahwa, setidaknya pada kami beberapa program pertama, jadi kami sudah telah menghilangkan itu. Tapi selama ini setiap satu dari Anda fungsi utama telah diam-diam punya ini baris otomatis ditambahkan untuk Anda oleh compiler, hanya dengan konvensi untuk menghemat waktu. [Tak terdengar]. Anda tidak perlu memasukkannya dalam utama. Itu baik-baik saja. Anda perlu untuk memasukkannya jika Anda menerapkan fungsi seperti ini. Jika tidak datar fungsi keluar tidak akan bekerja. Tapi dalam utama, itu tidak perlu. Dalam satu atau dua minggu, kami akan mulai mendapatkan menjadi kebiasaan bahwa setelah kita ingin memulai menandakan kesalahan. Pertanyaan yang bagus. Istirahat lisan begitu cepat untuk menyebutkan bahwa Jumat ini, kita tidak akan makan siang per se, tapi kami akan makan malam dengan beberapa mahasiswa dan staf. Jika Anda ingin bergabung dengan kami, merasa bebas untuk pergi ke cs50.net/rsvp. 06:00 Jumat ini. Ruang adalah, seperti biasa, terbatas, tetapi kita akan terus melakukan ini pada hampir setiap minggu jika ruang habis minggu ini. Jadi cliffhanger yang kita tinggalkan di Senin adalah bahwa string dapat benar-benar diindeks ke dalam, yang hanya berarti Anda bisa mendapatkan karakter pertama, karakter kedua, karakter ketiga dan sebagainya, karena Anda dapat efektif memikirkan string, seperti halo, sebagai dalam kasus ini lima huruf dalam kotak. Dan Anda bisa mendapatkan di masing-masing kotak dengan apa yang kita lakukan sintaks memperkenalkan pada hari Senin? Mereka kurung siku pada keyboard Anda. Itu hanya berarti pergi ke lokasi nol. Kami mulai menghitung dari nol, sehingga braket nol menandakan h, braket satu menandakan e, dan sebagainya. Dan sepanjang waktu ketika kami sudah menggunakan string dan mengetikkan "halo" dan "dunia" dan hal-hal lain layar, sudah disimpan dalam kotak seperti ini. Dan mengambil menebak. Apa setiap kotak mewakili fisik dalam komputer Anda? [Tak terdengar]. Maaf? Karakter. Jadi karakter, tentu dalam kasus string, dan karakter hanya delapan bit atau satu byte. Jadi Anda mungkin setidaknya samar-samar akrab dengan fakta bahwa Anda komputer memiliki memori. Ini memiliki dua jenis memori minimal. Salah satunya adalah hard disk di mana Anda menyimpan hal-hal secara permanen, dan itu biasanya besar sehingga Anda dapat memiliki film dan musik dan sebagainya. Maka Anda memiliki jenis lain dari memori disebut RAM, R-A-M, Random Access Memori, dan ini adalah jenis memori yang digunakan ketika komputer Anda berjalan tetapi jika Anda kehilangan kekuasaan atau Anda dies baterai, apa pun yang disimpan di RAM akan hilang jika Anda kehilangan kekuatan sama sekali karena itu tidak persisten. Anda biasanya memiliki, hari ini, pertunjukan itu, dua pertunjukan, mungkin lebih. Dan terbalik RAM adalah bahwa itu jauh banyak, jauh lebih cepat daripada hard disk atau bahkan solid state drive hari ini, tapi biasanya lebih mahal sehingga Anda memiliki kurang dari itu. Jadi pembicaraan hari ini benar-benar mengacu ke RAM, jenis memori yang hanya ada saat ada kekuatan yang dimasukkan ke dalam komputer Anda. Jadi, ketika Anda mengetik di H-E-L-L-O, Enter pada keyboard, H akan dalam satu byte RAM, E yang terjadi di byte lain dari RAM, seperti sisa kata. Jadi ingat apa yang kita mampu lakukan terakhir kali adalah ini. Biarkan aku pergi ke depan dan membuka file bahwa kita dipanggil string.c, dan mengingat bahwa itu tampak sedikit sesuatu seperti ini. Biarkan aku benar-benar memutar kembali dan mengubah untuk apa yang tampak seperti, panjang string s. Jadi melihat program di sini. Kami termasuk perpustakaan CS50 sehingga yang bisa kita gunakan mendapatkan tali. Kami menyertakan standar io.h sehingga kita bisa menggunakan printf. Mengapa kita termasuk string.h? Ini adalah baru pada hari Senin. Jadi kita ingin panjang string. Str leng. Orang-orang memutuskan tahun yang lalu, mari kita menjadi ringkas. Alih-alih menyebutnya "panjang string," sebut saja "str leng" dan membiarkan Angka dunia yang keluar, dan sebagainya yang apa yang kita mendapatkan akses ke dengan string.h. Ini akrab. Ini akrab. Ini akrab. Ini sedikit baru. Sejalan 22 - dan kami akan kembali ini, tapi untuk sekarang tahu - dan Anda hanya akan tahu ini dari memiliki membaca dokumentasi atau jika Anda tahu C sudah - mendapatkan string yang kadang-kadang bisa mengacaukan. Jika pengguna benar-benar bermusuhan atau kooperatif dan ia hanya tidak mengetikkan apapun sama keyboard atau jenis begitu banyak pada keyboard yang itu menguasai memori komputer, dalam teori, dapatkan tali bisa kembali sesuatu selain string karakter. Ini bisa mengembalikan nilai khusus yang disebut NULL dalam semua topi, N-U-L-L, dan ini adalah hanya disebut nilai sentinel. Ini adalah nilai khusus yang menandakan sesuatu yang buruk terjadi dalam kasus ini. Ini adalah tidak adanya string. Jadi nol aku memeriksa hanya sehingga, panjang cerita pendek, str leng dan fungsi lain yang datang dengan C, jika mereka mengharapkan string tetapi Anda melewati mereka tidak adanya string, jika Anda lulus mereka NULL, komputer atau program hanya akan crash langsung. Ini akan menggantung. Ini akan muntah beberapa pesan kesalahan. Hal-hal buruk akan terjadi. Jadi meskipun ini masih tidak didefinisikan dengan baik - ini akan lebih masuk akal dalam seminggu atau dua - di baris 22, ini hanya contoh diri defensif pengecekan error hanya dalam kasus satu waktu dari sejuta sesuatu yang tidak beres, pada Setidaknya program saya tidak akan crash. Jadi jika s tidak sama dengan sesuatu yang buruk, Aku punya untuk loop, dan ini adalah di mana kita punya yang lain potongan baru sintaks. Aku punya untuk loop iterasi dari nol pada hingga panjang s. Dan kemudian di sini, saya adalah seorang pencetakan keluar s braket i, tapi kenapa saya menggunakan% c semua tiba-tiba bukannya% s bahkan meskipun s adalah string? Ini karakter, kan? S adalah string, tapi s braket sesuatu, s braket i dimana i adalah nol atau satu atau dua, itu individu karakter dalam string, dan sebagainya untuk itu, printf perlu diinformasikan bahwa itu memang tokoh yang diharapkan. Dan kemudian ingat, apa yang melakukan ini Program benar-benar melakukannya? Mencetaknya dalam kolom. Ya, persis. Itu hanya dicetak kata yang saya ketik kolom, satu karakter per baris. Jadi mari kita lihat ini lagi. Jadi membuat tali. Disusun OK. / String.. Mari saya ketik di H-E-L-L-O, Enter, dan memang saya mendapatkannya, satu per baris. Jadi biarkan aku melakukan satu optimasi sini. Jika Anda berpikir tentang hal ini, terutama jika Anda telah diprogram sebelumnya, ada bisa dibilang sebuah inefisiensi di line 24. Dengan kata lain, itu tidak selalu desain terbaik. Langsung, setidaknya sekali Anda ingat apa str leng, tapi itu melakukan sesuatu yang bodoh berpotensi. Apa yang mungkin itu? [Tak terdengar]. Tepat. Ini memeriksa untuk panjang s setiap saat meskipun H-E-L-L-O selalu akan menjadi lima karakter. Setiap kali melalui loop ini, lima tidak berubah. Aku mungkin incrementing i, tapi apa adalah panjang s pada setiap iterasi dari loop ini? Ini lima, lima, lima, dan namun saya tetap bertanya ini mempertanyakan lagi dan lagi dan lagi. Sekarang terus terang, komputer begitu sialan cepat, tidak ada yang akan melihat perbedaan dalam hal ini, tapi jenis ini keputusan desain miskin dapat mulai menambahkan jika compiler itu sendiri tidak mencoba untuk memperbaiki ini untuk Anda yang biasanya tidak akan, pada setidaknya dalam alat. Jadi aku akan melakukan hal ini. Aku akan menambahkan koma setelah variabel pertama saya, saya. Aku akan memberi diriku lagi variabel, menyebutnya n, hanya dengan konvensi untuk nomor, dan kemudian aku akan menetapkan n nilai string panjang s. Dan kemudian aku akan berubah kondisi saya menjadi apa? Aku akan mengubah kondisi saya untuk sementara saya kurang dari n. Jadi sekarang, berapa kali aku memeriksa panjang s? Sekali, tapi itu OK untuk memeriksa i terhadap n lagi dan lagi karena sekarang mereka nilai-nilai yang tidak benar-benar berubah. Sekarang untuk saat ini, hanya tahu bahwa kapan saja Anda memanggil fungsi, ada sedikit biaya overhead, tidak cukup untuk mencegah Anda benar-benar dari yang pernah menggunakan fungsi, tetapi tentu ketika ada baris kode seperti itu - dan garis akan mendapatkan lebih menarik sebelum lama - di mana ada kesempatan untuk berpikir, jika saya ketik kode ini, berapa banyak kali akan mengeksekusi? Anda akan mulai melihat dari waktu ke waktu kinerja program Anda dapat memang berubah. Bahkan, salah satu masalah kami telah menetapkan dilakukan dalam tahun terakhir melibatkan melaksanakan, karena Anda mungkin ingat dari minggu nol, spell checker, tetapi mengeja checker yang dirancang untuk mendukung kamus 150.000 ditambah kata-kata yang kita berikan kalian. Anda harus menulis kode yang beban kata-kata ke dalam RAM, sehingga menjadi kotak seperti yang kita lihat di layar saat lalu, dan kemudian secepat Anda bisa, Anda harus mampu menjawab Pertanyaan bentuk, adalah kata ini salah eja? Apakah kata ini salah eja? Apakah kata ini salah eja? Dan dalam sesuatu seperti itu apa yang kita sudah dilakukan dalam tahun terakhir ini berubah menjadi, meskipun pada opt-in secara opsional, sebuah kompetisi macam, dimana siswa yang menggunakan RAM kurang dan kurang waktu, siklus CPU sedikit, berakhir meluapkan ke atas sedikit papan pemimpin atau peringkat yang kita pasang di homepage kursus seperti yang kita sudah dilakukan di masa lalu. Jadi sekali lagi, benar-benar opsional, tapi ini berbicara kepada peluang desain yang depan sekali kita mulai membangun di atas beberapa blok bangunan dasar. Jadi biarkan aku kembali ke diagram ini untuk hanya beberapa saat dan mengungkapkan sedikit sesuatu yang lebih. Ini memang sebuah string, dan kami telah mengambil keuntungan dari beberapa perpustakaan, io.h standar yang memiliki - Printf. Printf, antara lain. cs50.h, yang telah mendapatkan int dan String dan sebagainya, string.h, yang memiliki str leng. Tapi ternyata itu belum ada lagi. Terus terang, ada banyak dan banyak header file yang menyatakan fungsi untuk perpustakaan, tapi ctype.h ini benar-benar akan menjadi agak menguntungkan karena aku akan untuk terus maju dan menerapkan satu Program lain di sini. Biarkan aku pergi ke depan dan membuka sesuatu Saya menulis di muka disebut capitalize.c, dan mari kita melihat bagaimana ini bekerja. Perhatikan bahwa saya menggunakan, dalam versi ini itu, tiga file akrab. Perhatikan bahwa dalam baris 18, aku mendapatkan baris teks. Perhatikan pada baris 21, aku mengklaim bahwa kode berikut akan memanfaatkan s, apa pun pengguna mengetik dalam, dan bagaimana aku melakukan itu? Yah, aku mengambil - pelajaran dari terakhir kali - Saya menyatakan i dan n dan iterasi atas karakter dalam string. Dan lalu apa blok ini kode sejalan 24 sampai 27 lakukan dalam istilah awam? Huruf kecil huruf kembali. Tepat. Jika s braket i - jadi jika ke-i karakter s, yang merupakan spesifik arang dalam string, lebih besar dari atau sama dengan huruf kecil dan - ingat bahwa ampersand ganda menandakan dan - dan karakter yang sama, s braket i, adalah kurang dari atau sama dengan huruf kecil z, itu berarti ini merupakan sebuah atau b atau c atau titik, titik, titik, atau z, yang berarti itu huruf kecil. Apa yang ingin saya lakukan dalam kasus ini? Yah, aku bisa melakukan ini agak samar, namun mari kita menggoda ini terpisah. Aku akan menelepon printf, mencetak% c karena saya ingin mencetak ulang ini karakter di layar. Saya kemudian akan mengambil s braket i, -i karakter dalam s, dan kemudian mengapa saya lakukan ini sedikit trik di sini, huruf kecil A modal dikurangi? Apa yang akan memberikan saya, secara umum? [Tak terdengar]. Tepat. Saya tidak begitu ingat - itu 65 untuk modal A. Saya tidak benar-benar ingat apa huruf kecil adalah, tapi tidak peduli. Komputer tahu. Jadi dengan mengatakan, huruf kecil minus modal A, itu aneh untuk menjadi mengurangkan satu char dari yang lain, namun apa karakter bawah tenda? Mereka hanya angka. Jadi, apa pun angka-angka itu, biarkan komputer mengingatnya daripada saya manusia. Jadi huruf kecil modal Minus adalah akan memberikan perbedaan. Itu terjadi menjadi 32, dan itu akan menjadi kasus untuk huruf kecil b dan modal B dan sebagainya. Ini tetap konsisten, untungnya. Jadi aku mengatakan pada dasarnya, mengambil huruf kecil huruf, kurangi dari yang Perbedaan standar, dan bahwa efektif perubahan s braket i dari huruf kecil untuk, tentu saja, huruf besar, tanpa saya benar-benar harus berpikir tentang atau ingat, apa yang mereka angka yang kita bicarakan ketika delapan relawan datang di panggung? Sekarang sementara itu, di lain, jika tidak huruf kecil sebagaimana ditentukan oleh garis 24, hanya mencetaknya. Saya hanya ingin menyentuh karakter yang sebenarnya awalnya huruf kecil. Jadi mari kita lihat ini. Membuat memanfaatkan. Disusun, OK. . / Memanfaatkan. Dan biarkan aku ketik di H-E-L-L-O dalam huruf kecil, Enter. Dan melihat bahwa itu dikonversi menjadi huruf besar. Biarkan aku melakukan ini lagi dengan kata yang berbeda. Bagaimana D-A-V-I-D dengan D pertama dikapitalisasi sebagai nama biasanya adalah? Enter. Perhatikan itu masih benar. Itu hanya dikeluarkan yang pertama kali D tidak berubah melalui yang lain membangun. Jadi perlu diingat, saat itu, beberapa hal di sini. Satu, jika Anda pernah ingin memeriksa dua kondisi sekaligus, Anda bisa dan mereka bersama-sama seperti yang kita prediksi. Anda dapat membandingkan karakter dengan cara ini dan efektif mengobati karakter sebagai angka, tapi terus terang, ini begitu sialan samar aku tidak akan ingat bagaimana untuk datang dengan ini dari awal tanpa penalaran melalui itu untuk waktu yang cukup sedikit waktu. Bukankah lebih baik jika seseorang di luar sana menulis sebuah fungsi yang disebut adalah menurunkan yang bisa menjawab untuk saya benar atau palsu, karakter ini adalah huruf kecil? Yah untungnya, siapa pun yang menulis ctype.h melakukan hal itu. Biarkan aku pergi di sini dan menambahkan ctype untuk c jenis, dan sekarang biarkan aku pergi di sini dan menulis ulang baris ini sebagai berikut. Jadi jika itu disebut lebih rendah, saya menyatakan, s braket i, maka aku akan menghapus dua baris sama sekali. Jadi sekarang orang lain, aku berharap, menulis fungsi yang disebut lebih rendah, dan ternyata keluar mereka lakukan dan mereka menyatakan itu dalam ctype.h. Dan sekarang aku akan meninggalkan baris 27 saja, aku akan meninggalkan garis 31 saja, tapi perhatikan betapa aku sudah diperketat kode saya. Ini sekarang bersih. Ini terlalu sulit untuk melihat melalui karena sekarang fungsi, apalagi, adalah begitu luar biasa menamakannya hanya melakukan apa yang tertulis. Jadi sekarang aku akan simpan ini. Aku akan zoom out. Dan seperti dalam Scratch Anda bisa memiliki Boolean, nilai Boolean true atau palsu, itulah apa yang menurunkan efektif kembali. Mari saya mengkompilasi ulang. Biarkan aku kembali berjalan. Dan sekarang mari kita coba lagi, H-E-L-L-O, Enter. Itu cukup bagus. Dan coba lagi, memastikan aku tidak mengacaukan sesuatu. Yang dikapitalisasi juga. Tapi ini tidak cukup baik karena Hal lain yang saya tidak akan pernah ingat kecuali aku bekerja melalui itu benar-benar hati-hati pada, katakanlah, kertas baris ini sialan. Bukankah lebih baik jika ada fungsi dipanggil untuk atas? Nah ternyata ada dalam ctype.h juga. Aku akan pergi ke depan dan ketik - membiarkan saya membawa garis itu kembali. Alih-alih ini di sini, biarkan aku pergi ke depan dan berkata, menggantikan% c hasil dari panggilan fungsi ini untuk atas pada karakter-i dari s. Dan sekarang melihat itu semakin sedikit seimbang. Saya harus melacak berapa banyak kurung Aku sudah dibuka dan ditutup. Jadi sekarang itu bahkan lebih bersih. Sekarang program ini semakin baik dan lebih baik dirancang dibilang karena itu jauh, jauh lebih mudah dibaca tapi itu tidak mari kita perbaiki. Membuat memanfaatkan. . / Memanfaatkan. H-E-L-L-O. Mari kita jalankan lagi, D-A-V-I-D. OK, jadi kita masih dalam cukup bagus bentuknya. Tapi sekarang ke atas. Saya mengusulkan bahwa ada satu lagi perbaikan kita bisa membuat yang akan benar-benar baik, yang benar-benar bisa mengencangkan up kode ini dan benar-benar memberi kita lima dari lima untuk desain, misalnya. Apa yang akan menyenangkan untuk menyingkirkan? Yah, lihat berapa lama sialan ini blok kode adalah hanya untuk melakukan sesuatu yang sederhana. Sekarang sebagai samping, karena Anda mungkin memiliki terlihat di bagian Super masa ini akhir pekan, Anda tidak benar-benar perlu kurung kurawal ketika Anda hanya memiliki satu baris kode, meskipun kami mengusulkan menjaga mereka sehingga membuat banyak lebih jelas, seperti dalam berbentuk U itu Scratch blok, apa yang di dalam cabang. Tapi tidak akan lebih baik jika ke atas, ketika diberi input, mengubahnya menjadi huruf besar jika tidak, dan apa yang akan menjadi indah dalam kasus sebaliknya jika itu sudah huruf besar? Hanya menyebarkannya melalui dan meninggalkannya sendirian. Jadi mungkin melakukan itu. Aku bisa mencoba dan hanya berharap bahwa itu tidak, tapi biarkan aku memperkenalkan satu hal lainnya. Alih-alih menggunakan terminal built-in jendela di sini, ingat bahwa ini ikon hitam persegi memberi Anda jendela terminal besar yang saya bisa penuh layar jika saya ingin? Jadi ternyata mereka semacam aneh bernama, tapi ada hal-hal yang disebut man, halaman manual, pria untuk jangka pendek, dan saya dapat mengakses dengan mengetikkan man - apa yang saya ingin mengetik? Man ke atas. Dan sekarang melihat jika terdapat berfungsi dalam komputer, di hal ini alat, yang hanya sistem operasi Linux, itu akan untuk memberikan satu set yang agak samar output, tetapi Anda akan menemukan selama waktu itu selalu diformat cukup banyak sama sehingga Anda mulai terbiasa untuk itu. Perhatikan di bagian atas untuk bagian atas, dan ternyata adalah dokumentasi yang sama untuk menurunkan. Siapa pun yang menulis itu memotong beberapa sudut dan menempatkan semuanya dalam satu halaman. Tujuan-hal 'di hidup adalah untuk mengkonversi surat kepada atas atau huruf kecil. Perhatikan bahwa di bawah Sinopsis, halaman manual mengajar saya apa file saya untuk menyertakan menggunakan hal ini. Ini memberi saya tanda tangan untuk ini fungsi, keduanya, bahkan meskipun kami sekarang hanya peduli satu. Berikut ini adalah deskripsi sekarang. Untuk mengkonversi atas surat c ke huruf jika mungkin. Masih tidak instruktif, tapi biarkan aku sekarang lihat di bawah nilai kembali, hal itu diserahkan kembali. Jadi nilai yang dikembalikan adalah bahwa dari Surat dikonversi atau c jika konversi itu tidak mungkin. Apa c? Karakter asli. Karakter asli dan kita tahu bahwa dengan, sekali lagi, naik ke sinopsis, dan siapa pun yang menulis ini Fungsi hanya memutuskan bahwa input untuk ke atas dan ke bawah hanya sewenang-wenang akan dipanggil c. Mereka bisa menyebutnya apa yang paling yang mereka inginkan, tetapi mereka tetap sederhana seperti c. Jadi saya sudah berkonsultasi halaman manual. Kalimat ini meyakinkan saya bahwa jika itu bukan huruf kecil, itu akan hanya memberikan kembali c, yaitu sempurna, yang berarti saya bisa menyingkirkan Kondisi lain saya. Jadi biarkan aku kembali ke gedit, dan sekarang saya hanya melakukan ini. Aku akan menyalin pernyataan printf saya. Aku akan pergi ke depan dan tepat di dalam untuk loop cetak yang keluar, dan mendapatkan Singkirkan sekarang keseluruhan ini jika membangun. Apakah bukan ide yang buruk, dan itu sangat banyak benar dan konsisten dengan semua yang kita sudah diberitakan, tetapi hanya tidak diperlukan. Segera setelah Anda menyadari beberapa perpustakaan Fungsi ada bahwa orang lain menulis, atau mungkin Anda tulis di tempat lain di file, Anda dapat menggunakannya dan benar-benar mulai memperketat kode. Dan ketika saya mengatakan hal-hal seperti gaya yang baik, fakta bahwa orang ini disebut berfungsi untuk bagian atas, atau yang sebelumnya adalah rendah mengagumkan berguna karena mereka sangat deskriptif. Anda tidak ingin untuk memanggil fungsi Anda x dan y dan z, yang memiliki banyak, apalagi makna. Setiap pertanyaan tentang seri yang perbaikan? Jadi cukup untuk mengatakan salah satu takeaways bahkan sebagai masalah Anda sendiri set - mungkin masalah set satu, tapi tentu P mengatur dua dan seterusnya, bahkan ketika mereka sedang benar tidak selalu berarti mereka sempurna hanya belum atau khususnya yang dirancang dengan baik. Itulah sumbu lain untuk mulai berpikir tentang. Jadi ini di dalam string Anda memori komputer, tetapi jika Anda memiliki Seluruh sekelompok karakter seperti H-E-L-L-O dalam RAM, dan anggaplah bahwa Anda dalam program anda memanggil mendapatkan tali beberapa kali sehingga Anda sebut mendapatkan tali sekali, maka Anda sebut mendapatkan tali lagi. Nah, apa yang akan terjadi dari waktu ke waktu? Dengan kata lain, jika Anda memiliki garis kode, meskipun di luar konteks, seperti string s mendapat - mari kita lakukan ini. String name sama mendapatkan tali. Jadi misalkan bahwa baris kode yang dimaksud untuk meminta pengguna untuk nya atau namanya. Ini baris berikutnya kode dimaksudkan untuk meminta pengguna untuk nya atau sekolah, dan ini baris berikutnya, dan sebagainya. Misalkan kita terus bertanya pengguna yang lain dan dan lain lain tali. Mereka akan tinggal di memori pada waktu yang sama. Salah satunya adalah tidak akan mengalahkan yang lain. Sekolah tidak menimpa yang lain. Tapi di mana melakukan mereka semua berakhir di memori? Nah, jika kita mulai menggambar pada layar, yang dapat kita gunakan hal ini di sini seperti papan tulis, jika hitam ini persegi panjang merupakan komputer saya memori, aku akan mulai sewenang-wenang membaginya ke dalam kotak kecil, yang masing-masing mewakili satu byte memori. Terus terang, jika Anda memiliki gigabyte RAM hari ini, Anda memiliki milyar byte memori di komputer Anda, sehingga satu miliar kotak ini. Jadi cukup untuk mengatakan, ini tidak benar-benar untuk skala. Tapi kita bisa terus menggambar semua ini jelas tidak untuk skala kotak, dan ini kolektif mewakili memori komputer saya. Sekarang kita hanya akan melakukan titik, titik, titik. Jadi dengan kata lain, ketika saya sekarang meminta pengguna dengan get string untuk memberi saya String, apa yang terjadi? Jika jenis pengguna dalam "halo," yang berakhir di H-E-L-L-O. Tapi misalkan pengguna maka jenis di - sebenarnya, aku tidak seharusnya dilakukan halo karena kami meminta mereka untuk nama mereka. Jadi mari kita kembali jika saya bisa melakukan ini. Jadi jika saya ketik D-A-V-I-D untuk nama saya, tapi ingat bahwa baris kedua kode yang mendapatkan tali lagi untuk mendapatkan sekolah mereka. Dimana kata itu bahwa pengguna jenis dalam akan pergi selanjutnya? Yah, mungkin itu akan masuk ke H-A-R-V-A-R-D. Jadi meskipun saya sudah ditarik sebagai dua baris, ini hanya sejumlah besar byte Anda RAM komputer. Ada masalah sekarang karena sekarang jika saya menggunakan RAM dalam hal ini sangat wajar tapi semacam cara yang naif, apa yang bisa Anda tidak tampaknya membedakan? Di mana orang mulai dan di mana salah satu ujungnya, kan? Mereka jenis kabur bersama-sama. Jadi ternyata komputer tidak melakukan hal ini. Biar benar-benar gulir kembali dalam waktu beberapa karakter, dan bukannya Harvard akan segera setelah nama pengguna, pengguna benar-benar mendapatkan, di belakang adegan, karakter khusus dimasukkan oleh komputer baginya. / 0, atau dikenal sebagai karakter nul mengganggu yang disebut N-U-L, tidak N-U-L-L, tapi Anda menulis sebagai / 0. Hanya saja semua bit nol adalah penanda dalam antara kata pertama yang pengguna diketik dan kedua. Jadi Harvard benar-benar sekarang berakhir sebagai urutan karakter dan satu lagi / 0. Jadi dengan kata lain, dengan memiliki ini nilai sentinel, delapan nol bersebelahan bit, Anda sekarang dapat mulai untuk membedakan satu karakter dari yang lain. Jadi selama ini apa yang "halo" adalah sebenarnya "halo" dengan / 0, dan Sementara itu, ada mungkin sangat baik cukup sedikit lebih RAM dalam komputer. Biarkan aku melakukan satu hal lain sekarang. Ternyata bahwa semua kotak ini kami telah menggambar, mereka, ya, string, namun secara umum, hal-hal ini array. Array adalah hanya sepotong memori itu kembali ke belakang untuk kembali ke belakang, dan Anda biasanya menggunakan sebuah array dengan cara notasi ini braket persegi. Jadi kita akan melihat ini cukup sedikit dari waktu ke waktu, tapi biarkan aku pergi ke depan dan membuka, sebut saja usia. Dan perhatikan apa yang bisa kita lakukan dengan ini trik yang sama, sedikit sedikit lebih sintaks sini. Jadi sejalan 17 dari program ini - sebenarnya, biarkan aku menjalankan program pertama sehingga kita dapat melihat apa hal ini tidak. Biarkan saya sebut membuat usia untuk mengkompilasi program ini. . / Usia. Berapa banyak orang berada di ruangan? Sebut saja tiga. Usia orang pertama? 18, 19, dan 20. Dan sekarang agak ridiculously, saya hanya telah membuat sebuah program yang usia mereka tiga orang. Jadi jelas ada kesempatan untuk beberapa menyenangkan aritmatika sini. Untungnya, matematika benar. 18 pergi ke 19, 19 pergi 20 dan sebagainya. Tapi apa yang benar-benar dimaksudkan untuk menjadi ilustrasi di sini adalah bagaimana kita menyimpan usia tiga orang. Biarkan aku memperbesar pada apa terjadi di sini. Jadi pertama, beberapa baris pertama harus akan mendapatkan cukup akrab. Aku hanya mendorong pengguna untuk jumlah orang di dalam ruangan. Lalu aku menggunakan mendapatkan int dan dilakukan sementara untuk melakukan ini lagi dan lagi dan lagi. Kami telah melihat pola yang sebelumnya, tapi baris 27 adalah baru dan benar-benar cukup berguna, dan akan menjadi semakin berguna. Perhatikan bahwa apa yang berbeda di baris 27 adalah bahwa saya tampak mendeklarasikan int disebut usia, tapi tunggu. Ini bukan hanya int usia. Ada ini kurung siku, dalam yang n. Jadi braket n dalam konteks ini, tidak dalam pernyataan printf sini tapi dalam hal ini satu-satunya baris 27, baris ini mengatakan, beri aku n ints, yang masing-masing adalah tipe int. Jadi ini adalah ember, sehingga untuk berbicara, dari, dalam kasus ini, tiga bilangan bulat kembali ke kembali ke belakang sehingga saya efektif memiliki tiga variabel. Alternatif, menjadi jelas, akan ini. Jika saya ingin siswa pertama usia, saya mungkin melakukan hal ini. Jika saya ingin siswa kedua itu Usia Saya mungkin melakukan hal ini. Jika saya ingin siswa ketiga usia, saya mungkin melakukan hal ini. Dan Allah melarang kita perlu semua orang usia di ruangan ini - Maksudku, ini adalah heck of a banyak copy, tempel lagi dan lagi dan lagi. Dan ditambah setelah saya mengkompilasi program ini, jika siswa lain berjalan di atas keluar dari pintu itu, sekarang nomor saya variabel tidak benar. Jadi apa yang bagus tentang array adalah sebagai Begitu Anda mulai merasa diri copy dan paste, kemungkinan besar itu bukan pendekatan yang terbaik. Array adalah dinamis berpotensi. Saya tidak tahu sebelumnya berapa banyak orang akan berada di dalam ruangan, tapi saya tahu saya harus n dari mereka, dan aku akan mengetahui n ketika saatnya tiba. Baris kode ini sekarang berarti, beri saya sepotong memori yang terlihat seperti ini dimana jumlah kotak pada layar sepenuhnya tergantung pada n yang pengguna diketik masuk Jadi sekarang sisa dari program ini adalah sebenarnya cukup mirip dengan apa yang kita hanya melakukan dengan karakter. Perhatikan Aku punya untuk loop dimulai pada baris 30. Jadi setelah saya mendapatkan array, saya iterate dari y sama dengan nol pada hingga n. Aku hanya punya ini instruktif printf pesan hanya mengatakan, memberi saya umur orang #% i, jadi nomor satu, nomor dua, nomor tiga. Dan kenapa saya melakukan ini? Terus terang, manusia lebih memilih untuk menghitung dari satu ke atas sedangkan ilmuwan komputer, nol ke atas. ilmuwan komputer tidak akan menggunakan program semacam ini, jadi kita akan hanya mulai menghitung di salah satu seperti orang normal. Dan sekarang sejalan 33, perhatikan sedikit bagian yang berbeda dari sintaks. -I usia dalam variabel jenis array akan mendapatkan int. Dan sekarang akhirnya, ini hanya aritmatika di sini. Aku memutuskan dalam loop terpisah untuk mengklaim beberapa waktu berlalu, dan sekarang dalam lingkaran terpisah, garis-garis ini mengeksekusi. Satu tahun dari sekarang, orang saya akan saya th, tetapi pemberitahuan ini tidak variabel i. Sekarang ini adalah% i untuk int. Dan pemberitahuan sebagai placeholder pertama, saya plug in i ditambah 1, jadi kami menghitung seperti orang normal. Dan kemudian untuk nilai usia mereka, untuk lama saya tahun, saya mengambil usia braket i - dan mengapa aku melakukan ditambah satu di sini? Mereka hanya berusia. Ini adalah pilihan bodoh saya program. Mereka hanya berusia satu tahun. Saya bisa mengetik dalam jumlah yang Aku benar-benar ingin di sana. Jadi apa sebenarnya semua relevansi di sini? Nah, biarkan aku benar-benar kembali gulir di sini dan melukis gambar apa yang ada di depan. Apa yang kita akan lakukan dengan kami berikutnya Masalah Set Dua yang berkecimpung dalam dunia kriptografi. Jadi ini adalah string karakter, sehingga urutan beberapa karakter, dan apa artinya ini? Ini bukan dalam versi online dari slide. Jadi saya mengklaim bahwa ini sama dengan ini, iklan bodoh dari bertahun-tahun lalu yang mungkin benar-benar ingat salah satu asal-usulnya. Jadi, ini adalah contoh dari enkripsi atau kriptografi. Ternyata bahwa jika Anda ingin sebenarnya mengirimkan informasi atau berbagi informasi dengan seseorang aman, seperti pesan seperti ini, Anda dapat mengacak huruf. Tapi biasanya, kata-kata yang tidak perlu diacak acak. Mereka permuted dalam beberapa cara atau diubah dalam beberapa cara sehingga - oops. Itu menyenangkan spoiler untuk waktu berikutnya. Jadi, Anda dapat memetakan apa yang tampaknya O ke B. Perhatikan bahwa berbaris kapitalisasi-bijaksana. Rupanya r menjadi e. Rupanya F-H-E-R menjadi S-U-R-E. Jadi ternyata ada pemetaan, dan kasus ini ada cukup bodoh pemetaan apakah ada yang tahu itu? Ini adalah sesuatu yang disebut Rot 13, Putar 13. Ini adalah terbodoh enkripsi mekanisme karena benar-benar hanya menambahkan 13 untuk setiap satu dari surat-surat, bodoh dalam arti bahwa jika Anda hanya memiliki sedikit waktu luang di tangan Anda dan pensil, atau Anda hanya berpikir itu melalui di kepala Anda, Anda bisa mencoba semua tambahan mungkin - satu, dua, tiga, titik, titik, titik, 25 hanya memutar seluruh alfabet, dan akhirnya, Anda akan mengetahui pesan apa ini. Jadi jika Anda melakukan sesuatu seperti ini di sekolah dasar lewat pesan ke sahabat, jika sekolah dasar Anda guru hanya membaca melalui pesan dan brute memaksa solusi, Anda mungkin mendapatkan jawaban dengan itu. Sekarang tentu saja, di dunia nyata, kriptografi yang lebih canggih. Ini adalah potongan teks dari sistem komputer yang memiliki username dan password, karena hampir semua dari kita lakukan, dan ini adalah apa kata sandi Anda mungkin terlihat seperti jika disimpan pada hard Anda drive tetapi dalam bentuk terenkripsi. Ini bukan hanya rotasi huruf, A adalah B dan B adalah C. Ini jauh lebih canggih, tetapi menggunakan apa yang umumnya dikenal sebagai kunci rahasia kriptografi. Gambar ini menceritakan berikut cerita dengan beberapa ikon. Di sebelah kiri, kita memiliki apa yang kita akan menyebutnya teks biasa. Dalam dunia kriptografi, polos teks hanya pesan asli ditulis dalam bahasa Inggris atau Perancis atau bahasa apapun. Jika Anda ingin mengenkripsi, kita akan lulus itu pictorially melalui gembok, sehingga beberapa jenis algoritma, beberapa fungsi atau program yang seseorang menulis yang mengacak huruf mudah-mudahan lebih complicatedly dari sekedar menambahkan 13 untuk masing-masing. Apa yang Anda dapatkan dari proses yang di tengah ada disebut cyphertext. Jadi semacam kata seksi. Itu hanya berarti itu dienkripsi versi teks biasa. Dan hanya jika Anda memiliki rahasia yang sama, 13 atau minus 13, apakah Anda dapat mendekripsi pesan seperti itu. Jadi pada Soal Set Dua, antara hal-hal akan Anda lakukan jika dalam Hacker Edition, Anda harus menulis kode untuk crack password tersebut, mencari tahu apa mereka dan bagaimana mereka dienkripsi, meskipun kami memberi Anda sedikit bimbingan sepanjang jalan. Dalam Edisi Standar, kami memperkenalkan beberapa cipher, enkripsi mekanisme, yang disebut Caesar, satu disebut Vigenere, yang masih cipher rotasi di mana A menjadi sesuatu, B menjadi sesuatu, tapi Anda harus melakukannya pemrograman karena memang akan menjadi rahasia kunci yang terlibat yang biasanya nomor atau kata kunci yang hanya pengirim dan penerima tersebut pesan harus memahami. Sekarang, ini sebenarnya memiliki inkarnasi di dunia nyata. Ini, misalnya, sedikit yatim Rahasia cincin decoder Annie, dan Anda benar-benar dapat menerapkan ini rotasi cipher - A menjadi sesuatu, B menjadi sesuatu - dengan beberapa roda, satu di luar, satu di dalam sehingga jika Anda memutar roda atau cincin, Anda benar-benar dapat berbaris huruf dengan huruf yang berbeda, mendapatkan kode rahasia. Dan sebagai cliffhanger untuk hari ini, apa yang saya pikir saya akan lakukan adalah sedikit throwback bahwa jika Anda menyalakan TV pada tanggal 24 Desember, Anda dapat menonton nauseum iklan film 24 jam berturut-turut. Tapi untuk hari ini, saya akan membukanya di sini dan memberi kita hanya dua menit dari Christmas Story pedagogis yang relevan dengan sesama kecil bernama Ralphie. [VIDEO PEMUTARAN] -Jadilah itu diketahui segala-galanya bahwa Ralph Parker dengan ini menunjuk anggota Little Orphan Annie rahasia lingkaran dan berhak atas semua penghargaan dan manfaat terjadi hal tersebut. -Ditandatangani di Little Orphan Annie. Ditandatangani, Pierre Andre dalam tinta. Honors dan manfaat sudah pada usia sembilan. [BERTERIAK PADA RADIO] Ayo, mari kita dengan itu. Aku tidak butuh semua itu jazz tentang penyelundup dan bajak laut. Dengar-besok malam untuk menyimpulkan petualangan hitam kapal bajak laut. Sekarang, saatnya untuk Secret Annie Pesan untuk Anda anggota dari lingkaran rahasia. Ingat, anak-anak. Hanya anggota Annie Rahasia Lingkaran dapat memecahkan kode pesan rahasia Annie. Ingat, Annie tergantung pada Anda. Set pin ke B2. Berikut adalah pesan. 12, 11, 2 - -Saya dalam pertemuan rahasia pertama saya. -25, 14, 11, 18, 16 - -Pierre berada di suara besar malam ini. Aku tahu pesan itu malam ini benar-benar penting. -3, 25. Itulah pesan dari Annie dirinya. Ingat, jangan bilang siapa-siapa. -90 Detik kemudian, aku di kamar hanya di rumah di mana anak laki-laki sembilan bisa duduk di privasi dan decode. Aha, B. Aku pergi ke yang berikutnya. E. Kata pertama adalah "menjadi." S. Itu datang lebih mudah sekarang. U. 25. Itu R. -Ayolah, Ralphie. Aku harus pergi. -Aku akan segera turun, Ma. Jagoan Gee. -T. O. Pastikan untuk. Pastikan untuk apa? Apa Sedikit Orphan Annie coba katakan? Pastikan untuk apa? -Ralphie, Randy telah harus pergi. Maukah Anda keluar? -Baiklah, Ma. Aku akan segera keluar. -Aku semakin dekat sekarang. Ketegangan itu mengerikan. Apa itu? Nasib planet mungkin menggantung di keseimbangan. -Ralphie, Randy harus pergi. -Aku akan keluar untuk menangis dengan suara keras. -Hampir sana. Jemariku terbang. Pikiranku adalah perangkap baja. Setiap pori bergetar. Itu hampir jelas. Ya, ya, ya, ya, ya. -Pastikan untuk minum Ovaltine Anda. Ovaltine? Sebuah payah komersial? Bajingan. [END VIDEO PEMUTARAN] SPEAKER 1: Ini adalah CS50, dan bahwa akan Soal Set Dua. Sampai jumpa minggu depan. SPEAKER 2: Pada berikutnya CS50, hal ini terjadi. SPEAKER 1: Jadi satu topik kita belum melihat sejauh ini bahwa fungsi pointer. Sekarang, fungsi pointer hanya alamat publik fungsi, tetapi banyak seperti - anak seorang -