[MUSIC PLAYING] DAVID Malan: Baiklah. Ini CS50, dan ini adalah akhir minggu 2. Aku sangat menyesal saya tidak bisa sana dengan Anda semua hari ini, tetapi Anda berada di tangan yang sangat baik. Izinkan saya untuk memperkenalkan CS50 sendiri Rob Bowden. ROB Bowden: Dan tentu saja, maka kita harus membuat menyenangkan dari fakta bahwa ia mengirimkan vertikal video dan menunjukkan ini. [VIDEO PLAYBACK] [MUSIC PLAYING] [Jejak] Video -Ini tidak harus mencari cara ini. Ini bisa dicegah. Katakan tidak untuk video vertikal. Video -Vertical terjadi ketika Anda memegang kamera Anda dengan cara yang salah. Video Anda akan berakhir tampak seperti omong kosong. - [Grunt] -Ada Semakin banyak orang kecanduan untuk membuat video vertikal setiap hari. Ini tidak retak atau tidak, tapi masih benar-benar buruk. Ada dua macam orang-orang yang menderita VVS. Kelompok pertama memperlakukan video mereka menembak seperti gambar. Mereka tidak bermaksud jahat. Mereka hanya tidak mengerti bahwa sementara Anda dapat mengubah gambar, Anda tidak dapat benar-benar mengubah video. [CRASH] - [MONKEY SOUNDS] -The Kelompok lain adalah orang yang tidak memberikan [bip]. Sindrom Video -Vertical berbahaya. Gambar gerak memiliki selalu horisontal. Televisi adalah horisontal. Layar komputer horisontal. Mata orang-orang yang horisontal. Kami tidak dibangun untuk menonton video vertikal. -Saya Suka video vertikal. -Tidak ada yang peduli tentang Anda. -Jika Masalah ini dibiarkan, Anda juga akan mulai menunjukkan empat video sekaligus hanya untuk menghemat bandwidth. Video vertikal -Letterboxed akan menjadi ukuran perangko. -dan Akan menyebar kemana-mana. Layar film memiliki selalu horisontal. Jika video vertikal menjadi diterima, bioskop akan harus tinggi dan kurus. -dan Semua bioskop akan harus mendapatkan dirobohkan dan dibangun kembali. Dan pada saat mereka dibangun kembali, Mila Kunis akan tua dan jelek. -Birds Akan menabrak mereka dan mati. -Kita Akan semua mendapatkan kaku leher dari mencari. -dan Tidak ada yang akan duduk di barisan depan lagi. -George Lucas akan merilis ulang Bintang Wars again-- edisi kurus. -Aku Tidak pernah benar-benar bisa mengatakan cerita yang saya ingin mengatakan. Ini adalah kesempatan besar bagi saya untuk bereksperimen dengan teknologi baru. -Anda brengsek. -Setiap Kali perangkat mobile yang digunakan untuk merekam video, godaan yang ada. Katakan saja tidak. Katakan tidak untuk George Lucas. Katakan tidak untuk tua Mila Kunis. Katakan tidak untuk video vertikal. -dan Jika Anda melihat seseorang melakukannya, mengatakan, "Anda tidak menembak yang bodoh benar!" [MUSIC PLAYING] [END PLAYBACK] [Tepuk Tangan] [AUDIO OUT] ROB Bowden: --simple bentuk kriptografi, yang pada dasarnya adalah enkripsi dan dekripsi dari pesan rahasia. Jadi di sini kita memiliki mainan yang sangat sederhana. Dan idenya adalah cincin luar berputar di sekitar cincin bagian dalam. Dan Anda dapat melihat, mungkin jika aku tampilannya di, itu-- sulit untuk melihat. Tapi, seperti, nomor 1-- baik, yang bergerak. Nomor 1 peta ke surat X, nomor 2 peta untuk surat J. Sangat sulit tidak melompat ke depan. Surat 2 peta untuk J. Nomor 3 peta ke D. Jadi dengan cincin ini Anda dapat memberikan seseorang pesan 1, 2, 3. Untuk beberapa alasan Anda ingin memberitahu mereka XJD. Tapi Anda bisa memberi mereka beberapa pesan dari nomor, dan selama mereka memiliki cincin ini, mereka dapat mendekripsi apa yang Anda katakan. Jadi Anda mungkin telah melihat ini contoh khusus dari kriptografi sebelumnya jika di sekitar musim Natal Anda telah menyaksikan A Christmas Story. Jika Anda belum pernah melihat sebelumnya, maka hanya menyalakan TBS di harfiah setiap saat pada malam Natal, karena mereka hanya menunjukkan kembali ke belakang untuk kembali untuk kembali ke belakang sepanjang hari. Dan video yang relevan ini. [VIDEO PLAYBACK] -Jadilah Itu diketahui segala-galanya bahwa Ralph Parker dengan ini ditunjuk sebagai anggota Little Orphan Annie Rahasia Lingkaran dan berhak atas semua penghargaan dan manfaat yang terjadi padanya. Menandatangani Sedikit Orphan Annie. Ditandatangani Pierre Andre tinta! Honors dan manfaat sudah pada usia sembilan! [BERTERIAK DARI RADIO] -Ayolah. Mari kita langsung saja. Saya tidak perlu semua jazz yang tentang penyelundup dan bajak laut. -Dengarkan Besok malam dengan petualangan penutup Black Pirate Ship. Sekarang, saatnya untuk Pesan rahasia Annie untuk Anda anggota Rahasia Lingkaran. Ingat anak-anak, hanya anggota Annie Rahasia Lingkaran dapat memecahkan kode pesan rahasia Annie. Ingat, Annie tergantung pada Anda. Mengatur pin untuk B2. Berikut adalah pesan. 12. 11. 2. -Aku Di pertemuan rahasia pertama saya. -25. 14. 11. 18. 16. Oh, Pierre adalah besar malam ini suara. Saya bisa mengatakan bahwa malam ini Pesan itu benar-benar penting. -3. 25. Itu pesan dari Annie dirinya. Ingat, jangan bilang siapa-siapa. Detik -Lima kemudian, aku di satu-satunya kamar di rumah di mana anak laki-laki dari 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. -Ayo, Ralphie! Aku harus pergi! -aku Akan segera turun, Ma! Wah. T. O. "Pastikan untuk" - pastikan untuk apa? Apa Sedikit Orphan Annie mencoba untuk mengatakan? Pastikan untuk apa? -Randy Telah harus pergi! Maukah Anda keluar? -Semua Benar, ibu! Aku akan keluar benar! Aku semakin dekat sekarang. Ketegangan itu mengerikan. Apa itu? Nasib planet mungkin menggantung di keseimbangan! -Ralphie, Randy harus pergi! -aku Akan keluar, menangis dengan suara keras! Hampir sampai! Jari saya terbang. Pikiran saya adalah perangkap baja. Setiap pori bergetar. Itu hampir jelas! Iya nih. Iya nih. Iya nih. Iya nih. Pastikan untuk minum Ovaltine Anda. Ovaltine? Sebuah iklan payah? Dasar bajingan. [END PLAYBACK] ROB Bowden: Jadi itulah bagaimana Ovaltine berhubungan dengan kriptografi. Pada dasarnya CS50 hanya diiklankan Ovaltine, sehingga kami bisa menjadi komersial payah untuk Ovaltine. Baiklah. Jadi sekarang ilmu komputer yang sebenarnya. Ingat, Senin kami tinggalkan menyelam lebih dalam string. Jadi kita berurusan dengan string "Zamyla." Dan kami mengakui fakta bahwa kita dapat mengobati "Zamyla" sebagai urutan karakter. Dan ingat bahwa kita pelajari notasi braket. Jadi jika ini disimpan dalam sebuah string "s", maka jika kita mengatakan s braket 0, yang akan menunjukkan Z. modal surat Dan jika kita mengatakan s braket 1, yang akan menunjukkan pertama huruf kecil a, dan seterusnya sampai s braket 5, yang akan menunjukkan yang terakhir. Sekarang ingat bahwa panjang string ini adalah 6, tetapi indeks ke dalam string yang 0 sampai 5, Z melalui itu bertahan. Jadi sekarang ini cocok menjadi gambaran yang lebih besar memori komputer Anda, RAM Anda. Jadi di suatu tempat program yang Anda menjalankan komputer Anda perlu ingat Zamyla di suatu tempat di memori. Jadi bisa saya memiliki seorang sukarelawan? Ya silahkan. Dan siapa nama Anda? DEAN: Dean. ROB Bowden: Dean? Senang bertemu Anda, Dean. Jadi datang ke sini, dan kita akan memiliki Anda menggambar pada tata letak bagus bagus kami memori. Sekarang saya suka berpikir tentang memori sebagai salah satu strip panjang byte, tapi hanya untuk tujuan tampilan kita akan hanya kiri ke kanan, atas ke bawah. OKE? Jadi aku akan menunjukkan program-- Getstrings.c. Dan sehingga semua program ini adalah lakukan adalah meminta empat senar dari pengguna dengan GetString dan kemudian cetak apa yang string pertama masuk adalah. Kami mengabaikan dua melalui empat. OKE. Jadi di sini sekarang-- saat Saya pertama kali s1 permintaan. Jadi Anda komputer. Dan Anda menerapkan GetString. Jadi Anda meminta string dari saya, dan saya katakan, OK, Dean. Berikan string "Dean." Jadi di suatu tempat di memori Anda harus ingat "Dean." Jadi menulis ke memori di suatu tempat. Sempurna. OKE. Jadi sekarang kita telah s2. Dan s2 akan menjadi permintaan untuk GetString. Jadi saya akan masuk ke string. Aku akan masuk "Hannah." Jadi masukkan "Hannah" suatu tempat ke dalam memori. Ya. A-H. OK, jadi sekarang s3. Dan itu akan menjadi lain meminta untuk GetString. Dan sekarang masukkan "Maria." Baiklah. Dan kemudian ada yang terakhir permintaan untuk GetString, S4. Jadi, saya tidak tahu. Bagaimana kalau kita pergi dengan antidisestablishmentarianism. Jadi masukkan itu ke dalam memori. Ya. Jadi hanya melakukan "Rob." OKE. Jadi sekarang explain-- mengapa Anda meninggalkan ruang ini? Mengapa Anda memiliki ini kosong ruang di sini, sini, dan di sini? Iya nih. Jadi perhatikan ketika saya pergi untuk mencetak s1-- jadi jika kita memiliki "Hannah" berjalan tepat di samping "Dean," bagaimana kita tahu kapan string "Dean" berakhir? Jadi mencetak string s1 mungkin memiliki hanya dicetak "DeanHannahMariaRob" jika tidak memiliki petunjuk apapun ketika "Dean" benar-benar berakhir. Baiklah. Jadi dalam memori cara kita benar-benar mewakili akhir ini string adalah dengan backslash nol. Jadi ruang ini adalah apa yang kita inginkan. Ini harus menjadi backslash nol. Ini akan menjadi backslash nol, dan ini akan menjadi backslash nol. Dan Anda dapat memiliki hadiah yang luar biasa untuk menjadi relawan yang sempurna. Mengambil bola stres! OKE. Jadi ini backslash karakter nol bagaimana kita menunjukkan akhir dari string. Ini bagaimana ketika suatu program ingin mencetak string, itu how-- ingat kita pelajari fungsi strlen minggu lalu? Panjang string? Ini adalah cara panjang string mampu menentukan berapa lama sebuah string. Itu hanya terus iterasi atas karakter sampai menemukan backslash karakter nol. Jadi hal penting untuk menyadari tentang karakter backslash nol adalah itu diwakili oleh semua nol dalam bit. Jadi perhatikan bahwa ini berbeda dari karakter nol. Jadi karakter nol, jika Anda ingat dalam contoh yang ia berikan di akhir kuliah di mana karakter map to-- seperti modal A peta ke 65. Huruf kecil peta untuk 97. Huruf kecil b akan 98. Jadi angka 0 peta to-- saya tidak tahu dari atas kepala saya. 44 atau 45. Di suatu tempat di daerah itu. Jadi karakter 0 adalah jumlah aktual. Tapi nol backslash peta semua nol bit. Jadi ada perbedaan antara backslash nol, yang kita sebut null terminator. Ada perbedaan antara backslash nol dan karakter nol. Baiklah. Jadi berbicara lebih banyak tentang string. Jadi kita lihat di sini ini adalah bagaimana itu akan diletakkan dalam memori. Jadi ide ini dari string sebagai urutan dari characters-- sehingga komputer resmi Istilah sciency untuk urutan array. Jadi kita akan memanggil string array karakter. Dan sebenarnya ada data lain jenis yang bisa kita buat array dari. Jadi untuk memotivasi ini, lihat contoh. Kita akan menyebutnya ages0.c aku akan copy dan paste template kita. OKE. Jadi dalam program ini apa yang kita ingin lakukan adalah mengambil usia dari tiga siswa dalam kursus. Jadi kita tahu int age-- dan sekarang aku akan mengatakan 0. Jadi, Anda mungkin ingin mengatakan age1, tapi untuk tujuan kita akan melihat sangat lama, Aku akan mengatakan int age0 sama getInt. Jadi panggilan yang sama untuk getInt bahwa kita telah menggunakan I tidak kebetulan mendorong mengatakan, "beri aku zaman." Tapi memintanya. Dan age1 sama getInt. Dan int age2 sama getInt. Jadi, sekali lagi, tiga mahasiswa, tapi akhirnya indeks variabel adalah age0 melalui age2. OKE. Jadi program ini akan melakukan apa pun kami ingin dengan age0, age1, dan age2, namun program ini akhirnya bekerja selama tiga siswa. OKE. Jadi sekarang bagaimana jika saya ingin empat siswa? Nah, aku akan harus kembali ke dalam kode saya, mengubah komentar, dan sekarang kami memiliki int age3 sama getInt. OKE. Jadi yang melihat masalah di sini? Apa masalahnya dengan semacam ini setup? Ya. Ya. Jadi kita menciptakan variabel untuk setiap siswa. Sekarang yang bekerja, tetapi akhirnya bagaimana jika saya sekarang mengatakan, "Saya ingin mengambil usia delapan siswa atau 16 siswa atau namun banyak siswa dari ratusan siswa di CS50 atau ribuan mahasiswa di kampus atau miliaran orang di dunia? Jadi akhirnya ini tidak berkelanjutan. Setiap kali Anda melihat diri Anda menyalin dan menyisipkan kode seperti ini, biasanya Anda harus merasa bahwa ada cara yang lebih baik. Jadi ini adalah di mana kami memperkenalkan deklarasi array. Jadi, ketika Anda mendeklarasikan array, ini adalah apa format umum akan terlihat seperti. Kami akan mengatakan jenis. dan kemudian kita akan memberikan nama array itu, sama seperti kita mendefinisikan setiap variabel diberikan. Dan akhirnya kita menggunakan notasi braket ini lagi tetapi dalam konteks yang berbeda dari bagaimana kami menggunakannya sebelumnya. Jadi di sini ini tampak seperti normal deklarasi variabel yang kita lihat. Jadi kita lihat int x semi-colon sebelumnya. Nah sekarang kita mungkin melihat sesuatu seperti int x kurung 5. Dan menempatkan ide ini ke dalam Program getInt bahwa kita have-- sehingga kita dapat menerapkan ini dengan cara yang sama. Katakanlah di CS kita cenderung menggunakan n sebagai jumlah sesuatu. Jadi di sini kita akan menyimpan empat siswa. Dan sekarang kita dapat mengatakan int usia braket tidak n-- cukup mendapatkannya yet-- untuk mendeklarasikan array dari empat mahasiswa. Jadi bagaimana ini akan terlihat di memori akan mirip dengan ini. Jelas ini. Dan kita akan memiliki suatu tempat di memory-- Aku akan menaruh ini di sana. Jadi di suatu tempat di memori. Satu dua tiga empat. Kami memiliki empat bilangan bulat berturut-turut untuk array ini empat bilangan bulat. Jadi, saat ini, apa yang ukuran satu kotak-kotak ini? Ya. Ini empat byte. Ini 32 bit. Jadi sekarang ini berbeda dari array yang kita lihat sebelumnya, array karakter. Dalam string setiap kotak hanya satu byte, karena karakter hanya satu byte. Tapi dengan sebuah array bilangan bulat, masing-masing box harus empat byte dalam rangka untuk menyesuaikan seluruh integer. Jadi ini adalah apa array empat int akan terlihat seperti. Dan kemudian kembali ke kode. Sekarang kita ingin benar-benar toko bilangan bulat ke dalam array itu. Jadi sekarang ini adalah sangat, sangat, sangat umum pola yang akan di beberapa titik menjadi memori otot. Jadi int i sama dengan 0. i kurang dari n. i plus plus. Kelompok usia saya sama getInt. Jadi ini untuk loop, format ini, Anda harus mendapatkan sangat digunakan untuk. Jadi ini umumnya bagaimana kita akan iterate atas hampir semua array. Sekarang perhatikan semacam ini menjelaskan mengapa dari awal kita tidak memiliki untuk loop terjadi untuk int i sama dengan 1, i kurang dari atau sama dengan 10. Alasannya adalah bahwa mulai dari nol membuat pekerjaan ini dengan baik dengan array. Jadi array adalah nol diindeks. Jika array ini adalah panjang 4, indeks adalah 0 sampai 3. Jadi melalui pertama iterasi ini untuk loop kita akan menetapkan usia braket 0 sama dengan panggilan untuk getInt. Jadi apa pun yang saya terjadi untuk masuk di keyboard. Di kedua pass, kami pengaturan age1 sama dengan getInt. Ketiga lulus, age2. Akhir lulus age3. Jadi jika dalam lulus pertama dari loop Saya masukkan nomor 4 di keyboard, maka kita akan memasukkan 4 di sini. Jika di kedua pass saya masukkan 50, kami akan menempatkan 50 di sini. Pada lulus ketiga aku mungkin masukkan negatif 1, negatif 1, dan akhirnya jika saya masukkan 0-- dan sekarang ingat bahwa ini adalah indeks tiga. Setelah kami loop kembali, saya adalah akan bertambah sampai 4. i tidak lagi kurang dari n, yaitu 4. Dan kami keluar dari loop. Jadi apa yang akan menjadi salah dengan ini? [Tak terdengar]? AUDIENCE: [tidak terdengar] Iya nih. Jadi array hanya memiliki empat tempat, yang berarti sebagai indeks dari 0 sampai 3. Jadi jika ini terjadi, saya akan mengambil nilai 4 di beberapa titik. kelompok usia 4 akan menetapkan apa pun yang terjadi untuk menjadi di sini apa yang harus saya katakan, masukkan 6. Yang akan mengaturnya ke 6. Tapi kita tidak tahu apa di sini. Ini bukan memori bahwa kami memiliki akses ke. Jadi, jika Anda ingat dari kuliah sebelumnya, ia mencetak nilai dari Zamyla dan di beberapa titik ia memukul segmentasi ini kesalahan. Jadi, Anda mungkin akan melihat banyak kesalahan segmentasi yang Anda mengimplementasikan beberapa set masalah. Tapi ini adalah salah satu cara di mana Anda dapat menemukan sebuah segmentasi kesalahan, ketika Anda mulai mengakses memori dengan cara yang Anda tidak seharusnya. Jadi kita tidak memiliki akses ke lokasi ini dan ini adalah bug. Jadi ini lebih baik. Sekarang masih ada kecil masalah dengan kode ini. Dan itu pada dasarnya bahwa kita masih terjebak di empat siswa. Sekarang jika saya ingin menggunakan delapan siswa, OK. Ini bukan masalah besar. Aku bisa masuk, mengubah komentar, dan mengubah n. Sekarang ini akan bekerja dengan delapan siswa. Jika saya mengkompilasi dan menjalankan ini, ia akan menampilkan me-- itu akan meminta bilangan bulat untuk delapan siswa dan hanya akan bekerja. Tapi itu kurang ideal untuk perlu mengkompilasi ulang program setiap saat Saya ingin mengubah jumlah siswa bahwa saya ingin masuk usia untuk. Jadi perbaikan akhir pada ini, karena kami akan melihat di sini-kami akan meminta jumlah orang. Di sini kita memiliki nomor orang di kamar atau usia orang di dalam ruangan. Tapi kita akan meminta nomor orang di ruang dari pengguna. Jadi ini adalah sama persis do-while loop yang telah kita lihat sebelumnya. Ini sama persis do-while loop yang Anda dapat menerapkan di set masalah. Jadi selama mereka memasuki n kurang dari 1, sehingga ada harus berada di Setidaknya satu orang di dalam ruangan. Selama mereka memasuki n kurang dari 1, maka kita akan terus bertanya lagi. Silakan masukkan nomor orang di dalam ruangan. Sekarang, setelah kita memiliki nomor orang di room-- yang jadi saya mungkin masuk bahwa ada 200 orang di ruangan ini. Kemudian di sini kita akan datang dan mendeklarasikan array dari ukuran 200. Kami menyatakan bahwa array ini cukup besar untuk menampung 200 usia. Turun, itu adalah untuk loop Anda akan mendapatkan sangat digunakan untuk. Jadi iterasi array ini, menugaskan ke setiap lokasi dalam array yang integer, dan kemudian akhirnya di sini kami hanya mendapatkan contoh iterasi lebih array, bukan untuk menetapkan nilai-nilai, tapi untuk mengakses nilai-nilai. Jadi di sini kita melihat bahwa kita mengatakan, satu tahun dari sekarang, orang% saya akan% berusia i tahun, dimana% pertama saya adalah i ditambah 1. Jadi saya adalah variabel indeks ini. Dan% i kedua akan menjadi nilai yang disimpan dalam usia array yang ditambah 1. Jadi ditambah ini 1 hanya karena kita saying-- ditambah ini 1, usia saya ditambah 1. Ini ditambah 1 hanya karena kita mengatakan, satu tahun dari sekarang orang akan menjadi tua ini. Jadi mengapa saya ini ditambah 1? Mengapa kita memiliki ditambah 1 ada? Ya. Iya nih. Jadi ingat array nol diindeks. Jadi jika kita mencetak ini untuk seseorang untuk hanya membaca output, maka mungkin mereka ingin melihat sesuatu seperti orang satu, orang nomor satu, akan berusia 20 tahun. Orang nomor dua akan berusia 15 tahun. Mereka lebih suka tidak melihat orang angka nol adalah 15 tahun. Jadi kompilasi ini dan hanya melihat apa yang terlihat like-- Buat beberapa ruang. Membuat usia kompilasi. Menjalankan usia. Kami melihat jumlah orang di dalam ruangan. Jadi saya akan mengatakan ada tiga orang di dalam ruangan. Usia orang nomor satu, katakanlah 15, 20, 25. Dan sekarang saya akan mengatakan satu tahun dari sekarang mereka akan 16, 21, 26. Mari kita melihat bahwa ini bekerja dengan n yang tidak sama dengan 3. Jadi jika saya mengatakan jumlah orang adalah 5, satu, dua, tiga, dua, satu, satu tahun dari sekarang mereka akan dua, tiga, empat, tiga, dua tahun. Jadi aku bisa seperti dengan mudah n menjadi 10.000. Sekarang saya akan duduk di sini untuk waktu yang cukup sementara memasuki usia, tapi ini bekerja. Jadi sekarang di memori tempat kita memiliki sebuah array ukuran 10.000, sehingga akhirnya 40.000 byte, karena ada empat byte untuk masing-masing bilangan bulat. Jadi ada array ukuran 10.000 di mana kita bisa menyimpan usia mereka 10.000 orang. Baiklah. Pertanyaan tentang semua ini? Ya. Bagaimana jika Anda memberi angka negatif? Mari lihat apa yang terjadi. Jadi di nomor ini case-- tertentu orang di ruang, satu negatif. Ini ditolak itu, karena di sini kita terjadi untuk menangani fakta bahwa jika n adalah kurang dari satu kita akan bertanya lagi. Jika Anda mencoba untuk mendeklarasikan array ukuran negatif, umumnya tidak bekerja. Jadi mari kita coba. Mari kita mengabaikan apa pun nilai mereka masukan untuk n dan hanya mengatakan usia int satu negatif. Mari kita lihat apakah itu bahkan mengkompilasi. Saya tidak yakin. Tidak. Jadi usia dinyatakan sebagai array dengan ukuran negatif. Jadi dimuka mengakui array tidak dapat menjadi ukuran negatif dan menolaknya. Sekarang, jika kita tidak menangani do-sementara ini lingkaran dengan benar, jika kita tidak memeriksa jika n kurang dari 1-- katakanlah kita hanya tidak memiliki ini sama sekali dan sebaliknya kita hanya mengambil integer. Tidak peduli apa integer yang, kita mendeklarasikan array sebesar itu. Sehingga compiler tidak bisa mungkin mengeluh sekarang. Jika saya mengkompilasi this-- sehingga tidak bisa mengeluh, karena tidak dapat tahu bahwa aku akan memasukkan angka negatif, yang mungkin tidak valid. Untuk semua itu tahu, aku mungkin masukkan angka positif, yang benar-benar berlaku. Jadi saya membayangkan jika saya masukkan negatif 1 orang di dalam ruangan, segmentasi kesalahan. Jadi ok. Jadi mari kita tambahkan ini kembali hanya tetap apa awalnya. Sehingga membuat usia. Sekarang jika saya ingin mencoba negatif age-- jadi mari mengatakan ada lima orang di dalam ruangan. Usia orang nomor satu negatif 4, orang tiga adalah nol, orang three-- OK. Jadi di sini, satu tahun dari sekarang, jumlah orang satu akan negatif berusia 3 tahun. Jadi mungkin tidak masuk akal. Tapi itu hanya karena mencari kode yang semua yang kita lakukan meminta getInt. Sekarang, jika kita telah memiliki Fungsi GetPositiveInt atau kita hanya cukup melakukan ini semacam sementara sama lingkaran di sana, maka ini akan bekerja baik-baik saja. Tapi dalam hal ini khususnya kasus, kami hanya tidak kebetulan menangani nilai-nilai negatif. Pertanyaan lain tentang array? OKE. Jadi kita sekarang telah melihat array. Dan kita akan perlu menggunakan ini untuk argumen baris perintah. Jadi dalam masalah mengatur two-- Saya banyak dari Anda tahu mungkin masih bekerja pada masalah set satu, tapi masalahnya mengatur dua akan datang. Dalam masalah mengatur dua, Anda akan perlu berurusan dengan string, array, dan argumen baris perintah. Jadi apa argumen baris perintah? Sekarang, Anda dapat melihat di sini sebuah sedikit teaser untuk persis apa akan terjadi. Kita melihat int main, argc inc, kurung tali argv. Jadi pertama mari kita coba untuk menafsirkan apa yang katakan. Sekarang ok. Jadi pada baris perintah Anda harus membiasakan diri beberapa perintah ini sekarang, dan Anda mungkin menjalankan cd di terminal sebelumnya. Jadi jika kita katakan cd pset1, Anda tahu bahwa yang seharusnya menjadi berubah menjadi direktori pset1. Sekarang perhatikan bahwa Anda belum pernah menulis sebuah program seperti ini sebelumnya. Setiap program yang sudah Anda tulis, Anda akan menjalankan, katakanlah, dot slash Mario, dot slash serakah, dan kemudian mungkin meminta Anda untuk masukan. Sekarang, itu bukan apa direktori perubahan tidak. Ketika Anda menjalankan cd, itu tidak kemudian berkata, direktori yang ingin Anda cd ke? Sebaliknya, Anda hanya mengatakan, cd pset1, dan itu hanya masuk ke direktori pset1. Jadi sama kita memiliki contoh-contoh lain. membuat halo. Ketika Anda menjalankan membuat, tidak kemudian berkata, Program yang akan Anda ingin membuat? Anda hanya mengatakan, di baris perintah membuat halo. Langkah adalah contoh lain. Satu ini kita memindahkan mario.c mengajukan satu direktori. Jadi sekarang kita tahu dengan contoh ini kita benar-benar melewati dua argumen. Ada mario.c sebagai argumen pertama, dan dot dot adalah argumen kedua. Dan kemudian ketika Anda menjalankan membuat, Anda melihat bahwa perintah yang sangat lama line-- bahwa perintah yang sangat panjang dicetak pada baris perintah. Jadi selama itu command-- ini hanyalah bagian pendek itu, tapi sekarang kami memiliki tiga argumen baris perintah. Dot dasbor nol, halo, dan hello.c. Jadi ini adalah baris perintah argumen, argumen bahwa Anda lewat di baris perintah sehingga tidak harus diminta ketika Anda menjalankan program. Ini akan menjadi frustasi jika saat Anda berlari dentang itu berkata, "OK, yang program-- yang File yang Anda kompilasi? Hello.c. Bendera apa yang akan Anda ingin masuk? dasbor o. Apa yang akan Anda suka file yang akan dipanggil? halo. Tidak, Anda hanya menjalankan dentang lari o halo hello.c. Jadi melihat kembali ini. Sekarang argc argc-- adalah jumlah argumen. Ini jumlah baris perintah argumen masuk pada baris perintah. Nah, argv-- teknis v singkatan vektor, yang pada dasarnya berarti array. Tapi Anda bisa mengabaikan itu. Argv-- kita memiliki tali argv, sehingga tali argv kurung. Jadi ini adalah bentuk lain dari kurung Anda belum lihat sebelumnya. Jadi kita telah melihat braket notasi ketika kita katakan, seperti, string s sama Zamyla. s braket 0 mengakses Z. karakter Kami juga telah melihat tanda kurung saat kita mengatakan int usia braket 5. Yang menyatakan sebuah array dari ukuran 5. Jadi di sini adalah versi dari kurung kita belum lihat sebelumnya. Jadi ini semacam tali argv yang akan benar-benar akrab bahwa itu hanya akan menjadi sebuah string. Sekarang kurung menunjukkan bahwa ini adalah sebuah array. Jadi kurung tali argv sarana argv yang merupakan array dari string. Sekarang teknis string adalah array dari karakter. Jadi ini sekarang array array karakter. Tapi itu jauh lebih mudah untuk berpikir tentang ini hanya sebagai array dari string. Jadi mengapa mungkin kurung kosong? Seperti, mengapa tidak bisa kita katakan, bracket 5, braket n? Ya. Ya. Kita tidak tahu berapa banyak input ada akan menjadi. Jadi jika kita melihat contoh dentang, kita mengatakan dentang dasbor o halo hello.c. Dalam kasus ini, ada terjadi menjadi tiga argumen baris perintah. Dan brackets-- kita akan melihat dalam kedua hal itu tidak akan menjadi tiga. Secara teknis akan menjadi empat. Tapi kurung, kami akan mengatakan, ada tiga. Tapi jika kita melihat langkah mario.c dot dot, kurung kita ingin menempatkan dua di dalamnya. Dan ada banyak perintah yang memiliki sejumlah variabel baris perintah argumen. Jadi apa yang versi ini notasi braket menunjukkan adalah bahwa argv adalah array dari string. Tapi kita tidak tahu berapa banyak string dalam array itu. Dan bagaimana kita kemudian tahu bagaimana banyak string dalam array? Itulah inti argc. argc memberitahu kita berapa lama argv adalah. Jadi hal terakhir yang perlu diingat adalah bahwa, secara teknis, perintah itu sendiri dianggap sebagai salah satu argumen baris perintah. Jadi cd pset1, ada dua argumen baris perintah. Program itu sendiri, cd, dan kemudian argumen bagian sebenarnya itu, pset1. Setiap program yang sudah Anda tulis sejauh ini telah memiliki satu baris perintah argument-- dot slash Mario. Itulah satu-satunya argumen baris perintah. Jadi sekarang melihat dentang lari o halo hello.c. Jadi apa yang argc? 4. Jadi argc adalah 4. Dentang, sehingga argv braket 0 adalah dentang. argv bracket 1 adalah dasbor 0. argv braket 2 adalah halo, dan argv braket 3 adalah hello.c. OK, jadi pertanyaan ini, dan kemudian kita akan melihat beberapa contoh program. OKE. Jadi kita akan melihat pada hello3.c. Jadi ini harus akrab dari salah satu contoh c pertama kami memiliki di mana kita hanya akan mengatakan, halo dunia, tapi sekarang ini lebih umum. Jadi di sini kita menyapa % s backslash n argv bracket 1. Notice-- sehingga sampai saat ini, ini adalah apa file template saya telah tampak seperti. Saya punya int main (void), dan kemudian saya akan melakukan sesuatu dalam fungsi utama. Sekarang sebaliknya, setelah kami mulai berurusan dengan argumen baris perintah, kita perlu untuk menyatakan sebuah bentuk yang berbeda dari utama. Jadi melihat hello3 lagi, utama akan untuk mengambil dua argumen sekarang-- int argc, jumlah argumen baris perintah, dan tali argv kurung, yang sebenarnya string masuk pada baris perintah. Jadi aku akan mengubah itu template untuk mencerminkan fakta bahwa. Sekarang setiap kali Anda menulis program, jika Anda tidak perlu mengambil baris perintah argumen, maka cukup gunakan int main (void). Tapi sekarang ketika Anda sedang menulis program argumen baris perintah, yang Anda akan melakukan untuk masalah mengatur two-- jadi sekarang bahwa Anda menjalankan program yang perlu untuk mengambil argumen baris perintah, Anda harus memiliki utama dari bentuk. Jadi di sini-ini adalah penggunaan besar argumen baris perintah. Jadi mencetak argv 1. OK jadi mari kita mengkompilasi dan menjalankan program ini. Membuat hello3. Mengkompilasi. Dot memangkas hello3. Dan katakanlah, "Rob." Hello Rob. Jika saya mengatakan, "Halo Maria," Halo Maria. Halo Maria. Hannah masih mengatakan, "Halo Maria, "karena aku tidak melakukan apa-apa dengan argv kami 2. Argv 2 sekarang akan menjadi "Hannah." Argc akan 3. Bagaimana jika saya melakukan ini? Jadi halo null. Dia sebentar menyentuh pada kenyataan bahwa, secara teknis, GetString mungkin kembali nol, tapi kami akan mendapatkan lebih banyak ke dalam apa nol sebenarnya. Tapi menganggapnya sebagai masalah fakta bahwa tidak ada umumnya buruk. Kami melakukan sesuatu yang salah jika itu mencetak "halo nol." Dan alasan yang kita lakukan sesuatu yang salah is-- baik, ketika aku berlari dot slash hello3, argc adalah 1. Sehingga berarti panjang argv adalah 1. Jika array adalah panjang 1, satu-satunya indeks yang valid adalah nol. Dan jadi di sini argv 1 adalah di luar kisaran array ini. Itu mirip dengan sebelum ketika saya mencoba untuk menyimpan 6 luar akhir array. Jadi aku mencoba untuk mengakses sesuatu luar jumlah argv, dan kita sudah nol. Jadi versi yang lebih baik dari ini, perbaikan, secara eksplisit memeriksa argc. Jadi jika argc sama 2, itu berarti kita berlari sesuatu seperti dot slash hello3 Rob. Dan itu akan mencetak "halo Rob." Jika argc tidak sama 2, maka itu hanya akan mengabaikan apa pun yang Anda menempatkan di argumen baris perintah sebagai argumen command-line. Atau jika Anda tidak menaruh apapun sama sekali, itu hanya akan mengabaikan itu dan hanya mengatakan, "Halo kamu." Jadi kompilasi ini. Membuat hello4. Dan berjalan hello4. Menjalankannya dengan cara ini, apa yang harus dicetak? "Halo kamu." Halo kamu. Bagaimana hello4 Rob? "Halo Rob." Dan akhirnya, halo Rob Maria hanya "hello Anda" lagi, karena Anda tidak benar-benar masuk sesuatu yang diharapkan. Anda masukkan nama lagi dari itu bisa menangani, sehingga hanya gagal untuk hello Anda perilaku. Jadi pertanyaan tentang hal ini? Atau argumen baris perintah? OK, jadi mengambil melihat sebuah contoh beberapa lebih dari menggunakan baris perintah arguments-- pertama kami telah argv dasbor 1 dot c. Jadi komentar memberikan apa Program ini harus lakukan. Tapi perhatikan sekarang-- ini untuk loop, ini sesuai dengan pola yang tepat Saya katakan sebelumnya. Kami hanya kebetulan menggunakan argc bukan n. Sekarang argc benar-benar n. Ini panjang array argv. Jadi, apakah iterasi argv yang Array printf-ing setiap nilai argv. Jadi jika saya membuat ini. Membuat argv 1. Mengkompilasi. Dot slash argv 1. Hanya berjalan ini, cetakan dot slash argv 1 karena itu adalah satu-satunya baris perintah argument-- nama program. Akan selalu ada di least-- argc tidak bisa kurang dari satu, karena selalu ada setidaknya akan menjadi nama program untuk menjalankan. Jadi argv 1 Rob akan mencetak argv 1 dan kemudian pada baris baru "Rob." Jadi pada iterasi pertama loop ini, saya adalah 0. Argv 0 adalah nama program. Dot slash argv 1. Dan kemudian argv 1 adalah pertama saya Argumen baris perintah, yang Rob. Pada titik ini, kita sama dengan argc. Kami keluar dari loop dan kita sudah selesai. Jadi ini akan bekerja untuk sewenang-wenang jumlah argumen baris perintah. Perhatikan mencetak argv 0, argv 1, argv 2, argv 3, argv 4. Dan tidak ada argv 5. argc sama dengan 5. Jadi pada argc-- di i sama dengan 5, kita keluar dari loop. OKE. Jadi pertanyaan tentang itu sebelum kita melihat contoh yang lebih kompleks? Jadi argv 2. Baiklah. Jadi kita masih mencetak argumen baris perintah. Tapi sekarang melihat kita memiliki sebuah bersarang untuk loop. Jadi apa yang ini lakukan? Jadi loop pertama adalah melakukan persis apa yang terjadi sebelumnya. Kami masih perulangan lebih setiap argumen baris perintah, tapi sekarang loop-- kedua ini kita sudah juga melihat sesuatu seperti ini sebelumnya. Ketika ia iterasi Zamyla mencetak Z-A-M-Y-L-A. Jadi lingkaran ini kedua untuk int j sama 0, n sama dengan strlen dari argv braket i. Jadi mari kita pertama berpikir untuk the-- mari kita berjalan melalui. Mari kita berpikir apa yang akan komputer lakukan jika aku berlari program ini hanya sebagai dot memangkas argv dasbor 2. Jadi jika aku berlari kode ini, maka argc akan menjadi sama dengan 1. Dan tali argv-- hanya ada akan menjadi salah satu indeks dalam argv, dan itu akan menjadi sama dengan dot slash argv 2-- nama program. OK, jadi sekarang saya sama dengan 0, i kurang dari 1, i plus plus untuk int j sama dengan 0, n sama dengan strlen dari argv braket 0, sehingga dalam iterasi pertama dari lingkaran ini. argv braket 0 adalah titik garis miring argv 2. Jadi apa yang panjang string itu? Nah, dot slash A-R-G-V dasbor 2. Jadi strlen itu akan 8. Jadi j sama dengan 0, n sama dengan 8. Selama j kurang dari 8, j ++. Dan dengan itu kita akan menjadi mencetak satu karakter, yang adalah argv braket i braket j. Jadi satu-satunya yang saya adalah nol. Kami masih hanya memiliki satu Argumen baris perintah. Dalam iterasi pertama dari untuk loop, kami akan menjadi cetak argv braket 0 braket 0. Dan kemudian j akan kenaikan. Dan kita akan mencetak argv bracket bracket 0 1. Dan kemudian argv braket 0 braket 2. Jadi ini adalah pertemuan pertama kami array multi-dimensi. Ingat sebelumnya bahwa saya mengatakan argv yang secara teknis array array karakter. Jadi di sini jika saya mengatakan sesuatu seperti string s sama argv braket i, dan kemudian aku berkata, s braket j, ini akan mencapai hal yang sama. Sekarang, Anda telah melihat s braket j sebelumnya. Itu hanya mengakses ke-j karakter string ini. Jadi dengan ini, kita mendapatkan Karakter-j dari ke-i argv. Jadi apa yang harus akhirnya output ini? Membuat argv 2. Mengkompilasi. Dot memangkas argv 2. "Rob Maria Hannah," dan memberikan kita beberapa kamar. Jadi kita melihat bahwa ini adalah keluaran dot on line dan garis miring sendiri pada baris sendiri dan pada baris sendiri. Ini mencetak masing-masing karakter individu setiap argumen baris perintah. Dan kemudian di antara mereka, karena baris baru ini kita mencetak di sini, di di antara mereka itu akan mencetak baris baru. Jadi ini mirip dengan sebelum argv dasbor 1, yang dicetak masing-masing Argumen baris perintah, tapi sekarang kita mencetak argumen baris perintah dan kemudian iterasi melalui masing-masing karakter setiap argumen baris perintah untuk mendapatkan output ini. OKE? Jadi pertanyaan tentang hal ini? Satu hal yang perlu diperhatikan adalah bahwa baris perintah arguments-- sehingga mereka dipisahkan oleh spasi sebagai Anda secara alami akan mengharapkan mereka untuk menjadi. Jadi string dapat memiliki ruang di dalamnya. Ini tidak super penting, tapi jika saya ingin argumen baris perintah ketiga untuk memiliki ruang di dalamnya, maka saya bisa mengatakan sesuatu seperti ini. OKE? Jadi sekarang ini masih hanya memiliki tiga baris perintah arguments-- baik 4. Dot memangkas argv dasbor 2, Rob, Maria, dan Hannah Bloomberg. OKE. Pertanyaan tentang ini? Tidak ada yang istimewa tentang karakter ruang. Itu hanya kebetulan bahwa baris perintah memperlakukan karakter spasi bagaimana Anda memisahkan setiap argumen. Baiklah. Jadi Masalah set two-- Anda akan menjadi melihat kriptografi secret-key. Jadi, mirip dengan contoh yang kita melihat dari A Christmas Story, Anda akan menerapkan beberapa algoritma yang, diberi pesan, Anda akan dapat untuk mengenkripsi pesan yang bahwa hanya seseorang dengan rahasia yang kunci, dengan cincin decoder, harus dapat mendekripsi. Jadi itu adalah edisi standar. Anda akan menerapkan dua versi yang berbeda. Jika Anda kebetulan melihat-lihat di hacker Edisi sekarang, kita akan memberikan Anda string seperti ini, yang merupakan password terenkripsi. Jadi tujuan Anda adalah untuk mencari tahu apa password dekripsi adalah. Sekarang ini sebenarnya bagaimana password disimpan dalam banyak komputer, dan hanya menyimpan ini string acak karakter. Anda harus mencari tahu bagaimana untuk mendapatkan dari string acak ini karakter apa password asli. Dan akhirnya, setelah ini masalah set, Anda harus dapat memahami apa artinya ini. Jadi, Anda akan belajar bagaimana untuk mendekripsi semacam ini string acak. Demikian pula, jika Anda ingat dari minggu 0, Anda mungkin telah melihat URL ini. Dan Anda harus dapat mendekripsi ini akhirnya. Anda mungkin tidak senang ketika Anda mendekripsi dan klik pada link. Baiklah. Itu saja untuk hari ini. Jadi melihat Anda minggu depan! [MUSIK ELEKTRONIK PLAYING]