[MUZIK bermain] DAVID J. MALAN: Baiklah. Ini adalah CS50, dan ini adalah akhir Minggu Empat. Dan salah satu topik hari ini ialah forensik digital, seni pulih maklumat. Dan memang, walaupun anda di tengah sekarang Damai di Three dan Breakout, minggu depan, tumpuan akan diberikan pada tepat domain ini. Jadi salah satu pekerjaan yang paling sejuk yang pernah saya terpaksa kembali ke sekolah siswazah, apabila saya bekerja untuk tempatan Middlesex County Daerah Peguam ini pejabat, melakukan forensik bekerja. Jadi pada dasarnya, Massachusetts Polis Negeri, kadang-kadang, apabila bekerja pada kes-kes akan membawa perkara-perkara seperti cakera keras dan cakera liut dan kad memori dan seumpamanya. Dan mereka akan menyerahkan mereka kepada saya dan mentor saya, dan matlamat kami adalah untuk mencari bukti, jika ada apa-apa, di media-media ini. Sekilas sekarang, anda mungkin telah melihat dunia forensik dalam media, TV dan filem. Tetapi kerja saya, dan berani mengatakan dunia itu, tidak cukup seperti anda akan melihatnya. Mari kita lihat apa yang anda mungkin telah melihat. [VIDEO MAIN SEMULA] -OK. Sekarang, mari kita lihat baik pada anda. [MUZIK bermain] -Hold Ia. Berlari kembali itu. -Wait Minit. Pergi ke kanan. -Terdapat. Membekukan itu. Skrin -full. -OK. Membekukan itu. -Tighten Di atas itu, akan anda? -Vector Dalam pada itu lelaki dengan roda belakang. -Zoom Di di sini di tempat ini. -with Peralatan yang betul, imej boleh dibesarkan dan tajam. -Apa Itu? -Ia Merupakan satu program peningkatan. -Boleh Anda jelas bahawa sebarang? -Saya Tidak tahu. Mari kita meningkatkan ia. -Meningkatkan Seksyen A6. Saya dipertingkatkan terperinci, dan- -Saya Fikir ada cukup untuk meningkatkan. Melepaskannya ke skrin saya. -Saya Dipertingkatkan pantulan pada mata dia. -Let S berjalan melalui peningkatan video. -Edgar, Anda boleh meningkatkan ini? -Hang Pada. -Aku Telah bekerja pada refleksi ini. Renungan seseorang -Terdapat itu ini. -Reflection. -Terdapat Satu renungan muka manusia. Renungan-The! -Terdapat Adalah satu pantulan. -Zoom Di atas cermin. Anda boleh melihat pantulan. -Boleh Anda meningkatkan imej dari sini? -Boleh Anda meningkatkan ia? -Boleh Anda meningkatkan ia? -Boleh Kita meningkatkan ini? -Boleh Anda meningkatkan ia? -Hold Pada saat. Saya akan meningkatkan. -Zoom Di pintu. -Times 10. -Zoom. -Move Dalam. -Lebih. -Wait, Berhenti. -Stop. -Pause Ia. -Putar Kami 75 darjah sekitar menegak, sila. -Stop. Kembali ke bahagian kira-kira pintu lagi. -Got Enhancer imej bitmap yang boleh? -Maybe Kita boleh menggunakan Pradeep Singh kaedah untuk melihat ke tingkap. Perisian-The adalah keadaan seni. Nilai eigen-The dimatikan. -with Hak gabungan algorithms-- Pencahayaan diambil -Dia ini algoritma ke tahap yang seterusnya, dan saya boleh menggunakannya untuk meningkatkan gambar ini. -Lock Pada dan membesarkan-paksi z. -Meningkatkan. Meningkatkan. -Meningkatkan. -Freeze Dan meningkatkan. [VIDEO AKHIR MAIN SEMULA] DAVID J. MALAN: Jadi mereka adalah semua kata-kata, tetapi mereka tidak digunakan dalam ayat dengan betul. Dan sesungguhnya pada masa akan datang, bila-bila masa, sila, anda mendengar seseorang mengatakan perkataan tersebut, "Meningkatkan," ketawa hanya sedikit. Kerana apabila anda cuba untuk meningkatkan, misalnya, ini adalah apa yang berlaku. Jadi di sini adalah satu gambar yang cantik. Ini adalah CS50 sendiri Daven. Dan katalah kita mahu memberi tumpuan dalam pada sekelip dalam matanya, atau pantulan yang lelaki yang buruk yang jelas yang ditangkap oleh kamera keselamatan. Ini adalah apa yang berlaku apabila anda zum masuk pada imej yang hanya mempunyai beberapa terhingga bit yang dikaitkan dengannya. Itulah apa yang anda akan mendapat. Dan sesungguhnya, di mata Daven ini tetapi adalah empat, mungkin enam piksel yang mengarang apa telah kelip redup di sana. Jadi Set Masalah Empat akhirnya akan mempunyai anda meneroka dunia ini, terutamanya oleh sifat sesuatu kita panggil fail i / o, di mana i / o adalah hanya satu cara mewah daripada berkata input dan output. Jadi setakat ini, semua interaksi kami mempunyai dengan komputer telah sebahagian besarnya dengan anda papan kekunci dan skrin, tetapi tidak begitu banyak dengan cakera keras, atau menyimpan fail di luar yang anda diri anda menulis. Program anda setakat ini mempunyai tidak mewujudkan, dan menyimpan, dan mengemas kini fail-fail mereka sendiri. Nah, apa yang gambar? Well, sesuatu seperti JPEG. Ini adalah imej yang anda mungkin mempunyai atau memuat naik ke Facebook, atau melihat mana-mana sahaja di web. Sesungguhnya, gambar yang kita hanya saw daripada Daven adalah JPEG a. Dan apa yang menarik mengenai fail seperti JPEG adalah bahawa mereka boleh dikenal pasti, biasanya, dengan corak tertentu bit. Dalam erti kata lain, apakah yang membezakan JPEG dari GIF yang dari PING dari kalimah dokumen dari fail Excel? Nah, ia hanya berbeza corak bit. Dan orang-corak yang berbeza adalah biasanya pada permulaan fail-fail. Supaya apabila komputer anda membuka Word yang doc, atau apabila komputer yang membuka JPEG, ia kelihatan biasanya di beberapa bit pertama dalam fail. Dan jika ia mengiktiraf corak, ia berkata, oh, ini adalah imej. Biar saya memaparkannya kepada pengguna sebagai grafik. Atau, oh, ini kelihatan seperti doc Word. Biar saya tunjukkan kepada pengguna sebagai esei. Jadi misalnya, JPEG, ternyata, adalah agak canggih di bawah hood. Tetapi tiga bait pertama dalam kebanyakan setiap JPEG bermula dengan tiga nombor. Jadi bait sifar, satu dan dua, pada setiap JPEG, 255, maka jumlah yang paling 216, maka bilangan 255. Dan apa yang anda akan dapat untuk mula melakukan minggu depan sebenarnya poking di bawah hud fail seperti JPEG dan seperti fail bitmap, dan melihat apa yang sentiasa berada di sana selama kerana anda telah menggunakan komputer. Tetapi apa yang tidak ada biasanya bertulis seperti nombor perpuluhan seperti ini. Saintis komputer tidak cenderung untuk bercakap dalam perpuluhan. Mereka tidak benar-benar bercakap dalam perduaan. Biasanya, apabila kita hendak untuk menyatakan nombor, kita sebenarnya menggunakan perenambelasan, yang mana yang diketahui daripada, katakan, Set Masalah Satu, yang mencabar anda untuk berfikir tentang sistem yang berbeza. Kami, sudah tentu, sudah biasa dengan perpuluhan, sifar melalui sembilan. Kita bercakap tentang binari. Dan kita tidak benar-benar mempunyai untuk menggunakan yang banyak di sini pada keluar, kerana komputer akan menggunakan itu. Tetapi pengaturcara akan sangat sering, tetapi tidak semestinya, menggunakan perenambelasan, yang hanya bermakna anda mempunyai 16 huruf dalam abjad anda, berbanding dengan dua atau 10. Jadi bagaimana anda mengira yang lebih tinggi daripada sembilan dalam perenambelasan? Anda pergi 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, hanya dengan konvensyen. Tetapi apa yang penting adalah bahawa setiap ini adalah simbol tunggal. Tidak ada 10. Tidak ada 11, per se, kerana setiap digit anda, hanya suka dalam perpuluhan dan sama seperti dalam binari, sekiranya hanya menjadi watak tunggal, oleh konvensyen. Supaya kemudian adalah abjad yang kita ada ada di tangan kita untuk perenambelasan. Jadi apakah yang JPEG kelihatan seperti jika anda adalah untuk menulis tiga pertama tidak bait sebagai perpuluhan tetapi, misalnya, sebagai perenambelasan? Dan mengapa hex bahkan segala yang berguna? Nah, melihat cepat pada contoh. Jadi, jika saya menulis bit yang mewakili ini numbers-- perpuluhan ini mungkin sedikit berkarat sekarang dari beberapa minggu ke belakang, tetapi satu di sebelah kiri dan satu hak yang cukup mudah. 255 adalah yang terbesar bilangan kami boleh mewakili dengan lapan bit. Ia adalah semua orang. Jadi satu-satunya itu lemah-lembut, menarik ialah yang pertengahan. Dan jika anda jenis buat di luar yang matematik, anda akan simpulkan bahawa, memang, yang corak satu dan sifar mewakili 216. Jadi mari kita hanya menetapkan untuk sekarang ini adalah betul. Tetapi mengapa ini menarik? Nah, satu bait, sudah tentu, adalah lapan bit. Dan ternyata bahawa jika anda berfikir sebuah bait sebagai dua ketulan empat bit, seperti ini. Biar saya menambah beberapa ruang. Jadi sebelum, selepas. Saya baru sahaja menambah beberapa ruang putih demi visualisasi di sini. Bagaimana mungkin kita dalam mewakili, katakan, perenambelasan setiap quad bit, setiap set empat bit? Jadi misalnya, di sebelah kiri sekarang, kita mempunyai 1111 dalam perduaan. Apakah nombor yang dalam perpuluhan, jika anda membuat pengiraan? Anda mempunyai tempat orang, tempat yang berdua-dua, tempat merangkak, dan tempat yang lapan. PENONTON: 15. DAVID J. MALAN: Ini 15. Jadi jika kita melakukan lapan campur empat tambah dua tambah satu, kita akan mendapat 15. Jadi saya boleh menulis 15 di bawah 1111, tetapi seluruh titik di sini adalah perenambelasan, tidak perpuluhan. Jadi, daripada menulis 15, 1-5, Saya akan menulis bahawa dalam hex, yang jika anda berfikir kembali, jika anda mempunyai sifar melalui f, apa yang 15 akan menjadi? PENONTON: f. DAVID J. MALAN: Jadi ternyata f itu ini. Dan anda boleh bekerja yang keluar dengan berkata, baik, jika yang adalah 10, maka OK, f ialah 15. Jadi sesungguhnya, kita boleh menulis semula set sama seperti nombor f f. Kemudian jika kita lakukan sedikit matematik, kami akan simpulkan bahawa itu d. Lapan adalah cukup mudah, kerana kita mempunyai satu dalam lapan tempat itu. Dan kemudian, kita mempunyai pasangan yang lebih f f ini. Jadi apa yang manusia cenderung untuk melakukannya oleh konvensyen apabila mereka menggunakan perenambelasan adalah mereka hanya menulis ini sedikit lebih ringkas, menyingkirkan kebanyakan ruang putih. Dan hanya untuk menjadi super jelas kepada pembaca bahawa ini adalah perenambelasan, konvensyen yang mudah di kalangan manusia adalah anda menulis sifar x, yang tidak mempunyai makna lain daripada pengecam visual, di sini datang beberapa hex. Dan kemudian, anda meletakkan kedua-dua digit, f f dalam kes ini, maka d, maka f f. Jadi cerita panjang pendek, perenambelasan hanya cenderung berguna kerana setiap yang digit, sifar melalui f, sempurna garis dengan corak empat bit. Jadi, jika anda mempunyai dua digit perenambelasan, sifar melalui F, sekali lagi dan sekali lagi, yang memberikan anda dengan sempurna lapan bit atau satu bait. Jadi itulah sebabnya ia cenderung untuk menjadi konvensional berguna. Tidak ada intelektual kandungan benar-benar di luar itu, selain daripada utiliti sebenar. Sekarang JPEG bukan satu-satunya memfailkan format grafik. Anda mungkin ingat bahawa terdapat fail seperti ini di dunia, sekurang-kurangnya dari beberapa tahun lalu. Jadi ini sebenarnya dipasang dalam Windows XP pada berjuta-juta komputer di seluruh dunia. Dan ini adalah fail bitmap, BMP. Dan fail bitmap, seperti yang anda akan lihat di sebelah minggu, hanya bermakna corak titik, piksel kerana mereka dipanggil, sebuah peta pada bit, benar-benar. Jadi apa yang menarik, walaupun, tentang perkara ini format fail, BMP, adalah bahawa di bawah hud, ia mempunyai lebih daripada hanya tiga bait yang mendirikan header, jadi untuk bercakap, beberapa gigitan pertama. Ia benar-benar kelihatan sedikit rumit pada pandangan pertama. Dan anda akan melihat ini dalam P set. Dan mendapat sesuatu keluar tertentu ini sekarang tidak begitu penting, kerana hanya fakta bahawa pada permulaan setiap bitmap fail, format grafik, ada sejumlah besar nombor. Sekarang Microsoft, yang pengarang format ini, cenderung untuk memanggil orang-orang perkara yang tidak ints dan aksara dan terapung tetapi kata-kata dan d kata-kata dan Roh meronta-ronta dan bait. Jadi mereka hanya jenis data yang berbeza. Mereka nama yang berbeza untuk perkara yang sama. Tetapi anda akan melihat bahawa dalam P Set Empat. Tetapi ini hanya untuk mengatakan bahawa jika manusia double-klik beberapa fail .BMP pada beliau atau cakera keras beliau, dan membuka tingkap sehingga menunjukkan kepadanya atau beliau imej itu, yang berlaku kerana operasi sistem mungkin perasan bukan sahaja sambungan fail .BMP di dalam nama fail, tetapi juga hakikat bahawa ada beberapa konvensyen dengan corak bit pada awal-awal dari fail bitmap. Tetapi mari kita kini memberi tumpuan kepada seperti fail rumit, tetapi sebaliknya kepada sesuatu yang seperti ini. Katakan di sini di gedit, saya hanya perlu permulaan daripada program yang cukup mudah. Saya telah mendapat beberapa termasuk sehingga atas. Sekarang saya telah mendapat #temasuk "structs.h" tetapi Saya akan kembali kepada yang dalam sekejap. Tetapi ini adalah berguna untuk sekarang. Jadi ini adalah satu program yang perkara yang berlaku untuk melaksanakan seperti pangkalan data pendaftar. Jadi pangkalan data pelajar, dan setiap pelajar di dunia mempunyai nama dan rumah dan mungkin beberapa barangan lain, tetapi kami akan memastikan ia mudah. Setiap pelajar mempunyai nama dan sebuah rumah. Jadi jika saya mahu menulis program yang tujuan dalam hidup hanya untuk melelar dari sifar pada sehingga tiga, jika ada tiga pelajar di Universiti Harvard. Dan saya hanya mahu untuk mendapatkan, menggunakan GetString, nama setiap pelajar dan rumah, dan kemudian hanya mencetak mereka keluar. Ini adalah jenis seperti Minggu Satu, Dua Minggu barangan sekarang, di mana saya hanya mahu untuk gelung atau sesuatu seperti itu. Dan saya mahu memanggil GetString beberapa kali, dan kemudian mencetak f beberapa kali. Jadi bagaimana saya boleh melakukan ini, walaupun, apabila kedua-dua nama dan rumah terlibat bagi setiap pelajar? Jadi naluri pertama saya mungkin adalah untuk melakukan sesuatu seperti ini. Pertama saya mungkin berkata, dengan baik, memberi saya, berkata, pelbagai rentetan dipanggil nama. Dan saya tidak mahu hardcode tiga di sini. Apa yang saya mahu meletakkan di sana? Jadi PELAJAR, kerana itulah yang tetap diisytiharkan di bahagian atas, hanya jadi saya tidak perlu hardcode tiga di pelbagai tempat. Dengan cara ini, saya boleh menukar ia satu tempat, dan ia memberi kesan kepada perubahan di mana-mana. Dan kemudian, saya boleh lakukan rentetan menempatkan PELAJAR. Dan sekarang, saya mungkin melakukan sesuatu seperti untuk (int i = 0; i