[Bermain muzik] DAVID MALAN: Baiklah. Ini adalah CS50, dan ini adalah akhir minggu 2. Saya minta maaf saya tidak boleh di sana dengan anda semua hari ini, tetapi anda berada dalam tangan yang sangat baik. Izinkan saya untuk memperkenalkan CS50 sendiri Rob Bowden. ROB BOWDEN: Dan sudah tentu, kemudian kita perlu membuat menyeronokkan fakta bahawa dia menghantar kami menegak video dan menunjukkan ini. [VIDEO MAIN SEMULA] [Bermain muzik] [JEJAK] Video -Ini tidak perlu melihat dengan cara ini. Ia boleh dielakkan. Mengatakan tidak kepada video menegak. Video -Vertical berlaku apabila anda memegang kamera anda dengan cara yang salah. Video anda akan berakhir sehingga kelihatan seperti crap. - [Mengomel] -Terdapat Lebih ramai orang ketagih untuk membuat video menegak setiap hari. Ia tidak retak atau apa-apa, tetapi ia masih benar-benar buruk. Terdapat dua jenis orang-orang yang ditimpa VVS. Kumpulan pertama merawat video mereka menembak seperti gambar. Mereka tidak bermaksud apa-apa kemudaratan. Mereka hanya tidak faham bahawa semasa anda boleh bertukar gambar, anda tidak boleh benar-benar berubah video. [CRASH] - [MONKEY SOUNDS] -The Kumpulan yang lain adalah orang-orang yang tidak memberikan [Bleep]. Sindrom Video -Vertical berbahaya. Rakaman yang mempunyai sentiasa mendatar. Televisyen adalah mendatar. Skrin komputer adalah mendatar. Mata orang ramai adalah mendatar. Kami tidak dibina untuk menonton video menegak. -Saya Suka video menegak. -Nobody Mengambil berat tentang anda. -Jika Ini masalah ini tidak dikawal, anda juga akan mula menunjukkan empat video sekaligus hanya untuk menjimatkan bandwidth. Video menegak -Letterboxed akan menjadi saiz setem pos. -Dan Ia akan merebak di mana-mana. Skrin pawagam mempunyai sentiasa mendatar. Jika video menegak menjadi diterima, pawagam akan mempunyai untuk menjadi tinggi dan kurus. -Dan Semua pawagam akan mempunyai untuk dirobohkan dan dibina semula. Dan pada masa itu mereka telah dibina semula, Mila Kunis akan menjadi tua dan hodoh. -Birds Akan berlanggar dengan mereka dan mati. -We'll Semua mendapat sengit leher daripada melihat ke atas. -Dan Yang tidak akan duduk di barisan hadapan pernah lagi. -George Lucas akan semula pelepasan Bintang Wars again-- edisi kurus. -Saya Tidak pernah benar-benar dapat memberitahu cerita yang saya mahu memberitahu. Ini adalah satu peluang yang baik untuk saya bereksperimen dengan teknologi baru. -You're Dungu. Masa -Setiap peranti mudah alih yang digunakan untuk rekod video, godaan ada. Hanya mengatakan tidak. Mengatakan tidak kepada George Lucas. Mengatakan tidak kepada lama Mila Kunis. Mengatakan tidak kepada video menegak. -Dan Jika anda melihat seseorang melakukannya, berkata, "anda tidak menembak yang dummy betul!" [Bermain muzik] [AKHIR MAIN SEMULA] [Tepuk tangan] [AUDIO OUT] ROB BOWDEN: --simple bentuk kriptografi, yang pada dasarnya penyulitan dan penyahsulitan mesej rahsia. Jadi di sini kita mempunyai mainan yang sangat mudah. Dan idea ini adalah Lingkaran luar berputar mengelilingi cincin. Dan anda boleh lihat, mungkin jika saya zum dalam, bahawa- ia sukar untuk melihat. Tetapi, seperti, bilangan 1-- baik, yang bergerak. Bilangan 1 maps kepada surat X, bilangan 2 peta kepada surat J. Sangat sukar tidak melangkau ke hadapan. Surat 2 peta untuk J. Number 3 maps D. Jadi dengan cincin ini, anda boleh memberi seseorang mesej 1, 2, 3. Atas sebab tertentu anda mahu memberitahu mereka XJD. Tetapi anda boleh memberikan mereka beberapa mesej nombor, dan selagi mereka mempunyai cincin ini, mereka boleh menyahsulitkan apa yang anda cuba untuk mengatakan. Jadi, anda mungkin telah melihat ini contoh tertentu kriptografi sebelum ini, jika di sekitar musim Krismas anda tonton A Story Krismas. Jika anda tidak pernah dilihat sebelum ini, maka hanya menghidupkan TBS di literal bila-bila masa pada malam Krismas, kerana mereka hanya menunjukkan ia kembali ke belakang ke belakang untuk kembali ke belakang sepanjang hari. Dan video yang berkaitan adalah ini. [VIDEO MAIN SEMULA] -Be Ia dikenali kepada segala-galanya yang Ralph Parker adalah dengan ini dilantik sebagai ahli Little Orphan Annie Secret Circle dan adalah berhak kepada semua penghormatan dan manfaat yang berlaku kepadanya. Ditandatangani Little Orphan Annie. Balas Pierre Andre dalam dakwat! Kepujian dan faedah sudah pada usia sembilan tahun! [Menjerit DARI RADIO] -Ayuh. Mari kita pada dengannya. Saya tidak memerlukan semua jazz yang tentang penyeludup dan lanun. Malam esok -Listen dengan pengembaraan menyimpulkan daripada Pirate Kapal Hitam. Kini, sudah tiba masanya untuk Mesej rahsia Annie untuk anda ahli Circle Rahsia. Ingat anak-anak, hanya ahli Rahsia Circle Annie boleh decode mesej rahsia Annie. Ingat, Annie adalah bergantung kepada anda. Tetapkan PIN anda untuk B2. Berikut adalah mesej. 12. 11. 2. -Saya Am dalam mesyuarat rahsia pertama saya. -25. 14. 11. 18. 16. -Oh, Pierre di malam ini suara yang besar. Saya boleh memberitahu bahawa malam ini mesej adalah benar-benar penting. -3. 25. Itulah mesej dari Annie dirinya. Ingat, jangan beritahu sesiapa. Saat -Five kemudian, saya dalam satu-satunya bilik di dalam rumah di mana seorang budak sembilan boleh duduk dalam privasi dan decode. Aha! B! Saya pergi ke depan. E. Perkataan pertama adalah "menjadi." S. Ia datang mudah sekarang. U. 25. Itulah R. -Ayuh, Ralphie! Saya kena pergi! -I'll Betul ke bawah, Ma! Gee jagoan. T. O. "Pastikan anda" - pastikan untuk apa? Apakah Little Orphan Annie cuba katakan? Pastikan anda apa? -Randy Telah mendapat untuk pergi! Bolehkah kamu keluar daripadanya? Hak -Semua, ibu! Saya akan keluar betul! Saya telah mendapat lebih dekat sekarang. Ketegangan yang amat dahsyat. Apakah ia? Nasib planet ini boleh meragukan! -Ralphie, Randy mendapat untuk pergi! -I'll Betul keluarlah, menangis dengan kuat! Hampir sampai! Jari saya terbang. Fikiran saya perangkap keluli. Setiap liang digetarkan. Ia adalah hampir jelas! Ya. Ya. Ya. Ya. Pastikan anda minum Ovaltine anda. Ovaltine? A komersial yg tdk memuaskan? Bedebah. [AKHIR MAIN SEMULA] ROB BOWDEN: Jadi itulah bagaimana Ovaltine berkaitan dengan kriptografi. Pada asasnya CS50 hanya diiklankan Ovaltine, jadi kita boleh menjadi komersial yg tdk memuaskan untuk Ovaltine. Baiklah. Jadi sekarang sains komputer yang sebenar. Ingat hari ini kita berhenti menyelam jauh ke dalam tali. Oleh itu, kita berurusan dengan rentetan "Zamyla." Dan kami mengiktiraf hakikat bahawa kita boleh merawat "Zamyla" sebagai jujukan aksara. Dan ingat bahawa kita belajar notasi kurungan. Jadi, jika ini telah disimpan dalam rentetan "s", maka jika kita kata s kurungan 0, yang akan menunjukkan Z. modal surat Dan jika kita kata s kurungan 1, yang akan menunjukkan pertama huruf kecil, dan sebagainya sehingga s kurungan 5, yang akan menunjukkan yang terakhir. Sekarang ingat bahawa panjang tali ini ialah 6, tetapi indeks ke dalam tali adalah 0 hingga 5, Z melalui itu berlangsung. Jadi ini sekarang sesuai dengan gambar 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 ingatan. Jadi saya boleh mempunyai seorang sukarelawan? Ya sila. Dan apa nama awak? DEAN: Dean. ROB BOWDEN: Dean? Gembira dapat bertemu dengan anda, Dean. Jadi datang ke sini, dan kita akan mempunyai anda menarik pada susun atur bagus bagus kami ingatan. Sekarang saya suka berfikir memori sebagai salah satu jalur panjang bait, tetapi hanya untuk tujuan paparan kami akan hanya kiri ke kanan, atas ke bawah. OKAY? Jadi saya akan menunjukkan program-- Getstrings.c. Dan supaya semua program ini adalah melakukan meminta empat tali daripada pengguna dengan GetString dan kemudian percetakan apa sahaja yang rentetan pertama masukkan tidak. Kami mengabaikan dua melalui empat. OKAY. Jadi di sini sekarang-- apabila Saya mula-mula permintaan s1. Jadi anda komputer. Dan anda melaksanakan GetString. Oleh itu, anda meminta rentetan daripada saya, dan saya katakan, OK, Dean. Beri rentetan "Dean." Jadi di suatu tempat di memori anda perlu ingat "Dean." Jadi menulisnya ke dalam ingatan di suatu tempat. Perfect. OKAY. Jadi sekarang kita telah S2. Dan s2 akan menjadi permintaan untuk GetString. Jadi, saya akan memasuki rentetan. Saya akan masukkan "Hannah." Oleh itu, masukilah "Hannah" di suatu tempat ke dalam ingatan. Yeah. A-H. OK, jadi sekarang s3. Dan ia akan menjadi satu lagi meminta untuk GetString. Dan sekarang masukkan "Maria." Baiklah. Dan kemudian ada satu lepas permintaan untuk GetString, s4. Jadi, saya tidak tahu. Bagaimana pula kita pergi dengan antidisestablishmentarianism. Oleh itu, masukilah itu ke dalam ingatan. Yeah. Jadi hanya melakukan "Rob." OKAY. Jadi sekarang explain-- mengapa anda meninggalkan ruang ini? Mengapa anda mempunyai ini kosong ruang di sini, di sini, dan di sini? Ya. Jadi notis apabila saya pergi untuk mencetak s1-- jadi jika kita mempunyai "Hannah" berjalan sehingga sebelah "Dean," bagaimana kita tahu apabila rentetan "Dekan" berakhir? Jadi mencetak s1 tali mungkin mempunyai hanya dicetak "DeanHannahMariaRob" jika ia tidak mempunyai apa-apa petunjuk apabila "Dekan" sebenarnya berakhir. Baiklah. Jadi dalam memori cara kita sebenarnya mewakili tujuan ini rentetan adalah dengan garis sendeng terbalik sifar. Jadi ruang ini adalah apa yang kita mahu. Ia seharusnya menjadi garis sendeng terbalik sifar. Ini akan menjadi satu garis sendeng terbalik sifar, dan ini akan menjadi garis sendeng terbalik sifar. Dan anda boleh mempunyai hadiah hebat kerana menjadi sukarelawan yang sempurna. Ambil bola tekanan! OKAY. Jadi ini backslash watak sifar adalah bagaimana kita menunjukkan akhir rentetan. Ia adalah bagaimana apabila mana-mana program yang diberikan mahu mencetak rentetan, ia how-- ingat kita belajar fungsi strlen minggu lepas? Panjang tali? Ia adalah bagaimana panjang tali boleh menentukan berapa lama tali adalah. Ia hanya menyimpan iterating atas watak-watak sehingga ia mendapati Backslash watak sifar. Jadi perkara yang penting untuk menyedari mengenai watak backslash sifar adalah ia diwakili oleh semua sifar dalam bit. Jadi notis bahawa ini adalah berbeza dari watak sifar. Jadi watak sifar, jika anda ingat dalam contoh bahawa dia telah memberikan pada akhir kuliah di mana watak-watak peta supaya- seperti modal A peta ke 65. Huruf kecil peta untuk 97. B huruf kecil akan menjadi 98. Jadi nombor 0 peta supaya- saya tidak tahu dari atas kepala saya. 44 atau 45. Di suatu tempat di rantau itu. Jadi watak 0 adalah nombor yang sebenar. Tetapi sifar garis sendeng terbalik peta ke semua bit sifar. Jadi ada perbezaan yang antara garis sendeng terbalik sifar, yang kita akan memanggil terminator nol. Ada perbezaan antara garis miring sifar dan watak sifar. Baiklah. Jadi bercakap sedikit lebih lanjut mengenai tali. Sebab itu kita lihat di sini ini adalah bagaimana ia akan dibentangkan di dalam ingatan. Jadi idea ini rentetan sebagai urutan daripada characters-- supaya komputer rasmi jangka sciency untuk urutan adalah array. Oleh itu, kita akan memanggil rentetan pelbagai watak. Dan sebenarnya ada data lain jenis yang kita boleh membuat array daripada. Jadi untuk memberi motivasi ini, melihat contoh. Kami akan memanggilnya ages0.c saya akan copy dan paste template kami. OKAY. Jadi, dalam program ini yang kita mahu lakukan adalah merebut umur tiga pelajar dalam kursus ini. Oleh itu, kita tahu int age-- dan sekarang saya akan mengatakan 0. Jadi, anda mungkin mahu untuk mengatakan age1, tetapi untuk tujuan kita akan melihat sangat tidak lama lagi, Saya akan berkata int age0 sama GetInt. Jadi panggilan yang sama untuk GetInt bahawa kita telah menggunakan saya tidak berlaku untuk mendorong berkata, "berikan saya zaman." Tetapi permintaan itu. Dan age1 sama GetInt. Dan int age2 sama GetInt. Jadi, sekali lagi, tiga pelajar, tetapi akhirnya indeks boleh ubah adalah age0 melalui age2. OKAY. Jadi program ini akan melakukan apa sahaja yang kita mahu dengan age0, age1 dan age2, tetapi program ini akhirnya bekerja untuk tiga pelajar. OKAY. Jadi sekarang bagaimana jika saya mahu pelajar empat? Well, saya akan perlu kembali ke dalam kod saya, menukar komen, dan sekarang kami mempunyai int age3 sama GetInt. OKAY. Jadi yang melihat masalah di sini? Apa masalahnya dengan seperti ini persediaan? Yeah. Yeah. Oleh itu, kita sedang mencipta berubah-ubah bagi setiap pelajar. Sekarang bekerja, tetapi akhirnya apa jika saya kini berkata, "Saya mahu merebut usia lapan pelajar atau 16 pelajar atau bagaimanapun ramai pelajar beratus-ratus pelajar di CS50 atau beribu-ribu pelajar di kampus atau berbilion-bilion orang di dunia? Jadi akhirnya ia tidak berkekalan. Bila-bila masa anda melihat diri anda menyalin dan kod menampal seperti ini, anda biasanya perlu berasa bahawa terdapat cara yang lebih baik. Jadi ini adalah di mana kita memperkenalkan pengisytiharan tatasusunan. Oleh itu, apabila anda mengisytiharkan array, ini adalah apa format umum akan kelihatan seperti. Kami akan mengatakan jenis. dan kemudian kita akan memberikan nama array itu, sama seperti kita menentukan apa-apa ubah diberikan. Dan kemudian akhirnya kita menggunakan notasi kurungan ini sekali lagi tetapi dalam konteks yang berbeza dari bagaimana kita menggunakannya sebelum ini. Jadi di sini ini kelihatan seperti biasa pengisytiharan pembolehubah yang kita lihat. Oleh itu, kita telah lihat int x koma bertitik sebelum ini. Sekarang kita boleh melihat sesuatu seperti int x kurungan 5. Dan meletakkan idea ini ke dalam Program GetInt yang kita ada-- supaya kita boleh melaksanakan ini dengan cara yang sama. Katakan dalam CS kita cenderung untuk menggunakan n sebagai bilangan sesuatu. Jadi di sini kita akan menyimpan empat pelajar. Dan sekarang kita boleh mengatakan umur int kurungan tidak n-- agak mendapatkannya YET mengisytiharkan pelbagai pelajar tingkatan empat. Jadi bagaimana ini akan kelihatan dalam memori akan sama dengan ini. Membersihkan ini. Dan kita akan mempunyai tempat dalam memory-- Saya akan meletakkan ini di sana. Jadi di suatu tempat di ingatan. Satu dua tiga empat. Kami mempunyai empat integer berturut-turut untuk pelbagai ini empat integer. Jadi, pada masa ini, apakah Saiz salah satu daripada kotak-kotak? Yeah. Ia empat bait. Ia adalah 32 bit. Jadi sekarang ini adalah berbeza dari array yang kita lihat sebelum ini, pelbagai watak. Dalam rentetan setiap kotak hanya satu bait, kerana watak hanya satu bait. Tetapi dengan pelbagai integer, masing-masing keselamatan telah menjadi empat bait agar untuk memenuhi keseluruhan integer. Jadi ini adalah apa yang pelbagai empat ints akan kelihatan seperti. Dan kemudian kembali ke kod. Sekarang kita mahu sebenarnya kedai bilangan bulat ke dalam pelbagai itu. Jadi sekarang ini adalah sangat, sangat, sangat corak biasa yang akan pada satu ketika menjadi memori otot. Jadi int i sama dengan 0. i kurang daripada n. i plus plus. Kurungan umur i sama GetInt. Jadi ini untuk gelung, format ini, anda perlu menjadi sangat digunakan untuk. Jadi ini adalah umumnya bagaimana kita akan melelar hampir mana-mana lokasi. Sekarang notis seperti ini menjelaskan mengapa dari awal kami tidak mempunyai untuk gelung pergi untuk int i sama dengan 1, i kurang daripada atau sama dengan 10. Ini kerana bermula dari sifar membuat kerja-kerja ini dengan baik dengan pameran. Jadi tatasusunan adalah sifar diindeks. Jika pelbagai ini adalah panjang 4, indeks 0 hingga 3. Jadi melalui pertama lelaran ini untuk gelung kita akan dapat menetapkan umur kurungan 0 sama dengan panggilan untuk GetInt. Jadi apa sahaja yang saya telah untuk memasuki pada keyboard. Dalam pas kedua, kami menetapkan age1 sama dengan GetInt. Pas Ketiga, age2. Age3 pas akhir. Oleh itu, jika dalam laluan pertama gelung Saya masukkan nombor 4 pada papan kekunci, maka kita akan memasukkan 4 di sini. Jika pada lulus kedua saya masukkan 50, kita akan meletakkan 50 di sini. Pada lulus ketiga saya mungkin masukkan negatif 1, -1, dan akhirnya jika saya masukkan 0-- dan sekarang ingat bahawa ini adalah indeks tiga. Setelah kami kembali gelung, i adalah akan incremented hingga 4. i tidak lagi kurang daripada n, yang 4. Dan kita keluar daripada gelung. Jadi apa yang akan menjadi salah dengan ini? [Didengar]? PENONTON: [didengar] Ya. Jadi array hanya mempunyai empat tempat, yang bermakna sebagai indeks 0 hingga 3. Jadi, jika ini berlaku, saya akan mengambil nilai 4 pada satu ketika. umur kurungan 4 akan menetapkan apa sahaja yang berlaku untuk menjadi di sini dengan apa yang saya katakan, masukkan 6. Yang akan menetapkan ini kepada 6. Tetapi kita tidak tahu apa yang di sini. Ini bukan memori bahawa kita mempunyai akses kepada. Jadi, jika anda ingat dari kuliah yang lepas, beliau telah mencetak nilai Zamyla dan pada satu ketika dia memukul segmentasi ini kesalahan. Jadi, anda mungkin akan melihat banyak kesalahan segmentasi anda melaksanakan beberapa set masalah. Tetapi ini adalah salah satu cara di mana anda boleh menghadapi segmentasi yang kesalahan, apabila anda mula mengakses memori dalam cara yang anda tidak perlu. Oleh itu, kita tidak mempunyai akses kepada lokasi ini dan ini adalah bug. Jadi ini adalah lebih baik. Sekarang masih kecil isu dengan kod ini. Dan itu pada dasarnya bahawa kita masih terperangkap di empat pelajar. Sekarang jika saya mahu menggunakan lapan pelajar, OK. Ia bukan masalah besar. Saya boleh pergi dalam, menukar komen, dan menukar n. Sekarang ini akan bekerja dengan lapan pelajar. Jika saya menyusun ini dan menjalankan ini, ia akan menunjukkan me-- ia akan meminta integer selama lapan pelajar dan ia hanya akan berfungsi. Tetapi ia adalah kurang daripada yang ideal untuk perlu susun semula program ini setiap kali Saya ingin menukar bilangan pelajar yang saya ingin memasuki peringkat umur untuk. Jadi peningkatan muktamad mengenai ini, seperti yang kita akan lihat sini-- kami akan meminta jumlah orang. Di sini kita mempunyai bilangan yang orang di bilik-bilik atau mana-mana peringkat umur orang di dalam bilik. Tetapi kita akan meminta jumlah orang di dalam bilik daripada pengguna. Jadi ini adalah sama-buat ketika yang tepat gelung yang kita lihat sebelum ini. Ia adalah sama do-gelung while bahawa anda boleh melaksanakan pada masalah yang ditetapkan. Jadi selagi mereka memasuki n kurang daripada 1, jadi tidak mempunyai untuk menjadi di kurangnya satu orang di dalam bilik. Selagi mereka memasuki n kurang daripada 1, maka kita akan terus bertanya lagi. Sila masukkan nombor yang orang di dalam bilik. Sekarang, apabila kita ada bilangan orang dalam room-- yang jadi saya boleh masuk bahawa terdapat 200 orang di dalam bilik ini. Kemudian turun di sini kita akan datang dan mengisytiharkan pelbagai saiz 200. Kami mengisytiharkan lokasi itu cukup besar untuk memegang 200 peringkat umur. Yang turun, ia adalah untuk gelung bahawa anda akan menjadi sangat digunakan untuk. Jadi iterating lebih pelbagai ini, menetapkan bagi setiap lokasi dalam array yang integer, dan maka akhirnya di sini kita berada hanya mendapat satu contoh iterating lebih array itu, bukan untuk menetapkan nilai-nilai, tetapi untuk mengakses nilai. Jadi di sini kita melihat bahawa kita katakan, setahun dari sekarang, orang% i akan menjadi tua% i tahun, di mana% pertama i ialah i campur 1. Jadi saya adalah pembolehubah indeks ini. Dan% i kedua akan menjadi nilai yang disimpan dalam pelbagai peringkat umur ditambah 1. Jadi plus 1 sahaja kerana kami saying-- ditambah 1, umur i tambah 1. Ditambah 1 hanya kerana kami berkata, setahun dari sekarang orang yang akan yang lalu. Jadi mengapa ini saya tambah 1? Mengapa kita mempunyai campur 1 di sana? Yeah. Ya. Jadi ingat tatasusunan adalah sifar diindeks. Jadi, jika kita mencetak ini keluar untuk seseorang untuk hanya membaca output, maka mungkin mereka mahu melihat sesuatu seperti orang satu, orang nombor satu, akan berusia 20 tahun. Bilangan orang dua akan berusia 15 tahun. Mereka tidak mahu melihat orang nombor sifar ialah 15 tahun. Jadi menyusun ini dan hanya melihat apa yang ia kelihatan like-- Buat beberapa ruang. Membuat peringkat umur menyusun. Running peringkat umur. Kita melihat beberapa orang di dalam bilik. Jadi saya akan mengatakan terdapat tiga orang di dalam bilik. Usia nombor satu orang, katakan 15, 20, 25. Dan sekarang saya akan mengatakan satu tahun dari kini mereka akan menjadi 16, 21, 26. Mari kita lihat bahawa ini bekerja dengan yang n yang tidak sama dengan 3. Jadi, jika saya mengatakan beberapa orang adalah 5, satu, dua, tiga, dua, satu, setahun dari sekarang mereka akan menjadi dua, tiga, berusia empat, tiga, dua tahun. Jadi saya boleh hanya sebagai mudah telah n menjadi 10,000. Sekarang saya akan duduk di sini untuk tempoh yang agak seketika memasuki peringkat umur, tetapi ia berfungsi. Oleh sebab itu dalam ingatan suatu tempat kita mempunyai pelbagai saiz 10,000, jadi akhirnya 40000 bait, kerana ada empat bait bagi setiap daripada mereka integer. Jadi ada pelbagai saiz 10,000 di mana kita boleh menyimpan peringkat umur dari orang-orang 10,000 orang. Baiklah. Soalan tentang apa-apa ini? Yeah. Bagaimana jika anda memberikan nombor negatif? Mari kita lihat apa yang berlaku. Jadi, dalam beberapa case-- tertentu ini orang di dalam bilik itu, satu negatif. Ia ditolak itu, kerana di sini kita berlaku yang akan mengendalikan hakikat bahawa jika n kurang daripada satu kita akan tanya lagi. Jika anda cuba untuk mengisytiharkan pelbagai saiz negatif, ia secara amnya tidak berfungsi. Jadi mari kita cuba. Mari kita mengabaikan apa sahaja nilai mereka input untuk n dan hanya mengatakan umur int satu negatif. Mari kita lihat jika ia juga menyusun. Saya tak pasti. No. Jadi peringkat umur diisytiharkan sebagai pelbagai dengan saiz yang negatif. Jadi pendahuluan ia mengiktiraf array tidak boleh mempunyai saiz negatif dan menolaknya. Sekarang, jika kita tidak mengendalikan ini gelung do-while dengan betul, jika kita tidak memeriksa jika n kurang daripada 1-- katakan kita hanya tidak mempunyai ini di semua dan sebaliknya kita hanya merebut integer. Tidak kira apa integer iaitu, kita mengisytiharkan pelbagai saiz itu. Jadi pengkompil tidak boleh mungkin mengadu sekarang. Jika saya menyusun this-- jadi ia tidak boleh mengadu, kerana ia tidak boleh tahu bahawa saya akan memasukkan nombor negatif, yang mungkin tidak sah. Untuk semua ia tahu, saya mungkin masukkan nombor yang positif, yang sah. Jadi saya bayangkan jika saya memasuki negatif 1 orang di dalam bilik, segmentasi bersalah. Jadi, OK. Jadi mari kita menambah kembali ini hanya simpan apa yang asalnya adalah. Oleh itu, peringkat umur. Sekarang, jika saya mahu mencuba negatif age-- jadi mari kita berkata terdapat lima orang di dalam bilik. Umur orang nombor satu adalah negatif 4, orang tiga adalah sifar, orang three-- OK. Jadi di sini, setahun dari sekarang, bilangan orang akan menjadi negatif berumur 3 tahun. Jadi mungkin tidak masuk akal. Tetapi itu hanya kerana mencari pada kod semua yang kita lakukan meminta GetInt. Sekarang, jika kita telah mempunyai Fungsi GetPositiveInt atau kita baru sahaja hanya melakukan ini jenis gelung sementara sama di bawah sana, maka ini akan bekerja dengan sempurna denda. Tetapi dalam khusus ini kes, kita tidak melakukan berada pengendalian nilai-nilai negatif. Lain-lain soalan tentang tatasusunan? OKAY. Jadi, sekarang kita telah lihat tatasusunan. Dan kita akan perlu menggunakan ini kerana hujah-hujah baris arahan. Jadi dalam masalah menetapkan two-- Saya tahu ramai daripada anda mungkin masih boleh bekerja di set masalah satu, tetapi masalah menetapkan dua akan datang. Dalam masalah menetapkan dua, anda akan perlu berurusan dengan tali, tatasusunan dan hujah-hujah baris arahan. Jadi apakah hujah baris arahan? Sekarang, anda boleh melihat ke bawah di sini sedikit teaser untuk betul-betul apa yang akan berlaku. Kita lihat int utama, argc inc, kurungan tali argv. Jadi pertama mari kita cuba untuk mentafsir apa yang yang cuba katakan. Sekarang, OK. Jadi pada baris arahan anda harus membiasakan diri dengan beberapa arahan ini sekarang, dan anda mungkin menjalankan cd di terminal sebelum ini. Jadi, jika kita katakan cd pset1, anda tahu bahawa yang sepatutnya menjadi berubah ke dalam direktori pset1 itu. Sekarang notis bahawa anda tidak pernah bertulis program seperti ini sebelum ini. Setiap program yang anda telah ditulis, anda akan berjalan, berkata, dot mengurangkan Mario, dot mengurangkan tamak, dan kemudian ia mungkin meminta anda untuk input. Sekarang, itu bukan apa yang direktori perubahan tidak. Apabila anda menjalankan cd, ia tidak kemudian berkata, mana direktori yang anda ingin cd ke? Sebaliknya, anda hanya berkata, cd pset1, dan ia hanya pergi ke dalam direktori pset1 itu. Jadi begitu juga kita mempunyai contoh-contoh lain. membuat hello. Apabila anda menjalankan membuat, ia tidak kemudian berkata, mana program yang anda ingin membuat? Anda hanya berkata, pada baris arahan membuat hello. Move adalah contoh yang lain. Yang ini kita sedang bergerak di mario.c memfailkan naik satu direktori. Jadi sekarang kita tahu dengan contoh ini kita benar-benar lulus dua hujah. Ada mario.c sebagai hujah pertama, dan dot dot adalah hujah kedua. Dan kemudian apabila anda membuka warung membuat, anda melihat arahan yang benar-benar panjang garis ini-- arahan yang benar-benar panjang dicetak pada baris arahan. Supaya lama command-- ini adalah hanya sebahagian pendek daripada itu, tetapi kini kami mempunyai tiga hujah-hujah baris arahan. Dot dash sifar, hello, dan hello.c. Jadi ini adalah baris arahan hujah, hujah-hujah bahawa anda lulus di baris arahan supaya ia tidak perlu digesa apabila anda menjalankan program ini. Ia akan mengecewakan jika semasa anda berlari dilafaz ia berkata, "OK, yang program-- yang fail yang anda menyusun? Hello.c. Apa bendera akan anda suka untuk masuk? dash o. Apakah yang ingin anda fail yang hendak dipanggil? hello. Tidak, anda hanya menjalankan dilafaz melontarkan o hello hello.c. Jadi melihat kembali pada ini. Sekarang argc argc-- adalah tuduhan hujah. Ia jumlah baris arahan hujah-hujah yang dimasukkan pada baris arahan. Nah, argv-- teknikal v bermaksud vektor, yang pada asasnya bermakna pelbagai. Tetapi, anda boleh mengabaikan itu. Argv-- kita ada rentetan argv, supaya kurungan tali argv. Jadi ini adalah satu lagi bentuk kurungan anda tidak pernah melihat sebelum ini. Kurungan itu, kita telah melihat notasi apabila kita telah berkata, seperti, rentetan s sama Zamyla. s kurungan 0 mengakses Z. watak Kami juga telah melihat kurungan apabila kita kata umur int braket 5. Yang diisytiharkan pelbagai saiz 5. Jadi di sini adalah versi daripada kurungan kami tidak dilihat sebelum ini. Jadi ini jenis tali argv yang akan benar-benar biasa bahawa ia hanya akan menjadi tali. Sekarang kurungan menunjukkan bahawa ini adalah pelbagai. Jadi kurungan tali argv cara argv yang pelbagai rentetan. Sekarang teknikal rentetan adalah pelbagai watak. Jadi ini kini array daripada pelbagai watak. Tetapi ia adalah lebih mudah untuk berfikir tentang ini kerana hanya pelbagai tali. Jadi mengapa mungkin kurungan kosong? Seperti, mengapa tidak boleh kita katakan, 5 kurungan, pendakap n? Yeah. Yeah. Kita tidak tahu berapa ramai input ada akan menjadi. Jadi, jika kita melihat contoh yang dilafaz, kita katakan dilafaz dash o hello hello.c. Dalam kes ini, tidak berlaku menjadi tiga hujah baris arahan. Dan sebagainya brackets-- yang kita akan melihat dalam kedua ia tidak akan menjadi tiga. Secara teknikal akan menjadi empat. Tetapi dalam kurungan, kami akan berkata, terdapat tiga. Tetapi sekarang kita melihat langkah mario.c dot dot, kurungan kita mahu meletakkan dua di dalamnya. Dan terdapat banyak arahan yang mempunyai beberapa pembolehubah baris arahan hujah. Jadi apa versi ini notasi kurungan menunjukkan adalah bahawa argv adalah pelbagai tali. Tetapi kita tidak tahu berapa ramai rentetan dalam pelbagai itu. Dan bagaimana kita kemudian mengetahui bagaimana rentetan ramai yang dalam array? Itulah titik argc keseluruhan. argc memberitahu kita berapa lama argv adalah. Jadi perkara terakhir yang perlu diingat adalah bahawa, secara teknikal, arahan itu sendiri yang diambil kira sebagai salah satu daripada hujah-hujah baris arahan. Jadi cd pset1, terdapat dua hujah-hujah baris arahan. Program itu sendiri, cd, dan kemudian hujah bahagian yang sebenar itu, pset1. Apa-apa program yang anda telah menulis setakat ini telah mempunyai satu baris arahan argument-- dot mengurangkan Mario. Itulah satu-satunya hujah baris arahan. Jadi sekarang melihat dilafaz melontarkan o hello hello.c. Jadi apa argc? 4. Jadi argc ialah 4. Dilafaz, jadi argv kurungan 0 adalah dilafaz. argv kurungan 1 adalah dash 0. argv kurungan 2 adalah hello, dan argv kurungan 3 adalah hello.c. OK, jadi soalan mengenai perkara ini, dan kemudian kami akan lihat beberapa contoh perancangan. OKAY. Oleh itu, kita akan lihat pada hello3.c. Jadi ini perlu biasa dari salah satu daripada c contoh pertama kita mempunyai mana kita hanya akan berkata, hello dunia, tetapi sekarang ini adalah lebih umum. Jadi di sini kita katakan hello garis miring n argv kurungan% s 1. Notice-- jadi sehingga ketika ini, ini adalah apa fail template saya telah kelihatan seperti. Saya mempunyai int main (tidak sah), dan kemudian saya akan melakukan sesuatu dalam fungsi utama. Sekarang sebaliknya, sebaik sahaja kami mula berurusan dengan hujah-hujah baris arahan, kita perlu menyatakan suatu bentuk yang berbeza utama. Jadi melihat hello3 lagi, utama akan mengambil dua hujah sekarang-- int argc, bilangan hujah baris arahan, dan tali argv kurungan, sebenar tali dimasukkan pada baris arahan. Jadi saya akan mengubahnya Templat untuk mencerminkan hakikat itu. Sekarang setiap kali anda menulis program, jika tidak perlu mengambil sebarang baris perintah hujah, maka hanya menggunakan int main (tidak sah). Tetapi sekarang apabila anda menulis program hujah baris arahan, yang anda akan lakukan untuk masalah menetapkan two-- jadi sekarang bahawa anda menjalankan program-program yang perlu hujah baris arahan, anda perlu mempunyai utama borang ini. Jadi sini-- ini adalah penggunaan besar daripada hujah baris arahan. Jadi mencetak argv 1. OK jadi mari kita menyusun dan menjalankan program ini. Membuat hello3. Menyusun. Dot mengurangkan hello3. Dan katakan, "Rob." Hello Rob. Jika saya katakan, "hello Maria," hello Maria. Hello Maria. Hannah masih mengatakan, "hello Maria, "kerana saya tidak melakukan apa-apa dengan argv kami 2. Argv 2 kini akan menjadi "Hannah." Argc akan menjadi 3. Bagaimana jika saya melakukan ini? Jadi hello null. Beliau secara ringkas menyentuh hakikat itu, dari segi teknikal, GetString aku bercuti batal, tetapi kita akan mendapat banyak lagi ke dalam apa null sebenarnya. Tetapi mengambil ia sebagai satu perkara fakta bahawa tiada umumnya tidak baik. Kami melakukan sesuatu yang salah jika ia mencetak "hello null." Dan sebab itu kita lakukan sesuatu yang salah is-- baik, apabila saya berlari dot mengurangkan hello3, argc adalah 1. Ini bermakna panjang argv adalah 1. Jika array adalah panjang 1, satu-satunya indeks sah adalah sifar. Dan sebagainya di sini argv 1 adalah di luar julat pelbagai ini. Ia adalah sama dengan sebelum ini apabila saya cuba untuk menyimpan 6 di luar akhir array. Jadi, saya cuba untuk mengakses sesuatu di luar tuduhan argv, dan kami mendapat null. Jadi versi yang lebih baik daripada ini, satu peningkatan, secara jelas memeriksa argc. Jadi, jika argc bersamaan 2, ini bermakna kita berlari sesuatu seperti dot mengurangkan hello3 Rob. Dan ia akan mencetak "hello Rob." Jika argc tidak sama 2, maka ia hanya akan untuk mengabaikan apa sahaja yang anda meletakkan di hujah baris arahan sebagai hujah baris arahan. Atau jika anda tidak meletakkan apa-apa sama sekali, ia hanya akan mengabaikan itu dan hanya berkata, "hello kamu." Jadi menyusun ini. Membuat hello4. Dan berjalan hello4. Berjalan dengan cara ini, apa yang perlu dicetak? "Hello kamu." Hello anda. Bagaimana pula hello4 Rob? "Hello Rob." Dan akhirnya, hello Rob Maria hanya "hello" sekali lagi, kerana anda tidak benar-benar masukkan sesuatu yang ia harapkan. Anda masukkan lebih banyak nama daripada ia boleh mengendalikan, jadi ia hanya gagal untuk hello anda tingkah laku. Jadi soalan mengenai perkara ini? Atau hujah-hujah baris arahan? OK, jadi mengambil lihat pada beberapa lagi contoh menggunakan baris arahan arguments-- pertama kami telah argv dash 1 dot c. Jadi komen yang memberikan apa yang program ini harus lakukan. Tetapi notis sekarang-- ini untuk gelung, ini sepadan dengan corak yang tepat Yang saya katakan sebelum ini. Kami hanya berada menggunakan argc bukannya n. Sekarang argc adalah benar-benar n. Ia panjang array argv. Jadi, adakah iterating lebih argv lokasi printf-ing setiap nilai argv. Jadi, jika saya membuat ini. Membuat argv 1. Ia menyusun. Dot mengurangkan argv 1. Hanya berjalan ini, ia cetakan dot slash argv 1 kerana itu adalah satu-satunya baris arahan argument-- nama program. Akan sentiasa ada di least-- argc tidak boleh kurang daripada satu, kerana tidak akan sentiasa sekurang-kurangnya nama-program untuk berjalan. Jadi argv 1 Rob akan mencetak argv 1 dan kemudian pada baris baru "Rob." Jadi dalam lelaran pertama gelung ini, i adalah 0. Argv 0 adalah nama program. Dot mengurangkan argv 1. Dan kemudian argv 1 adalah pertama saya hujah baris arahan, iaitu Rob. Pada ketika ini, kami tidak sama dengan argc. Kami keluar daripada gelung dan kami sudah selesai. Jadi ini akan bekerja untuk sewenang-wenangnya beberapa hujah baris arahan. Perhatikan ia mencetak argv 0, argv 1, argv 2, argv 3, argv 4. Dan tidak ada argv 5. argc adalah bersamaan hingga 5. Jadi pada argc-- di i sama 5, kita keluar daripada gelung. OKAY. Jadi soalan mengenai bahawa sebelum kita melihat contoh yang lebih kompleks? Jadi argv 2. Baiklah. Oleh itu, kita masih percetakan hujah-hujah baris arahan. Tetapi kini melihat kita ada yang bersarang untuk gelung. Jadi apa yang ini buat? Jadi gelung pertama yang dilakukan apa yang ia lakukan sebelum ini. Kami masih menggelung lebih setiap hujah baris arahan, tetapi kini loop-- kedua ini kami telah juga dilihat sesuatu seperti ini sebelum ini. Apabila dia iterating lebih Zamyla mencetak Z-A-M-Y-L-A. Jadi ini gelung kedua untuk int j sama 0, n sama strlen argv kurungan i. Jadi mari kita mula-mula berfikir untuk the-- mari kita berjalan melalui. Mari kita berfikir apa yang komputer akan lakukan jika saya berlari program ini sebagai hanya dot mengurangkan argv dash 2. Jadi, jika saya berlari kod 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 mengurangkan argv 2-- nama program. OK, jadi sekarang saya sama dengan 0, i kurang daripada 1, i plus plus untuk int j sama dengan 0, n sama strlen argv kurungan 0, jadi dalam lelaran pertama gelung ini. argv kurungan 0 adalah slash dot argv 2. Jadi apa yang panjang tali itu? Nah, dot mengurangkan A-R-G-V dash 2. Jadi strlen itu akan 8. Jadi j sama dengan 0, n bersamaan 8. Selama j adalah kurang daripada 8, j ++. Dan dengan itu kita akan menjadi percetakan yang bersifat tunggal, yang adalah argv kurungan i braket j. Jadi satu-satunya i adalah sifar. Kita masih hanya mempunyai satu hujah baris arahan. Dalam bahawa lelaran pertama daripada untuk gelung, kami akan menjadi percetakan argv kurungan 0 kurungan 0. Dan kemudian j akan kenaikan. Dan kita akan percetakan argv kurungan 0 kurungan 1. Dan kemudian argv kurungan 0 kurungan 2. Jadi ini adalah pertemuan pertama kami array pelbagai dimensi. Ingat sebelum ini bahawa saya berkata argv yang secara teknikal pelbagai tatasusunan aksara. Jadi di sini jika saya berkata seperti rentetan s sama argv kurungan i, dan kemudian saya berkata, s kurungan j, ini akan mencapai perkara yang sama. Sekarang, anda telah melihat s kurungan j sebelum ini. Itu hanya mengakses j-ke- watak yang satu ini. Maka dengan ini, kami mendapat j-ke-watak i-ke argv. Jadi apa yang perlu akhirnya output ini? Membuat argv 2. Ia menyusun. Dot mengurangkan argv 2. "Rob Maria Hannah," dan memberikan kami beberapa bilik. Oleh itu, kita melihat bahawa ini adalah keluarkan dot pada baris sendiri dan slash pada baris sendiri dan pada baris sendiri. Ia mencetak setiap watak individu setiap hujah baris arahan. Dan kemudian di antara mereka, kerana barisan baru ini kami mencetak turun di sini, dalam antara mereka ia akan mencetak baris baru. Jadi ini adalah sama dengan melontarkan argv sebelum 1, yang dicetak setiap hujah baris arahan, tetapi sekarang kita mencetak hujah-hujah baris arahan dan kemudian iterating melalui setiap watak setiap hujah baris arahan untuk mendapatkan output ini. OKAY? Jadi soalan mengenai perkara ini? Satu perkara yang perlu diperhatikan adalah bahawa baris arahan arguments-- sehingga mereka dipisahkan oleh ruang sebagai anda secara semulajadi akan mengharapkan mereka untuk menjadi. Jadi rentetan boleh mempunyai ruang di dalamnya. Ia bukan super penting, tetapi jika saya mahu baris arahan hujah ketiga mempunyai ruang di dalamnya, maka saya boleh mengatakan sesuatu seperti ini. OKAY? Jadi ini sekarang masih hanya mempunyai tiga baris arahan arguments-- baik 4. Dot mengurangkan argv dash 2, Rob, Maria dan Hannah Bloomberg. OKAY. Soalan-soalan mengenai perkara ini? Ada apa-apa yang istimewa tentang watak ruang. Ia hanya berlaku untuk menjadi bahawa baris arahan merawat aksara ruang bagaimana anda memisahkan setiap hujah. Baiklah. Oleh itu, maka set Masalah two-- anda akan menjadi melihat kriptografi rahsia utama. Jadi, sama dengan contoh yang kita lihat dari A Story Krismas, anda akan dapat melaksanakan beberapa algoritma bahawa, memandangkan mesej, anda akan dapat untuk menyulitkan mesej yang bahawa hanya seseorang yang mempunyai rahsia yang utama, dengan bahawa cincin decoder, akan dapat menyahsulit. Jadi itulah edisi standard. Anda akan dapat melaksanakan dua versi yang berbeza. Jika anda berlaku untuk melihat dengan di penggodam Edisi sekarang, kita akan memberi anda rentetan seperti ini, yang mewakili kata laluan disulitkan. Jadi matlamat anda adalah untuk memikirkan apa kata laluan yang dibuka adalah. Sekarang ini adalah benar-benar bagaimana kata laluan disimpan dalam banyak komputer, dan ia hanya menyimpan ini rentetan aksara rawak. Anda perlu memikirkan bagaimana untuk mendapatkan dari rentetan ini aksara rawak apa kata laluan asal adalah. Dan akhirnya, selepas ini set masalah, anda perlu dapat memahami apa yang dimaksudkan. Jadi, anda akan belajar bagaimana untuk menyahsulit seperti ini rentetan rawak. Begitu juga, jika anda masih ingat dari minggu 0, anda mungkin telah melihat URL ini. Dan anda akan dapat menyahsulit ini akhirnya. Anda mungkin tidak akan gembira apabila anda menyahsulit dan klik pada pautan. Baiklah. Itu sahaja untuk hari ini. Maka perhatikanlah lagi minggu depan! [Bermain muzik ELECTRONIC]