>> DAVID J MALAN: betul, jadi ini adalah CS50.
Dan ini adalah jelas pada Jumaat.
Dan ini adalah akhir minggu satu.
Jadi, anda mungkin ingat bahawa kita berhenti, Kali terakhir, dengan cliffhanger kejayaannya.
Di mana kita mendedahkan pembohongan ini, bahawa tidak ada kira apa yang diajar semakin meningkat
up, 1 dibahagikan dengan 10 tidak, dalam Malah, 0,1 atau 0,100 atau 0,10000.
Malah, jika kita menyusun ini program, seperti yang kita lakukan semalam, dengan,
membuat ketakpersisan, dan kemudian melakukan dot, slash, ketakpersisan,
kita tahu bahawa ini adalah apa yang 1 dibahagikan dengan 10 sebenarnya.
Jadi itu bukan benar-benar agak kes itu.
Tetapi ini tidak tanda-tanda di beberapa had asas komputer.
Dan sesungguhnya, di antara perkara yang kita akan lakukan
hari ini adalah kita lihat mengapa ini mempunyai berlaku, apa implikasi ini mempunyai,
bagaimana manusia telah gagal untuk memahami ini dalam beberapa sangat
situations-- serius hasil daripada mana
telah agak tragis dan expensive-- dan juga
kita lihat bagaimana kita sebenarnya boleh mempertahankan
terhadap jenis-jenis batasan.
Jadi intuitif, mungkin, mengapa 1 dibahagikan dengan 10,
mengikut komputer saya di sini, bukan hanya 1/10, 0.10?
Yeah.
Apa pendapat kamu?
>> PENONTON AHLI: Radix ini berbeza?
>> DAVID J MALAN: The apa yang?
Oh, Radix adalah berbeza?
Jadi tidak cukup.
Ini sebenarnya lebih asas kepada perkakasan.
Pemikiran yang lain?
Yeah.
PENONTON AHLI: Mereka mewakili nombor yang berbeza?
DAVID J MALAN: Jadi they-- kanan.
Mereka mewakili nombor berbeza.
Tidak tepat, nampaknya.
Supaya is-- Nah, berbeza daripada apa?
Atau dari siapa?
Dari kami?
PENONTON AHLI: Ya.
Mereka tidak menggunakan perpuluhan sistem untuk [didengar].
DAVID J MALAN: OK.
Jadi dalam erti kata, mereka tidak menggunakan sistem perpuluhan.
Di bawah hood, segala-galanya adalah, sesungguhnya, binari,
dan itulah yang berkaitan, sebenarnya.
Tetapi ia lebih yang lebih mudah penjelasan daripada itu.
Yeah.
>> PENONTON AHLI: Mereka hanya mempunyai begitu banyak bit.
Mereka hanya boleh menyimpan sehingga tertentu sejauh mana, seperti dengan perpuluhan.
>> DAVID MALAN J: Ya.
Ini adalah apa yang benar-benar mendapat ia.
Ia ternyata bahawa komputer biasanya, akan sentiasa sahaja
menggunakan sejumlah terhingga maklumat untuk mewakili sesuatu.
Betul?
Lagipun, kami hanya mempunyai yang tetap jumlah ruang cakera keras.
Kami hanya mempunyai jumlah yang tetap RAM, atau memori komputer.
Dan jika anda hanya mempunyai jumlah tetap sesuatu,
pasti anda tidak boleh benar-benar mengira sehingga kepada infiniti atau sebarang nombor yang anda mahu.
Anda, jenis, perlu memilih dan memilih apa yang pelbagai
daripada nilai-nilai anda akan menyokong.
>> Dan sebagainya misalnya, seminggu atau dua lalu, apabila kita bercakap tentang ASCII,
dan kami berbual kira-kira 8 bit, atau bait, boleh dikatakan,
bilangan terbesar yang kita boleh mewakili dengan 8 bit adalah apa?
255.
Dan kita boleh mewakili 256 jumlah nilai tetapi tidak jika kita menghabiskan salah seorang daripada mereka
pada 0-- Baiklah, tetapi jika kita menghabiskan salah seorang daripada mereka pada 0,
maka bilangan yang paling besar adalah, sudah tentu, 255.
>> Jadi ternyata, bahawa ini adalah kes itu juga, dalam konteks ini.
Kami mula bercakap, masa lalu, tentang nombor titik apung, yang
adalah berbeza daripada bilangan bulat, dalam bahawa mereka mempunyai titik perpuluhan
dan, diharapkan, beberapa nombor selepas itu, tetapi mereka terlalu.
Komputer hanya biasanya akan menggunakan 32 bit, mungkin 64 bit
untuk mewakili nilai mata terapung.
Jadi, walaupun kita telah membesar pembelajaran matematik dan mengetahui
bahawa anda benar-benar boleh mempunyai nombor terhingga nombor
selepas titik perpuluhan, tidak jika anda mempunyai memori yang terhad.
Anda, jenis, perlu pusingan, atau memilih mana
nombor yang anda akan wakili.
Dan supaya anda boleh berfikir, dari satu segi, ini menjadi komputer yang paling dekat
anggaran kepada nilai 1/10 yang ia boleh mendapatkan, dengan hanya 32 atau lebih bit.
Dan ia bukan hanya 1/10.
>> Sebagai contoh, jika saya menukar ini kepada 1/3, yang kita fikir adalah lebih mudah.
Jadi 1 dibahagikan dengan 3.
Biar saya menyimpan fail.
Biar saya pergi ke hadapan dan susun semula ia.
Dan biarlah saya berjalan semula.
Di sini juga, nampaknya, 1/3 bukan 0.3 dan kemudian nombor terhingga 3 mengenai
selepas itu.
Anda perlu ketakpersisan ini pada akhir.
Oleh itu, kita manusia adalah betul, dan apa yang anda belajar, sebenarnya, betul,
tetapi kami menghentam terhadap beberapa batasan.
>> Dan apa yang saya fikir kita akan lakukan hari ini, mula
dengan melihat, terus terang, yang kesan tragis ini
kadang-kadang, apabila manusia tidak cukup melaksanakan
untuk realiti ini dan batasan-batasan ini.
Dan kita akan melihat satu siri vignettes dari History Channel yang mengambil
lihat bagaimana perkara pergi salah.
Ia kira-kira 8 minit, dan kami akan kembali selepas ini
dan kita lihat betul-betul apa lagi yang boleh pergi salah.
Jika kita boleh malap lights--
>> [VIDEO MAIN SEMULA]
>> -Computers, Kami semua datang untuk menerima masalah yang sering mengecewakan bahawa
pergi bersama mereka.
Bugs, virus, dan perisian gangguan adalah harga kecil
membayar untuk kemudahan.
Tetapi dalam teknologi tinggi dan kelajuan tinggi tentera dan program angkasa aplikasi,
masalah yang paling kecil boleh akan menjadi besar ke dalam bencana.
Pada 4 Jun 1996, ahli-ahli sains yang disediakan untuk melancarkan tanpa pemandu Ariane 5 roket.
Ia membawa saintifik satelit yang direka
untuk mewujudkan dengan tepat bagaimana Berinteraksi medan magnet bumi
dengan angin solar.
Roket ini dibina untuk Agensi Angkasa Eropah
dan diangkat dari dari kemudahannya di pantai French Guiana.
>> -Dan Kira-kira 30 saat ke dalam penerbangan, mereka mula-mula
sesuatu yang perasan akan salah.
Bahawa muncung telah berputar dengan cara yang mereka benar-benar tidak sepatutnya.
Kira-kira 40 saat ke dalam penerbangan, jelas kenderaan itu dalam kesusahan,
dan apabila mereka membuat keputusan untuk memusnahkan ia.
A Pegawai Keselamatan Julat dengan keberanian besar ditekan butang,
meletupkan roket sebelum ia boleh menjadi bahaya kepada keselamatan awam.
>> -Ini Adalah sulung pelayaran Ariane 5,
dan kehancuran mengambil meletakkan kerana kecacatan
tertanam dalam perisian roket.
-The Masalah pada Ariane adalah bahawa terdapat
adalah nombor yang diperlukan 64 bit untuk menyatakan,
dan dia mahu menukar kepada beberapa 16 bit.
Mereka mengandaikan bahawa jumlah tidak pernah akan menjadi sangat besar,
bahawa kebanyakan mereka digit dalam nombor 64 bit adalah 0 kanak.
Mereka adalah salah.
>> -The Ketidakupayaan satu program perisian untuk menerima
jenis nombor yang dijana oleh lain merupakan punca daripada kegagalan itu.
Pembangunan perisian telah menjadi bahagian yang sangat mahal teknologi baru.
Ariane 4 roket telah sangat berjaya, jadi banyak perisian
dicipta untuk itu juga digunakan pada Ariane 5.
>> -The Masalah asas adalah bahawa Ariane 5 adalah lebih cepat, mempercepatkan lebih cepat.
Dan perisian yang tidak mempunyai menyumbang untuk itu.
>> -The Kemusnahan roket adalah bencana kewangan yang besar,
semua kerana kesilapan perisian minit.
Tetapi ini bukanlah yang pertama masa masalah penukaran data
membelenggu teknologi roket moden.
>> -Dalam Tahun 1991, dengan permulaan Perang Teluk Pertama,
peluru berpandu Patriot mengalami jenis yang sama
masalah jumlah penukaran.
Oleh itu, 28 orang, 28 tentera Amerika
terbunuh dan kira- 100 yang lain cedera,
apabila Patriot, yang sepatutnya untuk melindungi daripada scuds masuk,
gagal untuk api peluru berpandu.
>> -Apabila Iraq menyerang Kuwait dan Amerika melancarkan Desert Storm pada awal tahun 1991,
Bateri peluru berpandu Patriot telah dikerahkan untuk melindungi Arab Saudi dan Israel
daripada serangan peluru berpandu Scud Iraq.
Patriot ialah Amerika Syarikat, jarak sederhana permukaan-ke-udara sistem
yang dikeluarkan oleh syarikat Raytheon itu.
>> Saiz -The pemintas Patriot, sendiri, adalah kira-kira, kira-kira 20 kaki panjang.
Dan ia mempunyai berat kira-kira 2000 pound.
Dan ia membawa kepala peledak daripada about-- Saya fikir ia adalah kira-kira £ 150.
Dan kepala peledak dengan sendirinya, mudah meletup yang tinggi,
yang mempunyai serpihan di sekitarnya.
Sarung kepala peledak adalah direka untuk bertindak seperti peluru.
>> -The Peluru berpandu dibawa, 4 setiap bekas,
dan diangkut oleh treler separuh.
>> -The Patriot sistem anti peluru berpandu kembali sekurang-kurangnya 20 tahun.
Ia pada asalnya direka sebagai pertahanan peluru berpandu udara
untuk menembak jatuh pesawat musuh.
Dalam Perang Teluk Pertama, apabila perang yang datang bersama-sama,
Tentera Darat mahu menggunakannya untuk menembak jatuh scuds, bukan kapal terbang.
Tentera Iraq tidak begitu banyak masalah,
tetapi Tentera bimbang tentang scuds.
Dan kerana itu mereka cuba menaik taraf Patriot.
>> -Intercepting Musuh peluru berpandu bergerak pada datang lima
itu akan mencabar cukup.
Tetapi apabila Patriot dikejarkan ke dalam perkhidmatan,
Tentera tidak sedar yang Pengubahsuaian Iraq yang dibuat
scuds mereka hampir mustahil untuk memukul.
>> -Apa Yang berlaku, adalah scuds yang telah datang, adalah tidak stabil,
mereka terumbang-ambing.
Sebab untuk ini, adalah orang Iraq, untuk
untuk mendapatkan 600 kilometer daripada pelbagai peluru berpandu 300 kilometer,
mengambil berat daripada kepala peledak depan dan membuat kepala peledak yang lebih ringan.
Oleh sebab itu, ini Patriot cuba untuk datang di gerakan cepat, dan kebanyakan masa,
majoriti daripada masa, ia hanya akan terbang dengan gerakan cepat itu.
>> -Sebaik Sahaja pengendali sistem Patriot menyedari Patriot terlepas sasarannya,
mereka meletupkan kepala peledak Patriot, untuk mengelakkan mangsa mungkin jika ia
telah dibiarkan jatuh ke tanah.
>> -Itu Adalah apa yang kebanyakan orang melihat, orang-orang bola api besar di langit,
dan disalah anggap sebagai memintas kepala peledak Scud.
Walaupun pada waktu malam langit, Patriots muncul
untuk menjadi berjaya memusnahkan scuds, di Dhahran,
mungkin ada kesilapan tentang prestasinya.
Di sana, sistem radar Patriot kehilangan jejak yang Scud masuk,
dan tidak pernah dilancarkan, atas sebab kecacatan perisian.
Ia adalah Israel yang pertama kali ditemui yang lagi sistem yang berada di atas,
yang lebih besar perbezaan masa yang menjadi, kerana jam tertanam
dalam komputer sistem.
>> -Kira-Kira 2 minggu sebelum tragedi di Dhahran,
Israel dilaporkan Jabatan Pertahanan,
bahawa sistem telah kehilangan masa, bahawa selepas kira-kira 8 jam berjalan,
mereka menyedari bahawa sistem itu menjadi nyata kurang tepat.
Jabatan Pertahanan bertindak balas dengan memberitahu semua bateri Patriot
untuk tidak meninggalkan sistem untuk jangka masa yang panjang.
Mereka tidak pernah berkata apa masa yang lama adalah.
8 jam?
10 jam?
1000 jam?
Tiada siapa yang tahu.
-The Patriot bateri ditempatkan di berek
di Dhahran, dan dalaman cacat yang jam, telah di lebih 100 jam
pada malam 25 Februari.
>> -Ia Dikesan masa untuk ketepatan yang kira-kira 1/10 saat.
Sekarang 1/10 yang kedua ialah nombor menarik
kerana ia tidak boleh dinyatakan dalam binari, betul-betul.
Maksudnya, ia tidak boleh dinyatakan, betul-betul,
di mana-mana komputer digital moden.
Sukar untuk percaya, tetapi menggunakan ini sebagai contoh.
Mari kita jumlah itu, 1/3.
1/3 tidak boleh dinyatakan dalam perpuluhan, betul-betul.
1/3 adalah 0,333 berlangsung selama infiniti.
Tiada cara untuk berbuat demikian, dengan ketepatan mutlak, dalam perpuluhan.
Itulah jenis yang sama masalah yang berlaku di Patriot.
Semakin lama sistem itu berlari, yang lebih teruk ralat masa yang menjadi.
>> -Selepas 100 jam operasi, kesilapan dalam masa hanya kira-kira 1/3 daripada kedua.
Tetapi dari segi menyasarkan peluru berpandu bergerak pada datang 5,
ia menyebabkan pengesanan yang kesilapan lebih 600 meter.
Ia akan menjadi satu kesilapan yang teramat untuk tentera di Dhahran.
>> -Apa Yang berlaku, adalah pelancaran Scud adalah dikesan oleh satelit amaran awal,
dan mereka yang baharu bahawa Scud adalah datang dari arah umum mereka.
Mereka tidak tahu di mana ia datang.
>> -Ia Kini sehingga radar komponen sistem Patriot,
mempertahankan Dhahran, untuk mencari dan menyimpan mengesan peluru berpandu musuh yang masuk.
>> Radar -The sangat pintar.
Ia benar-benar akan mengesan kedudukan Scud
dan kemudian meramalkan di mana ia mungkin akan menjadi,
masa yang akan datang, radar menghantar nadi keluar.
Yang dipanggil pintu julat.
>> -Kemudian, Sebaik sahaja Patriot memutuskan masa yang cukup mempunyai
diluluskan untuk kembali dan menyemak seterusnya lokasi untuk objek ini dikesan,
ia kembali.
Oleh itu, apabila ia kembali kepada salah tempat, ia kemudian melihat objek tidak
dan ia memutuskan bahawa tidak ada objek, ia merupakan pengesanan palsu,
dan jatuh trek.
Scud diterima hilang dari skrin radar,
dan saat kemudian, ia menyelar ke markas.
Scud membunuh 28 dan yang terakhir satu dipecat semasa Perang Teluk Pertama.
Malang sekali, perisian terkini tiba di Dhahran pada hari berikutnya.
Kesilapan perisian mempunyai menjadi tetap, tutup
salah satu bab dalam bermasalah sejarah peluru berpandu Patriot.
>> [AKHIR MAIN SEMULA]
>> DAVID J MALAN: Jadi kita akan lihat pada beberapa batasan sama dalam hanya sedikit.
Tetapi pertama, mari kita peralihan kepada beberapa FYI yang.
Jadi one-- hujung minggu ini, akan menjadi bahagian super,
yang bertujuan untuk menggantikan bahagian yang dijadualkan secara tetap, yang
akan bermula minggu itu.
Sila lihat di laman web CS50 untuk maklumat lanjut mengenai mereka.
Mereka juga akan difilemkan dan distrim hidup untuk mereka yang tidak dapat hadir.
Masalah menetapkan 1 adalah di laman web kursus ini sudah,
dan kami akan mengambil lihat yang dalam hanya sedikit.
Dan waktu pejabat juga akan mengambil meletakkan Isnin hingga Khamis.
>> Jadi ini adalah yang paling berkanun program kita melihat pada masa lalu.
Ia seperti yang paling mudah program yang anda boleh menulis dalam C,
dan walaupun itu sedikit dengan satu tuntutan yang berani.
Betul?
Kerana ada banyak pura-pura kerumitan kepada ini.
Jadi mari kita melihat cepat pada apa yang ada elemen-elemen ini
telah dan kemudian cuba untuk menyediakan model mental untuk bagaimana
ini paling mudah program bekerja, dan kemudian kami akan mula
melihat sesuatu perkara yang lebih kompleks.
Jadi garis ini di sini, yang diketengahkan sekarang, kuning, apa yang kita katakan, masa lalu,
bahawa ini tidak untuk kita?
Apakah maksud ia berfungsi?
Sesiapa sahaja dari jauh ke belakang?
Yeah.
>> PENONTON AHLI: [didengar]
DAVID MALAN J: Baik.
Oleh itu, ia memberikan anda akses kepada arahan, atau mari kita
memanggil mereka fungsi, bahawa seseorang lain menulis, yang diisytiharkan,
boleh dikatakan, dalam beberapa fail lain.
Oleh itu, kita akan melihat dengan jelas apa fail h adalah berbanding fail c, akhirnya.
Tetapi buat masa ini, hanya tahu printf itu, misalnya,
adalah antara fungsi-fungsi yang telah diisytiharkan dalam fail lain, di suatu tempat
lain pada cakera keras awan bahawa membolehkan kita untuk mengakses printf dan menggunakannya
tanpa perlu mencipta semula bahawa roda diri kita sendiri.
Sementara itu, utama.
Bagaimana akibat analog utama, minggu lepas?
Yeah.
>> PENONTON AHLI: bendera hijau diklik.
>> DAVID MALAN J: Ya.
Scratch, apabila bendera hijau diklik.
Ia seperti sekeping teka-teki yang bermula berselindung.
Dan begitu juga, tidak dunia telah memilih beberapa tahun yang lalu bahawa dalam C,
dan mempunyai banyak bahasa lain, jika anda mahu menulis program,
Fungsi pertama anda telah dipanggil, utama.
Dan ia perlu kelihatan seperti ini.
Tetapi kita akan kembali, masa yang lain, untuk apa, int,
dan, tidak sah, bermakna dalam konteks itu.
Buat masa ini, pendakap kerinting adalah jenis daripada seperti bentuk sekeping teka-teki Scratch
yang merangkumi beberapa beberapa baris.
Dan di antara di barisan di sini, adalah salah satu ini di sini.
printf adalah fungsi yang tujuan dalam hidup adalah untuk mencetak rentetan diformat.
Dan dengan diformat, saya maksudkan anda boleh pasangkan nilai pemegang tempat,
dan anda boleh menentukan berapa banyak perpuluhan mata, berapa banyak nombor untuk mencetak
selepas titik perpuluhan dan sebagainya.
Dan printf, sudah tentu, mengambil masa satu atau lebih hujah atau parameter,
atau dikenali, lebih mudah, sebagai input.
>> Jadi printf, seperti banyak fungsi, mengambil input.
Dan orang-orang input memeluk oleh kedua-dua kurungan di sini.
Dan di dalam mereka adalah satu input.
Ia rentetan, seperti yang kita telah memanggilnya, yang hanya jujukan aksara,
seperti perkataan, atau frasa, atau keseluruhannya esei walaupun, di antara tanda petik.
Dan itulah apa yang akan mempengaruhi tingkah laku printf kerana, sudah tentu,
ia hanya satu fungsi cetak generik.
Ia tidak akan tahu apa yang untuk mencetak, melainkan jika anda beritahu.
Dan kemudian, beberapa detel.
Apa yang kita katakan ini pelik urutan simbol-simbol itu?
Yeah.
>> PENONTON AHLI: Talian Baru.
>> DAVID MALAN J: Talian Baru.
Jadi ternyata, anda tidak boleh hanya melanda, memasuki, apabila anda menulis program.
Secara umumnya, pengkompil akan mendapat sedikit keliru tentang apa yang anda maksudkan.
Sebaliknya, anda perlu benar-benar berkata, berilah baris baru di sini.
Dan sebagainya / n adalah apa yang kita umumnya memanggil watak melarikan diri.
Jadi n, bagi talian baru.
Dan pengkompil tahu bahawa apabila ia melihat / n,
ia sebenarnya perlu mendorong komputer, akhirnya, atau printf, dalam kes ini,
untuk mencetak yang baru yang sebenar line, seperti memukul, masukkan,
kekunci pada papan kekunci anda.
Dan akhir sekali, apa kata kita katakan ini sekeping sintaks adalah untuk?
Apa yang ia mewakili?
Yeah.
>> PENONTON AHLI: [didengar]
>> DAVID MALAN J: Ia hanya akhir baris.
Ia adalah akhir kenyataan itu.
Dan sedar bahawa kita tidak meletakkan mereka di mana-mana.
Kita tentu tidak meletakkan mereka di hujung setiap baris.
Sebagai contoh, ada yang tidak ada pada baris pertama, ada pun di talian
dengan, utama, ada tiada selepas pendakap kerinting,
tetapi anda akan mula melihat dan mendapatkan biasa dengan mana ia dipanggil untuk.
Dan ia hampir sentiasa selepas majlis panggilan atau kenyataan, beberapa tindakan
bahawa anda sebenarnya mengambil.
>> Dan tahu sekarang, terutamanya jika di kalangan mereka yang kurang selesa,
ini adalah jenis perkara-perkara bodoh bahawa anda akan berakhir tidak sengaja terhantuk
kepala anda ke dinding atas.
Kerana anda akan secara logik yakin dalam beberapa masalah
anda telah diselesaikan untuk masalah set, dan perkara yang bodoh hanya
tidak akan menyusun atau berjalan.
Dan selalu, awal, ia akan kerana anda terlepas kurungan,
atau anda terlepas koma bernoktah.
Dan jadi hanya ingat jenis-jenis perkara,
dan cuba untuk tidak kecewa dengan mereka kerana cepat melakukan ini
menjadi topi lama.
Tetapi ia adalah sangat mudah untuk mendapatkan kecewa awal, sebagai hasilnya.
>> Oleh sebab itu, mari kita lihat bagaimana garis ini adalah benar-benar bekerja
dan kemudian melihat yang sedikit satu lebih rumit.
Oleh itu, kita mempunyai lebih daripada di sini, keupayaan untuk menarik pada skrin ini.
Dan mari kita andaikan bahawa ini adalah skrin komputer saya,
tetapi saya menulis, hello program ini, dan saya tidak dilaksanakan, printf.
Pengguna lain telah dilaksanakan, printf.
Yang ingin mendakwa telah melaksanakan, printf?
Jika kita boleh?
Baiklah, apa nama anda?
>> PELAJAR 1: [? Copal. ?]
>> DAVID J MALAN: Copal, datang ke atas.
Naiklah.
Baiklah.
Jadi kita mempunyai, di sini, beberapa tag nama, kerana kita akan membuat permainan kecil ini.
Dan kami akan menghubungi anda, printf.
Dan jika anda ingin datang ke sini, apa yang saya baru sahaja dilukis pada skrin,
ia adalah agak mudah, ada saya, ini.
>> Baiklah, jadi, hello nama saya, printf, jika anda mahu untuk meletakkan bahawa pada.
Baiklah.
Dan jika anda boleh pergi pendirian oleh skrin komputer
seolah-olah anda adalah fungsi yang datang dengan sistem komputer ini.
Dan tujuan anda dalam hidup adalah untuk benar-benar mencetak sesuatu.
Tetapi sama seperti program yang kami hanya mempunyai pada skrin, di sini,
kita akan perlu benar-benar memberi anda masukkan beberapa.
>> Dan sebagainya, jika input saya, di sini, adalah nampaknya, apa yang diserahkan kepada printf,
mari kita jenis mengejek ia seperti ini.
Saya akan benar-benar menulis pada sekeping kertas, "hello, dunia,"
garis miring N. Dan untuk menjadi jelas, apa Saya baru sahaja dikeluarkan atas sekeping kertas,
kelihatan seperti ini.
Oleh itu, apabila saya menjalankan program ini, dan ini garisan kuning kod mendapat dilaksanakan,
ia seolah-olah saya, program hello itu, Kuserahkan input beberapa off ke fungsi
bahawa orang lain menulis.
>> Dan jika anda, dengan jari anda, boleh sebenarnya, dengan jari anda,
menarik pada skrin apa sahaja ia adalah anda telah diserahkan,
kesan, akhirnya, adalah untuk melihat dengan jelas bahawa, pada skrin.
Dan kes sudut Little sini.
Dan baik, kita tidak boleh melihat , talian baru, pada ketika ini.
Adalah tidak betul untuk anda secara jelas menarik newline itu.
Tetapi jika kita terus menulis perkataan pada skrin, mereka akan berakhir di bawah itu.
>> Jadi terima kasih banyak, tetapi melekat di sekitar sini untuk satu masa.
Kini kita perlu satu yang lain sukarela, jika kita boleh,
yang akan perlu memainkan peranan daripada- Ia hanya orang dalam orkestra
sekarang.
Bagaimana about-- OK.
Di sini.
Naiklah.
Siapa nama anda?
>> PELAJAR 2: [? Ivay. ?]
DAVID MALAN J: Maaf?
PELAJAR 2: [? Ivay. ?]
DAVID J MALAN: Ethan, datang ke atas.
Tidak?
Adakah saya mendapatkan salah itu, walaupun selepas anda menyebutnya dua kali?
Naiklah.
Sukar untuk mendengar di sini.
OKAY.
Dan saya minta maaf, apa nama anda?
>> PELAJAR 2: [? Ivay. ?]
>> [? DAVID J MALAN: Ivay. ?] OKAY.
Buat masa ini, jika anda tidak fikiran, anda GetString.
>> PELAJAR 2: OK.
Sejuk.
DAVID J MALAN: Jadi, jika anda mahu berdiri di sini hanya untuk seketika,
mari kita lihat pada yang sedikit program yang lebih kompleks, yang
kini mempunyai tiga baris kod.
Oleh itu, kita perlu, satu, nyatakan nama anda menggunakan printf; dua, panggilan kepada GetString,
diikuti dengan penyerahan hak kepada pembolehubah dipanggil, tali s, atau dipanggil s;
dan kemudian satu lagi panggilan untuk, printf, tetapi kali ini dengan dua input.
>> Negeri itu, kita telah dibentangkan nama, atau lebih tepat, kami telah
dibentangkan panggilan printf.
Jadi, saya akan menulis, Nyatakan nama anda.
Dan sebagainya, apa yang saya akan lulus, printf, dalam hanya seketika,
cukup sekadar ini.
Jadi jika anda ingin pergi ke hadapan dan menarik ini pada skrin, itu input anda sekarang.
Baiklah.
Dan lupa tali, kita kini mempunyai garis kita sendiri kod di sini.
Jadi, dalam, GetString, kita perlu untuk benar-benar memanggil, GetString.
Jadi tujuan anda dalam hidup adalah untuk hanya berjalan keluar ke orkestra, jika anda boleh,
dan mendapatkan nama seseorang.
Tetapi mari kita memberikan anda sesuatu untuk meletakkan ia.
Jika anda ingin, pergi hadapan dan mendapatkan tali,
mendapatkan nama seseorang pada itu sehelai kertas, jika anda boleh.
>> Baiklah.
Dan kita akan lihat, hanya seketika, yang namanya kami terima.
Sementara itu, apa yang saya akan mempunyai bersedia, adalah sekeping kosong
kertas, di mana, saya akan untuk menyimpan apa-apa nilai ia
adalah bahawa GetString adalah kembali kepada saya, Saya, sebagai pembolehubah rentetan dipanggil, s.
Baiklah.
Jadi apa yang anda ada di sini?
Nik.
Baiklah.
Oleh itu, kita mempunyai nama Nik di sini.
Jadi ini adalah apa yang benar-benar telah dikembalikan
kepada saya, jadi untuk bercakap, oleh GetString.
>> Saya, sekarang, Aku akan melaksanakan sebelah kiri tangan
ungkapan itu, di mana saya hanya tulis, untuk tujuan hari ini, Nik.
Jadi sekarang, saya mempunyai pembolehubah dipanggil, s, menyimpan nama Nik ini.
Saya telah diserahkan kepada printf, hujah yang sebelumnya.
Tetapi selaras ketiga dan terakhir kami kod, saya benar-benar perlu printf tangan
sesuatu yang different-- sedikit "hello,% s," garis sendeng terbalik n.
>> Dan sebagainya barisan terakhir saya akan untuk send-- perkara terakhir saya
akan menulis sekarang, adalah ini.
Jadi kedua-dua baris kod, atau agak barisan terakhir kod,
Panggilan untuk dua inputs-- satu, ini, dan dua, ini.
Jadi, jika fungsi printf kami kini boleh mengambil ini sebagai input,
biarlah saya mengosongkan skrin untuk anda.
Sebenarnya tidak, anda boleh pergi ke hadapan.
Kami akan menyerahkannya, sejak ia pada program yang sama.
Kita harus melihat, hello, Nik.
Baiklah.
Jadi ini adalah cukup beberapa gelung untuk melompat melalui, hanya
untuk menulis, menyatakan anda nama, dan, hello, Nik.
Tetapi idea ini mudah untuk mesej yang berlalu, lulus input dan output menerima,
betul-betul model yang kita akan mempunyai untuk walaupun fungsi yang paling kompleks.
Jadi terima kasih banyak kepada anda kedua-duanya.
Kami mempunyai tekanan indah bola sini untuk anda.
Dan terima kasih kepada GetString kami dan sukarelawan printf sama.
Terima kasih.
Baiklah.
Terima kasih kepada anda berdua.
>> Oleh itu, kita telah bercakap tentang setakat ini, kebanyakannya mengenai tali.
Dan ternyata C yang boleh benar-benar memahami beberapa jenis data yang berbeza.
Malah, mari kita yang melihat ini di sini.
Jadi C, dan banyak bahasa, memahami perkara-perkara yang dipanggil aksara.
Char A umumnya bait tunggal, atau lapan bit.
Dan ia mewakili satu aksara, seperti huruf A, atau ibu negara
Surat, atau huruf huruf kecil A, atau tanda seru,
atau mana-mana watak yang anda boleh menaip pada papan kekunci anda, dan kadang-kadang lebih.
Kami juga berlaku untuk melihat pelampung.
Float A adalah, secara amnya, 32-bit nilai, atau empat bait
kerana sekali lagi, satu bait adalah lapan bit.
>> Jadi apungan adalah nilai mata terapung, sesuatu dengan titik perpuluhan.
Dan sesungguhnya, itulah yang filem bercakap
ketika mereka bercakap mengenai terapung mata yang, beberapa nombor tetap bit
digunakan untuk mewakili nombor nyata.
Tetapi ada juga perkara yang dipanggil beregu.
Ini wujud di Jawa, jika anda telah mengambil APCS,
dan dua, kerana nama itu bersyukur mencadangkan, adalah dua kali lebih besar sebagai apungan.
Ia masih nombor nyata, ia hanya mempunyai lebih bit
yang boleh digunakan untuk menjadi yang lebih tepat, atau untuk menyimpan nombor yang lebih besar.
int mudah.
Kita bercakap tentang masa lalu.
Ia hanya integer.
Dan ia biasanya 32 bit, atau empat bait.
>> Dan sebagainya, jika anda mempunyai, mari kita lihat sekarang, 32 bits-- dan kita melakukan ini pada minggu 0,
pernah jadi briefly-- jika anda mempunyai 32 bit, apa yang paling besar
nbr boleh mewakili sebagai integer?
Memberikan atau mengambil?
Ia seperti 4 bilion, dan itu hanya jika kami
mewakili nombor positif sahaja.
Jika anda mempunyai 32 bit, dan anda mahu mewakili nombor negatif juga,
rangkaian anda adalah, pada dasarnya, negatif 2 bilion kepada positif 2 bilion.
Tetapi secara amnya, kita akan bermula pada 0 pergi sehingga 4 bilion.
>> Anda tidak perlu tahu dengan tepat, tetapi kita boleh melihat ini, sebenarnya, jika saya hanya
membuka kalkulator sedikit di sini.
Yang boleh saya lakukan 2 32, dan itulah berapa besar,
berapa banyak nilai yang anda boleh mewakili, dengan 32 bit.
Dan ia adalah kira-kira 4 bilion.
Oleh itu, kita akan terus melihat jumlah itu di beberapa tempat yang berbeza.
Tetapi jika anda perlu lagi nombor daripada itu,
ternyata ada yang sesuatu yang dinamakan yang panjang panjang.
Dan yang panjang panjang adalah biasanya 64 bit, yang
bermakna ia adalah suatu perintah magnitud lebih besar daripada int.
>> Oleh itu, saya tidak dapat menyebut terbesar nombor yang anda boleh mewakili,
tetapi ia adalah ketara lebih besar.
Sekarang sebagai diketepikan, sejarah, jika int adalah 32 bit,
dan yang panjang panjang adalah 64 bit, bagaimana besar adalah yang lama, tidak lama lama?
Anda akan berfikir ia lebih lama daripada int tetapi mungkin kurang panjang daripada yang panjang panjang,
tetapi ia sebenarnya bergantung.
>> Dan maka ia ternyata satu daripada kekecewaan juga,
dengan menulis kod pada sistem tertentu, adalah bahawa tidak semua jenis data
mempunyai nilai-nilai yang telah ditetapkan.
Kadang-kadang ia banyak bit ini.
Kadang-kadang ia adalah bahawa bit banyak.
Jadi, anda sebenarnya perlu tahu, kadang-kadang, apa perkakasan
anda menjalankan perisian anda.
Syukurlah, bahasa lain dan jenis data yang lain yang kini wujud,
membolehkan anda untuk menjadi lebih tepat.
Nah, kita lihat tali, dan kami melihat bool, juga,
tetapi ternyata mereka yang datang hanya dengan perpustakaan CS50.
Jadi mereka tidak dibina ke dalam C. Mereka sebaliknya,
datang dalam fail yang dipanggil CS50.h, yang kita akan akhirnya
mengupas kembali lapisan.
Tetapi buat masa ini, mereka hanya jenis data tambahan.
Bool A adalah benar atau palsu, dan tali adalah jujukan aksara,
seperti perkataan.
Sekarang printf, kita telah melihat, mempunyai ruang letak,% s adalah satu.
Dan anda mungkin boleh, kini, membuat kesimpulan daripada contoh-contoh lain, bagaimana
anda boleh mempunyai pemegang tempat yang untuk jenis data yang berbeza.
Sebagai contoh, mengambil tekaan, jika anda mahu mencetak char tunggal menggunakan
printf, pemegang tempat itu mungkin% c.
Dan jika anda mahu untuk mencetak satu integer dengan pemegang tempat,% i.
% lld adalah nilai perpuluhan yang lama, tetapi lama lama, supaya peta untuk itu.
Kemudian% f untuk terapung nilai mata atau dua,
jadi kadang-kadang mereka semula digunakan dalam konteks yang berbeza.
Oleh itu, kita akan melihat dan menggunakan beberapa orang-orang dari masa ke masa.
Dan printf dan fungsi lain juga urutan melarikan diri menyokong orang lain ',
dan kadang-kadang, ini adalah perlu.
Jadi garis sendeng terbalik n adalah barisan baru.
Backslash t, adakah sesiapa mahu mengambil tikaman?
PENONTON AHLI: Tab.
DAVID J MALAN: Tab.
Jadi, jika anda benar-benar mahu mencetak tab, tidak
nombor tetap ruangan tetapi yang sebenar watak tab, anda tidak memukul anda,
tab, kunci pada papan kekunci, secara amnya, anda benar-benar melakukan backslash t.
Backslash petikan berganda, mengapa saya pernah mahu itu?
Betul?
Mengapa saya tidak boleh hanya menaip petikan berganda pada papan kekunci saya?
PENONTON AHLI: Kerana, jika tidak, ia
akan rasa ia akhirnya daripada suka cetak anda [? teks. ?]
>> DAVID J MALAN: Tepat sekali.
Ingat, dengan kami contoh printf, apabila kita
telah lulus untuk printf dalam input, di sebelah kiri bahawa rentetan input
dan di sebelah kanan input yang musim bunga, sudah tentu, adalah petikan berganda.
Jika input anda sendiri mempunyai dua quote di tengah-tengah itu,
komputer mungkin berpotensi keliru, untuk,
adakah petikan berganda ini tergolong di tengah-tengah?
Adakah ia tergolong dengan yang kiri itu?
Adakah ia termasuk golongan yang betul?
Dan sebagainya, jika anda mahu untuk menjadikannya super jelas, anda melakukan Backslash petikan berganda,
supaya ia melarikan diri, jadi untuk bercakap, dan ia tidak conflated untuk sesuatu yang lain.
Dan ada beberapa yang lain di sini, r garis sendeng terbalik, petikan tunggal, 0,
supaya kita lihat dari masa ke masa, juga.
Dan sekarang, bagaimana pula dengan fungsi?
>> Jadi tindakan yang boleh kita ambil setakat ini dalam bahasa ini, C, baik, yang kita lihat,
printf, sudah tentu, dan semua yang lain pada skrin,
di sini, bahawa kami akan gunakan untuk beberapa minggu pertama kursus ini sahaja,
datang apabila perpustakaan CS50.
Dan mereka menjadikan ia lebih mudah, dalam C, untuk benar-benar mendapatkan input pengguna.
Ia ternyata bahawa dalam C, dan terus-terang dalam bahasa sedikit,
ia sakit sebenar di leher untuk melakukan sesuatu yang mudah, seperti segera pengguna
untuk papan kekunci, untuk input masing-masing.
Dan supaya fungsi-fungsi ini adalah lebih mudah.
>> Dan ia juga mempunyai ralat memeriksa seluruh,
supaya, apabila anda ingat pada hari Rabu, kita
melihat, mencuba semula, amaran, apabila saya tidak bekerjasama,
dan saya menaip perkataan, dan bukannya nombor?
Kami telah melakukan mengangkat berat awal pada memastikan pengguna bekerjasama.
Tetapi ini adalah hanya latihan roda yang kami akan akhirnya,
dan cepat, mengambil kira.
>> Jadi untuk recap, maka, mari kita lihat yang cepat,
sama seperti yang kita lakukan dengan Awal, di beberapa konstruk berkanun dalam C.
Ini bertujuan untuk, jenis daripada, menjadi lawatan badai,
hanya supaya anda mempunyai rujukan dan bahawa anda telah melihat perkara yang pada mulanya.
Tetapi kemudian kita akan melihat pengekodan yang sebenar menggunakan beberapa blok-blok bangunan.
Begitu banyak seperti di Awal, apabila kita telah penyata suka,
katakan atau, tunggu, dalam C, kita mempunyai fungsi juga, seperti printf.
>> Jika kita ingin menyatakan keadaan dalam C, ia adalah sama, di hadapan Allah,
untuk sekeping teka-teki yang kelihatan seperti ini dalam Scratch.
Tetapi sebaliknya, kita betul-betul hanya menulis, jika.
Dan kemudian, dalam kurungan, kita meletakkan syarat,
di mana keadaan itu adalah apa yang kita akan memanggil, sekali lagi, ungkapan boolean.
Dan sekali lagi, ini adalah jenis kod pseudo.
Dan, sebenarnya, // adalah komen.
Ia hanya perkataan Bahasa Inggeris kepada diri saya sendiri.
Tetapi ini adalah umum struktur, jika, keadaan.
Tetapi kita akan melihat konkrit contoh dalam hanya seketika.
>> Jika anda ingin mempunyai dua hala garpu di jalan raya,
sama seperti yang kita lakukan dengan sukarela kami di Wednesday, anda boleh mempunyai, lain jika.
Dan jika anda mahu mempunyai ketiga dan keadaan akhir, atau keadaan lalai,
anda boleh mempunyai hanya satu blok yang lain, di sana.
Begitu juga, dengan ungkapan-ungkapan boolean, anda boleh, dan, mereka bersama-sama.
Dan kita melihat pada hari Rabu, yang ia bukan satu Ampersand tunggal,
ia dua, atas alasan peringkat rendah yang akhirnya kita akan melihat dan bermain dengan.
Or-ing perkara bersama-sama ialah 2 bar menegak.
Pada papan kekunci Amerika Syarikat, ini umumnya kunci
dengan kekunci Shift di atas Masukkan kunci atau Kembali utama.
>> Kemudian ada perkara-perkara yang kami akan menggunakan mungkin sekali atau dua kali.
Mereka berfungsi bersamaan dengan apa yang anda boleh lakukan dengan, jika, lain jika,
lain jika pun, membina, tetapi mereka dipanggil suis.
Mereka kelihatan sangat berbeza, tetapi kita akan melihat dalam beberapa kod pengedaran kami,
untuk satu set masalah masa depan, kemungkinan besar, bahawa itu kadang-kadang hanya yang lebih cantik
cara untuk menyatakan keseluruhan sekumpulan syarat,
tanpa banyak pendakap kerinting dan banyak kurungan dan lekukan.
Tetapi mereka memberi kita tidak lebih kuasa daripada kita sudah.
Dan kini gelung.
Dan yang satu ini, kita akan melihat di sedikit lebih perlahan.
Tetapi, kita akan mula menggunakan, terutama bagi mereka yang sudah biasa.
Ini adalah cara yang kanun, jika amat cara yang sukar difahami, untuk menulis gelung dalam C.
>> Sekarang gelung dalam Scratch adalah agak mudah.
Anda mempunyai, selama-lamanya, blok.
Anda mempunyai, ulang, blok dengan hanya sebilangan anda perlu menaip.
Dan dengan itu, untuk gelung, anda boleh melaksanakan kedua-dua idea-idea,
tetapi ia sedikit lebih teknikal.
Tetapi terus-terang, ia juga agak mudah.
Sebaik sahaja anda tahu perintah operasi, anda benar-benar
hanya akan pasangkan nilai dan memberitahu komputer apa yang perlu dilakukan.
Jadi di sini adalah satu contoh.
Ini adalah gelung itu, agak semata-mata, yang diambil kira dari satu nombor ke atas
melalui satu lagi.
Dan hanya dengan mengerling pada itu, walaupun anda mempunyai
pengalaman terlebih dahulu dengan bahasa ini, apa nombor
ia mungkin mula mengira pada?
OK, 0.
Dan saya meneka itu kerana anda melihat bahawa terdapat satu int dan i,
yang merupakan pembolehubah.
Ia dimulakan pada 0.
>> Dan kemudian, ia kelihatan seperti kita lulus printf, nilai.
Dan, sebenarnya, saya membuat kesilapan menaip sedikit di sini.
Tetapi itu mudah tetap.
Biar saya masukkan, saya di sini.
Kami kini mempunyai printf makhluk diluluskan bahawa nilai pemegang tempat.
Dan apa yang akan mengira sehingga melalui?
PENONTON: 50.
50.
49.
DAVID J MALAN: 49.
Jadi 50, pada pandangan pertama, seolah-olah betul.
Tetapi itu, ternyata, akan menjadi keadaan kita yang kita terus mendaftar.
Dan kita akan berhenti sebaik sahaja i tidak lagi kurang daripada 50.
Jadi gelung ini, sebaliknya, sekiranya melaksanakan, selagi i adalah kurang daripada 50.
Tetapi sebaik sahaja ia menjadi 50, atau 51, atau lebih teruk lagi, ia perlu berhenti secara automatik.
Baiklah.
>> Jadi apa yang sebenarnya berlaku di sini?
Jadi ini adalah perintah operasi untuk gelung.
Satu, anda mempunyai apa yang dikenali sebagai pengawalan.
Ini sebahagian diserlahkan kuning kod dilaksanakan pertama,
dan ia mempunyai kesan bahawa, setiap Rabu, anda mungkin bayangkan.
Ia mencipta pembolehubah yang dipanggil i dan ia Kedai dalam pembolehubah yang nilai 0.
Jadi saya adalah 0 pada ketika ini dalam cerita.
>> Perkara seterusnya yang berlaku dalam membina ini,
adalah bahawa keadaan mendapat diperiksa.
Jadi saya menyemak dengan segera, i adalah kurang daripada 50?
Dan sudah tentu, jawapannya buat masa ini adalah, sesungguhnya, ya.
Ya, kerana saya adalah 0, dan itu pasti kurang daripada 50.
Kemudian apa yang berlaku, adalah bahawa ini baris kod mendapat dilaksanakan.
Dan sebenarnya, jika ada beberapa baris kod dalam orang-orang pendakap kerinting,
mereka semua mendapatkan dilaksanakan satu demi satu.
>> Dan berkuat kuasa di sini, adalah nampaknya, untuk mencetak
jumlah i, yang akan 0, dan kemudian 1, dan kemudian 2.
Tapi kenapa?
Mengapa ia mendapatkan incremented?
Nah, perkara yang keempat yang yang berlaku ialah bahawa sintaks ini
mendapat dilaksanakan, selepas koma bernoktah.
i ++ adalah cara trengkas untuk mengatakan; mengambil nilai i, dan tambah 1 kepadanya;
dan kemudian ada peluang lagi, tambah 1 kepadanya; dan masa yang akan datang di sekitar,
tambah 1 kepadanya.
>> Jadi, jika kita terus pergi, apa yang akan berlaku
seterusnya saya tidak akan memulakan i pernah lagi.
Jika saya terus Memulakan i kepada 0, contoh ini
tidak akan berakhir kerana saya akan terjebak pada 0.
Tetapi apa yang akan berlaku adalah bahawa keadaan akan diperiksa,
baris kod akan dapat dilaksanakan, i akan incremented,
keadaan akan diperiksa, kod akan mendapat dilaksanakan.
Dan ia disimpan berbasikal lagi, dan sekali lagi, dan sekali lagi,
sehingga i ++ mendorong nilai 50.
>> Keadaan ini kemudian berkata, 50 kurang daripada 50?
Jawapannya, sudah tentu, adalah tidak, dan supaya seluruh kod berhenti melaksanakan.
Dan jika anda mempunyai kod yang lebih pada skrin turun di bawah, itulah yang berlaku seterusnya.
Ia timbul daripada ini pendakap kerinting dan terus mencetak lebih banyak selepas itu.
>> Jadi jenaka sekarang, dari Foxtrot, yang anda akan mungkin kini memahami.
Ia sentiasa lucu.
Ia seperti chuckles jenis meresap,
dan kemudian anda sedar anda tidak perlu menjadi ketawa pada jenaka seperti ini.
Tetapi terdapat beberapa bawa pulang sini, pedagogically juga.
Jadi ternyata bahawa saya hilang sekeping sintaksis,
atau yang Foxtrot hilang sekeping sintaks sini.
Apa yang hilang, bahawa kita mempunyai dalam setiap contoh yang lain, setakat ini?
Return, adalah di sana, jadi itulah sesuatu yang lain,
yang kita akan kembali kepada tidak lama lagi.
Apa yang hilang, walaupun?
Yeah.
>> PENONTON AHLI: The pengawalan daripada [didengar].
>> DAVID J MALAN: OK.
Jadi yeah.
Jadi sebenarnya, ini is-- Nah, dan kiraan adalah dimulakan
sehingga di atas, atau sebaliknya, sehingga diisytiharkan di atas.
Jadi ini adalah satu lagi cara untuk melakukannya.
Tetapi tidak dalam satu baris itu sah walaupun.
Bagaimana pula di sini?
>> PENONTON AHLI: Adakah pendakap kerinting?
>> DAVID MALAN J: Ya.
Jadi pendakap kerinting hilang.
Tetapi kod ini, maksud saya, untuk kredit mereka, sebenarnya, sintaksis sah.
Sebaliknya, anda tidak memerlukan pendakap kerinting
jika anda hanya mempunyai satu baris kod yang anda ingin melaksanakan dalam gelung.
Sekarang kita sentiasa, dalam kelas dan di semua kod pengedaran kami,
termasuk pendakap kerinting anyway, hanya demi kejelasan ini.
Tetapi menyedari bahawa di dalam buku teks dan contoh dalam talian,
anda dengan baik boleh melihat kerinting pendakap hilang ketika.
Dan itu OK, jika apa yang anda telah dilekukan dan bertujuan
hanya satu baris kod, dan tidak beberapa baris kod, berpotensi.
Baiklah.
Jadi berkaitan dengan isu ketakpersisan, adalah isu limpahan,
dalam erti kata bahawa, begitu juga, jangan integer mempunyai had kepada mereka
seperti mata yang terapung?
Dalam dunia titik terapung nilai, kita hanya boleh menjadi begitu tepat,
selepas itu, kadang-kadang perkara-perkara buruk boleh berlaku,
dan program-program kami boleh menjadi kereta dan kesilapan.
Kini dengan bilangan bulat, anda boleh menghadapi masalah.
Sekarang integer tidak mempunyai titik perpuluhan atau nombor selepas itu.
Ia hanya satu nombor asli, biasanya.
Jadi apa yang boleh berlaku dengan int?
Jika saya menggunakan int untuk mengira, apa yang boleh berlaku?
Nampaknya banyak yang lebih mudah.
Yeah.
>> PENONTON AHLI: Jika bilangan mendapat [didengar]
>> DAVID MALAN J: Ya.
Bagaimana jika anda mengira begitu tinggi, bahawa anda tidak dapat meluahkan bahawa jumlah yang sangat besar.
Betul?
Pada satu ketika, anda akan melebihi sempadan
daripada nilai 32-bit atau nilai 64-bit.
Kini sekali lagi, saya tidak pasti berapa mengucapkan nilai 64-bit,
tetapi saya tahu dengan integer 32-bit, nilai yang paling besar ia boleh,
jika ia hanya positif nilai, adalah kira-kira 4 bilion.
Jadi, jika saya cuba untuk mengira hingga 5 bilion, sesuatu yang akan berlaku.
Tetapi mari kita lihat apa, sebenarnya, boleh berlaku.
Dalam dunia integer limpahan, di mana anda, dari satu segi,
melimpah kapasiti yang integer, apa yang mungkin berlaku?
>> Jadi di sini adalah beberapa binari, ia adalah throwback kepada 0.
Itu semua 1, dan ruang letak di sana, adalah kuasa 2,
jadi ini adalah binari.
Jadi ini adalah 8, 1 bit pada skrin.
Dan jika anda masih ingat atau anda dengan cepat matematik,
apa nilai yang diwakili di sini dengan lapan 1 bit?
255.
Dan jika anda tidak pasti matematik, anda boleh melakukannya keluar.
Atau anda boleh hanya jenis sebab melaluinya,
tunggu satu minit, jika saya mewakili nilai 8 bit,
dan saya telah mendapat 256 nilai yang mungkin, tetapi di mana yang pertama adalah 0,
Saya hanya tahu bahawa terbesar akan menjadi 255,
dan itulah yang satu ini mungkin.
>> Jadi rasa saya cuba untuk menambah 1 kepada nilai ini.
Apa yang akan anda lakukan dalam gred sekolah apabila menambah 1, dan ia
tidak benar-benar sesuai kerana anda perlu membawa 1?
Apakah bilangan ini akan untuk menjadi apabila anda menambah 1?
Ia akan menjadi 0.
Betul?
Kerana jika anda mempunyai lebih banyak bits-- dan saya akan cuba untuk, jenis, taipkan ia di sini--
jika kita mempunyai lebih bit, apa yang kita boleh lakukan di sini adalah menambah 1,
dan kemudian kita akan mendapatkan ini.
Alamak.
Kita akan mempunyai sedikit 1 sepanjang jalan di sini.
>> Tetapi jika ini adalah yang terhad nilai, ia hanya 8 bit,
dan itulah yang telah ditetapkan oleh komputer,
yang 1 adalah berkesan tidak ada.
Ia hanya jenis jatuh dari tebing.
Dan jadi jika anda menambah 1-255, apa nilai yang anda nampaknya dapat?
0.
Dan sebagainya nombor tidak sengaja, dan mungkin, tidak sengaja,
berakhir membungkus sekitar seperti ini.
Jadi apa yang boleh menjadi implikasi ini?
Well, ada beberapa perkara yang berbeza.
Jadi salah, ia berakhir sehingga kelihatan seperti 0, tidak sengaja,
tetapi anda boleh jenis melihat, walaupun dalam dunia sebenar,
untuk lebih baik atau untuk lebih teruk, manifestasi idea ini had.
Sebagai contoh, mana-mana yang pernah dimainkan Lego Star Wars,
adakah sesiapa yang kebetulan tahu bilangan maksimum syiling
anda boleh mengumpul dalam Lego Star Wars?
Ambil tekaan berdasarkan soalan memimpin hari ini.
Ia lebih besar daripada 256 atau 255.
Ia adalah 4 bilion.
Jadi ternyata, dan ada beberapa dan kaum
beberapa Googling mengesahkan night-- lalu telah mendapat 4000000000 syiling emas,
atau barang kecil, di Lego Star Wars.
Walaupun nampaknya, ada cara untuk menipu permainan,
ada bug atau ciri, yang membolehkan anda hanya terakru banyak dan banyak mata.
Tetapi mungkin terbesar nilai, menurut
untuk pukulan skrin ini seseorang yang saya didapati dalam talian, memang, 4 bilion.
>> Sekarang mengapa?
Ia adalah tepat 4 bilion, mungkin kerana ada orang yang cuba,
yang menulis permainan ini, bahawa mereka boleh melakukan 4 bilion,
sesuatu, sesuatu, sesuatu, seperti nilai saya meletakkan
dengan kalkulator yang lebih awal, tetapi ia hanya sedikit bersih untuk manusia
untuk mengatakan bilangan maksimum daripada coins-- atau kancing,
kerana mereka memanggil mereka, kelak yang boleh mengumpul adalah 4 bilion.
Dan sebagainya, mengapa ini?
Bagaimana permainan LEGO melaksanakan kaunter
yang yang mengesan daripada beberapa duit syiling yang anda ada?
Mereka menggunakan apa?
PENONTON AHLI: Ia berhenti mengira selepas 4 bilion.
DAVID MALAN J: Ia berhenti mengira selepas 4 bilion,
yang bermakna anda boleh membuat kesimpulan, sebagai seorang programmer,
bahawa mereka mungkin menggunakan integer 32 bit.
Seperti pengaturcara benar-benar hanya bertaip, int, kod masing-masing,
dan itulah jenis pembolehubah yang mereka gunakan untuk menyimpan kod seseorang.
Jadi ada manifestasi lain jenis-jenis had.
>> Jadi saya tidak bermain game-- ini dan saya telah membaca di atas sejarah
untuk mengesahkan sebagai much-- tetapi dalam Versi asal Tamadun, di mana
anda nampaknya berinteraksi antara satu sama lain dan boleh berperang atau mempunyai keamanan,
Gandhi sepatutnya menjadi salah satu watak yang paling aman, kerana saya
memahaminya, dalam yang pertama versi Tamadun.
Dan sebenarnya, pada skala 1 hingga 10, agresif beliau adalah hanya 1.
Jadi yang begitu lemah-lembut, agresif, nampaknya.
>> Tetapi pada satu ketika, anda boleh nampaknya memasang demokrasi dalam geografi anda.
Dan jika anda memasang demokrasi ke dalam versi permainan,
maka tahap pencerobohan anda turun.
Ia adalah satu perkara yang baik.
Orang lebih tenang nampaknya, dalam keadaan itu.
Tetapi nampaknya, seseorang yang melakukan tidak mempunyai, jika, keadaan
dalam versi asal kod.
>> Jadi peringkat pencerobohan Gandhi pergi dari positif 1, tolak 2, kepada negatif 1,
tetapi permainan tidak memahami nombor negatif.
Jadi apa yang berlaku adalah pencerobohan Gandhi tahap pergi dari 1, kepada 0, dengan -1,
yang mempunyai kesan membungkus sekitar untuk menjadi
watak yang paling agresif dalam permainan, pada nilai 255,
pada skala 1 hingga 10.
Dan sejak itu, telah ada lebih jelmaan permainan ini,
dan mereka telah disimpan sebagai sejenis Paskah telur,
bahawa Gandhi nampaknya begitu teruk agresif.
Tetapi ia adalah hasil daripada kesilapan pengaturcaraan sangat mudah
dalam versi awal permainan.
>> Sekarang, lebih membimbangkan, lebih baru-baru ini, Boeing 787
telah didokumenkan sebagai mempunyai bug, bukan jenis peranti
anda terutamanya mahu mempunyai bug.
Dan tanda-tanda, bahawa saya akan membaca sini, dari talian artikel,
adalah ini, model 787 kapal terbang yang telah berkuasa secara berterusan
untuk 248 hari boleh kehilangan semua arus, AC,
kuasa elektrik, kerana unit kawalan penjana,
GCUs, pada masa yang sama pergi ke mod pasti selamat.
Jadi ini adalah satu amaran yang dikeluarkan apabila masalah ini telah ditemui.
Keadaan ini disebabkan oleh kaunter perisian,
dalaman kepada GCUs, jadi integer atau berubah-ubah,
yang melimpah kehendak selepas 248 hari kuasa berterusan.
Boeing dalam proses membangunkan menaik taraf perisian GCU yang
akan membetulkan keadaan yang tidak selamat.
>> Begitu banyak seperti peluru berpandu senario, di mana
mereka mempunyai beberapa jenis pembolehubah yang mengira dan mengira,
dan mengira, tetapi secara beransur-ansur melimpah sempadan keupayaannya,
sama melakukan pesawat sialan mempunyai limpahan berubah-ubah
selepas masa yang cukup untuk berjalan.
Dan sebagainya dengan cara yang lidah-di-pipi bekerja isu ini
adalah untuk benar-benar, reboot, kapal terbang anda setiap 247 hari, jadi memori yang akan dikosongkan
dan berubah kembali kepada 0.
Tetapi sedar, ini adalah sangat penjelmaan besar perisian,
terutamanya seperti yang kita dengar tentang Apple Sistem pengendalian yang akan ke dalam kereta,
dan diri memandu kereta daripada Google, dan apa-apa bilangan jelmaan perisian
dalam kehidupan seharian kita, TV dan jam tangan, dan banyak lagi,
menyedari dikelilingi oleh perisian, semua yang ditulis oleh kita manusia.
>> Dan seperti yang kita semua tidak lama lagi akan menemui, ia sangat mudah dan sangat biasa
untuk membuat kesilapan semasa menulis perisian.
Dan jika anda tidak menangkap mereka, beberapa perkara buruk boleh berlaku.
Kini kadang-kadang, ada perkara-perkara lucu yang boleh berlaku,
atau sekurang-kurangnya kadang-kadang kita tahu untuk mengharapkan beberapa kejahatan.
Jadi 0 dibahagikan dengan 0, dari gred sekolah, secara amnya adalah satu perkara yang buruk.
Ia ditentukan.
Dan ternyata out-- dan mari kita lihat jika mikrofon saya boleh mengambil ini up-- bahawa Apple
mempunyai beberapa menyeronokkan dengan ini baru-baru ini.
Jadi saya mempunyai iPhone di sini.
Saya akan bercakap dengan Siri dan bertanya untuk memberi saya jawapan kepada 0 dibahagikan dengan 0.
Apa yang 0 dibahagikan dengan 0?
>> SIRI: Bayangkan bahawa anda mempunyai 0 cookies, dan anda berpecah mereka sama rata
di kalangan 0 rakan-rakan.
Berapa banyak cookies tidak setiap orang dapat?
See?
Ia tidak masuk akal.
Dan Cookie Monster sedih bahawa tidak ada cookies.
Dan anda sedih kerana anda tidak mempunyai rakan-rakan.
DAVID J MALAN: Ia adalah jenis menjijikkan.
Jadi ini adalah apa yang hanya berkata di sana.
Ia tidak dapat ditentukan, ia tidak ditakrifkan, dan sesungguhnya, banyak bahasa pengaturcaraan
atau, benar-benar, penyusun akan mengesan apabila anda, dalam program,
cuba untuk membahagikan 0 oleh 0.
Lebih seronok daripada walaupun ini, adalah yang nampaknya, Cookie Monster
adalah di Twitter hari ini.
Dan dia menjawab ini, dengan ini, yang sememangnya comel.
Tetapi mari kita lihat cepat pada beberapa konstruk lain,
dan kemudian meletakkan beberapa ini kod untuk digunakan, dengan cara yang baik.
Jadi ternyata, di samping untuk gelung, ada
sesuatu yang dinamakan gelung sementara, yang kelihatan berbeza dan dilaksanakan
yang differently-- sedikit dan akhirnya kita akan melihat examples--
tetapi dalam erti kata lain, ia adalah mudah kerana ia
tidak membenarkan anda untuk memulakan dan mengemas kini dalam sempadan gelung.
Anda masih boleh melaksanakannya.
Jadi, anda boleh melakukan perkara yang tepat sama dengan gelung sementara, seperti untuk gelung,
tetapi sintaks anda, ultimately-- kerana kita akan akhirnya
see-- akan menjadi berbeza.
Bahkan ada do manakala gelung, yang sebenarnya adalah sedikit berbeza,
kerana manakala untuk gelung dan gelung sementara sentiasa
memeriksa keadaan mereka dahulu, jika meneliti perkara ini atas ke bawah,
ia jenis kelihatan seperti ia akan memeriksa keadaan ia yang terakhir kerana ia adalah
benar-benar barisan terakhir kod.
Dan sesungguhnya, yang akan menjadi berguna dalam program-program tertentu yang kita menulis,
jika anda mahu hanya membuta tuli melakukan sesuatu dan akhirnya memeriksa keadaan.
Itu tidak semestinya sesuatu yang buruk.
Jika kita mahu pembolehubah, yang boleh kita lakukan dalam beberapa cara yang berbeza.
Dan kita lihat dalam Foxtrot yang kartun, salah satu cara untuk melakukannya,
di mana anda mengisytiharkan pembolehubah anda, seperti int kaunter koma bertitik,
dan kemudian later-- mungkin seterusnya garis, mungkin 10 baris later--
anda sebenarnya memulakan ia.
Jadi ini 2 baris kod mengisytiharkan pembolehubah jenis int
dan memanggilnya kaunter, supaya ia memberikan saya bit cukup untuk memegang int.
Dan kemudian akhirnya, ia meletakkan nilai 0 ke dalam pembolehubah itu.
Ia mengatur 0 dan 1 dalam satu corak, yang kita tahu dari minggu lepas,
mewakili bilangan yang kita kenali sebagai 0.
Atau terus-terang, anda boleh melakukan ini banyak lebih ringkas, sama seperti ini.
>> Sekarang kita juga mempunyai keupayaan untuk fungsi panggilan.
Dan sebenarnya, di sini adalah garis 2 program, atau sebagian daripadanya,
yang membolehkan kita untuk benar-benar menulis beberapa kod yang
mendapat rentetan daripada user-- banyak seperti sukarela kami seketika ago--
menyimpan hasil dalam pembolehubah yang dipanggil nama,
dan then-- sama seperti dengan sukarela kami dengan cetakan printf-- daripada nilai-nilai
dengan melepaskan dua hujah, tali, diikuti oleh pembolehubah
dipanggil, nama, sendiri.
Jadi mari kita lihat, sebelum kita kembali kepada Mario di sana,
di beberapa sekarang, contoh-contoh ini.
>> Saya akan pergi ke depan dan terbuka sehingga, katakan, fungsi-0.c.
Dan seperti biasa, kod ini adalah didapati di laman web kursus ini,
jadi anda boleh bermain bersama-sama pada rumah dan melihat ia kemudian.
Tetapi di sini adalah program dalam itu dasarnya, dari baris 17 hingga 22.
Program utama adalah di mana program sentiasa akan bermula.
Program ini, nampaknya, akan untuk mencetak nama, usus besar.
Ia kemudian akan memanggil GetString, seperti yang kita lakukan dengan sukarelawan kami.
Dan kemudian, ini adalah menarik, ia akan memanggil PrintName.
Ternyata, selama ini, terdapat seolah-olah menjadi fungsi yang dipanggil PrintName.
Yang mencetak nama seseorang.
Kami tidak perlu menggunakan printf dari tadi, ada PrintName.
>> Tetapi itu mengelirukan kerana PrintName tidak
dilengkapi dengan C. Orang tidak mengada-adakan itu kira-kira 40 atau 50 tahun yang lalu,
Saya lakukan, sebaliknya.
Dan sebenarnya, jika saya tatal turun lagi, notis
bagaimana saya boleh menulis saya sendiri fungsi dalam C. Kami akan mempunyai akhirnya
menjelaskan mengapa kita terus berkata, tidak sah, di beberapa tempat,
tetapi untuk hari ini, mari kita hanya melihat nama.
>> On line 24, jika anda mahu mewujudkan fungsi anda sendiri,
anda benar-benar menulis menamakan fungsi.
Saya memilih PrintName.
Dalam kurungan, anda kemudian menentukan apa jenis
input, dan berapa banyak anda mahu fungsi ini untuk mengambil.
Dalam kes ini, saya ingin mengambil 1 pembolehubah dipanggil, nama,
dan ia akan menjadi dari jenis, tali, jadi ia akan
menjadi beberapa jujukan aksara.
Dan kemudian, program-- ini sama seperti di Awal,
anda boleh mempunyai teka-teki adat pieces-- akan mempunyai tingkah laku adat ini.
Ia akan memanggil printf lulus dalam, hello, pemegang tempat,
dan kemudian ia akan plug dalam apa pengguna dipanggil.
>> Jadi ini adalah satu contoh apa yang seorang saintis komputer akan
abstraksi panggilan atau berfungsi penguraian, yang hanya
cara mewah saying-- Adakah jika anda suka ini idea tahap tinggi,
seperti saya mahu fungsi yang mencetak nama seseorang, benar-benar anda
benar-benar boleh menulis printf dan kemudian lulus dalam hujah-hujah anda mahu,
dan program ini akan bekerja, kerana ia mempunyai sejak Rabu.
Tetapi anda boleh mula untuk abstrak jauh tanggapan mencetak nama.
Anda boleh memberikan nama, seperti PrintName, dan ini
adalah idea ini lapisan dari minggu 0.
>> Selepas ini, saya dan anda tidak perlu tahu atau mengambil berat bagaimana PrintName dilaksanakan.
Ya ia menggunakan printf, mungkin ia tidak, yang tahu apa yang menggunakan?
Siapa yang peduli?
Sekarang saya bercakap di sini, bukannya di sini.
Dan sesungguhnya, program kita lebih maju dan canggih,
kita akan terus mengambil untuk diberikan yang keping tahap teka-teki yang lebih rendah wujud.
Kerana kita menuliskannya atau orang lain lakukan, supaya
yang kita boleh membina di atas mereka.
Mari kita lihat ini varian, berfungsi satu.
>> Jadi yang satu ini lebih sedikit maju, tetapi ternyata
yang di perpustakaan CS50, hanya ada satu fungsi GetInt.
Kami tidak fikir, tahun lalu, untuk melaksanakan fungsi GetPositiveInt.
Dan itu sedikit menjengkelkan kerana jika anda semua menulis program yang mengandung
anda ingin mendapatkan yang positif integer dari pengguna,
anda benar-benar boleh menggunakan GetInt.
Dan anda benar-benar boleh menyemak dengan keadaan dan mungkin gelung
jika int yang lebih besar daripada 0 dan menjerit pada pengguna
jika dia tidak memberi anda nombor positif.
Tetapi mari kita membina ini bangunan menyekat diri kita sendiri, a,
sekeping Scratch adat, jika anda akan.
Saya akan mempunyai program di sini yang akhirnya, saya
mahu dapat untuk memanggil GetPositiveInt, dan saya mahu menjadi
boleh mencetak apa sahaja int iaitu.
Tetapi ini yang diambil dari sekarang.
Ia hanya diberi pada tahap yang tinggi nama yang mengatakan apa yang berlaku,
yang indah kerana ia sangat intuitif sekarang untuk dibaca.
Dan jika saya tidak mengambil berat apa yang di bawah hood, biarlah saya tatal ke bawah.
Dan ia sedikit menakutkan pada mulanya, terutama
jika ini adalah program pertama anda, tetapi mari kita lihat.
>> Saya tidak lagi berkata, tidak sah, kerana ia ternyata fungsi,
sama seperti GetString, boleh mengembalikan nilai kepada saya.
Mereka tidak hanya perlu untuk mencetak dengan skrin,
mereka benar-benar boleh menyerahkan saya sesuatu kembali.
Dan sedangkan sebelum PrintName, Saya tidak memerlukan apa-apa kembali.
Saya memerlukan kesan sampingan sesuatu yang muncul pada skrin,
tetapi saya tidak perlu manusia menyerahkan saya sesuatu kembali.
Di sini, dengan GetPositiveInt, seperti dengan GetInt,
Saya hendak diserahkan sesuatu kembali.
Jadi, saya berkata tidak, tidak sah, pada baris 23, tetapi int,
yang mengatakan, fungsi ini bahawa saya menulis,
dipanggil GetPositiveInt akan tangan saya kembali integer, tidak apa-apa,
tidak sah.
>> Sementara itu, ia akan mengambil masa tidak input, jadi saya, jenis, diterbalikkan ia.
Saya tidak memberi apa-apa GetPositiveInt input, saya mahu ia memberi saya keluarannya.
Kemudian apa yang berlaku sekarang?
Jadi di sini adalah bagaimana saya boleh mengisytiharkan pembolehubah.
Saya telah melakukannya di luar gelung, atas sebab-sebab akhirnya kita akan melihat,
tetapi ini hanya memberikan saya 32 bit dipanggil, n,
dan saya telah pra-menentukan mereka untuk menyimpan integer.
Dan di sini adalah bahawa, lakukan semasa membina, dan ini adalah mengapa ia berguna.
Secara harfiah melakukan ini, manakala n adalah kurang daripada 1.
Jadi mari kita lihat apa yang berlaku.
Saya mencetak keluar, sila memberi saya int yang positif.
Saya kemudian mendapatkan int, menggunakan CS50 berfungsi dan disimpan di n.
>> Dan kemudian, apa baris kod mungkin mendapat dilaksanakan akan datang, secara logik?
Yang garis nombor?
Ya, jadi 31.
Anda tidak akan tahu sehingga anda telah telah diberitahu atau semacam membuat kesimpulan itu,
tetapi itu benar.
Ia pergi atas ke bawah dan kemudian terus mengulangi.
Jadi, jika saya telah menaip di katakan, bilangan negatif 1, adalah n kurang daripada negatif 1?
Yeah.
Kerana negatif 1 adalah kurang daripada 1.
Jadi apa yang perlu berlaku?
Saya akan melakukan ini manakala n adalah kurang daripada 1,
jadi saya akan kembali ke garisan 28.
>> Dan setiap time-- dan mari kita berjalan this-- membuat fungsi 1 untuk menyusun,
dan sekarang dot mengurangkan fungsi 1.
Saya menaip negatif 1, ia akan terus menjerit pada saya
sehingga saya bekerjasama kerana masing-masing input saya adalah kurang daripada 1
dan jika ia manakala kurang daripada 1, Saya akan terus melakukan ini.
Jika saya akhirnya memberikan nombor seperti 50, bersyukur, ia berkata, terima kasih untuk 50.
Mengapa?
Kerana sebaik sahaja n tidak kurang daripada 1, saya berhenti terkandas dalam gelung ini,
dan kata kunci baru ini hari ini, pulangan, secara literal adakah itu.
Oleh itu, saya baru sahaja dilaksanakan, dalam rasa, bersamaan GetString,
di mana saya menyerahkan kembali kepada barang siapa yang menggunakan saya, beberapa nilai.
Ia tidak perlu tali, ia int.
Jadi mudah, cepat contoh, tetapi tidak lama lagi kita akan
melihat beberapa lebih canggih versi masih.
Malah, mari kita lihat pada satu angka, yang dipanggil return.c.
Dan yang satu ini sebenarnya lebih mudah.
Jadi tujuan ini program dalam life-- mari kita menyusun dan menjalankan,
sehingga membuat balasan, dot slash, notis return--
program ini hanya kiub nilai 2.
Ia agak bodoh, ia sukar kod, ia tidak mengambil apa-apa input,
tetapi ia menunjukkan satu lagi fungsi yang saya telah menulis sendiri.
Jadi di sini, saya telah mengisytiharkan berubah-ubah, yang dipanggil x, jenis int,
sama dengan bilangan 2, benar-benar sewenang-wenangnya.
Ini hanyalah beberapa percetakan gebu.
Ia mengatakan x kini, seperti dan itu, cubing dot dot dot.
Dan sihir nampaknya selaras 21.
Saya memanggil fungsi yang dipanggil, kiub, Saya menyerahkan sehelai kertas
dengan nombor 2 yang ditulis di atasnya, dan apa nilai, matematik,
yang saya mahu mendapatkan daripada itu?
Sama seperti cek kewarasan?
8.
Betul?
Saya mahu 2 cubed kembali, 2 hingga kuasa 3, jadi 8 kembali.
>> Jadi di mana kiub dilaksanakan?
Nah, notis ia dilaksanakan di sini.
Dan seperti sebelum ini, secara logik, walaupun sintaks yang mungkin
sangat baru kepada ramai daripada anda, Saya hendak fungsi ini
ke tangan saya kembali sehelai kertas dengan int di atasnya.
Jadi saya mempunyai int, yang Nama sewenang-wenangnya,
tetapi yang sesuai dipanggil kuasa tiga.
Input kepadanya, adalah n daripada menaip integer, jadi itu
bagaimana saya boleh lulus dalam bilangan 2 pada sehelai kertas.
Dan kemudian ternyata C sokongan matematik, jadi anda tidak perlu x bagi kali,
anda hanya menggunakan asterisk untuk pendaraban.
Dan ini mengembalikan n kali n kali n, yang hanya nilai cubed.
>> Jadi di mana kita akan pergi dengan semua ini?
Ini sebenarnya satu lawatan badai, yakinlah,
bahawa dalam bahagian-bahagian super dan dalam masalah menetapkan 1,
anda akan berjalan di semua ini lebih-lebih.
Dan dalam masalah set 1, kami akan beralih dari dunia grafik Scratch
kepada sesuatu yang lebih baris arahan dalam C. Tetapi kita akan mendapat inspirasi
dari sini permainan ini dari tadi, di mana
menggunakan C dan edisi standard daripada p set anda akan melaksanakan piramid Mario.
Dan dalam edisi penggodam daripada p set, jika anda supaya memilih untuk memilih,
anda akan melaksanakan sedikit lebih mencabar piramid dengan dua puncak.
Anda juga akan melaksanakan algoritma, algoritma tamak.
Ternyata ada yang beberapa logik yang menarik
di belakang proses berjalan stesen juruwang
dan benar-benar menyerahkan seseorang perubahan kembali.
Terdapat satu algoritma yang yang agak mudah, yang anda mungkin walaupun
memahami secara intuitif apabila anda mula-mula membaca kitab itu menyedari bahawa apa yang saya telah sentiasa
dilakukan bila-bila masa saya telah diberikan seseorang beberapa back-- wang yang membolehkan anda untuk sentiasa
mengurangkan bilangan wang kertas atau syiling logam
bahawa anda menyerahkan kembali kepada pengguna.
Dan ini, sudah tentu, adalah menarik kerana jika anda pergi ke CVS atau barang kecil,
anda tidak mahu menjadi tangan sejumlah besar orang-orang yang
atau sejumlah besar beberapa sen.
Anda mahu yang paling sedikit syiling, mungkin, mungkin.
>> Akhir sekali, anda juga akan dicabar melibatkan diri dalam dunia air
dan benar-benar mendapatkan penghargaan untuk pemetaan antara kadar aliran,
daripada suka, air dalam mandi, betapa banyak air digunakan.
Dan kiasan di dalamnya, akan music ini di sini,
yang kita akan berakhir pada untuk hanya 60 saat,
cat gambar kepala pancuran aliran rendah.
>> [VIDEO MAIN SEMULA]
-Semua Betul.
Saya mendapat segala-galanya di sini.
Saya mendapat Cyclone F Series, Hydra, Jetflow, Stockholm
Supersteam, anda nama itu.
>> -Dan Apa yang anda cadangkan?
>> -Apa Yang anda cari?
>> Lelaki -Power.
Kuasa.
-like Silkwood.
-Itu Untuk radiasi.
-Itu Betul.
-Sekarang Apa ini?
-Itu Komando 450.
Saya tidak menjual yang satu.
>> -Tetapi Itulah yang kita mahu.
Ia adalah satu komando 450.
>> -Tiada Percayalah.
Ia hanya digunakan dalam sarkas.
Ia untuk gajah.
>> -I'll Membayar apa-apa.
>> -Apa Tentang Jerry?
>> -Dia Tidak dapat mengendalikan itu.
Dia halus.
Oh ya.
[AKHIR MAIN SEMULA]
DAVID MALAN J: Baiklah.
Itu jika untuk CS50.
Kita akan melihat lagi minggu depan.
>> SPEAKER 1: [? Scully?], [? Ian,?] sejauh projek outro ini,
apa yang telah anda semua datang dengan?
>> SPEAKER 2: Sebenarnya, kami telah diberi ia pelbagai pemikiran,
dan kita berfikir bahawa cara terbaik supaya-
>> SPEAKER 3: May I?
>> SPEAKER 2: Yeah.
Dengan segala cara, sebenarnya.
>> SPEAKER 3: Jadi saya fikir kita boleh meringkaskan idea kami
untuk outros dengan salah apa-apa word--.
>> DAVID MALAN J: Tiada apa-apa?
SPEAKER 3: Tiada apa-apa.
DAVID MALAN J: Apa maksudnya?
SPEAKER 3: outros kira-kira apa-apa.
SPEAKER 2: Sebenarnya, saya maksudkan, dalam falsafah, Maksud saya, tiada apa yang sesuatu sentiasa.
SPEAKER 1: Jadi what's-- apa yang premis?
SPEAKER 3: Jadi ia seperti hidup.
OKAY.
Apa yang anda lakukan hari ini?
>> DAVID MALAN J: Saya bangun, mempunyai sarapan pagi, dan datang untuk bekerja.
>> SPEAKER 3: Itu outro yang.
SPEAKER 2: Tetapi, maksud saya, tidak perlu sesuatu yang berlaku kepadanya pada the--
SPEAKER 3: Tidak, tidak, tidak, tidak.
Tiada apa yang berlaku.
>> SPEAKER 1: Jadi mengapa kita menonton?
>> SPEAKER 3: Kerana ia adalah satu outro untuk CS50.
>> DAVID MALAN J: Belum lagi.