[MUSIC PLAYING] DAVID Malan: Halo, semua orang. Ini adalah supersection CS50 ini. Bagian ditugaskan tidak akan mulai seminggu lagi. Dan hari ini, aku di sini with-- MARIA: Maria. DAVID Malan: -to sebenarnya lihatlah masalah menetapkan satu, tentu saja ini minggu pertama material, membuat Anda berorientasi dengan CS50 IDE, sedikit Linux, sistem operasi yang berjalan pada IDE, serta melihat beberapa transisi dari Gores ke C terkemuka sampai masalah menetapkan satu. Jadi tanpa basa-basi lagi, di masalah menetapkan satu, Anda akan menjadi diperkenalkan ke CS50 IDE, yang adalah pemrograman berbasis web ini lingkungan yang kita gunakan dalam rangka untuk menulis program. Ini telah dirancang untuk terlihat sangat mengingatkan komputer khas sistem menjalankan operasi sistem yang disebut Linux. Tapi itu di apa yang disebut awan, yang berarti semua orang di kelas benar-benar dapat memiliki nya akun sendiri dan menggunakannya, juga. Sehingga sebagian besar dari Anda mungkin tidak pernah digunakan lingkungan Linux sebelum atau mungkin bahkan lingkungan baris perintah. Dan baris perintah lingkungan yang berbeda. Ini semua tekstual. Ini semua perintah keyboard. Dan itu tidak mousing, tidak ada ikon, tidak ada jendela dialog, tidak ada menu. Ini murni teks. Jadi pada awalnya, itu jenis rasanya seperti langkah mundur dalam hal kecanggihan. Tapi itu berakhir menjadi banyak lebih kuat, tentu, untuk seorang ilmuwan komputer, akhirnya. Jadi mari kita lihat. Di sini aku di CS50.io, melalui yang Anda dapat login ke CS50 IDE. Dan banyak seperti di Scratch, ada tiga bidang utama untuk layar ini. Jadi di sisi kiri, kita memiliki apa yang akan menjadi file browser. Dan ada folder ini di atas, yang sekarang kosong karena saya menyingkirkan semua saya file sebelum supersection. Dan di sanalah kita akan menyimpan file C yang kita tulis. Di bagian kanan atas, kami memiliki tempat di mana semua kode kita akan bisa ditulis. Dan memang, jika saya klik ditambah ini, ini akan membiarkan saya memilih New File. Dan di sini saya bisa mulai menulis kode C atau, benar, sejumlah bahasa lain. Dan kemudian di bagian bawah di mana ia kata jharvard @ ide50-- dan Anda akan mengatakan sesuatu yang sedikit different-- apa yang disebut? Jendela terminal. Ya. Jadi jendela terminal yang disebut baris perintah interface yang Anda dapat berinteraksi dengan sistem operasi yang mendasarinya. Dan untuk saat ini, kita akan menggunakan sangat sedikit dari this-- hanya untuk mengkompilasi, untuk melihat pesan kesalahan yang kita lihat, dan untuk menjalankan program-program kami. Tapi pada akhirnya, kita akan untuk melakukan jauh lebih banyak, juga. Dan Anda bahkan dapat menginstal perangkat lunak dan mengelola ruang kerja Anda dalam CS50 IDE, juga. Tetapi lebih pada lain waktu. Jadi mari kita pergi ke depan dan menulis program yang sangat sederhana hanya untuk pergi melalui-up hangat hello.c, yang mungkin program sederhana kita dapat menulis. Aku sudah membuka tab baru. Aku akan pergi ke depan dan mengatakan termasuk io.h. standar Kemudian int main (void). Dan kemudian printf ("Halo, dunia" backslash n, kutipan dekat, kurung dekat, dan titik koma. Baiklah. Jadi sekarang melihat jendela saya adalah judul. Jadi aku sangat cepat akan naik ke File, Save. Dan itu penting bahwa Saya sebut ini tidak "halo." Jadi kesalahan yang sangat umum, terutama dalam masalah menetapkan satu, adalah untuk sengaja hanya memanggil Anda Program "air" atau "serakah" atau "Mario" atau "kredit" atau sejenisnya. Tapi Anda benar-benar ingin membuat Pastikan Anda memiliki ekstensi file karena ini adalah satu-satunya cara yang compiler dan juga editor kode tahu bahwa Anda benar-benar menulis kode C. Jadi biarkan aku pergi ke depan dan klik Simpan. Dan sekarang, juga, apa CS50 IDE telah lakukan bagi kita adalah itu juga sintaks disorot segalanya. Jadi itu membuat segalanya sangat berwarna-warni. Dan seluruh tujuan yang tidak fungsional. Itu hanya untuk menarik mata saya untuk potongan konseptual berbeda program ini. Jadi mari kita pergi ke depan dan kompilasi ini. Dan saya dapat mengkompilasi ini dalam beberapa cara. Dan dalam minggu satu, cara lama-sekolah yang kita lakukan itu benar-benar di perintah line-- "dentang hello.c." Dan kemudian saya tekan Enter. Dan tidak ada yang tampaknya terjadi di jendela terminal. Tapi apa perubahan dalam IDE? Di mana, lagi, IDE hanya berarti Integrated Development Environment. Ini adalah cara mewah mengatakan pengembangan terintegrasi ini lingkungan untuk mengembangkan perangkat lunak. Jadi apa yang berubah di UI? Apa yang Anda perhatikan itu berbeda, Maria? MARIA: Aku melihat sesuatu di bawah IDE50 folder di sini. DAVID Malan: Ya. Jadi di sini, tidak hanya kita harus "hello.c." Kami juga memiliki "a.out," yang merupakan jenis nama bodoh untuk suatu program. Tapi memang, itu adalah nama default untuk Program ketika Anda hanya mengkompilasi kode Anda dan tidak memberitahu compiler apa file output. Jadi jika saya ingin menjalankan ini, saya perlu memberitahu compiler-- yang atau lebih tepatnya, saya harus memberitahu ruang kerja yang saya ingin menjalankan program yang disebut "a.out." Memasukkan. Dan ada "Halo, dunia. "sekarang" ./ ". sebenarnya penting. Meskipun biasanya kita hanya menulis nama-nama perintah, ketika itu program Anda sudah ditulis, Anda ingin mengatakan "./" karena yang secara eksplisit memberitahu Linux bahwa Anda ingin menjalankan program yang disebut "a.out" yang dalam hal ini, di mana titik berarti direktori ini bahwa aku saat ini di, yang kebetulan disebut ruang kerja, "a.out. Karena jika saya hanya berkata "a.out," Enter, Aku akan mendapatkan "a.out perintah tidak ditemukan "karena computer-- karena saya menemukan "a.out;" itu tidak datang dengan computer-- yang tidak tahu di mana mencarinya untuk itu, meskipun itu benar di bawah hidung saya, sehingga untuk berbicara. OKE. Jadi kita bisa mengubah ini untuk menjadi "dentang -o halo hello.c." Dan jika saya tekan Enter, program apa apakah ini akan output untuk saya? Apa nama file? Ya, di belakang. Betul. "Halo." Jadi "halo" akan menjadi nama program disebut demikian karena kita telah menggunakan Argumen baris perintah, yang hanya cara untuk mengubah perilaku compiler untuk benar-benar keluaran nama file tertentu. Dan memang, jika aku tampilannya keluar dan melihat di sini, sekarang saya tidak hanya "a.out" dan "hello.c" tetapi juga "halo," juga. Jadi sekarang saya bisa melakukan "./hello," Enter. Dan ada "Halo, dunia." Tapi lastly-- dan ini sekarang akan konvensi kita menggunakan seluruh semester, typically-- adalah Anda juga bisa mengatakan "membuat halo." Dan memang, itu mengatakan terserah sampai saat ini karena sudah ada. Biarkan aku pergi ke depan dan menghapus, dengan perintah rm, baik "a.out" - dan mengatakan "menghapus file yang a.out biasa?" Itu hanya berarti, yang Anda Yakin ingin menghapusnya? Aku akan mengatakan ya. Dan kemudian aku akan menghapus "halo" tapi tidak "hello.c." Aku akan mengatakan "ya" secara eksplisit, tapi "y" cukup, juga. Dan sekarang perhatikan jika saya ketik ls-- yang, ingat, berarti list-- itu daftar semua dari file dalam folder saya. Dan memang, jika aku tampilannya dan melihat kiri atas, menegaskan bahwa apa yang dalam folder ini, bahkan meskipun itu dicap sebagai IDE50 di sini dan tidak ruang kerja, itu hanya "hello.c." Jadi sekarang di sini, jika saya jangan "membuat halo," Enter, sekarang saya melihat perintah lebih lama tapi perintah yang lebih canggih yang akan untuk menjadi berguna dalam minggu-minggu yang akan datang. Dan sekarang saya dapat mengatakan "./hello." Jadi mari kita tur singkat Perintah beberapa lainnya Linux. Lalu mengapa kita tidak mengambil langkah kembali dan benar-benar melihat C lebih umumnya, transisi dari Scratch ke C, dan kemudian menyimpulkan dengan melihat pada masalah pertama diatur dalam C. Baiklah. Jadi aku akan pergi ke depan dan hanya bersih ruang kerja saya dengan Control-L hanya untuk menjaga layar rapi. Tapi itu tidak memiliki fungsional berdampak sebaliknya. Ingat yang kita lihat beberapa perintah sekarang. Jadi kita lihat dentang, yang umumnya Anda tidak perlu mengeksekusi secara manual lagi. Kami bukannya akan menggunakan make. Tapi kita juga melihat ls, yang menunjukkan daftar file dalam direktori saya. Dan sekarang mengapa there-- ada yang dua file sekarang, "halo" dan "hello.c." Mengapa ada bintang atau tanda bintang setelah "Halo"? Apa yang menunjukkan, berdasarkan pada apa yang kita lihat dalam minggu satu? Apa yang kamu pikirkan? Apa bintang menandakan? MARIA: For-- program "hello"? DAVID Malan: "Hello *". Ya. Oh ya? Oh, dieksekusi. Betul. Jadi itu berarti bahwa "halo" adalah eksekusi. Jadi memang, itu sebabnya Aku bisa melakukan "./hello." Baiklah. Jadi apa lagi yang bisa saya lakukan di sini? Nah, ternyata saya bisa juga membuat direktori. Jadi biarkan aku pergi ke depan dan menciptakan, misalnya, "pset1" direktori. Dan masalah mengatur spesifikasi akan memiliki Anda melakukan hal ini, sehingga Anda tidak perlu mengingat hari ini. Tapi "mkdir pset1" tampaknya tidak memiliki dampak. Tapi sekali lagi, tidak ada pesan kesalahan umumnya merupakan hal yang baik. Jadi jika saya ketik "ls" sekarang-- ah, sekarang Saya memiliki sebuah file executable yang disebut "Halo," file C disebut "hello.c." Dan kemudian garis miring tertinggal, sehingga untuk berbicara, berarti bahwa ini adalah sebuah direktori. Jadi memang, sekarang saya ingin membukanya. Dan saya tidak klik dua kali di atasnya seperti dalam GUI, lingkungan grafis. Saya bukannya mengatakan "cd pset1." Memasukkan. Tidak ada yang menarik tampaknya memiliki terjadi kecuali cepat kecilku sini-ini adalah cara Linux mengingatkan saya di mana saya, jadi folder apa yang terbuka. Itu hanya mengatakan secara eksplisit sebagai lawan grafis. Dan jika saya ketik "ls," mengapa saya melihat lain meminta segera, menurut Anda, ketika saya daftar isi pset1? MARIA: Anda mungkin tidak memiliki apa-apa di sana. DAVID Malan: Ya. Jadi kita belum jelas menciptakan apa pun di sana karena saya baru saja membuat direktori. Sekarang, jika saya ingin membuat file-- untuk Misalnya, saya bisa membuat file baru. Dan kemudian aku bisa pergi ke Simpan dan simpan sebagai, seperti, "mario.c" jika Anda melakukan edisi standar pset satu. Dan kemudian, seperti Mac atau PC, hanya pilih folder "pset1, Simpan. Dan sekarang file kosong. Tapi mari kita memperbesar lagi untuk kedua. Mari kita lakukan ls sini. Sekarang kita melihat "mario.c". Jadi ada beberapa perintah lain yang yang layak mengingat lebih time-- jelas, atau Control-L adalah apa yang telah saya telah memukul; mkdir kita lihat; rm kita lihat, juga, yang untuk menghapus atau menghapus file. Hati-hati Anda dapat also-- dan jika Anda melihat tutorial online, Anda akan rm-rf adalah cara yang sangat umum mengatakan menghapus folder yang memiliki barang-barang di dalamnya. Hanya menjadi super, super hati-hati. rf berarti rekursif menghapus apa pun itu Anda mencoba untuk menghapus dan secara paksa menghapusnya. Jadi cara rekursif jika folder dengan folder dengan folder dengan folder, menghapus semua dari mereka. Dan secara paksa berarti bahkan tidak tanya saya ya atau tidak, aku yakin? Jadi ini adalah cara yang super berbahaya menghapus banyak hal dengan cepat. Tapi beware-- terlalu sering melakukan sebuah pemberani mahasiswa sengaja menghapus, katakanlah, pset satu, misalnya. MARIA: Dan jika mereka hanya melakukan r, mereka akan bertanya kepada mereka tentang setiap file. DAVID Malan: Mana yang cukup menjengkelkan. MARIA: Ya. DAVID Malan: Jadi itu sebabnya begitu banyak dari kita, diri termasuk, berada di kebiasaan menggunakan rf. Tapi itu berbahaya. Jadi pembeli berhati-hati. Dan kemudian mv adalah jenis menarik bernama. Jadi ini adalah perintah memindahkan, yang terasa sedikit aneh karena Anda memang bisa menggunakannya untuk memindahkan file dari satu tempat ke tempat lain. Misalnya, anggaplah bahwa saya kacau. Misalkan saya buat file baru untuk pset tersebut. Dan disimpan sebagai "greedy.c." Tapi kira saya sengaja simpan di IDE50-- jadi di ruang kerja saya sendiri dan tidak di pset1. Anda dapat melihat lebih banyak di kiri atas. Ada "greedy.c." Dan ada beberapa solusi. Jadi satu, saya dapat menggunakan cara yang ramah super user hanya menyeret dan menjatuhkannya. Dan itu akan benar-benar memperbaiki masalah ini. Tapi hari ini, kami mencoba untuk melihat cara yang lebih misterius tapi kuat untuk melakukan hal ini. Jadi biarkan aku mengambil "ls" di pset1. Dan aku hanya melihat "mario.c." Biarkan aku pergi ke depan dan melakukan "cd ..". Jadi CD lagi adalah direktori perubahan. ".." Berarti apa, meskipun? Terakhir kali aku berkata "cd pset1 "untuk masuk ke pset1. Jadi ketika saya mengatakan "cd ..", apa yang saya lakukan? Ke belakang. Ya. Jadi itu akan disebut orang tua. Pergi satu tingkat atas, seperti keluar dari folder. Jadi Enter. Dan memang, lihat apa yang terjadi. Itu pindah saya hanya ke ruang kerja bukannya dari ke pset1, yang di ruang kerja. Dan jika saya ketik "ls", ada sejumlah hal. Dalam ada "greedy.c". Jadi sekarang saya menggunakan mv untuk benar-benar bergerak "greedy.c" ke pset1. Dan begitu banyak perintah Linux bekerja persis seperti ini. Mereka tidak mengambil argumen atau mereka mengambil satu argumen atau mereka mengambil dua baris perintah argumen dan sebagainya. Dan dalam hal ini, itu harfiah melakukan apa ia mengatakan, meskipun succinctly-- bergerak greedy.c ke pset1. Memasukkan. Sepertinya tidak ada yang terjadi. Tapi jika saya melakukan ls lagi, serakah hilang. Dan jika saya melakukan "cd pset1", Enter, dan kemudian ls lagi, sekarang di tempat yang tepat. Sebagai samping, jika untuk beberapa reason-- terutama jika Anda memiliki intermiten konektivitas jaringan atau Anda berjalan di sekitar kampus dengan tutup laptop Anda ditutup dan kemudian membukanya lagi dan ruang kerja Anda tampaknya agak tidak sinkron, bukan masalah besar. Hanya ulang browser Anda jendela, dan itu harus resync sehingga kiri File Browser tampak persis seperti jendela terminal. Tidak perlu khawatir. Jika ragu, kembali halaman tersebut, sehingga Selama Anda telah menyimpan file sudah. OKE. Jadi mv juga dapat digunakan untuk mengubah nama file. Dan mari kita lihat perintah ini akhir di sini. Jadi suppose-- dan ini Super umum, terlalu, sejak dini. Beberapa siswa kadang-kadang membuat file disebut, mari say-- apa satu sama lain? Seperti "WATER.C." Jadi saya hanya akan berteriak, untuk tanpa alasan, di semua topi. Tapi ini bukan Nama yang benar untuk file jika hanya karena masalah kita mengatur spesifikasi tidak memberitahu Anda untuk menyimpan file seperti semua topi "WATER.C." Sebaliknya, kami berharap "water.c" dalam huruf kecil. Dan, pada kenyataannya, ini adalah bermasalah karena check50, program Anda akan untuk bertemu di masalah menetapkan satu yang secara otomatis tes kebenaran kode Anda akan berteriak pada Anda jika tidak bisa menemukan "water.c" dalam semua huruf kecil. Jadi saya harus memperbaiki ini. Begitu banyak cara yang berbeda untuk melakukan hal ini, yang pertama akan ke Control-klik atau klik kanan nama file dan hanya mengubah Rename. Benar-benar baik untuk melakukan itu. Tapi sekali lagi, hari ini, mari kita melakukannya sedikit lebih menarik. Mari kita gunakan mv untuk mengubah "WATER.C" untuk "water.c." Sehingga Anda juga dapat menggunakan argumen pertama untuk mengganti nama ke argumen kedua jika argumen kedua tidak, di Bahkan, folder atau nama direktori. Baiklah. Dan terakhir, sebuah trick-- sedikit jadi aku di saya direktori kerja saat ini. Jika saya ingin masuk ke pset satu, Aku pasti bisa mengetik "cd pset1." Tapi begitu membosankan untuk mengetik "pset1" atau lagi nama file atau nama direktori masih. Jadi sangat sering di Linux, apa Anda bisa lakukan adalah mulai mengetik "pse" dan hanya bosan, tekan Tab, dan membiarkan sosok komputer itu untuk Anda. Super membantu untuk masuk ke kebiasaan itu. Satu-satunya adalah jika Anda memiliki beberapa file atau folder yang dimulai dengan huruf "p" atau "ps," Anda mungkin memiliki mengetik beberapa sebelum komputer tahu apa yang harus dilakukan. MARIA: Kami ingin jalan pintas. DAVID Malan: Ini akan menghemat begitu banyak waktu. Dan juga, seperti yang kita katakan dalam kuliah, Anda dapat menggulir ke atas dalam sejarah, atas dan bawah, untuk menemukan baru-baru ini dieksekusi perintah, juga. Baiklah. Jadi sekarang, mari kita mengalihkan perhatian kita kembali untuk sebuah program sederhana, halo dunia. Jadi kami telah menyusun ini persis. Dan sekarang, mengapa tidak kita mengambil lihat pada tipe data dan kemudian transisi dari beberapa sesuai blok Scratch untuk C. MARIA: Awesome. Jadi sekarang Anda sudah mulai menulis program di C, kita akan mulai berbicara tentang tipe data dan variabel. Jadi beberapa jenis data yang Anda ingin tahu mulai sekarang adalah orang-orang yang disorot dengan warna biru. Jadi kita memiliki int pertama, yang merupakan singkatan dari bilangan bulat. Dan yang memegang bilangan bulat, seperti yang Anda mungkin guessed-- sehingga 1, 2, 3, dan setiap bilangan bulat lainnya yang dapat Anda pikirkan. DAVID Malan: Dan juga negatif. MARIA: Dan juga yang negatif, ya. Dan 0. Kemudian kita memiliki mengapung, yang yang angka floating point. Jadi itu semua bilangan real yang memiliki poin desimal. Jadi 5.0, 5.2, dan bahkan lebih digit setelah titik desimal, juga, dan juga yang negatif. Lalu kami memiliki arang yang karakter. Jadi saya pikir kita berbicara tentang ini di kuliah ini. Tapi kami memiliki surat-surat, untuk example-- A, B, C-- yang dapat disimpan sebagai char. Tapi kemudian kita memiliki simbol lebih banyak yang dapat disimpan sebagai char. Dan orang-orang yang disimpan sebagai ASCII. Dan kemudian kita memiliki bool, yang Booleans. Dan mereka mengevaluasi untuk Benar atau Palsu atau 1 dan 0, masing-masing. DAVID Malan: Dan ingat bahwa bool berasal dari perpustakaan CS50. Jadi itu tidak dibangun ke C, tapi itu super berguna untuk memiliki gagasan yang benar dan yang salah. Dan meskipun Anda mungkin think-- menyenangkan fakta. Sebuah bool teknis perlu berapa banyak bit, benar-benar, untuk mewakili Benar vs Palsu? Berapa banyak bit yang Anda pikir Anda akan perlu, maksimal? Ya, hanya satu. Jadi ternyata bahwa C tidak bisa memberikan Anda hanya satu bit. Unit terkecil dari ukuran Anda bisa mendapatkan delapan. Jadi itu adalah boros sedikit mereka Anda menggunakan seluruh byte, atau delapan bit, untuk mewakili Benar atau Salah. Tapi itu hanya cara itu diimplementasikan dalam C oleh perpustakaan CS50. MARIA: Dan kemudian orang-orang yang kita tidak akan berbicara tentang sebagai ekstensif tepat sekarang-- ganda, itu sudah mengapung lebih besar. Panjang panjang dan pendek juga untuk bilangan bulat. DAVID Malan: Memang. Dalam edisi hacker dari pset satu, kita benar-benar menggunakan yang lama. Tapi untuk edisi standar, seharusnya tidak diperlukan. MARIA: Cool. OKE. Jadi operators-- harus Anda mungkin akrab dengan sebagian besar. Selain itu, +; pengurangan, -. Untuk perkalian, kita memiliki *. Jadi tidak X yang kita biasanya menggunakan. Divisi, kita memiliki garis miring terbalik. Dan modulo adalah operator terakhir kami yang kita akan berbicara tentang sekarang. Ini adalah operator yang memungkinkan kita untuk mengambil sisa divisi. Jadi jika kita memiliki 4% 2, 4 dibagi oleh 2 adalah 2 dengan sisa 0. Jadi 4% 2 adalah 0. 4% 3 adalah 1. 4% 5 adalah 4, karena Anda bisa menebak. Dan ingat ketika menggunakan semua ini operator untuk menggunakan aturan Pemdas. DAVID Malan: Jadi harus jelas, jika Anda melakukan 4% 2, mengapa adalah bahwa 0, tepatnya? MARIA: Karena 4 dibagi dengan 2 adalah 2 dengan sisa 0. Jadi modulo memberi kita yang sisanya sebagai bertentangan dengan hasil pembagian. DAVID Malan: Dan memang, apa yang akan kita temukan ini bermanfaat adalah bahwa dalam beberapa masalah itu belum tentu salah, jika Anda ingin memiliki Pengaruh membatasi diri ke berbagai nomor seperti 0 melalui sesuatu, Anda dapat menggunakan modulo untuk membungkus di sekitar lebih awal dari seperti 2 miliar atau 4 miliar nilai yang telah kita bicarakan dalam kuliah. MARIA: Ya. Dan bahkan dalam "serakah" kita mungkin. DAVID Malan: Ya, di Masalah menetapkan satu, juga. MARIA: Ya, bagus. DAVID Malan: Baik petunjuk. MARIA: Maaf. Boolean expressions-- sehingga untuk operator Boolean, kita akan berbicara tentang semua dari bahwa Anda lihat di sini. Jadi sekarang, kita memiliki dua tanda-tanda yang sama terdaftar untuk equals. Jadi mereka adalah untuk perbandingan. Sejauh ini, kami hanya melihat satu sama dengan tanda. Saat itulah kita menetapkan nilai ke variabel. Jadi jika kita telah melihat int n = 5, maka kami sudah ditugaskan 5 ke variabel n. Tetapi jika kita ingin menggunakan == untuk perbandingan, kita dapat memeriksa apakah n == 5. Dan jika n == 5, maka itu benar. Operator sehingga Boolean memungkinkan kita, pada dasarnya, untuk mengevaluasi Boolean ekspresi untuk Benar atau Salah. Jadi tidak equals-- kita memiliki tanda seru dan sederajat. Jadi kita juga bisa memeriksa apakah n tidak sama 5-- sehingga n! = 5. Kurang dari, kurang dari atau sama dengan, lebih besar dari, lebih besar dari atau sama dengan, dan kemudian kita memiliki logis DAN dan logika OR. Dan mereka memungkinkan kita untuk mengevaluasi beberapa ekspresi Boolean bersama-sama pada dasarnya datang bersama-sama sebagai satu ekspresi seluruh Boolean. Jadi jika kita ingin mencari angka, mengatakan, yang lebih besar dari 5 tetapi kurang dari 15 pada saat yang sama, kita akan menggunakan logis operator AND untuk melihat apakah n adalah lebih besar dari 5 && n kurang dari 15. DAVID Malan: Dan di sini, juga, itu benar-benar mudah awal untuk sengaja menggunakan hanya ampersand tunggal atau bar vertikal tunggal. Dan mudah-mudahan compiler akan berteriak pada Anda karena mereka benar-benar memiliki arti yang sangat berbeda. Bagi mereka yang ingin tahu, mereka digunakan untuk operasi bitwise, beroperasi pada bit individual. Tetapi Anda ingin pasangan mereka di sini. Dan super penting adalah bahwa pertama, tanda sama, yang merupakan operator kesetaraan sebagai bertentangan dengan operator penugasan. MARIA: Dan bar vertikal terletak antara Delete dan Kembali. DAVID Malan: Ya. Pada keyboard US khas. MARIA: Yep. Jadi mari kita melompat tepat ke pernyataan bersyarat. Dalam Scratch, Anda sudah sudah terlihat, mungkin, jika pernyataan yang memungkinkan Anda untuk memeriksa apakah sesuatu itu benar, maka melakukan sesuatu yang lain. Jadi, Anda mungkin ingin untuk memeriksa apakah sprite Anda menyentuh beberapa sprite lainnya atau perbatasan layar Anda. Dan kemudian Anda mungkin ingin mengakhiri permainan atau melakukan sesuatu yang lain. Jadi sintaks untuk itu adalah "if (kondisi)." Jadi jika sprite Anda menyentuh sesuatu, maka jangan di dalam kurung kurawal. Kemudian kita memiliki jika-lain pernyataan. Lain memungkinkan kita untuk melakukan sesuatu jika kondisi yang kita memeriksa pada awalnya tidak benar. Jadi jika sprite menyentuh perbatasan melakukan ini, yang lain melakukan sesuatu yang lain. Jadi jika tidak melakukan sesuatu yang lain. Kemudian kita memiliki contoh singkat untuk ini. Jadi jika (military_time <12), kita ingin printf "Selamat pagi!" Lain kita akan printf "Selamat malam!" Contoh dasar. DAVID Malan: Baik. MARIA: Cool. Jadi sekarang kita memiliki laporan beralih. Beralih pernyataan di dapat umum memungkinkan kita untuk melakukan banyak hal yang sama bahwa kita hanya berbicara tentang dengan jika pernyataan. Misalnya, sekarang kita memiliki Bentuk umum dari pernyataan switch yang memungkinkan kita untuk mengambil variabel disebut n dan membandingkannya dengan banyak nilai yang berbeda, yang di sini kita telah disebut constant1, constant2. Kita mungkin memiliki lebih banyak. Dan orang-orang yang disebut kasus. Jadi jika kita memiliki sebuah tombol statement-- dan karya ini hanya untuk integers-- kita memiliki variabel dalam kasus ini itu n. Jika variabel n adalah sama dengan constant1, kami akan menjalankan beberapa potongan kode atau sesuatu yang ingin kita lakukan. Dan kemudian kita akan hancur. Jadi istirahat berarti bahwa pernyataan switch akan berhenti mengeksekusi jika n adalah sama dengan constant1, dan kemudian program anda akan terus. Maka akan keluar keluar dari beralih pernyataan dan itu akan terus melakukan sesuatu yang lain. Namun, jika n tidak sama constant1, maka kasus untuk constant2 akan diperiksa. Jadi jika n sama constant2, yang lainnya potongan kode akan dieksekusi. Dan kemudian akan mematahkan jika itu adalah sama dengan itu. Dan kemudian kita dapat memiliki also-- tidak tentu, though-- kasus default, yang akan terjadi jika n tidak sama salah satu kasus yang telah anda daftarkan. Dan dalam kasus default, kami juga tidak perlu istirahat tentu karena pernyataan switch akan tahu yang perlu berakhir setelah default kasus jika itu yang terjadi. DAVID Malan: Tapi Gaya, kami selalu meletakkannya di sana. MARIA: Ya. DAVID Malan: Ya. Jadi terutama ketika memulai, terutama jika di antara mereka yang kurang nyaman, saya akan secara pribadi hanya merekomendasikan menempel dengan ifs dan seandainya-elses dan jika-lain-jika-elses dan sebagainya jika hanya karena mereka sedikit lebih mudah. Ini adalah optimasi bagus, atau kadang-kadang bahkan estetis itu membuat kode lebih mudah dibaca. Dan pada kenyataannya, mungkin pertengahan semester kita akan melihat masalah mengatur di mana itu hanya terlihat lebih baik dan lebih mudah dibaca untuk manusia dengan menggunakan pernyataan switch. Tapi jangan khawatir tentang menempel ini terlalu dini. MARIA: Ya. Jika Anda memiliki banyak jika laporan, itu hanya mungkin tidak akan sangat mudah dibaca. Ini mungkin tidak akan sangat cepat bagi Anda untuk pergi melalui itu. Jadi pernyataan beralih dapat sangat berguna, juga. Dan juga, jangan remember-- tidak lupa untuk menempatkan istirahat di sana. DAVID Malan: Tidak ingat ini. MARIA: Karena maka Anda mungkin jatuh melalui dari satu kasus ke yang lain. Jadi mari kita mengatakan bahwa kasus constant1 tidak memiliki pernyataan istirahat di dalamnya. Maka kita mungkin jatuh melalui kasus dalam constant2. Dan kita tidak ingin melakukan itu jika kami sudah mencapai hal constant1 dan itu sama dengan n. Jadi, misalnya, jika kita memiliki variabel n yang berisi nomor kelas, dan kami ingin melihat apa yang kelas is-- jika n sama dengan 50, kita akan mencetak "CS50 adalah Pengantar Ilmu Komputer I. " Kemudian kita akan istirahat. Dan hanya itu. Namun, jika n adalah sama 51, kita akan untuk mencetak "CS51 adalah Pendahuluan Ilmu Komputer II. " Kemudian, sekali lagi, kita akan istirahat. Namun, jika kemudian kita masukkan 124, 61, setiap nomor lain yang mungkin Anda pikirkan, atau program tidak akan untuk mengakui bahwa. Jadi itu akan mengatakan, "Maaf, aku tidak akrab dengan kelas itu. " Dan itu akan pecah. DAVID Malan: Jadi Anda benar-benar dapat melihat jika, lain jika, ide lain di sini. Ini sintaks hanya berbeda untuk mengekspresikan ide yang sama persis. MARIA: Tepat. Sekarang kita memiliki operator ternary kami. Operator sehingga terner memiliki tiga bagian- kondisi, sesuatu yang harus dilakukan jika Kondisi itu benar, dan kemudian sesuatu untuk dilakukan jika kondisi itu adalah palsu. Jadi Anda lihat, pada dasarnya, sintaks itu di sini. Kami memiliki tanda tanya, dan kemudian the-- apa yang kita sebut ini? DAVID Malan: Usus besar. MARIA: Colon. Terima kasih. Maaf. Jadi mari kita lihat contoh kita untuk melihat apakah kita dapat memahami this-- class_num == 50. Jadi di sini kita melihat Operator Boolean kami == yang membandingkan class_num variabel 50. Toko sehingga class_num integer. Dan jika integer yang sama 50, maka kita akan menyimpan "David Malan" dalam profesor tali. Jika jumlah kelas tidak sama 50, "tidak David Malan" akan menjadi profesor. DAVID Malan: Terima kasih. Dan ini tampaknya setara dengan apa, yang akan Anda katakan, pada pandangan pertama? MARIA: Bagi saya tampaknya seperti jika-lain pernyataan. DAVID Malan: Ya. Dan pada kenyataannya, ini adalah jenis dari cukup satu kapal, sehingga untuk berbicara, untuk menerapkan persis logika jika-lain tetapi melakukan segala sesuatu dalam satu langkah. MARIA: Tepat. Ya. Laporan Jadi jika-lain mungkin mengambil banyak ruang. Mereka mungkin terlalu panjang untuk sesuatu yang sederhana seperti ini. Jadi ini bisa sangat ringkas dan sangat bagus. Jadi sekarang kita akan melihat ke dalam mengeksekusi sesuatu lagi dan lagi, jadi memeriksa untuk kondisi beberapa kali dan kemudian terus melakukan sesuatu sementara kondisi itu benar. Jadi ini membawa kita baik ke loop sementara. Ke kiri, kita memiliki loop sementara pertama kami. Jadi sementara sesuatu itu benar, melakukan sesuatu lagi dan lagi. Jadi pastikan untuk melihat bahwa kami Kondisi di sini adalah divalidasi di atas. Sedangkan dengan loop-- kedua kami kita sebut bahwa do-while loop-- kita melakukan sesuatu, maka kita memeriksa kondisi. Dan jika kondisi itu terus untuk menjadi kenyataan, kita kembali dan melakukan hal itu lagi. Jadi perbedaan utama adalah di mana Kondisi tersebut akan diperiksa untuk. Dan kode tidak pernah mungkin dieksekusi jika kondisi tidak benar dengan loop sementara. Sedangkan dengan do-while lingkaran, kita memiliki kode yang selalu dijalankan minimal sekali. Dan kemudian sementara kondisi terus untuk menjadi kenyataan, kita bisa kembali dan beralih lagi ke dalam. Jadi, mengapa Anda pikir kita akan menggunakan lakukan-sementara loop atas loop sementara? Kanan. Jadi jika kita ingin mendorong pengguna untuk semacam masukan, jika kita ingin meminta mereka untuk memasukkan nama mereka, kami ingin setidaknya meminta mereka sekali. Dan jika mereka masuk nama itu, kami tidak akan meminta mereka lagi karena kita sudah tahu itu. Tetapi jika mereka tidak masuk nama mereka, atau jika mereka masukkan sesuatu yang jelas bukan nama, kita masih ingin melanjutkan meminta mereka pada nama mereka. DAVID Malan: Dan dalam kuliah kami memiliki satu seperti ini dengan mendapatkan int positif Misalnya, di mana tidak ada yang periksa pada awalnya karena Anda belum bahkan mendapat int. Jadi kami ingin melakukan this-- mendapatkan int dari user-- yang kemudian periksa, mungkin, lagi dan lagi dan lagi. MARIA: Tepat. Untuk loops-- OK. Untuk loop dapat memungkinkan kita untuk melakukan hampir hal yang sama persis, juga. Ini sebenarnya hal yang sama persis. Jadi tidak ada yang Anda dapat melakukan dengan untuk loop bahwa Anda tidak akan mampu hubungannya dengan loop sementara. Tapi untuk loop mungkin tampak sedikit Sedikit lebih rumit sintaksis karena mereka memiliki tiga bagian dalam apa yang sebelum hanya Kondisi dengan loop sementara. Jadi bagian pertama yang Anda laut, kiri-paling, kita memiliki "int kurcaci = 0" Jadi ini adalah di mana kita menginisialisasi variabel kita. Maka kita memiliki titik koma dan "kurcaci <7." Jadi ini adalah di mana keluar Kondisi sebenarnya. Jadi itulah yang akan kita miliki menempatkan hanya sementara yang loop-- "sementara kurcaci <7." Di sini, yang berlangsung di tengah kami untuk loop. Jadi "dwaves <7." Dan kemudian bagian terakhir kami adalah "kurcaci ++," yang mana kami memperbarui variabel kita. Jadi yang penting untuk menyadari bahwa ini adalah akan melalui ini untuk loop tujuh kali dan mengeksekusi tujuh kali. Jadi kita memiliki tujuh kurcaci, dan mereka semua akan mengatakan, "Aku di sini untuk membantu Anda, Snow White " karena mereka siap untuk membantu Putri Salju. Dengan sementara loop, kita akan melakukan inisialisasi dan memperbarui yang tidak di dalam kondisi tersebut, lagi, tapi baik sebelum atau di dalam loop sementara memastikan bahwa we-- karena kita selalu butuh bagian-bagian. Jadi untuk memastikan bahwa kita memiliki mereka, kita akan masih menambahkan mereka pada, tidak hanya di dalam kurung. DAVID Malan: Dan sehingga terlihat like-- di kuliah, misalnya, Saya hampir selalu menggunakan, seperti, i dan n dan variabel cukup membosankan. Sepertinya Anda dapat menggunakan lebih cerdik bernama variabel, juga. MARIA: Ya, itu benar-benar sangat bagus menggunakan variabel sedikit lebih deskriptif karena terutama jika orang lain adalah membaca code-- Anda mungkin kau grader atau jika Anda berkolaborasi dengan somebody-- Anda ingin memastikan bahwa mereka memahami apa yang Anda lakukan. OKE. Jadi ini adalah sesuatu yang sangat funky-- untuk loop di dalam loop. Saya tidak tahu apakah kita pernah melihat ini sebelumnya. Mungkin tidak. Tapi kita benar-benar dapat memiliki this-- sehingga loop bukan loop. Jadi tidak ada yang ingin berjalan mungkin saya melalui apa yang terjadi di sini? DAVID Malan: Aku akan mengambil bacokan. MARIA: Cool. DAVID Malan: OK. Jadi, spoiler-- kita ingin mencetak barang-barang itu di bawah sudut kanan sana. MARIA: Benar. Ya, ya. DAVID Malan: Jadi kita baru saja menempatkan bahwa contoh output ada. Jadi saya dapat menyimpulkan dari lingkaran paling atas yang Anda iterasi baris yang lingkaran terluar, sehingga untuk berbicara. Dan kau iterasi kolom dengan lingkaran terdalam. Dan intuitif, ini harus mudah-mudahan masuk akal karena dengan sifat setiap program yang telah kita lihat sebelumnya, printf, yang merupakan Fungsi kita gunakan, pada akhirnya, memiliki kemampuan untuk mencetak hal-hal keluar dasarnya baris demi baris. Seperti, setelah Anda dikeluarkan baris baru, ada ada dua kali lipat kembali dan mencetak sesuatu lebih tinggi di layar, setidaknya tidak menggunakan printf seperti ini. Dan dalam hal itu, itu membuat arti bahwa loop terluar harus mengacu pada baris karena untuk setiap diberikan baris, Anda akan ingin mencetak XXXXX, dan kemudian beralih ke baris berikutnya, XXXXX. Jadi baris datang pertama. Dan kemudian dalam setiap baris, Anda mencetak kolom. Jika Anda mencoba untuk melakukannya dengan berlawanan, itu akan mungkin tidak keluar sebagai Anda berniat. MARIA: Ya. Kami hanya tidak bisa kembali ke baris sebelumnya dengan printf. DAVID Malan: Dan apa yang menarik per chatting hari ini tentang ruang lingkup, sebenarnya, adalah bahwa baris adalah int yang dinyatakan dalam lingkaran paling atas. Tapi perhatikan bahwa masih dalam, sehingga untuk berbicara, kurung kurawal yang segera mengikuti, meskipun itu tidak secara teknis dalam mereka kurung kurawal. Jadi baris adalah dalam lingkup untuk keseluruhan dari potongan kode, baik di dalam dari luar untuk loop dan dalam batin untuk loop. Tapi sebaliknya, di mana adalah kolom dalam lingkup? Variabel kolom? Ya, hanya di dalam loop. Dan itu OK karena kita tidak mengakses itu di luar kurung kurawal nya. Semua yang kita lakukan adalah print out baru baris di akhir ada. Sehingga sebenarnya adalah OK. Jadi ini memiliki efek, sepertinya, melakukan tiga baris dan empat kolom. MARIA: Benar. Jadi pertama kita melalui baris pertama kami. Dan hanya dalam baris pertama kami, kami melakukan empat kolom dalam baris pertama. Jadi kami mencetak empat X. Dan kemudian kita bisa keluar untuk loop, karena kita sudah dicetak empat X. Dan kami mencetak baris baru. Dan kemudian kita pergi melalui proses yang sama untuk dua baris yang lebih untuk membuat total tiga. DAVID Malan: Dan itu perlu dicatat itu hanya sebuah artefak dari font, fakta bahwa output sampel tampak begitu jauh lebih tinggi, seolah-olah ada lagi baris dari kolom. Tapi itu hanya karena X adalah lebih tinggi daripada lebar. Itu semua yang terjadi di sana, ditambah ruang putih antara baris. MARIA: Benar. Keren. DAVID Malan: Baiklah. Jadi cepat melihat masalah menetapkan satu, mengambil pertanyaan, dan kemudian menunda? Baiklah. Jadi dalam masalah menetapkan satu, ada tiga tantangan utama, akhirnya. Tapi pertama, Anda akan menemukan bahwa masalah set spesifikasi, seperti halnya dengan banyak orang psets musim gugur ini, akan memandu Anda melalui beberapa latihan pemanasan, mengarahkan Anda keluar beberapa sumber Anda mungkin atau mungkin tidak melihat sudah. Misalnya, CS50 memiliki suite celana pendek, yang video pendek, tidak seperti ini, tapi itu adalah specific-- sangat topik mungkin lima menit, 10 menit panjang pada loop atau kondisi atau algoritma atau nanti lebih topik-topik lanjutan, juga. Dan kita umumnya menanamkan mereka menjadi masalah set sehingga siswa memiliki sumber daya dengan yang untuk meninjau materi yang mungkin memiliki sudah datang di kuliah atau bagian. Tapi cara ini itu lebih terfokus dan lebih banyak di ujung jari mereka. Kita juga cenderung untuk menanamkan dalam masalah menetapkan hal yang disebut penelusuran. Jadi hampir semua contoh yang saya lakukan di kuliah, di atas panggung di sini, kami juga telah ditembak pada kamera di maju lebih lambat, walkthrough lebih intim dengan saya di laptop saya kode itu, baris demi baris sehingga dalam kelas, kita akan sering skim melalui sesuatu atau seseorang akan menyisipkan dengan menjawab sebuah pertanyaan. Tapi itu tidak selalu tenggelam di untuk semua orang di penonton. Jadi, Anda akan menemukan kode penelusuran untuk sebagian besar contoh yang kita lakukan di sini di kuliah sehingga Anda dapat berjalan melalui itu pada kecepatan Anda sendiri dan mundur atau maju cepat atau melewatkan sama sekali, jika Anda ingin. Ada sering beberapa pertanyaan pemanasan yang meminta Anda untuk menyortir dari memperkuat materi ini dan pastikan bahwa Anda nyaman sebelum Anda melanjutkan dengan sisa pset tersebut. Dan kemudian, tentu saja, ada yang pset sendiri. Dan salah satu hal kami sangat sengaja lakukan di CS50 hampir setiap menarik atau intelektual menarik Langkah mekanis yang Anda mungkin harus melakukan hampir selalu sangat baik didokumentasikan. Selama istilah, kita akan mulai mengajukan pertanyaan retoris lebih seperti ingat bagaimana melakukan ini atau itu? Namun umumnya, Anda akan menemukan bahwa set masalah membuat Anda melalui mekanisme sesuatu sehingga itu, tantangan intelektual yang menarik pada akhirnya tersisa untuk Anda siswa. Dengan mengatakan bahwa, Zamyla, kepada siapa kami terus mengacu hari ini di kuliah, adalah salah satu staf lama kami anggota yang juga memegang penelusuran pada masalah pset tertentu seperti mario dan serakah, meskipun tidak air tahun ini. Dan itu pada mereka walkthrough bahwa dia sering menawarkan beberapa tips dan trik untuk bagaimana untuk melanjutkan, tidak pernah memberitahu Anda apa yang harus dilakukan, tapi rather-- seperti kondisi, jika Anda will-- memberikan Anda setidaknya beberapa ide sehingga terserah Anda, akhirnya, untuk memutuskan bagaimana pendekatan mereka. MARIA: Semacam seperti tingkat tinggi pemahaman logika apa kami meminta Anda untuk melakukan. DAVID Malan: Tepat. Dan, pada kenyataannya, Zamyla ini penelusuran dimaksudkan untuk menjawab sering pertanyaan yang ditanyakan dari mana apakah saya mulai, terutama ketika ini spesifikasi panjang sedikit menakutkan mengingat semua teks dan citra yang mereka miliki di dalamnya. Jadi water.c, Anda akan menemukan setelah Anda selesai itu, sebenarnya relatif mudah. Benar-benar adalah a bunch Anda akan menggedor kepala Anda ke dinding mencoba untuk mencari tahu mengapa hal itu tidak kompilasi atau mengapa itu tidak berjalan dengan benar. Tapi setelah Anda selesai dengan itu dan setelah Anda sudah menghabiskan beberapa waktu gulat dengan bug yang mungkin Anda miliki, Anda akan menemukan bahwa itu program yang sangat singkat. Hal ini dapat dilakukan hanya dalam beberapa baris kode, yang sebagian besar kita lihat di sini di kuliah sudah, jika Anda merakit blok bangunan yang tepat. Dan seperti yang kita sarankan di sini, itu akan meminta Anda untuk menentukan berapa menit seseorang mengambil mandi di kampus. Kita tentukan di masalah mengatur laju aliran air di, seperti, aliran rendah shower kepala, seperti klip Seinfeld kita lihat kemarin atau kebalikan dari padanya. Dan kemudian Anda hanya untuk melakukan sedikit matematika, really-- aritmatika menggunakan C untuk memberitahu kita berapa banyak, kira-kira, botol air adalah bahwa setara dengan jika kita mengambil n-menit mandi. Sekarang, di mario.c, ini akan menjadi program sedikit lebih panjang. Ini masih tidak akan selama ini. Hanya beberapa baris lebih lama dari water.c. Tapi itu akan menjadi kesempatan untuk menciptakan sekolah tua Mario piramida dari Super Mario Saudara atau tindak-on. Ini tidak akan terlihat lebih cantik atau berwarna-warni seperti yang di sana. Kami hanya akan menggunakan hashtags sedikit seperti yang kita miliki di sini di layar menggunakan teks ASCII. Tapi itu akan mendekati ide yang sama. Dan itu akan menjadi latihan yang pada pandangan pertama tampaknya cukup simple-- hanya mencetak piramida sederhana. Tapi ada beberapa karakteristik di sini yang menarik. Perhatikan bahwa tepi paling kanan dari piramida sebenarnya memiliki lebar dua. Jadi ada dua yang sama kolom tinggi, yang membuat itu memerlukan sedikit sedikit pemikiran untuk membuat Pastikan Anda mendapatkan tepat, seperti lawan hanya sempurna miring garis. Jadi itu sedikit kasus sudut tapi cocok dengan permainan yang sebenarnya. Dan itu juga non-jelas pada awalnya sekilas bagaimana mencetak spasi. Jadi ketika saya melihat contoh output sini- dan itu juga di spec-- itu jenis terlihat seperti persegi panjang, tapi diagonal dari persegi panjang telah dipotong, dan itu hanya ruang putih, sehingga untuk berbicara. Dan jadi sering diajukan pertanyaan di sini selalu, baik, bagaimana cara memindahkan hashtags ke kanan? Atau bagaimana cara mencetak ruang kosong? Dan itu sebenarnya lebih mudah daripada kebanyakan siswa berpikir. Kanan? Anda dapat perkiraan secara visual dengan hanya memukul spasi sekali atau dua kali atau tiga kali. Dan jadi meskipun dengan printf kita hampir selalu mencetak string atau int atau kata seperti "Halo, dunia "atau serangkaian kata-kata, Anda juga dapat hanya mencetak kutipan, ruang, tanda kutip. Dan yang benar-benar akan memberikan Anda ruang putih di sana. Jadi ingatlah bahwa dalam pikiran dan tidak overthink ini. Anda benar-benar harus memutuskan baris demi baris demi baris, tidak seperti contoh Anda sebuah saat yang lalu, berapa banyak dari mereka kolom harus spasi putih dan berapa banyak dari mereka harus hashtags. Ini akan mengambil sedikit waktu, tapi itu akhirnya teka-teki logika macam. MARIA: Ya. Tapi logika akan baris demi baris akan menjadi sangat berguna di sini. DAVID Malan: Ya. Saya pikir kode contoh Anda gave-- bahkan meskipun itu bukan program lengkap. Anda masih perlu int dan utama demi hukum dan # include stdio.h, banyak hal-hal dari kuliah. Tapi blok bangunan tampaknya berada di sana. Dan kemudian terakhir adalah sesuatu sedikit lebih algoritmik. Jadi ternyata bahwa setiap kali Anda pergi ke CVS atau toko dan seseorang tangan Anda di tagihan kasir atau koin sebagai perubahan, ternyata bahwa mereka, manusia, apakah mereka tahu atau tidak, mungkin menggunakan apa disebut algoritma serakah, dimana jika Anda berutang, mengatakan, $ 21 dalam perubahan karena untuk beberapa alasan Anda membeli sesuatu yang sangat murah dengan tagihan yang sangat besar di CVS, itu akan benar-benar menjengkelkan jika kasir memberi Anda 21 single atau, lebih buruk namun, seluruh banyak koin. Sebaliknya, apa yang orang yang wajar adalah mungkin akan lakukan adalah mereka akan untuk ambil $ 20- dan kemudian $ 1-tagihan, dan tangan Anda hanya dua tagihan dalam kasus itu. MARIA: Jadi mereka berusaha untuk meminimalkan perubahan yang mereka berikan kembali kepada Anda. DAVID Malan: Tepat. Dan kesepakatan yang sama dengan koin, juga. Jika Anda berutang, mengatakan, $ 0,50, mudah-mudahan Anda tidak ingin 50 sen. Anda malah ingin dua perempat, misalnya. Sekarang, ini tidak menganggap bahwa kasir memiliki cukup setiap denominasi yang ia mungkin ingin memberikan. Tapi kita memungkinkan Anda untuk menganggap sebanyak dalam masalah. Dan tujuan, akhirnya, adalah untuk mengimplementasikan dalam kode C algoritma serakah. Jadi pengguna diijinkan ketik berapa banyak mengubah dia berutang dengan dolar dan sen, beberapa jenis floating point nilai mungkin. Dan kemudian Anda harus melakukan matematika dan mengetahui algorithmically, baik, berapa banyak koin yang bisa saya berikan Anda minimal untuk memberikan tepat jumlah perubahan. Tapi ada akan menjadi beberapa bagian yang aneh disini, kan? Seperti ada keseluruhan masalah ketidaktepatan. MARIA: Tepat. Titik sehingga floating nilai memiliki ketidaktepatan. Apakah kita berbicara tentang hal ini dalam kuliah ini? DAVID Malan: Kami melakukan terakhir kali di kuliah. Kami berbicara tentang ketidaktepatan. Dan Anda tidak ingin untuk menipu pengguna berapa banyak perubahan ia berutang. Dan walkthrough, di masalah set spesifikasi, memberikan beberapa pemikiran, akhirnya, untuk bagaimana Anda dapat mengurangi mereka ketidaktepatan kesalahan, berpotensi. Hal ini dapat dihindari, tentu, untuk input yang kita bicarakan. Dan, pada kenyataannya, pennies-- mungkin kita akan menunda untuk Zamyla, Saya pikir, untuk trik ada. Jadi pada akhirnya, Anda akan menemukan perkembangan masalah minggu ini, yang pertama cukup kecil, kemudian media, kemudian sedikit lebih besar. Tapi semua dari mereka menggunakan bangunan blok dari minggu terakhir ini, dari supersection ini, Masalah mengatur spesifikasi menempatkan Anda di sumber yang tak terhitung banyaknya. Tapi tetap, jika sama sekali berjuang, terutama di kalangan mereka yang kurang nyaman dengan tidak memiliki latar belakang sebelumnya, datang ke kantor jam pada hari Senin dan Selasa dan Rabu dan Kamis. Pergi ke CS50 Diskusikan melalui website saja yang, melalui yang Anda dapat chatting dengan staf dan teman sekelas. Tapi pada akhirnya, saya pikir Saran terbaik hanya mulai awal. Ini bukan jenis kelas yang Anda harus mulai psets Rabu malam, atau lebih buruk Kamis malam. MARIA: Saran terbaik saya adalah sudah mulai hari Senin. DAVID Malan: Senin. Jadi, jika Anda belum mulai already-- ada. Tetapi bahkan jika tidak hari Senin, maka Selasa. Lebih cepat lebih baik. Dan itulah alasan yang Tentu saja memiliki begitu banyak hari akhir adalah untuk memberikan sedikit tekanan psikologis untuk memulai sebelumnya tapi masih membiarkan hal tergelincir ketika hal-hal memakan waktu lebih lama dari yang Anda harapkan. MARIA: Dan Anda ingin menggunakan jam kantor sebanyak yang Anda bisa. DAVID Malan: Ada pertanyaan? Baiklah. Nah, kenapa tidak kita menunda sini?