[Powered by Google Translate] DAVID J. Malan: Baiklah, ini adalah CS50 dan ini adalah akhir Minggu 1, sehingga kartu studi dalam dan jumlah total teman sekelas yang Anda miliki tahun ini adalah 745. Dan kami sangat senang untuk memiliki begitu banyak dari Anda dalam kursus semester ini, tapi meskipun tentu saja ini begitu besar, menyadari bahwa itu adalah hal-hal seperti makan siang Jumat, seperti Kantor jam, 15 orang bagian, dan sebagainya yang benar-benar dimaksudkan untuk menciptakan lebih intim lingkungan. Jadi meskipun kita dapat berkumpul sekali atau dua kali seminggu, di sini di Sanders, tahu bahwa banyak pengalaman Anda dalam kursus ini akan sangat menjadi tangan-on di samping teman sekelas Anda dan staf pengajar. Jadi di sini kita pergi, Jatuh 2012. Jadi ingat bahwa terakhir kali kita berakhir pada catatan ketidaktepatan, berbicara tentang representasi dari angka. Dan kita melihat salah satu kegagalan yang terjadi, dalam dunia nyata, ketika datang ke kesalahpahaman bagaimana komputer bekerja. Nah, hari ini kita akan kembali lagi salah satu ide serta melanjutkan diskusi kami dari klien CS50 dan C dan apa artinya benar-benar untuk program. Tapi pertama-tama, hanya beberapa pengumuman angin puyuh. Bagian mulai hari Minggu ini, dan minggu pertama selalu sedikit awal yang cepat, karena kita baru saja di bentuk bagian Anda. Kami sedang melakukan hal yang sama, sekarang, dengan rekan-rekan mengajar, sekarang bahwa mereka tahu jadwal mereka, jadi kami bertujuan, dengan Sabtu pagi, untuk menindaklanjuti dengan Anda dengan bagian Anda tugas dan TF. Sadarilah bahwa mereka akan memulai hari berikutnya, Minggu atau Senin atau Selasa. Dan kemudian kita akan mengakomodasi perubahan bagian yang muncul pada hari-hari yang akan datang. Jam kantor, sementara itu, adalah, sekali lagi, malam ini, 8 PM untuk 11, di Annenberg, serta besok malam. Meskipun set masalah umumnya jatuh tempo pada hari Kamis pada siang hari, menyadari bahwa Anda memiliki hingga lima hari untuk menghabiskan akhir, maka ketersediaan jam kerja pada hari Kamis jika Anda uang tunai di salah satu dari hari-hari akhir dan, dengan demikian, kirimkan sesuatu pada hari Jumat. Izinkan saya menyarankan bahwa Scratch adalah salah satu lebih menyenangkan, antara lebih rendah set masalah utama. Dan aku akan menggantung ke hari-hari akhir, strategis, hanya untuk kemudian di semester ketika hidup mulai mendapatkan di jalan dengan ujian tengah semester dan kelas-kelas lainnya. Soal Set 1, sementara itu, akan diposting pada kursus ini website ini Jumat, karena akan berada di jalan kursus ini melalui video, yang akan difilmkan di 2:30 malam pada hari Jumat dan kemudian diposting online pada hari berikutnya. Jadi kita berakhir pada hari Senin. Saya ingin - sebenarnya, salah satu mencatat di sini. Karena kelas - karena Sanders tidak tepat meminjamkan sendiri untuk Q & santai kembali A dan sebagainya sangat baik, kami akan mencoba sesuatu yang sedikit tahun baru ini, dimana jika Anda tidak nyaman mengangkat tangan Anda atau Anda hanya suka tidak mengangkat tangan Anda di sebuah ruangan seperti ini, kita akan memiliki beberapa rekan-rekan mengajar dan CA mengawaki cs50.net/discuss selama kuliah. Jadi jika Anda memiliki pertanyaan karena saya benar-benar jelas tentang sesuatu atau Anda penasaran tentang beberapa topik, coba posting di sana. Tag dengan label Kuliah, dan kami akan melakukan yang terbaik hari ini dan minggu depan - kami mencoba ini - ke lapangan itu baik secara elektronik, online, atau jika rasanya kita harus benar-benar alamat itu secara massal, salah satu rekan pengajaran atau CA akan mengangkat tangan mereka dan meminta anonim atas nama Anda. Jadi kita akan memberikan ini mencoba dan melihat seberapa baik ini bekerja. Tapi, dengan segala cara, terus mengangkat tangan seperti yang Anda inginkan. Jadi terakhir kali kami mengungkapkan bahwa 10% atau sepersepuluh tidak, dalam Bahkan, 0,1, seperti Anda diajarkan bertahun-tahun yang lalu. Ini pada kenyataannya, nilai seperti ini. Tapi itu tidak sepenuhnya benar, kan? Kami hanya memiliki kendala ini di komputer dimana, jika Anda hanya memiliki jumlah terbatas memori, RAM, atau lebih bit khusus, baik, hanya ada sejumlah terbatas hal yang dapat mewakili. Sebagai contoh, jika kita memiliki angka nol, dan kami ingin mewakili dalam biner, menggunakan delapan bit, di mana sedikit, lagi, adalah nol atau satu, kita mungkin mewakili sebagai 00000000. Dan itu perlu sedikit verbose. Sama seperti dalam sistem desimal di dunia nyata, pada umumnya, jika Anda ingin menulis nomor 123, kita manusia mungkin tidak menulis 00000123 meskipun, fungsional, itu jumlah yang sama persis. Kami hanya drop nol terkemuka, sehingga untuk berbicara. Dalam biner, kita bisa melakukan hal yang sama. Biner dan nol, nol dan biner hanya nol. Anda hanya perlu satu bit. Tapi sekali lagi, unit paling umum dari ukuran di dunia komputasi adalah byte, delapan bit. Hanya karena satu bit, cukup berguna. Delapan bit, tidak terlalu berguna, tapi setidaknya itu lebih berguna daripada satu unit ukuran. Jadi dengan delapan bit, kita biasanya akan mewakili biner. Jadi di sini kita memiliki angka nol, satu, dua, dan kemudian, seperti yang Nate lakukan di video kami Rabu lalu, kita dapat melanjutkan menghitung sampai tujuh, delapan. Dan kemudian jika kita menggunakan bit lebih dan lebih, kita dapat menghitung sampai tak terhingga. Tetapi jika Anda hanya memiliki jumlah terbatas bit-bit, seperti kasus dalam sistem komputer, atau bahkan rudal sistem, baik, memang Anda hanya memiliki terbatas jumlah presisi. Jadi jika Anda ingin untuk mewakili nomor seperti 0.1, baik, komputer harus memilih. Dan jika hanya memiliki jumlah terbatas angka itu bisa mewakili, maka dapat datang dekat dengan 0,1 untuk Anda, tapi tidak bisa selalu memberikan persis nilai yang Anda inginkan. Dan ini hanya salah satu tantangan dari komputer, bawah kap mesin, untungnya. Ketika kita bergerak lebih jauh dalam semester, ini tingkat yang lebih rendah rincian menjadi jauh lebih menarik, tapi pasti penerapan ide ini dapat memiliki beberapa dunia yang sangat nyata konsekuensi. Salah satunya adalah menyenangkan sedikit. Berapa banyak dari Anda telah melihat film Space Office menakjubkan? Jika Anda belum, itu tidak resmi Anda PR selama seminggu. Namun dalam Office Space, rekan-rekan dalam film yang mengambil keuntungan justru ide ini, tetapi mereka benar-benar mencuri itu dari film lain yang mungkin Anda miliki dilihat, bahkan bertahun-tahun sebelumnya. Jadi izinkan saya memberi Anda beberapa detik dari trailer ini dari film ini luar biasa dan ini sangat banyak akademis yang relevan. [Bermain film] Sebenarnya saya sedang dipromosikan. Saya bisa memprogram virus yang akan merobek bahwa menempatkan off waktu besar. Nah, bagaimana cara kerjanya? Setiap kali ada transaksi bank di mana bunga dihitung, ada ribuan per hari, komputer berakhir dengan pecahan sen. Tapi aku tidak akan melakukan sesuatu yang ilegal. Illegal? Samir, ini adalah Amerika. Anda harus bersumpah kepada Tuhan. Jika tidak ada yang tahu tentang hal ini tetapi kita, baik-baik saja? Tidak ada anggota keluarga, tidak ada pacar, tidak ada. [Tak terdengar]. Jangan khawatir, man, saya tidak akan memberitahu siapa pun baik. [FILM ENDS] Baiklah, jadi mungkin saya menemukan film ini lebih baik daripada kebanyakan orang di sini, tetapi dalam hal apapun, virus yang mereka mencoba untuk membuat - dan di film, kapan mereka akan menyebut sesuatu virus, itu umumnya tidak benar-benar virus. Ini hanya sebuah program yang seseorang menulis untuk melakukan sesuatu. Dan dalam hal ini, orang-orang mencoba untuk menulis sebuah program yang mengambil keuntungan dari perusahaan mereka yang disebut itu Innotech sistem komputasi, dimana komputer, juga, bahkan ketika datang ke uang, tidak bisa serta merta mewakili uang tepatnya. Jadi meskipun Anda mungkin memiliki $ 0.10 di rekening bank Anda, 0,10, dengan baik, komputer mungkin benar-benar berpikir bahwa Anda memiliki ini banyak sen di rekening bank Anda. Dan jadi apa orang-orang yang bercita-cita untuk melakukan - dan mereka mencuri ide, ternyata dari Superman III, di mana Richard Pryor melakukan hal yang sama - mereka pada dasarnya menulis program yang bercita-cita untuk mengambil semua trailing angka, semua, kecil kecil, pecahan kecil uang, dan menyedot mereka off sehingga manusia hanya berpikir, oh, itu hanya $ 0,10 sana, tapi semua orang nomor membuntuti akhirnya bertambah. Jadi ide bagus dan itu menjadi bumerang meriah dalam khususnya film. Tapi di dunia nyata, juga, ada jauh lebih memprihatinkan implikasi dari hal-hal ini. Dan salah satu alasan untuk menyelam ke dalam bidang komputer ilmu adalah, sekali lagi, penerapannya tidak dengan ilmu teknik saja, tetapi hanya untuk bidang lainnya juga. Jadi ini adalah melihat lebih ringan pada apa yang bisa salah, tetapi itu juga cukup membuka mata, saya pikir, ketika datang ke memahami persis bagaimana mana-mana teknologi seperti komputer dan pemrograman atau hari ini, dalam bentuk software. Jadi ini klip berikutnya hanya sekitar enam menit, terus di mana kami tinggalkan terakhir kali, namun memungkinkan kita untuk melihat sedikit lebih mendalam di salah satu seperti masalah ini. Biarkan saya melompat ke tempat kami tinggalkan, yang ada di sini. Dan kami memiliki dua bagian dari dua, selama sekitar enam menit di sini. [MAIN FILM] Terganggu teknologi roket modern. Pada tahun 1991, dengan dimulainya Perang Teluk pertama, Patriot rudal mengalami serupa Nomor konversi masalah. Dan sebagai hasilnya, 20 orang, 20 tentara Amerika, tewas dan sekitar 100 lainnya luka-luka, ketika Patriot, yang seharusnya untuk melindungi terhadap Scud masuk, gagal menembakkan rudal. Ketika Irak menginvasi Kuwait dan Amerika meluncurkan sebuah Desert Badai di awal 1991, baterai rudal Patriot adalah dikerahkan untuk melindungi Arab Saudi dan Israel dari Irak Rudal Scud serangan. Patriot adalah AS jarak menengah permukaan-ke-udara sistem, diproduksi oleh perusahaan Raytheon. Ukuran interceptor Patriot sendiri, ini tentang sekitar 20 meter panjang dan beratnya sekitar 2.000 pound. Dan itu membawa hulu ledak sekitar - saya pikir itu sekitar 150 pound. Dan hulu ledak itu sendiri adalah ledak tinggi yang memiliki fragmen sekitarnya. Casing dari hulu ledak dirancang untuk bertindak seperti gotri. Rudal itu dilakukan empat per kontainer dan diangkut oleh semi trailer. The Patriot anti-rudal sistem kembali setidaknya ke 20 tahun sekarang. Ini pada awalnya dirancang sebagai rudal pertahanan udara untuk menembak jatuh pesawat musuh, dalam Perang Teluk pertama. Ketika perang itu datang, Angkatan Darat ingin menggunakannya untuk menembak bawah Scud, bukan pesawat terbang. Angkatan Udara Irak tidak begitu banyak masalah, namun Angkatan Darat khawatir tentang Scud. Dan sehingga mereka mencoba untuk meng-upgrade Patriot. Mencegat rudal musuh bepergian di MACH 5 akan akan cukup menantang. Tapi ketika Patriot itu bergegas ke dalam layanan, Angkatan Darat tidak menyadari suatu modifikasi Irak yang membuat mereka Scud hampir mustahil untuk memukul. Apa yang terjadi adalah rudal Scud yang datang tidak stabil. Mereka bergoyang-goyang. Alasan untuk ini adalah Irak, dalam rangka untuk mendapatkan 600 kilometer keluar dari rudal jarak 300 kilometer, mengambil berat keluar dari hulu ledak depan dan membuat hulu ledak ringan. Jadi sekarang Patriot berusaha untuk datang di Scud, dan sebagian besar waktu, mayoritas waktu, itu akan hanya terbang oleh Scud. Setelah operator Patriot sistem menyadari Patriot merindukan target, mereka meledakkan hulu ledak Patriot. Untuk menghindari korban yang besar, hal itu diperbolehkan jatuh ke tanah. Itulah apa yang kebanyakan orang melihat, seperti bola api besar di langit, dan disalahpahami sebagai penyadapan hulu ledak Scud. Meskipun, di langit malam, Patriots tampaknya Scud berhasil dihancurkan, di Dhahran, tidak mungkin ada kesalahan tentang kinerjanya. Di sana, sistem radar Patriot kehilangan jejak dari sebuah masuk Scud dan tidak pernah diluncurkan karena untuk cacat software. Itu adalah Israel yang pertama kali menemukan bahwa semakin lama sistem itu pada, semakin besar perbedaan waktu menjadi, karena jam tertanam di komputer sistem. Sekitar dua minggu sebelum tragedi di Dhahran, yang Israel dilaporkan ke Departemen Pertahanan bahwa Sistem kehilangan waktu. Setelah sekitar delapan jam berjalan, mereka melihat bahwa Sistem itu menjadi terasa kurang akurat. Departemen Pertahanan menanggapi dengan mengatakan semua baterai Patriot untuk tidak meninggalkan sistem untuk waktu yang lama. Mereka tidak pernah mengatakan apa lama adalah - 8 jam, 10 jam, 1.000 jam. Tak ada yang tahu. Baterai Patriot ditempatkan di barak di Dhahran dan jam cacat internal telah di lebih dari 100 jam malam tanggal 25 Februari. Ini dilacak waktu dengan akurasi sekitar sepersepuluh detik. Sekarang sepersepuluh dari kedua adalah nomor menarik karena tidak dapat dinyatakan dalam biner, tepatnya, yang berarti itu tidak dapat dinyatakan tepat dalam setiap komputer digital modern. Sulit untuk percaya. Tetapi menggunakan ini sebagai contoh. Mari kita mengambil nomor yang ketiga. Satu ketiga tidak dapat dinyatakan dalam desimal, tepatnya. Sepertiga adalah 0,333 berlangsung tak terhingga. Tidak ada cara untuk melakukan itu dengan akurasi mutlak dalam desimal. Itu persis jenis masalah yang sama yang terjadi di Patriot. Semakin lama sistem berlari, kesalahan yang buruk menjadi waktu. Setelah 100 jam operasi, kesalahan dalam waktu hanya sekitar sepertiga detik. Tapi dalam hal menargetkan rudal bepergian di MACH 5, itu mengakibatkan kesalahan pelacakan lebih dari 600 meter. Ini akan menjadi kesalahan fatal bagi tentara di Dhahran. Apa yang terjadi adalah peluncuran Scud terdeteksi oleh peringatan dini satelit dan mereka tahu bahwa Scud itu datang mereka umum arah. Mereka tidak tahu di mana itu berasal. Itu sekarang sampai dengan komponen radar Patriot sistem, membela Dhahran, untuk mencari dan melacak masuk musuh rudal. Radar itu sangat cerdas. Anda benar-benar akan melacak posisi Scud dan kemudian memprediksi di mana mungkin akan menjadi waktu berikutnya radar mengirimkan pulsa keluar. Yang disebut gerbang jangkauan. Kemudian, setelah Patriot memutuskan cukup waktu telah berlalu pergi kembali dan memeriksa lokasi ini selanjutnya terdeteksi objek, itu akan kembali. Jadi ketika kembali ke tempat yang salah, kemudian tidak melihat keberatan, dan memutuskan bahwa ada tidak ada objek. Itu adalah deteksi palsu dan tetes trek. The Scud masuk menghilang dari layar radar. Dan beberapa detik kemudian, ia menabrak barak. The Scud menewaskan 28 dan yang terakhir dipecat selama Perang Teluk pertama. Tragisnya, perangkat lunak diperbarui tiba di Dhahran hari berikutnya. Dan kelemahan perangkat lunak telah diperbaiki, menutup satu bab dalam sejarah bermasalah dari rudal Patriot. PATRIOT sebenarnya singkatan dari "Pelacakan Array bertahap Mencegat target. " Semua, yang tepat sehingga hasil yang jauh lebih menyedihkan dari tidak cukup memahami dunia ini. Dan takeaway, benar-benar, dari film ini adalah bahwa solusi ada itu reboot sistem rudal pertahanan Anda setiap sekali dalam beberapa saat. Dan begitu lagi, salah satu tujuan dari program ini, tentu pada skala yang lebih sederhana daripada aplikasi ini, adalah untuk semua orang benar-benar open mata untuk persis bagaimana Anda pergi tentang membuat mesin melakukan apa yang Anda ingin mereka lakukan dan bagaimana Anda pergi melakukan itu dengan benar, sementara sepanjang jalan melakukannya dengan baik, elegan, dan sebagainya. Dan sehingga hari ini, mari selami sedikit lebih dari ini, namun sehingga kita tidak pergi terlalu cepat, terutama bagi mereka yang kurang nyaman, tetapi juga agar kita dapat mempertahankan kepentingan mereka lebih nyaman, mari kita mulai dengan cepat sedikit dari rekap dari beberapa ide. Dan lagi, meminta pergi, baik secara langsung atau online, jika Anda memiliki pertanyaan sehingga kita bisa membuat semua orang pada halaman yang sama. Jadi Appliance CS50, langkah cepat kembali, adalah apa, dengan kata-kata Anda sendiri? Tidak masalah jika Anda tidak tahu apa kata-kata mungkin belum. [Tak terdengar] Oke, jadi antarmuka universal untuk - bahwa kita semua bisa berbagi. Tentu saja. Jadi kita bisa, misalnya, memberitahu Anda untuk pergi ke beberapa situs, men-download software ini untuk Mac OS. Mendownload software ini untuk Windows, mengkonfigurasi di cara ini dan itu. Tetapi kenyataannya adalah maka kita mengalami teknis yang tak terhitung mendukung isu-isu. Dan juga hari ini, banyak dari apa yang sedang dilakukan sisi server, dalam dunia komputasi, terutama ketika datang ke pengembangan web dan aplikasi berbasis web, sebenarnya cukup sering dilakukan pada komputer Unix atau Linux, sebagai lawan Mac atau PC Windows. Jadi antara upsides, kemudian, menggunakan hal ini disebut CS50 Appliance adalah kita semua akan memiliki lingkungan yang sama. Jadi semua orang pada halaman yang sama tidak peduli hardware apa yang Anda datang ke kampus dengan tetapi juga akan berkecimpung persis lingkungan yang sama yang Anda akan menggunakan arah semester akhir juga untuk pengembangan web, serta dalam masa depan untuk aplikasi dunia nyata daripadanya. Jadi lebih konkret, Appliance CS50 adalah sepotong gratis perangkat lunak yang memungkinkan Anda untuk menjalankan sistem operasi lain, Linux, dalam hal ini, di komputer Anda sendiri, pada sebuah window. Sekarang Anda tidak bisa hanya men-download alat. Anda membutuhkan sebuah program yang dapat digunakan untuk memutar atau menjalankan alat. Dan itu bagian dari perangkat lunak umumnya dikenal sebagai hypervisor. Hypervisors datang dalam bentuk produk seperti VMware, Virtual Box, Parallels. Segala macam perusahaan membuat perangkat lunak, baik bebas dan komersial, sama. Apa yang Anda akan melihat dalam Soal Set 1 adalah petunjuk tentang cara mendapatkan perangkat lunak bebas yang dapat digunakan untuk menjalankan Appliance CS50. Dan sekali Anda melakukannya, Anda akan memiliki, di jendela pada Mac atau PC, lingkungan desktop yang terlihat cukup seperti ini, di mana memiliki hal-menu seperti Start di bawah kiri pojok. Memiliki folder Home, atau direktori Home, di kiri atas ada, tempat sampah, dan sebagainya. Jadi kita akan menggoda selain rincian yang diperlukan seperti yang kita pergi. Tapi sekarang mari kita mulai menyelam ke C. Jadi C adalah bahasa pemrograman ini, memiliki semangat yang sama Scratch, tetapi jauh lebih sedikit grafis, namun ironisnya, jauh lebih kuat setelah Anda mendapatkan cerdas dengan itu. Jadi dalam C, kita menulis program dengan menulis kode sumber, yang ini sintaks bahasa Inggris-seperti, mirip dengan kaus kaki demonstrasi yang kami lakukan terakhir kali yang memungkinkan Anda untuk mengekspresikan diri cukup tepat, jika arcanely, ke komputer. Jadi, apa jenis perangkat lunak produk Anda benar-benar perlu untuk menulis program dalam bahasa seperti C, berdasarkan kami percakapan pada hari Senin? [Tak terdengar] OK, Anda hanya memerlukan editor teks. Anda tidak perlu software khusus per se untuk menulis program. Anda hanya perlu sebuah editor teks seperti Notepad, pada Windows, TextEdit pada Mac, atau sesuatu yang disebut gedit, dalam dunia Linux, yang akan kita gunakan di sini. Dan itu saja, untuk menulis program. Tapi tulisan ini hanya setengah dari persamaan. Anda kemudian perlu untuk menjalankannya. Tetapi dalam rangka untuk menjalankan program - Anda tidak dapat menjalankan kode sumber. Anda malah harus melakukan apa yang harus terlebih dahulu? Ya. DAVID J. Malan: Anda perlu kompilasi. Dan, orang lain, kompilasi kode sumber berarti - [Tak terdengar] DAVID J. Malan: Tepat. Menerjemahkan ke angka satu dan nol. Karena kita semua, hari ini, memiliki komputer yang memiliki CPU, hampir semua yang dibuat oleh sebuah perusahaan bernama Intel, dan Intel Inside, berarti ada ini di dalam otak Anda komputer, yang dikenal sebagai CPU. Dan salah satu hal yang otak yang dilakukan adalah, ia tahu bagaimana memahami pola nol dan satu. Ia tahu apa yang pola bit mewakili Selain itu, apa yang Pola merupakan subtractions, apa pola bit mewakili mencetak, dan menciptakan suara yang dapat didengar. Jadi singkatnya, CPU, ditambah dengan sistem operasi, yang merupakan bagian dari perangkat lunak yang berjalan di atas CPU, sehingga untuk berbicara. Bersama-sama, dua potong tahu cara menjalankan program yang kita manusia menulis. Jadi jika saya pergi ke Appliance CS50 sini, saya perlu membuka sebuah editor teks dan saya dapat mengakses dalam beberapa cara. Saya dapat pergi ke Menu, Pemrograman, dan kemudian aku dapat memilih - nope, tidak menu. Aku bisa pergi ke Aksesoris / gedit sini untuk membuka editor teks kecilku. Atau lebih sederhana, saya dapat mengklik ikon kecil ini di bagian bawah tangan kiri pojok. Dan sekarang aku mendapatkan lingkungan ini di sini. Hal ini cukup mengingatkan editor teks sederhana, dengan hanya satu atau dua perbedaan. Di bagian atas, di mana kursor berkedip sekarang, ini adalah di mana Saya bisa mulai menulis kode saya. Di bawah ini hal ini disebut jendela terminal. Dan apa hal-hal yang dapat saya lakukan dalam hal ini disebut jendela terminal? [Tak terdengar] Oke, jadi saya akan menjalankan perintah. Dan beberapa perintah kami berlari pada hari Senin adalah sedikit samar pada awalnya, tetapi ls untuk daftar, cd untuk direktori perubahan, rm, untuk menghapus. Jadi semacam cara lama-sekolah navigasi Anda komputer, dengan hanya menggunakan keyboard Anda dan perintah tekstual, dan tidak, pada umumnya, menggunakan mouse. Tapi kita akan lihat, tak lama, ini benar-benar memberikan kita sedikit lebih kekuasaan dan presisi yang lebih sedikit yang dapat digunakan untuk mengekspresikan diri. Dan kemudian di sini di sebelah kiri, kita hanya akan melihat, saat kita mulai menulis perangkat lunak, ringkasan kecil dari program yang kami telah menulis di sebelah kiri atas. Tapi kita akan melihat bahwa lagi sebelum lama. Jadi mari kita lakukan sesuatu yang cukup sederhana di sini. Ijinkan saya pergi ke depan dan pergi ke File, Save, dan aku hanya akan klik pada jharvard sini, ke arah kiri, dan jharvard adalah, sekali lagi, nama untuk folder rumah saya, saya file pribadi, saya, sekarang sedang John Harvard, karena semua dari Anda akan segera John Harvard di lingkungan ini. Dia punya direktori Home, My Documents, dan sebagainya, bahwa saya ingin menyimpan, sekarang, file ini masuk Jadi aku akan menyebutnya hello.c. Lalu aku akan pergi depan dan klik Save, dan sekarang apa yang saya miliki di sini adalah tab disebut hello.c, sehingga mirip dengan yang lain jenis editor. Jadi sekarang biarkan aku pergi ke depan dan mulai menulis sebuah program. int main (void). Dan kemudian aku lakukan terakhir kali, printf, untuk cetak diformat, ("Hello, world!" );. Hampir selesai. Tapi aku kehilangan beberapa detail. Apa yang hilang dari program ini bahwa saya benar-benar perlu untuk untuk benar-benar mengkompilasi? Ya. [Tak terdengar]? DAVID J. Malan: Ya, jadi saya perlu menyertakan standar I / O perpustakaan. Jadi ini perlu pergi di atas utama, jadi aku hanya akan membuat beberapa ruang untuk itu ada. Dan aku akan melakukan # include. Dan perhatikan tanda kurung siku ada. Dan sebagai samping, gedit adalah pengguna kecil yang ramah, jika kadang-kadang agak membingungkan, dalam hal ini mencoba untuk membantu Anda mata memperhatikan apa yang berbaris dengan apa. Jadi fakta bahwa kursor saya tepat di sebelah ini miring braket, perhatikan bagaimana hal itu menyoroti miring lainnya braket ditambah satu ini. Dan itu hanya untuk menarik perhatian saya pada kenyataan bahwa saya memiliki simetri. Dan simetri dalam pemrograman umumnya merupakan hal yang baik. Demikian pula, jika saya memindahkan kursor ke akhir, perhatikan bagaimana kurung kurawal berbaris untuk menunjukkan bahwa, ya, saya memiliki satu terbuka dan yang tertutup, sehingga untuk berbicara. Baiklah, dan saya bisa melakukan satu hal lainnya. Ini tidak benar-benar diperlukan, tetapi praktik yang baik, untuk mengatakan return 0. Dan 0 kembali melakukan apa bagi kita di sini? Atau menandakan apa? [Tak terdengar] DAVID J. Malan: Tapi tidak ada yang salah. Dan terus terang sulit untuk banyak untuk pergi salah dalam memprogram pendek ini. Jadi aku hanya menjadi super eksplisit bahwa semuanya baik-baik. Aku, manusia, ketika saya menjalankan program ini, mungkin akan pernah melihat bahwa 0. Umumnya, angka-angka yang sedang kembali dari main hanya membesarkan kepala mereka ke manusia saat sesuatu yang tidak beres. Dan Anda mendapatkan pop up sedikit kesalahan sistem mengatakan, satu, dua, tiga, atau apa pun nomor adalah bahwa itu benar-benar kembali. Jadi apa pun yang salah dengan ini? [Tak terdengar] DAVID J. Malan: Jadi ini tidak begitu banyak kesalahan fungsional tapi satu estetika. Saya mungkin harus dimasukkan ke dalam karakter newline ada di akhir string ini sehingga kita benar-benar memindahkan kursor ke baris berikutnya, dan program hanya terlihat sedikit lebih cantik. Jadi sekarang biarkan aku pergi ke jendela terminal saya dan zoom kembali masuk Dan hal ini di sini, ini disebut prompt. Ini hanya mengingatkan saya siapa saya, jharvard @ alat, di mana alat adalah nama komputer saya pada. Dalam kurung ini tilde, simbol coretan, yang mewakili apa? HADIRIN: direktori Home. DAVID J. Malan: direktori Home. Jadi itu hanya notasi singkat untuk mengatakan Anda berada di Anda pribadi folder dimana semua file Anda pergi secara default. Jadi sekarang, di sini, saya bisa mengetik ls untuk daftar. Dan satu-satunya hal yang saya lihat di sini pada saat ini adalah hello.c. Dan itu bagus karena saya hanya menulis ini. Jadi biarkan aku pergi ke depan dan memang membuat halo. Dan perhatikan aku tidak mengetik membuat hello.c. Sebaliknya, aku hanya mengetik nama dasar file, halo. Dan membuat, seperti yang kita lihat pada hari Senin, hanya akan menyimpulkan bahwa saya ingin c file.. Jadi sekarang aku mengetik membuat halo. Sekarang saya melihat perintah ini cukup panjang dan akan terus melihat ini lagi dan lagi. Tapi harus jelas, dentang, kata yang baru saja muncul, itulah compiler yang sebenarnya. Buatlah hanya utilitas membangun. Ini hanya sebuah program lebih user friendly yang menyelamatkan saya, dalam jangka panjang, karena harus mengetikkan sangat membosankan panjang perintah seperti itu. Jadi Anda bisa menjalankan dentang manual. Anda bisa mengetik semua itu secara manual. Hanya mendapat sangat membosankan. Dan sehingga membuat hanyalah sebuah program yang menyederhanakan hidup kita dan menjalankan perintah yang lebih kompleks bagi kita. Baiklah, jadi sekarang apa file yang harus saya miliki dalam direktori saya saat ini? Tidak hanya hello.c, tetapi juga halo. Jadi jika saya ingin menjalankan halo, ingat bahwa saya katakan dot slash, mana berarti dot masuk ke folder saat ini, di mana pun Anda , dan kemudian menjalankan program yang disebut halo, dan memang, sekarang, Saya memiliki dunia halo. Baiklah, pertanyaan pada alur kerja atau sintaks apa yang baru saja kita lakukan? Baiklah, jadi mari kita mengambil hal-hal takik lagi. Jadi ini underwhelming untuk hanya menulis sebuah program yang hanya pernah mengatakan Halo, dunia. Jadi kita mengubahnya, Senin, mengatakan, halo, David. Ini sedikit lebih pribadi, tetapi hanya sebagai keras dikodekan sebagai pertama versi. Jadi tidak semua yang menarik. Tapi ada ada, di C, fungsi tentu selain cetak, fungsi yang memungkinkan Anda mendapatkan input pengguna. Dan cara kita melakukan ini, hari yang lain, adalah sebagai berikut. Sebelum saya benar-benar mencetak sesuatu, saya pertama kali sesuatu dari pengguna. Jadi biarkan aku melakukan ini lagi. String s, di mana s hanya sebuah nama sewenang-wenang, di sini, untuk string, sama GetString. Jadi apa yang GetString? Ini jelas mendapat string, berdasarkan namanya. Tapi apa yang terjadi, lebih teknis? Ini fungsi. Jadi itu adalah fungsi yang tidak datang dengan C per se. CS50 staf menulis ini. Dan sehingga untuk menggunakan ini, Anda tidak bisa hanya termasuk stdio.h, Anda juga perlu untuk memasukkan apa? Ya. Jadi cs50.h, yang hanya file kami menulis beberapa tahun yang lalu. Kami memasangnya di alat untuk Anda bersama semua file standar. Dan sehingga dalam beberapa minggu pertama kelas, kita akan menggunakan ini hanya untuk menyederhanakan proses melakukan sangat dasar hal-hal seperti input pengguna mendapatkan. Karena seperti yang kita akan lihat dalam beberapa minggu, mendapatkan input pengguna dalam bahasa seperti C sebenarnya mengejutkan kompleks, terutama karena Anda tidak tahu sebelumnya, biasanya, bagaimana banyak barang pengguna akan mengetik masuk Dan ketika Anda tidak tahu berapa banyak data yang diharapkan, Anda tidak tahu berapa banyak memori untuk mengalokasikan. Dan jika Anda benar-benar memiliki seorang pengguna yang berlawanan yang mencoba untuk kembali ke sistem Anda, crash komputer Anda, baik, umumnya metode pertama serangan adalah, seperti yang saya lakukan pada Senin, ketik urutan panjang seluruh karakter acak, tekan Enter, dan melihat apa yang istirahat. Karena pada umumnya, jika istirahat program, yang mengisyaratkan lubang keamanan, berpotensi. Ini tentu mengisyaratkan Anda, programmer, setelah membuat kesalahan, tetapi lebih berbahaya, Anda mungkin telah membuat yang berhubungan dengan keamanan kesalahan, dan umumnya kita akan melihat bahwa itulah bagaimana mesin terganggu sampai hari ini, baik dalam dunia web dan program di baris perintah, seperti ini. Baiklah. Jadi string s sama GetString. Jadi lebih konkret sekarang, apa line 6 lakukan di sini? Jadi fungsi di sebelah kanan mendapatkan string, Dibutuhkan berapa banyak argumen? Oke. Jadi tidak ada. Sebuah kewarasan sedikit memeriksa. Argumen, sekali lagi, hanya sebuah masukan ke fungsi untuk mengubah yang standar perilaku dalam beberapa cara. Tapi dalam kasus ini, saya tidak ingin mengubah perilaku GetString. Saya hanya ingin mendapatkan string. Jadi saya menaruh apa-apa di kurung, dan kemudian aku meletakkan koma demarking akhir baris kode. Sekarang, tanda sama dengan tidak berarti sama, per se. Ini berarti tugas, yang berarti menempatkan apapun mendapat outputted di bagian dalam kanan apa pun yang di sebelah kiri. Jadi di sebelah kiri, kita mengatakan bahwa kita telah mendeklarasikan string disebut s. Dan lebih khusus, kami telah mengalokasikan memori dalam yang kita akan menempatkan bit yang mewakili urutan karakter. Tapi untuk saat ini, kami telah mengalokasikan atau menyatakan string. Baiklah. Jadi sekarang setelah saya sudah melakukan ini, saya ingin pasang di nilai s, bukan nilai Daud. Jadi ini salah mengapa? Jadi ini hanya harfiah s hard-coded. Ini untuk mengatakan "Halo, s," yang tidak apa yang saya inginkan. Jadi saya bisa melakukan ini. Tanda persen adalah placeholder, tapi sekarang aku perlu masuk ke mencetak argumen kedua. Ingat bahwa argumen untuk fungsi yang dipisahkan oleh koma, jadi koma berikutnya di sini saya menempatkan setelah surat s. Dan dalam konteks ini sekarang, s adalah variabel, dan printf, setelah menerima dua input - string di sebelah kiri dan nama variabel di sebelah kanan - itu akan pasang yang terakhir ke mantan bagi kita, dan hanya mencetak string yang indah bagus berisi apa pun yang kita diketik masuk Jadi mari kita coba ini. Akan pergi ke depan dan zoom out, kembali ke jendela terminal saya. Zoom in di bagian bawah sini. Ketik kembali membuat halo. Dentang tampaknya telah menjalankan kembali. Aku akan mengetik / hello, Enter.. Tidak ada yang tampaknya terjadi, tapi itu pada prompt bahwa saya bisa mengetik sesuatu seperti Nate, Enter, dan sekarang kami memiliki Halo, Nate. Dan saya bisa melakukannya lagi dengan Rob, dan sebagainya. Jadi mudah-mudahan sekarang program ini berperilaku seperti yang saya inginkan. Sekarang, tidak semua pengguna yang ramah. Aku tidak tahu apa yang diharapkan dari saya. Jadi kita pasti bisa membersihkan ini sedikit. Biarkan aku pergi kembali ke sini, dan bukan hanya menyelam dalam dan meminta pengguna untuk string, biar eksplisit memberitahu pengguna apa yang saya harapkan. Jadi printf ("Masukkan string:" ); Jadi tidak ada variabel di sini. Tidak ada tanda-tanda persen. Hanya kalimat bahasa Inggris yang sederhana. Sekarang saya pergi ke bawah sini dan jalankan kembali program saya. Tapi tidak ada yang tampaknya telah berubah. Kenapa? Saya harus mengkompilasi ulang itu. Jadi mudah untuk membuat kesalahan. Tapi Anda harus tidak hanya menyimpan file tetapi mengkompilasi ulang program tersebut. Dan jadi jika saya kembali menjalankan make halo, sekarang dentang berjalan. Sekarang saya dapat menjalankan / hello.. Dan sekarang saya melihat "Masukkan string:". Oke. Sekarang sedikit lebih user-friendly. Nate, Enter, halo, Nate. Nah, mari kita coba ini lagi dan mulai berpikir tentang kasus sudut. Jadi seperti di Scratch, Anda didorong atau sedang didorong dalam spesifikasi untuk jenis berpikir tentang apa yang bisa salah jika Anda tidak mengantisipasi semua pengguna mungkin dilakukan. Bugs, oleh karena itu, mungkin terjadi. Jadi memasukkan string - apa kasus sudut sini? Apa skenario yang saya, programmer, mungkin tidak memiliki diantisipasi? Ya. Oke. Jadi bagaimana jika saya mengetik di sejumlah seperti ini? Baiklah. Jadi itu masih bekerja. Gramatically tidak masuk akal. Tapi setidaknya program ini bekerja. Apa kasus lain sudut? Sesuatu yang saya tidak mengharapkan. Ya? Oke. Jadi kita bisa melakukan sesuatu seperti nomor benar-benar besar. Jadi mari kita lakukan ini di sini. Biarkan aku tampilannya keluar untuk kedua, biarkan aku sorot. Tidak bisa copy dan paste di sini. Baiklah. Jadi saya tidak bisa copy dan paste di jendela terminal, sehingga kita akan hanya mensimulasikan itu. Biarkan saya zoom out, akan membungkus. Aku tidak akan melakukan hal ini terlalu lama, karena tidak akan benar-benar istirahat dalam program ini. Tapi itu bisa. Enter. Tapi itu tidak. Baiklah. Tapi itu kasus sudut asli. Dan satu-satunya alasan yang berperilaku dengan benar, sehingga untuk berbicara, karena GetString fungsi CS50 sebenarnya dirancang di bawah kap mesin, seperti yang kita akan lihat dalam beberapa minggu, untuk secara otomatis mengalokasikan RAM lebih dan lebih, lebih dan lebih memori dari sistem operasi, ketika menyadari, wow, Anda benar-benar mengetikkan sesuatu yang cukup panjang. Sekarang, ini adalah sedikit dari sebuah kebohongan putih. Jika kita benar-benar berhenti cukup lama dan saya mengetikkan sesuatu seperti 5 miliar karakter di keyboard sini, atau benar-benar memukul copy-paste cukup sedikit, kita sangat mungkin dapat menyebabkan program untuk kecelakaan. Hanya sedikit lebih keras untuk mensimulasikan bahwa dengan terbatas jumlah waktu. Apa kasus lain sudut kita bisa mencoba? Ya? Ya. Jadi mengapa kita tidak menjawab apa-apa? Jadi kita benar-benar harus mengambil beberapa tindakan, karena jika program akan duduk di sana berkedip sepanjang hari. Tapi jika aku hanya tekan Enter - OK, sekarang, masih terlihat salah. Tidak crash, tapi mungkin sekarang ada kesempatan untuk mulai menerapkan program yang lebih ketat yang benar-benar memeriksa. Dan jika string, kalimat, kata yang saya mengetik memiliki panjang 0, baik, mungkin aku harus berteriak di pengguna, atau memberitahu dia untuk memasukkan string lagi, sehingga kita benar-benar mendapatkan apa yang tampak seperti perilaku yang benar dan tidak hanya lengkap pengawasan di bagian saya. Pertanyaan di belakang? Desimal angka. Jadi kita bisa mencoba itu juga. 1,10000005. Sepertinya itu akan hanya bekerja benar-benar baik-baik saja. Dan yang benar-benar diharapkan. Meskipun kita mungkin telah mengetik angka di sana, atau jumlah yang lebih besar sebelumnya, menyadari bahwa ketika kita mengetik pengguna masukan dan kita menggunakan fungsi GetString, tidak peduli jika apa yang aku mengetik terlihat seperti nomor. Ingat bahwa menurut ASCII, segala sesuatu pada Keyboard memiliki nilai numerik yang dapat dipetakan ke karakter, char. Jadi dalam hal ini, meskipun saya mungkin mengetikkan angka, yang komputer akan memikirkan hal itu, sehingga untuk berbicara, sebagai string - sesuatu yang tampak seperti angka, tetapi tidak benar-benar nomor. Tapi itu sebenarnya segue yang sempurna, karena sekarang kita bisa sebenarnya transisi ke program menulis bahwa menggunakan jenis data lainnya. Jadi selain menggunakan karakter, atau lebih tepatnya, selain menggunakan string, menyadari bahwa kita memiliki tipe data lain dalam C maupun di bahasa lainnya. Sebuah char, seperti namanya, hanya satu karakter. Sebuah float adalah nilai floating point, dan itu hanya mewah yang cara untuk mengatakan sejumlah nyata - sesuatu yang memiliki desimal titik di dalamnya dengan beberapa nomor ke kiri dan / atau kanan. Int adalah bilangan bulat, yang hanya nomor seperti 123. Dan sekarang lebih menarik hal-hal seperti ganda. Apa yang kita katakan ganda adalah terakhir kali? Ini 64, benar. Jadi sementara biasanya pelampung adalah 32-bit - jadi selama ini di memori, menggunakan 32 angka satu dan nol untuk mewakili nilai-nilai - ganda secara harfiah dua kali lipat, yang berarti bahwa Anda dapat mewakili angka yang lebih besar, atau Anda dapat mewakili angka lebih tepat. Sehingga Anda dapat memiliki nomor lebih setelah titik desimal, namun sebagai sesama mengatakan dalam video, bahkan sesuatu yang sederhana konseptual seperti 1/3 tidak dapat diwakili tepat oleh komputer, karena pada akhirnya Anda kehabisan bit, dan Oleh karena itu Anda hanya dapat melakukan .33333333 kali begitu banyak, di titik mana Anda hanya harus mengatakan aku keluar dari representasi ruang, saya harus sebut saja sehari dan mewakili agak imprecisely seperti itu. Dan lama - Nama bodoh, tapi itu karena ada tipe data yang dikenal sebagai panjang di C yang kebetulan sering 32 bit, seperti sebuah int adalah 32 bit, tetapi lama adalah umumnya 64 bit. Jadi itu hanya berarti Anda dapat mewakili besar angka dari ini. Baiklah. Jadi jika kita benar-benar ingin memulai mewakili sesuatu, kita mungkin membutuhkan lebih banyak jenis canggih, dan itu sebabnya kita memiliki string. Jadi di perpustakaan CS50, bahwa file bernama cs50.h, kami sudah sebenarnya menyatakan tipe data, sehingga untuk berbicara, yang disebut string, tapi string tidak benar-benar ada. Ini, sekali lagi, salah satu lapisan kita akan mengupas kembali dalam satu atau dua minggu dan membuangnya, dan benar-benar melihat di bawah kap mesin apa string sebenarnya, dan bagaimana hal itu diwakili. Kami juga akan melihat nilai Boolean. Jadi apa bool dalam konteks Scratch? Memang benar atau salah. Jadi itu hanya nilai yang benar atau salah, on atau off, atau 1 0, namun Anda ingin melihat dunia. Jadi dalam C, berkat perpustakaan CS50, yang pada gilirannya termasuk perpustakaan lain di bawah tenda, kita memiliki akses ke tipe data yang disebut bool, yang akan harfiah memungkinkan kita untuk menetapkan nilai-nilai benar atau palsu hal dalam sebuah program. Jadi mari kita lanjutkan di sini dan menulis sebuah program kecil yang melakukan sesuatu yang melibatkan angka bukan. Jadi biarkan aku kembali ke Appliance CS50, biarkan aku pergi ke depan dan membuat file baru di sini disebut - mari kita hanya mengatakan sesuatu yang sederhana, seperti math.c. Baiklah. Dan sekarang naik ke atas program saya, saya akan melakukan yang biasa - # Include, sehingga saya dapat menggunakan printf, int main (void) - kita akan kembali ke, pada akhirnya, apa artinya int di sini, apa yang berlaku di sini berarti, tapi untuk saat ini, hanya tahu bahwa Anda harus mulai program seperti ini. Sekarang aku akan pergi ke depan dan mengatakan sesuatu yang sedikit berbeda - printf ("Beri aku nomor:" );. Lalu aku akan melakukan int n = GetInt, karena ternyata keluar GetInt adalah fungsi lain di perpustakaan CS50 selain GetString. Dan sekarang aku akan melakukan sesuatu yang bodoh, seperti "terima kasih untuk d%, "untuk desimal integer, dan maka n koma, dan kemudian kembali 0. Jadi sekali lagi, kembali 0 tidak ada hubungannya dengan jumlah aku meminta pengguna untuk. Hanya menandakan pada akhir bahwa semua, mungkin, baik. Jadi biarkan aku pergi ke jendela terminal saya di sini. Biarkan saya mengetikkan make matematika, masukkan. Dan sesuatu yang salah. Membuat matematika tidak bekerja. Berikut pertama dari pesan kesalahan kami. Kenapa? Sedikit samar, tapi - Ya. Jadi cs50.h. Jadi sekali lagi, terutama sejak dini, Anda akan menulis pertama Anda program untuk pset 1 di bagian dalam jam kerja, dan terus terang, itu akan menjadi luar biasa kadang-kadang apa hal-hal sebenarnya mengatakan. Tapi Anda akan menyadari sangat cepat mereka mulai jatuh ke dalam ember dimana satu ini berarti bahwa Anda telah meninggalkan dari salah satu dari # termasuk di bagian atas file. Dan dentang, compiler, menginformasikan Anda tentang hal ini dengan mengatakan deklarasi, bukan fancifully, implisit GetInt fungsi tidak valid. Baiklah. Jadi apa artinya? Ini hanya berarti Anda telah secara implisit menyatakan GetInt di arti bahwa Anda tidak secara eksplisit menyatakan itu. Secara eksplisit mendeklarasikan int, Anda harus mengajari Clang bahwa itu ada. Dan solusi yang sangat sederhana untuk itu adalah untuk mengajar dengan termasuk file ini lainnya, cs50.h, di bagian atas file Anda. Karena secara harfiah, apa yang # include apakah itu memberitahu dentang cukup banyak untuk pergi mencari file bernama cs50.h, copy, tempel otomatis ke bagian atas program saya untuk saya, dan kemudian mengubah kode sumber untuk angka satu dan nol. Tapi itu jelas akan sangat membosankan jika kita manusia memiliki untuk pergi menyalin dan menyisipkan file-file besar sepanjang waktu, jadi # include hanya melakukan semua itu secara otomatis tanpa mengeruhkan kode saya dengan perpustakaan orang lain. Dan perpustakaan hanyalah file yang berisi fungsi dan hal lain yang orang lain telah menulis, bahwa kita memanfaatkan untuk kepentingan kita sendiri. Baiklah. Mari kita coba lagi. Membuat matematika. Enter. Baik. Sehingga tampaknya telah bekerja. Jadi biarkan aku sekarang menjalankan matematika,. / Matematika. Masukkan memberi saya nomor, 123. Terima kasih atas 123. Sekarang mari kita coba kasus lain sudut. Sebuah string adalah cukup murah hati, karena string dapat berupa apa saja. Dapat terlihat seperti angka, terlihat seperti karakter, seperti kata-kata. Tapi int adalah int. Jadi sekarang kalau aku pengguna sulit, dan itu mengatakan "Beri aku nomor, "bagaimana jika saya mencoba untuk melakukan sesuatu seperti 0,1? Nah, itu angka, dan itu konsisten dengan tata bahasa saya digunakan di sini, tapi di balik kap mesin, saya dari Tentu saja menggunakan GetInt fungsi. Jadi mari kita lihat apa yang terjadi. Masukkan, coba lagi. Baiklah. Biarkan aku menjadi sulit dan hanya tekan Enter lagi. Masukkan, Enter. Jadi sekarang tampaknya GetInt yang sedikit lebih kuat daripada GetString. Kami, staf, dilaksanakan sedemikian rupa sehingga jika kita perhatikan Anda tidak memberi kita sebuah int - dan int adalah angka desimal mengandung nol, yang, berpasangan, bertiga, merangkak, balita, berenam, tujuh, delapan, atau sembilan. Dan itu saja. Tidak desimal poin, tidak ada karakter, tidak ada tanda baca. Tampaknya kita harus bekerja sama. Jadi biarkan aku mencoba empat, lima, enam, dan yang membuat saya melalui. Jadi benar-benar, untuk menjadi anal sini, saya mungkin harus mengatakan "Beri aku integer "dalam rangka untuk menyampaikan kepada pengguna persis apa yang saya inginkan. Sekarang mari kita pikirkan bawah tenda. Kita tidak akan melihat bagaimana cs50.h diimplementasikan saat ini, perpustakaan itu. Tapi jika terus mengatakan coba lagi, coba lagi, coba lagi, apa pemrograman membangun saya mungkin menggunakan di bawah tenda untuk menerapkan itu? Jadi hanya lingkaran, kan? Salah satu ide sederhana yang kita lihat di Scratch. The Selamanya membangun, Ulangi membangun. Agaknya, dalam program ini, di bawah kap, bahkan meskipun itu ditulis dalam C dan tidak awal, itu melakukan sesuatu yang disebut setara dengan selamanya jika pengguna belum diketik dalam integer, katakanlah coba lagi, coba lagi, coba lagi, coba lagi, sehingga akhirnya ketika kita mendapatkan integer, maka Anda keluar dari lingkaran itu. Jadi fungsi lain apa yang bisa kita gunakan di sini di perpustakaan CS50 ini? Nah, jenis yang jelas, setidaknya berdasarkan pada tipe data yang kita ketahui sekarang ada. Kami menerapkan GetString, GetInt, tetapi di seluruh minggu pertama istilah, Anda juga dapat menggunakan GetFloat dan GetDouble dan GetLongLong untuk mendapatkan tepat tipe data yang Anda inginkan. Karena detil kunci di sini adalah bahwa tidak seperti beberapa bahasa, seperti Python dan Ruby, di mana Anda tidak perlu harus mendeklarasikan tipe data dari variabel - Anda tidak perlu memberitahu komputer apa jenis barang Anda akan dimasukkan ke dalam variabel - di C, Anda harus pernah begitu tepat. Jadi jika Anda ingin sebuah variabel yang disebut n, sepotong penyimpanan bahwa dalam kasus ini terjadi menjadi 32 bit dengan konvensi, Anda harus memberitahu komputer bahwa bit akan menyimpan nomor - bukan karakter, bukan string, bukan pelampung. Dan ini membahas masalah kita secara efektif berlari ke pekan lalu. Jika kita menggunakan angka nol dan angka yang mewakili tidak hanya nomor tapi As dan B dan C, bagaimana di dunia adalah komputer akan tahu bahwa pola bit sebenarnya menunjukkan jumlah 65, sebagai lawan mewakili huruf A, yang kebetulan, menurut ASCII, ingat, itu setara dengan 65? Jadi jenis data yang memberikan konteks untuk komputer, sehingga bahwa ia tahu jika bit harus ditafsirkan sebagai int atau sebagai string. Ada pertanyaan, kemudian, pada ini? Ya? DAVID J. Malan: Pertanyaan yang bagus. Jika kita mengambil stdio.h, kita menyimpan file - biarkan aku pergi ke jendela terminal dan jalankan make matematika, zoom dan masukkan - sekarang saya mendapatkan error yang berbeda, karena aku implisit menyatakan apa yang berfungsi sekarang? Printf. Jadi sekarang aku telah membuat masalah baru, yang solusinya adalah dasarnya sama. Saya perlu menempatkan kembali itu. HADIRIN: [Tak terdengar] DAVID J. Malan: Oh. Jadi jika saya mengambil - Oke, yeah. Jadi jika saya menghapus inklusi I / O standar perpustakaan up di sini, dan kemudian Anda katakan jika saya menyingkirkan printf, mendapatkan menyingkirkan printf? Ya. Ini harus bekerja, karena aku tidak lagi menggunakan - whoops. Apakah aku hanya berbaring? Oh, oke. Ini tidak akan bekerja karena kesalahan baru kita hanya diperkenalkan. Dan yang satu ini sedikit lebih jelas. Apa masalahnya? Terpakai variabel n. Jadi kesalahan ini adalah hasil dari kami telah dikonfigurasi alat untuk menjadi sangat bertele-tele, untuk benar-benar berteriak Anda untuk setiap kesalahan yang mungkin, bahkan jika itu jenis kesalahan non-fatal seperti ini - itu benar-benar seperti besar menangani bahwa saya dialokasikan int, menempatkan nomor di dalamnya, dan kemudian hanya melakukan apa-apa dengan itu? Jadi secara fungsional, tidak. Itu tidak akan merusak program. Hanya saja agak bodoh, kan? Tidak ada nilai untuk memiliki meminta nomor tersebut, disimpan dalam variabel, jika Anda tidak akan melakukan apa-apa dengan itu, apakah mencetaknya atau menyimpannya. Jadi dalam hal ini, dentang yang mengakui sebanyak, dan itu mengatakan n variabel yang tidak terpakai. Jadi kita bisa memperbaiki hal ini jika kita benar-benar ingin. Tapi sekali lagi, ini bukan pemrograman yang baik sekarang. Jadi aku hanya bisa melakukan ini - turun di sini, biarkan aku membersihkan layar, membuat matematika. Yang bekerja. Sekarang saya bisa menjalankan program matematika saya, mengambil input - baik, itu buruk. Membawa masukan, dan itu adalah semua hal ini, dalam kasus ini. Jadi sebenarnya, mari kita coba satu kasus sudut lain yang kita tidak memikirkan sebelumnya. Dalam kasus ini - di sini, mari kita kembali ke salah satu yang adalah sedikit lebih user-friendly. Biarkan aku pergi kembali ke sini dan jalankan make matematika lagi. Whoops, apa yang saya lakukan salah? Harus memutar kembali lebih lanjut. Oke. Sekarang kita kembali pada keadaan semula, di mana semua Mudah-mudahan dengan baik. Dan sekarang jika saya menjalankan matematika, 123 tampaknya bekerja. Tapi ini tidak benar-benar bukti yang efektif, hanya mengatakan oke, yang bekerja. 789, yang bekerja. Waktu untuk menyerahkan. Karena ada kasus sudut lain di sini. Sebuah string tidak benar-benar memberi kita banyak kesulitan dengan mengetikkan Seluruh banyak karakter. Tapi bagaimana kalau saya ketik ini? Menekan nomor 1 jauh, banyak di sini - baik-baik saja, itu semakin sedikit membosankan, jadi saya akan berhenti di sini, dan aku akan tekan Enter. Apa yang baru saja terjadi? Jadi ini sebenarnya dapat dijelaskan. Jadi waktu yang diperlukan sebagai biner? Sebuah pikiran yang baik, tapi tidak, itu bukan fakta bahwa itu membawanya sebagai biner, karena memang, itu hanya semacam kebetulan. Kita bisa melakukan ini lagi. Jadi tidak ada 2 dalam sistem biner, yang mungkin cukup pula. Enter. Jadi itu bukan masalah. Apa lagi? Tepat. Jadi pikirkan kembali apa int sebenarnya. Ini 32 bit yang secara kolektif diinterpretasikan sebagai angka. Jika Anda memiliki 32 bit, itu berarti setiap bit dapat 0 atau. 1, 0 atau 1 Jadi itu berarti ada dua kemungkinan untuk sedikit ini, dua kemungkinan untuk ini, dua kemungkinan untuk ini bit - jadi itu 2 kali 2 kali - jadi itu 2 pangkat 32 adalah jumlah total permutasi dari angka satu dan nol jika Anda memiliki 32 penampung, angka nol atau yang, di depan Anda. Jadi jika saya memiliki 2 ke 32, secara matematis, itu apa? Jadi banyak. Ini 4 miliar, memberi atau mengambil. Dan 4 miliar tampaknya tidak menjadi apa yang dicetak di sini. Bahkan, ini tampak lebih dekat dengan 2 miliar. Tapi ini bukan suatu kebetulan. Fakta bahwa komputer telah salah menafsirkan jumlah besar saya, saya besar urutan satu dan kemudian urutan besar saya berpasangan, sebagai sekitar 2 miliar, dijelaskan bagaimana? Ada topi pada int. Ada tentu saja nilai maksimum yang dapat mewakili. Tapi itu biasanya 4 miliar, kan? Jika 2 ke 32 adalah sekitar 4 miliar, yang tampaknya seperti itulah jumlah terbesar. Jadi bukan sisa, tetapi pikiran yang baik. Angka negatif. Jadi jika Anda memiliki 4 miliar hal yang mungkin Anda bisa mewakili dengan berbagai permutasi dari 32 0s dan 1s, baik, maka bisa dipastikan bahwa kita manusia mungkin ingin mewakili tidak hanya bilangan bulat positif namun bilangan bulat negatif. Dan memang, itulah asumsi bahwa C membuat. Jadi dengan 32 bit, Anda dapat mewakili sekitar 2 negatif miliar sepanjang jalan sampai dengan positif 2 miliar. Dan sehingga dalam kasus ini, apa yang kita benar-benar melihat hanya pinggiran kapasitas integer kami, dan kami memiliki, sehingga untuk berbicara, meluap integer. Kami sudah mencoba untuk menjejalkan bit lebih ke dalamnya daripada benar-benar bisa cocok. Jadi hasil akhirnya adalah kita pada dasarnya memiliki semua bit 1. Kami telah membalik semua bit kami, kami sudah mencoba untuk mewakili jumlah terbesar yang mungkin, tapi itu jelas tidak hampir cukup besar untuk mewakili dua hal yang saya baru saja diketik masuk Ya? HADIRIN: [Tak terdengar] DAVID J. Malan: Pertanyaan yang bagus. Mengapa kita tidak bisa hanya menyatakan bahwa negatif menandatangani hanya sebagai karakter? Jadi kita benar-benar bisa, dan kita kemudian bisa menyelamatkan sedikit tambahan. Tapi kau masih akan harus mewakili dasbor itu, dan yang akan dikenakan biaya setidaknya sesuatu, mungkin sedikit. Jadi ya, kita bisa memiliki 32 bit yang digunakan untuk nomor kami, tapi sekarang kita membutuhkan bit yang digunakan untuk dasbor kami simbol, tanda minus. Jadi sekarang kita memiliki 33 bit nilai, yang bisa kita lakukan, tapi itu hanya tidak cara itu dilakukan. Kami membuat keputusan beberapa tahun lalu panggilan, 32 bit adalah semacam satuan ukuran di sini. Jadi kita akan menggunakan salah satu bit secara efektif mewakili negatif, dan 31 bit untuk mewakili nomor. Pertanyaan lain? Baiklah. Itu banyak. Mengapa kita tidak pergi ke depan dan mengambil lima menit kami istirahat di sini? Baiklah. Jadi sekali lagi, bukan untuk bergantung pada aplikasi matematika pemrograman, mari kita hanya memetik off satu contoh sebelum kita pindah ke konstruksi lainnya, hanya karena akan menggambarkan beberapa poin sandungan umum di beberapa dasar-dasar ketika datang ke program menulis. Dalam kasus ini, melakukan ekspresi aritmatika yang memiliki beberapa menarik relevansi dengan sintaks. Jadi ini hanyalah sebuah rumus yang kita dapat mengkonversi suhu dari Fahrenheit ke Celsius. Jika Anda tidak ingat, ini hanya rumus. Jadi jika kita pasang di Fahrenheit nilai 32 derajat, yang pembekuan, yang akan menjadi 32 dikurangi 32 adalah 0, dan memang, 0 di Celcius juga beku. Jadi kewarasan cepat check sana - itu rumus akrab. Biarkan aku pergi ke alat, meskipun, dan mulai menulis sebuah program yang disebut, seperti, f2c, "Fahrenheit ke Celsius dot c ". Dan sampai di atas sini, aku akan mulai dengan # include stdio.h, dan aku akan melakukan int main (void), dan lagi, kami akan kembali di masa depan seperti apa int berarti ada dan apa yang berarti ada kekosongan. Dan sekarang biarkan aku pergi ke depan dan menerapkan program yang pada dasarnya melakukan konversi ini bagi kita. Jadi printf, katakanlah, suhu di Fahrenheit. Dan kemudian biarkan aku pergi ke depan dan mendapatkan nilai dari pengguna. Apa nilai yang harus saya dapatkan dari pengguna jika saya ingin mereka untuk memberikan suhu dalam Fahrenheit? Ya? Apa yang akan Anda usulkan? Ya. Jadi mengapung terasa cukup masuk akal. Kami memiliki, sekali lagi, hanya beberapa pilihan yang kita lihat sejauh ini. Kami memiliki hal-hal seperti char, pelampung ganda,, int, panjang, bool, string. Jadi ini, mengambang terasa cukup masuk akal. Kita bisa menggunakan hak, ganda, karena jika kita benar-benar ingin mewakili suhu manusia - 98,60000 - kita bisa menggunakan 64 bit untuk melakukan itu, tapi rasanya seperti berlebihan untuk suhu. Jadi mari kita pergi dengan float. Sekarang aku butuh variabel. Hanya untuk menjaga hal-hal sederhana, aku akan menyebutnya f, tapi aku bisa saja benar menyebutnya suhu, tapi entah baik-baik saja. Jadi mengapung f = GetFloat. Begitu aku sekarang telah memutuskan untuk menggunakan GetFloat, meskipun, saya perlu membuat satu koreksi. Ya. Jadi kita perlu # include , jika compiler adalah akan berteriak pada kami. Sekarang saya memiliki pelampung, biarkan aku pergi ke depan dan melakukan konversi. Jadi pertama, saya juga masuk ke kebiasaan di sini dari komentar kode saya. Jadi sekali lagi, komentar hanya notasi ke manusia yang bukan bagian dari program per se, tetapi satu, membantu Anda mengerti apa yang Anda lakukan keesokan harinya, atau berikutnya bulan, itu membantu sesama mengajar Anda mengerti apa yang Anda lakukan atau apa yang Anda dimaksudkan untuk melakukan, jadi umumnya sangat baik praktek. Setiap beberapa baris kode, menulis komentar ke diri sendiri atau kolega Anda. Jadi di sini, aku akan mengatakan, "Mintalah pengguna untuk suhu." Tidak harus berupa kalimat lengkap, hanya kalimat pendek. Tapi ide di balik komentar di C adalah bahwa setiap Anda komentar harus memberdayakan Anda - atau, katakanlah, TF atau kolega - untuk skim program Anda dan tahu persis apa yang dilakukannya, dengan tidak begitu banyak membaca kode, tetapi dengan membaca komentar, yang harus ringkas dan jelas. Baiklah, jadi sekarang biarkan aku pergi ke depan dan berkata, "Mengkonversi Fahrenheit ke Celsius. "Jadi aku akan pergi ke depan dan melakukan, katakanlah, mengambang c. Kami akan terus Celcius sebagai nilai floating point. Dan biarkan aku mengambil bacokan di ini. Rumusnya adalah, sekali lagi, di sini. Sebagai 5/9 kali F dikurangi 32. Jadi mari kita lakukan ini. Jadi 5 dibagi dengan 9, minus - whoops, saya mengacaukannya sudah. Times. Jadi 5/9 kali F dikurangi 32. Jadi F dikurangi 32, titik koma. Dan sekarang, di sini, aku akan pergi ke depan dan berkata, mencetak hasil. Dan bagian ini mudah. Printf. Bagaimana saya pergi tentang mencetak ini? Nah, saya bisa mengatakan "Itu nomor dalam Celcius adalah% f \ n", hanya untuk beberapa estetika. Lalu apa nilai yang ingin saya pasang di sini sebagai yang printf argumen kedua? Oke. Jadi hanya c. Jadi kita akan mulai dengan ini dan kemudian hanya kembali 0. Sekali lagi, itu tidak ada hubungannya dengan matematika. Ini hanya berarti semuanya baik-baik. Sekarang, program ini, yang benar ini? Baiklah. Jadi saya sudah membuat beberapa kesalahan. Bahkan jika Anda tidak tahu apa pemrograman, Anda dapat mengurutkan punggung menyimpulkan ke sekolah kelas apa kesalahan di sini mungkin. Apa salah satu yang pertama? HADIRIN: [Tak terdengar] DAVID J. Malan: Ya. Jadi kita hilang kurung. Itu sengaja saya lakukan kurung di keynote geser sini, karena sebenarnya ada gagasan order operasi, atau didahulukan, dimana operasi tertentu - perkalian - memiliki tinggi mengikat, memiliki prioritas lebih tinggi, daripada hal-hal seperti penambahan atau pengurangan. Jadi kita sudah melakukan ini selama bertahun-tahun hanya untuk membuat benar-benar jelas apa operasi matematika harus dilakukan terlebih dahulu. Jadi saya mungkin harus meniru persis ini. Jika tidak, komputer mungkin akan mencoba untuk melakukan sesuatu seperti membagi 5 dengan 9, kemudian kalikan F, kemudian kurangi 32 dari semuanya. Yang tidak, pada kenyataannya, apa yang ingin kita lakukan. Jadi mari kita mengurungkan. Mari kita tambahkan tanda kurung saya di sini, kurung di sini. Mari kita menempatkan ini di sini. Di sini, saya hanya melihat satu kesalahan yang kubuat sepanjang jalan. Ya? HADIRIN: [Tak terdengar] DAVID J. Malan: Ah. Baik. Jadi kita benar-benar memiliki bilangan bulat yang sama Divisi masalah dari sebelumnya. Saya benar itu, mari kita lihat apa gejala tersebut. Tapi kami akan harus memperbaiki satu lainnya kesalahan di sini. Ya? HADIRIN: [Tak terdengar] DAVID J. Malan: Ya. Jadi, kesalahan bodoh saya buat, tapi sangat penting. Komputer tidak akan hanya menutup mata dan membiarkan saya menggunakan F modal, ketika aku benar-benar mendeklarasikan variabel sebagai f huruf kecil di sini, di baris 8. Jadi saya perlu memperbaiki sejalan 11 kapitalisasi saya, dimana saat lalu adalah F modal oleh kesalahan. Bagaimana dengan di sini? Hal ini harus huruf kecil juga? Seharusnya, tapi itu suatu kebetulan. Bahwa f% tidak ada hubungannya dengan variabel. Jadi hanya untuk menjadi super jelas di sini, biarkan aku pergi ke depan dan mengubah nama ini, sebentar, "suhu." Biarkan saya mengubah nama ini "suhu." Biar tidak mengubah nama ini. Karena, sekali lagi, f% secara global berarti, "nilai titik mengambang." Tidak ada hubungannya dengan variabel saya. Tapi "suhu" di seluruh tempat ini hanya sedikit bertele-tele, jadi aku akan kembali ke s huruf kecil saya "f". Sekarang, biarkan aku pergi ke depan ke jendela saya di sini. Membuat f2c - yang, sekali lagi, nama saya sewenang-wenang memberikan ke file ini. Tampaknya telah disusun. Biarkan saya menjalankan f2c. Enter. Suhu di Fahrenheit - mari kita lakukan yang mudah. 32. OK, benar. Tapi, jika saya lakukan sekarang 212 untuk mendidih - sialan. Baiklah. Jadi, jelas tidak benar, jika Anda mencoba TF setidaknya dua nilai. Jadi apa masalahnya di sini? Nah, Anda sudah meletakkan jari Anda pada apa masalah ini. Tapi kenapa begitu kasus ini? Sampai di sini, ketika saya melakukan matematika dari 5 dibagi dengan 9. Jadi secara konseptual, itu sempurna benar. Benar-benar konsisten dengan rumus. Namun komputer hanya melakukan persis apa yang Anda memberitahu mereka untuk melakukannya. Dan apa yang kita efektif memberitahu komputer di sini adalah membagi 5 bilangan bulat oleh 9 bilangan bulat dan memberikan hasilnya. Masalahnya adalah, meskipun, ketika Anda melakukan pembagian menggunakan data jenis, output adalah tipe data yang sama sebagai masukan. Dan jadi jika dua input keduanya ints, output akan menjadi int. Dan jadi 5 dibagi dengan 9 adalah sesuatu titik. Tapi apa bilangan bulat terdekat untuk menunjukkan sesuatu? Jadi, itu sebenarnya 0. Jadi seperti yang kita bahas pada hari Senin, semuanya setelah desimal titik akan terpotong. Itu hanya akan dibuang. Jadi ini adalah kesalahan lengkap, karena saya mungkin juga hanya kalikan dengan apapun di sini 0. Sekarang, saya bisa memperbaiki ini dalam beberapa cara. Aku bisa melakukan ini. 5.0 dibagi dengan 9.0. Secara teknis, aku bahkan tidak perlu melakukan itu. Ini tidak cukup untuk hanya membuat salah satu nomor pelampung - atau double - dengan menempatkan titik desimal di sini. Karena apa yang terjadi sekarang adalah ketika Anda membagi integer oleh pelampung, atau ganda, komputer akan menyadari oh, salah satunya adalah lebih tepat. Biarkan aku berbuat salah di sisi memberi Anda lebih presisi dibanding Anda dimaksudkan. Sehingga akan mengubah hasilnya - itu akan mengembalikan hasil sebagai nilai floating point juga. Sehingga akan bekerja. Hal ini akan bekerja. Dan ada satu mekanisme lain yang akan kita lihat pada lebih detil minggu depan. Anda benar-benar dapat, sebagai programmer, memberitahu komputer untuk benar-benar memperlakukan satu tipe data sebagai olah yang lain. Jadi saya benar-benar bisa melakukan ini. Dalam kurung, saya dapat mengatakan sesuatu seperti (float), terbuka paren, paren dekat. Dan ini adalah apa yang disebut "casting." Sekali lagi, lebih pada minggu depan. Tapi ini hanya cara untuk memberitahu program komputer, ya aku tahu 9 adalah bilangan bulat atau panjang. Aku tahu itu bukan nilai floating point. Tapi memperlakukannya seperti itu pula. Jadi untuk melemparkan tipe data berarti untuk mengkonversi dari satu ke yang lainnya. Terus terang, ini hanya sedikit jelek, jadi saya akan mengusulkan kita pergi kembali ke saran asli hanya mengkonversi hal-hal yang mengambang point nilai secara manual. Karena sekarang itu hanya super jelas apa yang terjadi, dan itu tidak semua yang mengganggu. Sekarang, mari kita kembali ke jendela terminal saya. Membuat f2c. Biarkan aku pergi ke depan dan menjalankan ini. Dan, sebagai samping, Anda bosan mengetik perintah ini lagi dan lagi, menyadari bahwa komputer, seperti Linux sini, cenderung cukup pintar. Dan jika aku memukul Up, kita bisa pergi melalui seluruh sejarah saya perintah, Atas dan Bawah. Jadi dalam hal ini di sini, saya hanya bisa pergi Hingga jalankan make f2c. Aku sedang berteriak, karena saya hanya melakukan itu satu detik yang lalu. Ini sudah up to date. Jadi sekarang saya dapat menjalankan f2c lagi. Mari kita coba 32 Fahrenheit. Sekarang mari kita coba 212 Fahrenheit. Fiuh. Tampaknya bekerja. Sekarang, ini bagus, tapi rasanya agak sewenang-wenang yang Aku menunjukkan enam angka setelah titik desimal. Benar? Jika Anda orang cuaca di TV, kau jenis doofus suatu jika Anda membaca suhu untuk ini tingkat presisi. Jadi mari kita menyederhanakan ini. Jadi mari kita benar-benar pergi di sini, untuk printf saya. Dan ya, saya ingin mengapung. Tapi aku ingin sekarang menentukan presisi. Dan aku akan menjadi ringkas sedikit. Aku akan mengatakan, beri saya satu poin setelah tempat desimal. Jadi daripada mengatakan f%, aku akan mengatakan% .1 f. Dan ini hanya berarti memberi saya satu posisi setelah titik desimal. Baiklah. Mari kita coba ini lagi. Biarkan aku kembali menjalankannya setelah kompilasi. Dan sekarang saya ketik di 32, dan saya mendapatkan kembali lebih ringkas nilai. Dan saya dapat mengetikkan, sekarang, 212, dan mendapatkan kembali lebih ringkas nilai juga. Dan ada hal lain yang dapat Anda lakukan dengan printf. Anda benar-benar dapat menentukan berapa lebar nomor harus. Jika Anda ingin memiliki bantalan di atasnya, sehingga Anda dapat benar-align atau kiri-align semua nomor atau mencoba hal pusat. Jadi menyadari ada sedikit trik yang dapat Anda lakukan di sana. Tapi mereka hanya mendidih ke kode format, seperti kita telah ada. Jadi dalam hal ini masalah didahulukan. Ini adalah meja yang sangat membosankan untuk pergi melalui metodis. Tapi menyadari bahwa penulis C telah datang dengan aturan yang menentukan operator memiliki tinggi didahulukan, lebih banyak kekuatan mengikat, daripada yang lain. Jadi sedangkan di sekolah dasar, kita umumnya tahu bahwa itu perkalian dan pembagian, maka penambahan dan pengurangan, maka beberapa hal lainnya. Dalam dunia pemrograman, ada banyak lagi daftar hal-hal. Dan ini bukan sesuatu yang layak menghafal sekarang. Anda akan mendapatkan terbiasa untuk itu sebelum lama. Tapi sama seperti di sekolah dasar, tanda kurung pada umumnya memecahkan isu diutamakan, dengan membuat super jelas untuk komputer dan manusia sama apa yang dimaksudkan. Jadi pertimbangkan ini hanya contekan kecil di sana. Tapi kebanyakan dari mereka rincian kita tidak akan mendapatkan untuk beberapa waktu. Baiklah. Sekarang, mari kita membangun dan menjauh dari ini sedikit konyol contoh matematika. Masih menggunakan fundamental yang sama, tapi mulai mengekspresikan diri kita sedikit lebih seperti Scratch. Jadi dalam Scratch, kami memiliki ekspresi-ekspresi Boolean. Dan dalam bahasa Inggris, ekspresi Boolean adalah apa? Benar atau salah. Ini adalah sesuatu yang mengevaluasi untuk benar atau salah. 1 atau 0. Hidup atau mati. Apa pun yang Anda ingin menyebutnya. Sekarang di Gores, potongan-potongan teka-teki tampak seperti ini. Dan itulah kombinasi, di bawah sana, dari tiga teka-teki potongan. Satu hubungannya - sesuatu yang kosong dan kosong. Dan kemudian dua ekspresi Boolean dalamnya. Jadi Anda dapat sarang ekspresi Boolean untuk mendapatkan lebih banyak rumit ekspresi Boolean. Misalnya, jika hari Sabtu, dan itu bagus Cuaca, kemudian pergi ke luar. Atau sewenang-wenang seperti itu sesuatu. Jadi Anda dapat bergabung ekspresi Boolean untuk datang dengan besar nilai kebenarannya, yang jawabannya didasarkan pada yang lebih kecil. Sekarang, di C, untungnya, pemetaan ini sebenarnya cukup sederhana. Kurung membantu membuat hal-hal yang jelas di sini. && Adalah apa artinya "dan." Jadi begitulah kita akan mengkonversi blok dari Scratch ke C. Dan untuk kondisi yang kita lihat di Gores, di sisi kiri sisi ada, saya dapat stack mereka sama di C. Jika x kurang daripada y, kemudian melakukan ini. Lain jika x lebih besar dari y, kemudian melakukan ini. Lain logis mereka harus sama, jadi ucapkan bahwa mereka adalah sama. Jadi sekarang kita dapat mulai membangun hal-hal ini. Jadi mari kita lakukan contoh. Mari saya membuka file yang ada di situs kursus yang Saya menulis di muka. Itu disebut nonswitch.c. Dan kita akan melihat mengapa hanya dalam beberapa saat. Jadi dalam file ini - nonswitch.c-- pertama kali menyadari bahwa ada sejumlah besar Komentar di atas. Itu hanya menjelaskan nama file, apa tidak, dan sebagainya. Dan itu tampaknya menunjukkan penggunaan Boolean AND-ing - conjoining dua ekspresi. Jadi mari kita lihat bagaimana program ini bekerja. Saya termasuk dua file, cs50.h dan stdio.h. Jika saya gulir ke bawah, sekarang, untuk program, itu sedikit lebih lama daripada kita sudah ditulis sebelum, tapi cukup dibaca. Jadi saya pertama kali mencetak ke pengguna, on line 18, "Berikan saya sebuah integer antara 1 dan 10." Jadi yang ada di sana. Sekarang saya mendapatkan integer. Tetapi menyadari bahwa GetInt - cukup sederhana. Ini hanya akan mendapatkan sebuah int. Ini akan memastikan bahwa itu tidak mendapatkan int dan bukan string atau pelampung. Tapi itu tidak akan melakukan apapun pengecekan batas. Ini tidak akan menyaring angka-angka harus antara tertentu jangkauan. Jadi kita harus menerapkan bahwa diri kita sendiri. Jadi seperti di Scratch, di mana saya bisa melakukan gabungan dari dua ekspresi, saya bisa melakukan itu di C sebagai berikut. Jika n lebih besar dari atau sama dengan 1, dan n adalah kurang dari dan atau sama dengan 3, saya akan sangat sewenang-wenang memutuskan bahwa nomor untuk menjadi nomor kecil. Hanya demi sebuah pernyataan. Lain jika n adalah antara 4 dan 6, cetak "Anda memilih media nomor. "Lain jika n adalah antara 7 dan 10, cetak" memilih Anda jumlah yang besar. "Lain print" Anda memilih nomor yang tidak valid. " Karena secara logika, yang mengikuti jika kita sudah kelelahan jangkauan kami. Jadi menyadari hal ini tidak cukup bagaimana kita menulis lebih besar atau sama dengan di kelas matematika. Benar? Anda biasanya menarik seperti ini, dengan garis di bawahnya. Tetapi tidak ada kunci seperti pada keyboard saya. Jadi simbol dalam C untuk mengekspresikan lebih besar dari atau sama dengan dua karakter, dan simbol untuk kurang dari atau sama dengan dua karakter juga. Baiklah. Jadi jika saya menjalankan program ini, Anda mungkin bisa menebak apa itu akan dilakukan. Jika saya pergi ke depan dan membuat nonswitch, Enter. Dan kemudian jalankan nonswitch. Beri aku nomor antara 1 dan 10. Aku akan memberikannya 11. Aku mengambil nomor yang tidak valid. Biarkan aku mencoba nomor 3. Aku mengambil sejumlah kecil. Jadi cukup mudah di sana. Bagaimana jika saya ingin mengubah perilaku dari program ini dan melakukan sesuatu yang sedikit berbeda, bukan? Biarkan aku pergi ke depan dan mengatakan ini. Mari saya menyingkirkan semua ini. Dan biarkan aku mengatakan jika (n == 42). Dan kemudian aku akan pergi ke depan dan mengatakan cetak "Anda memilih yang jawaban yang benar. "Lain kita akan pergi ke depan dan berkata, printf ("Anda memilih Jawaban salah ");. Oke. Hanya karena. Sekarang, beberapa poin yang bisa kita lakukan di sini. Satu, saya tidak ketik simbol yang Anda akan berpikir adalah paling masuk akal. Ketika saya ingin memeriksa kesetaraan, ternyata Anda tidak menggunakan sama tanda. Anda malah menggunakan tanda sama sama. Dan mengapa mungkin itu akan, hanya intuitif? Ya. HADIRIN: [Tak terdengar] DAVID J. Malan: Benar. Tanda sama sudah digunakan untuk tugas. Seseorang tidak benar-benar berpikir ini melalui. Dan sekarang, ketika datang ke pengujian kesetaraan, kita harus lebih eksplisit, dan mengatakan sama sama. Sebuah kesalahan yang sangat umum adalah untuk melakukan hal ini. Dan, jika dalam jam kantor atau kadang-kadang minggu depan atau di berikutnya dua minggu Anda melakukan sesuatu seperti ini dan kemudian berjuang dengan itu selama 10, 20 menit mencoba untuk mencari tahu apa bug sialan ini, menyadari bahwa Anda adalah salah satu dari mereka orang-orang yang membuat kesalahan ini. Jadi, super mudah untuk membuat. Tetapi tujuannya sekarang adalah untuk menangkal kesalahan ini. Ini bisa mengevaluasi, karena apa yang ini benar-benar katakan? Jika n mendapat 42. Jadi orang-orang verba digunakan, secara lisan, untuk mengekspresikan gagasan penugasan adalah "mendapat." Jadi jika n mendapat 42. Jadi itu berarti menetapkan 42 ke n. Sekarang saya memiliki ekspresi Boolean dalam tanda kurung, dalam kondisi ini, nilai yang 42. Benar? Karena jika Anda mengevaluasi itu dari dalam ke luar, total Jawabannya, sekarang, adalah 42. Jadi jika saya meminta Anda pertanyaan, "jika (42)," apa yang yang benar-benar katakan? Nah, ekspresi Boolean hanya bisa benar atau salah. 1 atau 0. Hidup atau mati. Jadi kita tampaknya memiliki kasus sudut sini, dimana semua dari tiba-tiba, saya katakan "jika (42)". Itu bukan nilai Boolean. Jadi apa yang komputer lakukan, meskipun, adalah pada dasarnya menyamakan sesuatu yang tidak 0 ditafsirkan untuk menjadi kenyataan. 1. Pada. Mereka semua setara fungsional. Hanya nilai 0, atau kata kunci palsu, seperti yang kita akan akhirnya melihat, sebenarnya palsu. Jadi "jika (42)" akan benar-benar menjadi kenyataan, karena itu adalah non-nol. Jadi untuk lebih tepat di sini, nilai Boolean benar-benar tidak begitu banyak benar atau salah, tetapi untuk ini kasus, jika adalah 0 atau non-nol. Jadi palsu atau tidak palsu. Dan yang memungkinkan kita untuk mencakup semua lebih kemungkinan dalam ekspresi kurung. Jadi kita perlu, pernah begitu hati-hati, mengatakan ini - if (n == 42). Hanya karena kita perlu menentukan tes kesetaraan, bukan tugas dari nilai. Apa lagi yang perlu diperhatikan di sini? Ini kurung kurawal sebenarnya tidak diperlukan. Aku sudah melakukannya hanya untuk menjadi rewel di sini. Tetapi bila Anda memiliki kondisi yang hanya memiliki satu baris kode, seperti kenyamanan, programmer tidak perlu menggunakan yang keriting kawat gigi. Itu sudah cukup untuk hanya indent, untuk alasan estetika, dan kemudian menulis baris kode Anda. Hanya ketika Anda ingin menulis dua baris kode - untuk Misalnya, lain printf ("Bye!"). Jika Anda ingin melakukan itu, ini rusak. Anda dapat indent semua yang Anda inginkan, tapi fakta bahwa Anda memiliki mengetik dua baris kode tanpa menggunakan kurung kurawal berarti bahwa program ini tidak akan berjalan dengan benar atau mungkin bahkan tidak mengkompilasi benar. Jadi untuk saat ini, jujur, saya pikir kebiasaan terbaik adalah hanya menggunakan kurung kurawal, dan Anda akan menemukan bahwa mereka membuat super jelas apa yang terjadi. Juga, sebagai samping - terutama jika Anda berada di antara mereka yang menggunakan yang direkomendasikan buku atau sumber daya online - menyadari bahwa ada gagasan dari gaya dalam pemrograman. Dan beberapa orang benar-benar lebih memilih untuk menempatkan tanda kurung kurawal di sini pada baris. Sebagian orang memilih untuk melakukan hal-hal konyol, seperti menempatkan mereka di sini. Tidak ada jawaban yang salah ketika datang ke gaya, tapi ini salah. Tetapi beberapa orang melakukannya. [TERTAWA] DAVID J. Malan: Jadi saya menyebutkan ini sekarang, hanya karena sebagai Anda membaca tentang hal-hal di buku atau online, Anda akan mendapatkan berbeda pesan dari guru yang berbeda dan penulis yang berbeda. Dan hanya menyadari bahwa, fungsional, mereka umumnya setara, tapi konsisten. Jadi dalam hal ini, kita akan standarisasi pada keriting kawat gigi berbaris di sini di sebelah kiri. Baiklah. Jadi mari kita lanjutkan sekarang dan menjalankan ini, dan melihat apa yang terjadi dengan program ini. Membuat nonswitch. Kemudian jalankan nonswitch. Berikan saya sebuah integer antara 0 dan - jadi itu tidak relevan lagi, tapi aku hanya akan sewenang-wenang katakan 42. Dan saya memilih jawaban yang tepat. Nah sekarang, mari kita benar-benar mengambil ini dalam arah yang berbeda. Ternyata ada beberapa sintaks lain kita dapat digunakan dalam program. Berikut sepotong baru sintaks yang secara fungsional sama, tetapi hanya memperkenalkan cara lain untuk mengekspresikan diri kita sendiri. Jadi ini adalah apa yang disebut "pernyataan switch." Dan pernyataan switch beroperasi sebagai berikut. Dibutuhkan, dalam tanda kurung, nilai yang ingin Anda "Saklar" on. Anda ingin berperilaku berbeda berdasarkan nilainya. Jadi ini berarti beralih pada nilai n. Dan apa artinya ini? Nah, jika n adalah 1 atau 2 atau 3, pergi ke depan dan mencetak "Kau mengambil sejumlah besar "dan kemudian istirahat. Alasan untuk istirahat adalah bahwa cara kerjanya adalah sebagai C Begitu ia menemukan kasus yang cocok, ia mulai melaksanakan semua kode di bawahnya. Jadi jika saya memiliki satu baris kode, seperti yang saya lakukan di sini pada baris 27, hal itu dijalankan. Jika saya menambahkan baris lain di sini, itu akan dieksekusi. Baris lain di sini, itu akan dieksekusi. Program ini hanya berhenti melaksanakan apa yang di bawah Kasus berlaku pernyataan ketika saya tandasnya mengatakan "istirahat." Begitu salah. Benar, dalam hal ini, sebagai hasilnya. Kasus 4 atau 5 atau 6, sama, akan untuk mencetak pesan. Dalam hal ini angka, menengah. Istirahat. Kasus 7, 8, 9, 10, itu akan mencetak "Kau memilih besar nomor "Break.. Dan kemudian ada harfiah kata kunci yang disebut "default" itu efektif seperti "lain" membangun. Jadi baru sintaks, namun secara intelektual, tidak ada sama sekali di sini baru. Ini seperti Scratch tersebut. Jika, else if, else if, semacam blok. Jadi itulah versi beralih dari program ini. Tapi perhatikan bahwa kita melakukannya dengan angka di sini. Mari saya membuka versi kedua, hanya untuk menunjukkan sedikit lebih sesuatu yang konkret. Jadi di sini kita memiliki nilai sebagai gantinya. Ternyata Anda dapat menggunakan switch tidak hanya pada bilangan bulat, tetapi pada karakter. Tidak di semua jenis data, tapi setidaknya pada karakter. Jadi di sini, kita bisa melakukan sesuatu seperti jika nilai C yang pengguna mengetik, di baris 19, dengan menggunakan fungsi getchar, adalah modal A atau huruf kecil, mari kita mengartikannya sebagai sebuah kelas, dan mengatakan mereka memilih sebuah kelas yang sangat baik. Dan turun sepanjang pernyataan switch, yang kita miliki lainnya kasus untuk "B" s dan "C" s, dan sebagainya. Tapi mari kita sekarang melengkapi satu hal lainnya. Dan lagi, jenis terbang melalui beberapa contoh. Tapi itu benar-benar sehingga kita bisa menerapkannya, sekarang - atau benar-benar, hanya menerjemahkan mereka sekarang - C. Jadi biarkan aku pergi ke depan dan melakukan hal ini. Aku akan membuka file baru. Dan aku akan melakukan include. Dan kemudian aku akan melakukan int main (void). Biarkan saya menyimpan file ini sebagai suatu loop.c. Hanya sebagai contoh. Dan aku akan pergi ke depan dan lakukan hal berikut. Saya ingin menulis sebuah program yang sangat membosankan. Jadi 10. Mari kita lakukan ini. 9. Baiklah. Segera setelah Anda mulai melakukan hal ini dalam pemrograman, Anda mungkin melakukan sesuatu yang salah. Tapi kita akan mulai dari sana pula. Ups. Itu benar-benar salah. 7. 6. 5. 4. Tidak ada yang akan terjadi ketika kita sampai ke 0. 3. 2. 1. Oke. 0. Hapus. Baiklah. Jadi kembali 0. Jadi program ini yang jelas akan melakukan apa yang sangat tediously mengatakan itu akan dilakukan. Ini akan mencetak semua dari mereka nilai-nilai, dari atas ke bawah. Jadi biarkan aku lakukan membuat lingkaran. Dan kemudian - whoops. Membuat loop. Aku berada di direktori yang salah. Dan sekarang biarkan aku menjalankan loop. Enter. Woohoo. Sangat bagus. Program yang bagus, panjang. Baiklah, tapi sekarang mari kita lakukan ini lebih baik. Sama seperti di Scratch, ketika Anda mulai menggunakan looping membangun, bukan hanya menyalin dan menyisipkan semua potongan puzzle, izinkan saya memperkenalkan hal ini. Jadi di C, ada konstruksi perulangan berbagai, salah satunya terlihat seperti ini. A "untuk" loop memiliki tiga hal, dipisahkan oleh dua titik koma. Dan kemudian, dalam tubuh loop, sehingga untuk berbicara - yang hal dalam kurung kurawal - kita bisa melakukan sesuatu lagi dan lagi. Jadi apa yang saya miliki di sini di layar, ini benar-benar hanya komentar. The / / berarti di sini datang komentar. Ini bukan kode. Ini hanya deskripsi bahasa Inggris, bagi saya, manusia. Jadi inisialisasi, kondisi, dan update. Nah, mari kita lihat bagaimana ini bekerja. Hal ini memungkinkan saya untuk menulis ulang program ini sebagai berikut. Untuk - jadi di sini datang loop saya - int i - di sini datang sebuah variabel yang disebut "i" - akan diinisialisasi ke 10. Jadi ada inisialisasi saya. Saya ingin melakukan loop ini asalkan "i" lebih besar dari atau sama dengan 0. Dan pada setiap iterasi dari loop ini, saya ingin untuk melakukan i -. Jadi kita melihat + + pada Senin. - Adalah sebaliknya. Ini decrements nilai dengan 1. Di dalam loop ini, saya ingin benar-benar melakukan sesuatu. Jadi aku akan mengatakan sesuatu seperti printf. Saya tidak ingin mengatakan 10 sekarang, karena ini jelas hanya akan mencetak nilai yang sama. Apa yang saya ingin mencetak sebaliknya, mungkin? Ya. Jadi "i." Jadi% d, i. Jadi aku akan mencuri salah satu ide dari sebelumnya - ini substitusi untuk kode format - dan kemudian turun di sini, di bagian bawah, aku akan kembali 0, hanya untuk mengukur baik. Tapi sekarang, saya memiliki program lebih ringkas. Ini hanya beberapa baris, dan bukan 10 atau 11 baris. Biarkan aku pergi ke prompt saya di sini. Remake loop. Memutarkan loop. Dan tampaknya menjadi sama. Sekarang, program ini ada lebih menarik. Tapi sekarang saya bisa mengetik sesuatu seperti ini. Saya bisa mengubah ini untuk 100. Saya kemudian bisa mengkompilasi ulang program saya. Dan kemudian saya dapat kembali menjalankan program saya. Dan sekarang ia pergi super cepat pada komputer saat ini. Tapi ada saya - dan benar-benar, penyangga scrollback saya tidak bahkan pergi sejauh itu. Di sana kami pergi. Jadi ada kita memiliki semua 100. Tapi itu mudah untuk membuat kesalahan di sini. Apa yang akan menjadi perilaku yang diharapkan jika saya sengaja melakukan itu? Jadi rasanya seperti tak terbatas. Jadi mari kita lihat apakah komputer berperilaku. Jadi biarkan aku pergi ke depan dan membuat lingkaran. Dan biarkan aku menjalankan loop. Jadi mari kita kembali ke yang hanya dalam beberapa saat. Kami akan membiarkan menjalankan itu. Karena apa yang harus kita menghitung sampai, minimal? Mungkin setidaknya 2 miliar, jika kita memiliki banyak bit, dan kita menggunakan nilai-nilai positif. Jadi mari kita melompat kembali ke sini. Selain jenis loop, kita memiliki apa yang disebut sementara loop. Jadi, seperti dalam Scratch, Anda memiliki Selamanya blok, dan Anda memiliki blok Ulangi. Demikian pula, di C, Anda hanya punya cara lain untuk mengekspresikan diri. Jadi Anda memiliki gagasan while loop yang memungkinkan Anda untuk mengekspresikan diri sedikit berbeda. Dan kemudian Anda memiliki sesuatu yang disebut loop do-while, yang beroperasi sedikit berbeda juga. Dan kita akan menggoda ini terpisah dari waktu ke waktu. Tapi mari kita lihat ini yang terakhir di sini. Jika kita pergi ke - masih berjalan. Hal ini cukup terbatas. Jadi biarkan aku pergi ke positif, dan menunjukkan bagaimana kita dapat benar-benar mengatur input pengguna sedikit lebih efektif. Ini adalah program yang cukup singkat. Dan di sini kita miliki, di utama, sebuah deklarasi int n. Jadi memberi saya sebuah variabel yang disebut n. Sekarang, saya benar-benar mengatakan "Lakukan." Dan kemudian aku punya terbuka keriting penjepit, penjepit keriting dekat. Dan kemudian perhatikan, setelah itu, ia mengatakan sedangkan n kurang dari 1. Jadi perhatikan bahwa garis - 19 sampai 24 - menulis kolektif loop do-while. Dan lagi, sintaks baru, bukan ide baru. Ini hanya cara lain untuk perulangan, sintaksis. Jadi apa ini lakukan? Lakukan hal berikut saat n kurang dari 1. Jadi apa yang saya ingin lakukan? Saya menuntut bahwa Anda memberi saya bilangan bulat positif. Lalu aku benar-benar mencoba untuk mendapatkan integer dari pengguna. Tapi dalam hal urutan operasi di sini, karena sementara kondisinya di sini, saya kemudian akan memeriksa, adalah n kurang dari 1? Jadi misalkan bahwa pengguna - setelah dituntut dengan cara ini - jenis dalam nilai 0. Kondisi ini akan menjadi benar atau salah? Yah, itu benar-benar akan menjadi kenyataan. Karena n adalah 0, dan 0 adalah kurang dari 1. Jadi, apa itu berarti? Lakukan lagi. Lakukan lagi. Lakukan lagi. Hanya sekali kondisi yang mengevaluasi ke false. Jika saya ketik di 42. Yah tidak, 42 ​​tidak kurang dari 1. Oleh karena itu loop ini dilakukan mengeksekusi. Dan sehingga pada saat itu, program ini akan mengatakan, terima kasih untuk 42, dalam kasus ini. Sekarang bahwa Anda memiliki cara untuk mengekspresikan diri - Kita tidak harus menunggu untuk ini untuk menyelesaikan. Ini akan memakan waktu. Untuk dilanjutkan lain kali, mungkin. Tapi sekarang, Anda memiliki kemampuan untuk mudah-mudahan untuk memahami sedikit humor geek. Permintaan maaf. Ini tidak mewakili humor dalam ilmu komputer dunia, tapi itu lucu. [LAUGHS] Mari kita berakhir pada catatan itu. Dan kita akan melihat Anda pada hari Senin. [Tepuk Tangan]