[Powered by Google Translate] DAVID J. MALAN: Baiklah, ini adalah CS50, dan ini adalah
bermula dua minggu.
Terima kasih.
Mari kita bermula di sini dengan panggilan telefon.
Saya kira-kira untuk mendail 617-bug-CS50.
CS50: Ini adalah CS50.
Untuk Ulang-alik Boy, tekan 1.
Untuk memulakan, tekan 9.
DAVID J. MALAN: Jadi dia berkata bagi Boy Terbang, tekan 1.
Jadi kita akan tekan 1.
CS50: Apakah asal anda?
Untuk quad, tekan 1.
Mather, tekan 2.
Boylston, tekan 3.
Lamont, tekan 4.
Mem Hall, tekan 5.
Untuk memulakan, tekan 0.
DAVID J. MALAN: Kami akan tekan 1 untuk quad.
CS50: ulang-alik Seterusnya daun ini sangat minit pada 1:10 PM, dan
maka pada 01:20, 01:30, 01:40.
Ini adalah CS50.
>> DAVID J. MALAN: Jadi ini adalah suara CS50.
Dan ia adalah satu contoh daripada pelbagai projek akhir,
contoh, anda boleh menggigit ke arah
akhir semester.
Sebagai contoh, shuttleboy.cs50.net bahawa wujud -
sebenarnya satu projek yang saya mula-mula menulis selepas mengambil CS51
kembali apabila saya adalah seorang siswazah.
Dan inspirasi di sini ketika itu, semua mereka mempunyai
jadual bas ulang-alik dicetak, dan tiada
tanggapan mencari perkara talian.
Dan jadi saya jenis merpati dalam satu hujung minggu, dicurahkan melalui
dicetak jadual, dan dialihkan ke program komputer.
Pada masa itu, program komputer berlaku untuk ditulis
di C. Dan anda sebenarnya berlari menaip oleh Boy Ulang-alik pada
berkelip segera seperti yang kita telah melakukan setakat.
Tetapi sejak beberapa tahun, ia berkembang menjadi sebuah segera
pesanan bot.
Ia berkembang lebih baru-baru ini ke dalam laman web ini, kepada
Berasaskan SMS alat, serta menjadi alat ini berasaskan suara.
Dan ini adalah untuk membayangkan pelbagai perkara yang anda boleh
lakukan untuk diri sendiri dengan akhir semester.
>> Sebagai contoh, terdapat, versi SMS Boy Ulang-alik yang berlaku
beroperasi sebagai berikut.
Jika, pada telefon bimbit anda, anda menghantar mesej teks kepada 41411 dan
kemudian menghantar sboy simbol khas, Ulang-alik Boy,
diikuti oleh A dan B, di mana A ialah asalan dan B adalah
destinasi -
misalnya, Boylston Angkasa Quad -
apa yang anda perlu mendapatkan kembali dalam masa beberapa saat adalah teks
mesej dari Boy Ulang-alik memberitahu anda tepat apabila
seterusnya ulang-alik beberapa, dari sudut yang pergi itu
titik B.
Dan ini adalah satu contoh yang lebih umum daripada apa yang dikenali sebagai
menggunakan API.
>> Jadi, sebagai contoh, ini di sini adalah hanya shuttleboy.cs50.net,
penjelmaan sebenar berasaskan web ini.
Tetapi data yang menggariskan ini dan lain-lain aplikasi yang CS50
telah membangunkan semua terdedah kepada semua orang di sini dalam bentuk
API, antara muka pengaturcaraan aplikasi.
Dan itu hanya satu cara yang mewah untuk mengatakan bahawa orang-orang seperti kita di
Internet dan lain-lain telah menghabiskan masa beberapa mewujudkan
perisian yang anda boleh gunakan untuk merebut data dari kami dan
kemudian membina aplikasi anda sendiri di atas
set data yang.
Jadi untuk contoh, ini Boy Ulang-alik API halaman di sini, yang
berlaku untuk menjadi pengguna CS50, pada asasnya dokumen
bagaimana anda boleh pergi tentang meminta CS50 pelayan untuk data.
Sebagai contoh, jika anda biasa dengan fail CSV, koma
dipisahkan nilai, ini adalah hanya jenis cepat dan kotor
Fail Excel seperti.
Jadi, anda boleh meminta Ulang-alik Boy untuk semua data pada semua
rumah dan Koordinat GPS mereka, dan anda akan mendapat
kembali, pada dasarnya, spreadsheet seperti itu,
maka anda boleh membaca ke dalam program anda sendiri dan kemudian
menjana hasil, seperti Boy Ulang-alik sendiri
berlaku untuk melakukan.
Bagi mereka yang lebih biasa, perwakilan data yang lebih moden
termasuk JSON, JavaScript Objek Tatatanda.
Sesuatu yang akan datang kembali kepada anda ke arah
akhir semester.
>> Tetapi sekali lagi, ini adalah hanya salah satu daripada beberapa API sendiri CS50.
Dan perkara yang menarik ialah sekarang, hari ini, Facebook dan
Twitter dan Google dan cukup banyak setiap laman web yang popular di luar
ada mempunyai beberapa jenis API, yang bermakna jika anda membaca
dokumentasi di laman web mereka, anda mendaftar untuk satu
akaun, maka anda boleh mula menulis perisian di atas
apa-apa alat atau data bahawa syarikat ada menyediakan.
Dan jadi satu felo pengajaran kita sendiri beberapa tahun ke belakang
menulis versi Mac ini.
Jadi pada pautan bertajuk Mac sini di sebelah kiri atas, anda boleh sebenarnya
memuat turun widget Mac OS yang berjalan pada Mac anda sendiri untuk melakukan
jenis yang sama perkara.
Jadi ia adalah semua tentang membina di atas set data seperti ini.
Tetapi lebih kepada itu ke arah akhir semester.
>> Jadi mari menyelam di cepat sebenar pepijat, hanya jenis mendapatkan
perkara panas hari ini, dan berfikir kembali pada beberapa
perkara yang kita melihat pada minggu lepas.
Secara khususnya, izinkan saya pergi ke hadapan dan tarik sehingga, katakan,
ini contoh di sini.
Buggy1.c, ini boleh didapati di laman web kursus jika anda mahu
suka untuk memuat turun dan mencucuk di sekitar diri sendiri.
Tetapi mari mengezum di sini pada program ini agak pendek, dan hanya
recap super cepat beberapa blok bangunan asas yang
kita benar-benar akan hanya mula mengambil untuk diberikan.
>> Jadi barangan biru, dalam baris 1 hingga 9, hanya
lisut soalan.
Jadi ini adalah sekadar komen.
Mereka tidak mempunyai makna berfungsi.
Tetapi mereka komen dalam erti kata bahawa mereka nota yang
Saya, manusia, yang dibuat kepada diri saya sendiri supaya dalam kuliah dan selepas
kuliah, saya sebenarnya boleh ingat apa yang program ini
tidak tanpa perlu membaca melalui talian ia demi baris dan
mencipta sejarah dalam fikiran saya.
Selain itu, jika saya bawanya program ini kepada orang lain seperti
anda, ia adalah lebih jelas kepada anda, kerana komen seperti ini,
apa program sebenarnya melakukan, atau sekurang-kurangnya apa yang
program yang sepatutnya lakukan.
Sama ada atau tidak ia adalah betul adalah perkara lain sama sekali.
Sekarang, dalam C, dengan komen berbilang talian, ingat bahawa on-line
satu di sini adalah simbol sihir, / *.
Ia bermakna di sini datang permulaan komen.
Dan apa-apa lagi perkara-perkara sehingga anda sampai ke terminator akhir,
yang * /, sebaliknya.
Jadi hakikat bahawa saya mempunyai 80-beberapa bintang ganjil sini dari
kiri ke kanan adalah benar-benar hanya detail estetik.
Ia tidak mempunyai makna yang berfungsi.
>> Sekarang bagaimana mengenai barisan 11?
Apakah ini lakukan dari segi orang biasa?
Apa itu?
PENONTON: Termasuk standard.
DAVID J. MALAN: OK, baik.
Jadi ia termasuk perpustakaan stdio.h.
Jadi apa maksudnya?
Nah, di dalam fail itu, stdio.h, sekumpulan keseluruhan
fungsi pengisytiharan -
yang, kod yang orang lain menulis.
Dan satu contoh yang sempurna fungsi yang diisytiharkan di
stdio.h -
yang kegemaran sekarang?
Jadi printf, salah satu yang paling biasa digunakan, sudah tentu
awal, dari perpustakaan yang ada.
Jika saya tidak termasuk bahawa baris kod, dilafaz akan menjerit
pada saya sesuatu tentang menggunakan simbol yang tidak diisytiharkan.
Sesuatu yang tidak diisytiharkan adalah mungkin kata kunci, kerana
kita telah tidak dimaklumkan pengumpul apa printf kelihatan
suka melainkan kita termasuk baris itu.
Dan lebih turun ke Bumi, benar-benar, apa garis yang mengatakan
membuka fail tersebut, stdio.h, di mana-mana jua ia berada dalam pelayan
cakera keras, atau cakera keras perkakas, dan salin-tampal
betul ada ke dalam fail saya, tanpa saya
perlu untuk berbuat demikian secara manual.
>> Sekarang, apabila kita turun di sini to main, tidak lama lagi kita akan mula
mengusik selain apa int dan apa yang tidak sah adalah.
Tetapi untuk sekarang, mari kita melihat tiga baris
dalam tempoh 15 melalui 17.
Ini di sini saya menuntut sebagai kereta.
Line 7 dalam komen saya mengatakan "Sekiranya mencetak 10
asterisk tetapi tidak. "Mengapa ini tidak mencetak, pada hakikatnya,
10 bintang tersebut?
PENONTON: [didengar].
DAVID J. MALAN: Tepat sekali.
Jadi notis bahawa kita mula mengira dari 0.
Dan ini sebenarnya adalah satu konvensyen dalam pengaturcaraan dan
sains komputer yang lebih amnya, mula mengira
dari 0 bukan 1.
Dan ini benar-benar hanya berasal dari fakta bahawa, untuk
contoh, apabila kita mempunyai lapan orang di atas pentas, apabila
tiada siapa yang mengangkat tangan mereka, mereka
semua sifar berkesan.
Dan sebagainya ia hanya jenis konvensyen komputer,
Oleh itu, untuk mula mengira dari 0.
Jika itulah bilangan terendah anda boleh mewakili dalam perduaan.
>> Jadi di sini kita telah mula Memulakan i untuk 0.
Kami telah menetapkan i bersamaan dengan 0.
Tetapi kemudian saya membuat kesilapan ini di sini, berkata i adalah kurang daripada atau
sama dengan 10.
Tetapi jika anda berfikir bahawa melalui, jika saya bermula pada 0 dan kemudian saya pergi
sehingga 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, saya sebenarnya akan
mencetak 11 bintang ke skrin, kerana saya telah pergi
kepada dan sama dengan 10.
Jadi menetapkan mudah di sini maka apa?
PENONTON: [didengar].
DAVID J. MALAN: Hanya mengubahnya kepada kurang daripada.
Jika anda benar-benar mahu, anda boleh melakukan ini.
Tetapi secara umum, yang disukai.
Dan sebagainya mula mengira dari 0 adalah hanya sesuatu yang anda perlu
biasanya digunakan untuk mendapatkan.
Kini, apa yang kira-kira membina ini keseluruhannya dalam dan dengan sendirinya?
Ini sejajar 15 demarks untuk gelung.
Jadi untuk tidak berfungsi.
Ia hanya satu kenyataan.
Ia membina gelung, seperti yang kita lihat dalam Scratch.
Dan ia mempunyai tiga bahagian.
Perhatikan bahawa terdapat bahagian pertama
kiri koma bernoktah.
Ada bahagian tengah di antara dua koma bertitik.
Dan kemudian ada bahagian kanan ke kanan
koma bernoktah kedua.
Sekarang, yang pertama ini tidak apa?
PENONTON: [didengar].
DAVID J. MALAN: Kembali sana?
Yeah?
PENONTON: pengawalan.
>> DAVID J. MALAN: pengawalan.
Jadi apa maknanya?
Kami telah mengisytiharkan pembolehubah yang dipanggil i.
Ia adalah jenis int, kerana saya telah dinyatakan int i.
Dan saya Memulakan i kepada nilai 0.
Jadi apa yang ini benar-benar mengatakan?
Ia berkesan berkata kepada komputer hey, memberi saya cukup
ingatan, RAM yang mencukupi, untuk memenuhi nombor, dan kemudian meletakkan
nombor 0 dalam sebahagian yang RAM.
Dan sebagai diketepikan, berapa besar adalah int biasanya, sekurang-kurangnya di dalam
perkakas?
PENONTON: 32 bit.
DAVID J. MALAN: 32-bit.
Jadi ini bermakna memberi saya 32 bit, atau dikenali sebagai 4 bait,
dan meletakkan 0 nilai di dalamnya, yang adalah agak mudah kerana
ia hanya bermaksud menetapkan semua bit kepada 0.
>> Jadi sekarang, bahagian kedua di sini adalah keadaan.
Dan keadaan, seperti namanya, adalah apa yang diperiksa
lagi dan lagi dan sekali lagi sama ada ia benar atau palsu.
Jadi ini hanya mengatakan melakukan baris berikut kod -
iaitu baris 16, kerana itulah satu-satunya yang dilekukan
bawahnya atau tidak -
selagi i adalah kurang daripada 10.
Dan selepas setiap lelaran melalui gelung ini, melakukan
incrementation, yang dalam kes ini adalah i + +.
Kini, ia tidak perlu untuk menjadi i + +.
Ia boleh i -.
Tetapi jika saya melakukan ini, apa yang tingkah laku akan
untuk program ini?
PENONTON: Ia akan menjadi satu gelung tak terhingga.
DAVID J. MALAN: Ia akan menjadi beberapa jenis gelung tak terhingga,
melainkan jika kita mendapatkan bertuah selepas 2 negatif bilion atau lebih.
Mungkin perkara akan membalut di sekitar, hanya dengan sifat terhingga
bilangan bit yang kita telah diperuntukkan untuk int.
Tetapi ia pasti akan melelar jauh lebih daripada 10 dan
pasti lebih daripada 11 kali di sini.
>> Dan kini, hanya sebagai diketepikan, menyedari bahawa i + + dan i -
adalah benar-benar hanya gula sintaktik.
Ia hanya notasi trengkas untuk apa yang lebih sedikit
bertulis dengan jelas seperti berikut:
i = i + 1.
Itu adalah sama dengan i + +.
Ia hanya jenis kelihatan cantik untuk mengatakan i + +.
Ia adalah lebih ringkas, lebih senang dibaca.
Dan sebagainya kebanyakan orang melakukan yang sebaliknya.
Tetapi ini adalah sama berfungsi untuk
apa yang kita hanya melihat.
Jadi dalam jangka pendek, cepat di sini adalah hanya untuk mengatakan melelar i
dari 0 sepanjang jalan sehingga kepada kurang daripada 10.
Dan maka sesungguhnya kami akan mendapat 10 bintang.
>> Jadi mari kita cuba ini.
Izinkan saya membuka terminal di bahagian bawah.
Biar saya pergi ke direktori bahawa ini adalah masuk
Dan saya akan untuk menyusun secara manual dengan dilafaz buat masa sekarang.
Dan saya akan untuk menyusun ini sebagai buggy1.c, Masukkan.
Dan kini buggy1, mengapa tiada fail atau direktori
dipanggil buggy1?
PENONTON: [didengar].
DAVID J. MALAN: Yeah.
Jadi ia sebenarnya dipanggil a.out.
Jadi ingat jika anda hanya menjalankan dilafaz, di mana dilafaz adalah
pengkompil, dan anda tidak menentukan nama yang anda mahu
memberikan kepada program anda, ia akan lalai untuk a.out.
Jadi sesungguhnya jika saya lakukan ls -
oops.
Dan saya didn't - isu hitam-dan-putih beberapa
anda berhadapan telah ditetapkan.
Tetapi biarlah saya melakukan ini.
Terdapat kita mempunyai a.out di sebelah kiri di sana.
Jadi, kita perlu menjalankan a.out bukannya buggy1.
>> Jadi biarlah saya pergi ke hadapan dan melakukan ini.
/ A.out, Enter.
Dan saya nampaknya tidak melakukan apa?
PENONTON: Simpan.
DAVID J. MALAN: Simpan fail saya.
Jadi yang mudah diselesaikan dengan memukul S Kawalan, atau pergi ke
Fail, Simpan, seperti dalam kebanyakan program.
Biar saya pergi ke sini, mengosongkan skrin, jalankan lagi.
Dan masih ada bug.
Jadi apa yang sedang berlaku -
PENONTON: Anda tidak mengumpulkannya.
DAVID J. MALAN: Ah, baik.
Saya tidak menyusun.
Seperti orang bodoh, saya melihat kod untuk melihat apa yang salah.
Jadi buggy1.c dilafaz, kini a.out.
Dan Phew, disimpan.
>> Jadi ia kelihatan sedikit hodoh kerana tidak ada baris baru
mana-mana sahaja dalam program ini.
Tetapi sekali lagi, itu hanya terperinci estetik.
Dan sekurang-kurangnya jika kita mengira mereka keluar, kita harus
kini melihat 10 bintang tersebut.
Nah, apa tentang ini contoh kedua memanaskan badan?
Jadi pada buggy2, saya mendakwa bahawa versi ini, juga, akan mencetak
10 bintang, satu per baris.
Jadi kali ini, saya mempunyai watak yang newline, hanya untuk membuat
perkara yang sedikit lebih cantik.
Tetapi sebaliknya apa yang saya dapat ini.
Jadi biarlah saya melakukan buggy2.c dilafaz, Enter.
Kini ia sekali lagi dipanggil a.out.
Enter.
Saya hanya melihat satu barisan baru, hanya barisan baru sangat lepas bahawa
bergerak segera saya ke baris seterusnya.
Dan lagi jelas saya telah mencetak *, maka barisan baru,
*, Maka baris baru.
Tetapi apa yang pepijat di sini?
Yeah?
PENONTON: [didengar].
>> DAVID J. MALAN: Tepat sekali.
Jadi tidak seperti beberapa bahasa, seperti Python, di mana lekukan
sebenarnya mempunyai makna yang berfungsi, dalam
bahasa seperti C -
seperti yang kita akan lihat, PHP, JavaScript -
lekukan adalah benar-benar hanya untuk faedah manusia '.
Jadi hakikat bahawa saya telah dilekukan line 16 dan 17 kelihatan hebat,
tetapi ia tidak mempunyai makna yang berfungsi di sini.
Jika saya mahu kedua-dua talian untuk melaksanakan sebagai sebahagian daripada
gelung, maka saya mesti menyertakan mereka dalam pendakap kerinting dengan berbuat demikian.
Anda hanya boleh memotong sudut itu dan tinggalkan pendakap kerinting jika
apa kes?
PENONTON: Hanya satu baris.
DAVID J. MALAN: Hanya satu baris.
Jadi itulah hanya jenis apapun yang bagus detail sintaks supaya
anda tidak membazirkan masa menulis tiga baris, dua antaranya adalah
pendakap kerinting, hanya untuk menulis satu baris kod.
Tetapi jika anda mempunyai dua atau lebih baris, kita
sememangnya perlu untuk melakukan ini.
>> Jadi sekarang biarlah saya menjimatkan ini.
Biar saya pergi ke hadapan dan berjalan semula dilafaz.
Kemudian biarlah saya jalankan lagi a.out, dan sekarang saya mendapatkan mereka satu per baris.
Sekarang, a.out lagi adalah jenis nama bisu untuk program.
Bagaimana saya boleh memberitahu dilafaz untuk benar-benar memberi saya nama fail
yang lebih mesra pengguna, seperti buggy2 sendiri?
Sedikit lebih jelas?
PENONTON: [didengar].
DAVID J. MALAN: OK, jadi saya sebenarnya boleh mengambil sangat
jalan pintas yang mesra pengguna dan hanya menulis membuat buggy2.
Saya tidak nyatakan. C dalam kes ini, dan tekan Enter.
Dan apa yang membuat tidak adalah ia menyusun buggy2.c bagi saya oleh
meminta dilafaz untuk melakukannya.
Khususnya, ia panggilan dilafaz, ia berjalan dilafaz menggunakan cara yang lebih
hujah baris arahan atau suis daripada saya benar-benar perlu.
Dalam masa, kita akan kembali apa yang semua ini pelbagai
samar ungkapan ditulis dgn tanda penghubung bermakna.
Tetapi untuk sekarang, itu hanya menyimpan saya masalah
perlu untuk diingati dan mempunyai untuk menaip semua orang
pelbagai ungkapan ditulis dgn tanda penghubung.
Dan terbalik ia akhirnya
bahawa sekarang saya mempunyai buggy2.
Jika saya mahu melakukan ini secara manual, walaupun, saya
sebaliknya boleh melakukan ini -
dilafaz-o buggy2 dan kemudian buggy2.c.
Dan yang sama akan memberikan saya fail dipanggil buggy2.
>> Jadi dalam jangka pendek, dilafaz pengkompil.
Buat hanya alat mesra pengguna bahawa kita akan menggunakan lebih
dan banyak lagi, kerana ia hanya mula
memudahkan perkara untuk kita.
Dan kita kembali 0, akhirnya.
Buat masa sekarang, hanya kerana, tetapi kita akan mula mengusik bahagian itu
hari ini dan pada hari Rabu.
Sebarang pertanyaan di mana-mana ini?
Yeah?
PENONTON: [didengar]
ls dalam petikan di sana?
DAVID J. MALAN: OK.
Apabila saya ls ditaip dalam petikan yang telah saya melakukan beberapa silap mata
di sebalik tabir untuk menetapkan bug.
Saya terlupa, seperti yang kita telah memberitahu ramai daripada anda pada
papan perbincangan, lakukan -
kita akan melakukan ini sekarang - sudo yum-y update appliance50.
Oop, bahawa itu dieja dengan betul.
Jadi perkakas adalah seperti sistem operasi.
Ia berjalan ini sistem operasi Fedora dipanggil.
Dan sekarang kerana sambungan internet perlahan saya, saya telah
benar-benar hosed.
Jadi menjalankan kemas kini yum sudo, seperti yang kita memberitahu anda untuk melakukan dalam
set masalah, pada dasarnya suka menjalankan kemas kini automatik
pada Mac OS atau Windows.
Dan sebab untuk menjalankan ini pada permulaan sangat
set masalah adalah kerana apabila kita mencipta perkakas, saya
sehingga merosakkan, dan saya sengaja dibuat semua program anda melihat
hitam pada skrin hitam, itulah sebabnya anda tidak melihat mereka
secara lalai.
Tetapi versi terbaru perkakas pembaikan ini.
Dan saya akan menetapkan bahawa semasa cuti sekali saya mempunyai Internet
kesambungan Bluetooth.
>> Jadi petikan hanya menyembunyikan kesilapan saya, sangat berhati-hati,
nampaknya.
Soalan-soalan lain?
Ya?
PENONTON: Jika tidak membuat datang dari?
[Didengar]
DAVID J. MALAN: Baik soalan.
Jika tidak membuat datang dari?
Ia merupakan satu program Linux yang telah wujud selama bertahun-tahun, panjang
sebelum CS50.
Dan ia datang dengan sistem operasi seperti Fedora.
Ia tidak datang dari perpustakaan CS50.
Malah, perkara sahaja yang datang dari perpustakaan CS50
setakat ini, yang kita telah melihat, GetString, GetInt, semua
mereka Dapatkan fungsi, dan rentetan perkataan, dan untuk sesetengah
takat, bool perkataan.
Tetapi kita akan mengusik bahawa selain apabila kita menyelam ke CS50
perkakas itu sendiri.
>> Jadi ya, satu soalan lanjut di sini.
PENONTON: Apabila anda berkata membuat dan kemudian kereta, bagaimanakah
komputer tahu [didengar]?
DAVID J. MALAN: Baik soalan.
Jadi apabila anda hanya menjalankan membuat buggy1 atau membuat buggy2, bagaimana
tidak membuat tahu?
Jadi, secara lalai, jika anda menaip membuat buggy1, membuat kelihatan untuk
file dipanggil buggy1.c.
Dan kemudian ia melaksanakan arahan dilafaz yang sesuai,
sekali gus mengatasi default fail output dipanggil a.out.
Malah, jika kita melihat apa yang membuat, apa -
mari kita berhenti ini.
Jika kita melihat apa yang membuat sebenarnya melakukan, membuat buggy2,
ia sudah up to date.
Jadi biarlah saya mengeluarkan arahan rm,
program saya menulis sebelum ini.
Menaip Y-E-S untuk mengesahkan bahawa saya mahu mengeluarkannya.
Jika saya kini membuat, melihat bahawa dalam baris ini sangat panjang,
ada perkara ini terakhir di sini,-o buggy2.
Membuat Semua melakukan lulus hujah bahawa, jadi untuk bercakap,
Dilafaz, supaya saya tidak perlu menaip sendiri.
>> Semua hak, jadi pasangan cepat pentadbiran
pengumuman.
Jadi untuk bahagian, yang secara rasminya bermula ini datang
Ahad, anda akan sentiasa mahu membawa, jika
anda mempunyai satu, komputer riba.
Jika anda tidak mempunyai komputer riba, jangan mendekati kepada saya oleh
menjatuhkan saya e-mel.
Dan kita akan memikirkan aliran kerja.
Apa yang umumnya anda akan dapati di seksyen adalah bahawa mereka adalah sebahagian
konsep, sebahagian hands-on.
Kami khusus akan menggunakan seksyen soalan, sebahagian daripada
set masalah seminggu, berjalan melalui beberapa
bahan konsep dari kuliah.
Dan itu semua dalam set masalah semasa.
Dan kita juga akan menyelam ke dalam beberapa aktiviti hands-on, kadang-kadang
yang akan dikehendaki supaya dikemukakan, kadang-kadang
yang tidak akan.
Sebagai contoh, ini minggu pertama, mereka bertujuan hanya sebagai
senaman memanaskan badan.
Dan anda akan mendapati bahawa masalah mereka adalah benar-benar hanya itu.
Mereka bertujuan untuk menjadi yang agak kecil, tetapi tidak semestinya
program remeh untuk menulis, yang tidak semestinya
menarik di dalam dan diri mereka sendiri tetapi adalah peluang yang baik untuk
mengamalkan dengan sintaks, dengan fungsi baru, dalam keselesaan
bahagian di mana anda mempunyai beberapa rakan sekelas anda hadir sebagai
serta TF anda.
>> Dan apa yang kita akan lakukan dari masa ke masa adalah menggunakan alat dipanggil CS50 kawasan,
mana bukan hanya menggunakan Appliance CS50, anda akan
sebaliknya pergi ke laman web dalam pelayar, di mana anda akan dapat
untuk menulis kod dalam tetingkap penyemak imbas semasa seksyen.
Dan kemudian jika anda memilih masuk, rakan-rakan pengajaran anda kemudian boleh menunjukkan
apa sahaja ia adalah anda sedang menaip di skrin anda dalam pelayar anda
tingkap di hadapan kelas, sama ada tanpa nama atau
terbuka, supaya dia boleh berjalan melalui dengan
rakan sekelas anda apa yang anda lakukan dengan baik, apa yang anda tidak lakukan dengan baik.
Dan sekali lagi, yakinlah semua ini boleh tanpa nama baik.
Tetapi ia akan menjadi peluang baik untuk lebih
interaktiviti daripada sesuatu seperti kuliah membolehkan.
>> Pada masa yang sama, kita akan mempunyai perkara-perkara yang dipanggil super
bahagian, yang adalah pilihan tetapi terbuka kepada semua orang di
kelas, supaya anda boleh melakukan ini lebih kolektif bagi
masalah menetapkan satu.
Berikut adalah jadual.
Ini juga dipaparkan di laman web pada cs50.net.
Perhatikan bahawa terdapat akan menjadi seorang penggodam-khusus
satu esok petang.
Dan kita akan filem satu hari dan satu esok dan hantar mereka
talian dalam tempoh 24 jam.
Jadi jika anda tidak boleh membuat apa-apa kali ini, tidak perlu bimbang.
Dan sekali lagi, jadual adalah talian sekarang di cs50.net.
>> Dari segi sectioning sendiri, anda perlu telah mendapat
email mengarahkan anda untuk pergi ke laman web kursus untuk mencari
keluar bahagian anda.
Jika kehidupan telah berubah dan anda perlu menukar bahagian anda,
tidak menjadi masalah.
Kembali ke URL yang sama, cs50.net/section, tunggal,
dan anda akan mengisi borang yang sama supaya anda boleh
kemudian memberi kita pilihan anda.
Dan kita akan membuat susulan menjelang hujung minggu ini kepada apa yang kita boleh
menampung.
Minggu lepas, ingat bahawa kita mencadangkan menggunakan CS50 Bincangkan,
alat perbincangan kursus, dalam syarahannya.
Jadi kita mempunyai 40 soalan yang ditanya dan
dijawab semasa kuliah.
Jadi, ia seolah-olah untuk bekerja dengan baik, jadi kita akan terus
cuba untuk melakukan ini.
Jika, semasa kuliah, anda tidak hanya berasa selesa penjanaan
tangan anda, tidak menjadi masalah.
Pergi cs50.net/discuss, hantar sana, dan satu pengajaran kami
felo akan menjawab ia elektronik atau meningkatkan mereka
tangan di pihak anda tanpa bertanya, bergantung
pada sifat soalan.
Dan dari segi maklum balas, secara amnya psets akan
dipulangkan dalam tempoh seminggu.
Kerana ia mengambil sedikit masa untuk bahagian untuk mencapai
keseimbangan, pset pertama, 0 dan 1, akan menjadi sedikit
ditangguhkan sebagai perkara menetap.
Tetapi tinggal ditala untuk itu pada minggu-minggu akan datang.
>> Baiklah, jadi biarlah saya meletakkan pada saya serius
suara untuk hanya seketika.
Jadi ini adalah sebenarnya iklim yang menarik untuk menjadi
mempunyai perbincangan ini, apa dengan semua perkara lain
berlaku di kampus berkaitan dengannya.
Tetapi CS50 sememangnya telah mempunyai sejarah ini khususnya
topik, dalam seberapa banyak setiap tahun, kursus ini, bagi banyak
tahun, Ad-Papan kira-kira 3% daripada kelas.
Tahun ini yang paling terkini, 2011, CS50 Iklan-menaiki 35 pelajar.
Ini tidak, saya fikir, kerana kekurangan kejelasan.
Menyedari bahawa dalam sukatan pelajaran kursus, terdapat satu halaman
kenyataan yang menjelaskan mana garisan.
Bahawa kenyataan yang sama diulangi pada setiap satu daripada
masalah set pada satu halaman.
>> Jadi saya menyebut hari ini benar-benar hanya untuk membuat
orang yang sedar ini.
Dan kita telah mencuba perkara yang berbeza.
Dan apa yang saya fikir kita akan lakukan hari ini hanya mengambil masa untuk
sebenarnya melihat beberapa kes yang lalu yang telah tampil.
Bukannya menyimpan ini rahsia kotor sedikit, sebenarnya
menunjukkan apa yang pelajar telah dilakukan dan bagaimana kita telah dikesan
dan benar-benar apa motivasi paling utama adalah untuk
walaupun mempunyai perbualan ini.
Maka dengan itu berkata, garis asasnya adalah ini -
setiap sukatan pelajaran, anda dialu-alukan, anda digalakkan untuk
bercakap dengan rakan sekelas.
Itulah Tujuan keseluruhan mempunyai ini kerjasama
pejabat jam di Annenberg dan menggalakkan orang ramai untuk
projek akhir untuk bekerjasama.
Tetapi garisan dilukis apabila ia datang masa untuk benar-benar menulis
penyelesaian yang terakhir anda.
Bercakap dalam bahasa Inggeris, benar-benar halus, bercakap dalam kod pseudo,
benar-benar halus.
Email rakan sekelas pset anda, membiarkan mereka kelihatan lebih
skrin tangan terus menaip,
melalui talian juga.
Jangan melihat kepada sukatan pelajaran bagi garis tertentu.
>> Tetapi hanya untuk cat gambar bagaimana ini malangnya
realiti, menyedari bahawa terdapat laman web di luar sana yang
mempunyai penyelesaian dari kelas ini dan banyak kelas lain.
Hakikat bahawa anda atau kira-kira 3% daripada anda tahu bahawa ini wujud
bermakna bahawa kita tahu bahawa ini wujud.
Hakikat bahawa terdapat laman web seperti ini di mana anda
boleh membayar seseorang untuk melakukan set masalah anda sebenarnya - ini adalah
kes sebenar yang datang sehingga tahun lepas.
Ini adalah sebuah laman web yang dipanggil odesk.com.
Dan Tim adalah nama orang di sini yang telah posting
laman web ini dan meminta seseorang untuk melakukan pset 7 dalam
kes tertentu ini.
Nah, odesk.com adalah sangat Google mampu, dan kita juga
sangat baik di Googling.
Di sini juga, terdapat tapak - dan yang satu ini agak
kejam, terus-terang.
[Ketawa]
DAVID J. MALAN: Perkara yang melucukan tentang laman web ini adalah jika
anda membaca laman Tentang, mereka bercakap tentang korporat mereka
budaya dan bagaimana perkhidmatan pelanggan adalah mereka nombor satu
keutamaan, untuk memastikan bahawa tugasan anda mendapat
bertukar pada masanya.
>> Tetapi dalam kesungguhan semua, sekali lagi, hakikat bahawa laman-laman ini
wujud, menyedari kita juga menyedari
jenis-jenis laman web.
Dan untuk memberi anda rasa apa yang membentuk ini biasanya
mengambil, kita biasanya tidak mempunyai skandal besar di mana orang
bekerjasama pada apa-apa jenis skala besar-besaran, tetapi sebaliknya
ia adalah detik-detik yang lewat malam kelemahan, di mana anda mempunyai begitu
banyak yang perlu dilakukan, ia adalah 04:00, anda letih, dan anda
berfikir kepada diri sendiri, baik, biarlah saya hanya mengambil melihat saya
rakan sebiliknya atau kod kawan saya atau sebagainya.
Dan manifestasi ini malangnya melibatkan Pelajar
Satu sesuatu mengemukakan seperti ini dan Pelajar mengemukakan B
sesuatu seperti ini, yang pastinya, dalam komputer
kelas sains, adalah amat mudah untuk ahli-ahli sains komputer
untuk mengesan dengan perisian.
Ini merupakan satu lagi paradigma biasa, di mana anda telah jenis
telah bekerja bersama-sama dengan seseorang, mungkin bercakap dalam
Bahasa Inggeris, baik-baik saja, pseudokod.
Tetapi kemudian ia datang masa untuk benar-benar mengemukakan, dan psets
hanya mendapat ditukar melalui e-mel atau Dropbox atau sebagainya.
Tetapi dalam usaha untuk menjadikan ia kurang jelas bahawa ini adalah
apa yang telah berlaku, maka ini adalah apa yang dikemukakan.
Ini juga, tidak perjalanan yang ditulis keping
perisian seperti kita perlu untuk benar-benar mengesan
ini jenis perkara.
Dan demi sesungguhnya, apa yang kita lakukan adalah jangka perisian yang membandingkan semua
tahun ini penghujahan terhadap semua lepas tahun ini
hujah, terhadap segala yang kita dapati di
Internet, terhadap laman web setiap kerja di luar sana.
Ia adalah semua sangat automatik.
Dan sebagainya yang kita lakukan ini benar-benar dalam keadilan yang besar untuk 97% yang
benar-benar bekerja keldai mereka dalam hal ini dan di lain-lain
kelas dan meletakkan dalam semua usaha itu supaya kerja
mereka akhirnya menyerahkan mereka sendiri.
Dan saya boleh pergi untuk peringkat umur.
>> Ini hanya segelintir kes tahun lepas.
Seorang pelajar beberapa diserahkan fail ini sepercaman untuk pset 2,
pset 3, pset 4, 5, pset pset 6, pset 9.
Dalam kes ini, ini adalah kuiz 0 dan pada tahun lepas, di mana dua
pelajar diserahkan sepercaman hukuman ini di kalangan ramai
lain, "Permintaan jenis -" dot, dot, dot.
Jadi, walaupun di dalam kelas daripada 600 adakah kita mengesan ini
pada diserahkan kuiz.
Jadi, dalam jangka pendek, ini - terus-terang, saya benci mempunyai jenis ini
perbualan - tetapi ini adalah benar-benar satu usaha yang sengaja
tahun ini untuk mencuba untuk memandu menurunkan nombor itu.
Kerana walaupun kita mengatakan ini jenis perkara setiap
tahun, saya fikir realiti setelah hidup di atasnya untuk beberapa
lebih saat daripada biasa dan sebenarnya hanya menunjukkan
bahawa apa yang mungkin kelihatan seperti, eh, bukan seperti perjanjian yang besar, sekurang-kurangnya
berfikir kembali ke masa tertentu ini, kedua-dua dalam keadilan untuk
diri sendiri dan kepada rakan sekelas anda di sini.
Jadi jika anda pernah mempunyai sebarang soalan tentang di mana garis
, sila hanya mendekati kepada saya secara peribadi.
Tetapi jawapannya adalah sentiasa, benar-benar menekankan di
saat-saat terakhir, wang tunai dalam satu hari lewat.
Atau jika ia adalah suatu perkara yang tidak mempunyai apa-apa hari lewat,
jujur, email saya secara peribadi.
Kami akan memikirkan sesuatu yang keluar.
Tolong jangan meletakkan masa anda di sini di Harvard pada risiko.
>> Sekarang, saya fikir kita harus meringankan mood, jadi saya
termasuk ini sebagai slaid seterusnya.
[Ketawa]
DAVID J. MALAN: Laman web ini adalah besar.
Saya sebenarnya mendapat sedikit terganggu.
Ada satu ini.
Dan kemudian satu ini was amazing.
Okay, jadi berfikir bahawa kucing lewat pada waktu malam apabila membuat
keputusan mereka.
Semua hak, barangan supaya kembali kepada lebih menyeronokkan dan kurang serius, seperti
syarat.
>> Baiklah, jadi kita bercakap secara ringkas tentang perkara ini.
Ini adalah sesuatu yang mungkin agak biasa dari
dunia Scratch.
Dan dalam dunia Gores, kita mempunyai keperluan ini kadang-kadang
pergi membuat garpu di jalan raya.
Sama ada melakukan ini atau itu atau benda lain di sini.
Dan apabila kita mahu melakukan ini, kita boleh menggunakan, dalam C sekarang, ini jika
lain membina.
Dan kemudian di sini kita mempunyai ungkapan Boolean.
Sebagai contoh, ungkapan Boolean di sini, kita boleh ATAU
mereka bersama-sama, dalam erti kata bahawa kita mempunyai keadaan ini ATAU
bahawa keadaan.
Kita boleh DAN mereka bersama-sama, dalam erti kata bahawa kita mahu
memeriksa keadaan ini DAN keadaan itu.
Dan di sini kita mempunyai suis kenyataan sekarang, yang tidak begitu
serupa syntactically kepada orang-orang jenis keadaan, tetapi ia
membolehkan kita untuk melakukan bersamaan jika, else if, else if, lain
jika, dan seperti dengan hanya membutirkan mereka kes demi kes
oleh kes demi kes.
Jadi kita melihat mereka kali terakhir.
Dan kemudian kita mula menyentuh kepada perkara-perkara seperti gelung.
Kita melihat satu ini hanya seketika lalu.
Tetapi terdapat-konstruk lain gelung.
>> Sebagai contoh, yang satu ini di sini.
Jadi sementara (keadaan), melakukan perkara ini lagi dan lagi.
Jadi, pada asasnya, apa yang seolah-olah menjadi berbeza di antara ini
untuk gelung dan ini gelung sementara di sini?
Ini bagi gelung dan ini gelung sementara.
Yeah?
Apa itu?
PENONTON: [didengar].
DAVID J. MALAN: Baik.
Jadi, manakala dalam keadaan gelung, ada jelas
sintaks banyak lagi.
Terdapat pengawalan ini, terdapat kemas kini ini.
Dalam gelung sementara, hanya terdapat keadaan ini.
Jadi ia seolah-olah bahawa ia adalah sedikit menurunkan berbanding untuk
gelung, yang bermakna jika kita mahu mempunyai pembolehubah dan kita mahu
mempunyai incrementation, kita sebenarnya mempunyai
melakukan perkara ini diri kita sendiri.
>> Jadi biarlah saya pergi ke hadapan dan membuka gedit.
Izinkan saya beralih ke perkakas.
Dan mari kita hanya melakukan satu contoh kecil yang cepat
membezakan salah satu dari yang lain.
Dan di belakang fikiran saya di sini, saya perlu mengatakan satu perkara.
Saya khusus menyebut nama Tim.
Tim sebenarnya seseorang bahawa pelajar cuba untuk mencari lakukan
kerja rumah mereka untuk mereka.
Kami tidak mempunyai Tim dalam seksyen yang tertentu.
Jadi sedar, supaya saya didedahkan pelajar, ia tidak adalah seorang pelajar.
Ia adalah orang rawak di Internet melakukan sesuatu
oleh tahun lepas proksi.
Jadi kita dapati bahawa, terlalu.
Jadi dalam kes ini di sini, izinkan saya pergi ke hadapan dan
membuka fail baru.
Fail, New.
Ini memberikan saya tab sini.
Biar saya pergi ke hadapan dan menyimpannya sebagai loop.c.
Biar saya pergi dan klik Simpan.
Dan kemudian turun di sini, mari kita pergi ke hadapan dan mula menulis
# Include .
Biar saya zum masuk
Sekarang kita akan lakukan int utama (tidak sah).
Sekarang izinkan saya pergi ke hadapan dan lakukan untuk (int i = 0; i <
oh, 10; i + +).
Dan sekarang saya akan pergi ke hadapan dan jangan mencetak bintang yang saya
tidak lebih awal.
Dan kemudian pada akhir program ini, kami hanya akan
mencetak baris baru, hanya supaya segera saya
tidak melihat semua berantakan.
kembali 0.
Kelihatan syntactically betul?
Setakat ini.
Jadi mari kita lihat.
>> Jadi biarlah saya mengezum keluar, pergi ke dalam tetingkap terminal saya.
Dan biarlah saya pergi ke hadapan dan menjalankan gelung, kerana saya dipanggil ini
loop.c. perkara
Jadi membuat gelung.
Nampaknya untuk menyusun OK.
Biar saya berjalan gelung, dan kini Masukkan.
Dan ia seolah-olah telah dicetak 10 bintang.
Jadi mari kita hanya menukar ini kepada gelung sementara dan lihat apa
jenis isu-isu yang kita tersandung.
Jadi, selain daripada ini, izinkan saya pergi di sini dan mengatakan semasa i
kurang daripada 10 -
biarlah saya menghilangkan untuk gelung.
OK, jadi kita mempunyai beberapa masalah sudah.
Jadi keadaan adalah sama, tetapi saya jelas hilang
pengawalan.
Saya hilang incrementation.
Jadi apa yang perlu pengkompil mungkin beritahu saya apabila saya cuba untuk
menyusun program ini?
Yeah?
PENONTON: [didengar].
>> DAVID J. MALAN: Baik.
Jadi ia akan mengatakan sesuatu seperti yang tidak diisytiharkan - dalam hal ini
kes, pembolehubah i.
Dan sesungguhnya, gunakan daripada pengecamnya tidak diisytiharkan i.
Dan sebagainya ini adalah berbeza dengan bahasa seperti PHP dan
Python dan Ruby, yang sesetengah daripada anda mungkin biasa,
di mana anda boleh hanya jenis mula menggunakan pembolehubah
paksaan dan tidak perlu bimbang tentang mengisytiharkan mereka
jelas sentiasa.
Dalam C dan dalam bahasa seperti Java dan C + +, anda perlu
super jelas.
Dan jika anda mahu pembolehubah yang dipanggil i, anda perlu beritahu saya
apakah jenis pembolehubah ia adalah.
Jadi kita akan perlu untuk menetapkan ini seperti berikut.
Saya akan perlu untuk pergi sini dan taipkan int i; oleh itu,
Saya telah mengisytiharkan pembolehubah yang dipanggil i.
Sekarang, saya telah dilangkau satu langkah.
Saya telah jelas tidak dimulakan, tetapi mari kita lihat jika bahawa pada
kurangnya membuat dilafaz berhenti mengadu.
Jadi biarlah saya membentuk semula program ini.
>> Semua hak, kini ia hanya mengadu
atas sebab-sebab yang berbeza.
"Pembolehubah 'i' tidak diisytiharkan apabila digunakan di sini." Semua hak, jadi
yang agak jelas.
Dimulakan hanya bermakna menetapkan ia sama dengan nilai.
Dan kita telah tidak dilakukan itu, jadi biarlah saya cuba sama dengan 0.
Sekarang mari kita cuba ini lagi dan jalankan semula dilafaz.
Disusun masa ini.
Dan saya kira-kira untuk menjalankannya.
Tetapi besar gelung tidak terhingga lama, kerana saya telah melakukan
pengawalan, saya telah melakukan keadaan, tetapi saya tidak pernah dilakukan
sebarang incrementation.
Jadi bagaimana saya boleh melakukan incrementation itu?
Nah, dalam gelung sementara, rasanya saya akan mempunyai
untuk melakukannya di dalam gelung, kerana banyak seperti yang pertama
minggu ini contoh melakukan membina gelung, seperti dengan
stoking dan dengan pengiraan sendiri, kita terpaksa melakukan
sesuatu pada akhir sangat, seperti kembali ke baris seterusnya.
Bagaimana jika saya pergi ke hadapan dan melakukan ini i + + di sini?
Mari kita tidak walaupun menyusun ini.
Menangkap saya sudah.
Apa yang salah di sini?
PENONTON: [didengar].
>> DAVID J. MALAN: Jadi ia pasti tidak int.
Ia adalah i.
Dan pendakap kerinting, seperti sebelum ini,
lekukan tidak mencukupi.
Jadi sekarang saya telah ini membina.
Jadi sementara i adalah kurang daripada 10, mencetak bintang,
maka kenaikan i.
Dan cara manakala kerja-kerja gelung adalah bahawa sebaik sahaja anda memukul
bawah gelung, yang dalam kes ini kelihatan seperti 10 baris,
ia akan kembali ke baris 6, di mana titik
keadaan akan diperiksa lagi.
Dan jika i masih kurang daripada 10, kita akan melakukan garisan 8 dan
kemudian 9, maka kita akan mencecah 10, dan kembali kepada 6, sekali lagi dan
lagi dan lagi dan lagi, selagi i adalah kurang daripada 10.
Jadi mari jalankan semula buat di sini.
>> Okay, kita telah kumpulkan okay.
Biar saya yang dikendalikan semula gelung.
Dan kini ia sebenarnya seolah-olah untuk bekerja.
Jadi plus dan kemudaratan di sini?
Nah, setakat ini ada sebenarnya tidak keseluruhan PLO -
begitu comel.
Baiklah, yang merupakan - ah, itu adalah kemalangan.
Baiklah, jadi mari kita kembali untuk gelung.
Jadi bagi gelung adalah baik kerana mereka super jelas.
Dan walaupun mereka sudah sedikit clunky untuk menulis, ia adalah
sangat kuat dan ia membolehkan anda untuk melakukan
Perkara-perkara sekaligus.
Walaupun gelung seolah-olah tidak mempunyai sejumlah besar nilai hanya
lagi, kerana ia berasa seperti kita hanya perlu untuk melakukan kerja-kerja yang lebih.
Kita perlu meletakkan pengawalan sini,
mengemaskini ke sini, dan kita perlu ingat untuk melakukan semua itu.
Jadi kita akan lihat dalam masa bahawa gelung sementara sebenarnya meminjamkan
diri hanya konteks yang berbeza, data yang berbeza
struktur seperti senarai dan jadual hash, perkara yang kita akan dapat
pertengahan semester.
Tetapi untuk sekarang, tahu bahawa terdapat jenis ini ketiga yang dikenali sebagai do-
gelung while.
Dan kita telah melihat secara ringkas ini.
Dan ini mungkin dapat membantu super dengan pset 1.
Bila-bila masa yang anda mahu melakukan sesuatu dan kemudian memeriksa jika
pengguna bekerjasama, dan jika mereka tidak lakukan, melakukannya sekali lagi, do-
gelung while meminjamkan sendiri kepada jenis yang logik.
Kerana seperti pesanan dari atas ke bawah di sini menunjukkan,
tidak bermaksud melakukan ini.
Dan melakukan ini sekali lagi dan sekali lagi, apa yang mungkin?
Mungkin ia bermakna GetInt memanggil atau GetString dan kemudian
memeriksa nilai GetInt atau GetString dan kemudian menjerit
pada pengguna jika mereka tidak bekerjasama dengan meminta mereka
lagi dan lagi dan lagi.
Mana anda mahu melakukan sesuatu sekali,
kemudian memeriksa keadaan beberapa.
>> Jadi mari kita cuba ini.
Biar saya sebenarnya menukar ini sekarang gelung do sementara.
Dan saya akan pergi ke hadapan dan melakukan perkara-perkara berikut.
Jadi melakukan yang berikut.
Mari kita buat int i GetInt = (), tetapi mari kita mula-mula memberitahu pengguna
apa yang perlu dilakukan.
Jadi sedikit berbeza kali ini.
"Berikan saya int".
Jadi, saya akan menggunakan printf untuk itu.
Dan sekarang saya akan pergi ke sini, dan saya akan melakukan ini
semasa i, katakan, lebih besar daripada -
mari kita lihat, i ialah, katakan, kurang daripada 0, atau i
lebih daripada 10.
Dalam erti kata lain, saya mahu nombor 1-9, hanya
sewenang-wenangnya.
Jadi saya menggunakan ungkapan Boolean gabungan di sini untuk
pastikan bahawa saya adalah kurang daripada 0 atau lebih daripada 10, di mana
kes saya akan melakukan gelung ini di sini lagi.
Jadi sekali lagi, lakukan ini -
manakala i adalah kurang daripada 0 atau i adalah lebih daripada 10.
>> Jadi sekarang mari kita pergi ke hadapan dan melakukan ini sekali kita telah melakukan bahawa.
Mari kita hanya melakukan cek kewarasan cepat.
printf ("Terima kasih, i% d", i).
Jadi program ini mudah meminta pengguna untuk int an,
membuat pasti ia adalah dalam lingkungan sesetengah orang, 1 hingga 9,
dan kemudian mengucapkan terima kasih kepada pengguna dengan mengingatkan mereka apa yang mereka hanya
ditaip dalam, hanya sebagai cek kewarasan sedikit.
Tetapi mari kita lihat jika ini kerja-kerja seperti yang sepatutnya.
Biar saya pergi kepala ke bawah di sini dan jalankan semula membuat gelung.
Hmm.
"Gunakan pengecam tidak diisytiharkan 'i'". Itu yang pelik.
Saya fikir kita memutuskan bahawa.
Gejala yang sama tetapi kod yang berbeza.
Yeah?
PENONTON: [didengar] di dalam kedua-dua, kita perlu
[Didengar].
>> DAVID J. MALAN: Tepat sekali.
Jadi ini sebenarnya membawa kita kepada topik yang dikenali sebagai skop.
Ia ternyata bahawa C, sekali lagi, ia benar-benar mengambil anda benar-benar.
Dan jika anda melakukan sesuatu seperti ini di mana anda mengisytiharkan int
dan kemudian memberikan nilai tertentu, tetapi anda berbuat demikian dalam
sepasang pendakap kerinting, apa C tidak ia menganggap bahawa anda
hanya mahu bit-bit 32 yang dikenali sebagai i wujud dalam
konteks mereka pendakap kerinting, dalam konteks garis
6 hingga 9. Jadi i diisytiharkan, dan ia ditugaskan
nilai di baris 8, tetapi sebaik sahaja anda mendapat luar
line 9 di bawah pendakap kerinting, i tidak lagi
skop, jadi untuk bercakap.
S-C-O-P-E. Ia tidak lagi dalam konteks yang betul.
Jadi sekarang ada ada i, jadi ia seolah-olah kita tidak mempunyai walaupun
mengumumkan ia pada semua.
>> Jadi apa yang menetapkan kemudian untuk sesuatu seperti ini, jika
sebabnya ialah bahawa i diisytiharkan dalam pendakap kerinting, yang
nampaknya buruk?
Di sini?
PENONTON: [didengar].
DAVID J. MALAN: Yeah.
Jadi, kita boleh memulakan ia di luar.
Jadi biarlah saya pergi ke hadapan dan memadam bahagian akuan mana
Saya nyatakan jenis, dan biarlah saya melakukannya di sini.
Jadi di baris 5, ia kini berkata "Berikan saya int." Memanggilnya i.
Notis di baris 9, saya tidak mahu melakukan ini, kerana saya
sudah mempunyai 32 bit.
Saya tidak mahu untuk meminta komputer untuk
berbeza bit 32.
Saya mahu menggunakan yang sama 32 bit.
Dan sekarang kerana i diisytiharkan di baris 5, ia masih legit
untuk menggunakan ia di baris 11 dan laluan 12.
>> Jadi biarlah saya cuba susun semula ini dan lihat
jika dilafaz berhenti menjerit.
membuat gelung.
Jadi sekarang ia adalah "pengakuan tersirat fungsi
'GetInt' adalah tidak sah di C99. "Apa tu?
Yeah?
PENONTON: [didengar].
DAVID J. MALAN: Yeah.
Jadi sekarang bahawa saya sebenarnya menggunakan GetInt, ini bukanlah sesuatu yang
yang hanya datang dengan C. Ini datang dari CS50.
Jadi kita perlu ini di sini.
Dan biarlah saya kembali ke bawah prompt
di sini dan jalankan semula.
Okay, akhirnya.
Sekarang kita telah memutuskan bahawa dan kesilapan lain.
Izinkan saya sekarang menjalankan gelung dan lihat apa yang berlaku.
"Berikan saya int." Saya akan memberikan 11.
Saya akan memberikan ia -1.
Saya akan memberikan ia foo.
Saya akan memberikan 5.
Dan kini ia memang berfungsi.
Tetapi segera berubah atas sebab-sebab di sini.
Mengapa ia mengatakan cuba lagi salah satu daripada masa-masa tetapi memberikan saya
int tiga kali yang lain?
Mengapa tingkah laku yang berbeza?
PENONTON: Memberi rentetan.
DAVID J. MALAN: Maaf?
PENONTON: Anda memberikannya rentetan.
DAVID J. MALAN: Yeah.
Jadi kita memberikan ia satu rentetan dalam percubaan ketiga ini,
apabila saya menaip foo.
Foo adalah rentetan.
Ia jelas tidak int.
Dan cara yang CS50 telah dilaksanakan GetInt adalah bahawa kita
tidak memeriksa jika sesuatu yang kurang daripada 0 atau lebih daripada 10
untuk anda, kerana bagaimana kita tahu terlebih dahulu apa jenis
int yang anda mahu?
Tetapi kita minimum boleh menyemak untuk anda, adakah pengguna sekurang-kurangnya
taip integer?
Dan jika mereka tidak, kita menjerit pada pengguna dengan menaip "cuba lagi" pada
skrin.
>> Jadi sekarang kita mempunyai program yang menggelung. Okay.
Sekarang, yang ini adalah jenis membina yang lebih baik?
Jadi ini adalah di mana perkara yang mula mendapatkan kotor sedikit,
hakikat bahawa anda perlu ingat untuk mengisytiharkan pembolehubah di sini
jika anda mahu menggunakan ia di dalam beberapa
pendakap kerinting dan di luar.
Tetapi walaupun ini kelihatan sedikit samar pada mulanya
pandangan, hanya lagi, ingat logik yang mudah.
Dalam usaha untuk menggunakan apa-apa dalam C, sama ada ia adalah fungsi atau
ia adalah pembolehubah, anda perlu termasuk jika ia fungsi
di beberapa perpustakaan, atau anda perlu mengisytiharkan ia.
Tetapi sekarang anda perlu untuk menjadi prihatin tambahan hakikat bahawa
anda mengisytiharkan ia dalam skop yang betul.
Anda tidak meletakkan ia terlalu ketat di dalam kurungan.
>> Jadi biarlah saya sebenarnya melancarkan kembali.
Jika kita kembali kepada kami sebagai contoh dari awal, dan saya pergi
kembali untuk int, int i = 0; i <10; i + +, dan saya
melakukan printf bintang, seperti ini, dan kemudian paren dekat, dan kini
printf i kini -
mengikut logik yang sama, apa yang akan berlaku apabila saya cuba untuk
menyusun program ini?
PENONTON: pengecam tidak sah.
DAVID J. MALAN: Jadi ia adalah satu lagi pengecam yang sah,
pengecam yang tidak diisytiharkan.
Sekarang, sebab sedikit berbeza.
Terdapat jelas tiada pendakap kerinting di sini, tetapi sama
idea, cerita yang sama skop terpakai.
Jika anda telah mengisytiharkan pembolehubah seperti i dalam
untuk gelung, walaupun anda telah tidak jelas bertulis kerinting
pendakap, berfikir daripada mereka mental masih berada di sana, di mana
kes i sahaja di dalam sah untuk gelung.
Ia adalah tidak sah sebaik sahaja anda sampai ke baris seterusnya, yang
kes ini kini 10.
Jadi hanya beberapa isu skop dan sebagainya.
Baiklah, apa-apa soalan?
>> Baiklah, jadi ini adalah jenis program sedikit remeh,
percetakan bintang hanya sedikit.
Tetapi mari kita lihat jika anda masih ingat lagu ini di sini.
Ini adalah sebuah lagu yang amat menjengkelkan anak-anak akan menyanyi pada
bas sekolah dan sebagainya.
Tetapi apa yang baik tentang adalah bahawa ia mempunyai cyclicity ini,
di mana ia adalah "99 botol bir di dinding,
99 botol bir.
Mengambil salah satu turun, lulus di sekeliling, 98 botol bir pada
dinding. "Dan maka lagu mengulangi 97, kemudian 96, kemudian
95, kemudian 94, sepanjang jalan turun kepada 0 jika anda sebenarnya mendapat bahawa
jauh di dalam bas.
Jadi ini adalah satu program yang baik untuk menyusun melaksanakan, kerana saya
Tuhan, jika anda hanya boleh melaksanakan ini dengan beberapa
baris kod, anda boleh meludah keluar lyrics keseluruhan ini
lagu agak cepat.
Tetapi di sepanjang jalan, kita boleh mulakan sekarang mengusik selain beberapa
membina asas gelung dan kini juga
memperkenalkan fungsi bahawa kita menulis diri kita, kembali nilai
yang kita lulus di sekeliling.
Tetapi pertama, mengapa kita tidak pergi ke hadapan dan mengambil kami lima minit
memecahkan di sini?
Dan apabila kita kembali, kita akan menyanyikan lagu ini.
>> Baiklah, jadi kita kembali.
Dan apabila saya mengatakan bahawa kita sekarang akan menyanyi lagu ini, saya maksudkan
programatik, bukan secara lisan.
Jadi di sini kita mempunyai beer1.c, yang merupakan satu pelaksanaan ini
lagu tertentu.
Dan hanya perlu jelas, bagi mereka yang tidak biasa dengan apa yang
perkara ini kelihatan seperti, izinkan saya pergi ke hadapan
dan membuat beer1, Enter.
Sekarang izinkan saya berjalan beer1, dan apa yang kita akan lihat - berapa banyak botol
bir akan ada?
Saya akan menaip pada 99, seperti lagu mengatakan.
Enter.
Dan sekarang jika kita menatal -
oops - jika kita menatal melalui semua ini, kita akan melihat bahawa
ini memang menyanyi keseluruhan lagu.
Tunggu satu minit.
Bar tatal saya sedikit sehingga merosakkan.
Mari kita gunakan tetingkap yang lebih besar.
Jadi beer1, 99, di sana kita pergi.
Jadi di sini kita mempunyai lagu, dinyanyikan lebih cepat oleh
komputer daripada ia mungkin telah oleh kami.
Jadi notis, walaupun, sifat kitaran di sini.
Ia mengatakan 99, kemudian 99, kemudian "mengambil satu ke bawah, lulus
sekitar, "kemudian 98.
Dan kini ia mengulangi lagi dan lagi.
>> Jadi ini sebenarnya adalah peluang yang sempurna untuk beberapa jenis
menggelung membina.
Perhatikan bahawa saya jenis memotong sudut di sini.
Perhatikan bahawa saya berkata "98 botol bir di dinding,
97 botol bir di dinding, "dan yang hanya jadi
bahawa apabila kita mendapat satu botol bir, saya tidak mempunyai
bimbang tentang tatabahasa Inggeris.
Tetapi kita juga boleh menetapkan ini dengan sedikit jika
keadaan, mungkin.
Jika nombor ini adalah singular, pergi ke hadapan dan berkata "botol",
sebaliknya jika ia plural, mengatakan "botol".
Tetapi untuk sekarang, saya benar-benar memotong sudut itu.
Jadi mari kita lihat apa yang kita miliki di sini.
Jadi kita telah mendapat beberapa komen di atas.
Saya termasuk kedua-dua perpustakaan, sebagai
kita telah biasa.
Dan sekarang mari saya tatal ke bawah ke pertama
sebenar baris kod.
Line 17 bermula utama.
Talian 21 dan 20 mempunyai berapa banyak botol bir akan ada?
Dan kemudian saya panggil GetInt.
Dan kini saya mempunyai sedikit cek kewarasan.
>> Jadi ini adalah satu konvensyen bahawa kita sekarang akan mula mengguna pakai
lebih ketat menyemak input pengguna.
Kadang-kadang anda hanya tidak mahu segera mereka lagi
dan lagi dan lagi.
Jika pengguna skru sehingga dan tidak bekerjasama, denda.
Berhenti dan hanya tidak berurusan dengan mereka.
Dan supaya apa yang saya lakukan di sini.
Jika n adalah kurang daripada 1, saya hanya akan menjerit pada pengguna,
"Maaf, yang tidak masuk akal." Dan kemudian saya akan
sewenang-wenangnya return 1.
Jadi sekali lagi, ini adalah hanya satu konvensyen untuk mendapatkan digunakan untuk.
Buat masa sekarang, bawa ia pada iman.
Tetapi sehingga kini, kita telah sentiasa kembali 0, kerana
kita telah dikatakan kembali 0 menandakan apa?
PENONTON: Kejayaan.
DAVID J. MALAN: Kejayaan, itu sahaja.
Jadi sekarang bahawa kita akhirnya mula berfikir tentang
bukan kejayaan -
dalam erti kata lain, kes sudut, keadaan ralat -
sekarang saya mempunyai bekalan terhingga, atau sekurang-kurangnya empat bilion
perkara-perkara yang mungkin boleh pergi salah dalam program saya.
Dan saya boleh mula memberikan mereka nombor individu.
Kini, secara umumnya ia mencukupi untuk hanya kembali
sesuatu yang lain daripada 0.
Jadi kita akan hanya return 1 buat masa sekarang.
Tetapi sebab untuk kembali 1 adalah bahawa sebaik sahaja anda kembali
1, meneka apa yang berlaku kepada seluruh program?
Ia berhenti.
Itu sahaja.
Jadi hakikat bahawa saya kembali 1 adalah berkesan
pendek pintas pelaksanaan program ini supaya
apa-apa di bawah garis 27 akan terus melaksanakan.
Secepat pulangan yang utama, bahawa ia adalah.
>> Baiklah, jadi jika pengguna tidak bekerjasama dan kita mencapai garis 30
kerana mereka ditaip dalam nombor yang sah, di sini saya
pelaksanaan lagu ini.
Jadi saya mula-mula mencetak watak newline, hanya untuk
estetika.
Saya kini mempunyai untuk gelung.
Dan melihat saya melakukan perkara-perkara dalam sedikit
arah yang berbeza.
Saya tidak perlu untuk berbuat kurang daripada, saya tidak perlu untuk melakukan + +.
Saya sebaliknya boleh mengatakan memulakan pembolehubah i, tetapkan ia sama dengan
n, bilangan pengguna ditaip dalam, kemudian melakukan yang berikut, jadi
selagi i adalah lebih besar daripada 0, maka i -
sebaik sahaja anda selesai satu lelaran gelung ini.
Jadi, kita boleh mengira detik menggunakan untuk gelung serta.
Sekarang, ini adalah minggu cukup banyak satu barangan sekarang, dengan printf.
Jadi print "% d botol bir di dinding." Cetak "% d
botol bir. "Cetak" Ambil satu, lulus di sekeliling. "
"% D botol bir di dinding." Jadi ia masih d%, tetapi
notis bahawa hujah untuk printf berubah.
Selepas koma, saya mempunyai i, kerana saya mahu mengatakan 99.
Selepas koma ini, saya mempunyai i, kerana saya mahu mengatakan 99.
Selepas koma ini, saya mempunyai i - 1, kerana saya mahu mengatakan 98 di
ini lelaran pertama, dan sebagainya.
Dan kini turun di sini, saya hanya mempunyai beberapa kata-kata bodoh sedikit.
Dan kemudian garis 42, saya pulang 0 oleh konvensyen, menandakan bahawa
everything is okay.
>> Jadi apa jika saya goofed?
Apakah kesilapan yang biasa di sini mungkin?
Nah, bagaimana jika saya sengaja berkata, saya tidak mahu untuk mengira
ke 0, saya mahu 0 botol bir di dinding?
Jadi saya katakan, saya adalah lebih besar daripada atau sama dengan 0.
Apa yang akan menjadi gejala yang saya lihat sekarang jika saya susun semula
beer1 dan jalankan ia?
PENONTON: Negatif.
DAVID J. MALAN: Ya, ia gonna pergi negatif.
Ini adalah satu kesilapan demi satu, yang amat
kesilapan yang biasa untuk membuat.
Mari kita sebenarnya kembali ke tetingkap terminal dan melakukan
di sini, jadi kita boleh melihat lebih banyak pada satu-satu masa.
Enter, 99 botol bir.
Tutup, tetapi kita pergi pernah jadi sedikit terlalu jauh.
Kami menyanyikan lagu terlalu jauh ke bawah, seperti yang kita kini melanda
nombor negatif.
Jadi ia tidak cukup berfungsi.
>> Baiklah, jadi kita boleh menetapkan bahawa dengan kembali kepada
cara ia sekali adalah.
Tetapi apakah beberapa peluang sekarang untuk
peningkatan?
Baiklah, biar saya membuka beer2.c dan tatal ke bawah sini dan mengambil
melihat versi ini.
Apakah perkara pertama yang melompat keluar pada anda sebagai berbeza
dalam versi ini di sini?
PENONTON: [didengar].
J. DAVID MALAN: Ya, jadi tidak ada lagi i, kerana ia berlaku kepada
saya anda tahu apa, saya meminta pengguna untuk n, dan kemudian saya
menetapkan i sama dengan n, dan kemudian saya menukar i, tetapi saya tidak pernah minta
menyentuh n lagi.
Jadi apa yang palang pintu adalah titik anda memperuntukkan lain 32
bit dipanggil i hanya supaya saya boleh mempunyai pembolehubah yang berbeza?
Jadi dalam kes ini, saya jenis yang diiktiraf bahawa tidak perlu
ciri reka bentuk.
Dan kini saya akan mengatakan manakala n adalah lebih besar daripada 0, pergi
hadapan dan mencetak lagu yang sama, lulus n untuk printf sebagai
Hujah kedua, dan n - 1 sebagai hujah kedua di sini.
Dan kemudian pada setiap lelaran gelung ini, pergi ke hadapan dan hanya
SUSUTAN n sendiri.
Kini, fungsi, program ini
akan menjadi sama.
Jika saya menaip dalam 99, n bermula pada 99.
Saya susutan, susutan, susutan, susutan.
Saya akan mendapatkan semua jalan ke "Satu botol bir pada
dinding, satu botol bir.
Ambil salah satu, lulus di sekeliling.
0 botol bir di dinding. "Akhir, kerana saya lakukan
mendapatkan keadaan yang betul.
Ia lebih besar daripada 0.
Saya tidak membuat kesilapan ini.
>> Jadi yang lebih baik, versi satu atau versi dua?
Jadi saya mendengar sekumpulan sungutmu untuk dua.
Mengapa dua?
Apa itu?
PENONTON: [didengar].
DAVID J. MALAN: Oh, okay.
Jadi ia tidak akan pergi di bawah 0, tetapi ingat, dalam versi satu,
versi yang betul asal tidak pergi di bawah 0 sama ada.
Jadi ingat bahawa ini adalah versi yang betul.
Jadi biarlah sekurang-kurangnya membandingkan dua versi yang betul.
Apa hujah memihak versi
2, mmm, lebih baik?
Yeah?
PENONTON: Ia menggunakan ruang yang kurang.
DAVID J. MALAN: Okay, jadi ia menggunakan ruang kurang, kan?
Manakala satu versi menggunakan 32 bit untuk n, dan kemudian satu lagi
32 bit untuk i.
Versi dua sahaja menggunakan 32 bit bagi n, supaya
seolah-olah menjadi ditambah.
Pemikiran lain?
Adakah sesiapa yang mahu berhujah memihak kepada satu?
Yeah?
PENONTON: Anda perlu menggunakan baris tambahan kod bagi n -.
>> DAVID J. MALAN: Okay, pasti.
Supaya adil.
Jadi ini hanya, sekurang-kurangnya kepada saya -
Maksud saya, ini sebenarnya merasakan Messier sedikit, hakikat bahawa
Saya tidak boleh menyusun merangkumi semua logik saya dalam satu
garis indah, untuk gelung, kerana bagi gelung boleh.
Di sini, saya jenis perlu jelujur pada ini n -
pada akhir gelung, kerana
ia perlu logik.
Tetapi ia jenis menggosoknya saya dengan cara yang salah, hanya kerana ia
seolah-olah berasingan dari logik sehingga di sini, walaupun,
sekali lagi, ia adalah perlu.
Pemikiran lain?
Yeah?
PENONTON: [didengar].
>> DAVID J. MALAN: Yeah.
Jadi apa jika anda sebaliknya, di akhir lagu, mahu
mencetak semula nama lagu?
Seperti "Terima kasih untuk bermain 99 botol bir", atau sesuatu
bodoh seperti itu?
Tetapi titik, anda mahu akses kepada nilai asal.
Hakikat bahawa anda telah bermutasi atau berubah n pada setiap
lelaran dan oleh itu telah memusnahkan nilai asalnya
bermakna anda hanya tidak boleh berbuat demikian di penghujung.
Sekarang, boleh dikatakan, kita dengan jelas tidak mahu melakukan
iaitu dalam program ini.
Jadi yang peduli?
Tetapi itulah satu fakta yang sah.
Dan untuk bersikap jujur, ada benar-benar tiada siapa
betul menjawab di sini.
Mereka kedua-dua sama-sama betul.
Saya boleh yakin sama ada cara.
Saya akan mengatakan bahawa, secara amnya, ia adalah prinsip yang baik jika anda
meminta pengguna untuk nilai beberapa dan anda disimpan dalam pembolehubah
seperti n, hanya jenis pada prinsip, ia mungkin baik
untuk memastikan bahawa sekitar.
Dan mana-mana data yang anda mahu untuk bermutasi lagi dan lagi, hanya
memberi diri anda salinan pembolehubah itu, semata-mata supaya anda
mempunyai akses kepada asal.
Anda menghabiskan 32 lebih bit, tetapi realitinya adalah ini
komputer telah, seperti, dua gigabait RAM pada hari ini,
dan kita kebawelan lebih daripada 32 bit?
Benar-benar tidak apa-apa masalah besar.
Dan walaupun pada peranti ini di sini, dengan setengah persembahan atau
gigabit RAM, 32 bit berbanding 64-bit,
tidak seperti masalah besar.
Sudah tentu hari ini, ia akan menjadi cara terharu oleh saiz
program itu sendiri, yang akan menjadi beberapa ratus
kilobytes, jika tidak beberapa megabait, hari ini.
>> Jadi kebimbangan yang munasabah, tiada siapa yang betul jawapan.
Tetapi sekurang-kurangnya mereka adalah pemikiran yang harus bermula
pergi melalui fikiran anda?
Disebabkan dalam pset 0, walaupun kita benar-benar hanya dijangka
ketepatan, atau sekurang-kurangnya penolakan bug pelbagai bahawa
anda mungkin telah ditemui, seperti yang kita bergerak ke hadapan, reka bentuk
akan menjadi satu lagi aspek utama, kedua-dua penulisan kod
dan juga kita menilai kod.
Dan supaya sekurang-kurangnya memberikan pemikiran kepada perkara-perkara seperti ini.
Dan hanya kerana sesuatu kerja tidak bermakna ia adalah baik,
tidak bermakna ia adalah direka dengan baik.
Dan itulah salah satu perkara felo pengajaran dan
set masalah akan membantu kita mengusik sebahagian dari masa ke masa.
>> Nah, apa yang kira-kira, mari kita katakan, versi ini di sini?
Biar saya melakukan sesuatu yang sedikit seksi di sini dalam seketika.
Pertama biarlah saya menghilangkan ini.
Dan sekarang mari kita menetapkan isu ini tatabahasa.
Jadi, dalam versi ini, saya mahu memperbaiki tatabahasanya supaya,
bukannya hanya mengatakan s kurungan, seperti "botol"
atau "botol" -
Saya tidak mahu untuk mengurangkan sudut itu -
Saya juga ingin dinamik mencetak perkataan "botol"
atau "botol", sekali gus menggunakan ruang letak ini% s hari ini.
Jadi saya perlu bersyarat memeriksa apakah nilai i.
Dan jika ia adalah 1, saya mahu mengatakan "botol", dan jika apa-apa yang ia
lain, saya mahu mengatakan "botol". Jadi mari kita cuba untuk melakukan ini.
Jadi jika i == 1, maka biarlah saya pergi ke hadapan dan mengisytiharkan -
Saya perlu rentetan, jadi mari saya melakukan s1 tali, kerana ia adalah
rentetan pertama saya mengambil berat tentang sekarang.
Saya akan mengatakan "botol". Dan kemudian, mari kita lihat, tali
s2 - dan saya akan terangkan di mana saya akan dalam seketika -
"Botol." Jadi ingat bahawa, dalam lagu ini, kita perlu berupaya
untuk mencetak perkara, dua perkataan yang berbeza yang berpotensi.
Jadi, jika kita melihat kembali di sini, notis bahawa apabila kita mendapat
ini contoh di sini, "dua botol bir di dinding,
dua botol bir, mengambil satu ke bawah, lulus di sekeliling ", saya mahu
ini selaras keempat kini mengatakan "satu botol bir pada
dinding ". Jadi saya perlu membuat keputusan, saya mahu mengatakan" botol "atau
"Botol"? Jadi saya akan sewenang-wenangnya mengatakan, semua hak,
Saya akan kini mengisytiharkan pembolehubah dipanggil s1, tali
satu, perkara yang berlaku untuk mendapatkan dipasang di sini dan juga di sini,
kerana kata-kata adalah sentiasa serupa, hanya kerana
jenis lagu.
Dan saya akan memanggil s2 apa jua perkataan yang saya mahu
akhirnya muncul ke sini.
Kini, secara literal, 99 kali daripada 100, ia akan menjadi
sama dalam kedua-dua kes tersebut, kerana 3 adalah dalam bentuk jamak, 2 adalah
jamak, 4 adalah dalam bentuk jamak.
Tetapi dalam kes sudut ini, di mana kita akan mendapat ke 2 dan kemudian 1, atau
walaupun 1 dan kemudian 0, saya perlu logik ini.
Jadi saya perlu meluangkan masa dalam kod saya mendapat hak itu.
Jadi jika saya lakukan ini, jika i == 1, kemudian menetapkan s1 sama dengan "botol"
dan s2 sama dengan "botol", kerana ini akan menjadi untuk 1
botol, dan ini akan menjadi untuk 0 botol.
Dan ini di sini, apakah ini mewakili?
Hanya untuk menjadi jelas.
Ini hanyalah komen.
Jadi hakikat bahawa anda boleh mempunyai barisan tunggal comments bermakna anda
boleh komen kod anda seperti ini, tetapi lain biasa
paradigma, juga, adalah bahawa jika anda mempunyai frasa super-pendek yang
anda ingin meletakkan diri anda dan ia hanya lebih mudah dibaca untuk meletakkan
ia betul-betul di akhir baris kod, anda boleh
benar-benar melakukan sesuatu seperti ini.
>> Jadi sekarang apa jika saya lakukan ini? Lain jika saya tidak sama dengan 1.
Jadi bang sama -
tanda seru dikenali sebagai "bang".
Jadi bang = 1.
Jadi, jika saya tidak sama dengan 1, apa yang saya bukannya mahu lakukan?
Nah, perkataan pertama yang saya ingin menjadi apa?
Jadi rentetan 1 harus "botol" untuk botol majmuk,
dan maka ini akan menjadi plural dengan "botol" juga, buat masa sekarang.
Dan kita akan melihat jika ini sebenarnya mendapat kita untuk
di mana kita mahu pergi.
Jadi sekarang jika saya tatal ke bawah di sini, notis bahawa saya memasang
bukan sahaja i, tetapi s1.
Saya memasang dalam i dan s1.
Dan kemudian turun di sini, saya tolak 1, yang adalah sama seperti
sebelum ini, tetapi s2.
Dalam erti kata lain, saya mahu perkataan Bahasa Inggeris untuk menukar berasaskan
logik ini.
Kini, sudah ada beberapa masalah dalam kod ini.
Apa rosak pun keluar dari pintu di sini?
Yeah?
PENONTON: [didengar].
>> DAVID J. MALAN: Tepat sekali.
Jadi saya telah melanggar pengajaran skop.
Jadi saya telah diisytiharkan s1 dan s2, tetapi saya telah dilakukan dalam
pendakap kerinting, yang bermaksud yeah, kod ini akan bekerja sehingga
sehingga garisan 42, tetapi dengan seberapa segera kerana saya berada di garis 43, meneka apa yang tidak
wujud lagi?
Nah, rasa apa yang ada lagi dalam skop - tidak s1 atau s2.
Jadi, kita perlu untuk menetapkan ini.
Jadi biarlah saya memadam pengisytiharan.
Dan saya akan meninggalkan nama-nama pembolehubah dan memadam ini di sini
dan memadam ini di sini.
Dan di baris apa perlu saya benar-benar mengaku perkara ini?
PENONTON: [didengar].
DAVID J. MALAN: Ya, jadi mungkin
sehingga di sini, 33-ish.
Jadi s1 tali dan kemudian tali s2.
Dan ternyata, saya boleh melakukan ini.
Jika anda sedang mengisytiharkan dua pembolehubah jenis yang sama,
anda sebenarnya hanya boleh menggunakan koma dan berbuat demikian dalam C. Semua
betul, jadi sekarang saya mempunyai dua pembolehubah -
s1 dan s2.
Saya memberikan mereka nilai dalam ini
syarat di sini, atau di sini.
Dan kemudian saya menggunakan mereka ke bawah.
Sejauh ini kini akan bekerja?
>> Nah, ia adalah masih sedikit buggy, tetapi mari kita sekurang-kurangnya melihat
sejauh mana kita telah mendapat.
Jadi biarlah saya pergi ke hadapan dan membuat beer3.
Adakah ini beer3?
Ya, ini adalah beer3.
Dan sekarang mari saya pergi ke hadapan dan menjalankan beer3.
399 99.
Kita mungkin boleh melangkau kebanyakan mereka.
Dan ke bawah di sini, melihat bahawa.
"Satu botol bir di dinding, satu botol bir, mengambil
1 down, lulus sekitar, 0 botol bir di dinding. "
Tetapi saya menarik perhatian anda kepada hanya separuh daripada penyelesaian.
Jenis diskrukan sehingga di sini.
Jadi ia seolah-olah bahawa kes sudut timbul apabila i sama apa
dua nilai?
PENONTON: 2, 1.
DAVID J. MALAN: 2 dan 1.
Ia bukan 1 dan bukan 1.
Ia adalah benar-benar hanya ini lepas dua rangkap lagu ini.
Jadi apa yang saya sebaliknya mahu lakukan?
Jadi saya seolah-olah telah ditangkap kes di mana jika i == hingga 1,
maka perkataan pertama adalah "botol", tetapi perkataan kedua
"botol". Tetapi di sini, saya mahu mengubah ini untuk menjadi == 2.
Dan jika ini berlaku, apa yang saya mahu
perkataan pertama menjadi?
PENONTON: "Botol".
DAVID J. MALAN: "Botol", jadi untuk dua botol.
Dan maka perkataan ini di sini harus -
PENONTON: "botol".
DAVID J. MALAN: "botol", singular.
>> Baiklah, mari kita mengezum keluar, kembali di sini, lari semula membuat,
semula yang dikendalikan beer3, jenis 99 lagi.
Okay, "kesalahan Segmentasi (teras dibuang)."
Apa yang telah saya lakukan salah?
PENONTON: Anda tidak mempunyai nilai [didengar].
DAVID J. MALAN: Ah, titik cemerlang.
Baiklah, jadi apa yang salah di sini?
Jadi kesalahan segmentasi, dan kita sebenarnya akan melihat
ini agak beberapa kali pada masa depan, sengaja.
Tetapi untuk sekarang, apakah ini sebenarnya bermakna?
Satu kesalahan segmentasi hampir selalu bermakna bahawa anda mempunyai
entah bagaimana cuba untuk mengakses ingatan, RAM dalam komputer anda,
bahawa anda tidak melakukan sendiri, bahawa anda sebenarnya tidak meminta
sistem operasi untuk.
Jadi dalam kes ini, melihat apa yang saya telah lakukan, yang merupakan
cacat dalam logik saya.
Saya telah ditugaskan nilai s1 dan s2 jika i sama dengan 1.
Saya juga telah dilakukan bahawa jika i bersamaan 2.
Tetapi saya tidak pernah dilakukan dalam bilangan yang tidak terhingga lain
kemungkinan -
khususnya, 3 atau 4 atau dot, dot, dot, 99.
Jadi satu untuk memperbaiki ini hanya boleh membiarkan
mempunyai satu keadaan yang lain.
Dan biarlah saya pergi di sini dan mengatakan s1 sama -
apa yang ia harus berada di sini?
PENONTON: [didengar].
>> DAVID J. MALAN: "Botol", kerana dalam kes biasa,
ia hanya perkara yang sama.
Jadi sama quote, unquote, "botol." Jadi untuk jamak
botol, dan kemudian naik di sini, untuk botol majmuk.
Okay, jadi sekarang mari saya kembali ke tetingkap terminal saya,
susun semula, semula menjalankan ia.
99.
Huh.
Dan mari kita buat cek kewarasan cepat.
Secara teknikalnya, kita akan mahu membaca semua ini untuk memastikan
mereka betul, tetapi mari kita lihat
kurangnya penyebab yang diketahui.
3 botol, 2 botol, 2 botol, 1
botol, 1 botol, 0 botol.
Kita seolah-olah telah sekurang-kurangnya tetap untuk sekarang.
Tetapi tangkapan di sini adalah bahawa apa yang mes tuhan mengerikan ini adalah
hanya untuk menyelesaikan bodoh
satu-watak detail tatabahasa.
Jadi terdapat jenis sebab-sebab yang saya memotong sudut ini
sebelum ini, kerana ia hanya benar-benar menjengkelkan mempunyai
menulis kod ini banyak.
Tetapi ia ternyata bahawa terdapat sedikit lebih anggun cara
menyatakan perkara yang sama.
Dan kita boleh lakukan ini seperti berikut.
>> Biar saya meninggalkan ini pada skrin untuk seketika dan
memperkenalkan sesuatu yang dikenali sebagai pengendali pertigaan.
Ini adalah jenis pelapik satu itu hanya bertujuan untuk membuat
tinggal seksi sedikit, seperti yang dijanjikan.
Dan saya akan melakukan ini seperti berikut.
Berikan saya rentetan dipanggil s1, dan biarlah saya
sediakan seperti berikut.
(I == 1)?
"Botol", sebaliknya "botol". Rentetan s2 mendapat (i == 2)?
"Botol", sebaliknya "botol".
Jadi apa yang kemudian adalah perbezaan di sini?
Kedua-dua baris kod, saya berhujah, boleh
menggantikan keseluruhan keadaan kucar-kacir.
Jadi saya memanggilnya kacau-bilau, hanya kerana ia jenis menggosoknya saya
cara yang salah bahawa ia adalah begitu banyak baris kod.
Tidak salah.
Ia tidak reka bentuk yang buruk.
Seperti, ini adalah betul-betul dan sempurna denda.
Tetapi kod mendapat membosankan jika anda mempunyai untuk meluahkan diri anda supaya
sialan khusus lagi dan lagi dan lagi dengan mudah
senario seperti ini.
Jadi C mempunyai beberapa jalan pintas, seperti ini.
Jadi ini pada dasarnya mengatakan menyatakan rentetan dipanggil s1 dan
sediakan sama ada ini nilai atau nilai ini jika i == -
maaf, saya harus mengatakan ini dengan lebih jelas.
Mengisytiharkan s1 ubah, menyerahhakkan nilai ini jika ini adalah benar.
Jika tidak, menyerahhakkan nilai ini.
Jadi dalam erti kata lain, ini adalah jenis cara satu garis
mengatakan jika lain tetapi melakukan tugasan di sepanjang jalan.
Jadi, jika i 1, kemudian pergi ke hadapan dan memanggil ini "botol". Dan
maka ini lain, memanggil ia "botol". Sementara itu, s2,
perkataan kedua yang kita perlu untuk menentukan, jika i bersamaan 2, kami akan
menetapkan s2 ke "botol". Jika tidak, menetapkan ia untuk "botol". Dan apa
ini bermakna sekarang adalah saya boleh pergi melalui ini dan memadam semua
mereka baris kod.
Dan apabila saya berkata, agak mustahil, bahawa ini adalah kini
seksi, ia adalah seksi dalam apapun rasa gaya.
Hakikat bahawa fungsi, kod ini sebenarnya akan
melakukan perkara yang sama.
Dan walaupun ia mungkin kelihatan sedikit samar pada mulanya
pandangan, kerana kita telah tidak dilihat membina sebelum ini, saya akan
berhujah bahawa ia akhirnya akan menjadi banyak lagi
dibaca dan sebagainya lebih mudah bagi kita manusia untuk menyusun
memahami, kerana sekarang anda hanya boleh membaca
kod semua dalam satu baris.
Ia masih sama dalam semangat jika, di mana ini adalah
keadaan dan kemudian ini adalah apa yang di dalam jika dan ini
adalah apa yang di dalam yang lain.
Tetapi kita boleh lakukan ini hanya lebih elegan.
>> Dan jika saya kini kembali ke terminal saya, setelah memadam semua
mereka garis dan digantikan mereka dengan hanya kedua-dua,
susun semula, yang dikendalikan semula botol bir dengan 99, notis bahawa saya
tatabahasa adalah, sebenarnya, masih betul.
Jadi sekali lagi, sesuatu untuk memulakan.
2 botol bir, 1 botol bir.
Kelihatan betul.
Yeah.
Jadi ada kita mempunyai ringkas penyelesaian yang lebih.
Jadi ini, juga, seperti yang anda mendapatkan lebih selesa dengan C, tidak
semestinya dengan pset pertama, atau lebih 2, tetapi
menyedari bahawa konstruk ini boleh membenarkan kita untuk melakukan perkara-perkara yang pernah
lebih elegan.
Sekarang mari kita melakukan satu perkara lain di sini.
Biar saya pergi ke hadapan dan membuka return1.c.
Sekarang mari kita mulakan untuk menyelesaikan satu lagi masalah dengan cara yang
membolehkan kita untuk menulis kod yang lebih canggih.
>> Jadi di sini adalah satu program yang mudah kecil yang tujuan dalam kehidupan
adalah untuk kenaikan nilai.
Dan sebenarnya, mari kita mengambil langkah ke belakang.
Biarkan saya melakukan ini secara manual.
Biar saya buat termasuk dan int utama (tidak sah).
Dan biarlah saya memanggil increment.c ini.
Dan apa yang saya mahu lakukan?
Saya akan pergi ke hadapan dan mengatakan sesuatu seperti -
kita akan memanggil nombor yang sama -
x int.
Jadi x int mendapat 2; x printf adalah% d, barisan baru, x.
Jadi saya menaip pantas, tetapi jenis barangan biasa sekarang.
Kemudian saya akan lakukan x + +.
Kemudian saya akan mencetak bahawa hukuman yang sama sekali lagi.
Dan kemudian saya akan kembali 0 hanya untuk berhenti program.
Baiklah, jadi ini adalah satu program yang
kenaikan nombor.
Ia pertama akan memulakan sesuatu kepada 2, dan kemudian ia
akan kenaikan dan mencetak semula.
>> Jadi mari menjalankan kenaikan, program yang amat mudah.
Tetapi katakan sekarang bahawa saya ingin kiub nilai, begitu juga dengan
sesuatu yang agak sewenang-wenangnya.
Dan saya benar-benar mahu untuk melakukan x mendapat kiub.
Jadi saya boleh menggunakan apa yang dipanggil fungsi pow, tetapi saya tidak
benar-benar tahu di mana yang belum.
Jadi, saya akan melakukan ini dengan cara lama.
x kali ini sama dengan x masa x masa x.
Jadi saya cubing nilai, mendarabkan ia dengan sendirinya lagi
dan lagi dan lagi, supaya kita mendapat kuasa
3 dalam kes ini.
Jadi sekarang nombor yang saya perlu mencetak perlu, seperti yang kita akan lihat
di sini - membuat kenaikan, jadi ia sebenarnya tidak benar-benar kenaikan
lagi, tetapi kita akan meninggalkan nama sahaja -
2 dan kemudian 8.
Sekarang, kita mempunyai permulaan peluang untuk penghalusan
di sini, di mana perkara ini cubing mendarabkan nombor
dengan sendirinya dengan sendirinya dengan sendirinya berasa seperti ini hanya mungkin
berguna untuk mempunyai sebagai fungsi, sama seperti seseorang memutuskan
tahun lalu - anda tahu, jenis berguna jika salah seorang daripada kita duduk
dan menulis printf supaya seluruh dunia boleh menggunakan ia,
mengapa tidak kita duduk dan menulis fungsi yang dipanggil kiub
yang tidak cubing ini untuk kita supaya kita tidak perlu manual
melaksanakan tanggapan cubing nilai di sini?
>> Jadi contoh yang mudah, tetapi mari kita pergi ke hadapan dan menggunakan ini sebagai
peluang untuk menulis fungsi kita sendiri.
Jadi setakat ini, kita telah hanya digunakan utama, dan kita telah menggunakan lain
fungsi rakyat, tetapi kita telah tidak ditulis kita sendiri.
Jadi di sini kita pergi.
Saya akan pergi ke hadapan dan menulis fungsi yang dipanggil kiub.
Dan saya akan mempunyai ia mengambil input.
Jadi input akan menjadi integer.
Dan apa yang ia akan lakukan?
Ia akan mengisytiharkan output int = input kali input
input kali.
Dan kemudian ia akan kembali output yang.
Dan kemudian saya mempunyai khusus sekarang.
Fungsi ini akan kembali int.
Jadi di sini maka adalah bagaimana anda akan menulis fungsi-fungsi anda sendiri.
Anda terlebih dahulu memutuskan apa nama anda
fungsi akan menjadi.
Dan secara amnya, sesuatu penjelasan adalah baik, jadi saya akan
memanggilnya kiub.
Kemudian anda perlu untuk menentukan apa yang ia akan kembali, apa yang
output akan menjadi.
Dan kita tidak mempunyai pilihan yang banyak lagi.
Int, char, float, bool, tali.
Buat masa sekarang, saya akan melekat dengan int, kerana saya mahu ia
untuk kembali integer.
Kemudian anda perlu untuk menentukan apa input, jika ada, adalah.
Dan jika kiub mengambil hujah, mengambil sesuatu di antara
kurungan, anda perlu untuk memberi hujah bahawa nama supaya
anda boleh memanggil ia sesuatu yang anda melaksanakan atau menulis
fungsi ini, dan anda perlu memberi ia jenis, yang dalam hal ini
kes ini akan menjadi int.
Jadi dalam jangka pendek, kiub adalah fungsi yang mengambil integer
sebagai input dan pulangan integer sebagai output.
>> Jadi apa yang ia lakukan dengan input itu?
Nah, di baris 14, Saya mengaku output berubah-ubah yang dipanggil, dan saya
sediakan nilai, kali input input input kali.
Dan kemudian saya kembali output.
Jadi bagaimana saya boleh menggunakan ini kemudian?
Apa yang saya menukar watak-watak yang ditonjolkan secara on-line
7 akan, adakah anda fikir?
PENONTON: [didengar].
DAVID J. MALAN: Ya, jadi kiub x.
Jadi x adalah pembolehubah, yang bermakna ia memegang beberapa nilai.
Mujurlah, ia adalah integer jenis.
Dan kerana x int, yang bermakna saya boleh lulus ke dalam kiub.
Dan walaupun saya yang mengatasi nilai x dengan nilai
x kiub, seperti yang telah kes itu setakat ini, bila-bila masa anda
mempunyai tanda yang sama dan baris kod, barangan di sebelah kanan
mendapat dilaksanakan dan kemudian mendapat diberikan kepada
nilai di sebelah kiri.
Jadi perintah operasi adalah seperti yang kita akan berharap.
Jadi adakah ini kerja?
Baiklah, biar saya pergi ke sini.
Izinkan saya membuka tetingkap terminal saya.
Izinkan saya membuat kenaikan, Masukkan.
"Perisytiharan Tersirat fungsi 'kiub' adalah tidak sah di
C99. "Sebagai mengetepikan, C99 merujuk kepada bahasa C kerana ia
ditakrifkan pada tahun 1999, yang kini lebih versi dari
1989, yang merupakan update sejak asal.
Jadi itulah semua yang cara.
>> Jadi, apakah ia bermakna bahawa "akuan tersirat
fungsi 'kiub' adalah tidak sah? "Ia adalah di sini.
Ia adalah di sana dalam 12 baris.
PENONTON: [didengar].
DAVID J. MALAN: Apa itu?
PENONTON: Ia tidak sebelum ini.
DAVID J. MALAN: Ia tidak sebelum ini.
Jadi ini adalah perkara itu.
C adalah jenis bodoh, atau penyusun C adalah jenis bodoh.
Mereka benar-benar hanya melakukan apa yang anda beritahu mereka lakukan.
Dan mereka, khususnya, hanya membaca kod anda atas ke bawah,
kiri ke kanan.
Jadi jika pengumpul, dilafaz, membaca kod anda, baris 1,
angka bagaimana untuk melakukan ini.
Oh, di sini datang utama.
Baiklah, izinkan saya pergi ke hadapan dan mengisytiharkan pembolehubah x.
Izinkan saya mencetak sesuatu.
Line 7, apa yang palang pintu adalah kiub?
Ia tidak diisytiharkan di stdio.h.
Ia tidak datang dengan C. Saya tidak tahu apa yang perlu dilakukan.
Dan sebagainya dilafaz hanya konyol dan berhenti dengan mesej ralat yang.
Jadi, kita boleh menetapkan ini dalam beberapa cara.
Kita boleh mengajar dilafaz apa kiub adalah dengan hanya bergerak di mana
pengisytiharan.
Jadi saya dipotong dan ditampal atas utama.
Kini sedar bahawa hanya kerana utama ialah tiada lagi pertama, ia
masih disempurnakan oleh lalai.
Main utama.
Ia adalah fungsi nama lalai.
Ia tidak kira di mana ia adalah dalam fail.
Tetapi sekurang-kurangnya sekarang dilafaz telah melihat kiub sebelum saya menggunakan ia.
Jadi mari kita lihat jika dilafaz adalah bahagia sekarang.
Buat kenaikan, ia tidak menyusun masa ini.
>> Izinkan saya menjalankan kenaikan.
Dan demi sesungguhnya, ia seolah-olah bekerja.
Kini, anda boleh tampil dengan senario akhirnya di mana
ia tidak sesuai untuk meletakkan setiap fungsi
atas setiap fungsi lain.
Anda akan mendapat terperangkap dalam gelung ini terbatas dalam realiti,
di mana lelaki ini mahu berada di sini tetapi ini
lelaki perlu berada di sana.
Supaya tidak sentiasa bekerja.
Jadi bersyukur, C mempunyai satu penyelesaian yang lebih elegan.
Saya akan meletakkan kembali ini di mana ia adalah, hanya kerana saya
suka, sebagai satu perkara prinsip, bahawa utama sentiasa menjadi
di atas, kerana ia hanya baik untuk melihat apa yang program ini
tidak secara lalai.
Dan apa yang saya akan lakukan di sini mengisytiharkan apa yang dipanggil
prototaip.
Saya akan mengisytiharkan semula fungsi kiub saya oleh literal
menyalin dan menampal.
Sebenarnya, itu bukan betul-betul.
Jadi benar-benar menyalin dan menampal line 15
sehingga melebihi 6 baris.
Ia tidak kira apa garis ini berakhir pada.
Ia berlaku pada 4 baris.
Tetapi ia tidak perlu menjadi sebelum utama.
Tetapi notis perbezaan.
Line 4 berakhir dengan semicolon, yang bermaksud hey,
Dilafaz, mengambil kata-kata saya untuk itu bahawa wujud fungsi
dipanggil kiub yang mengambil int dan kembali int.
Namun, saya tidak akan memberitahu anda apa yang ia belum.
Hanya tahu bahawa saya berjanji untuk memberitahu anda akhirnya.
Dan sesungguhnya, kini ia okay bahawa ini adalah ke bawah.
>> Jadi ini adalah umumnya lebih baik, kerana kemudian di bahagian atas
fail anda, anda hanya boleh gemeretuk luar, cepat-api, satu baris
setiap apa nama fungsi anda, apa yang mereka
input, apa output mereka.
Dan untuk menjadi lebih jelas, input secara amnya bermaksud hujah atau
parameter, sinonim.
Output ertinya nilai pulangan, apakah ia
tangan kembali kepada saya.
Jadi dalam kes ini di sini, kiub telah diisytiharkan di atas, tetapi
ditakrifkan, atau dikenali sebagai dilaksanakan, di bawah.
Jadi sekarang mari kita kembali di sini dan jalankan semula ini.
Jadi sekarang mari saya pergi ke hadapan dan jalankan semula membuat, jalankan semula kenaikan.
Dan ia kini seolah-olah bekerja baik-baik saja.
Jadi sekarang kita boleh pergi ke hadapan dan faktor keluar sesuatu seperti
contoh bir ke dalam versi ini keempat.
Jadi biarlah saya skrol ke bawah sini.
Dan notis bahawa saya jenis mengambil pelajaran ini kepada jantung tadi.
Hakikat bahawa saya telah menyanyi bait yang sama sekali lagi dan
lagi dan lagi, barisan korus sama dalam lagu, merasakan
seperti mengapa tidak saya faktor yang keluar ke fungsi?
Dan sesungguhnya, ini harus menjadi salah satu motivasi.
Selain hakikat bahawa orang lain di dunia mungkin mahu
untuk menggunakan fungsi kiub -
itulah alasan yang baik untuk faktor sesuatu yang keluar dan menulis anda
fungsi adat sendiri -
jika ada sebahagian kod di dalam program yang hanya membuat anda
rasa konsep, yang anda jenis mahu untuk memberikan
nama - seperti dalam kes ini korus, -
maka anda sama boleh menulis bahawa sebagai fungsi yang berasingan.
Anda tidak perlu untuk menulis segala-galanya dalam utama jika ia hanya
berasa bersih untuk memisahkan ia keluar dan memberikan nama.
>> Jadi dalam kes ini di sini, notis bahawa saya mempunyai komen di atas
fungsi ini yang hanya menyanyi tentang
dinyatakan nombor botol.
Notis di sini bahawa saya tidak perlu untuk memanggil ini
perkara input dan output.
Malah, masa ini saya hanya dipanggil b input saya untuk botol.
Dan notis di sini, tidak sah menunjukkan apa?
Korus bahawa -
PENONTON: Tidak akan kembali.
DAVID J. MALAN: Tidak akan kembali nilai.
Dan sesungguhnya, fungsi tidak perlu untuk kembali nilai.
Mereka hanya boleh berbuat sesuatu.
Mereka boleh mempunyai apa yang dipanggil kesan sampingan, yang dalam hal ini
kes hanya sekumpulan keseluruhan percetakan pada skrin.
Maka notis bahawa kod ini di sini, saya benar-benar hanya mencuri dari
contoh sebelumnya.
Satu-satunya perbezaan adalah bukannya menggunakan i sebagai saya
berubah-ubah, saya kini menggunakan b sebagai pembolehubah saya.
Jadi saya mempunyai b turun di sini, saya mempunyai b turun di sini, saya mempunyai b
tolak 1 turun di sini.
Tetapi kod adalah sama.
Tetapi hanya untuk menunjukkan kepada anda sekarang bagaimana kita boleh menggunakan ini, izinkan saya pergi
hadapan dan sebenarnya mengubah ini untuk menjadi untuk gelung.
(int i = n; i> n; i -).
>> Jadi saya telah dicuri bahawa daripada contoh sebelumnya kami.
Sebelum ini, ia adalah dalam 37 baris yang saya akan mula
menyanyi lagu ini menjengkelkan.
Tetapi sebaliknya, saya hanya akan kini memanggil korus i.
Selesai.
Jadi sekarang dalam setiap lelaran gelung ini, saya panggil ini lain
fungsi, korus, bahawa saya berlaku untuk menulis.
Ia tidak ditulis oleh orang lain tahun lalu.
Tetapi korus, Sementara itu, menggunakan printf untuk mencetak
keluar empat baris.
Tetapi hakikat bahawa saya memanggil korus sekali lagi dan sekali lagi dalam
gelung bermakna bahawa saya akan mendapatkan, pada akhir hayatnya,
lagu yang sama yang tepat kerana saya mempunyai setakat ini.
Jadi dalam jangka pendek, kini jika saya melihat kembali pada kod saya, walaupun
fungsi ini adalah bersamaan, notis bahawa ia adalah
bermula untuk mendapatkan lebih banyak dibaca.
Saya tidak tahu bagaimana GetInt
dilaksanakan.
Terus terang, saya tidak tahu bagaimana korus dilaksanakan.
Tetapi ia tidak perkara itu kepada saya.
Saya tidak peduli, kerana sekarang saya boleh menyusun, sebagai manusia, membaca
bawah ini dari atas ke.
Dan kerana fungsi dinamakan mengikut apa yang mereka
lakukan, kod saya adalah semakin dibaca.
Dan sebagai program kami mendapat lebih kompleks -
menjelang akhir semester, anda akan menulis beratus-ratus baris
kod dalam bahasa seperti PHP dan JavaScript dan sebagainya -
anda akan mendapati bahawa ia adalah begitu banyak lebih mudah daripada untuk menjejaki
apa yang anda telah lakukan.
Dan apabila anda mula bekerjasama dengan rakan-rakan atau
rakan-rakan atau rakan sekerja, anda akan dapat untuk menulis lebih
program besar-besaran dengan bermula untuk menjalankan ini asas
blok bangunan.
>> Maka dengan itu berkata, mengapa kita tidak memanggil ia sehari?
Dan kita akan melihat anda pada Rabu.
[Tepukan]