[Powered by Google Translate] DAVID MALAN: Ini adalah CS50, dan ini adalah permulaan 1 Minggu. Apa yang kita fikir kita akan lakukan hari ini adalah mengambil melihat kembali pada sesuatu yang ramai di antara anda mungkin telah berjalan lalu bagi sesetengah masa kini dan mungkin kelihatan sedikit biasa. Ini perkara di sini, ini sudah tentu adalah dalam - PENONTON: Sains. DAVID MALAN: Sains pusat. Jadi ini sebenarnya adalah salah satu komputer terawal kembali dari tahun 1940-an. Ia adalah salah satu daripada komputer pertama elektromekanik yang mampu terutamanya panjang, pengiraan diri berterusan, dan apa yang kita sebenarnya melihat dalam pusat sains hanya sekeping sedikit perkara ini. Apa yang kita fikir kita akan melakukannya kemudian mengambil melihat kembali pada video yang telah dibuat sedikit masa lalu, memperkenalkan ini benda itu kepada dunia. Dan anda akan melihat dari muzik dan suara yang bahkan mereka adalah masa yang sangat gembira. [Video main] -A kemenangan kemahiran matematik dan mekanikal ini besar baru kalkulator automatik di Universiti Harvard. Masalah rumit dalam matematik, meletakkan melalui mesin dalam bentuk berkod pada pita, tepat diselesaikan dalam pecahan minit masa diperlukan untuk manusia pengiraan. Direka untuk mempercepatkan semua bentuk matematik dan sains penyelidikan, otak mekanikal gergasi akan bekerja untuk Amerika Syarikat Tentera Laut sehingga akhir perang. DAVID MALAN: Jadi apa yang anda mungkin tidak tahu adalah bahawa ia adalah peranti ini yang sama bahawa istilah kita semua kini mengambil cukup banyak untuk diberikan dicipta, bahawa pepijat. Jadi salah seorang jurutera yang bekerja di komputer ini literal ditemui rama-rama kecil dalam mesin yang mengakibatkan dalam beberapa pengiraan yang tidak betul. Dan sebagai cerita pergi rama-rama yang telah dilekatkan log ini jurnal sini, balik dari September 9 pada tahun 1940-sesuatu, dan dengan itu dilahirkan untuk dunia istilah "bug". Jadi selepas kita mempertimbangkan pepijat untuk menjadi apa-apa jenis kesilapan dalam program, sama ada lelaki dibuat atau, dalam kes ini, serangga. Jadi beberapa pengumuman, seperti yang kita meneruskan. Jadi CS50 mempunyai tradisi menawarkan makan tengahari macam kebanyakan Jumaat pada semester, di mana kita mengambil 30 hingga 40 pelajar Bomba dan Ais di Dataran untuk kasual Berudu, bercakap tentang sains komputer, bercakap tentang masa depan. Kami menjemput alumni dan rakan-rakan dari industri untuk berbual pelajar juga. Betul ke arah akhir membuat apa kelas yang agak besar lebih intim, sekurang-kurangnya sekali dalam manakala bagi subset pelajar. Jadi jika anda ingin menyertai kami Jumaat ini, 1:15 PM, pergi ke CS50.net/lunch RSVP. Dan kita akan melakukan ini recurringly, jadi tidak perlu risau jika anda tidak antara 30 pertama atau minggu ini. Jadi nota penulis. Satu perkataan pada sumber-sumber yang kini akan memulakan yang disediakan kepada pelajar-pelajar di dalam kelas. Supaya kepala anda tidak perlu turun semasa kuliah menulis ke semua yang saya katakan dan sebagainya, apa yang kita lakukan sebaliknya memberikan dari tenaga pengajar set kanun nota. Jadi kita mempunyai satu felo pengajaran kami, Andrew Sellergren, yang duduk setiap minggu, mengkaji video, dan kemudian menulis apa yang kita fikir adalah agak set nota yang berwibawa. Dan Andrew manis, juga, meletakkan nota kaki snarky bawah. Jadi, anda diharap akan menikmati ini sebagai buku rujukan untuk menyeronokkan, dan juga, datang kuiz masa, sebagai satu peluang untuk mengkaji apa yang berlaku dalam ceramah individu. Jadi yang dikaitkan pada halaman kuliah. Masalah set 0, Sementara itu, adalah luar. Dan dari segi sumber-sumber yang disediakan untuk anda - Walkthrough. Milo mengetuai pertama pada hari Jumaat. Ia telah difilemkan, meletakkan talian dengan hari Sabtu. Dan begitu menyedari, jika anda tidak benar-benar pasti di mana untuk memulakan, untuk ini atau pada masa hadapan p-set, sentiasa menghidupkan pertama untuk Walkthrough atau yang video. Sectioning adalah dalam kemajuan; di cs50.net/section adalah di mana anda perlu mengemukakan pilihan anda, jika anda tidak mempunyai sudah, hari ini. Kerana bahagian akan bermula Ahad ini yang akan datang, Isnin, dan Selasa. Kami melakukan bahagian mereka tiga hari, setiap minggu semester bagi sebahagian besar. Dan kita juga memperkenalkan, sekali lagi, trek yang berbeza. Jadi, anda akan ditanya mengenai borang ini sectioning, jika anda tidak pernah melihat ia sudah, jika anda berada di kalangan mereka yang kurang selesa, lebih selesa, atau di suatu tempat di antara. Dan jika anda jenis di atas pagar, secara amnya di suatu tempat di antara apa yang kebanyakan pelajar akhirnya memeriksa. Waktu pejabat bermula malam ini. Jadi Scratch adalah kunci yang agak rendah, walaupun ia adalah agak semula jadi untuk menjalankan ke pepijat pelbagai, atau tidak menentu tentang bagaimana untuk melaksanakan sesuatu. Jadi, menyedari bahawa kita akan mula waktu pejabat minggu ini. Mereka akan berada di Annenberg Isnin, Selasa, Rabu, Khamis, 20:00-11:00 semasa rehat otak. Classmen Upper boleh masuk, dan jika anda pernah mempunyai masalah mendapatkan di pintu, kerana mereka akan swiping, hanya bercakap cara anda di dalam dan menerangkan anda dengan CS50. Biasanya 20-30 kita pada kakitangan akan berada di sana untuk membantu anda satu lawan satu. Semasa ketibaan idea ini ialah: anda akan membawa komputer riba anda, anda akan mempunyai pengecas anda, kami akan mempunyai tali kuasa tambahan, terutamanya di sepanjang dinding selatan Annenberg mana terdapat banyak kedai-kedai elektrik. Dan pintu masuk utama ke pejabat jam Q & A adalah untuk pergi ke cs50.net/discuss dan untuk pos anda soalan di sana. Dan untuk melabelkan dengan pset 0 atau pset 1, apa jua minggu mungkin berada. Dan kemudian apa yang kita akan lakukan adalah mempunyai jadual felo pengajaran pembantu dan kursus, umumnya 8 atau 10 atau jadi kita, akan melalui, menyimpan mata berjaga-jaga di atas kapal, dan memetik off soalan benar-benar secepat seperti yang kita boleh, merujuk anda ke jawatan berkaitan jika anda tidak mendapati mereka dirimu, rujukan dalam talian, sebagaimana sesuai. Dan kemudian jika terdapat masalah, kerana ada yang tidak dapat dielakkan akan, atau ia hanya masuk akal lebih untuk duduk satu lawan satu, bekerja melalui masalah dengan seseorang. Atau anda hanya datang ke dalam waktu pejabat benar-benar memerlukan pemikiran itu. Anda tidak mahu untuk pergi melalui bentuk elektronik, anda benar-benar ingin untuk bertemu dengan seseorang. Berkomunikasi itu kepada kami, dan apa yang akan berlaku adalah apabila anda soalan telah dilihat oleh ahli kakitangan, dan kami menentukan, yup, ini harus dihantar kepada salah satu daripada 20 atau 30 ahli pasukan di sini tempatan, anda akan melihat di atas kiri ini sedikit Masukkan butang Queue bermula berkelip pada cs50.net / berbincang. Dan ini memberitahu anda bahawa anda sekarang telah dijemput, jadi untuk bercakap, untuk memasuki barisan. Dan dengan mengklik butang yang, nama anda akan muncul pada iPad bahawa penyambut CS50, satu kepala kursus, memegang berhampiran pintu masuk Annenberg, yang kemudiannya akan lihat seperti yang digambarkan di sini, pelajar-pelajar yang mempunyai soalan mengenai kiri, ahli-ahli kakitangan yang hadir di sebelah kanan. Dan dengan satu klik kiri dan kanan, pelayar web anda akan mula berkelip secepat, misalnya, Profesor McGonnagal adalah bersedia untuk melihat anda di meja tertentu dalam Annenberg. Jadi kita lakukan beberapa tahun terakhir ini. Kami telah reboot waktu pejabat dan dilaksanakan semula banyak perisian. Jadi sedar bahawa ini akan memanaskan minggu ini. Tetapi juga sedar juga, pada tahun-tahun lalu, seperti yang anda mungkin telah mendengar dari kawan-kawan, waktu pejabat terpaksa sememangnya 50 hingga 150 pelajar pada satu masa. Dan ia adalah semata-mata tidak mungkin bagi kita untuk mengendalikan bahawa berkesan, satu pada satu, sepanjang malam. Dan sebagainya apa yang kita benar-benar akan cuba untuk lakukan tahun ini adalah mengambil kesempatan daripada fakta bahawa banyak soalan sering ditanya dan selalunya boleh lebih baik dijawab asynchronously. Jadi, anda boleh menyusun berfikir melalui sambutan kakitangan, dan kita boleh berfikir melalui kod anda, tanpa dipanaskan tekanan semestinya bergelut melalui sebelah menyebelah. Jadi kami menganggarkan bahawa kira-kira satu pertiga atau separuh soalan akan dihantar secara peribadi, dan kami akan cuba untuk memetik kira sebagai ramai sebagai setengah atau lebih elektronik, pada waktu pejabat. Dan kita akan terus menggunakan Bincangkan sepanjang minggu juga. Dan akhir sekali, sedar bahawa kursus ini boleh diambil lulus / gagal. Jadi, jika anda berada di atas pagar atau hanya berfikir bahawa anda benar-benar tidak pasti jika ini adalah dunia untuk anda, atau ini adalah benar-benar agak asing kepada anda, sedar bahawa ini adalah satu cara yang baik mendapat keyakinan dengan yang melangkah ke kelas, seperti yang saya lakukan terus-terang, tahun lalu. Dan kemudian mempunyai lima minggu untuk menyelesaikan angka keluar untuk diri anda jika anda mahu kekal lulus / gagal, beralih kepada surat gred, atau seumpamanya. Dan biasanya apa yang lulus / gagal tidak, saya fikir, untuk pelajar adalah bahawa, jika anda dimasukkan ke dalam bahawa 10 jam, 20 jam, apa sahaja yang ia mungkin pada beberapa masalah, dan anda terhantuk kepala anda dinding, dan anda benar-benar hanya tidak boleh mengejar sesuatu ke bawah, dan anda mempunyai begitu banyak perkara-perkara lain yang anda perlu lakukan, jujur, apa yang saya berfikir lulus / gagal adalah, ia mengambil kelebihan luar situasi seperti itu. Jika anda telah mengambil perkara itu 90% dari jalan. Anda tahu, ia tidak cukup sempurna. Tetapi anda mendapat banyak daripada itu, namun. Jadi mempertimbangkan lulus / gagal kerana memberikan anda bahawa model mental, mungkin. Baiklah, minggu jadi lepas kita merpati ke Gores, dan kita bercakap tentang pengaturcaraan pada tahap grafik yang agak tinggi. Dan hari ini kita membuat peralihan kepada bahasa dipanggil C, bahasa pengaturcaraan tahap yang lebih rendah di atas yang banyak bahasa moden kini dibina, termasuk beberapa orang-orang kita akan menggunakan ke arah akhir istilah. Dan syntactically, apa yang mereka kelihatan seperti semua agak sama. Jadi mari kita mulakan untuk membuat peralihan ini di sini. Jadi ini adalah satu program minggu lepas bahawa adalah mudah hello program dunia. Ia hanya dicetak untuk dunia hello skrin, dengan gelembung ucapan yang sedikit keluar kucing. Nah, jika kita mula sekarang untuk menterjemahkan ini kepada yang lain bahasa, sedar bahawa idea hari ini dan pada hari Rabu adalah sama, tetapi sintaks mula berubah. Jadi, manakala minggu lepas kita terpaksa, apabila bendera hijau diklik, katakan hello dunia. Hari ini kita akan mempunyai int, utama, tidak sah, printf, balasan, dengan sintaks lain di sana juga. Pendakap kerinting, dan kurungan, dan petikan, dan barang kecil. Tetapi menyedari bahawa teras idea sini adalah percetakan, dan akhirnya hakikat yang utama kini akan menjadi sinonim dengan permulaan program. Utama akan menjadi di mana bendera hijau tendangan perkara luar. Jadi sekarang mari kita mengusik selain beberapa blok bangunan di sini sebelum kita menyelam ke dalam beberapa contoh konkrit. Jadi kita dipanggil minggu ini satu kenyataan lepas, di mana ia hanya arahan. Adakah ini - dalam kes ini, katakan hello dunia. Well dalam C, jika kita melihat pada hanya garis itu, ini adalah bagaimana kita akan mula menyatakan bahawa sekeping teka-teki tertentu: printf ("hello dunia");. Dan sekarang kita akan mengusik ini selain lebih dan lebih dari masa ke masa, tetapi menyedari bahawa terdapat corak di sini. Jadi seseorang, kita mempunyai perkara ini dipanggil printf, yang merupakan asasnya mirip kepada perkataan Katakanlah. Itulah apa yang ia akan lakukan. Printf, dan f sini bermaksud "diformat". Jadi ia hanya bermakna anda boleh memasukkan pelbagai butiran estetik. Jadi unquote quote adalah permulaan apa yang kita hendak untuk memulakan memanggil rentetan. Satu perkataan, frasa, ayat. Satu rentetan dalam bahasa pengaturcaraan adalah satu urutan sifar atau lebih aksara. Jadi h-e-l-l-o, koma, dan sebagainya, unquote quote rentetan. Dan kini backslash n, sedikit syntactically ganjil, tetapi kita yang minggu lepas yang telah ditakrifkan sebagai bermaksud apa? Ia hanya satu barisan baru. Ia hanya satu cara menyampaikan kepada komputer anda mahu bersamaan memukul Masukkan sana, tetapi anda tidak mahu sebenarnya tekan Enter dan dengan itu merosakkan semua format program sebenar anda. Sekarang kurungan sertakan string ini, paren terbuka dan dekat paren, dan dalam yang adalah rentetan kita. Kerana itulah kerana dalam C, dan pengaturcaraan lain bahasa, perkara seperti printf mengambil hujah, atau mengambil parameter. Jadi mula berfikir sekarang blok Katakanlah ini ungu sebagai fungsi, sebagai kaedah, sebagai prosedur. Anda benar-benar boleh memanggilnya apa sahaja yang anda mahu untuk sekarang, tetapi ia adalah sejenis program kecil yang hanya seseorang benda, dalam satu barisan, tidak kurang. Jadi printf juga apa yang kita akan mula memanggil fungsi, dan fungsi melakukan sesuatu - dalam kes ini mencetak rentetan diformat ke skrin - tetapi fungsi juga mengambil hujah atau parameter. Dan oleh hujah-hujah atau parameter, terima kasih, kita maksudkan bahawa tingkah laku mereka boleh dipengaruhi oleh apa yang anda lulus dalam di dalam kurungan. Jadi dalam kes ini, keperluan printf diberitahu apa yang mencetak, dan kita hanya lulus dalam, dalam petikan berganda di sini, tali yang kita sebenarnya mahu untuk mencetak. Dan koma bernoktah di hujung sangat garis ini adalah hanya kacau ganggu sejarah mana di akhir garisan yang paling kod, anda meletakkan koma bernoktah untuk membuat super jelas kepada komputer bahawa garis kod ini berakhir di sini. Sekarang ini adalah baik kerana seperti yang kita akan lihat sebagai program mendapat lebih kompleks, koma bertitik akan membuat super manusia jelas kepada kita, dan juga komputer, di mana garisan permulaan kod dan akhir. Menyedari bahawa beberapa bahasa tidak mempunyai beberapa butiran ini yang sama. Dan sebenarnya, dalam JavaScript, anda tidak sentiasa memerlukan sesuatu seperti koma bernoktah. Tetapi lebih kepada yang akan datang. Jadi gelung. Kami mempunyai sesuatu seperti ini, sangat intuitif, jelas, melakukan sesuatu lagi dan lagi dan lagi. Seperti memakai stokin, atau berkata hello, dalam kes ini. Nah, bermula hari ini dalam C, kita boleh menyatakan Gores ini menyekat sebagai sementara (benar) printf ("hello dunia"). Jadi notis kita mula membina literal teka-teki sekeping dari sebelum ini. Kami mempunyai blok ungu yang sama, tetapi ia adalah di dalam ini kurungan Selamanya blok, dan cara terbaik untuk menterjemahkan C adalah seperti berikut. Tiada Selamanya kata kunci. Anda tidak boleh hanya menaip f-o-r-e-v-e-r di C. Jadi analog yang terdekat adalah sementara. Kini, manakala (benar) seolah-olah sedikit bodoh kerana tidak nilai perubahan sentiasa benar? Mungkin tidak. Ia seperti mengatakan manakala satu, manakala, manakala benar. Ia adalah semua perkara yang sama, benar sentiasa kes itu. Jadi gelung ini sebenarnya mendorong apa jenis gelung? Hanya gelung tak terhingga, betul. Satu gelung Selamanya atau seperti yang kita memanggilnya minggu lepas, hanya gelung terhingga. Jadi kadang-kadang yang buruk. Kadang-kadang yang pepijat, kadang-kadang itulah sebabnya anda mendapat pantai bola berputar atau hourglass atau sebagainya. Tetapi dalam kes ini, kita sengaja, untuk apa jua sebab, mahu mencetak perkara yang sama sekali lagi dan lagi dan lagi. Atau dalam kes seperti menonton, anda mahu lakukan sesuatu lagi dan lagi dan lagi. Jadi gelung tidak terhingga mungkin masuk akal. Dan ini adalah bagaimana dalam C kita mungkin menterjemahkan Selamanya kod. Jadi sekarang yang satu ini sedikit lebih khusus. Kami telah mengulangi sebanyak 10 kali kenyataan berikut. Jadi sementara (benar) tidak cukup bekerja di sana, kerana benar adalah selalunya benar. Jadi jika kita sebaliknya melihat versi C, kini sintaks mendapat sedikit lebih samar. Tetapi untuk menjadi jujur ​​apabila anda mula melihat ini, ia mendapat agak biasa cepat. Jadi ini adalah apa yang dipanggil untuk gelung. A untuk gelung akan memberitahu komputer untuk melakukan sesuatu lagi dan lagi dan lagi untuk selagi perkara-perkara ini adalah benar. Sekarang apa yang kita maksudkan dengan itu? Nah, terdapat tiga bahagian untuk gelung, dan kita akan kembali ke ini dalam konteks sebenar contoh dalam seketika. Jadi jangan bimbang jika ia tidak agak tenggelam dalam semua sekali gus. Tetapi int i = 0, cerita pendek yang panjang, berkata memberikan saya satu pembolehubah yang integer jenis, jadi berikan saya nombor dipanggil i, dan memulakan kepada 0. Itu adalah memberi saya seperti x ubah algebra dan memulakan kepada 0. Tetapi dalam kes ini, kita dipanggil ia i. Kemudian di tengah-tengah, ia berkata i adalah kurang daripada 10. Itu memberitahu komputer tidak barangan berikut sekian lama kerana i adalah kurang daripada 10. Dan jelas ia bermula kurang daripada 10 kerana ia bermula pada 0. Kemudian akhir sekali, anda mungkin boleh meneka apa yang i + + cara. Ia adalah sedikit sintaks yang hanya bermakna kenaikan i. Jadi tambahkan 1 i, lagi dan lagi dan lagi. Dan sebagainya seperti yang kita akan lihat gelung ini, sintaksis ini, sebaliknya, melaksanakan tepat perkara yang sama, terus-terang, dalam Scratch adalah hanya jadi lebih mudah untuk meluahkan. Ulangi 10, dan anda selesai. Di C, dan dalam bahasa pengaturcaraan yang paling, kita perlu menjadi sedikit lebih nafikan komputer dan sebenarnya nyatakan sesuatu seperti ini. Tetapi kita akan kembali untuk ini dan sintaksis lain. Bagaimana tentang pembolehubah? Dalam Gores kita mempunyai sesuatu seperti blok-blok oren, mana saya boleh mengisytiharkan pembolehubah. Mari kita sewenang-wenangnya memanggilnya kaunter. Mari kita memulakan kepada 0, dan kemudian mari kita selama-lamanya melakukan sesuatu. Dalam kes ini dalam Gores Saya berkata kaunter, jadi kucing akan mempunyai gelembung ucapan yang sedikit itu bercakap nombor itu dalam pembolehubah ini. Dan kemudian kita mempunyai kaunter perubahan oleh 1. Jadi semua ini dibalut di dalam kunci Selamanya. Jadi kita sudah kini mempunyai blok bangunan di C dengan yang menterjemahkan ini. Salah satu cara yang kita boleh lakukan yang ini. Beri saya integer, hubungi kaunter. Memula kepada 0 dalam baris pertama di sana. Walaupun (benar), jadi saya mencuri idea itu daripada hanya seketika lalu, pergi ke hadapan dan melakukan yang berikut. Cetak kaunter, dan kemudian kenaikan kaunter, sekali lagi, dan sekali lagi, dan sekali lagi. Atau sekali lagi, + + hanya bermakna tambahkan 1 kepada sesuatu. Tetapi terdapat sekeping baru sintaks di sini. Apa yang melompat keluar tidak di kalangan contoh sebelumnya kami? Ya, ini% d. Jadi anda mungkin boleh membuat kesimpulan apa ini melakukan, terus-terang, berdasarkan apa blok Gores lakukan. Tetapi sekali lagi dalam C, kita hanya perlu untuk menjadi sedikit lebih khusus apabila ia datang untuk menyatakan diri. Jadi printf ("% d \ n"). Well, kebanyakan yang kita boleh buang seperti biasa. Petikan-petikan hanya bermakna ia adalah rentetan, backslash n adalah hanya satu garis baru. Jadi perkara yang baru sahaja di sini adalah% d. Dan segala yang ada adalah satu placeholder. % D akan untuk menunjukkan nombor perpuluhan. Dan% d cara komputer, meletakkan nombor perpuluhan di sini. Nah, apa nombor yang anda mahu letakkan di sana? Well, seperti yang anda mungkin boleh membuat kesimpulan, selepas koma kita katakan kaunter, itulah nama pembolehubah yang kita diisytiharkan atau mencipta garisan pasangan awal. Jadi ini adalah hanya cara memasang dalam pembolehubah ke dalam C rentetan dinamik. Disebabkan oleh Sebaliknya, jika saya telah sebaliknya melakukan sesuatu seperti ini, printf ("kaunter"), apa yang akan ini program dan bukannya melakukan, mungkin? Ia benar-benar akan mencetak "kaunter". Yang manakah bukan kesan yang saya mahu. Saya perlukan untuk menggantikan beberapa nilai berangka. Jadi kita akan melihat bahawa fungsi itu, seperti printf, tidak boleh mengambil sahaja hujah tunggal, seperti "Hello dunia". Mereka boleh mengambil unquote quote koma, dan kemudian beberapa pembolehubah yang akan mendapatkan dimasukkan ke dalam, seperti yang kita akan lihat rentetan sebelumnya melalui ruang letak tanda%. Nah apa tentang ungkapan Boolean? Ungkapan Boolean nilai-nilai ini, benar atau palsu. Ya atau tidak. 1 atau 0. Atau mematikan. Jadi Gores mereka kelihatan seperti ini, dan notis bahawa blok bawah sini adalah sebenarnya konjungsi dua kecil blok. Jadi saya jenis diseret dan dilepaskan tiga kepingan teka-teki bersama-sama untuk membuat bahawa sekeping teka-teki yang lebih lama di sana supaya saya dapat menyampaikan idea yang ingin saya x menjadi kurang daripada y dan y menjadi kurang daripada z. Dan jadi saya boleh menterjemahkan kedua-dua baris yang berasingan seperti berikut. Yang atas boleh sangat trivially diterjemahkan kepada C, dengan hanya x hanya cara kita berkata, dalam C, memberikan saya akses kepada fungsi yang orang lain menulis. Dan dalam kes ini, saya peduli kerana saya mahu printf. Sekarang kita mendapat int utama (tidak sah). Jadi ini adalah salah satu daripada perkara-perkara ini, terus-terang, bahawa pada hari 0, cukup banyak saya telah jenis keluar zon, kerana ia hanya tidak menarik intelek, beberapa sintaks. Tetapi untuk sekarang tahu bahawa fungsi, atau dikenali sebagai prosedur, atau kaedah, secara umumnya menghasilkan beberapa nilai. Mereka melakukan sesuatu. Mereka tampil dengan jawapan. Mereka menghasilkan output. Jadi int sebelah utama adalah hanya cara trengkas kita berkata bahawa fungsi ini, prosedur ini, akhirnya akan untuk memberikan anda kembali nombor. Dan mengapa yang, kita akan kembali. Utama hanya standard lalai dunia untuk lalai fungsi yang akan dilaksanakan dalam program C apabila anda menjalankan ia. Terbatal hanya bermakna perkara ini, utama, tidak mengambil hujah, dalam kes ini. Jadi saya yang super jelas. Tiada rentetan di sana, tidak ada koma. Terbatal bermakna tiada hujah utama. Sekarang akhir sekali, bersyukur, dua baris terakhir biasa. Di dalam pendakap kerinting kita mempunyai printf dan kita mempunyai pulangan. Dan pulangan adalah jenis malang bahawa kita perlu meletakkan ia di sana, kerana dalam kes ini, ia tidak melakukan semua itu banyak faedah. Tetapi dalam program komputer, apabila fungsi mengembalikan 0, yang bermakna semuanya berjalan dengan lancar. Tiada apa-apa silapnya. Sebaliknya, jika fungsi mengembalikan 1, atau 1 negatif, atau 1.337 negatif, atau beberapa nombor rawak seperti itu, bahawa secara amnya bermaksud bahawa kesilapan sebenarnya telah berlaku. Jadi, jika anda berada pada Mac atau PC anda, jika anda pernah melihat beberapa mesej menjengkelkan kerana komputer anda telah terhempas atau dibekukan, dan ada mesej ralat samar, dan kemudian beberapa kod, seperti sistem kod 1,2,3,4, nombor beberapa, yang biasanya adalah terperinci tidak perlu untuk memberitahu kebanyakan kita manusia, tetapi itu adalah apa yang sesetengah fungsi atau beberapa program sebenarnya telah dipulangkan, nilai bukan sifar. Dan manfaat ini adalah bahawa 0 bermakna semua serta, dan maka anda dasarnya mempunyai nombor terhingga perkara yang boleh pergi salah. Itulah sebabnya mereka memilih 0 untuk kebaikan dan nilai bukan sifar untuk buruk, seperti yang kita tidak lama lagi akan melihat. Jadi mari kita pergi ke hadapan dan menulis ini. Jadi ingat bahawa hari lain saya digunakan Mac saya untuk membuka tetingkap terminal, dan kemudian saya membuka program teks, seperti TextEdit, dan saya mula menulis beberapa kod. Baik yang halus. Tetapi pengalaman anda akan menjadi berbeza pada Mac, atau pada komputer Solaris, sebuah komputer Linux, apa jua operasi sistem anda berlaku untuk menggunakan. Dan sebagainya dalam kursus ini, apa yang kita sebaliknya untuk menggunakan sesuatu dipanggil Appliance CS50. Jadi Appliance CS50 adalah sekeping dimuat turun perisian yang membolehkan anda untuk menjalankan sistem operasi Linux dipanggil, khusus Fedora Linux, pada Mac atau PC anda sendiri. Dan anda melakukan ini dengan memuat turun sesuatu yang dipanggil hypervisor. Jadi semua ini akan didokumenkan dalam set masalah 1. Dan anda akan dipandu ke arah apa yang anda perlu memuat turun. Tetapi keputusan akhir, sama ada anda mempunyai Mac atau PC, anda memuat turun beberapa perisian percuma. Anda kemudian memuat turun Appliance CS50, dan anda memberitahu bahawa perisian percuma - hypervisor - untuk menjalankan Appliance CS50 dalam tetingkap pada komputer anda. Dan apa yang berlaku ini. Saya kini telah, notis di sini, apa yang kelihatan sebagai desktop persekitaran. Dan biarlah saya sebenarnya mengecilkan tetingkap tunggal ini. Jadi ini sekarang ialah Mac saya, dengan tingkap sedikit di sini, dan di dalam tetingkap ini berlaku untuk menjadi benar-benar sistem operasi yang berbeza. Sesungguhnya ada menu ini mula turun di sini, mengingatkan Windows, yang mempunyai sekumpulan keseluruhan menu sub, termasuk pautan untuk pengguna CS50, Dropbox, dan sebagainya. Dan apa yang persekitaran ini sekarang adalah persekitaran standard bahawa kita semua kini boleh menggunakan, supaya tidak kira apa yang anda komputer, apa yang anda telah dipasang di atasnya, apakah versi Mac OS atau Windows anda menjalankan, kita semua kini mempunyai persekitaran yang sama. Dan kini dalam persekitaran ini kita boleh mula menulis beberapa kod. Jadi, saya akan pergi ke hadapan dan membuka program yang dipanggil gedit. Ini adalah setanding dengan notepad.exe, atau TextEdit pada Mac. Dan ini hanyalah teks menyunting sangat mudah program yang kelihatan seperti ini pada pandangan pertama. Sekarang di atas, saya mempunyai palet putih, di bawah saya mempunyai tetingkap ini hitam yang mengatakan jharvard @ perkakas. Dan itu kerana akaun pengguna yang kita pra-dicipta untuk semua orang dipanggil John Harvard. Beliau mempunyai folder di mana semua fail beliau akan pergi, dan di sini adalah di mana kita boleh mula menulis beberapa kod. Jadi biarlah saya teruskan di sini dan mengezum masuk hanya sedikit, dan saya akan lakukan # termasuk , int utama (tidak sah), dan maka saya akan melakukan printf ("hello dunia") ; Kembali 0. Sekarang ini adalah semua agak hitam dan putih. Biar saya pergi ke hadapan dan melakukan satu perkara untuk mengajar gedit apa yang saya sebenarnya melakukan. Biar saya pergi ke Save As. Saya akan memilih di sebelah kiri di sini jharvard. Jadi sekali lagi, walaupun anda tidak pernah digunakan Linux sebelum ini, terus terang hari ini, kesemua mereka devolving ke dasarnya jenis yang sama antara muka - Mac OS, Windows, dan Linux. Jadi saya memilih folder home jharvard sini. Dan saya akan untuk menyelamatkan fail ini sebagai hello.c. Jadi, di bahagian paling atas, saya menaip hello.c; menamakan C program dengan lanjutan c apa amalan biasa. Dan saya memukul Simpan. Dan kini apa yang baik adalah bahawa saya telah berkesan diajar gedit, bahawa ini adalah satu program C. Perhatikan bahawa teks saya hitam dan putih kini warna berkod, atau sintaks menekankan, yang hanya menarik perhatian saya kepada berbeza bahagian semantik program. Di sebelah kiri sana, program saya mendapat lebih kompleks, saya akan mempunyai ringkasan semua perkara yang saya telah menulis. Jadi itulah ia di sana. Jadi biarlah saya sekarang mengezum keluar dan pergi ke tetingkap terminal ini. Jadi ini mungkin baru kepada ramai orang. Jika anda tidak pernah menggunakan persekitaran baris arahan, anda tidak telah digunakan DOS, atau anda tidak pernah menggunakan Linux, atau anda tidak pernah dibuka Mac OS anda tetingkap terminal, terdapat banyak perkara yang anda boleh lakukan dengan GUI, seperti menunjuk, dan klik, dan mengheret, dan menjatuhkan, dan sebagainya, tetapi secara umumnya - pasti dalam dunia sains komputer - menggunakan baris arahan, di mana anda tidak mempunyai tetikus anda secara amnya, anda hanya perlu keyboard anda, sebenarnya banyak lebih kuat daripada antara muka, sekali anda mendapat acclimated untuk pelbagai arahan-arahan. Dan anda jenis bebas diri anda perlu ke titik dan klik pada segala-galanya. Jadi dalam gedit kami akan menyusun mempunyai yang terbaik daripada kedua-dua dunia. Kita boleh seret dan lepaskan teks, kita dapat melihat ia bagus dan warna berkod. Tetapi apabila ia datang masa untuk menjalankan program kami, kami akan kadang-kadang hanya menggunakan tetingkap kecil di sini. Jadi, saya akan pergi ke hadapan dan melakukan ini. Dalam tetingkap bawah hitam dan putih, saya akan pergi ke hadapan dan menulis dilafaz. Dan dilafaz adalah nama pengkompil. Ia adalah satu program yang menukarkan kod sumber saya ke dalam, jadi, kod objek. 0 dan 1s, yang kita lihat secara ringkas minggu lepas. Memanggil dari minggu lepas, kami berjanji bahawa kami akan pergi dari sesuatu seperti ini - kita diperlukan untuk menjadi sesuatu seperti ini - dan ini pastinya bukan sesuatu yang manusia akan untuk melakukan secara manual. Jadi sebaliknya kita pergi untuk menggunakan program, dan bahawa program Kes ini dipanggil dilafaz. Dan nama program saya adalah hello.c. Jadi untuk menyusun hello.c dari kod sumber ke dalam kod objek, atau 0 dan 1s, ia harus mencukupi untuk hanya melakukan ini dan tekan Enter. Okay, apa-apa seolah-olah telah berlaku. Tetapi saya tahu sekarang, atau dari minggu lepas, bahawa nama lalai program, apabila ditulis dalam C, bodoh dipanggil a.out. Nama yang paling tidak menarik, anda boleh datang dengan. A adalah huruf pertama abjad, daripada apa yang outputted, tetapi jadi. Ini adalah program saya, dan kini dot slash, seperti yang kita akan lihat, adalah sebenarnya hanya sejenis ciri keselamatan, kerana a.out adalah program saya menulis. Ia tidak datang dengan komputer saya, ia adalah bukan dalam Program Files. Ia bukan dalam folder Aplikasi Mac OS. Saya perlu jelas super dengan komputer, dan mengatakan program ini, a.out, adalah dalam folder semasa, direktori semasa. Dan cara anda mewakili ini dalam persekitaran seperti ini dot mewakili apa jua folder yang anda buat. Dan sebagainya. / Hanya bermakna a.out dijalankan dalam folder semasa. Dan saya menjalankan ini dengan Enter, dan Voilà, program saya yang pertama. Sekarang mari saya mengambil langkah ke belakang. Tetingkap ini sedikit kecil, dan menyedari bahawa bawah kiri perkakas sini adalah satu lagi ikon. Satu adalah Chrome, yang sepatutnya menjadi agak biasa, hanya web pelayar di dalam perkakas. Dan ini ikon hitam dan putih hanya satu tetingkap terminal yang lebih besar. Jadi, jika ia mendapat sedikit menjengkelkan untuk jenis mempunyai hanya kecil ini keping sedikit tingkap dengan yang berinteraksi dengan program-program, kita bukannya boleh melakukan ini. Dan sekarang mari saya mula menaip beberapa lama lagi menjadi arahan biasa. ls. Jadi ls adalah arahan untuk penyenaraian. Jadi dalam Mac OS atau Windows, anda biasanya akan menggandakan-klik folder dan kemudian, Voilà, anda lihat semua pelbagai fail dan folder. Dalam persekitaran baris arahan, di mana anda hanya boleh menaip arahan atau teks, ls adalah bersamaan. Jadi menunjukkan kepada saya apa yang dalam direktori ini. Sekarang terdapat sekumpulan barangan di sini bahawa kedua-dua sedikit biasa dan tidak biasa sedikit. Tetapi notis yang sama seperti Windows dan Mac OS, jharvard mempunyai folder desktop. Jadi mana-mana ikon yang berada di desktop saya berlaku berada dalam folder itu. Ada folder muat turun, barangan yang Chrome mungkin meletakkan di sana. Dropbox. Jadi perkakas datang dengan sokongan terbina dalam untuk Dropbox supaya lebih semester, anda boleh sync dengan Dropbox anda akaun supaya semua program anda disokong. Mereka diakses pada komputer anda yang lain. Jika apa-apa yang pernah berlaku dengan perkakas ini, anda boleh sangat mudah pulih dari Dropbox. Jadi folder yang ada untuk itu. Ada dua fail yang saya buat - hello.c dan a.out. Dan kemudian ke kanan ada beberapa folder yang lain bahawa kami akan sampai ke ke arah akhir semester, dengan web pengaturcaraan. Jadi apabila saya lakukan. / A.out, Masukkan, yang berkata pergi dalam direktori saya dalam, direktori semasa, dan menjalankan program yang dipanggil a.out di sana. Baiklah, jadi itulah bagus dan baik, tetapi ia tidak semua yang menarik untuk menulis satu program yang dipanggil membantu a.out. Jadi, kita sebenarnya boleh melakukan ini sedikit berbeza. Jadi, daripada dilafaz hanya berjalan, hello.c, mari kita menambah apa yang dipanggil hujah baris arahan. Jadi hujah baris arahan, atau suis dalam kes ini, hanya satu lagi perkataan atau frasa yang anda taip di segera selepas program yang anda ingin jalankan. Jadi dalam kes ini, dilafaz adalah program yang saya mahu untuk menjalankan,-o cara output fail yang tidak lagi dipanggil a.out. Fail output dipanggil hello, dan berbuat demikian dengan menyusun perkataan terakhir pada baris, hello.c. Jadi, dalam jangka pendek, ini adalah peningkatan yang sangat kecil, di mana bukannya mempunyai fail ini a.out bodohnya dinamakan, Saya kini boleh melakukan dilafaz-o hello, maka hello.c, dan kemudian tekan Enter. Tiada apa-apa seolah-olah berlaku, tetapi sekali lagi sama seperti dengan 0 - apabila apa-apa seolah-olah berlaku yang bermaksud apa-apa yang salah berlaku - jadi mari kita lakukan ls sekarang, Masukkan, dan sesungguhnya aku kini mempunyai program hello. Jadi jika saya menaip hello sekarang, arahan tidak dijumpai. OK,. /. Jadi sebenarnya betul. Jadi kerana program ini saya menulis, dan ia tidak datang dengan komputer, / hello, Masukkan, ertinya Saya kini berjalan hello. Jadi itulah ia di sana. Sekarang apa yang akhirnya kita akan mendapat lebih banyak baris arahan hujah-hujah yang membolehkan kita untuk melakukan lebih banyak, tetapi hanya untuk orang-orang untuk yang ini mungkin topi lama, izinkan saya sebenarnya pergi ke direktori di sini dan hanya memberi anda penggoda bagaimana lagi kita boleh pergi tentang melaksanakan hello dunia. Biar saya pergi ke sini, dan saya akan membukanya. Jadi sebenarnya, saya akan menjelaskan apa yang saya lakukan, jadi ini adalah berguna. Biar saya kembali. Jadi saya telah melakukan ini lama. Jadi notis lebih di sebelah kanan terdapat beberapa direktori yang aneh bernama source1m dan source1w. Ini adalah konvensyen hanya bodoh yang kita gunakan. Source hanya bermakna kod sumber, 1 bermakna ini adalah satu minggu, dan m bermakna ia adalah hari Isnin, dan w bermakna ia Rabu. Jadi apa yang samar sana. Ia hanya notasi trengkas. Ini perkara yang biru folder, atau dikenali sebagai direktori. Saya mahu pergi ke folder yang sekarang, dan pada komputer biasa Saya hanya boleh klik dua kali pada ikon folder dan ada semua fail saya. Tetapi dalam persekitaran baris arahan, saya boleh tidak cukup melakukan itu, jadi sebaliknya, saya perlu untuk menukar direktori secara manual. Jadi jika saya menaip cd dan kemudian source1m, Masukkan, notis bahawa segera saya, perkara yang berwarna putih di sebelah kiri, hanya berubah. Dan sesungguhnya, apabila ia hanya berkata kurungan dan kemudian membelok-belok sedikit, simbol tilde, yang hanya bermakna saya dalam direktori rumah John Harvard, My Documents, beliau fail peribadi. Tetapi sekarang dalam kurungan ia berkata ~ / source1m. Ini hanya bermaksud saya di dalam folder yang dipanggil source1m itulah dalam direktori home John Harvard. Jadi jika saya kini mahu untuk menyenaraikan fail dalam folder ini, mudah soalan, saya menaip hanya ls. Dan kini saya melihat semua fail-fail yang saya pra-dicipta untuk hari ini kuliah, semua yang, atau kebanyakan yang, berlaku berakhir pada c. Jadi biarlah saya pergi ke hadapan sekarang dan menjalankan gedit program yang dipanggil holloway.c yang ditulis oleh penggodam beberapa rawak di Internet, yang kelihatan sedikit seperti ini. Dan kita tidak akan pergi melalui satu ini dalam mana-mana terperinci, tetapi bagi mereka yang lebih selesa, khususnya, jika anda mahu mengambil meneka apa yang program ini tidak di sini. Yakinlah, sama ada anda kurang atau lebih selesa, kita tidak mendapat jenis ini perkara menjelang akhir semester ini. Ini adalah apa satu contoh pertandingan C dikelirukan, yang cara menulis program yang paling samar mencari anda mungkin boleh mengalahkan orang pintar lain, yang sama cuba untuk menulis perkara-perkara dan menunjuk-nunjuk bahawa mereka boleh menulis perkara-perkara yang lebih samar daripada anda. Jadi ini bukanlah satu contoh program yang ditulis dari perspektif gaya, ini adalah satu contoh program yang menang pertandingan, bagi orang-orang yang cuba untuk kabur dan abstrak. Jadi, jika kita menjalankan perkara ini, izinkan saya pergi ke tetingkap terminal saya, jadi untuk bercakap. Jadi ini persekitaran hitam dan putih dipanggil tetingkap terminal umumnya. Biar saya pergi ke hadapan dan menyusun. Saya tidak akan menggunakan dilafaz, kerana program ini adalah sedikit samar dan ia memerlukan berbeza pengkompil, satu dipanggil GCC. Tetapi ia melakukan perkara yang sama. Ia mengambil kod sumber kepada kod objek. Dan kini jika saya menjalankan a.out, bahawa program anda hanya melihat adakah ini. Jadi rakan-rakan bahawa pada tahun itu memenangi pertandingan itu. Walau bagaimanapun, kita tidak akan ke arah itu, per se. Jadi mari kita sebenarnya cuba sekarang mengusik selain apa yang kita boleh lakukan dengan blok-blok binaan asas untuk membuat lebih banyak program yang menarik. Jadi kita telah menulis program, kami telah menjalankan program. Sekarang kita sebenarnya boleh memudahkan dan tidak lagi perlu menulis dilafaz perkataan di prompt. Ia ternyata sebagai program kami mendapat lebih samar, kita boleh, atau lebih kompleks sebaliknya, kita sebenarnya boleh menjalankan arahan ini. Jadi biarlah saya kembali ke direktori rumah saya, jadi untuk bercakap, izinkan saya membuang - rm adalah arahan remove -: saya akan untuk membuang fail dipanggil a.out dan hello. Dan kini notis dalam persekitaran baris arahan, sama seperti dalam GUI, anda akan mendapat digesa. Saya tidak boleh klik butang walaupun, saya perlu menaip y bagi ya, y bagi ya. Dan kini jika saya menaip ls lagi, notis bahawa mereka hijau program - a.out dan hello - yang hilang. Berhati-hati rm. Ia boleh melakukan perkara-perkara buruk, seperti yang anda boleh dengan mengheret perkara untuk sampah anda. Jadi sekarang mari kita pergi ke hadapan - dan saya boleh melakukan ini - dilafaz-o hello, hello - Saya sudah bosan menaip arahan ini. Walaupun saya menaip sedikit dengan cepat. Jadi kita bukannya boleh lakukan membuat hello. Jadi membuat tidak pengkompil. Ia hanya satu program yang mesra yang datang dengan Linux, dalam hal ini kes - sistem operasi - yang mengautomasikan proses menyusun program. Jadi, daripada mengingati dilafaz-o nama fail dan maka sebagainya, terutama sekali mereka mendapat garisan panjang dan lagi, saya hanya boleh menulis. Dan ini akan meludah keluar sekumpulan keseluruhan barangan yang akhirnya kita akan melihat semester ini. Tetapi notis sekarang jika jenis ls I, hello kembali dalam direktori saya. Dan sesungguhnya aku boleh berlari dengan / hello. Jadi membuat hanya mengautomasikan proses menjalankan apa yang, dalam kes ini, yang lebih lama, arahan yang lebih kompleks. Jadi kita akan mula menggunakan membuat, hanya kerana ia banyak lebih mesra pengguna. Tetapi sekarang mari kita melakukan program yang lebih menarik daripada sekadar bertanya khabar. Jadi dalam program ini kita telah ditulis setakat ini terdapat utama. Itu hanya perkara lalai yang bermula segala-galanya di luar. Tetapi terdapat fungsi-fungsi lain di luar sana juga, dan stdio.h adalah perkara yang kita lihat di atas kita fail sebelum ini, dan itulah apa yang dikenali sebagai perpustakaan standard. Dalam perpustakaan standard adalah sekumpulan keseluruhan fungsi bahawa orang lain menulis, dan kita boleh mula menggunakan ini fungsi untuk menulis lebih program yang menarik diri. Jadi biarlah saya kembali kepada perkakas. Saya akan tutup tetingkap terminal. Saya akan menutup perkara yang kita menulis sebelum ini, dan hanya pergi ke hello.c, dan notis sekarang saya boleh melakukan yang berikut. Hello dunia tidak semua yang menarik, saya ingin memperibadikan program ini untuk diri sendiri. Jadi, daripada berkata dunia, saya akan pergi ke hadapan dan berkata - Saya boleh menaip Daud - tetapi ini benar-benar adalah jenis asasnya sama. Tetapi mari kita mencuba idea ini placeholder. Ingat bahawa dalam C, sebaliknya dalam printf, kita mempunyai ini ruang letak, dan terdapat lebih daripada hanya% d. Jadi% d adalah, cek kewarasan cepat. Okay, nombor perpuluhan, itu sahaja. Digit perpuluhan, itu semua. Jadi c%, seperti yang akan kita hadapi, akan menjadi watak. Letakkan watak di sini, surat melalui z, simbol atau tanda baca. Satu watak tunggal, f%, sesiapa tahu dari bahasa lain? Jadi nilai titik terapung. Satu nombor nyata. Jadi bukan nombor perpuluhan - ini adalah sebenarnya nombor nyata dengan titik perpuluhan, dan beberapa bilangan digit ke kiri dan kanan ia. % S, tali. Bahawa salah satu yang kita akan lihat agak kerap. Rentetan A, sekali lagi, hanya satu perkataan, frasa, satu turutan watak individu. Dan akhir sekali, LLD? Jadi ini adalah lebih kes sudut. Long, perpuluhan panjang. Jadi jika anda tidak mahu hanya bilangan yang besar ini, anda mahu nombor yang lebih besar, anda akan perlu untuk menentukan komputer bahawa ia adalah saiz tertentu. Jadi mari kita tweak ini sedikit. Sebaliknya daripada kod hanya keras dalam Daud, izinkan saya sedikit dinamik mengatakan% s. Jadi meletakkan% s di sini, yang merupakan placeholder untuk rentetan. Maka biarlah saya melakukan koma, dan kemudian "Daud" di sini. Sekarang ini tidak semua yang intelektual yang menarik, kerana semua yang saya lakukan sekarang adalah benar-benar mewujudkan lebih banyak kerja untuk komputer. Bukannya memberitahu komputer melakukan ini semua sekali gus, saya kini mengatakan melakukan ini dan memasukkan rentetan di sini akhirnya, koma, di sini adalah bahawa rentetan. Jadi ini bukan peningkatan yang lebih baik, tetapi ia sekurang-kurangnya satu langkah ke arah program yang lebih menarik. Kerana sekarang, biarlah saya pergi ke hadapan dan membuat tetingkap ini sedikit lebih besar, izinkan saya pergi ke hadapan dan menjalankan membuat hello. Dan kini, / a.out tidak bekerja, mengapa? Baiklah, kini ia dipanggil hello. Jadi sekali lagi membuat, dan juga dilafaz dengan o, dinamakan semula program untuk menjadi sesuatu yang lebih menarik. Dan Voilà: kini ia kata hello Daud. Baiklah, masih bodoh program. Jadi sekarang mari kita sebenarnya kembali di sini dan memperkenalkan tanggapan pembolehubah. Ia tidak akan menjadi baik jika saya boleh mengisytiharkan pembolehubah yang jenis adalah rentetan? Dan nilai pembolehubah sebenarnya datang dari pengguna dirinya. Jadi sewenang-wenangnya, saya akan memanggil s ubah saya, yang hanya konvensyen biasa apabila anda mempunyai satu pembolehubah dipanggil rentetan. Saya akan untuk melakukan tanda yang sama, dan kemudian saya akan memanggil fungsi dipanggil GetString. Jadi GetString bukanlah sesuatu yang datang dibina ke dalam C. Ia fungsi bahawa kakitangan CS50 menulis, benar-benar hanya untuk ini beberapa minggu pertama, untuk memudahkan proses mendapat input pengguna dan mendapat input pengguna dalam bentuk tali, atau nombor, dan apa-apa. Jadi GetString adalah seperti printf, tetapi jelas bukannya mencetak ia akan melakukan apa namanya mengatakan, dapatkan rentetan. Tetapi untuk menggunakan GetString, kita akan perlu untuk membuat perubahan di sini, di luar ini. Jadi intuitif, program ini, diharapkan, akan entah bagaimana mendapatkan rentetan dari pengguna, dan kemudian apa yang ia akan lakukan dengan tali itu, yang dipanggil s? Ia hanya akan mencetak, betul-betul? Masih tidak program merangsang kerana semua ia akan lakukan adalah palam dalam nilai yang ke mana% s mengatakan ia harus pergi. Jadi biarlah yang sekurang-kurangnya melihat ini dalam tindakan. Biar saya menjimatkan dan zum keluar. Sekarang dalam tetingkap terminal saya turun sini, sepotong kecil satu, izinkan saya sekali lagi melakukan membuat hello. Okay, dan ah, menyumpah, saya mendapat sekumpulan keseluruhan kesilapan. Biar saya tatal ke atas, dan kita lihat pertama kami - jadi mari kita sebenarnya melakukan ini dalam tetingkap yang lebih besar supaya anda boleh melihat bagaimana teruk saya diskrukan sehingga - supaya membuat hello. Okay, itu bencana, kan? Saya telah menulis tiga baris kod, dan ia memberikan saya 12 kesilapan. Jadi mengapa ini? Jadi mujurlah, acap kali apabila anda melihat banyak, banyak kesilapan meludah keluar sekali gus, ia adalah benar-benar hanya kerana anda telah keliru komputer di sini. Dan ia masih keliru dengan masa ia mendapat ke sini. Dan sebagainya ia hanya mula tersandung, dan penghalang, dan meludah keluar lebih banyak barangan menakutkan daripada sebenarnya terpakai. Jadi secara amnya, sentiasa bermula dengan satu teratas. Jadi sangat atas contoh yang paling merah, mesej ralat ini. Gunakan tali pengecam tidak diisytiharkan, adakah saya bermakna standard dalam? Saya tidak. Saya maksudkan tali, tetapi ini adalah kerana, terlalu, rentetan perkataan bahawa saya terus menggunakan lisan sebenarnya tidak wujud dalam C sama ada. Ia adalah sesuatu yang kita akan gunakan hanya untuk minggu pertama atau dua sini, tetapi ia wujud dalam fail yang dipanggil cs50.h. Jadi untuk sekarang, tahu bahawa terdapat ini perpustakaan lain bahawa kakitangan menulis, jadi ia telah ditulis lebih baru-baru ini daripada stdio.h. Tetapi di dalam cs50.h adalah definisi, sinonim macam, yang mencipta rentetan ini perkataan. Jadi sekarang mari saya kembali ke tetingkap terminal saya. Saya akan membersihkan keadaan kucar-kacir ini keseluruhan oleh Ctrl-L. Kami akan hanya lap segala-galanya bersih, dan saya akan pergi ke hadapan dan membuat hello lagi, Enter. Jadi apa yang telah berlaku sekarang? Sekarang semua orang-orang kesilapan pergi. Jadi apa yang telah saya benar-benar dilakukan? Saya baru sahaja diajar komputer bahawa rentetan wujud, dan ia dalam fail yang dipanggil cs50.h. Jadi berhenti mengadu, kerana sekarang anda tahu di mana untuk mencari deklarasi bahawa fungsi jadi untuk bercakap. Jika ia wujud di dunia. Jadi sekarang saya akan pergi ke hadapan dan menjalankan hello. Saya seolah-olah mempunyai gelung tak terhingga, apa-apa yang berlaku. Jadi saya perlu untuk menaip sesuatu di sini, betul-betul. Baris pertama kod dalam program saya telah GetString. Jadi ia benar-benar menunggu bagi saya untuk mendapatkan rentetan. Jadi dalam erti kata bahawa ya, ia adalah gelung tidak terhingga. Rupa-rupanya dalam GetString adalah kelakuan lalai bahawa kita menulis - kakitangan - yang hanya mengatakan tunggu dan tunggu dan tunggu dan tunggu dan tunggu, sehingga pengguna memberikan anda rentetan dengan menaip sesuatu. Jadi biarlah saya pergi ke hadapan dan jenis dalam D-a-v - i-d, Masukkan. Dan ada ia adalah, hello Daud. Sekarang ini kelihatan seperti ia hanya perbuatan? Biar saya pergi ke hadapan dan menaip Tommy. Masukkan, okay, seolah-olah bekerja. Kerja untuk Rob, kerja-kerja untuk Zamyla, kerja-kerja untuk - okay. Jadi ia akan bekerja, kemungkinan besar. Jadi ia perlu mencetak apa sahaja yang kita sebenarnya memberikan, dan kita boleh menjadi sedikit sukar di sini. Mari kita lihat jika kita melakukan sesuatu seperti hello. Boleh pergi ke sini, mari kita lihat, salinan, pes. Saya tidak akan dapat tampal bahawa banyak kali di sini. Paste, okay, Shift + Ctrl + V. Jadi apa yang boleh berlaku yang buruk di sini? Okay, jadi, segfaults. Jadi beberapa anda dengan latar belakang terlebih dahulu akan tahu bahawa secara amnya, memberi komputer banyak input apabila mereka mungkin tidak bermakna untuk menerima nama panjang seperti ini - buruk perkara yang berlaku. Malah, dalam dunia web, juga, ini berlaku agak sedikit, di mana apabila anda mereka bentuk laman web, apabila anda merekabentuk Facebook, anda perlu membuat keputusan sewenang-wenangnya sehingga hadapan, seperti berapa lama seseorang Facebook username menjadi? Atau berapa lama nama pertama seseorang akan menjadi? Berapa lama nombor telefon seseorang akan menjadi dan sebagainya. Dan jika pengaturcara membuat andaian buruk, program memecahkan kerana anda cuba memberikan mereka lebih banyak output, input yang lebih sebaliknya, daripada mereka mempunyai memori. Atau RAM diperuntukkan bagi, dan jadi jika sekarang saya tekan Enter, program yang benar-benar bekerja, kerana kita berada di perpustakaan dan kita sebenarnya menjangkakan kes ini tertentu. Tetapi pasti semester ini, anda akan menulis sekurang-kurangnya satu program yang akan mengatakan kata-kata ini. Ingat ini minggu dari sekarang, mungkin dua hari dari sekarang. Segmentasi bersalah adalah satu perkara yang buruk. Ia akan merujuk kepada melakukan sesuatu anda bahawa komputer tidak menjangka. Dan dalam kes itu, anda, pengaturcara, tidak menjangka. Banyak suka apa ini longgokan stoking, terdapat pelbagai kes sudut kita boleh temui. Begitu juga dalam program jika anda tidak menjangka berapa lama nama seseorang akan menjadi. Atau bagaimana jika saya mempunyai pengguna yang berniat jahat, dan nama beliau ialah sebenarnya cukup singkat, tetapi mereka hanya cuba kepada keadaan huru-hara dengan saya? Apa yang akan menjadi tingkah laku program saya? Nah, dalam kes itu, sesuatu yang sebenarnya mungkin kemalangan. Jadi mari kita buat ini. Dalam 90 minit, ini adalah satu masa yang lama buruk untuk melakukan sains komputer. Mengapa tidak kita masuk ke dalam tabiat mengambil lima minit memecahkan di sini, dan apabila kita kembali, kita akan menyelam ke dalam beberapa program-program yang lebih kompleks dan menarik? Lima minit. Semua hak. Jadi satu komen cepat. Saya diberitahu bahawa walaupun ini adalah pada skrin sebelum ini, apa yang keluar dari mulut saya adalah cs50.net/rsvp. Ini adalah betul. cs50.net/lunch. Jadi sekarang anda boleh cuba RSVPing ini di / makan tengah hari. Tetapi mari kita melakukan ini sekarang. Jadi ini telah menjadi super cepat, super baru bagi banyak orang. Topi lama bagi sesetengah orang. Jadi mari kita memundurkan hanya seketika, dan melihat bagaimana kita dapat dunia ini output hello hanya seketika lalu. Jadi pertama, terdapat ini Appliance CS50. Sekali lagi, sekeping masalah perisian, menetapkan 1 akan memberitahu anda bagaimana untuk memuat turun, di mana untuk memuat turun, apa yang klik dan sebagainya. Dan kemudian apabila anda mengikuti arahan, anda akan dapat untuk memaksimumkan tetingkap anda, dan Mac atau PC anda akan kelihatan sesuatu yang kecil seperti ini. A latar belakang hitam, folder rumah di atas di mana semua fail anda pergi, sampah boleh di sebelah kiri atas, menu di bawah. Jadi sekali lagi, agak serupa dalam semangat untuk Mac OS atau Windows, walaupun ia berlaku untuk menjadi Linux. Jadi apa adakah kita akan lakukan? Nah, kita mula menulis program. Dan ingat dari minggu lepas bahawa semua yang diperlukan untuk menulis program adalah editor teks yang mudah, seperti Notepad atau TextEdit. Terus terang, anda juga boleh menggunakan Microsoft Word. Tetapi perkara-perkara buruk akhirnya akan berlaku, kerana itulah yang sangat berat tangan penyelesaian untuk menulis program, ditambah ia akan menyimpannya dalam format fail yang salah. Tetapi ia hanya editor teks, pemproses perkataan, semua itu diperlukan untuk menulis program. Jadi dalam Appliance CS50, kita boleh melakukan ini dalam satu cara yang mudah. Kita hanya boleh klik pada ikon ini di sebelah kiri bawah. Dan sekali lagi, masalah menetapkan 1 akan menasihati anda ini, dan Voilà - anda mendapat ini antara muka yang hitam dan putih di mana kita boleh bermula penulisan kod. Jadi mari kita mulakan menulis program yang mudah super lagi. Saya akan pergi ke Fail, Simpan, dan saya akan memanggil ini, katakan, hello2.c. Dan saya hanya memberitahu ia dengan mengklik pada jharvard, meletakkan ia dalam direktori rumah, saya tidak benar-benar mengambil berat mana satu ini pergi. Dan kemudian Simpan. Dan sekarang saya boleh mula menulis program saya. Dan saya masih ingat dari awal bahawa saya perlu menulis int utama (tidak sah). Zum masuk di sebelah kiri atas. Dan kemudian saya mahu mengatakan printf, mengambil dua. Dan kini newline, quote rapat, tutup kurungan, koma bernoktah. Dan kemudian saya pergi ke sini untuk tetingkap terminal saya itu tertanam dalam gedit, hanya untuk kemudahan. Dan saya akan pergi ke hadapan dan menulis membuat hello, tetapi tidak hello sahaja, hello2. Jadi fail saya dipanggil hello2.c. Saya fail itu harus dipanggil hello2, dalam kes ini. Keparat, apa yang saya lakukan salah? Baiklah, jadi saya jelas ditinggalkan baris, jika anda masih ingat apa program-program sebelumnya kelihatan seperti. Tetapi mari kita lihat jika kita tidak boleh mengusik ini selain. Malangnya, kebanyakan orang yang menulis program-program yang kita menulis program tidak memudahkan semua perkara yang baik. Jadi kita mempunyai jenis agunan atas apa yang tidak cukup membuat rasa di sini dan lihat jika kita boleh memikirkan apa yang salah. Baris yang sangat pertama ada mengatakan tersirat mengisytiharkan C perpustakaan fungsi printf dengan int jenis. OK, saya memahami sebahagian daripada itu. Tetapi ia seolah-olah merujuk kepada hakikat bahawa saya telah digunakan di printf salah, entah bagaimana. Dan apa yang rasa adalah salah? Saya hanya tidak mengajar komputer bahawa ia adalah dalam fail dipanggil stdio.h. Sekarang saya hanya mempunyai hanya menghafal sekarang bahawa printf adalah dalam stdio.h, dan sememangnya ada akan lain fungsi dalam fail yang sama bahawa kita akan mendapat digunakan untuk. Jadi sekarang mari saya pergi ke hadapan dan tekan Ctrl-L untuk hanya jelas bahawa jauh, jalankan lagi membuat hello2, dan Voilà. Dan perintah ini lagi, lebih kompleks daripada kita akan menjelaskan tujuan hari ini. Tetapi ia tidak berjalan dilafaz, dan dilafaz mengambil kod sumber dan memuntahkannya 0 dan 1s. Dan orang-orang 0 dan 1s dalam kes ini dipanggil apa? Okay, membantah kod. Dan fail bahawa mereka berada dalam dipanggil, jadi, hello2, dalam kes ini. Kerana fail teks saya hello2.c, Enter. Dan sekarang saya telah mengambil dua tanda seru, seru titik, tanda seru. Baiklah, jadi kita kini mempunyai keupayaan untuk mendapatkan rentetan, nampaknya. Nah, apa lagi yang kita boleh mendapatkan dari pengguna? Baik dalam perpustakaan CS50, terdapat fungsi lain yang akan memudahkan kehidupan kita dalam beberapa hari pertama. GetChar, GetDouble, GetFloat, GetInt, GetLongLong, GetString. Nah, mari kita memetik dari yang paling mudah ini pertama. GetString literal adakah itu. Ia hanya duduk di situ, menunggu untuk pengguna menaip sesuatu dalam, dan secepat saya menaip sesuatu dalam dan tekan Enter, ia melakukan sesuatu dengan nilai itu. Jadi mari kita kembali kepada contoh bahawa untuk melihat apa yang GetString lakukan. Biar saya pergi ke hadapan dan membuka di gedit, hello.c, dan ingat yang hak sebelum rehat, ini adalah di mana kita berhenti. Jadi mari kita kini mengusik ini selain secara terperinci sedikit lebih. Jadi on line 6, terdapat dua perkara berlaku pada masa ini. Tanda sama memisahkan separuh pertama dan separuh kedua. Jadi di sebelah kiri tanda yang sama, kami berkata rentetan s. Dan kemudian, segi hanya orang biasa, apa adalah rentetan s melakukan, adakah anda fikir? Ia mewujudkan apa? Jadi ia mewujudkan rentetan dipanggil s. Sekarang apakah yang benar-benar bermakna? Nah, ia menempah ruang untuk rentetan dipanggil s. Itu bukan agak betul. Apakah ini lakukan? Komputer Well, seperti yang anda tahu, mempunyai cakera keras; itu di mana fail anda disimpan. Komputer mempunyai RAM, dan itulah di mana program dimuatkan semasa mereka berjalan. Jadi, apabila anda klik dua kali ikon dan Microsoft Word dibuka up, Microsoft Word sedang berjalan, jadi untuk bercakap, dalam RAM, yang merupakan bahagian elektronik komputer anda. Tidak fizikal, sebahagian mekanikal yang berputar, di mana data biasanya disimpan jangka panjang. Jadi rentetan s cukup banyak memberitahu komputer memberi saya cukup RAM untuk memenuhi rentetan. Sekarang yang sedikit daripada melampaui batas, kerana bagaimana besar adalah rentetan akan? Well, kita sebenarnya tidak tahu lagi, jadi dalam beberapa minggu akan datang kita sebenarnya akan tarik balik lapisan yang rentetan dan kami akan memberitahu anda apa yang ia benar-benar adalah. Tali, buat masa sekarang, hanya pemudahan bagus dunia kita. Tetapi rentetan s mengisytiharkan rentetan dipanggil s, buat masa sekarang. Isytihar rentetan. Ia berhak sedikit ruang dalam RAM untuk rentetan pengguna adalah tentang menaip. Sekarang mari kita lihat di sebelah kanan tanda yang sama. Jadi ia berkata GetString (). Dan sedikit kewarasan memeriksa. Hakikat bahawa terdapat apa-apa di dalam kurungan membayangkan apa tentang GetString? Ia tidak mengambil hujah. Iaitu, anda tidak boleh mempengaruhi tingkah laku dalam apa jua cara. Setiap kali anda menggunakannya, ia akan mendapat rentetan dan itulah ia. Sebaliknya, printf, diharapkan tingkah laku yang tidak menukar setiap masa. Jika tidak, ia adalah fungsi percetakan yang agak sia-sia jika ia melakukan perkara yang sama. Jika ia sentiasa mencetak Daud atau sesuatu sewenang-wenangnya sepanjang masa. Jadi printf masuk akal untuk mempunyai hujah. GetString benar-benar tidak perlu hujah, kerana saya mahu untuk mendapatkan rentetan daripada pengguna dan ia adalah pengguna yang akan untuk membekalkan dinamisme dengan menaip dalam huruf yang berbeza setiap kali di keyboard. Jadi apakah GetString adakah akhirnya? Fikirkan ia sebagai kotak hitam ini sedikit. Dan ini kotak hitam mengambil input tidak, tetapi apabila anda bang pada , ia memuntahkannya keluar rentetan bahawa pengguna telah ditaip masuk Dan hakikat bahawa terdapat satu tanda sama ada bermakna mengambil apa yang meludah keluar di sebelah kanan dan menyimpan ia di dalam apa yang di sebelah kiri. Tanda Jadi sama di sini, ia sebenarnya tidak bermakna kesaksamaan, ia agak teknikal bermakna tugasan. Mengambil nilai di sebelah kanan, dan memasukkannya ke dalam berubah-ubah di sebelah kiri. Jadi itulah segala yang berlaku di sana. Sekarang di baris 7, kita memanggil printf. Jadi printf diharapkan semakin sedikit membosankan sekarang. Jadi mencetak rentetan diformat. Apa rentetan? Cetak, "h-e-l-l-o,% s ! \ N ". Baiklah, jadi apa yang saya mahu untuk plug-in untuk% s? Harfiah, apa yang disimpan di dalam s. Jadi dalam kes ini, sedikit kewarasan cek, berapa banyak hujah tidak printf ambil? Okay, saya mendengar salah. Saya mendengar satu lagi. Dua, saya mendengar dua. Dan bagaimana kira-kira tiga? Okay, tiga? Cemerlang. Tiga jawapan yang mungkin, hanya salah seorang daripada mereka adalah betul. Jadi hujah lagi mempengaruhi tingkah laku fungsi. Pada masa lalu, printf tidak hanya mengambil satu hujah. "Hello dunia" adalah hujah tunggal. Walau bagaimanapun, kini, notis mana koma ini. Koma Ini adalah di luar petikan / unquote, yang bermaksud hey printf, di sini datang hujah kedua. Jadi koma dalam kebanyakan bahasa pengaturcaraan hujah berganda berasingan. Jadi jawapannya di sini pasti bukan satu, kerana ada koma ini. Jadi minimum, printf nampaknya mengambil dua hujah masa ini. Tetapi peluang untuk soalan helah di sini adalah apa yang tentang koma ini? Adakah ini membayangkan bahawa sebenarnya ada tiga hujah? Ini, ini, dan ini. Jadi tidak, kerana koma itu adalah di dalam petikan yang bermakna ia adalah benar-benar hanya estetik bahasa Inggeris. Ia mempunyai apa-apa kaitan dengan bilangan hujah dalam program ini. Jadi koma ini adalah di luar tanda petikan berganda. Dan kemudian kembali 0. Apapun hanya Buat masa sekarang mari kita mengambil satu ini pada iman hari ini, dan hanya tahu bahawa apabila fungsi dilakukan melaksanakan baris kod, mereka umumnya harus kembali beberapa nilai. Dalam kes ini, hanya kerana utama perlu kembali int, itu hanya cara C bahasa berfungsi. Jadi, kerana apa-apa silapnya, berasa seperti program ini halus, saya hanya keras dikodkan pulangan di titik 0. Tetapi sebaliknya, dan saya akan menulis ini dalam kod pseudo sekarang, sama seperti Yusuf lakukan apabila kita melakukan stoking contoh minggu lepas. Jika sesuatu yang silapnya - ini tidak adalah kod sebenar - pergi salah, kemudian kembali, katakan, 1. Lagi kembali 0. Jadi ini adalah di mana kita pergi dengan ini. Ini bukan sebenar kod C, hanya pseudokod. Tetapi ini adalah bagaimana anda mungkin kembali nilai yang mungkin yang berbeza. Tetapi untuk sekarang saya hanya akan pergi ke hadapan dan kembali 0. Semua hak, mana-mana soalan setakat pada fungsi sintaksis,, atau sebagainya? Ya, di belakang. PENONTON: [didengar] DAVID MALAN: Bolehkah anda bercakap sedikit lebih kuat? Mengapa program ini 0 balasan, dan? PENONTON: [didengar] DAVID MALAN: Oh, itu kerana saya malas, maaf. Tiada tindak balas akademik yang baik, kembali 0. Saya boleh jenis menyelamatkan ini, dengan mengatakan teknikal C, jika utama tidak jelas mengembalikan nilai, 0 akan dikembalikan secara automatik untuk anda. Yang benar, saya tidak hanya meliputi sehingga. Tetapi, saya sepatutnya melakukannya dengan cara ini. Tiada Fleet menarik daripada yang lain daripada kesilapan saya. Yeah? PENONTON: Biasanya apabila anda menaip tidak sah, yang bermakna anda tidak kembali sesuatu. DAVID MALAN: Betul. Jika sebaliknya, anda tentukan sebelum nama fungsi, contoh di sini, tidak sah, maka fungsi tidak kembali apa-apa. Dan oleh itu saya hanya akan berkata, pulangan atau apa-apa pada semua, dan yang akan konsisten. Dan kita akan kembali itu. Dan hanya FYI, salah satu tangkapan dengan pembelajaran pengaturcaraan di dunia yang mempunyai beratus-ratus buku dan beratus-ratus laman web di luar sana adalah anda akan sentiasa lihat sintaks berbeza dalam buku-buku yang berbeza oleh orang-orang yang berlainan. Sedar kita akan melakukan yang terbaik dalam seksyen dan ceramah untuk menjadi konsisten. Tetapi kadang-kadang anda akan melihat sintaks yang bercanggah. Jadi apabila dalam keraguan, hanya meminta. Dan secara amnya, kita akan menjaga dalam kuliah dan bahagian untuk hampir selalu hadir dengan cara yang betul. Dan saya katakan hampir selalu, kerana kes di titik. Soalan-soalan lain? PENONTON: Adakah% s wujud di luar perkakas? DAVID MALAN: Adakah% s wujud luar perkakas? Ya. Jadi% s mempunyai kaitan dengan C. hakikat bahawa kita menggunakan ia dalam perkakas asasnya mempunyai apa-apa kaitan dengan ciri-ciri bahasa yang kita gunakan. Malah, minggu lalu apabila kita digunakan Mac saya, saya menulis Kod C pada Mac saya. Saya boleh menggunakan% s pada Mac saya, dan anda boleh menggunakan ia komputer Windows anda jika anda memasang pengkompil, seperti Visual Studio dari Microsoft. Jadi% s. Segala yang kita lakukan di dalam tetingkap ini hari ini mempunyai dilakukan dengan apa-apa C. Dan asasnya kaitan dengan sistem operasi dalam soalan. Sebaliknya, terminal tetingkap hitam dan putih - apabila Saya menaip perkara-perkara seperti ls dan rm, dan cd - yang mempunyai kaitan dengan sistem operasi dan mengemudi sekitar. Yeah. PENONTON: saya maksudkan perpustakaan, perpustakaan CS50. DAVID MALAN: Okay, jadi jika anda maksudkan rentetan kata kunci, bahawa hanya wujud dalam perpustakaan CS50, betul. Yang tidak wujud dalam C sendiri, dan sesungguhnya dalam beberapa minggu kita akan buang perpustakaan CS50 dan mula melakukan perkara-perkara dari awal diri kita, jadi untuk bercakap. Soalan-soalan lain? Yeah. PENONTON: [didengar] DAVID MALAN: Baik soalan. Adakah arahan kes sensitif? Dan izinkan saya membuat perbezaan di sini. Jadi arahan umumnya perkara yang kita akan menulis di bawah tetingkap, dalam tetingkap terminal. Apa-apa sahaja di sini akan menjadi kenyataan atau kod C. Tetapi dalam kedua-dua kes, jawapannya adalah sama, ya. Kedua-dua persekitaran ini, kod C di atas dan sistem operasi baris arahan di bawah, adalah sensitif huruf. Jadi, anda mesti mengambil kesempatan GetString dengan modal G, modal S. Anda mesti menulis printf dalam huruf kecil semua. Anda mesti taip ls dalam huruf kecil semua. Jadi, dalam hampir setiap situasi semester ini, kes, Malah, perkara itu. Ya. PENONTON: [didengar] DAVID MALAN: Ah, jadi ok, apa yang jika kita mempunyai fail dipanggil hello.d. Jadi ia ternyata D adalah bahasa pengaturcaraan. Dan sebagainya dalam beberapa kes, kita sebenarnya boleh menulis satu program di fail tersebut dan ia telah disusun dalam fesyen itu. Kita boleh, dan sebenarnya, jawapan pendek, saya tidak tahu. Jadi kita pergi untuk melakukan ini. Biar saya pergi ke hadapan dan mencipta fail baru. Dan putaran di sini, jujur ​​secara umum, adalah apabila apa-apa keraguan semester ini, dan anda mempunyai perkakas atau komputer anda membuka, pergi ke hadapan dan cuba sesuatu. Jadi saya akan menyimpan fail yang dipanggil hello.d. Simpan carian ini. Dan saya akan untuk menjalankan membuat hello Masukkan. Ia seolah-olah untuk membuat kesimpulan bahawa c adalah lebih cenderung daripada d, dalam kes ini. Soalan lain. Yeah. PENONTON: [didengar] DAVID MALAN: Okay, mengatakan bahawa sekali lagi. PENONTON: [didengar] DAVID MALAN: Bagaimana anda akan pergi tentang mendiagnosis itu atau troubleshooting? Jadi kemungkinan besar, kerana mereka berada bahasa yang berbeza, kemungkinan besar anda akan mendapat sepenuhnya program yang berbeza outputted. Anda akan mendapat mesej ralat yang sama sekali berbeza. Dan juga hanya dari segi reka bentuk, ia boleh dikatakan akan menjadi reka bentuk keputusan yang miskin bertulis dua yang berbeza bahasa dengan fail hampir sepercaman dinamakan, direktori yang sama yang tepat, menggunakan alat automatik seperti membuat. Jadi saya juga boleh menolak kembali dan berkata dalam tempoh 15 tahun untuk berbuat demikian, tidak pernah membuat kesilapan itu. Boleh berlaku. Tetapi hanya ada pelbagai, saya fikir, pertahanan logistik di tempat. Plus mesej ralat yang akan berlaku, yang akan akhirnya mendedahkan apa isu. Tetapi kes sudut mungkin. Baiklah, jadi mari kita memperkenalkan hanya beberapa lain ciri-ciri di sini sekarang, jadi kita boleh mula membina ke dalam lebih dan program yang lebih kompleks. Jadi pertama sekali, matematik. Jadi contoh matematik adalah hanya jenis mudah dalam minggu pertama. Ini bukan untuk mengatakan bahawa pengaturcaraan semua adalah mengenai matematik. Sudah tentu, memahami pelbagai ciri matematik, algebra khususnya, adalah agak relevan di sini. Dalam CS tahap yang lebih tinggi kelas, algebra linear, kalkulus, dan sebagainya. Tetapi menyedari kebanyakan apa yang kita akan lakukan semester ini tidak mengurangkan matematik, dan sudah tentu tidak aritmetik, per se, tetapi benar-benar logik adil dan kepada pemikiran berhati-hati. Dan supaya hubungan ini bahawa sains komputer telah lama mempunyai, terutama di peringkat sekolah tinggi, dengan matematik, adalah sedikit mengelirukan. Kerana kebanyakan program yang kita akan menulis, benar-benar, jenis tahap yang lebih tinggi dan memberi tumpuan kepada menyelesaikan masalah itu, pasti, mungkin menggunakan beberapa penambahan, penolakan, dan pelbagai formula matematik atau sebagainya, tetapi pada akhir hari, ia tentang berfikir dan tidak hanya melaksanakan apa yang anda mungkin telah dilakukan seperti TI Kalkulator di dalam sekolah tinggi. Maka dengan itu berkata, mari kita kini melakukan sesuatu dengan ini pengendali matematik yang memang wujud supaya kita boleh perjalanan atas beberapa aspek asas pengaturcaraan, atau dalam kes ini C. Jadi terdapat, sebagai perpustakaan CS50 mencadangkan, dan hari ini kita hanya menggunakan GetString - dan dalam masa mungkin salah satu fungsi lain - tetapi terdapat pelbagai jenis data dalam komputer. Pada penghujung hari, komputer hanya tahu 0 dan 1s. Tetapi ingat bahawa minggu lepas, kita bercakap tentang sistem binari dalam mewakili nombor, seperti nombor 0 dan 1, dan 2, semua cara sehingga 8, seperti dalam video Nate. Dan kemudian kita boleh mengira yang lebih tinggi seperti yang kita lakukan di atas pentas di sini. Tetapi jika anda mahu untuk mewakili bukan hanya nombor tetapi huruf, kita, manusia, perlu tampil dengan beberapa sewenang-wenangnya konvensyen, di mana jika pada akhir hari semua komputer saya telah adalah keupayaan untuk meluahkan 0 dan 1s, kita mahu lebih baik mula menyeragamkan pola 0 dan 1s yang mewakili perkara yang berbeza. Satu corak 0 dan 1s yang mewakili surat. Corak 0 dan 1s yang mewakili huruf z. Corak 0 dan 1s yang mewakili warna biru, atau merah, atau sebagainya. Kita perlu menggunakan semua ini 0s dan 1s untuk meluahkan diri dalam konteks yang berbeza, dalam cara yang berbeza yang tidak semestinya angka. Jadi dari segi perwakilan, C mempunyai jenis data yang berbeza, dan kita telah melihat salah satu daripada ini setakat ini. Kami melihat int, dan notis apa yang tidak pada skrin sekarang adalah rentetan. Rentetan tidak, pada hakikatnya, wujud dalam C. Sekali lagi, ia adalah satu pemudahan kita membentangkan untuk pertama beberapa minggu. A char merupakan watak individu. Apungan adalah nombor nyata, dengan titik perpuluhan dan nombor ke kiri dan kanan ia. Double adalah apa, bagi mereka yang mempunyai latar belakang sebelum kembali? Jadi double adalah dua kali ganda sesuatu. Tambah dua kali ganda ketepatan banyak. Jadi apa maknanya? Jadi, dalam setiap kes-kes ini, dunia mempunyai jenis standard berapa banyakkah bit yang digunakan untuk mewakili setiap perkara-perkara ini. Jadi jika anda telah menonton video ASCII Nate sudah bagi sebahagian daripada pset 0, atau kemudian minggu ini anda akan, anda mungkin akan tahu bahawa ASCII - watak representasi - menggunakan berapa banyak bit? Dan anda juga mungkin ingat dari demo kami minggu lepas bagaimana ramai orang yang berada di atas pentas. Jadi 7 atau 8, biasanya. Jadi secara amnya 8, dan ada sesuatu yang dipanggil sebagai dilanjutkan ASCII yang menggunakan semua 8 bit, bukannya 7. Tetapi secara umum, kita bercakap dalam kuasa 2, jadi dalam kes ini, 8. Jadi char dalam bahasa pengaturcaraan biasanya 8 bit. Jadi int adalah umumnya 32 bit. Apungan adalah umumnya 32 bit. Double adalah umumnya 64-bit. Dan apa maksudnya? Ia bermakna anda boleh mewakili nombor yang lebih besar, atau dalam hal nombor nyata, anda boleh mempunyai lebih banyak nombor selepas tempat perpuluhan. Banyak yang lebih tepat, dalam kes itu. Sekarang yang lama malangnya dinamakan. Jadi ada int yang ialah 32 bit. Ada yang panjang yang, ndak, 32 bit. Dan yang lama yang 64-bit. Walau bagaimanapun sesetengah daripada mereka adalah peka konteks; ia bergantung apa jenis komputer yang anda mempunyai. Jadi, secara umum, kami akan nyatakan dalam kerja rumah atau dalam kuiz apabila ia sebenarnya perkara. Tetapi persoalannya adalah ada semua ini berbeza representasi di sini. Jadi mari kita sebenarnya menyelam ke dalam program. Bukannya menulis satu ini dari awal, izinkan saya pergi ke hadapan dan membuka dari kod sumber hari ini - yang kesemuanya adalah talian - jika anda mahu menggerumit sekitar dalam talian, atau pulangan ke atas Rabu dengan perkakas pada komputer anda, arahan yang akan menghubungkan laman web kursus. Berikut adalah program yang mudah super. Tetapi ia mendapat sesuatu yang baru sedikit di atas bahawa kita tidak mempunyai sebelum ini. Banyak keseluruhan garisan biru teks. Jadi ini garis biru mewakili komen. Jadi ia agak berguna dalam sebuah program untuk dapat menulis beberapa komen untuk diri sendiri, atau rakan sekerja, atau rakan-rakan, atau felo pengajaran, jenis yang menggambarkan apa yang berlaku di fail ini, tetapi mempunyai apa-apa kaitan dengan kod C sendiri. Tiada kaitan dengan program ini berfungsi, ia hanya estetika. Jadi cara anda melakukan ini dalam C adalah anda secara amnya mula anda komen dengan / *, dan anda berakhir komen anda dengan * /. Dan jika anda benar-benar dubur dan suka untuk menarik jenis gambar, maka anda akan meletakkan banyak seluruh bintang, anda akan membuat kotak kecil seperti ini. Tetapi tiada satu pun bahawa perkara-perkara. Satunya perkara yang penting adalah yang pertama dan yang terakhir. Ini adalah apa yang dipanggil komen berbilang talian. Dan ia hanya konvensyen manusia sering melakukan bintang dan kotak perkara-perkara seperti ini jika anda mempunyai banyak masa lapang. Jadi, selepas anda telah ditulis dalam beberapa komen, secara amnya, datang keberanian sebenar program. Berikut adalah biasa kita # include . Dan hanya cepat, ini adalah perlu atau tidak perlu? PENONTON: Wajib. DAVID MALAN: Jadi ia sebenarnya tidak perlu. Jadi mengapa, walaupun, ia tidak perlu? Jadi tiada printf. Sesungguhnya. Semua yang kita lakukan dalam program ini adalah matematik. Jadi saya sebenarnya boleh memadamkannya. Jadi anda tidak perlu sentiasa termasuk apa-apa pada atas program. Jadi mari kita memudahkan ini sedikit. Dan kini melihat apa yang program ini tidak. Tidak banyak faedah. int x = 1. Nah, apa ini lakukan? Nah, berfikir kembali kepada model mental dari sebelum ini. Sebelah kiri ungkapan ini melakukan apa? Buat ruang untuk integer. Jadi bagaimana banyak ruang? Nah, kita tahu sekarang bahawa ia adalah 32 bit. Sebelum ini, rentetan teknikal 32 bit, tetapi lebih pada yang pada masa depan. Tetapi int ialah 32 bit. Jadi ungkapan ini di sebelah kiri di sini, int x hanya berkata hey sistem operasi, memberi saya 32 bit RAM - atau dikenali sebagai 4 bait RAM - supaya saya boleh meletakkan integer dalam ruang itu. Apa integer adakah anda mahu untuk meletakkan? Nah, hanya nombor 1. int y mendapat 2, adakah perkara yang sama walaupun nombor yang lebih besar, dalam segi magnitud. Bilangan itu sendiri masih hanya 32 bit. Ia hanya corak bit adalah berbeza mewakili 1 berbanding dengan 2. int z kini mengatakan memberi saya satu lagi bit 32, memanggilnya z, dan meletakkan penjumlahan 1 dan 2 di sana. Jadi kini z mungkin menyimpan nilai 3, dan kemudian kembali 0. Kini program ini, adakah ia melakukan apa-apa faedah? Jadi ia sebenarnya tidak berbuat apa-apa yang menarik, di mana-mana akal, kerana mengapa? Ia melakukan beberapa matematik. Tetapi ia tidak kembali jawapannya, betul. Ia kembali 0. Ia tidak mencetak jawapannya. Jadi program ini asasnya tidak bernilai, kerana ia berdiri sekarang. Ia melakukan beberapa pekerjaan. Ia akan mengambil beberapa beberapa saat, atau mikrosaat, berlari, tetapi ia sebenarnya tidak melakukan apa-apa berguna untuk manusia. Jadi mari kita sebenarnya kini membuka math2, di mana sekarang saya sebenarnya mencetak hasilnya. Jadi ini juga boleh disimpulkan daripada contoh sebelumnya kami. Jika saya mahu melakukan beberapa matematik yang mudah, int x = 1, y = 2. z ialah 1 campur 2 sekarang. Apakah ini akan mencetak jelas? Hanya 3. Jadi kewarasan cepat menyemak. Biar saya berpindah ke direktori ini. Jadi cd source1m. Biar saya pergi ke hadapan dan menaip membuat math2. Tiada mesej ralat keluar, jadi biarlah saya berjalan - tidak a.out-membiarkan saya menjalankan math2. Enter. Dan demi sesungguhnya, ia dicetak 3. Nah mari kita lihat pada varian ini. Di math3.c, kita kini mempunyai contoh ini di sini. Jadi ini salah satu jenis yang menarik. Jadi, dalam satu ini di sini, jawapannya akan untuk dapatkan 1 dibahagikan dengan 10, dan notis Saya telah diisytiharkan sebagai apungan. Mengapa saya mahu ia menjadi apungan? Nah, ia adalah pecahan. Ia akan menjadi nombor nyata. Jadi ia akan menjadi 0.1, mudah-mudahan - 10%, dalam kes ini. Dan apa yang saya kemudian ingin mencetak keluar? Nah, jawapan ini. Nah, mari kita mengusik ini selain 1. Jadi pada sebelah kiri, mengisytiharkan terapung, memanggil ia menjawab. Pada sebelah kanan, adakah 1 dibahagikan dengan 10 dan meletakkan bahawa menjawab dalam pembolehubah. Sekarang, baris ini kelihatan sedikit lebih samar. Tetapi notis beberapa ciri biasa. % Bermakna di sini datang placeholder. f bermakna di sini adalah nilai titik terapung, hanya sebenar nombor, sesuatu dengan titik perpuluhan. 0,2 cara apa? Sesiapa tahu daripada pengalaman terlebih dahulu? Dua tempat perpuluhan. Jadi kita telah tidak dilihat sebelum ini, tetapi ia hanya satu cara menjalankan sedikit kawalan lebih lebih printf dan pepatah tidak memberi saya 30 mata selepas titik perpuluhan, sebaliknya memberi saya hanya 2. Dan kemudian mari kita pergi ke hadapan dan menjalankan ini. Jadi membuat matematik 3, dan sekarang mari saya menjalankan matematik 3, Masukkan. Dan itu adalah tidak betul. Kita seolah-olah telah dihadapi pepijat pertama kami tulen. Yah, mungkin saya hanya tidak melihat cukup dekat. Jadi biarlah saya naik di sini, dan biarkan saya meletakkan 20 perpuluhan titik tempat-tempat di sana. Dan biarlah saya menyusun ini, membuat math3, jalankan. Agak pasti 1 dibahagikan dengan 10 bukan 0. Jadi apa yang berlaku? Nah okay, sebenarnya tidak mempunyai kaitan dengan ini. Itulah pemikiran yang baik. Ini adalah benar-benar hanya satu kebetulan yang kita lakukan ini. Tetapi hanya untuk membuktikan bahawa ini tidak, saya akan kembali sesuatu yang rawak. Jangan melakukan perkara ini di rumah, kerana ia hanya salah. Tetapi membuat math3, biarlah saya jalankan ia. Jadi mempunyai apa-apa kaitan dengan apa yang saya kembali, hanya mempunyai kaitan dengan apa yang saya mencetak. Tetapi saya mendengar ia ke sini. Apa? PENONTON: Jadi kita perlu untuk menulis nombor dalam bahagian sebagai - DAVID MALAN: Okay baik. Jadi kita perlu menulis nombor menyertai bahagian di sini sebagai titik terapung menghargai diri mereka. Jadi masalah di sini adalah seperti sebelum: C, dengan banyak bahasa, mempunyai jenis data yang berbeza. Dan orang-orang jenis data, sebagai contoh, ini di sini. Dan data jenis yang dipersoalkan di sini, apabila saya menaip 1 dan kemudian saya jenis 10, mungkin jenis data apa? Jadi ia mungkin int, betul? Ia pasti tidak apungan kerana terdapat perpuluhan tidak titik atau apa-apa seperti itu. Jadi benar-benar, saya mempunyai int dibahagikan dengan int. Jadi perkara yang menarik tentang matematik dan komputer adalah bahawa jika anda sedang melakukan pembahagian menggunakan integer - 1 dibahagikan dengan 10, ya adalah 0.1. Walau bagaimanapun, apabila anda membahagikan integer oleh integer, jawapan juga menjadi integer hanya kerana, buat masa sekarang. Dan apa implikasi kemudian? Nah, jika jawapannya ialah 1 dibahagikan dengan 10 bersamaan 0.1, apa komputer akan lakukan saya tidak mempunyai idea bagaimana untuk mewakili 0.1, kerana itulah nilai titik terapung, bukan integer, ia akan memenggal segala-galanya selepas titik perpuluhan dan hanya menunjukkan kepada anda 0 pada permulaan. Dan hakikat bahawa ia mencetak sebagai titik terapung nilai, ia hanya satu perkara yang estetik. Itu kerana saya memaksa komputer untuk mencetak ini sebagai terapung nilai titik. Dan sesungguhnya aku telah diisytiharkan sebagai apungan, tetapi matematik berlaku di sini. Jadi biarlah saya sebenarnya menetapkan ini dalam satu cara yang cukup mudah. Mengapa tidak saya hanya melakukan 10,0 dan 1.0, walaupun teknikal saya boleh mendapatkan jauh dengan hanya melakukan salah seorang daripada mereka. Sekarang mari saya pergi ke hadapan dan membuat math3. Biar saya pergi ke hadapan dan kini menjalankan math3, Masukkan. Dan kini, oh budak. Sekarang kita mempunyai masalah baru sama sekali. Jadi lebih baik, betul; kita lebih dekat kepada 0.1, tetapi apa yang jelas adalah salah di sini? Melainkan kita telah berbohong kepada anda selama bertahun-tahun, kan? 1 dibahagikan dengan 10 adalah sebenarnya tidak cukup 0,1, jadi apa benar-benar berlaku di sini? Baik anda boleh jenis sebab melalui ini secara logik. Jika komputer hanya mempunyai jumlah terhad RAM untuk memulakan dengan, dan sesungguhnya komputer hanya menggunakan 32 bit untuk terapung nilai titik, ia berdiri untuk sebab bahawa dengan nombor terhingga bit, 32 dalam kes ini, ya, anda boleh mewakili banyak perkara. Ia sebenarnya adalah empat bilion nilai-nilai yang berbeza boleh diwakili dengan 32 bit, 2 hingga 32, tetapi ia masih terbatas. Jadi masalahnya ialah ada nombor terhingga sebenar nombor, betul. Jika anda memberi saya beberapa sebenar, saya sentiasa boleh mencari anda satu lebih besar sedikit, kurang sedikit, oleh Tweaker hanya nombor yang selepas titik perpuluhan. Jadi, jika anda tidak mempunyai nombor terhingga bit, anda tidak mungkin boleh mewakili tak terhingga bilangan nombor nyata. Jadi ada ini ketakpersisan wujud dalam komputer, dan ini mendapat tersandung sepanjang masa walaupun dalam mudah program-program seperti ini. Tetapi juga dalam beberapa masalah dunia yang sangat nyata serta. Malah, mari kita mengambil masa untuk hanya mengambil melihat pada sesuatu yang sebenarnya berlaku dalam realiti. Kami akan menonton hanya beberapa minit pertama, dan kemudian kita akan hantar link dalam talian. Tetapi ini adalah bukti kepada hanya apa yang boleh pergi salah, agak jujur, dalam cara yang sangat tragis apabila perkara-perkara ini tidak dihargai atau hanya kita manusia membuat kesilapan apabila ia datang kepada ini jenis butiran pelaksanaan komputer moden. [Video bermain] Kami kini kembali kepada bencana kejuruteraan pada keajaiban Moden. Komputer. Kami semua datang untuk menerima masalah yang sering mengecewakan yang pergi bersama mereka. Bugs, virus, dan glitches perisian adalah harga kecil untuk membayar untuk kemudahan. Tetapi dalam tentera kelajuan berteknologi tinggi dan tinggi dan ruang aplikasi program, masalah terkecil boleh diperbesarkan ke dalam bencana. Pada 4 Jun 1996, saintis bersedia untuk melancarkan tanpa pemandu Ariane 5 roket. Ia telah membawa satelit saintifik direka untuk menubuhkan tepat bagaimana medan magnet bumi berinteraksi dengan angin-angin suria. Roket telah dibina untuk Agensi Angkasa Eropah dan diangkat berlepas dari kemudahan di pantai Perancis Guyana. Pada kira-kira kira-kira 37 saat ke dalam penerbangan, mereka mula-mula sesuatu yang perasan akan salah, bahawa muncung swiveling dalam cara yang mereka benar-benar tidak sepatutnya. Kira-kira 40 saat ke dalam penerbangan, jelas kenderaan dalam kesusahan, dan itulah apabila mereka membuat keputusan untuk memusnahkan ia. Pelbagai Seorang pegawai keselamatan dengan keberanian besar menekan butang, meletupkan roket sebelum ia boleh menjadi bahaya kepada keselamatan awam. -Ini adalah pelayaran sulung Ariane 5, dan kemusnahan berlaku kerana kecacatan tertanam dalam roket perisian. -Masalah di Ariane adalah bahawa terdapat nombor yang memerlukan 64-bit untuk meluahkan dan mereka mahu untuk menukar kepada nombor 16 bit. Mereka menganggap bahawa nombor tidak pernah akan menjadi sangat besar, yang paling mereka digit dalam bilangan bit 64 0. Mereka adalah salah. Ketidakupayaan satu program perisian untuk menerima jenis nombor yang dijana oleh orang lain adalah di akar kegagalan. Pembangunan perisian telah menjadi satu bahagian yang sangat mahal teknologi baru. Ariane 4 roket telah sangat berjaya. Jadi banyak perisian yang dicipta untuk ia juga digunakan di Ariane 5. -Masalah asas adalah bahawa Ariane 5 adalah lebih cepat, dipercepatkan lebih cepat. Dan perisian telah tidak diambil kira untuk itu. Kemusnahan roket kewangan yang besar bencana, semua kerana kesilapan perisian minit. Tetapi ini bukan kali pertama masalah penukaran data telah dibelenggu roket teknologi moden. DAVID MALAN: Kami akan tinggalkan ia pada itu. Tetapi ini adalah bukti kepada betapa diguna pakai walaupun beberapa ini butir-butir di peringkat terendah yang kita telah mula meneroka hari ini. Jadi, walaupun anda mendapat sedikit terganggu mungkin oleh beberapa sintaks dan arcaneness sini, menyedari bahawa lebih jangka kita akan memberi tumpuan hanya pada bagaimana terpakai ini adalah untuk dunia yang jauh di luar CS. Kami akan melihat anda pada hari Rabu.