[Bermain muzik] DAVID MALAN: Hello, semua orang. Ini adalah supersection CS50. Seksyen yang ditetapkan tidak akan mula untuk satu minggu lagi. Dan sehingga hari ini, saya di sini with-- MARIA: Maria. DAVID MALAN: --to sebenarnya kita lihat pada masalah menetapkan satu, kursus ini minggu pertama material, mendapatkan anda berorientasikan CS50 IDE, sedikit Linux, sistem operasi itu berjalan pada IDE, serta lihat beberapa peralihan dari Scratch kepada C terkemuka sehingga masalah menetapkan satu. Jadi tanpa berlengah-lengah lagi, dalam masalah menetapkan satu, anda akan menjadi diperkenalkan kepada CS50 IDE, yang adalah pengaturcaraan berasaskan web ini alam sekitar yang kita gunakan untuk untuk menulis program. Ia telah direka untuk kelihatan sangat mengingatkan komputer biasa sistem menjalankan operasi yang sistem yang dikenali sebagai Linux. Tetapi ia adalah dalam awan yang dipanggil, yang bermaksud semua orang dalam kelas sebenarnya boleh mempunyai masing-masing akaun sendiri dan menggunakannya, juga. Jadi kebanyakan anda mungkin tidak pernah menggunakan persekitaran Linux sebelum atau mungkin walaupun persekitaran baris arahan. Dan baris arahan persekitaran adalah berbeza. Itu semua teks. Ini semua arahan papan kekunci. Dan ia tidak ber-tetikus ria, tiada ikon, tiada tingkap dialog, tidak ada menu. Ia adalah semata-mata teks. Jadi pada mulanya, ia jenis daripada terasa seperti langkah ke belakang dari segi kecanggihan. Tetapi ia berakhir menjadi banyak lebih kuat, sudah tentu, untuk seorang saintis komputer, akhirnya. Jadi mari kita lihat. Ya, Allah di CS50.io, melalui yang anda boleh log masuk ke CS50 IDE. Dan sama seperti di Awal, ada tiga bidang utama untuk skrin ini. Sehingga pada sebelah kiri tangan, kami mempunyai apa yang akan menjadi pelayar fail. Dan ada di dalam folder ini bahagian, yang sekarang kosong kerana saya tidak perlu lagi ambil semua saya fail sebelum supersection. Dan di mana kita akan menyimpan fail C yang kita menulis. Di bahagian atas kanan, kami mempunyai tempat di mana semua kod kami yang berlaku untuk mendapatkan bertulis. Dan sesungguhnya, jika saya klik ditambah ini, ini akan membiarkan saya pilih Fail Baru. Dan di sini saya boleh mula menulis kod C atau, benar-benar, apa-apa bilangan bahasa lain. Dan kemudian di bahagian bawah di mana ia kata jharvard @ ide50-- dan anda akan mengatakan sesuatu yang sedikit different-- apa yang ini dipanggil? Tetingkap terminal. Yeah. Jadi tetingkap terminal adalah garis yang dipanggil arahan antara muka melalui mana anda boleh berinteraksi dengan sistem operasi asas. Dan sekarang, kita akan menggunakan sangat sedikit this-- hanya untuk menyusun, untuk melihat mesej ralat yang kita lihat, dan untuk menjalankan program-program kami. Tetapi akhirnya, kita akan untuk berbuat demikian lebih, juga. Dan anda juga boleh memasang perisian dan mentadbir ruang kerja anda dalam CS50 IDE, juga. Tetapi lebih kepada yang suatu masa yang lain. Oleh itu, marilah kita pergi ke hadapan dan menulis satu program yang sangat mudah hanya pergi melalui memanaskan badan hello.c, yang mungkin program yang paling mudah kita boleh menulis. Saya telah membuka tab baru. Saya akan pergi ke depan dan mengatakan termasuk io.h. standard Kemudian int utama (tidak sah). Dan kemudian printf ("hello, dunia" garis miring n, quote dekat, kurungan dekat, dan koma bertitik. Baiklah. Jadi kini melihat tetingkap saya ialah tanpa tajuk. Jadi, saya dengan cepat akan untuk naik ke Fail, Simpan. Dan ia adalah penting bahawa Saya menyeru ini tidak "hello." Jadi satu kesilapan yang sangat biasa, terutama dalam masalah menetapkan satu, adalah untuk sengaja hanya memanggil anda program "air" atau "tamak" atau "Mario" atau "kredit" atau sebagainya. Tetapi anda sebenarnya ingin pastikan anda mempunyai sambungan fail kerana ini adalah satu-satunya cara yang penyusun dan juga editor kod di tahu bahawa anda berada sebenarnya menulis kod C. Jadi biarlah saya pergi ke hadapan dan klik Simpan. Dan kini, juga, apa CS50 IDE telah dilakukan untuk kita adalah ia juga sintaks menekankan segala-galanya. Jadi ia membuat segala sesuatu yang sangat berwarna-warni. Dan seluruh maksud yang tidak berfungsi. Ia hanya untuk menarik mata saya kepada keping yang berbeza dari segi konsep program ini. Oleh itu, marilah kita pergi ke hadapan dan menyusun ini. Dan saya boleh menyusun ini dalam beberapa cara. Dan pada minggu satu, cara lama-sekolah kita lakukan ia adalah betul-betul di arahan garis ini-- "hello.c dilafaz." Dan kemudian saya tekan Enter. Dan apa-apa seolah-olah berlaku dalam tetingkap terminal. Tetapi apa yang melakukan perubahan dalam IDE? Di mana, sekali lagi, IDE hanya bermakna Persekitaran Pembangunan Bersepadu. Ia adalah cara yang mewah untuk mengatakan pembangunan bersepadu ini persekitaran untuk membangunkan perisian. Jadi apa yang berubah dalam UI? Apa yang anda notis itu berbeza, Maria? MARIA: Saya melihat sesuatu bawah IDE50 folder di sini. DAVID MALAN: Ya. Jadi di sini, bukan sahaja adakah kita mempunyai "hello.c." Kami juga mempunyai "a.out," yang jenis nama bisu untuk program. Tetapi sesungguhnya, ia adalah nama lalai untuk program apabila anda hanya menyusun kod anda dan tidak memberitahu pengkompil apa fail untuk output. Jadi, jika saya mahu menjalankan ini, saya perlu memberitahu compiler-- yang atau sebaliknya, saya perlu memberitahu ruang kerja yang saya mahu menjalankan program yang dipanggil "a.out." Enter. Dan ada "hello, dunia. "kini" ./ ". sebenarnya penting. Walaupun biasanya kita hanya mencatat nama orang-arahan, apabila ia adalah satu program yang anda telah bertulis, anda tidak mahu untuk mengatakan "./" kerana itu jelas memberitahu Linux yang anda mahu menjalankan program yang dipanggil "a.out" itu dalam hal ini, di mana titik bermakna direktori ini bahawa saya kini dalam, yang berlaku sebagai dipanggil ruang kerja, "a.out. Kerana jika saya hanya berkata "a.out" Masuklah, Saya akan mendapat "a.out arahan tidak dijumpai "kerana computer-- kerana saya mencipta "a.out;" ia tidak datang dengan computer-- yang tidak tahu di mana untuk melihat untuk itu, walaupun ia betul di bawah hidung saya, jadi untuk bercakap. OKEY. Oleh itu, kita boleh menukar ini kepada menjadi "dilafaz-o hello hello.c." Dan jika saya tekan Enter, apa program ini berlaku kepada output untuk saya? Apa nama fail? Ya, di belakang. Betul. "Hello." Jadi "hello" akan menjadi nama program yang kerana kita telah menggunakan apa yang dipanggil garis hujah perintah, yang hanya satu cara untuk mengubah tingkah laku pengkompil untuk benar-benar output nama fail tertentu. Dan sesungguhnya, jika saya zum keluar dan melihat di sini, kini saya mempunyai bukan sahaja "a.out" dan "hello.c" tetapi juga "hello," juga. Jadi sekarang saya boleh lakukan "./hello," Enter. Dan ada "hello, dunia." Tetapi lastly-- dan ini kini akan konvensyen kita gunakan di seluruh semester, typically-- adalah anda juga boleh hanya mengatakan "membuat hello." Dan sesungguhnya, ia berkata ia terpulang setakat ini kerana ia telah wujud. Biar saya pergi ke hadapan dan keluarkan, dengan arahan rm, kedua-dua "a.out" - dan berkata "keluarkan a.out fail biasa?" Yang hanya bermakna, adakah anda pasti anda mahu memadamnya? Saya akan mengatakan ya. Dan kemudian saya akan keluarkan "hello" tetapi tidak "hello.c." Saya akan berkata "ya" dengan jelas, tetapi "y" adalah mencukupi, juga. Dan kini melihat jika saya menaip ls-- yang, ingat, bermakna list-- ia menyenaraikan semua fail-fail di dalam folder saya. Dan sesungguhnya, jika saya zum keluar dan melihat sebelah kiri, ia mengesahkan bahawa apa yang di dalam folder ini, walaupun walaupun ia dilabelkan sebagai IDE50 di sini dan tidak ruang kerja, ia hanya "hello.c." Jadi sekarang turun di sini, jika saya jangan "membuat hello" Masuklah, sekarang saya lihat arahan yang lebih lama tetapi arahan yang lebih canggih yang akan berguna dalam minggu-minggu akan datang. Dan sekarang saya boleh berkata "./hello." Jadi mari kita mengambil lawatan cepat beberapa Linux yang lain menyuruh. Mengapa tidak kita mengambil langkah ke belakang dan benar-benar melihat C lebih secara amnya, peralihan dari Scratch kepada C, dan kemudian membuat kesimpulan dengan wajah yang pada masalah pertama ditetapkan dalam C. Baiklah. Jadi, saya akan pergi ke hadapan dan hanya bersih sehingga ruang kerja saya dengan kawalan-L sahaja untuk menjaga skrin kemas. Tetapi yang tidak mempunyai fungsi memberi kesan sebaliknya. Ingat bahawa kita telah melihat beberapa arahan sekarang. Oleh itu, kita telah lihat dilafaz, yang umumnya anda tidak perlu melaksanakan secara manual lagi. Kami sebaliknya akan menggunakan make. Tetapi kita juga menyaksikan ls, yang menunjukkan senarai fail-fail dalam direktori saya. Dan kini mengapa there-- ada yang dua fail sekarang, "hello" dan "hello.c." Kenapa ada bintang atau asterisk selepas "hello"? Apa yang menandakan, berdasarkan kepada apa yang kita lihat dalam satu minggu? Apa pendapat kamu? Apakah bintang menandakan? MARIA: bagi- program "hello"? DAVID MALAN: "Hello *". Yeah. Oh, ya? Oh, boleh laku. Betul. Ini bermakna bahawa "hello" boleh laksana. Maka sesungguhnya, itulah sebabnya Yang boleh saya lakukan "./hello." Baiklah. Jadi apa lagi yang boleh saya lakukan di sini? Nah, ternyata saya boleh juga mewujudkan direktori. Jadi biarlah saya pergi ke hadapan dan membuat, misalnya, "pset1" direktori. Dan spesifikasi masalah menetapkan akan anda lakukan betul-betul ini, supaya anda tidak perlu ingat hari ini. Tetapi "mkdir pset1" seolah-olah tidak mempunyai kesan. Tetapi sekali lagi, tiada mesej ralat secara amnya adalah satu perkara yang baik. Jadi, jika saya menaip "ls" sekarang-- ah, sekarang Saya mempunyai fail boleh laku yang dikenali sebagai "hello," fail C dipanggil "hello.c." Dan kemudian slash belakang, jadi untuk berkata-kata, bermakna bahawa ini adalah direktori. Jadi sesungguhnya, sekarang saya mahu membukanya. Dan saya tidak klik dua kali di atasnya seperti dalam GUI, persekitaran grafik. Saya bukan mengatakan "cd pset1." Enter. Apa yang menarik seolah-olah mempunyai berlaku kecuali segera kecil saya sini-- ini adalah cara Linux mengingatkan saya di mana saya, jadi apa folder terbuka. Ia hanya memberitahu saya jelas berbanding dengan grafik. Dan jika saya taip "ls," mengapa saya melihat satu lagi mendorong serta-merta, yang anda fikir, apabila saya menyenaraikan kandungan pset1? MARIA: Anda mungkin tidak mempunyai apa-apa di sana. DAVID MALAN: Ya. Sebab itu kita tidak mempunyai jelas mencipta apa-apa di sana kerana saya baru sahaja mencipta direktori. Sekarang, jika saya mahu mencipta file-- untuk Contohnya, saya boleh mencipta fail baru. Dan kemudian saya boleh pergi ke Simpan dan simpan sebagai, seperti, "mario.c" jika anda lakukan edisi taraf pset satu. Dan kemudian, seperti mana-mana Mac atau PC, hanya memilih folder "pset1, Simpan. Dan kini fail kosong. Tetapi mari kita zum masuk semula untuk kali kedua. Mari kita buat ls di sini. Sekarang kita lihat "mario.c". Jadi ada beberapa arahan lain yang adalah bernilai dengan mengambil lebih time-- jelas, atau Kawalan-L adalah apa yang saya telah telah memukul; mkdir yang kami telah lihat; rm yang kami telah lihat, dan juga, yang untuk mengeluarkan atau memadam fail. Berhati-hati anda boleh also-- dan jika anda melihat di tutorial dalam talian, anda akan rm -rf adalah cara yang sangat biasa untuk mengatakan memadam folder yang mempunyai barangan di dalamnya. Hanya super, super-hati. -rf bermakna secara rekursif memadam apa sahaja anda cuba untuk memadam dan secara paksa memadamnya. Jadi cara rekursi jika ia folder dengan folder dengan folder dengan folder, memadam semua daripada mereka. Dan secara paksa bermakna tidak walaupun bertanya kepada saya ya atau tidak, aku pasti? Jadi ia adalah cara yang super berbahaya memotong banyak barang dengan cepat. Tetapi beware-- terlalu kerap melakukan suatu berani pelajar tidak sengaja memadam, berkata, pset satu, misalnya. MARIA: Dan jika mereka hanya melakukan -r, mereka akan bertanya kepada mereka tentang setiap fail. DAVID MALAN: Yang sederhana menjengkelkan. MARIA: Ya. DAVID MALAN: Jadi sebab itu begitu ramai di antara kita, diri termasuk, Aku di dalam tabiat menggunakan -rf. Tetapi ia adalah berbahaya. Jadi berhati-hati pembeli. Dan kemudian mv adalah jenis menarik dinamakan. Jadi ini adalah arahan langkah itu, yang berasa pelik sedikit kerana anda memang boleh menggunakannya untuk memindahkan fail dari satu tempat ke tempat lain. Sebagai contoh, katakan bahawa saya sehingga merosakkan. Katakan saya buat fail baru untuk pset. Dan saya disimpan sebagai "greedy.c." Tetapi kira saya sengaja simpan dalam IDE50-- jadi dalam ruang kerja saya sendiri dan tidak dalam pset1. Anda boleh melihat sebanyak di sebelah kiri atas. Ada "greedy.c." Dan ada beberapa penyelesaian. Jadi satu, saya boleh menggunakan super cara yang mesra pengguna hanya mengheret dan menjatuhkan. Dan itu akan benar-benar menyelesaikan masalah ini. Tetapi hari ini, kita cuba untuk melihat cara-cara yang lebih sukar difahami tetapi berkuasa untuk berbuat demikian. Jadi biarlah saya mengambil "ls" di pset1. Dan saya hanya melihat "mario.c." Biar saya pergi ke hadapan dan melakukan "cd ..". Jadi CD lagi adalah direktori perubahan. ".." Ertinya apa, walaupun? Kali terakhir saya berkata "cd pset1 "untuk pergi ke dalam pset1. Oleh itu, apabila saya berkata "cd ..", apa yang saya buat? Ke belakang. Yeah. Jadi ia akan kepada ibu bapa kononnya. Pergi satu tahap sehingga, seperti keluar daripada folder. Jadi Enter. Dan sesungguhnya, melihat apa yang berlaku. Ia bergerak saya hanya ke dalam ruang kerja dan bukannya daripada ke dalam pset1, yang berada dalam ruang kerja. Dan sekarang saya menaip "ls", ada sejumlah besar barangan. Dalam ada "greedy.c". Jadi sekarang mari saya menggunakan mv untuk benar-benar bergerak "greedy.c" ke dalam pset1. Dan begitu banyak arahan Linux bekerja betul-betul seperti ini. Mereka tidak mengambil hujah-hujah atau mereka mengambil satu hujah atau mereka mengambil dua baris perintah hujah-hujah dan sebagainya. Dan dalam kes ini, ia adalah benar-benar melakukan apa yang ia berkata, walaupun succinctly-- bergerak greedy.c ke pset1. Enter. Tiada apa yang berlaku. Tetapi jika saya melakukan ls lagi, tamak hilang. Dan jika saya melakukan "cd pset1", Masukkan, dan kemudian ls lagi, kini ia di tempat yang betul. Sebagai mengetepikan, jika beberapa reason-- terutamanya jika anda mempunyai sekejap sambungan rangkaian atau anda berjalan di sekitar kampus dengan penutup komputer riba anda ditutup dan kemudian membukanya lagi dan ruang kerja anda kelihatan agak tidak segerak, ada masalah besar. Sila segarkan semula pelayar anda tingkap, dan yang sepatutnya menyegerakkan semula supaya kiri sebelah pelayar fail kelihatan betul-betul seperti tetingkap terminal. Tidak perlu bimbang. Apabila ragu-ragu, muat semula halaman, jadi Selama anda telah menyimpan fail sudah. OKEY. Jadi mv juga boleh digunakan untuk menamakan semula fail. Dan mari kita lihat pada arahan akhir ini di sini. Jadi suppose-- dan ini adalah super biasa, juga, sejak awal. Sesetengah pelajar kadang-kadang membuat fail dipanggil, mari kita iaitu- apa yang satu sama lain? Like "WATER.C." Jadi saya hanya akan menjerit, untuk tanpa sebab, dalam semua topi. Tetapi ini bukan satu- nama betul untuk fail jika hanya kerana masalah kita menetapkan spesifikasi tidak memberitahu anda untuk menyimpan fail sebagai semua topi "WATER.C." Sebaliknya, kita mengharapkan "water.c" dalam huruf kecil. Dan, sebenarnya, ini adalah kerana check50 bermasalah, program anda akan seorang dalam masalah menetapkan satu yang menguji secara automatik ketepatan kod anda akan menjerit pada anda jika ia tidak boleh mencari "water.c" dalam semua huruf kecil. Jadi saya perlu untuk menetapkan ini. Banyak cara yang berbeza untuk melakukan ini, di mana yang pertama adalah untuk Mengawal klik atau klik kanan nama fail dan hanya menukar Namakan semula. Betul-betul halus untuk berbuat demikian. Tetapi sekali lagi, hari ini, mari kita melakukannya sedikit pelamun. Mari kita gunakan mv untuk menukar "WATER.C" kepada "water.c." Oleh itu, anda juga boleh menggunakan hujah pertama untuk menukar nama kepada hujah kedua jika hujah kedua tidak, adalah dalam Malah, folder atau nama direktori. Baiklah. Dan akhir sekali, yang trick-- sedikit jadi saya dalam direktori ruang kerja saya pada masa ini. Jika saya mahu masuk ke dalam pset satu, Saya pasti boleh menaip "cd pset1." Tetapi ia begitu membosankan untuk menaip "pset1" atau lagi nama fail atau nama direktori masih. Jadi sangat sering dalam Linux, apa anda boleh lakukan ialah mula menaip "PSE" dan hanya bosan, tekan Tab, dan membiarkan komputer angka ia keluar untuk anda. Super membantu untuk masuk ke dalam tabiat itu. Tangkapan hanya adalah jika anda mempunyai berbilang fail atau folder bermula dengan huruf "p" atau "ps," anda mungkin mempunyai menaip beberapa lagi sebelum komputer tahu apa yang perlu dilakukan. MARIA: Kami suka jalan pintas. DAVID MALAN: Ini akan menjimatkan banyak masa. Dan juga, seperti yang kita katakan dalam kuliah, anda boleh menatal ke atas dalam sejarah, naik dan turun, untuk mencari baru-baru ini dilaksanakan arahan, juga. Baiklah. Oleh sebab itu, mari kita mengubah perhatian kita kembali untuk satu program yang mudah, hello dunia. Oleh itu, kita telah mengumpulkan ini betul-betul. Dan sekarang mengapa kita tidak mengambil lihat pada jenis data dan kemudian beralih dari beberapa blok calar sepadan dengan C. MARIA: Awesome. Jadi sekarang bahawa anda telah memulakan menulis program dalam C, kita akan mula bercakap tentang jenis data dan pembolehubah. Jadi beberapa jenis data yang anda mahu tahu bermula dari sekarang adalah orang-orang yang diserlahkan dengan warna biru. Jadi kita mempunyai int pertama, yang bermaksud integer. Dan yang memegang integer, kerana anda mungkin mempunyai guessed-- jadi 1, 2, 3, dan apa-apa bilangan bulat lain yang boleh anda fikirkan. DAVID MALAN: Dan juga negatif. MARIA: Dan juga orang-orang yang negatif, yep. Dan 0. Kemudian kita mempunyai kereta berhias, yang terapung nombor mata. Jadi itu sahaja nombor nyata yang mempunyai titik perpuluhan. Jadi 5.0, 5.2, dan lebih-lebih angka selepas titik perpuluhan, juga, dan juga yang negatif. Kemudian kita mempunyai char yang bersifat. Jadi saya fikir kita bercakap tentang ini hari ini dalam kuliah. Tetapi kita mempunyai surat, untuk example-- A, B, C-- yang boleh disimpan sebagai char. Tetapi kita mempunyai lebih banyak simbol-simbol yang boleh disimpan sebagai char. Dan orang-orang disimpan sebagai ASCII. Dan kemudian kita mempunyai bool, yang Booleans. Dan orang-orang menilai kepada Benar atau Palsu atau 1 dan 0, masing-masing. DAVID MALAN: Dan ingat bahawa bool datang dari perpustakaan CS50. Jadi ia tidak dibina ke dalam C, tetapi ia sangat berguna mempunyai tanggapan yang benar dan palsu. Dan walaupun anda mungkin think-- fakta yang menyeronokkan. Bool A teknikal memerlukan berapa banyak bit, benar-benar, untuk mewakili Benar berbanding Palsu? Berapa banyak bit yang anda fikir anda perlu, maksima? Ya, hanya satu. Jadi ternyata bahawa C tidak boleh memberikan anda hanya satu bit. Unit terkecil langkah anda boleh mendapatkan adalah lapan. Jadi ia adalah membazir sedikit mereka anda berada menggunakan bait keseluruhan, atau lapan bit, untuk mewakili Benar atau Palsu. Tetapi itu hanya jalan itu dilaksanakan di C oleh perpustakaan CS50. MARIA: Kemudian orang-orang yang kita tidak akan bercakap kira-kira sebagai secara meluas hak sekarang-- dua kali, itu yang terapung lebih besar. Long panjang dan pendek juga untuk integer. DAVID MALAN: Sesungguhnya. Dalam edisi penggodam daripada pset satu, kita sebenarnya menggunakan panjang panjang. Tetapi untuk edisi standard, ia tidak perlu. MARIA: Cool. OKEY. Jadi operators-- anda harus mungkin biasa dengan kebanyakan. Selain itu, +; penolakan, -. Untuk pendaraban, kami mempunyai * itu. Jadi bukan X yang kita biasanya menggunakan. Bahagian, kami mempunyai garis sendeng terbalik itu. Dan modulo adalah pengendali terakhir kami bahawa kita akan bercakap tentang sekarang. Ia merupakan satu pengendali yang membolehkan kita untuk mengambil baki bahagian. Jadi, jika kita mempunyai 4% 2, 4 dibahagikan oleh 2 adalah 2 dengan baki 0. Jadi 4% 2 adalah 0. 4% 3 adalah 1. 4% 5 adalah 4, seperti yang anda boleh meneka. Dan ingatlah ketika menggunakan semua ini operator untuk menggunakan kaedah-kaedah PEMDAS. DAVID MALAN: Jadi perlu jelas, jika anda melakukan 4% 2, mengapa bahawa 0, betul-betul? MARIA: Kerana 4 dibahagikan dengan 2 adalah 2 dengan baki 0. Jadi modulo memberikan kita baki bahawa sebagai bertentangan dengan hasil daripada bahagian ini. DAVID MALAN: Dan sesungguhnya, apa yang kita akan mendapati ini berguna adalah bahawa dalam beberapa masalah itu bukan semestinya satu, jika anda mahu mempunyai kesan menyekat diri kepada pelbagai nombor seperti 0 melalui sesuatu, anda boleh menggunakan modulo untuk membungkus lebih awal daripada seperti 2000000000 atau nilai 4 bilion yang kita telah bercakap tentang dalam kuliah. MARIA: Ya. Dan walaupun dalam "tamak" kita mungkin. DAVID MALAN: Ya, dalam masalah menetapkan satu, juga. MARIA: Ya, bagus. DAVID MALAN: tanda-tanda yang baik. MARIA: Maaf. Boolean expressions-- supaya untuk operator Boolean, kita akan bercakap tentang semua itu ini anda lihat di sini. Jadi sekarang, kita mempunyai dua tanda-tanda yang sama disenaraikan untuk sama rata. Jadi mereka adalah untuk perbandingan. Setakat ini, kami hanya melihat satu tanda sama. Itulah apabila kita menetapkan nilai kepada pembolehubah. Jadi, jika kita telah lihat int n = 5, maka kami telah diberikan 5 hingga n pembolehubah. Tetapi jika kita mahu menggunakan == untuk perbandingan, kita boleh menyemak jika n == 5. Dan jika n == 5, maka itulah yang benar. Pengendali Jadi Boolean membolehkan kita, pada dasarnya, untuk menilai Boolean ungkapan kepada Benar atau Palsu. Jadi tidak equals-- kita mempunyai tanda seru dan sama rata. Oleh itu, kita juga boleh menyemak jika n tidak sama 5-- jadi n! = 5. Kurang daripada, kurang daripada atau sama dengan, lebih besar daripada, lebih besar daripada atau sama dengan, dan kemudian kita mempunyai logik AND dan OR logik. Dan orang-orang membolehkan kita untuk menilai pelbagai ungkapan Boolean bersama-sama pada dasarnya bersatu sebagai satu ungkapan Boolean keseluruhan. Jadi, jika kita hendak mencari nombor, berkata, yang lebih besar daripada 5 tetapi kurang daripada 15 pada masa yang sama, kita akan menggunakan logik DAN pengendali untuk melihat jika n ialah lebih besar daripada 5 && n kurang daripada 15. DAVID MALAN: Dan di sini, juga, ia benar-benar mudah awal untuk sengaja menggunakan hanya satu Ampersand tunggal atau bar menegak tunggal. Dan mudah-mudahan pengkompil akan menjerit pada anda kerana mereka benar-benar mempunyai maksud yang sangat berbeza. Bagi mereka yang ingin tahu, mereka digunakan untuk operasi bitwise, beroperasi pada bit individu. Tetapi anda mahu pasangan mereka di sini. Dan super penting ialah Yang pertama, tanda yang sama, yang merupakan pengendali kesaksamaan sebagai bertentangan dengan pengendali tugasan. MARIA: Dan bar menegak terletak di antara Delete dan Return. DAVID MALAN: Ya. Pada papan kekunci AS biasa. MARIA: Ya. Jadi mari kita melompat terus ke dalam kenyataan bersyarat. Di Awal, anda telah sudah dilihat, mungkin, jika kenyataan yang membolehkan anda untuk memeriksa jika sesuatu yang tidak benar, maka melakukan sesuatu yang lain. Jadi, anda mungkin mahu untuk memeriksa jika bidadari anda menyentuh beberapa bidadari lain atau sempadan skrin anda. Dan kemudian anda telah mahu menamatkan permainan atau melakukan sesuatu yang lain. Jadi sintaks untuk "jika (keadaan)." Jadi, jika bidadari anda menyentuh sesuatu, maka adalah di dalam pendakap kerinting. Maka kita perlu jika-lagi kenyataan. Yang lain membolehkan kita untuk melakukan sesuatu jika syarat kita memeriksa pada mulanya adalah tidak benar. Jadi, jika bidadari itu menyentuh sempadan melakukan ini, lagi yang sesuatu yang lain. Jadi jika tidak melakukan sesuatu yang lain. Kemudian kita mempunyai contoh terbaik untuk ini. Jadi, jika (military_time <12), kita mahu printf "Selamat pagi!" Yang lain kita akan printf "Selamat malam!" Contoh asas. DAVID MALAN: Baik. MARIA: Cool. Jadi sekarang kita mempunyai kenyataan suis. Tukar kenyataan dalam tin umum membolehkan kita untuk melakukan banyak perkara yang sama bahawa kita hanya bercakap mengenai dengan jika kenyataan. Sebagai contoh, sekarang kita mempunyai Bentuk umum kenyataan suis yang membolehkan kita untuk mengambil pembolehubah dipanggil n dan membandingkannya dengan banyak nilai-nilai yang berbeza, yang di sini kita telah dipanggil constant1, constant2. Kita mungkin mempunyai banyak lagi. Dan orang-orang yang dipanggil kes. Jadi, jika kita mempunyai suis statement-- dan kerja-kerja ini hanya untuk integers-- kita mempunyai berubah-ubah dalam ini kes itu n. Jika n pembolehubah adalah sama dengan constant1, kita akan melaksanakan beberapa coretan kod atau sesuatu yang kita mahu lakukan. Dan kemudian kita akan pecah. Jadi rehat bermakna kenyataan suis akan berhenti melaksanakan jika n adalah sama dengan constant1, dan kemudian program anda akan berterusan. Ia akan keluar daripada menukar kenyataan dan ia akan terus berbuat sesuatu yang lain. Jika, bagaimanapun, n tidak sama constant1, maka kes untuk constant2 akan diperiksa. Jadi, jika n sama constant2, yang lain coretan kod akan dilaksanakan. Dan kemudian ia akan memecahkan jika itu adalah sama dengan ia. Dan kemudian kita boleh mempunyai also-- tidak semestinya, though-- kes lalai, yang akan berlaku jika n tidak sama mana-mana kes yang telah disenaraikan. Dan dalam kes lalai, kami juga tidak perlu berehat semestinya kerana kenyataan suis akan tahu bahawa ia perlu berakhir selepas lalai kes jika itu berlaku. DAVID MALAN: Tetapi segi gaya, kami sentiasa meletakkan ia di sana. MARIA: Ya. DAVID MALAN: Ya. Jadi terutamanya apabila bermula, terutama jika di kalangan mereka yang kurang selesa, saya akan secara peribadi hanya mengesyorkan melekat dengan IFS dan IFS-penumpang lain dan jika-pun-jika-elses dan sebagainya jika hanya kerana mereka sedikit lebih mudah. Ini adalah pengoptimuman bagus, atau kadang-kadang walaupun estetika ia menjadikan kod lebih mudah dibaca. Dan sebenarnya, mungkin pertengahan semester kita akan melihat masalah ditetapkan di mana ia hanya kelihatan lebih baik dan lebih mudah dibaca bagi manusia dengan menggunakan kenyataan suis. Tetapi jangan bimbang tentang bergantung kepada ini terlalu awal. MARIA: Ya. Jika anda mempunyai banyak daripada jika kenyataan, ia mungkin tidak menjadi sangat boleh dibaca. Ia mungkin tidak menjadi sangat cepat untuk anda untuk melaluinya. Jadi kenyataan menukar boleh menjadi sangat berguna, juga. Dan juga, jangan remember-- tidak lupa untuk meletakkan rehat di sana. DAVID MALAN: Jangan ingat ini. MARIA: Kerana anda mungkin jatuh melalui dari satu kes yang lain. Jadi katakan bahawa kes constant1 tidak mempunyai sebarang pernyataan putus. Maka kita mungkin jatuh melalui di dalam kes constant2. Dan kita tidak mahu berbuat demikian jika kami telah pun mencecah kes constant1 dan ia adalah sama dengan n. Jadi, sebagai contoh, jika kita mempunyai pembolehubah n yang mengandungi beberapa kelas, dan kami mahu melihat apa yang kelas is-- jika n sama dengan 50, kita akan mencetak "CS50 adalah Pengenalan kepada Sains Komputer I. " Kemudian kita akan pecah. Dan itu sahaja. Jika, bagaimanapun, n adalah sama kepada 51, kita akan untuk mencetak "CS51 adalah Pengenalan Sains Komputer II. " Kemudian, sekali lagi, kita akan pecah. Walau bagaimanapun, jika kita meletakkan 124, 61, mana-mana jumlah lain yang anda mungkin berfikir, atau program tidak akan untuk menyedari bahawa. Jadi ia akan berkata, "Maaf, Saya tidak biasa dengan kelas itu. " Dan ia akan pecah. DAVID MALAN: Jadi, anda benar-benar boleh melihat jika, lain jika, idea pun di sini. Ia sintaks hanya berbeza untuk menyatakan idea yang sama. MARIA: Tepat sekali. Sekarang kita mempunyai pengendali pertigaan kami. Pengendali Jadi pertigaan mempunyai tiga parts-- keadaan, sesuatu yang perlu dilakukan jika keadaan yang benar, dan kemudian sesuatu yang boleh dilakukan jika keadaan yang palsu. Jadi anda lihat, pada dasarnya, sintaks bahawa di sini. Kami mempunyai tanda tanya, dan kemudian the-- apa yang kita panggil ini? DAVID MALAN: Kolon. MARIA: Colon. Terima kasih. Maaf. Jadi mari kita lihat contoh kita untuk lihat jika kita boleh memahami this-- class_num == 50. Jadi di sini kita melihat operator Boolean kami == yang membandingkan class_num pembolehubah 50. Kedai Jadi class_num integer. Dan jika integer yang sama dengan 50, maka kita akan menyimpan "David Malan" dalam profesor tali. Jika bilangan kelas tidak sama dengan 50, "Daud Malan" akan menjadi profesor. DAVID MALAN: Terima kasih. Dan sebagainya ini seolah-olah sama dengan apa, anda akan berkata, pada pandangan pertama? MARIA: Bagi saya ia seolah-olah seperti jika Ahli lain kenyataan. DAVID MALAN: Ya. Dan sebenarnya, ini adalah jenis daripada yang cukup satu liner, boleh dikatakan, untuk melaksanakan betul-betul logik jika Ahli lain tetapi melakukan segala-galanya dalam satu langkah. MARIA: Tepat sekali. Yeah. Kenyataan jadi jika Ahli lain yang mungkin mengambil banyak ruang. Mereka mungkin terlalu panjang untuk sesuatu yang mudah seperti ini. Jadi ini boleh menjadi sangat ringkas dan sangat bagus. Jadi sekarang kita akan melihat kepada melaksanakan sesuatu lagi dan lagi, supaya memeriksa yang merapikan beberapa kali dan kemudian meneruskan untuk melakukan sesuatu manakala keadaan yang benar. Jadi ini membawa kita baik ke dalam gelung sementara. Ke kiri, kita ada gelung sementara pertama kami. Oleh itu, sambil sesuatu yang tidak benar, melakukan sesuatu lagi dan lagi. Jadi pastikan untuk melihat bahawa kami keadaan di sini disahkan di bahagian atas. Manakala dengan loop-- kedua kami kita panggil bahawa do-while loop-- kita melakukan sesuatu, maka kita periksa syarat. Dan jika syarat terus menjadi benar, kita kembali dan melakukan perkara yang lagi. Jadi perbezaan utama adalah di mana keadaan ini diperiksa untuk. Dan kod yang tidak mungkin dilaksanakan jika keadaan tidak benar dengan gelung sementara. Manakala dengan do-while gelung, kami mempunyai kod yang pasti berlaku sekurang-kurangnya sekali. Dan kemudian manakala keadaan terus menjadi benar, kita boleh kembali dan melelar lagi di dalam. Jadi, mengapa anda fikir kita akan menggunakan a do-manakala gelung lebih gelung sementara? Betul. Jadi, jika kita mahu mendorong pengguna untuk beberapa jenis input, jika kita ingin bertanya kepada mereka untuk memasukkan nama mereka, kita mahu sekurang-kurangnya bertanya kepada mereka sekali. Dan jika mereka masukkan nama itu, kita tidak akan meminta mereka lagi kerana kita sudah tahu. Tetapi jika mereka tidak masuk nama mereka, atau jika mereka masukkan sesuatu yang jelas tidak nama, kita masih mahu terus meminta mereka selama nama mereka. DAVID MALAN: Dan dalam kuliah kita mempunyai satu seperti ini dengan int positif mendapatkan Sebagai contoh, di mana ada apa-apa untuk menyemak pada mulanya kerana anda tidak mempunyai walaupun mendapat int. Oleh itu, kita mahu lakukan this-- mendapatkan int dari user-- yang kemudian website saya, mungkin, lagi dan lagi dan lagi. MARIA: Tepat sekali. Untuk OK loops--. Untuk gelung boleh membolehkan kita untuk melakukan hampir perkara yang sama, juga. Ini sebenarnya perkara yang sama. Jadi ada apa-apa yang anda boleh lakukan dengan gelung bahawa anda tidak akan dapat kaitan dengan gelung sementara. Tetapi untuk gelung mungkin kelihatan sedikit sedikit lebih rumit sintaksis kerana mereka mempunyai tiga bahagian di dalam apa sebelum sahaja keadaan dengan gelung sementara. Jadi bahagian pertama yang anda laut, kiri besar, kita mempunyai "int kerdil = 0." Jadi ini adalah di mana kita memulakan pembolehubah kami. Kemudian kita mempunyai koma bertitik dan "orang kerdil <7." Jadi ini adalah di mana daripada keadaan sebenarnya. Jadi itulah yang kita akan mempunyai meletakkan hanya dalam manakala loop-- "manakala orang kerdil <7." Di sini, yang masuk dalam tengah kami untuk gelung. Jadi "dwaves <7." Dan kemudian Bahagian terakhir kami adalah "orang kerdil ++," yang mana kita kini berubah kami. Jadi apa yang penting menyedari adalah bahawa ini akan pergi melalui ini untuk gelung tujuh kali dan melaksanakan tujuh kali. Oleh itu, kita mempunyai tujuh orang kerdil, dan mereka semua akan berkata, "Saya di sini untuk membantu anda, Snow White " kerana mereka bersedia untuk membantu Snow White. Dengan manakala gelung, kita akan berbuat yang pengawalan dan pengemaskinian tidak di dalam keadaan itu, sekali lagi, tetapi sama ada sebelum atau di dalam gelung sementara memastikan bahawa we-- kerana kita sentiasa memerlukan bahagian-bahagian. Jadi untuk memastikan yang kita ada mereka, kita akan tunggu masih menambah mereka pada, hanya tidak di dalam kurungan. DAVID MALAN: Dan supaya ia kelihatan like-- dalam kuliah, misalnya, Saya hampir sentiasa menggunakan, seperti, i dan n dan pembolehubah cukup membosankan. Ia kelihatan seperti anda boleh menggunakan lebih bijak dinamakan pembolehubah juga. MARIA: Ya, ia sebenarnya sangat bagus untuk menggunakan pemboleh ubah sedikit lebih deskriptif kerana terutamanya jika orang lain adalah membaca code-- anda mungkin anda grader atau jika anda bekerjasama dengan somebody-- anda ingin memastikan bahawa mereka memahami apa yang anda lakukan. OKEY. Jadi ini adalah sesuatu yang sangat funky-- untuk gelung dalam untuk gelung. Saya tidak tahu sama ada yang kami telah lihat sebelum ini. Mungkin tidak. Tetapi kita sebenarnya boleh mempunyai this-- supaya gelung daripada gelung. Jadi adakah sesiapa yang mahu mungkin berjalan saya melalui apa yang berlaku di sini? DAVID MALAN: Saya akan mengambil menikam. MARIA: Cool. DAVID MALAN: OK. Jadi, spoiler-- kita ingin mencetak bahan yang itulah di penjuru kanan sebelah bawah sana. MARIA: Betul. Ya, ya. DAVID MALAN: Oleh itu, kita baru sahaja meletakkan bahawa output sampel sana. Jadi saya boleh membuat kesimpulan daripada gelung paling atas bahawa anda iterating lebih baris yang gelung paling luar, jadi untuk bercakap. Dan anda iterating lebih tiang dengan gelung yang paling dalam. Dan intuitif, ini sepatutnya diharapkan masuk akal kerana dengan sifat setiap program yang kami telah lihat sebelum ini, printf, yang merupakan fungsi yang kita gunakan, akhirnya, mempunyai keupayaan untuk mencetak barangan keluar dasarnya baris demi baris. Seperti, apabila anda telah outputted baris baru, ada tidak berpatah balik dan mencetak sesuatu lebih tinggi pada skrin, sekurang-kurangnya tidak menggunakan printf seperti ini. Dan sebagainya dalam hal itu, ia membuatkan rasa yang paling luar gelung harus merujuk kepada baris kerana bagi setiap diberi berturut-turut, anda akan mahu mencetak XXXXX, dan kemudian bergerak ke barisan depan, XXXXX. Jadi baris diutamakan. Dan kemudian dalam setiap berturut-turut, anda mencetak tiang. Jika anda cuba untuk melakukannya dengan bertentangan, ia akan mungkin tidak keluar seperti yang anda kehendaki. MARIA: Ya. Kita tidak boleh kembali ke baris sebelumnya dengan printf. DAVID MALAN: Dan apa yang menarik setiap sembang hari ini tentang skop, sebenarnya, adalah bahawa baris adalah int yang diisytiharkan dalam gelung yang paling atas. Tetapi notis bahawa ia masih bahagian dalam, jadi untuk bercakap, pendakap kerinting yang segera diikuti, walaupun ia bukan teknikal dalam orang-orang pendakap kerinting. Jadi baris adalah dalam skop untuk keseluruhan daripada coretan kod, kedua-dua di dalam luar untuk gelung dan dalam dalam untuk gelung. Tetapi sebaliknya, di mana adalah lajur dalam skop? Lajur berubah-ubah? Ya, hanya dalam lingkaran dalam. Dan tidak apa-apa kerana kita tidak mengakses ia di luar pendakap kerinting itu. Apa yang kami lakukan adalah mencetak baru talian bagi mereka yang di sana. Supaya sebenarnya adalah OK. Jadi ini mempunyai kesan, ia kelihatan seperti, menjalankan tiga baris dan empat tiang. MARIA: Betul. Jadi pertama kita pergi melalui baris pertama kami. Dan hanya dalam baris pertama kami, kami melakukan empat tiang di dalam baris pertama. Oleh itu, kita mencetak empat X. Dan kemudian kita boleh keluar dari gelung, kerana kita sudah dicetak empat X. Dan kita mencetak baris baru. Dan kemudian kita melalui Proses yang sama untuk dua baris untuk membuat sejumlah tiga. DAVID MALAN: Dan ia adalah diperhatikan itu hanya artifak fon, hakikat bahawa output sampel seolah-olah begitu banyak lebih tinggi, seolah-olah ada lebih baris daripada tiang. Tetapi ia hanya kerana X adalah lebih tinggi daripada lebar. Itu sahaja yang yang berlaku di sana, dan ruang putih antara baris. MARIA: Betul. Sejuk. DAVID MALAN: Baiklah. Jadi cepat melihat masalah menetapkan satu, mengambil apa-apa soalan, dan kemudian menangguhkan? Baiklah. Jadi dalam masalah menetapkan satu, ada tiga cabaran utama, akhirnya. Tetapi pertama, anda akan mendapati bahawa masalah yang ditetapkan spesifikasi, seperti banyak yang psets jatuh ini, akan berjalan anda melalui beberapa latihan memanaskan badan, menunjukkan anda daripada beberapa sumber yang anda mungkin atau mungkin tidak pernah melihat sudah. Sebagai contoh, CS50 mempunyai satu set seluar pendek, yang video pendek, tidak seperti ini, tetapi itu adalah specific-- sangat topik mungkin lima minit, 10 minit panjang pada gelung atau kepada keadaan atau algoritma atau kemudiannya pada lebih topik maju, juga. Dan kita biasanya menanamkan mereka ke dalam masalah ini set supaya pelajar mempunyai sumber yang mana untuk mengkaji bahan yang mungkin mempunyai sudah datang dalam kuliah atau bahagian. Tetapi cara ini ia lebih fokus dan banyak lagi di hujung jari mereka. Kami juga cenderung untuk menanamkan dalam masalah perdamaian dipanggil walkthroughs. Jadi hampir semua contoh-contoh yang saya lakukan dalam kuliah, di atas pentas di sini, kami juga telah ditangkap pada kamera dalam maju yang lebih perlahan, Walkthrough yang lebih intim dengan saya di komputer riba saya kod yang, baris demi baris supaya dalam kelas, kami akan sering agunan melalui sesuatu atau seseorang akan mencelah dengan menjawab soalannya. Tetapi ia tidak semestinya tenggelam dalam untuk semua orang di khalayak. Jadi, anda akan mencari kod walkthroughs bagi kebanyakan contoh yang kita lakukan di sini dalam syarahan supaya anda boleh berjalan melaluinya pada kelajuan anda sendiri dan putar balik atau maju pantas atau skip sama sekali, jika anda suka. Ada sering beberapa soalan memanaskan badan yang meminta anda untuk menyusun mengukuhkan bahan ini dan memastikan bahawa anda selesa sebelum anda meneruskan dengan seluruh pset. Dan kemudian, sudah tentu, ada pset itu sendiri. Dan salah satu perkara yang kita sangat sengaja lakukan pada CS50 adalah hampir setiap tidak menarik atau intelek tidak menarik langkah mekanikal yang anda mungkin perlu lakukan hampir selalu sangat didokumentasikan dengan baik. Sepanjang tempoh itu, kita akan mula bertanya soalan yang lebih retorik seperti ingat bagaimana untuk melakukan ini atau itu? Tetapi secara umumnya, anda akan mendapati bahawa set masalah mendapatkan anda melalui mekanik sesuatu supaya yang menarik, cabaran intelektual akhirnya ditinggalkan kepada anda pelajar. Dengan itu berkata, Zamyla, yang kami disimpan merujuk hari ini dalam kuliah, adalah salah seorang kakitangan lama kami ahli yang juga memegang walkthroughs mengenai masalah pset tertentu seperti mario dan tamak, walaupun tidak air tahun ini. Dan ia dalam orang-orang walkthroughs bahawa dia sering menawarkan beberapa petua dan cara untuk bagaimana untuk meneruskan, tidak pernah memberitahu anda apa yang perlu dilakukan, tetapi rather-- seperti keadaan, jika anda will-- memberikan anda sekurang-kurangnya satu beberapa idea-idea supaya ia terpulang kepada anda, akhirnya, untuk membuat keputusan bagaimana untuk mendekati mereka. MARIA: jenis seperti tahap yang tinggi-a pemahaman logik apa kita meminta anda lakukan. DAVID MALAN: Tepat sekali. Dan, sebenarnya, Zamyla ini walkthroughs adalah bertujuan untuk menjawab kerap soalan yang ditanya di mana saya bermula, terutamanya apabila ini spesifikasi panjang adalah sedikit menakutkan diberikan semua teks dan imej yang mereka ada di dalamnya. Jadi water.c, anda akan mendapati selepas anda selesai menunaikan sembahyang, sebenarnya agak mudah. Benar-benar adalah sekumpulan anda akan bang kepala anda ke dinding cuba untuk memahami mengapa ia tidak menyusun atau mengapa ia tidak berjalan dengan betul. Tetapi sebaik sahaja anda selesai dengan itu dan sebaik sahaja anda telah menghabiskan masa bergelut dengan apa-apa bug yang anda mungkin ada, anda akan mendapati bahawa itu program yang sangat pendek. Ia boleh dilakukan dalam hanya beberapa baris kod, kebanyakan yang yang kami telah lihat di sini di kuliah sudah, jika anda memasang blok bangunan yang betul. Dan seperti yang kita cadangkan di sini, ia akan bertanya anda menentukan berapa minit seseorang itu mengambil mandi di kampus. Kami menyatakan dalam masalah ini menetapkan kadar aliran air dalam, seperti, mandi aliran rendah kepala, sama seperti music Seinfeld yang yang kita lihat hari ini atau yang bertentangan dengannya. Dan kemudian anda hanya perlu untuk melakukan sedikit matematik, really-- aritmetik menggunakan C untuk memberitahu berapa ramai, secara kasar, botol air adalah bersamaan dengan jika kita mengambil pancuran n minit. Sekarang, dalam mario.c, ini akan sebagai program yang lebih panjang sedikit. Ia masih tidak akan menjadi panjang ini. Hanya beberapa baris lebih lama daripada water.c. Tetapi ia akan menjadi peluang untuk mencipta semula sekolah lama Mario piramid daripada Super Mario Brothers atau beberapa susulan. Ia tidak akan melihat sebagai lebih cantik atau seperti yang berwarna-warni sebagai salah satu yang di sana. Kami hanya akan menggunakan hashtags sedikit seperti yang kita ada di sini pada skrin menggunakan teks ASCII. Tetapi ia akan lebih kurang idea yang sama. Dan ia akan menjadi satu menjalankan yang pada pandangan pertama kelihatan agak simple-- hanya mencetak piramid yang mudah. Tetapi ada beberapa ciri-ciri di sini yang menarik. Perhatikan bahawa kelebihan paling kanan piramid sebenarnya mempunyai lebar dua. Jadi ada dua sama tiang tinggi, yang membuat ia memerlukan sedikit sedikit pemikiran untuk membuat memastikan anda mendapat yang betul-betul betul, kerana berbanding hanya yang bersudut dengan sempurna garis. Jadi itulah sedikit kes sudut tetapi perlawanan permainan sebenar. Dan ia juga tidak jelas pada mulanya pandang cara mencetak ruang putih. Oleh itu, apabila saya melihat sampel output sini-- dan ia juga di spec-- ia jenis kelihatan seperti segi empat tepat, tetapi pepenjuru daripada segi empat tepat telah dipotong, dan ia hanya ruang putih, jadi untuk bercakap. Dan sebagainya sering ditanya soalan di sini sentiasa, baik, bagaimana saya boleh menggerakkan hashtags kepada yang betul? Atau bagaimana saya boleh mencetak ruang kosong? Dan ia sebenarnya lebih mudah daripada kebanyakan pelajar berfikir. Betul? Anda boleh menganggarkan ia visual dengan hanya memukul bar ruang sekali atau dua kali atau tiga kali. Dan sebagainya walaupun dengan printf kita hampir sentiasa mencetak tali atau int atau perkataan seperti "hello, dunia "atau siri kata-kata, anda juga boleh hanya mencetak quote, ruang, unquote. Dan yang benar-benar akan memberikan anda satu ruang putih di sana. Jadi menyimpan bahawa dalam fikiran dan tidak overthink ini. Anda benar-benar perlu memutuskan baris demi baris demi baris, tidak seperti contoh anda yang masa lalu, berapa ramai daripada mereka yang tiang perlu ruang putih dan berapa ramai antara mereka yang akan hashtags. Ia akan mengambil sedikit masa, tetapi ia akhirnya teka-teki logik kejayaannya. MARIA: Ya. Tetapi logik akan baris demi baris akan menjadi sangat berguna di sini. DAVID MALAN: Ya. Saya rasa contoh kod yang anda gave-- walaupun walaupun ia bukan satu program yang lengkap. Anda masih perlu int dan utama dan stdio.h tidak sah dan #include, banyak barangan dari kuliah. Tetapi blok bangunan seolah-olah berada di sana. Dan kemudian akhir sekali adalah sesuatu lebih sedikit algoritma. Jadi ia ternyata bahawa bila-bila masa anda pergi ke CVS atau mana-mana kedai runcit dan seseorang tangan anda di bil juruwang atau duit syiling yang perubahan, ternyata bahawa mereka, manusia, sama ada mereka tahu atau tidak, adalah mungkin menggunakan apa yang dipanggil algoritma tamak, di mana jika anda berhutang, berkata, $ 21 dalam perubahan kerana sebab-sebab tertentu anda membeli sesuatu yang sangat murah dengan rang undang-undang yang sangat besar di CVS, ia akan menjadi benar-benar menjengkelkan jika juruwang memberikan anda 21 perseorangan atau lebih teruk lagi lagi, banyak keseluruhan syiling. Sebaliknya, apa yang seseorang yang munasabah adalah mungkin akan lakukan ialah mereka akan merebut $ 20- dan kemudian $ 1-rang undang-undang, dan menyerahkan engkau hanya dua rang undang-undang dalam kes itu. MARIA: Jadi mereka yang ingin mengurangkan perubahan yang mereka berikan kembali kepada anda. DAVID MALAN: Tepat sekali. Dan perjanjian sama dengan syiling, juga. Jika anda berhutang, berkata, $ 0.50, mudah-mudahan anda tidak mahu 50 beberapa sen. Anda sebaliknya mahu dua pihak, misalnya. Sekarang, ini tidak menganggap bahawa juruwang mempunyai cukup setiap jenis mata wang yang dia mungkin mahu memberi anda. Tetapi kita membolehkan anda untuk mengambil alih sebanyak dalam masalah ini. Dan matlamat akhirnya adalah untuk melaksanakan kod C algoritma tamak. Jadi pengguna dibenarkan menaip berapa banyak menukar dia berhutang dengan dolar dan sen, beberapa jenis titik terapung nilai mungkin. Dan kemudian anda perlu lakukan matematik dan memikirkan algorithmically, baik, berapa banyak duit syiling yang boleh saya berikan anda secara minimum untuk memberikan anda betul-betul bahawa jumlah perubahan. Tetapi ada akan menjadi beberapa bahagian yang sukar di sini, bukan? Seperti ada keseluruhannya isu ketakpersisan. MARIA: Tepat sekali. Jadi titik terapung Nilai mempunyai ketakpersisan. Adakah kita bercakap tentang perkara ini dalam kuliah hari ini? DAVID MALAN: Kami lakukan Kali terakhir dalam kuliah. Kita bercakap tentang ketakpersisan. Dan anda tidak mahu menipu pengguna berapa banyak perubahan yang dia terhutang. Dan sebagainya Walkthrough, dalam spesifikasi set masalah itu, memberikan beberapa pemikiran, akhirnya, untuk bagaimana anda boleh mengurangkan risiko-ketakpersisan kesilapan, berpotensi. Ia boleh dielakkan, sudah tentu, untuk input kita berbicara tentang. Dan, sebenarnya, pennies-- mungkin kita akan menangguhkan kepada Zamyla, Saya fikir, untuk helah sana. Jadi akhirnya, anda akan mendapati perkembangan masalah minggu ini, di mana yang pertama adalah agak kecil, kemudian sederhana, kemudian sedikit lebih besar. Tetapi semua daripada mereka menggunakan bangunan blok dari ini minggu lalu, dari supersection ini, masalah menetapkan spesifikasi mendedahkan anda kepada sumber-sumber yang tidak terkira banyaknya. Tetapi masih, jika pada semua berjuang, terutamanya di kalangan mereka yang kurang selesa tanpa latar belakang terlebih dahulu, datang ke waktu pejabat pada hari Isnin dan Selasa dan Rabu dan Khamis. Pergi ke CS50 Bincangkan melalui laman web kursus ini, melalui mana anda boleh berbual dengan kakitangan dan rakan sekelas. Tetapi akhirnya, saya rasa Nasihat paling baik adalah hanya mula awal. Ia bukan jenis kelas yang anda harus bermula psets pada hari Rabu malam, atau lebih teruk lagi malam ini. MARIA: Nasihat saya yang terbaik ialah telah bermula pada hari Isnin. DAVID MALAN: Isnin. Jadi, jika anda belum bermula already-- tidak. Tetapi, jika tidak Isnin, maka hari ini. Lebih awal lebih baik. Dan itulah sebab yang kursus mempunyai begitu banyak hari lewat untuk memberikan anda sedikit tekanan psikologi untuk memulakan lebih awal tetapi masih membiarkan perkara yang tergelincir apabila perkara yang mengambil masa yang lama daripada apa yang anda harapkan. MARIA: Dan anda mahu gunakan waktu pejabat sebanyak yang anda boleh juga. DAVID MALAN: Apa-apa soalan? Baiklah. Nah, mengapa tidak kita menangguhkan sini?