[Powered by Google Translate] DAVID J. MALAN: Baiklah.
Ini adalah CS50, dan ini adalah akhir dua minggu.
Jika anda mengharapkan untuk menjadi lapar sekitar masa esok ini, tahu bahawa kita akan
untuk mengadakan esok kumpulan kecil, Khamis, 1:15 PM.
Terdapat URL ini di sini jika anda ingin untuk RSVP.
Ruang adalah terhad, jadi maafkanlah jika borang yang telah diisi oleh masa yang anda
mengisi ini.
Satu lagi URL walaupun yang mungkin menarik minat ini.
>> Jadi dalam hanya kira-kira masa sebulan, kursus ini akan disediakan
semua lebih meluas melalui EDX, melalui mana orang di Internet akan
dapat mengikuti bersama-sama, melibatkan diri dalam kursus ini agak aktif, sebenarnya.
Mereka akan menggunakan Appliance CS50 dan CS50 Bincangkan dan kebanyakan
pelbagai alat perisian yang kita sudah telah menggunakan semester ini.
Dan salah satu inisiatif kita ingin mengambil sebagai percubaan tahun ini
adalah untuk melihat betapa banyak kandungan kita boleh diterjemahkan kepada lain yang dituturkan dan
ditulis bahasa.
Jadi, jika anda mungkin mempunyai kepentingan dalam menyertai dalam projek ini, di mana
kita akan menyediakan transkrip Inggeris dan sarikata bagi kursus
kuliah dan seluar pendek dan seminar dan bahagian dan sebagainya -
jika anda bercakap dengan lancar atau menulis dengan lancar beberapa bahasa lain, kita akan
suka untuk melibatkan diri anda dalam projek ini, di mana anda mengambil satu atau lebih daripada
video, menterjemah mereka ke dalam bahasa anda tahu cukup baik.
Untuk memberi anda rasa antara muka, ada ini antara muka berasaskan web pengguna
bahawa kita akan menggunakan yang akan mewujudkan asasnya UI seperti ini.
Ini saya mengajar Halloween dahulu.
Dan di sebelah kanan terdapat dalam hitam bersebelahan dengan setem masa,
anda akan melihat pelbagai perkara yang keluar dari mulut saya bahawa hari.
Dan kemudian di bawah, anda akan mampu untuk menterjemahkan ke dalam bahasa lain.
Tepat sekali apa yang pemetaan di antara keduanya, dalam kes ini, Bahasa Inggeris
dan, katakan, Sepanyol.
Jadi ia sebenarnya alat yang sangat user-friendly.
Anda boleh putar balik dan cepat ke hadapan sangat mudah dengan kekunci pintas.
Jadi jika anda ingin mengambil bahagian dalam eksperimen ini dan mempunyai kata-kata anda
dilihat dan dibaca oleh berpotensi beribu-ribu orang di luar sana, jangan berasa
percuma untuk menyertai.
>> Kini satu perkataan tentang kucing dari Isnin, supaya kami telah menghantar terlalu
mesej menakutkan.
Adakah sedar bahawa sebagai waktu pejabat mencadangkan dan sebagai bahagian mencadangkan,
reka bentuk kursus ini adalah sangat banyak telah pelajar bekerjasama dan
bercakap untuk bekerja melalui set masalah dan masalah bersama-sama.
Dan benar-benar garis hanya datang ke, sekali lagi, kerja anda akhirnya
hendaklah mengemukakan harus anda sendiri.
Dan sebagainya, agak jujur ​​- dalam waktu pejabat, ia adalah benar-benar biasa -
ia benar-benar boleh dijangka, walaupun - untuk berbual dengan beberapa
rakan-rakan yang datang kepada anda.
Jika dia atau dia sedang bergelut dengan beberapa topik, dan anda seperti, oh, baik mari
saya memberi anda gambaran tentang beberapa baris kod yang saya tulis.
Itu denda.
Yang berlaku.
Dan itulah amat kondusif, saya fikir, dengan proses pembelajaran.
Jika garis, sekali lagi, mendapat melintasi adalah apabila kepala adalah jenis condong lebih
di sini untuk saat atau minit yang terlalu banyak untuk itu benar-benar mempunyai hanya
peluang nyahhalang untuk rakan anda.
Dan sudah tentu, apabila perkara mendapatkan ditukar melalui e-mel dan Dropbox dan
sebagainya, terdapat juga adalah baris.
Jadi dengan cara semua, berasa selesa dan berasa digalakkan untuk berbual dengan rakan-rakan
dan rakan sekelas tentang psets dan banyak lagi.
Dan hanya menyedari bahawa apa yang anda akhirnya mengemukakan benar-benar harus menjadi
produk ciptaan anda dan bukan orang lain.
>> Jadi dalam urat yang sama makhluk boneka, anda mungkin
tahu lelaki ini di sini.
Jadi ini adalah satu filem yang horrifically cheesy dari tahun lalu.
Sesiapa di sini dilihat Spaceballs?
Semua hak.
Jadi bilangan yang baik di sini.
Jadi ini adalah cara kami hebat akademik memperkenalkan hari ini akhirnya
konsep kriptografi.
Dan sebagainya salah satu masalah domain khusus untuk 2, pset yang akan datang
keluar lewat malam esok, adalah untuk menyelam ke dalam dunia kriptografi, yang
adalah seni menyulitkan atau bergegas maklumat.
Dan ini akhirnya berkaitan dengan dunia keselamatan.
>> Sekarang keselamatan bagi kebanyakan kita datang dalam bentuk mekanisme yang agak biasa.
Semua kita mempunyai nama pengguna dan kata laluan.
Dan kita semua mempunyai nama pengguna dan kata laluan yang sangat buruk, kemungkinan besar.
Jika kata laluan anda adalah sama pada beberapa laman web, yang mungkin tidak
idea yang terbaik, seperti yang kita akan membincangkan ke arah akhir semester.
Jika kata laluan anda ditulis pada nota melekit - jenaka tidak - pada anda
memantau, yang juga tidak semestinya reka bentuk yang terbaik tetapi agak biasa
fenomena.
Dan jika anda tidak menggunakan kriptografi untuk menyulitkan kata laluan anda, mereka adalah
terdedah.
Jadi, jika anda berfikir anda menjadi super bijak dengan mempunyai Firman tersembunyi
dokumen tempat pada pemacu keras anda yang mempunyai semua kata laluan anda tetapi
ia dalam folder bahawa tiada siapa yang akan melihat, yang terlalu tidak adalah sangat
mekanisme selamat.
Dan jadi apa pset 2 akan memperkenalkan ini seni kriptografi dan
bergegas maklumat supaya perkara-perkara seperti kata laluan
semua lebih selamat.
Jadi sebagai untuk memberi motivasi kepada masalah ini sangat dunia sebenar dengan sangat bukan dunia sebenar
senario, izinkan saya memperkenalkan anda kepada salah satu klip kegemaran kami di sini daripada ini
filem, Spaceballs.
>> [Video main]
Who arak, apa yang berlaku?
Apa yang anda lakukan kepada anak perempuan saya?
Izinkan saya untuk memperkenalkan pakar bedah plastik cemerlang muda, Dr Philip
Schlotkin, hidung terbesar pekerjaan manusia di seluruh
alam semesta dan Beverly Hills.
-Anda tuanku.
-Hidung kerja?
Saya tidak faham.
Dia sudah mempunyai pekerjaan hidung.
Ia adalah manis 16 hadir.
Tidak, ia bukan apa yang anda fikirkan.
Ia lebih buruk.
Jika anda tidak memberi saya gabungan perisai udara, Dr Schlotkin akan
memberi anak anda kembali hidung rumahnya.
-Tiada!
Di manakah anda mendapat bahawa?
-Baiklah.
Saya akan memberitahu.
Tidak, ayah, tidak.
Anda tidak perlu.
You're hak, sayang saya.
Saya akan terlepas hidung baru anda.
Tetapi saya tidak akan memberitahu mereka gabungan tidak kira apa.
-Sangat baik.
Dr Schlotkin, melakukan yang terburuk anda.
My keseronokan.
-Tiada!
Tunggu, tunggu.
Saya akan memberitahu.
Saya tahu ia akan bekerja.
Baiklah, berikan kepada saya.
Gabungan adalah salah.
-One.
-Dua.
Tiga
Tiga.
Empat.
Lima
Lima.
Jadi gabungan adalah satu, dua, tiga, empat, lima.
Itulah gabungan bodoh yang pernah saya dengar dalam hidup saya.
Itulah jenis perkara bodoh akan mempunyai bagasi.
Terima kasih, tuanku.
Apa yang anda lakukan?
Saya dimatikan dinding.
Tidak, anda tidak.
Anda dimatikan keseluruhan filem.
Saya mesti menekan butang yang salah.
Nah, meletakkan ia kembali.
Letakkan filem kembali.
-Ya, tuan.
Ya, tuan.
-Mari kita pergi, Erna.
Marilah, Gretchen.
Sudah tentu, anda tahu saya masih akan perlu untuk menghantar bil kepada anda untuk ini.
Nah, adakah ia berfungsi?
Mana pintu?
Ia bekerja, tuan.
Kami mempunyai gabungan.
Hebat.
Sekarang kita boleh mengambil setiap nafas terakhir udara segar dari planet Druidia.
Apakah gabungan?
Satu, dua, tiga, empat, lima.
Satu, dua, tiga, empat, lima?
-Ya.
-Itulah menakjubkan.
Saya telah mendapat kombinasi yang sama pada bagasi saya.
Sediakan Spaceball 1 untuk berlepas serta-merta.
-Ya, tuan.
Dan mengubah kombinasi pada bagasi saya.
-Ow!
[Video main AKHIR]
>> DAVID J. MALAN: Satu filem yang menakjubkan anda perlu sekarang semua lihat.
Jadi konteks di sini adalah bahawa dengan data tidak selamat datang peluang untuk
menyulitkan dan untuk perebutan ia.
Dan sebagainya ini, misalnya, adalah satu contoh mesej disulitkan.
Ini sebenarnya mengatakan sesuatu dalam Bahasa Inggeris.
Tetapi ia adalah jelas tidak sepenuhnya jelas.
Dan kita akan datang bulatan penuh hari ini untuk mengusik selain apa rahsia ini
mesej di sini.
Tetapi dalam dunia sebenar komputer, perkara-perkara tidak walaupun kelihatan seperti mereka mungkin
menjadi frasa Bahasa Inggeris.
Sebagai contoh, ini adalah apa yang anda mungkin mencari di standard Linux atau Mac atau
Unix komputer dalam fail yang pernah suatu masa dipanggil fail kata laluan.
Kini, ia telah dipindahkan ke tempat lain.
Tetapi jika anda melihat di tempat yang betul pada sistem, anda akan melihat bukan sahaja anda
nama pengguna atau orang lain pada sistem, tetapi anda akan melihat
versi disulitkan kata laluan mereka.
Malah, perkataan kubur sana menunjukkan bahawa barangan berikut adalah disulitkan.
Dan ini siri surat yang seolah-olah rawak dan huruf dan nombor dan
sebagainya boleh dibuka hanya dengan umumnya mengetahui beberapa rahsia -
perkataan rahsia, rahsia nombor.
Dan sebagainya sememangnya, seni kriptografi akhirnya bisul ke mempercayai beberapa
menyusun dan mengetahui sesuatu yang orang lain tidak.
Kami akan meneroka ini secara terperinci sedikit lebih hari ini dan dalam pset datang.
>> Dan kini satu perkataan pada pas / gagal.
Jadi, terutamanya, kerana sesetengah daripada anda telah menyelam ke dalam pset 1, perkakas, dan
dunia yang sangat baru untuk diri sendiri, menyedari bahawa kekecewaan dan
kekeliruan dan kesukaran hanya teknikal dapat dijangka.
Terutamanya dengan pset pertama, di mana terdapat hanya begitu banyak baru, hanya mendapat
biasa dengan ls dan cd dan semua arahan batin dalam persekitaran yang baru.
Dan itulah berasingan dari bahan sebenar dan pengaturcaraan sendiri.
Jadi sedar, terlalu, bahawa terdapat pasti waktu pejabat yang wujud sebagai
struktur sokongan.
Seksyen bermula Ahad ini akan datang.
Tetapi yang paling penting, jika anda rasa hanya yang ini tidak adalah
dunia untuk anda, sedar bahawa ia benar-benar tidak hanya mengambil masa.
Dan kalaulah tidak bagi peluang ini tahun lalu untuk saya mengambil kelas
lulus / gagal, jujur, saya tidak akan telah pun menjejakkan kaki di dalam kelas.
Dan anda boleh menukar sehingga, katakan, hari Isnin kelima kursus.
Jadi, jika anda berada di pinggir kini, menyedari bahawa bukannya kepala ke beberapa lain
perairan sama sekali, adakah pasti mempertimbangkan hanya berubah untuk lulus / gagal.
Sekali lagi, tidak benar-benar budaya ini di sini di Harvard mengambil perkara
lulus / gagal kerana semua orang benar-benar mahu mencapai atau overachieve.
Tetapi terus-terang, ini adalah cara yang indah untuk mencuba sesuatu yang keluar yang tidak mungkin
biasa kepada anda.
Dan anda akan berakhir lakukan dalam kebanyakan kes agak halus, mungkin
banyak untuk mengejutkan anda.
Dan dari segi yang lebih konkrit, apa yang saya fikir lulus / gagal umumnya tidak,
terutamanya kerana anda mungkin telah berpengalaman dengan pset 0, jika anda telah meletakkan
dalam 10 jam, 15 jam, 25 jam ke pset beberapa - dan anda hanya terhantuk
kepala dinding,
dan ia semakin super lewat malam,
tetapi anda telah mengambil pset seperti 90% dari jalan,
anda tahu anda tidak boleh memikirkan satu perkara -
lulus / gagal benar-benar mengambil kelebihan luar kelas seperti ini, di mana anda boleh menyusun
gembira mengatakan okay, saya tahu ia tidak sempurna.
Tetapi saya bekerja pantat saya mengenai perkara ini.
Saya agak gembira dengan mana ia berakhir.
Dan yang akan memenuhi harapan pas / gagal.
Jadi jangan menyimpan bahawa dalam fikiran.
>> Semua hak.
Jadi orang-orang yang telah berjuang untuk menggunakan Universiti Harvard Wi-Fi tahu
bahawa terdapat SSID CS50, sambungan Wi-Fi terapung di sekeliling yang anda
mungkin mempunyai nasib yang lebih baik.
Ia adalah ironis sedikit bahawa kata laluan untuk ini - jika anda ingin mencuba
menyambung ini untuk kelajuan yang lebih baik dan marilah kita tahu jika ia tidak lebih baik -
satu, dua, tiga, empat, lima, sepanjang jalan sehingga lapan kerana lapan adalah
lebih selamat daripada lima.
Jadi jika anda memerlukan kata laluan Wi-Fi, menyambung CS50 tanpa wayar di sini.
Satu, dua, tiga, empat, lima, enam, tujuh, lapan.
Dan paparkan dalam CS50 Bincangkan jika anda masih mempunyai isu penyambungan sekejap,
dan kita akan membiarkan kuasa yang akan tahu untuk ruang ini.
>> Semua hak.
Jadi penggoda cepat, terutamanya bagi orang-orang di antara kamu yang lelaki atau perempuan kipas
Apple semua perkara.
Apa yang saya digali daripada beberapa tahun kembali fail ini di sini, ilock.c, hanya untuk
jenis membuat lebih konkrit dan lebih kompleks beberapa C lebih asas
program kita telah menulis.
Jadi saya membuka fail ini, ilock.c.
Ia boleh didapati pada halaman kuliah untuk hari ini.
Pada sebelah kiri, anda akan melihat satu senarai panjang fungsi.
Jadi rakan-rakan yang menulis ini menulis banyak fungsi,
lebih daripada sekadar utama.
Dia menggunakan sekumpulan keseluruhan perpustakaan di sini.
Dan jika kita mula menatal, apakah ini sebenarnya adalah sangat
pertama, saya percaya, retak untuk iPhone asal.
Apabila anda mahu untuk jailbreak iPhone asal, yang bermaksud untether
daripada AT & T dan sebenarnya memasang perisian khas di atasnya dan melakukan perkara-perkara
bahawa Apple tidak mahu orang untuk melakukan -
baik, seseorang mengambil masa untuk memikirkan bagaimana mereka boleh mengeksploitasi
perisian kelemahan, kesilapan, pepijat dalam perisian Apple.
Dan demikianlah dilahirkan ilock.c.
Bahawa jika anda disusun pada komputer dan dipasang ia ke bawah yang
telah disambungkan ke komputer anda melalui, katakan, kabel USB, ini akan memberikan anda
pentadbiran atau akar keistimewaan pada iPhone anda dan membiarkan anda lakukan cukup banyak
apa sahaja yang anda mahu.
>> Dan sebagainya telah ada ini kucing yang menarik dan permainan tetikus antara Apple dan
seluruh dunia khususnya kerana mereka, seperti banyak syarikat, cuba untuk mengunci
barangan mereka ke bawah supaya anda hanya boleh lakukan dengan apa yang mereka ingin.
Tetapi terima kasih kepada orang-orang seperti ini dan pemahaman mereka tentang tahap rendah
butiran dan, dalam kes ini, pengaturcaraan C dan banyak membina biasa
bahawa kita telah mula bermain dengan, anda mampu untuk benar-benar memanfaatkan
perkakasan dalam cara yang anda lihat patut dan tidak semestinya beberapa entiti korporat.
Jadi, misalnya, saya tidak mempunyai idea apa yang semua ini adalah melakukan.
Tetapi GetVersion bunyi agak mudah.
Dan ia kelihatan seperti ini adalah fungsi yang orang ini menulis.
Ambil beberapa jenis integer sebagai hujah, tidak mengembalikan apa-apa, tetapi
nampaknya gelung dengan gelung sini dan jika keadaan itu, jika keadaan,
memecahkan, dan entah bagaimana berkaitan dengan nombor versi.
Jika kita tatal ke bawah -
walaupun banyak kata kunci ini akan menjadi baru, dan terdapat
banyak keseluruhan fungsi di sini tidak pernah kita lihat dan mungkin tidak pernah melihat lebih
kursus semester -
pada akhir hari, ia mengikut peraturan yang sama dan logik yang kita telah
bermain dengan setakat ini.
Jadi ini adalah terlalu lama untuk retak 3 iPhone anda atau 4s atau 5S tidak lama lagi, hari ini,
tetapi tahu bahawa ia semua amat berasal dari dunia ini yang kami telah
menyelam ke dalam.
>> Jadi mari kita lihat pada contoh yang sedikit lebih mudah.
Ini satu, hanya untuk mendapatkan panas dengan sintaks tertentu dan juga beberapa data lain
jenis yang kita telah bercakap tentang tetapi tidak benar-benar dilihat dalam C. Jadi ini adalah
file dipanggil positive1.c.
Dan setiap komen-komen di atas, ini hanya menuntut bahawa pengguna menyediakan
nombor positif.
Jadi ia adalah satu contoh gelung do-sementara, yang bagus untuk interaktif pengguna
program di mana anda perlu untuk memberitahu pengguna untuk melakukan sesuatu.
Dan jika mereka tidak bekerjasama, anda menjerit pada mereka atau menolak input mereka.
Kes di titik, saya akan melakukan garisan 19 melalui 24 begitu lama sebagai pengguna mempunyai
tidak memberikan saya nombor positif.
Sekarang ini terperinci di sini on line 18, kenapa Saya mengaku n atas ini keseluruhannya
membina menggelung berbanding sebelah kepada 22 barisan di mana saya
sebenarnya menjaga untuk mendapatkan n?
Yeah?
[Didengar]
>> DAVID J. MALAN: Ya, jadi isu ini skop.
Dan dalam jangka orang biasa, apakah skop merujuk kepada?
Yeah?
[Didengar]
DAVID J. MALAN: Bolehkah anda bercakap sedikit lebih kuat?
SPEAKER 1: Jika anda boleh mengakses pembolehubah tertentu.
DAVID J. MALAN: Perfect.
Di mana anda boleh mengakses pembolehubah tertentu.
Dan secara amnya, kemestian setakat ini telah bahawa skop sesetengah
pembolehubah ditakrifkan oleh pendakap kerinting yang paling terkini yang anda telah lihat.
Dan demikian dalam kes ini, jika saya membuat kesilapan mengisytiharkan n on line 22,
garis yang akan bekerja.
Saya akan mendapat int, dan saya akan meletakkan ia ke dalam n yang berubah-ubah di baris 22.
Tetapi yang baris kod sekarang akan tidak mempunyai idea apa yang saya bercakap tentang?
Jadi, 25, dan ia ternyata 24, juga, kerana dalam kes ini, ia jatuh di luar
pendakap kerinting.
Jadi hanya sedikit kacau ganggu tetapi sangat mudah diselesaikan dengan hanya mengisytiharkan
luar ubah fungsi sendiri.
>> Sekarang kita akan melihat lewat hari ini, anda boleh pergi satu langkah ke hadapan.
Dan anda juga boleh mendapatkan sedikit malas -
dan ini tidak akan disyorkan, secara umum -
tetapi anda juga boleh mendapatkan malas dan meletakkan pembolehubah global, jadi untuk bercakap, tidak
di dalam fungsi, tidak di dalam gelung, tetapi dalam fail itu sendiri, di luar
semua fungsi yang anda telah ditulis, seperti yang saya lakukan di sini on line 15.
Tetapi ini umumnya disukai.
Tetapi menyedari ini adalah kadang-kadang penyelesaian kepada masalah-masalah lain, kami akan
akhirnya lihat.
Jadi untuk sekarang, kita akan meninggalkan ia seperti ini.
Tetapi mari kita lihat jika kita boleh menulis semula ini hanya untuk mula menyatakan diri kita
sedikit berbeza.
>> Jadi program ini, hanya perlu jelas, adalah positive1.
Biar saya teruskan di sini dan dalam tetingkap terminal saya membuat positive1, Masukkan.
Menyusun, okay.
Saya akan untuk menjalankan positive1, tekan Enter.
Saya menuntut bahawa anda memberi saya integer positif.
Saya akan mengatakan -1.
Yang tidak bekerja.
0, 99, yang seolah-olah untuk bekerja.
Mungkin bukan ujian paling ketat.
Tetapi sekurang-kurangnya ia adalah cek kewarasan baik bahawa kita berada di landasan yang betul.
Jadi sekarang mari saya pergi ke hadapan dan membuka versi dua ini.
Dan apa yang berbeza sudah?
Ia melaksanakan perkara yang sama.
Tetapi apa yang melompat keluar sebagai jelas berbeza masa ini?
Ya, jadi ini bool hijau.
Gedit telah menekankan kata kunci hijau ini dikenali sebagai bool,
yang merupakan jenis data.
Ia tidak datang dibina dalam semua versi C. Anda perlu termasuk
perpustakaan khusus.
Dalam kes kami, saya termasuk perpustakaan CS50 supaya kita
mempunyai akses kepada bool.
Tetapi di baris 18, kita seolah-olah mempunyai nilai Boolean sini dipanggil bersyukur.
Jadi saya boleh dipanggil apa-apa ini.
Tetapi saya dipanggil ia bersyukur hanya untuk jenis menyampaikan beberapa makna semantik.
Jadi pada mulanya on line 18, saya nampaknya tidak bersyukur kerana
Nilai bersyukur Boolean dimulakan palsu dalam 18 baris.
Dan kemudian ia seolah-olah apa yang saya telah dilakukan di sini dalam barisan 21 melalui 23 saya baru sahaja
jenis ditulis semula logik saya.
Jadi tidak berfungsi berbeza.
Tetapi dalam 22 baris sekarang, saya memeriksa jika int pengguna telah disediakan adalah lebih besar daripada
0, maka saya hanya menukar nilai berterima kasih kepada true.
Dan mengapa saya berbuat demikian?
Kerana di baris 25, nampaknya, saya akan untuk memeriksa keadaan.
Adakah gelung ini manakala bersyukur adalah palsu.
>> Jadi saya mencadangkan ini sebagai alternatif kepada satu versi kerana ia sekurang-kurangnya
sedikit lebih intuitif, mungkin.
Ia adalah sedikit lebih mendalam dalam Bahasa Inggeris.
Jadi melakukan perkara-perkara berikut semasa anda tidak bersyukur atau sementara bersyukur adalah palsu.
Dan kali ini, terlalu, saya nampaknya tidak ingati apa yang pengguna ditaip
dalam notis kerana tidak ada n ubah.
Jadi sebenarnya, I -
sedikit pembohongan di sana.
Fungsi, program ini adalah sedikit berbeza sekali kita sampai ke bahagian bawah
ia kerana saya tidak mengingati apa yang n.
Tetapi saya mahu untuk menunjukkan di sini juga bahawa walaupun kita telah melihat GetInt dan
GetString sedang digunakan pada sebelah kanan tanda yang sama setakat ini supaya
kita ingat nilai teknikalnya, yang tidak tegas perlu.
Jika atas apa jua sebab anda hanya tidak peduli untuk menyimpan nilai, anda hanya mahu
untuk memeriksa nilai, notis bahawa kita hanya boleh menulis ini sebagai terbuka GetInt
paren, paren rapat.
Bahawa fungsi akan kembali nilai, seperti yang kita telah berkata.
Ia akan memberi anda kembali int.
Dan jadi jika anda mental memikirkan perkara ini berlaku, apabila saya menaip dalam 99, GetInt
mengembalikan bilangan 99.
Dan sebagainya konsep, ia seolah-olah kod saya sebenarnya ini.
Jadi, jika 99 memang lebih besar daripada 0, maka bersyukur menjadi benar.
Kemudian talian 25 sedar aduh, kita dilakukan kerana saya kini bersyukur.
Dan di baris 26, kita hanya mengatakan, terima kasih untuk integer positif, apa sahaja yang ia
kebetulan berada.
>> Sekarang mari kita buat gula sintaktik sedikit di sini, jadi untuk bercakap.
Mari kita lihat jika kita boleh membersihkan sehingga 25 ini selaras dengan varians ini ketiga dan terakhir
dalam positive3.
Jadi notis satunya perbezaan sekarang ialah apa baris kod?
Ya, jadi 25.
Dan kita telah tidak benar-benar melihat silap mata ini hanya lagi.
Tetapi kita tidak melihat tanda seru pada hari Isnin, yang menandakan apa?
Jadi tidak, atau penafian.
Jadi mengambil nilai Boolean dan flip nilainya.
Benar menjadi palsu.
Palsu menjadi benar.
Jadi ini, saya akan mencadangkan, adalah lebih sedikit lebih intuitif cara
menulis kod kerana saya masih memulakan berterima kasih kepada palsu.
Saya masih melakukan yang berikut.
Saya menetapkan berterima kasih kepada true apabila tiba masanya.
Tetapi kini anda boleh benar-benar hanya menterjemahkan kod ini secara lisan kiri ke kanan,
manakala tidak bersyukur.
Kerana bang, atau tanda seru, menandakan tanggapan tidak, jadi sementara
tidak bersyukur.
>> Jadi sekali lagi, kita tidak memperkenalkan sebarang konsep baru per se.
Kami telah berbincang tentang Booleans kembali apabila kita bermain dengan Scratch.
Tetapi sedar sekarang kita hanya boleh mula menulis kod kami di
banyak cara yang berbeza.
Jadi, terutamanya dalam pset1, jika anda jenis berjuang untuk memikirkan cara untuk
menulis beberapa program, kemungkinan yang anda berada dalam nasib kerana ada akan menjadi apa-apa
bilangan penyelesaian yang anda boleh berlaku ke atas.
Sebagai contoh, ini adalah hanya tiga bagi walaupun yang paling mudah program.
Semua hak.
Dan sekarang ingat pada hari Isnin, kami meninggalkan pada nota ini dengan nilai-nilai pulangan.
Jadi untuk kali pertama, kita menulis satu program yang tidak hanya mempunyai utama,
ia juga mempunyai fungsi tersendiri adat yang saya tulis di sini.
Jadi dalam 31 line melalui 34, saya telah melaksanakan fungsi kiub.
Ia tidak kompleks.
Ia hanya satu kali kali, dalam kes ini.
Tetapi apa yang penting tentang adalah bahawa saya mengambil input dalam bentuk dan
Saya kembali output dalam bentuk kali kali.
>> Jadi sekarang saya mempunyai keupayaan, sama seperti saya digunakan untuk dengan printf sahaja, untuk memanggil
fungsi ini dengan memanggil fungsi kiub.
Dan fungsi kiub mengambil beberapa input.
Dan fungsi kiub kembali beberapa output.
Dan begitu sebaliknya, printf hanya melakukan sesuatu.
Ia tidak kembali apa-apa yang kita mengambil berat tentang - walaupun, sebagai
diketepikan, ia tidak mengembalikan nilai.
Anda hanya umumnya mengabaikan ia.
Printf hanya melakukan sesuatu.
Ia mempunyai kesan sampingan percetakan skrin.
Sebaliknya di sini, kita mempunyai fungsi kiub, yang
sebenarnya mengembalikan sesuatu.
>> Jadi ini adalah umumnya -
bagi mereka yang biasa dengan ini, ia adalah satu idea yang agak mudah.
Tetapi bagi mereka yang kurang biasa dengan idea ini lulus dalam input dan mendapat
output belakang, mari kita cuba hanya sesuatu yang mudah super.
Adakah sesiapa yang selesa datang di atas pentas secara ringkas?
Anda perlu selesa dengan kamera pada anda, serta.
Yeah.
Okay, apa nama anda?
KEN: Ken.
DAVID J. MALAN: Ken.
Baiklah, Ken.
Datang di atas.
Jadi Ken akan menjadi fungsi kejayaannya di sini.
Dan mari kita pergi ke hadapan dan melakukan ini.
Mari kita mendapat mewah sedikit.
Nice to meet you.
Selamat datang ke peringkat pusat.
Semua hak.
Mari kita memukul butang ini di sini.
Semua hak.
Jadi di sini anda mempunyai papan hitam yang moden.
Dan apa yang saya adalah fungsi utama, misalnya.
Dan saya tidak mempunyai iPad dalam tangan saya.
Saya tidak benar-benar ingat bagaimana - baik, sebenarnya, tidak boleh mengatakan bahawa.
Saya tidak benar-benar mempunyai tulisan tangan yang baik.
Dan sebagainya Oleh itu, saya mahu anda untuk mencetak sesuatu pada skrin bagi saya.
>> Jadi saya menjadi program utama.
Dan saya akan mempunyai anda katakan ini dengan menulis ia dalam calar ayam saya dan
maka lulus anda input.
Jadi bodoh walaupun latihan ini adalah, tanggapan fungsi dan memanggil
fungsi dan mengembalikan fungsi benar-benar bisul turun ini.
Saya utama.
Saya baru sahaja ditulis printf ("sesuatu") pada skrin.
Saya menjalankan program ini.
Dan secepat printf mendapat dipanggil, ia mengambil satu hujah - atau satu parameter,
kadang-kadang -
antara petikan berganda.
Berikut adalah hujah itu.
Saya lulus ia ke Ken.
Sekarang dia adalah sebuah kotak hitam yang ditulis beberapa beberapa tahun yang lalu yang nampaknya
hanya tahu bagaimana untuk mencetak perkara pada skrin.
>> Jadi, melaksanakan.
Itu bukan buruk.
Jadi, sangat baik.
Jadi sekarang Ken dilakukan melaksanakan.
Adakah dia perlu menyerahkan saya kembali apa-apa?
Jadi tidak bahawa kita telah melihat setakat ini.
Sekali lagi, printf tidak sebenarnya mengembalikan nombor.
Tetapi kita akan mengabaikan bahawa buat masa sekarang kerana kita tidak pernah digunakan.
Jadi itulah untuk Ken.
Dan jadi sekarang utama datang kembali untuk melaksanakan -
utama mengambil alih kawalan program lagi kerana bahawa baris kod,
printf, dilakukan melaksanakan.
Dan kita pergi tentang cara melaksanakan apa garisan lain terdapat.
>> Semua hak.
Jadi sekarang mari kita cuba satu contoh yang sedikit berbeza.
Dan kali ini di sini, mari kita mula-mula mengosongkan skrin di sini.
Dan kali ini, kita akan melakukan fungsi cubing.
Tetapi kali ini, saya menjangkakan nilai output.
Jadi mari kita pergi ke hadapan dan melakukan ini.
Jadi sekarang saya mempunyai satu baris kod yang mengatakan x kiub = (x).
Jadi sebenarnya let's -
baris kod, ingat, kelihatan seperti ini.
x kiub = (x).
Jadi bagaimana ini akan bekerja?
Jadi mari kita pergi ke hadapan dan memberikan anda skrin putih lagi.
Dan saya akan menulis sekarang turun nilai x, yang pada masa ini dalam
masa berlaku untuk, katakan, 2, untuk memastikan ia mudah.
Jadi saya telah diturunkan di atas sekeping kertas nilai 2,
yang merupakan nilai x saya.
Saya menyerahkannya kepada Ken.
KEN: Dan saya hanya menulis jawapannya?
DAVID J. MALAN: Ya, mari kita hanya menulis jawapannya.
Okay.
Dan kini dia telah kembali saya sesuatu.
Jadi -
sempurna.
Nice segue.
>> Jadi sekarang dia tangan saya kembali nilai 8, dalam kes ini.
Dan apa yang saya lakukan dengan ia?
Well, sebenarnya, mari kita lihat.
Dapatkan hak ini.
Apa yang saya akan lakukan dengan ia?
Sekarang saya akan mengambil nilai ini dan sebenarnya menyimpan ia dalam orang-orang
bit sama dalam ingatan.
Tetapi notis, aku jenis berjuang di sini.
Saya sedikit keliru kerana di mana saya sebenarnya menulis nilai x?
Kerana apa yang saya baru sahaja dilakukan secara fizikal tangan Ken sehelai kertas
yang mempunyai nilai 2, yang x.
Dan sesungguhnya, itulah sebenarnya apa yang berlaku.
Jadi ternyata bahawa apabila anda memanggil fungsi, dan anda lulus dalam hujah
seperti "hello dunia" atau anda lulus dalam hujah seperti 2, secara amnya, anda
lulus dalam salinan hujah itu.
Dan sebagainya hanya kerana saya menulis nombor 2 di sini dan menyerahkan kepada Ken; yang mesti
bermakna bahawa saya masih ada satu salinan daripada 2 nilai tempat.
Kerana sesungguhnya, sekarang bahawa saya telah mendapat kembali nilai 8, saya perlu kembali dalam
RAM dan sebenarnya menulis 8 di mana saya pernah nombor 2.
>> Jadi visual ingat ini tanggapan lulus dalam literal
salinan nilai.
Ken melakukan perkara itu, tangan saya kembali sesuatu - dalam kes ini,
nilai seperti 8.
Dan kemudian saya perlu melakukan sesuatu dengan nilai yang jika saya
mahu memastikan ia sekitar.
Jadi semua ini akan semua terlalu biasa tidak lama lagi.
Thank you so much untuk demo ini di sini, Ken.
Semua hak.
Sangat baik dilakukan.
Jadi mari kita lihat bagaimana yang akhirnya berkaitan dengan beberapa fungsi
memanggil yang kita telah lakukan di sini.
Jadi biarlah saya pergi ke hadapan dan membawa kita kembali kepada contoh cubing di sini.
Dan melihat bahawa jika kita mahu sebenarnya mula mengambil ini dengan lebih lanjut, kita akan
perlu sedar hakikat bahawa nombor x yang diluluskan dalam
di sini adalah berbeza daripada apa yang sebenarnya sedang berpindah ke fungsi.
Jadi sekali lagi, ini diluluskan oleh salinan akan menjadi agak
yg dalam hanya seketika.
>> Jadi mari kita melihat sesuatu yang tidak cukup berfungsi dengan betul lagi.
Saya akan pergi ke hadapan dan membuka contoh buggy ketiga, yang
tercacat oleh alam semula jadi.
Dan ia dipanggil buggy3, dan ia melaksanakan fungsi bertukar-tukar.
Jadi di sini kita mempunyai fungsi utama yang telah x dan y sewenang-wenangnya dimulakan untuk
1 dan 2, masing-masing.
Kita boleh menggunakan GetInt, tetapi kita hanya perlu senaman mudah.
Jadi ia sukar dikodkan sebagai 1 dan 2.
Dalam baris 21 dan 22, kita nampaknya mencetak x dan y, satu per baris.
Kemudian, pada 23 baris, saya mendakwa saya bertukar-tukar nilai-nilai ini, dot, dot, dot.
Saya nampaknya memanggil fungsi dalam 24 baris dipanggil swap
yang mengambil dua hujah.
Ia adalah benar-benar legit untuk fungsi untuk mengambil dua hujah.
Kami telah melihat printf melakukannya sudah.
Jadi swap nampaknya mengambil x dan y.
Dan seperti namanya, saya akan berharap bahawa ia akan
menukar kedua-dua nilai.
Jadi maka saya menuntut on line 25, bertukar.
Dan saya mencetak semula x dan y di bawah andaian bahawa
Sesungguhnya mereka telah telah bertukar.
Tetapi jika saya benar-benar menjalankan program ini -
izinkan saya membuka tetingkap terminal.
Mari saya membuat buggy3.
Seperti namanya, ini tidak akan berakhir dengan baik.
Kerana apabila saya tekan Enter, notis bahawa x ialah 1.
y ialah 2.
Dan lagi pada akhir program, mereka masih, pada hakikatnya, yang sama.
>> Jadi berdasarkan demonstrasi tadi dengan Ken, apa yang sebenarnya berlaku?
Nah, mari kita menyelam ke dalam fungsi swap ini.
Ia adalah super pendek.
Ia hanya beberapa baris kod lama.
Tetapi apa masalah asas yang berdasarkan cerita yang mudah diberitahu
di sini dengan Ken?
Mengapa swap rosak?
[Didengar]
Tepat sekali.
Jadi kita sedang menyimpan salinan, bukan pembolehubah sendiri.
Dalam erti kata lain, swap nampaknya mengambil dua hujah, int.
Dan ia sewenang-wenangnya dipanggil a dan b.
Dan di sini, saya telah lulus dalam x dan y, yang masing-masing 1 dan 2.
Tetapi saya tidak benar-benar lulus dalam x.
Saya tidak benar-benar lulus dalam y.
Saya lulus satu salinan x dan salinan y.
Ia seperti hampir seolah-olah anda disalin dan ditampal ke dalam menukar nilai-nilai yang
anda mahu ia untuk benar-benar memanipulasi.
Jadi, jika itulah kes, apabila saya, program, mula melaksanakan
line 35, kemudian 36 -
apabila saya sampai ke garis 37, pada ketika ini dalam cerita, apakah nilai?
Pada ketika ini dalam cerita, line 37, apakah nilai pada ketika ini?
Jadi ia hanya perlu 1.
Betul?
Kerana x telah diluluskan pada sebagai hujah pertama.
Dan fungsi ini hanya sewenang-wenangnya memanggil hujah pertama, a.
Begitu juga adalah y, hujah kedua.
Dan ia hanya sewenang-wenangnya memanggil b Hujah kedua.
>> Sekarang dikotomi ini sebenarnya agak hanya dijelaskan.
Fikirkanlah.
Tiada seorang pun daripada kami telah bertemu dengan orang yang menulis printf.
Jadi, sudah tentu, dia tidak mempunyai idea apa pembolehubah kami 30 tahun kemudian akan
untuk dipanggil.
Jadi perlu ada perbezaan antara apa yang anda memanggil pembolehubah dalam
fungsi yang anda menulis dan apa yang anda memanggil pembolehubah dalam fungsi anda
memanggil atau menggunakan.
Jadi dalam erti kata lain, saya telah menulis pembolehubah saya sebagai x dan y.
Tetapi jika orang lain telah menulis fungsi swap, dia pasti
tidak akan tahu apa pembolehubah saya akan dipanggil.
Jadi sedar bahawa ini adalah mengapa anda perlu berbelah bahagi ini nama.
Secara teknikalnya, saya boleh melakukan ini secara kebetulan.
Tetapi mereka masih akan lulus sebagai salinan.
Ia hanya akan menjadi satu kebetulan tulen estetik jika orang itu yang menulis
swap telah menggunakan nama yang sama.
>> Semua hak.
Jadi pada ketika ini dalam cerita, line 37, adalah 1.
b ialah 2.
Dan sekarang saya meneruskan untuk menukar mereka.
Well, pertama sekali, izinkan saya sebenarnya melakukan ini lebih hanya.
Saya tidak tahu apa yang mereka tiga baris kod telah lakukan.
Biarkan saya hanya melakukan ini.
b mendapat.
mendapat b.
Selesai.
Mengapa ini pecah, secara logiknya?
Ia adalah jenis perkara yang intuitif, bukan?
Jadi menjadi b.
Dan b menjadi.
Tetapi masalahnya ialah bahawa secepat line 37 melaksanakan, apa
nilai a dan b?
Yang sama, 1.
Kerana anda telah clobbered, jadi untuk bercakap, anda telah mengubah b menyamai.
Jadi, apabila talian 37 dilaksanakan, itulah besar.
Anda kini mempunyai dua salinan nombor 1 di dalam fungsi ini.
Jadi maka apabila kamu katakan di baris 38, mendapat b, baik, anda jenis diskru.
Kerana anda hanya memberikan 1-1.
Anda telah jenis kehilangan nilai yang anda mengambil berat tentang.
>> Jadi, dalam versi asal ini, notis apa yang saya lakukan.
Saya bukannya mempunyai barisan ketiga kod yang kelihatan seperti ini.
Saya mengisytiharkan pembolehubah sementara - tmp adalah nama yang sangat biasa
bagi pembolehubah sementara.
Ia adalah int kerana ia mempunyai untuk memadankan apa yang saya mahu untuk membuat salinan.
Saya menyimpan satu salinan dalam satu tmp. Jadi, apabila talian 37 telah dilaksanakan,
nilai a adalah -
kewarasan cepat daftar
1.
Nilai b ialah 2.
Dan nilai tmp adalah juga 1.
Jadi sekarang saya melaksanakan garis 38.
Jadi, sekali line 38 melaksanakan, mengambil nilai b.
Dan b ialah 2.
Jadi kini 2.
Jadi pada ketika ini dalam cerita, adalah 2, b 2,
dan tmp adalah 1.
Jadi sekarang secara logik, kita boleh nilai hanya tmp mencebur ke dalam b.
Dan kami sudah selesai.
>> Jadi kita telah menyelesaikan masalah itu.
Malangnya, apabila saya menjalankan program ini di dalam borang ini, ia tidak sebenarnya swap
apa-apa nilai.
Tetapi untuk menjadi jelas, mengapa?
Saya tetap masalah logik daripada hanya seketika lalu.
Tetapi sekali lagi, jika saya menjalankan program ini, x dan y kekal tidak berubah menjelang akhir
pelaksanaan program ini.
[Didengar]
DAVID J. MALAN: Jadi kita telah tidak dikembalikan apa-apa.
Jadi yang benar.
, Tetapi ternyata ada sedikit masalah di sini kerana setakat
satunya perkara yang kita telah dapat kembali adalah satu perkara.
Dan ini adalah satu sekatan C. Anda hanya boleh kembali benar-benar satu nilai,
di mana, saya jenis terperangkap di sini
kerana saya dapat kembali nilai baru x atau saya boleh memulangkan
nilai baru y.
Tetapi saya mahu kedua-dua belakang.
Jadi kembali tidak penyelesaian yang mudah di sini.
Tetapi masalah yang asasnya ialah, mengapa?
Apa yang telah kita sebenarnya bertukar?
a dan b.
Tetapi a dan b adalah salinan x dan y, yang bermakna kita hanya melakukan semua ini
bekerja - kita hanya dibelanjakan seperti tiga minit bercakap mengenai swap
fungsi dan ketiga-tiga pembolehubah ini.
Dan yang hebat, sempurna betul dalam pengasingan.
Tetapi dan skop b sahaja dalam ayat-ayat ini di sini.
Jadi, seperti gelung, jika anda mengisytiharkan integer i bahagian dalam untuk
gelung - sama, jika anda sedang mengisytiharkan a dan b dalam sesuatu fungsi yang
anda telah ditulis, mereka hanya dalam sah fungsi itu.
Yang bermaksud secepat swap dilakukan melaksanakan dan kita pergi dari 24 baris kepada
line 25, x dan y tidak pernah berubah sama sekali.
Anda hanya membazirkan banyak keseluruhan masa bertukar-tukar salinan pembolehubah.
>> Jadi ternyata bahawa penyelesaian untuk ini sebenarnya tidak jelas.
Ia tidak cukup mencukupi untuk mengembalikan nilai kerana kita boleh
hanya memulangkan satu nilai.
Dan saya benar-benar mahu untuk menukar kedua-dua x dan y pada masa yang sama.
Jadi, kita akan kembali kepada ini.
Tetapi untuk sekarang, menyedari bahawa isu asasnya berasal dari fakta
a dan b adalah salinan.
Dan mereka adalah dalam skop mereka sendiri.
Nah, mari kita cuba untuk menyelesaikan masalah ini dalam beberapa cara.
Biar saya sebenarnya tatal kembali ke sini dan membuka, katakan, varian keempat
ini, buggy4.
Dan apa tentang perkara ini?
Ini adalah masalah yang serupa tetapi mudah untuk melihat sebelum kita mengambil menikam di
menghuraikannya.
Program ini dipanggil kenaikan.
Dan ia nampaknya initializes integer x 1 di baris 18.
Saya kemudian mendakwa x ialah 1.
Saya kemudian tuntutan incrementing, dot, dot, dot.
Saya kemudian memanggil kenaikan.
Tetapi kemudian dalam baris 22 dan 23, saya menuntut ia telah incremented.
Saya mendakwa x ialah kini apa pun, 2 mungkin.
>> Tetapi program ini adalah kereta.
Apa masalah?
Yeah?
[Didengar]
DAVID J. MALAN: Tepat sekali.
Jadi x telah menyatakan dengan jelas on line 18.
Itu adalah di dalam pendakap kerinting utama.
Jadi jawapan yang mudah di sini adalah bahawa, baik, x wujud di sini.
Ia tidak wujud dalam 32 baris.
Jadi program ini sebenarnya bahkan tidak akan menyusun.
Pengkompil, apabila saya cuba menyusun kod ini, akan menjerit pada saya
tentang beberapa pengecam yang tidak diisytiharkan atau sesuatu yang bermaksud sedemikian.
Malah, mari kita cuba.
Ini adalah membuat buggy4.
Sana ia.
Penggunaan x pengecam tidak diisytiharkan di baris 32.
Dan sebenarnya, mari kita menjadi lebih jelas di sini hari ini supaya ini adalah berguna dalam
waktu pejabat dan di rumah.
Perhatikan bahawa ia adalah sedikit cryptically ditulis.
Tetapi hakikat bahawa mempunyai dilafaz menjerit pada kami, berkata
buggy4.c: 32:5, sebenarnya adalah berguna.
Ia bermakna bahawa kesilapan adalah pada 32 baris pada kedudukan watak lima.
Jadi satu, dua, tiga, empat, lima.
Itulah, sebenarnya, mana masalah ini.
Dan juga perlu diingat pada waktu pejabat dan di rumah, saya bernasib baik di sini.
Saya mempunyai satu kesilapan.
Ia akan menjadi agak mudah untuk menetapkan.
Tetapi jika anda mendapat skrin sepenuh mesej ralat yang hangat, sekali lagi,
menyedari bahawa satu panhandle hanya mungkin gejala
orang-orang yang teratas.
Jadi sentiasa mengejar turun bug anda dari atas ke bawah.
Kerana hanya mungkin terdapat kesan rantaian daisy yang mencadangkan anda
mempunyai cara yang lebih banyak masalah daripada anda sebenarnya lakukan.
>> Jadi bagaimana kita boleh memperbaiki ini jika matlamat saya adalah untuk kenaikan x?
Apa itu?
Okay.
Jadi kita boleh membuat x global.
Mari kita mengambil jalan pintas bahawa saya memberi amaran tentang awal.
Tetapi palang pintu, kita hanya perlu cepat.
Jadi mari kita hanya mengatakan x int di sini.
Itu membuatkan x global.
Jadi sekarang utama mempunyai akses kepada maklumat itu.
Dan kenaikan mempunyai akses kepadanya.
Dan jadi biarlah saya pergi ke hadapan dan menyusun ini sekarang.
Buat buggy4, Enter.
Nampaknya untuk menyusun sekarang.
Mari kita berjalan buggy4, dan ia seolah-olah benar-benar bekerja.
Sekarang ini adalah salah satu daripada perkara-perkara ini -
lakukan seperti yang saya katakan, tidak seperti yang saya lakukan, kerana saya baru sahaja dilakukan di sini.
Kerana secara umum, program kami akan mendapat lebih menarik dan
lebih lama daripada ini.
Dan jika penyelesaian untuk masalah hidup hanya ah, meletakkan semua
pembolehubah di atas fail anda, sangat cepat melakukan program mendapat
horrifically sukar untuk menguruskan.
Ia mendapat sukar untuk berfikir sehingga nama-nama pembolehubah baru.
Ia menjadi lebih sukar untuk memahami apa jenis pemboleh ubah adalah melakukan apa.
>> Dan sebagainya secara umum, ini tidak merupakan penyelesaian yang baik.
Jadi mari kita buat ini lebih baik.
Kita tidak mahu menggunakan pembolehubah global di sini.
Saya tidak mahu kenaikan x.
Jadi saya dapat jelas -
pada akhir hari, ia adalah jenis cerita bodoh kerana kita hanya melakukan ini.
Tetapi jika saya tidak tahu tentang pengendali itu, atau saya tidak dibenarkan untuk
mengubahnya utama itu sendiri, bagaimana lagi saya boleh melaksanakan Ken di sini, ini
masa tidak kiub tetapi untuk kenaikan?
Bagaimana saya boleh mengubah perkara ini di sini?
Yeah.
[Didengar]
DAVID J. MALAN: Okay, baik.
Jadi mengapa saya tidak lulus dalam x?
Dan kemudian bukannya kembali, mengapa tidak saya hanya melakukan pulangan x + 1?
Kini, beberapa lagi perkara perlu mengubah di sini.
Saya pada landasan yang betul.
Apa lagi yang saya perlukan untuk tweak?
Orang lain.
Yeah?
[Didengar]
DAVID J. MALAN: Saya perlu untuk menukar jenis pulangan kenaikan
kerana ia tidak membatalkan.
Terbatal bermakna tiada dipulangkan.
Tetapi jelas, kini ia adalah.
Jadi ini keperluan untuk menukar int untuk menjadi konsisten dengan apa jua
Saya sebenarnya kembali.
>> Kini sesuatu yang lain masih kereta di sini.
Yeah?
[Didengar]
DAVID J. MALAN: Jadi saya perlu kenaikan x?
[Didengar]
DAVID J. MALAN: Ah, jadi saya perlu untuk lulus x.
Jadi saya perlu melakukan ini di sini.
Jadi prototaip, saya perlu menukar ini di sini.
Jadi ini telah menjadi int.
Ini telah menjadi -
hmm.
Saya sebenarnya mempunyai bug di sini.
Mari kita menetapkan ini yang pertama.
Apakah yang perlu ini sebenarnya?
Jadi ia mendapat untuk menjadi sesuatu int.
Ia boleh x.
Tetapi terus-terang, jika anda mula memanggil semua x pembolehubah anda, ia akan mendapat
kurang dan kurang jelas yang mana.
Jadi mari kita hanya sewenang-wenangnya memilih konvensyen penamaan yang berlainan bagi saya
pembantu fungsi, fungsi Saya menulis.
Kami akan memanggilnya.
Atau kita boleh memanggil ia - mari kita memanggilnya even_number untuk menjadi lebih jelas.
Jadi maka saya perlu kembali apa jua nombor campur 1.
Dan kini saya mempunyai untuk menukar satu perkara lain sehingga di sini dan satu
benda lain di sini.
Apa yang saya perlu untuk menukar pada 21 baris pertama?
Saya perlu sediakan x.
Jadi saya tidak boleh hanya memanggil x kenaikan.
Saya perlu ingat jawapannya dengan menukar nilai x
tangan sebelah kiri.
Dan walaupun x kini di kiri dan kanan, yang benar-benar halus kerana
sebelah kanan mendapat dilaksanakan terlebih dahulu kemudian mendapat plopped ke kiri
perkara tangan, x dalam kes ini.
Dan kemudian akhir sekali, ini adalah menetapkan yang mudah sekarang.
Ini hanya perlu menandingi apa yang turun di bawah.
Nombor Int.
>> Semua hak.
Jadi sekumpulan keseluruhan perubahan untuk fungsi benar-benar bodoh.
Tetapi wakil-wakil daripada perkara-perkara yang kita semakin akan mahu lakukan.
Supaya membuat buggy4.
Saya diskrukan sehingga suatu tempat.
Oh Tuhan saya.
Lima kesilapan dalam, seperti, program garis enam.
Jadi apa yang salah on line 18, watak 5?
Semua hak.
Jadi saya perlu mengisytiharkan int ini.
Semua hak.
Jadi mari kita lihat, sekumpulan keseluruhan kesilapan lain.
Oh tuhan saya.
19, 18, 21.
Tetapi sekali lagi, mari kita hanya mengosongkan skrin -
L Kawalan sini - dan dikendalikan semula dilafaz.
Jadi lima masalah sebenarnya cuma satu.
Jadi sekarang mari kita menjalankan buggy4, Enter.
Huh.
x telah incremented betul.
>> Semua hak.
Sebarang pertanyaan mengenai bagaimana untuk menokokkan nombor?
Yeah?
SPEAKER 2: Mengapa ia bahawa anda hanya boleh menukar x kepada bilangan pembolehubah
menamakan dan ia akan tahu apa yang anda maksudkan?
DAVID J. MALAN: Baik soalan.
Bagaimana ia bahawa saya hanya boleh menukar x ke nombor dan program akan tahu
serta-merta?
Jadi sekali lagi, fikirkan ia sebagai abstraksi ini.
Jadi jika saya utama dan Ken adalah tambahan, terus-terang, saya tidak peduli
apa Ken panggilan iPad beliau.
Saya tidak peduli apa yang dia memanggil apa-apa yang mempunyai kaitan dengan pelaksanaan
fungsi ini.
Jadi ini adalah terperinci pelaksanaan yang saya, utama, tidak
perlu mengambil berat tentang.
Dan sebagainya hanya menukarkan ia konsisten dalam fungsi, nombor sini
dan nombor di sini, adalah semua ia mengambil masa begitu lama seperti yang saya susun semula.
Ia adalah jenis suka jika anda berfikir tentang - ramai di antara kita, anda dengan pemandu
lesen yang telah didorong, atau jika anda telah pun dipandu dalam kereta -
kebanyakan kita tidak mempunyai idea bagaimana sebuah kereta berfungsi di bawah hood.
Dan benar-benar, jika anda membuka hud, kebanyakan kita - termasuk saya sendiri -
tidak akan benar-benar tahu apa yang kita sedang melihat.
Jenis seperti anda mungkin merasakan dengan barangan seperti hak ini sekarang.
Tetapi kita tidak benar-benar perlu untuk menjaga bagaimana kereta berfungsi.
Kami tidak mempunyai untuk menjaga apa yang semua rod dan omboh dan kabel di dalam
kereta sebenarnya lakukan.
>> Jadi sesuatu seperti apa yang anda memanggil omboh tidak kira
di sini dalam kes ini.
Idea yang sama.
Yeah?
[Didengar]
DAVID J. MALAN: Jika terdapat lebih banyak kegunaan masa xa ubah yang lalu,
anda, pengaturcara, akan mempunyai untuk menukar mereka di mana-mana.
Atau anda benar-benar boleh melakukan File, Menu, dan kemudian Cari / Ganti,
sesuatu seperti itu.
Tetapi anda akan mempunyai untuk membuat perubahan-perubahan sendiri.
Anda perlu konsisten.
[Didengar]
DAVID J. MALAN: Sesuatu perintah tertentu seperti sini?
Jika ini adalah int nombor lain?
Yeah.
Jadi perintah perkara yang apabila anda memanggil fungsi.
Jadi, jika saya telah memanggil kenaikan di sini dengan sesuatu koma sesuatu,
ada pemetaan langsung.
Pembolehubah pertama, apa sahaja yang ia dipanggil, dibuat salinan yang pertama
hujah di sini.
Maaf, ini tidak sepatutnya menjadi sebuah kurungan.
Hujah barisan kedua dengan satu kedua.
>> Jadi perintah, ya, perkara-perkara.
Semua hak.
Maaf saya mengambil satu cara yang lama untuk sampai ke sana.
Soalan-soalan lain?
Semua hak.
Jadi mari kita lihat jika kita tidak dapat gambaran apa yang sebenarnya berlaku di
di sini di bawah hood, jadi untuk bercakap.
Jadi ini adalah sebuah segiempat tepat yang mungkin mewakili memori komputer anda.
Jadi, walaupun anda tidak mempunyai idea bagaimana memori berfungsi atau bagaimana kerja-kerja RAM, sekurang-kurangnya
menganggap bahawa anda mempunyai tandan ia hari ini.
Anda telah mendapat megabait ia.
Anda telah mendapat gigabait.
Dan kita tahu dari sifar minggu bahawa bait hanya apa?
8 bit.
Betul, jadi 8 sifar dan orang-orang.
Jadi, jika komputer anda mempunyai persembahan RAM, dua gig RAM pada hari ini, anda mempunyai
bilion atau 2 bilion bait memori, atau kira-kira 8 bilion atau 16 bilion
bit, di dalam komputer anda.
Sekarang tidak seperti sedikit Kusut Willy contoh, ia bukan zarah magnet
biasanya lagi.
Semakin dalam komputer riba sekurang-kurangnya, ia adalah pemacu keadaan pepejal, SSDs, yang
hanya ada bahagian yang bergerak.
Ia adalah semua elektronik.
Ia berasaskan semua elektrik.
Jadi berfikir, walaupun, segi empat ini sebagai hanya mewakili satu atau dua
gigabait memori yang anda ada.
>> Jadi ia adalah sebahagian memori.
Sekarang dunia sains komputer mempunyai jenis ketulan dibahagikan kira
ingatan untuk melakukan perkara-perkara yang berbeza.
Jadi, misalnya, jika ini adalah RAM komputer anda - seperti yang dicadangkan oleh
segiempat tepat sana - ternyata bahawa oleh konvensyen, di atas RAM anda, jadi
untuk bercakap, secara umumnya apa yang dipanggil segmen teks.
Mereka adalah sifar dan orang-orang yang anda telah kumpulkan.
Jadi, apabila kita telah melihat di bawah hood apa a.out, semua
sifar dan orang -
apabila anda menjalankan program, mereka sifar dan orang-orang yang dimuatkan dari keras anda
memandu ke dalam sesuatu yang dinamakan RAM.
Dan dalam RAM, mereka meletakkan di atas.
Sekarang Sementara itu, anda mempunyai perkara-perkara lain.
Dimulakan data, data tidak diisytiharkan.
Kedua-dua swaths memori merujuk kepada pembolehubah global, yang
anda tidak sering menggunakan.
Tetapi kadang-kadang jika anda lakukan, mereka akhirnya di sana juga.
Kemudian terdapat beberapa barangan lain.
Persekitaran pembolehubah, yang kita tidak akan banyak menghabiskan masa di.
Tetapi kemudian dua perkara penting yang akan datang kembali sepanjang
semester, timbunan dan longgokan.
>> Jadi kebanyakan memori komputer anda dikhaskan apabila menjalankan satu program untuk
sesuatu yang dipanggil timbunan dan sesuatu yang dipanggil timbunan itu.
Dan kita tidak akan bercakap mengenai timbunan itu hari ini, tetapi kita akan
bercakap tentang timbunan.
Dan timbunan bertujuan untuk nampak visual seperti dewan makan
dulang hidangan di Mather House, atau di mana sahaja anda berada, di mana
kakitangan dewan makan membersihkan mereka setiap hari.
Mereka timbunan mereka dari tingkat atas sehingga.
Dan begitu juga dalam ingatan, terdapat idea ini meletakkan sesuatu pada
timbunan, meletakkan sesuatu pada timbunan, meletakkan sesuatu pada timbunan.
Dan apa yang kita maksudkan dengan ini?
Nah, mari kita zoom di atas hanya separuh lebih rendah daripada gambar ini, komputer anda
RAM, untuk mencadangkan perkara-perkara berikut.
Ia ternyata bahawa apabila anda menjalankan program seperti a.out atau hello, apa jua
program ini adalah bahawa anda telah ditulis,
lagi, orang-orang sifar dan orang-orang yang dimuatkan dari cakera keras anda - yang merupakan
penyimpanan jangka panjang, kekal di sana walaupun apabila anda tarik palamnya -
dimuatkan ke dalam RAM.
RAM adalah lebih cepat daripada cakera keras.
Ia adalah lebih kecil daripada cakera keras.
Tetapi ia adalah di mana program-program hidup semasa anda menjalankan mereka.
>> Jadi anda klik dua kali program pada Mac atau PC - ia dimuatkan dari
cakera keras ke dalam RAM.
Sebaik sahaja ia dimuatkan ke dalam RAM, sifar dan orang-orang yang pergi di atas jalan,
yang dipanggil segmen teks.
Tetapi kemudian secepat program anda sebenarnya bermula berlari, utama
fungsi dipanggil.
Dan utama, seperti yang kita telah melihat, sering mempunyai pembolehubah tempatan.
Dan ia mempunyai ints dan rentetan dan aksara dan sebagainya.
Jadi, jika program anda yang telah bertulis atau program yang anda mempunyai
double klik digunakan beberapa pembolehubah dalam utama, mereka akhirnya di
bawah timbunan memori anda, jadi untuk bercakap.
Sekarang, lebih kukuh, apakah ini sebenarnya bermakna?
Ini hanya bermaksud bahawa jika kita akan bilangannya perkara -
jika kita telah pergi ke nombor bait RAM dalam komputer anda, notis bahawa
ini mungkin nombor sifar bait.
Ini mungkin bilangan bait satu, dua, tiga, empat, lima, enam, semua
cara untuk suka -
2000000000 akan semua cara sehingga ada di bahagian atas.
Jadi dalam erti kata lain, apabila kita bercakap tentang RAM atau ingatan dari segi bait, ia
hanya bermaksud seseorang yang telah memutuskan apa yang menentukan bilangannya setiap
mereka ketulan memori.
>> Jadi, apabila anda memerlukan 32 bit untuk int, atau anda memerlukan 8 bit untuk char, di mana
adakah mereka akhirnya dalam ingatan?
Nah konsep, mereka hanya berakhir di bawah ini
perkara yang dipanggil timbunan.
Tetapi apa yang menarik sekarang ialah apabila utama panggilan fungsi.
Katakan fungsi dipanggil foo, hanya nama arbitrari.
Apa yang berlaku yang utama adalah di bahagian bawah timbunan ini memori.
Foo kini diletakkan di atas utama dalam ingatan.
Jadi, mana-mana pembolehubah tempatan bahawa foo telah berakhir jenis konsep di atas
mereka yang utama.
Jika foo panggilan lagi fungsi yang dipanggil bar, pembolehubah-pembolehubah berakhir di sini.
Jika bar menyeru sesuatu yang lain, di sini, di sini, di sini.
Jadi apa yang menarik tentang menjalankan program adalah bahawa anda memanggil fungsi,
dan sebagai fungsi panggilan fungsi, dan seperti fungsi panggilan fungsi,
anda membina ini timbunan fungsi dalam ingatan.
Dan hanya sekali pulangan fungsi manakah anda mula mendapat memori yang kembali.
Jadi salah satu cara paling mudah kehabisan memori dalam program komputer adalah untuk
menulis fungsi yang tidak pernah kembali.
>> Jadi, sebagai contoh, mari kita menunjukkan seberapa banyak dengan
program sengaja kereta.
Biar saya pergi ke hadapan dan # include , int utama (tidak sah).
Dan saya akan lakukan semasa (2> 1), yang mungkin tidak akan pernah
perubahan ke atas kita.
Dan biarlah saya pergi ke hadapan sekarang dan melakukan printf.
Sebenarnya, itu akan menjadi kurang menarik visual.
Mari kita melakukan ini.
Untuk int (i = 0; i> 0).
Mari kita membuat kesilapan ini, i + +.
Dan jangan printf sini.
Mari kita mengamalkan apa yang saya telah berkhotbah.
Mari kita mempunyai kaedah di sini.
Korus terbatal, dan kami akan mengatakan int i.
Dan kemudian saya akan mengatakan, printf -
oh, mari kita membuat ini lebih menarik.
Mari kita sebenarnya tidak mencetak apa-apa pada semua.
Mari kita hanya melakukan ini.
Chorus (i).
>> Semua hak.
Jadi ini adalah kereta kerana mengapa?
Saya membuat ini sebagai saya pergi kerana program ini sebenarnya tidak berbuat apa-apa
kepentingan.
Tetapi itu bukan matlamat.
Matlamatnya adalah untuk menulis program yang utama fungsi melakukan apa, nampaknya?
Memanggil sendiri.
Dan sebenarnya, kita tidak perlu gelung.
Mari kita walaupun memudahkan ini hanya supaya tidak kehilangan penglihatan benar-benar
pepijat asas.
Panggilan Utama korus untuk menyanyi korus beberapa.
Kemudian saya melakukan sesuatu yang bodoh, dan saya terpaksa korus korus panggilan kerana saya menganggap
orang lain telah pergi untuk melaksanakan ia mungkin.
Dan sekarang ini tidak akan untuk menyusun lagi.
Saya perlu melakukan apa?
Saya memerlukan prototaip, ingat.
Jadi saya perlu mempunyai sehingga sini korus terbatal (int i);.
>> Jadi sekarang, jika saya pergi ke sini -
sebenarnya, mari kita gunakan tetingkap yang lebih besar.
Mari kita pergi ke hadapan dan membuat korus.
Penggunaan declarer tidak dikenali i.
Oh, yang bodoh.
Kita tidak memerlukan hujah.
Mari kita hanya melakukan ini.
Wish kita telah mula cara ini.
Ia akan menjadi satu program yang lebih mudah untuk menulis.
Jadi di sana.
Sekarang mari kita pergi ke tetingkap terminal saya, dilafaz-run semula.
Dan di sini kita pergi.
Itu adalah benar-benar berpuasa.
Apa yang sebenarnya hanya berlaku, walaupun?
Nah, sekarang saya akan tambah baris cetak, jadi kita boleh lihat.
Jadi biarlah saya katakan printf, katakan, saya di sini.
Okay, tiada pembolehubah, kita akan meninggalkan ia seperti itu.
Izinkan saya jalankan semula membuat.
Biar saya yang dikendalikan semula korus.
Dan datang.
Terus pergi.
Sebagai mengetepikan, mengapa ia tidak terhempas lagi?
Kesalahan segmentasi berlaku cepat super sebelum ini.
[Didengar]
DAVID J. MALAN: Tepat sekali.
Jadi ia mengambil masa untuk mencetak.
Ia hanya mengambil kerja lebih pada bahagian komputer.
Dan ada ia adalah.
Kesalahan segmentasi.
>> Jadi melihat betapa cepat program berjalan.
Jika anda tidak mencetak apa-apa, puasa super.
Tetapi kita masih mendapat ini kesilapan segmentasi kerana apa yang telah berlaku?
Nah, jika anda berfikir tentang bagaimana memori komputer anda dibentangkan, ini
berlaku untuk menjadi utama.
Tetapi di sini -
mari kita hanya memanggil korus ini, dan mari kita memanggil korus ini.
Dan kini jika saya lakukan estetika saya, ini hanya akan mengatakan korus,
korus, korus, korus, korus, korus, korus, iklan nauseum.
Dan akhirnya, apa yang akan berlaku?
Jika gambar besar literal ini, apa yang hanya berlaku konsepnya?
Timbunan lebihan longgokan itu.
Atau lebih teruk lagi, anda hanya ditakluki segala-galanya, termasuk segmen teks, yang merupakan
sifar dan orang-orang yang mewakili program anda.
Secara ringkas, ini adalah hanya super, buruk super.
Betul?
Program anda telah melambung di luar kawalan.
Anda menggunakan memori cara yang lebih daripada yang anda hendak semua kerana bodoh
kesilapan, dalam kes ini.
Atau dalam kes ini, fungsi yang sangat sengaja dilakukan memanggil sendiri.
Sekarang ini tidak semua yang buruk.
Fungsi yang menggelarkan diri mereka sebenarnya mempunyai kuasa yang besar
apabila anda menggunakannya dengan betul.
Saya telah tidak digunakan dengan betul di sini.
>> Jadi ini tidak semua yang buruk.
Tetapi hakikat bahawa saya tidak pernah benar-benar berhenti memanggil diri adalah asas
kelemahan di sini program ini.
Jadi di mana kita akan pergi dengan semua ini?
Nah, apa yang benar-benar berlaku?
Apabila saya memanggil fungsi kenaikan, seperti yang kita telah lakukan pada mereka contoh,
Saya mempunyai nilai seperti 1 yang saya lulus masuk
Saya lulus dalam satu salinan nombor satu.
Jadi berikut berlaku.
Jadi mari kita pergi ke contoh kenaikan.
Dan lelaki ini betul-betul di sini.
Jadi di sini adalah apa yang sebenarnya berlaku.
Apabila saya dipanggil kenaikan, dan saya lulus dalam x, bergambar apa yang
berlaku di sini adalah ini -
jika saya mempunyai nilai 1 disimpan di sini, dan saya sebenarnya menyeru kenaikan, yang
kini dipanggil korus -
yeah, itu membuang saya di sini.
Jadi mari kita memanggil kenaikan ini.
Dan kita tidak tahu apa fungsi ini seterusnya akan menjadi.
Jadi apa yang sebenarnya berlaku di sini tempat utama, saya mempunyai sebahagian
memori yang menyimpan nombor 1.
Apabila saya memanggil kenaikan, saya menggunakan satu lagi sebahagian memori, tetapi sekarang saya
mempunyai salinan 1.
Apabila saya kenaikan nilai itu, ini menjadi 2 - teruk ditulis pada
skrin di sini.
Tetapi kemudian, apa yang berlaku secepat pulangan kenaikan?
Memori ini hanya akan diserahkan kembali kepada sistem operasi, yang bermakna semua
anda telah melakukan apa-apa yang berguna.
Salah satu yang pada asalnya terkandung dalam utama masih sebenarnya di sana.
>> Jadi di mana kita akan pergi dengan ini?
Nah, ternyata bahawa dalam ingatan anda mempunyai belakang ini untuk menyokong urutan
bait yang anda boleh meletakkan barangan masuk
Dan ternyata bahawa kita sudah melihat sesuatu yang melibatkan meletakkan
perkara yang kembali ke belakang untuk kembali ke belakang.
Apakah rentetan, berdasarkan pada satu minggu dan kini Minggu two?
Jadi ia hanya koleksi aksara.
Jadi ternyata, hanya kerana anda boleh meletakkan nombor dalam ingatan, begitu juga anda boleh
meletakkan watak-watak dalam ingatan.
Dan apabila kita mula meletakkan watak-watak dalam ingatan kembali ke belakang untuk kembali ke
belakang, ia ternyata bahawa menggunakan mudah perkara seperti untuk gelung atau
gelung sementara, kita boleh melelar -
dari kiri ke kanan ke atas watak-watak dalam rentetan -
dan mula mengurut mereka ke dalam watak yang berbeza sama sekali.
A boleh menjadi B. B boleh menjadi C. Supaya akhirnya, kita boleh mengambil
Ayat Bahasa Inggeris yang benar-benar masuk akal dan menukar setiap orang
huruf pada satu masa dengan berjalan melalui memori komputer kita meninggalkan
hak untuk benar-benar menyulitkan.
>> Jadi mari kita rehat lima minit kami di sini, dan apabila kita kembali, kami akan
memulakan proses ini maklumat bergegas.
>> Semua hak.
Jadi sebelum kita menyelam di kepada beberapa kripto dan perkara-perkara yang dipanggil array, izinkan saya
berhenti untuk sebarang pertanyaan kerana saya rasa seperti saya benar-benar jenis kelam-kabut beberapa
topik tersebut.
Jadi mari kita menetapkan sekarang jika kita boleh.
Jadi kita hanya bercakap tentang nilai-nilai pulangan.
Kita bercakap tentang hujah.
Dan kita bercakap tentang idea ini, yang kita akan datang kembali ke dalam minggu
datang, melihat memori sebagai sekumpulan keseluruhan ini disusun
dulang, jadi untuk bercakap.
Dari bawah ke atas sehingga, bahawa setiap dulang yang mendapat diletakkan di atas timbunan mewakili
fungsi yang sedang dipanggil.
Apa-apa soalan?
Jadi bagaimana pula - biarlah saya cuba bertanya soalan.
Saya terus rosak, tetapi sekarang it's - you've semua melihat muka budak itu.
Jadi kita akan kembali itu.
>> Jadi biarlah saya bertanya soalan di sini.
Biar saya memudahkan belakang ini kepada apa yang ia sebelum beberapa Q & A. awal kami
Dan hakikat bahawa kenaikan mempunyai kurungan terbuka, nombor int, ditutup
kurungan.
Apa tidak mewakili nombor int?
[Didengar]
DAVID J. MALAN: hujah Satu.
Okay, tetapi apa hujah?
[Didengar]
DAVID J. MALAN: Maaf, apa itu?
SPEAKER 3: Sesuatu yang anda lulus masuk
DAVID J. MALAN: Okay.
Jadi sesuatu yang anda lulus masuk
Dan lebih amnya, ia hanya input.
Jika anda sedang menulis fungsi dan tujuan yang berfungsi dalam kehidupan adalah untuk melakukan
sesuatu yang sedikit berbeza setiap kali anda menggunakannya, maka satu-satunya cara untuk
yang berlaku benar-benar akan kelihatan untuk menyediakan ia dengan input supaya ia
boleh melakukan sesuatu yang berbeza dengan input itu setiap masa.
>> Jadi, anda perlu untuk menentukan dua perkara apabila fungsi mengambil input.
Anda perlu nyatakan nama yang anda mahu untuk memberi input yang, semata-mata untuk
kemudahan anda sendiri supaya anda boleh merujuk kepada fungsi yang anda
diri sendiri menulis, seperti yang saya lakukan di sini dalam 32 baris.
Tetapi anda juga perlu untuk menentukan jenis kerana C adalah bahasa pengaturcaraan
yang hanya memerlukan
bahawa jika anda mahu pembolehubah, anda perlu untuk memberitahu komputer apa
data menaip ia adalah,
sebahagian besar supaya ia tahu berapa banyak bit untuk
memperuntukkan bagi pembolehubah yang.
Kerana ia boleh menjadi enam -
maaf, ia tidak akan menjadi enam.
Ia boleh menjadi 16.
Ia boleh menjadi 8.
Ia boleh menjadi 32, walaupun 64.
Tetapi komputer perlu tahu.
Sekarang int di sebelah kiri mewakili apa, sebaliknya?
[Didengar]
DAVID J. MALAN: Apa itu?
[Didengar]
J. DAVID MALAN: Jenis fungsi dan, lebih khusus,
jenis output.
Betul.
Jadi, manakala perkara dalam kurungan mewakili input, jika ada,
perkara ke kiri mewakili output.
Dan dalam kes ini, kenaikan nampaknya kembali int.
Dan sebagainya int adalah jenis pulangan fungsi ini.
>> Apakah maknanya untuk pulangan?
Secara harfiah, anda menggunakan pulangan kata kunci.
Dan kemudian jika apa yang anda akan kembali kepada hak kata kunci adalah
integer, maka itu adalah memang selaras dengan apa yang kita telah dijanjikan.
Anda tidak dapat melakukan sesuatu seperti ini -
hello, dunia
kerana itu adalah rentetan.
Jelas sekali ia bukan integer.
Jadi dalam jangka pendek, beban adalah benar-benar kepada kami, pengaturcara, khusus sebagai
apa yang kita sedang kembali dan kemudian sebenarnya pergi tentang kembali ia.
Dan kemudian untuk membuat anak lelaki lebih jelas konteks -
ada dia sekali lagi.
Konteks -
kejutan besar datang dalam hanya seketika.
Konteks di sini sekarang ialah bahawa memori komputer anda, sekali lagi,
gigabyte, dua gigabait, apa sahaja.
Mungkin ia lebih.
Mungkin ia adalah kurang.
Tetapi komputer memandang ia sebagai mempunyai bahagian yang berbeza.
Sesuatu yang pergi bawah sana.
Sesuatu yang lain naik sana.
Barangan yang berbeza berlaku di tengah-tengah.
Dan hari ini, kami hanya mula menceritakan kisah ini.
>> Tetapi kami akan datang kembali ke masa ini lebih.
Buat masa sekarang, hanya sekeping memori kita benar-benar mengambil berat tentang adalah segmen teks
kerana yang hanya mewakili sifar dan orang-orang yang
dilafaz telah outputted.
Jadi, apabila anda menjalankan arahan pada keyboard seperti a.out, atau anda dua kali ganda
klik ikon pada Mac OS atau Windows, program anda dimuatkan dari keras anda
memandu ke dalam RAM.
Dan ia plopped di atas RAM komputer anda, jadi untuk bercakap.
Sekarang Sementara itu, sebagai program anda mula berjalan utama dan mendapat dipanggil dalam
program yang anda menulis atau program Microsoft atau Apple menulis, mana-mana
pembolehubah tempatan akhirnya di bawah sana di bahagian bawah memori komputer anda.
Tetapi jika utama memanggil fungsi yang lain itu sendiri mempunyai pembolehubah atau
hujah, mereka akhirnya di atasnya.
Dan jika fungsi yang menyeru sesuatu, mereka akhirnya di atasnya,
atas, di atas ia.
Dan hanya sekali fungsi dilakukan melaksanakan tidak timbunan dulang, jadi
untuk bercakap, mula untuk mendapatkan lebih rendah dan lebih rendah.
Dan ini adalah apa itu, secara ringkas, menjelaskan mengapa, apabila anda memanggil kiub -
atau anda memanggil kenaikan -
anda lulus dalam salinan nilai.
Dan apa yang bermakna bergambar adalah bahawa anda benar-benar menulis
nombor 1 dalam bahagian lain ingatan, perubahan yang 1 ke 2, dalam kes
kenaikan -
atau 8 lagi, dalam kes kiub -
dan kemudian membuang memori yang jauh secepat kenaikan atau kiub
fungsi pulangan.
>> Soalan.
[Didengar]
DAVID J. MALAN: Jika - pembolehubah global disimpan dalam apa
kini dipanggil data dimulakan atau data yang tidak diisytiharkan.
Perbezaannya, jika anda mempunyai pembolehubah global, dan anda mengatakan ia
segera nilai dengan sama menandatangani, ia berakhir di atas sana.
Dan jika anda hanya mengatakan int x koma bernoktah dengan tiada nilai, ia berakhir sedikit
lebih rendah dalam RAM hanya dengan konvensyen.
Soalan lain.
Semua hak.
>> Jadi gambar ini akan kembali seperti yang kita mendapatkan lebih berkuasa dengan apa yang kita boleh lakukan
dengan komputer.
Tetapi untuk sekarang, mari kita mempunyai intro ringkas untuk kriptografi, jenis tertentu
kriptografi yang tidak menyelesaikan semua masalah di dunia tetapi tidak menyelesaikan
sebahagian daripada mereka.
Dalam kes ini di sini, kita mempunyai sesuatu yang dipanggil kriptografi kunci rahsia.
Dan kriptografi kunci rahsia, seperti namanya, mendapat keselamatan
dari rahsia.
Jadi, sebagai contoh, jika anda kembali di sekolah gred dan anda lulus
sedikit surat cinta rahsia untuk lelaki atau perempuan anda menghancurkan - jika anda
mahu lulus bahawa melalui penonton, anda mungkin tidak akan menulis
seperti nota dalam Bahasa Inggeris atau apa sahaja bahasa ibunda anda, sebaliknya, anda
mungkin menyulitkan.
Atau anda mungkin hanya menghantar mereka mesej teks pada hari ini.
Tetapi anda sebenarnya mungkin pas mereka nota sepanjang kelas.
Dan untuk melakukan ini selamat, dalam apa-apa cara yang anda rakan-rakan dan guru
tidak tahu apa yang anda menulis, anda mungkin tampil dengan agak mudah
algoritma -
muda walaupun anda mungkin -
hanya perebutan perkataan.
Jadi, daripada menulis A, anda mungkin menulis B. Sebaliknya B, anda mungkin menulis
C. Sebaliknya C, anda mungkin menulis D, dan sebagainya.
Atau anda boleh tampil dengan terjemahan yang lebih canggih surat
surat yang berbeza.
Tetapi tangkapan adalah lelaki atau perempuan kepada siapa anda menghantar nota ini perlu
tahu sesuatu.
Yang adalah apa yang jelas?
Seperti, apa rahsia anda.
Seperti, apakah bahawa pemetaan antara A dan B dan C. dan Ds?
Adakah ia hanya menambah satu, jadi untuk bercakap, untuk setiap huruf untuk pergi dari
A ke B, B ke C?
Adakah ia lebih kompleks daripada itu?
Jadi anda dan menghancurkan anda perlu mempunyai maklumat ini rahsia.
Tetapi ada jenis tangkapan-22 di sini.
Jika ini adalah kali pertama anda menghantar surat cinta ini melalui
kelas, bagaimana bahawa lelaki atau perempuan akan tahu apa rahsia walaupun?
Jadi rahsia utama kripto tidak menyelesaikan semua masalah di dunia.
Dan sebenarnya ada hubungan kita akan kembali ke arah
semester akhir.
>> Begitu juga, tidak seorang pun daripada kami mungkin pernah menghantar -
begitu juga, adakah kebanyakan kita tidak tahu seseorang yang bekerja, misalnya, pada
Amazon.com.
Dan lagi, ramai di antara kita mungkin telah membeli barangan di Amazon.com.
Dan kita telah diajar untuk menganggap bahawa ini e-dagang
transaksi adalah selamat.
Betul?
URL mungkin mengatakan https.
Ada mungkin ikon mangga sedikit bodoh tempat.
Terdapat beberapa jenis kriptografi mendapatkan maklumat kad kredit anda
antara anda dan Amazon.com.
Dan lagi, jika kriptografi melibatkan mengetahui rahsia sesetengah orang, tetapi saya tidak
tahu sesiapa di Amazon, dan saya pasti tidak mengatur sebarang
rahsia dengan seseorang di Amazon, bagaimana komputer saya atau pelayar saya melakukan ini?
Nah, ternyata terdapat lain-lain jenis kriptografi sama sekali yang menyelesaikan
masalah itu.
Tetapi hari ini, kita akan memberi tumpuan pada satu yang mudah, di mana anda boleh menguruskan dalam
memajukan tahu beberapa rahsia, seperti campur 1 atau beberapa pemetaan antara As dan Bs.
>> Dan proses kriptografi umumnya melibatkan ini.
Anda mempunyai beberapa teks biasa, digambarkan di sini di sebelah kiri.
Anda menjalankan melalui beberapa jenis algoritma atau prosedur
untuk menyulitkan ia.
Mungkin itu hanya menjadi B, B menjadi C. Dan kemudian anda berakhir dengan
cipher teks.
Sementara itu, sekali menghancurkan anda menerima nota rahsia, dia mempunyai untuk kemudian
menyahsulit oleh amnya menterbalikkan algoritma yang supaya dapat
kembali teks biasa.
Sekarang terdapat jelmaan fizikal ini.
Sebagai contoh, ini adalah cincin penyahkod rahsia sedikit.
Dan ini adalah cincin dalam erti kata bahawa terdapat dua cepat di sini.
Di pinggir luar perkara ini, ada huruf A hingga Z,
walaupun mereka berada dalam susunan rawak.
Dan di bahagian dalam, terdapat sebenarnya beberapa nombor, seperti yang dengan ini
cincin, anda jenis boleh bertukar luar tetapi tidak dalam untuk beratur
nombor dengan huruf.
Dan dalam klip anda kira-kira untuk melihat - beberapa yang anda mungkin telah melihat 24/7
sekitar musim Krismas dari filem yang dipanggil A Story Krismas.
Anda akan melihat bahawa Ralphie sedikit adalah begitu bersemangat untuk mengetahui apa yang anak yatim sedikit
Mesej rahsia Annie adalah kepadanya yang telah disampaikan, saya fikir, dalam
membentuk mesej angka pada kotak bersiri.
Dan anda terpaksa mengumpul semua kad kecil yang datang
di dalam kotak bijirin.
Anda terpaksa untuk mel mereka masuk
Anda terpaksa mendapatkan kembali cincin penyahkod rahsia, supaya anda akhirnya boleh memahami
keluar apa pemetaan adalah antara huruf dan nombor,
atau surat dan surat.
Jadi saya memberi anda ini klip pendek dari Kisah Krismas A untuk memotivasikan pset 2 dan
perbincangan, dalam seketika, tatasusunan.
Jadi di sini kita mempunyai Ralphie.
>> [Video main]
-Jadilah ia dikenali untuk segala-galanya bahawa Ralph Parker adalah dengan ini dilantik sebagai
ahli Anak-Anak Yatim Little Secret Circle Annie dan adalah berhak kepada semua
penghormatan dan faedah yang berlaku dengannya.
-Ditandatangani, Anak-Anak Yatim Little Annie.
Ditandatangan balas, Pierre Andre!
Dalam dakwat!
Kepujian dan faedah, sudah pada usia sembilan tahun.
Ayuh, mari kita mendapatkan dengan ia.
Saya tidak perlu semua bahawa jazz tentang penyeludup dan lanun.
Dengar malam esok untuk pengembaraan penutup Hitam
Kapal lanun.
Kini sudah tiba masanya untuk mesej rahsia Annie untuk anda ahli
Circle Rahsia.
Ingat, anak-anak, ahli sahaja Circle Rahsia Annie boleh decode
Annie mesej rahsia.
Ingat, Annie adalah bergantung kepada anda.
Tetapkan pin anda kepada B2.
Berikut adalah mesej.
12, 11 -
Saya dalam mesyuarat rahsia pertama saya.
-14, 11, 18, 16 -
-Pierre berada di malam suara yang besar.
Saya boleh memberitahu bahawa mesej malam ini adalah benar-benar penting.
-3, 25.
Itulah mesej dari Annie dirinya.
Ingat, jangan beritahu sesiapa.
-90 Seconds kemudian, saya di dalam bilik hanya di dalam rumah di mana seorang budak sembilan
boleh duduk dalam privasi dan decode.
Aha, B. Saya pergi ke depan.
E. Perkataan pertama adalah.
S. Ia telah datang lebih mudah sekarang.
U.
-Oh, datang pada, Ralphie.
Saya mendapat untuk pergi.
-I'll menjadi sampai, ma.
Gee jagoan.
-T, O. Pastikan.
Pastikan kepada apa?
Apa yang Anak-Anak Yatim Little Annie cuba katakan?
Pastikan kepada apa?
-Ralphie!
Randy telah mendapat untuk pergi.
Anda akan sila keluar?
Baiklah, ma.
Saya akan segera keluar.
Saya semakin hampir sekarang.
Ketegangan was terrible.
Apakah ia?
Nasib planet ini boleh meragukan.
-Ralphie!
Randy mendapat untuk pergi.
-I'll menjadi hak keluar, Astaga.
Gee, hampir di sana.
Jari saya terbang.
Fikiran saya adalah perangkap keluli.
Setiap liang digetarkan.
Ia adalah hampir jelas.
Ya, ya, ya, ya.
Pastikan untuk minum Ovaltine anda.
Ovaltine?
A komersial tdk bagus?
Bedebah.
[Video main AKHIR]
>> DAVID J. MALAN: Jadi ada kita mempunyai kriptografi.
Jadi bagaimana dalam komputer kita boleh pergi tentang melaksanakan atau
mewakili perkara-perkara seperti ini?
Nah, kita memerlukan satu cara untuk menyatakan diri kita sedikit lebih fleksibel daripada
pembolehubah kami setakat ini telah dibenarkan.
Kami telah ints.
Kami telah aksara.
Kami telah terapung dan beregu dan beberapa yang lain.
Tetapi orang-orang yang keping individu memori yang tidak benar-benar membolehkan kita untuk
menyatakan perkara seperti perkataan dan ayat dan frasa.
Malah, kita telah dipanggil rentetan perkara-perkara.
Tetapi kita berjanji bahawa ini adalah benar-benar hanya pemudahan dalam CS50
perpustakaan yang kita sedang berniat untuk mengupas kembali.
>> Dan jadi mari kita mulakan untuk berbuat demikian di sini.
Biar saya pergi ke hadapan dan membuka fail -
semua fail-fail ini boleh didapati sebagai talian biasa -
dipanggil array.c untuk menyelesaikan masalah yang berkaitan dengan rentetan tetapi yang cat
gambar di sini bagaimana kita boleh menggunakan sesuatu yang dipanggil array.
Pelbagai jenis data.
Ia adalah sejenis pembolehubah, macam, yang mempunyai pelbagai jenis data yang lebih kecil
dalamnya kembali ke belakang untuk kembali ke belakang.
Jadi, sebagai contoh, jika kita mahu menulis program kecil yang memberikan anda
kuiz purata bagi kursus seperti 50 yang mempunyai dua kuiz, anda boleh sangat mudah
menulis program ini berasaskan walaupun pada beberapa bahan minggu lepas -
dengan menggunakan GetInt dan beberapa pembolehubah.
Int quiz1, int quiz2, dan ia agak mudah.
Ia mungkin 10, 20 baris kod, maks, untuk melaksanakan program yang meminta
pengguna untuk dua skor kuiz dan kemudian mengira purata mereka dengan menambah mereka
bersama-sama, terbahagi kepada dua, dan kemudian mencetak keputusan.
Kita mungkin boleh berbuat demikian cukup mudah sekarang selepas
beberapa beberapa minit.
>> Tetapi masalahnya ialah yang mengandaikan bahawa 50 mempunyai tiga kuiz atau empat.
Katakan bahawa anda mahu menggunakan program yang sama untuk kelas yang mempunyai
mingguan kuiz.
Fikirkan tentang kelas yang telah mingguan kuiz.
Jika ada seperti 16 atau jadi minggu dalam satu semester, sekarang anda mempunyai 16 pembolehubah -
int quiz1, int quiz2, int quiz3, quiz4 int.
Sebaik sahaja anda mula melihat lebihan ini, ini menyalin dan menampal
kod, ia harus bermula untuk membuat anda ingin terdapat satu cara yang lebih baik.
Dan bersyukur, kerana tatasusunan, ada.
Jadi mari kita buat ini.
Pertama, izinkan saya memperkenalkan satu perkara yang sangat mudah bahawa kita telah tidak digunakan setakat ini,
tetapi anda akan melihat ia kadang-kadang dalam kod.
Ini adalah apa yang biasanya dipanggil pemalar.
Jadi ia adalah berterusan dalam erti kata bahawa nilai ini tidak pernah berubah.
Konvensyen manusia apabila mewujudkan pemalar adalah untuk menggunakan semua modal
surat, hanya supaya ia benar-benar menonjol dalam kod anda.
Dan kata kunci khas yang anda gunakan dalam C # menentukan.
Jadi, jika anda katakan # menentukan, maka ruang, maka perkataan yang anda mahu gunakan untuk
pemalar nama, dan kemudian nilai pemalar.
Jadi notis, ini adalah berbeza daripada memberikan sesuatu kepada pembolehubah.
Tiada tanda sama.
Ada tiada koma bernoktah.
Ini adalah apa yang umumnya dikenali sebagai arahan prapemproses, tetapi lebih kepada
bahawa masa yang lain.
>> Buat masa sekarang, ini mewujudkan nilai yang tidak berubah dipanggil kuiz sebenar yang
nilai berangka ialah 2.
Jadi di mana-mana anda melihat kuiz, kuiz, kuiz seluruh fail ini, itulah
hanya nombor 2.
Sekarang, jika saya melihat utama sekarang, mari kita lihat bagaimana kerja-kerja ini.
Pada mulanya, ia kelihatan sedikit samar.
Tetapi ia adalah semua barangan dari satu minggu.
Tanya pengguna untuk gred.
Bagaimana kita melakukan ini?
Nah, dalam 22 baris -
ini adalah benar-benar bahagian yang berair -
Saya mengaku apungan, tetapi tidak hanya apungan tunggal.
Saya mengisytiharkan, sebaliknya, pelbagai nilai titik terapung.
Itu ubah akan dipanggil gred, seperti yang tersirat di sini.
Tetapi sekeping hanya sintaks baru maka ini kurungan persegi, hakikat
bahawa saya telah berkata gred apungan dan kemudian kurungan terbuka dan kemudian nombor.
Notis, jika ini adalah pemalar, ini adalah sama seperti yang kita lakukan ini.
Ini bermakna hey komputer, memberi saya dua terapung, dan mari kita secara kolektif memanggil
mereka gred.
Ini adalah Berbeza dengan proses yang lebih membosankan seperti ini.
Terapung grade1, terapung grade2, dan sebagainya.
Jadi array membolehkan kita untuk melaksanakan idea ini tetapi lebih kurang messily, dalam
apa-apa cara bahawa kita boleh menulis satu baris kod dan bukannya, katakan, 16 untuk 16
semester minggu.
Jadi saya tidak mahu keras-kod 2 kerana jika anda berfikir tentang perkara ini sekarang
logik - andaikan tahun depan CS50 perubahan kepada 3 kuiz sebaliknya.
Dan saya mempunyai nombor 2 di sini.
Saya mempunyai nombor 2 di sini.
Ia menjadi sangat membosankan dan sangat mudah untuk skru dan sengaja menukar
satu nilai kepada 3 dan terlepas beberapa nilai lain 2.
Jadi saya akan sebaliknya abstrak ini jauh dan menggunakan ini berterusan bahawa, seperti yang
nama mencadangkan, tidak pernah berubah.
Dan kini, tidak kira sama ada kita mempunyai berbeza kuiz tahun ini atau seterusnya, saya
hanya perlu untuk menukar ia di satu tempat, di sini di atas.
>> Jadi itulah semua yang berterusan adalah.
Sementara itu, ciri konsep baru yang pelbagai.
Jadi kurungan persegi memberikan saya ini terapung yang banyak dan membolehkan saya kolektif
memanggil mereka gred sini.
Jadi sekarang mari kita lihat apa yang saya akan lakukan.
Di sini dalam 24 baris adalah permulaan untuk gelung.
Ini adalah benar-benar mewah tiada.
Ia hanya menggunakan kuiz bukannya beberapa berkod keras.
Tetapi tiada apa-apa yang intelektual berbeza ada dari minggu lepas.
Ini adalah hanya printf.
Jadi printf ("kuiz nombor% d% d") kerana saya hanya mahu mencetak memberi saya kuiz
nombor salah satu daripada dua dan kemudian dua dua.
Jadi ini adalah semata-mata satu perkara yang estetik.
Tetapi bahagian yang menarik sekarang adalah dalam 27 baris.
Dalam usaha untuk mengisi salah satu daripada dua ruang letak dengan terapung-titik
nilai, anda sekali lagi menggunakan kurungan persegi.
Dalam kes ini, saya menggunakan i kerana ini untuk gelung telah bermula dengan i menyamai
apa nilai, nampaknya?
0.
>> Jadi pada lelaran pertama gelung ini, ia seolah-olah saya
menulis ini dalam kod.
Tetapi pada lelaran kedua gelung ini, ia seolah-olah saya
menulis ini dalam kod saya.
Tetapi hakikat bahawa saya menggunakan pembolehubah adalah sempurna kerana, sebagai nama
mencadangkan, ia mengubah nilai pada setiap lelaran.
Jadi saya mengisi array ini satu tempat pada satu masa.
Apakah array ini kelihatan seperti?
Nah, sebab saya menarik ini segiempat tepat super mudah pada skrin di sini
sebelum ini adalah atas sebab ini.
Pelbagai adalah hanya sebahagian memori yang diikuti oleh sebahagian yang lain memori,
diikuti oleh sebahagian yang lain memori, dan sebagainya.
Jadi, jika pelbagai saya adalah saiz 2, dalam kes ini di sini, semua saya akan dilakukan oleh
menaip dalam skor kuiz saya, seperti di sini.
Saya mendapat 100 pada satu ini.
Dan kemudian saya mendapat 99 pada satu ini.
Kemudian memori ini mungkin tidak boleh digunakan kerana saya hanya meminta
komputer untuk pelbagai saiz 2.
Mereka dataran masih ada.
Betul?
Anda masih mempunyai dua gigabait RAM, walaupun anda hanya
meminta untuk dua terapung.
Jadi idea di sebalik tatasusunan adalah bahawa komputer hanya mengambil sebahagian memori
dan kemudian apportions lebih kecil keping kembali ke belakang untuk kembali ke belakang.
Dan supaya semua pelbagai.
Ia adalah sebahagian memori yang berdampingan, di dalam mana anda boleh meletakkan perkara.
>> Sekarang ini berlaku kemudian melakukan hanya beberapa aritmetik membosankan.
Jika saya skrol ke bawah sini, ini adalah di mana saya kemudian melelar lebih array.
Saya datang dengan hasil tambah semua nilai dalam array.
Dan kemudian saya menggunakan fungsi bulat di sini untuk benar-benar melakukan
kesimpulan dibahagikan dengan kuiz.
Tetapi biarlah saya melambai tangan saya pada itu sebagai jenis aritmetik yang cukup untuk sekarang.
Tetapi semua itu melakukan untuk saya akhirnya mengira purata.
Jadi pertama kuiz ditambah kuiz kedua, dibahagikan dengan 2, dan kemudian percetakan
ia keluar sebagai int.
>> Tetapi mari kita kini peralihan kepada contoh yang berbeza dipanggil string1,
yang cat gambar yang sama tetapi menggunakan tali.
Biar saya pergi ke hadapan dan memudahkan ini hanya seketika.
Dan memaafkan lekukan sekarang.
Notis dalam 19 barisan contoh ini, saya mendapat satu rentetan dari pengguna.
Tetapi notis apa yang saya seterusnya melakukan dalam baris 22 dan seterusnya.
Saya sebenarnya iterating i sehingga - dan ini adalah helah baru -
strlen, tali panjang.
Ini adalah fungsi yang datang dengan C bahawa jika anda lulus rentetan, ia memberitahu
anda berapa banyak aksara dalam rentetan itu.
Itu semua.
Hakikat bahawa ia adalah strlen bukannya panjang rentetan adalah hanya kerana ia adalah
ringkas banyak lagi.
30 tahun lalu, orang suka untuk menulis perkara yang ringkas yang mungkin.
Jadi kami telah disimpan konvensyen itu di sini.
i + + hanya bermakna kenaikan i dalam setiap lelaran.
Dan kini notis ini, yang benar-benar menarik.
Jadi di baris 24, saya katakan komputer, memberikan saya watak, lapan
bit, dan memanggil ia c.
Tetapi apakah ini di sebelah kanan berkata?
Dalam bahasa Inggeris, apakah yang mewakili?
[Didengar]
DAVID J. MALAN: Tepat sekali.
Berikan saya watak pertama dalam array.
Atau lebih amnya, memberikan saya watak i-ke dalam array.
Dan menyedari ia adalah penting kini bahawa sebagai ahli-ahli sains komputer, kita sebenarnya
mengira dari 0.
Anda tidak mempunyai budi bicara sekarang untuk memulakan melakukan ini.
Sekarang anda perlu berkelakuan selaras dengan jangkaan komputer dan
mengira dari sifar kerana [0] akan menjadi yang pertama
watak dalam rentetan.
[1] akan menjadi yang kedua.
[2] akan menjadi ketiga, dan sebagainya.
Jadi program ini, jika saya menyusun - ini adalah, sekali lagi, string1.
>> Supaya membuat string1.
Dan sekarang saya menjalankan string1 dalam tetingkap terminal saya.
Ia menunggu untuk input, jadi saya akan menaip dalam, katakan, David.
Enter.
Dan kini ia mencetak DAVID semua pada garisan yang berbeza kerana
notis apa yang saya lakukan.
Saya mencetak satu aksara pada satu masa.
Sekarang kita tidak akan pergi ke terperinci hari ini mengenai perkara ini.
Tetapi saya dipadam seketika lalu semakan ini di sini.
Ia ternyata bahawa jika pengguna berkelakuan tidak senonoh, pertentangan, atau hanya
keliru, anda sebenarnya boleh gagal untuk memberi rentetan beberapa panjang.
Jika anda memukul kunci yang salah pada papan kekunci, anda mungkin memberi
tiada tali pada semua.
Atau jika anda berniat jahat, anda mungkin cuba untuk paste dalam bernilai gigabit sesuatu
esei untuk mengisi rentetan ini.
Dan jika komputer kehabisan memori, ternyata bahawa kita akan
untuk mendapatkan kembali nilai ini khas dipanggil batal.
Jadi untuk sekarang, hanya tahu bahawa terdapat nilai ini khas dipanggil nol bahawa
akan membolehkan kita untuk memeriksa apabila kita berada di luar ingatan, antara perkara-perkara lain.
>> Tetapi jika saya membuka sehingga kini string2, notis satu perbezaan di sini.
Notis satu perbezaan di sini dengan string2.
Mempunyai Dengan string2, ini bagi gelung adalah sedikit berbeza.
Biar saya memadam nulls supaya kita boleh bercakap tentang mereka masa yang lain.
Tetapi apa yang berbeza tentang gelung masa ini?
Dan saya boleh kembali ke contoh sebelumnya.
Jadi itulah versi kedua.
Ini adalah versi satu.
Satu, dua, satu 2.
Jadi panggilan strlen adalah di mana?
Ia adalah di bahagian pertama untuk gelung.
Mana-mana pemikiran tentang mengapa saya lakukan ini?
Yeah.
[Didengar]
DAVID J. MALAN: Jadi kita tidak memanggil fungsi setiap kali tunggal.
Tepat sekali.
Ingat dari untuk gelung yang mereka sangat mudah sebaik sahaja anda jenis
faham bahawa ini adalah pengawalan,
keadaan, dan kemas kini.
Masalahnya ialah bahawa keadaan yang berlaku pada setiap
lelaran gelung.
Dan sebagainya dalam contoh ini di sini, apa yang buruk tentang hakikat
bahawa ini adalah keadaan saya?
Anda memanggil strlen lagi dan lagi dan lagi.
Tetapi apabila saya telah ditaip di DAVID, panjang tali itu adalah lima.
Dan ia tidak akan berubah pada setiap lelaran gelung kerana
rentetan masih D-A-V-I-D. Jadi ini adalah satu petunjuk pada apa yang akan menjadi
idea yang semakin penting yang dikenali sebagai keputusan reka bentuk, di mana hanya tidak melakukan
membuat komputer melakukan kerja-kerja yang tidak perlu.
>> Sekarang hanya sebagai pratonton menyelinap pset 2, pset 2 dalam edisi standard
akan mencabar anda untuk benar-benar melaksanakan beberapa nombor sifer, beberapa
bilangan algoritma penyulitan, supaya anda boleh kedua-dua menyulitkan dan menyahsulit
mesej rahsia, sama seperti satu Ralphie sana dinyahkod.
Dalam edisi penggodam daripada pset 2, kita akan pergi sedikit lagi.
Kami akan tangan anda fail dari sistem komputer sebenar yang mengandungi
sekumpulan keseluruhan sebenar nama pengguna dan kata laluan disulitkan, dan cabaran
untuk edisi hacker akan menjadi retak mereka kata laluan dan angka
keluar apa kriptografi atau apa rahsia telah digunakan untuk benar-benar
menjana kata laluan tersebut.
Dan kita akan melakukan ini dengan menggunakan ciri baru di sini C yang saya akan memberikan
anda hanya demo, yang dikenali sebagai hujah baris arahan.
>> Jadi ternyata, kerana sesetengah daripada anda mungkin telah dilihat dalam seksyen atau di dalam buku teks,
utama tidak semestinya perlu menjadi tidak sah dalam kurungan.
Ia ternyata bahawa utama juga boleh ditulis seperti ini, dengan dua hujah,
argc dan argv, di mana argc adalah bilangan perkataan yang anda menaip selepas
nama program pada baris arahan anda.
Dan argv adalah perkataan yang sebenar.
Dan sebagai kurungan persegi di sana mencadangkan, argv nampaknya array.
Ia akan menjadi rentetan selepas rentetan selepas rentetan dalam ingatan.
Jadi apa yang kita akan dapat melakukan, bermula dengan pset 2,
sesuatu seperti ini.
Jika saya membuat argv1, yang merupakan contoh kita akan kembali ke pada hari Isnin, dan menjalankan
, notis bahawa ia tidak kelihatan untuk berbuat apa-apa lagi.
Ia hanya mencetak namanya sendiri.
Tetapi jika saya katakan kelas selamat tinggal, notis bahawa program ini nampaknya lelaran
atas setiap perkataan yang telah ditaip di prompt.
Dan cara-cara di mana kita akan mendapat akses kepada kata-kata yang pengguna mempunyai
ditaip di prompt adalah dengan menukar utama, bermula hujung minggu ini, dari int
utama (sah) untuk int utama (argc, argv).
Dan itu akan dilahirkan hujah baris arahan.
Dan apabila anda mendapat benar-benar canggih di ini, anda akan dapat untuk menulis
benar-benar trippy program, seperti yang satu ini di sini, yang pergi di atas dan di luar
beberapa fungsi yang kita lakukan setakat ini tetapi semua agak kuat.
>> Jadi kita akan meninggalkan ini dengan ini pada skrin.
Dan kita akan melihat anda pada hari Isnin.