>> [MUZIK bermain]
DAVID J. MALAN: Baiklah.
Ini adalah CS50, dan ini adalah akhir Minggu 2.
Jadi hari ini, kita akan untuk meneruskan rupa kami
bagaimana kita mewakili perkara-perkara bawah hood-- yang bergerak
dari nombor-nombor seperti integer dan terapung mata yang
dan memberi tumpuan kepada tali dan program akhirnya lebih menarik.
Tetapi kita juga akan melihat pada beberapa domain khusus problems--
pertama yang akan menjadi yang melibatkan kriptografi,
seni bergegas maklumat, di mana anda lihat di atas di sini
ialah gambar Radio Anak-Anak Yatim Annie cincin penyahkod rahsia daripada tadi.
>> Ini sebenarnya bentuk yang sangat primitif dan bentuk mesra kanak-kanak daripada cryptopgraphy
mana cincin ini mempunyai dua disks-- satu di dalam dan satu di luar.
Dan oleh berputar salah seorang daripada mereka, anda boleh dasarnya beratur huruf seperti A
melalui Z dengan huruf lain seperti B melalui A. Dalam erti kata lain,
anda dapat berputar abjad, dengan itu datang dengan pemetaan dari
surat kepada surat supaya, jika anda mahu menghantar mesej rahsia
kepada seseorang seperti Annie, anda boleh menulis ke bawah mesej anda dan kemudian berputar
huruf, di mana, jika anda bermakna untuk mengatakan "A," anda bukan berkata "B"
anda bermaksud untuk mengatakan "B" anda bukan berkata "C" -
atau sesuatu yang lebih pintar daripada bahawa- dan kemudian, akhirnya,
selagi Annie mempunyai decoder ini cincin, dia boleh decode mesej.
Sekarang, mana yang diketahui, sebenarnya, bahawa ini telah digunakan dalam filem yang sangat terkenal
memainkan iklan nauseum semasa musim Krismas.
Mari kita lihat di sini.
RALPHIE PARKER: "Sama ada diketahui oleh semua di dalam ringkasan
bahawa Ralph Parker dengan ini dilantik ahli Little Orphan Annie Rahsia
Circle dan adalah berhak kepada semua kepujian dan faedah yang berlaku dengannya. "
>> RALPHIE PARKER (menyampaikan): Ditandatangani Little Orphan Annie.
Balas, Pierre Andre!
Dengan dakwat.
Kepujian dan faedah, sudah pada usia sembilan.
>> [MUZIK bermain]
>> [RADIO Chatter]
RALPHIE PARKER: Datang pada.
Mari kita meneruskan ia.
Saya tidak perlu semua jazz yang mengenai penyeludup dan lanun.
RADIO juruhebah: Dengar esok malam untuk pengembaraan penutup yang
The Pirate Kapal Hitam.
Kini, sudah tiba masanya untuk Annie Mesej rahsia untuk anda ahli
daripada Circle Rahsia.
Ingat anak-anak, hanya ahli-ahli Rahsia Circle Annie
boleh decode mesej rahsia Annie.
>> Ingat, Annie adalah bergantung kepada anda.
Terletak pin anda untuk B-2.
Berikut adalah message-- 12, 11, 2--
RALPHIE PARKER (menyampaikan): Saya berada dalam mesyuarat rahsia pertama saya.
RADIO juruhebah: --25, 14, 11, 18, 16--
RALPHIE PARKER (menyampaikan): Oh, Pierre adalah pada malam ini suara besar.
Saya boleh mengatakan bahawa pada malam ini mesej adalah benar-benar penting.
>> RADIO juruhebah: --3, 25.
Itulah mesej dari Annie dirinya.
Ingat, jangan beritahu sesiapa.
>> [Jilat]
RALPHIE PARKER (menyampaikan): Sembilan puluh saat kemudian, saya
dalam bilik hanya dalam rumah di mana seorang budak sembilan
boleh duduk di privasi dan decode.
Ah.
"B."
>> [Tertawa kecil]
>> RALPHIE PARKER (menyampaikan): Saya pergi ke seterusnya.
"E."
Perkataan pertama adalah "menjadi."
Ya!
Ia akan datang lebih mudah sekarang.
"U."
>> [Tertawa kecil]
>> RANDY PARKER: Aw, datang, Ralphie.
Saya terpaksa pergi!
>> RALPHIE PARKER: Saya akan sampai, Ma.
Aduh.
"T." "O." "Pastikan kepada. "" Pastikan anda "apa?
Apakah Little Orphan Annie cuba katakan? "Pastikan anda" apa?
IBU: Ralphie, Randy telah mendapat pergi.
Adakah anda sila keluar?
>> RALPHIE PARKER: Baiklah, mama!
Saya akan keluar betul!
RALPHIE PARKER (menyampaikan): Saya semakin hampir sekarang.
Ketegangan itu amat dahsyat.
Apakah ia?
Nasib planet ini mungkin tergantung di kira-kira.
>> IBU: Ralphie, ini Randy mendapat untuk pergi!
>> RALPHIE PARKER: Saya akan menjadi hak keluarlah, menangis dengan kuat!
RALPHIE PARKER (Menyampaikan): Hampir sana!
Jari saya terbang!
Fikiran saya perangkap keluli.
Setiap liang digetarkan.
Ia adalah hampir jelas!
Ya!
>> RALPHIE PARKER: "Pastikan minum Ovaltine anda. "
Ovaltine?
A komersial yg tdk memuaskan?
>> [MUZIK bermain]
>> RALPHIE PARKER: Anak anjing betina a.
>> [KETAWA]
>> DAVID J. MALAN: Supaya maka sepintas lalu apa kriptografi
boleh untuk this-- minum dari tadi.
Jadi pengumuman yang cepat.
Jika ada masa lapang ini Jumaat di 13:15 dan akan
suka untuk menyertai kami untuk CS50 makan tengah hari, menuju ke URL ini di sini.
Siapa cepat, berkhidmat seperti biasa.
Tetapi dari masa ke masa, kami akan memastikan bahawa sesiapa yang yang ingin mengambil bahagian
boleh menjadualkan-bijaksana.
>> Jadi tali.
Kami mempunyai Zamyla-- yang kini anda telah bertemu yang paling mungkin
dalam Set Masalah 1-- yang nama dieja dengan itu.
Dan andaikan anda menaip namanya ke dalam program komputer itu
menggunakan sesuatu seperti getString.
Dalam usaha untuk mendapatkan semula mereka ketukan kekunci, bagaimana
kita pergi tentang mewakili tali, perkataan, perenggan,
atau pelbagai surat seperti ini di sini?
>> Kami berbual-bual masa akhir mengenai integer dan masalah
yang timbul dengan limpahan integer dan terapung mata yang
dan masalah yang timbul dalam ketepatan.
Dengan tali, kita sekurang-kurangnya mempunyai sedikit lebih fleksibiliti
kerana hanya strings-- dalam world-- sebenar
boleh menjadi cukup panjang sewenang-wenangnya.
Pretty pendek, cukup panjang.
Tetapi walaupun begitu, kita akan mendapati bahawa kadang-kadang komputer boleh
kehabisan ingatan dan tidak menyimpan rentetan cukup besar.
>> Tetapi untuk sekarang, mari kita mulakan untuk menggambarkan rentetan sebagai sesuatu di kotak-kotak
di sini.
Jadi enam seperti kotak, setiap yang mewakili watak atau "char."
Jadi ingat bahawa "char" - c-h-a-r-- adalah salah satu jenis data terbina dalam dalam C.
Dan apa yang baik adalah bahawa anda boleh menggunakan yang jenis sebagai blok bangunan,
sekeping teka-teki, jika anda akan, untuk membentuk Jenis yang lebih besar data yang kami akan terus
untuk memanggil "tali."
>> Kini, apa yang berguna tentang berfikir mengenai perkara-perkara seperti tali dengan cara ini?
Nah, ternyata bahawa kita boleh sebenarnya memanfaatkan struktur ini
untuk benar-benar mengakses aksara individu dengan cara yang cukup mudah.
Saya akan pergi ke depan dan mewujudkan fail yang dipanggil "stringzero.c,"
tetapi anda boleh memanggilnya apa sahaja yang anda suka.
Dan di laman web kursus adalah sudah contoh ini terlebih dahulu,
jadi anda tidak perlu menaip semua keluar.
>> Dan saya akan pergi ke depan dan pertama buat tidak sah utama int.
Dan dalam beberapa hari, kami akan mula mengusik selain
apa yang tidak sah di sini, mengapa ia int sebelah utama, dan sebagainya.
Tetapi untuk sekarang, mari kita terus untuk menyalin tampal itu.
>> Saya akan mengaku tali yang dipanggil s.
Dan saya akan pulang dari GetString apa sahaja jenis pengguna dalam.
Ini akan menjadi mudah program, tidak ada arahan,
Saya hanya akan membabi buta menjangkakan bahawa pengguna tahu
apa yang perlu dilakukan untuk memastikan ia mudah.
>> Dan sekarang saya akan mempunyai untuk gelung.
Dan dalam gelung untuk saya Saya akan mempunyai int i mendapat sifar.
Dan saya adalah, sekali lagi, hanya konvensyen, pembolehubah indeks pengiraan,
tetapi saya boleh memanggil ini apa sahaja yang saya mahu.
Saya akan melakukan i kurang than-- baik Nama Zamyla adalah enam huruf.
Jadi saya akan keras kod yang ada sekarang.
>> Kemudian i ++.
Dan kini bahagian dalam ini kerinting kawat gigi saya akan lakukan printf,
dan saya mahu untuk mencetak satu aksara pada satu masa.
Jadi saya akan menggunakan% c untuk mungkin pertama kali.
Dan kemudian saya ingin mencetak setiap watak pada baris sendiri.
Jadi saya akan meletakkan sedikit backslash n di sana.
Tutup quote.
>> Dan sekarang saya mahu melakukan sesuatu di sini.
Saya ingin mencetak surat tertentu dalam tali,
s, kerana saya iterating dari sifar ke atas sehingga enam.
Dalam erti kata lain, saya mahu mencetak watak i'th s.
Sekarang bagaimana saya boleh melakukan ini?
>> Juga sama seperti tempat di perwakilan ini di sini,
jenis, nampak tanggapan tinju surat, anda juga boleh berbuat demikian
sintaksis dalam C dengan hanya menyatakan, Saya ingin mencetak s i'th watak.
Dengan menggunakan kurungan persegi pada papan kekunci komputer anda
bahawa pada papan kekunci Amerika Syarikat adalah amnya melebihi kekunci kembali anda.
>> Jadi ini tidak berapa tepat lagi, kerana anda mungkin perasan.
Tetapi saya akan jenis secara membuta tuli terus maju di sini.
Dan saya akan melakukan membuat tali 0.
Tetapi sebelum saya melakukan ini, mari kita lihat jika kita tidak boleh menjangka beberapa kesalahan yang sama.
Adakah ini akan menyusun?
Tidak, saya hilang sejumlah besar perkara.
Perpustakaan saya dengar.
>> Jadi yang header fail mungkin saya ingin menambah di sini?
Yeah.
>> PENONTON: Anda perlu Saya standard / O [didengar]
>> DAVID J. MALAN: Cemerlang.
Jadi saya perlu standard I / O. Untuk apa tujuan saya mahu standard I / O?
Untuk printf.
Jadi termasuk stdio.h.
Dan anda juga mencadangkan bahawa saya termasuk perpustakaan CS50 itu untuk apa sebab?
Mempunyai tali.
Oleh itu, kita akan melihat apa yang Perpustakaan CS50 adalah melakukan
untuk mewujudkan tanggapan ini rentetan.
Tetapi untuk sekarang, anda hanya boleh berfikir ia sebagai jenis data sebenar.
>> Supaya seolah-olah sedikit yang dibersihkan.
Dan sekarang saya akan pergi ke depan dan sememangnya melakukan membuat tali 0.
Disusun.
Jadi itulah yang baik.
Jadi ./string0 biarlah saya mengezum masuk jadi kami boleh melihat dengan lebih dekat apa yang berlaku.
Enter.
Z-A-M-Y-L-A masuk.
Dan kami telah dicetak kepada nama Zamyla ini.
>> Jadi, itu cukup baik.
Jadi sekarang mari kita pergi ke depan dan menjalankan program ini lagi,
dan menaip nama penuh Daven ini.
Kejutan, kejutan.
Enter.
Hmm.
Kami tidak dicetak ini Daven Nama pertama penuh dengan betul.
Sekarang ini harus jelas dalam tinjauan ke belakang kerana apa,
semacam, keputusan reka bentuk bodoh?
>> Ya, saya keras berkod yang enam bahagian dalam gelung untuk saya.
Sekarang saya hanya kerana Saya tahu nama Zamyla ini
akan menjadi enam huruf.
Tetapi sudah tentu ini bukan penyelesaian umum.
Jadi ternyata kita boleh secara dinamik memikirkan panjang rentetan
dengan memanggil fungsi yang dipanggil strlen.
>> Sekali lagi, sengaja ringkas yang dinamakan hanya
untuk menjadikannya lebih mudah untuk menaip.
Tetapi itu sinonim dengan semakin panjang rentetan.
Saya akan kembali ke terminal saya tingkap dan semula menjalankan pengkompil.
Tetapi ia menjerit pada saya.
Tersirat mengisytiharkan fungsi perpustakaan strlen dengan jenis tidak ditandatangani int const--
Saya hilang.
Sepenuhnya.
>> Jadi, terutama kerana anda mata mula menjadi sayu lebih
dengan mesej ralat seperti ini, tumpuan jujur ​​pada beberapa perkataan pertama.
Kita tahu masalah ini adalah dalam baris 8, seperti yang ditunjukkan di sini.
Dan ia dalam rentetan-0.c.
Tersirat mengisytiharkan fungsi perpustakaan strlen.
Supaya biasanya akan menjadi corak mesej ralat.
Tersirat mengisytiharkan sesuatu.
>> Jadi ringkasnya, apa yang aku seolah-olah telah dilakukan berkenaan dengan beratur 8, di sini.
Apa yang mungkin menjadi penyelesaian menjadi lebih jika anda tidak pernah menggunakan strlen diri anda?
>> PENONTON: Sebahagian daripada perpustakaan yang berbeza?
DAVID J. MALAN: Bahagian perpustakaan yang berbeza.
Jadi adalah diisytiharkan, jadi untuk bercakap.
Ianya disebut dalam beberapa fail selain daripada stdio.h dan CS50.h.
Sekarang di mana ia ditakrifkan?
Secara jujur, anda sama ada perlu hanya tahu ini di luar bahagian atas kepala anda,
atau anda Google ini dan mengetahui.
Atau tahu ini, saya telah membuka dalam CS50 manakah peralatan program terminal, yang
adil, versi skrin penuh yang besar apa yang ada di bahagian bawah tetingkap gedit ini.
>> Dan ternyata bahawa terdapat arahan juga ringkas, yang dipanggil
lelaki untuk manual, di mana jika anda taip nama fungsi dan tekan Enter,
anda akan kembali dengan adil dokumentasi yang sukar difahami.
Ia hanya teks yang biasanya kelihatan sesuatu yang kecil seperti ini.
Ia sedikit hangat pada pandangan pertama.
Tetapi terus terang saya akan membiarkan mata saya menjadi sayu lebih
dan hanya memberi tumpuan kepada bahagian Saya mengambil berat tentang buat masa ini.
>> Yang ini.
Yang kelihatan seperti struktur sesuatu yang saya tahu.
Sesungguhnya halaman lelaki itu, jadi bercakap, akan memberitahu anda
dalam apa header memfailkan fungsi seperti strlen ditakrifkan.
Jadi saya akan kembali sekarang untuk gedit.
Dan saya akan pergi ke depan dan masukkan di sini #temasuk
dan menyimpan fail.
>> Saya akan mengosongkan skrin dengan Kawalan L Jika anda telah tertanya-tanya.
Dan saya akan berjalan semula make string.0, menyusun masa ini.
./string.0 Zamyla.
Yang seolah-olah untuk bekerja Biar saya pergi hadapan dan jalankan lagi dengan Davenport.
Enter.
Dan itu juga seolah-olah bekerja.
>> Oleh itu, kita boleh melakukan sedikit lebih baik daripada ini, walaupun, kita boleh mula perkara yang kemas
sehingga hanya sedikit.
Dan saya akan benar-benar memperkenalkan satu perkara lain sekarang.
Saya akan pergi ke depan dan menyelamatkan ini dalam fail yang berbeza.
Dan saya akan memanggil string1.c fail ini hanya
supaya selaras dengan kod anda akan dapat untuk mencari dalam talian.
>> Dan mari kita fokus pada kod sama.
Ia ternyata bahawa saya telah jenis menjadi pengambilan
untuk diberikan hakikat bahawa komputer riba saya, dan seterusnya, perkakas CS50
mempunyai banyak memori, banyak RAM, banyak bait ruang
di mana saya boleh menyimpan tali.
>> Tetapi realitinya jika saya menaip panjang mencukupi, dan cukup ketukan kekunci,
Saya boleh dalam jenis teori dalam lebih banyak aksara
daripada komputer saya secara fizikal mempunyai memori untuk.
Dan ini adalah bermasalah.
Sama seperti int satu hanya boleh mengira begitu tinggi, dalam teori,
anda hanya boleh mengasak begitu banyak aksara ke dalam RAM komputer anda atau Random
Access Memory.
>> Jadi saya telah menjangka lebih baik masalah ini, walaupun
walaupun ia mungkin yang jarang berlaku kes sudut, jadi untuk bercakap.
Tidak sering terjadi, boleh berlaku.
Dan jika ia berlaku dan saya tidak menjangka dan program untuk itu,
program saya boleh melakukan yang tahu apa.
Freeze, gantung, reboot, apa sahaja.
Sesuatu yang dijangka mungkin berlaku.
>> Jadi apa yang saya akan lakukan sekarang, selepas ini benar-benar,
adalah sebelum saya pernah membabi buta menggunakan pembolehubah seperti yang s
telah diberi nilai pulangan beberapa fungsi lain seperti getstring,
Saya akan memastikan yang nilainya sah.
Jadi saya tahu hanya dari setelah membaca Dokumentasi CS50 untuk getstring,
yang akhirnya kami akan menunjukkan anda di, getstring yang mengembalikan simbol khas
dipanggil NULL, N-U-L-L dalam semua topi, jika ada masalah.
>> Jadi biasanya, ia mengembalikan rentetan.
Tetapi sebaliknya jika ia kembali N-U-L-L-- akhirnya kita akan melihat apa yang benar-benar
ertinya-- bahawa hanya cara sesuatu yang buruk berlaku.
Sekarang ini bermakna, sama seperti dalam Scratch, Saya boleh memeriksa keadaan di sini dalam C,
jika s tidak NULL sama.
Jadi jika anda telah tidak dilihat sebelum ini, ini hanya bermaksud tidak sama.
>> Jadi ia bertentangan dengan setaraf sama, yang, ingat,
adalah berbeza dari satu sama, iaitu tugasan.
Jadi, jika s tidak sama NULL, barulah lakukan
Saya mahu melaksanakan ini baris kod.
Jadi dalam erti kata lain, sebelum saya menyelam di membabi buta
dan mula iterating lebih, dan merawat ia
seolah-olah ia adalah satu urutan aksara, saya akan periksa,
tunggu satu minit, adalah s pasti tidak sama dengan nilai yang istimewa ini, NULL?
>> Kerana jika ia adalah, perkara-perkara buruk boleh berlaku.
Dan sekarang, menganggap perkara-perkara yang tidak baik berlaku ertinya crash program anda,
dan anda tidak boleh semestinya pulih.
Jadi terus terang, ia kelihatan hodoh.
ia jenis mengelirukan sekarang untuk renungan.
Tetapi ini akan menjadi lebih biasa tidak lama lagi.
>> Tetapi saya akan mencadangkan kini satu peningkatan yang lain.
Itu satu peningkatan kepada kebenaran.
Program saya kini lebih betul, kerana dalam kes yang jarang berlaku bahawa memori tidak cukup
wujud, saya akan mengendalikan ia, dan saya akan melakukan apa-apa.
Saya sekurang-kurangnya tidak akan kemalangan.
>> Tetapi mari kita buat versi akhir di sini.
Dan fail yang dipanggil string2.c.
Saya akan paste yang kod yang sama untuk seketika,
dan saya akan mengetengahkan ini talian, 11, di sini, hanya seketika.
Sekarang realitinya adalah bahawa penyusun pintar seperti bunyi berdering boleh menetapkan ini untuk kita
di belakang tabir tanpa kita pernah mengetahui.
Tetapi mari kita berfikir tentang ini asas reka bentuk yang bermasalah.
>> Ini baris kod adalah, sudah tentu, berkata, memulakan beberapa pembolehubah i 0.
Itu cukup mudah.
Dan apa lagi ini adalah pernyataan, di sini, i ++, melakukan?
Kita lihat sebelum ini, tetapi kita tidak benar-benar bercakap mengenainya.
>> PENONTON: menokok i.
>> DAVID J. MALAN: menokok i.
Maka pada setiap lelaran melalui gelung ini, setiap kitaran,
anda menokok i demi satu.
Jadi ia menjadi lebih besar, dan lebih besar, dan lebih besar sehingga gelung tamat.
Bagaimana ia menamatkan?
Juga ada pertengahan ini syarat yang kami telah digunakan sebelum ini.
Anda telah melihat dan walkthroughs dalam P set.
>> Tetapi apa yang kata ini?
Adakah gelung berikut supaya selagi i adalah kurang daripada apa?
PENONTON: Panjang tali.
DAVID J. MALAN: The panjang tali.
Oleh itu, ia diterjemahkan secara bersih cantik ke Bahasa Inggeris dalam erti kata itu.
Sekarang masalahnya ialah bahawa setiap kali saya melelar melalui gelung ini dalam teori,
Saya bertanya soalan ini.
I adalah kurang daripada panjang tali s?
>> Sekarang i berubah pada setiap lelaran?
Ia adalah.
Kerana ++ itu.
Jadi setiap lelaran i semakin besar.
Tetapi s semakin besar, atau yang lebih kecil, atau menukar sama sekali?
No.
Jadi dari segi reka bentuk, salah satu paksi bersama-sama yang kita cuba untuk menilai kod
dalam kelas, ini berasa jenis bodoh.
>> Seperti anda secara harfiah, pada setiap lelaran
gelung ini meminta soalan bodoh sama sekali lagi,
dan sekali lagi, dan sekali lagi, dan benar-benar ia tidak akan berubah.
Sekurang-kurangnya jika saya tidak menyentuh dan cuba untuk menukar kandungan s.
Jadi saya boleh melakukan sedikit lebih baik daripada ini.
>> Dan apa yang saya akan lakukan tidak mengisytiharkan hanya satu pembolehubah i,
tetapi pembolehubah kedua saya akan sewenang-wenangnya, tetapi konvensional, memanggilnya n.
Berikan n sama dengan Panjang rentetan s.
Dan kemudian di sini, saya akan melakukan pengoptimuman sedikit pandai, jadi
untuk bercakap, bahawa pada akhir hari tidak ada lagi yang betul atau tidak kurang betul
daripada sebelumnya.
Tetapi ia reka bentuk yang lebih baik.
Malah yang saya menggunakan masa yang kurang, kurang kitaran CPU, jadi
untuk bercakap, untuk menjawab yang sama soalan, tetapi hanya sekali.
>> Apa-apa soalan pada umum yang prinsip yang bertambah baik,
berkata, kecekapan program ini?
Yeah?
PENONTON: Kenapa anda menggunakan [didengar]?
DAVID J. MALAN: Soalan yang baik.
Jadi, mengapa kita meletakkan ++ pada akhir i bukan permulaan i?
Dalam kes ini, ia mempunyai tidak memberi kesan berfungsi.
Dan secara umum, saya cenderung untuk menggunakan operator postfix yang
supaya ia sedikit lebih jelas apabila operasi yang sedang berlaku.
>> Bagi mereka yang tidak biasa, terdapat satu lagi kenyataan di mana anda boleh melakukan ++ i.
Ini adalah fungsi bersamaan dalam kes ini
kerana ada apa-apa lagi sekitar incrementation itu.
Tetapi anda boleh datang dengan kes dan baris kod
di mana yang membuat perbezaan.
Jadi secara amnya, kita tidak walaupun bercakap kira-kira satu ini.
Kerana terus-terang, ia membuatkan anda kod seksi, dan jenis penipu,
dan lebih sedikit.
Tetapi realitinya adalah ia banyak lebih keras, Saya fikir, walaupun bagi saya untuk membalut fikiran saya
sekitarnya kadang-kadang, perintah operasi.
Jadi sebagai diketepikan, jika anda benar-benar tidak suka ini,
walaupun ini adalah jenis seksi mencari, anda juga boleh melakukan i + = 1,
yang merupakan versi yang lebih hodoh daripada Idea yang sama untuk postfix incrementation.
>> Saya katakan ini dan anda perlu membuat suka-suka,
tetapi anda akan datang untuk melihat kod seperti sesuatu yang cantik tidak lama lagi.
>> [Ketawa]
>> DAVID J. MALAN: Betul?
Yeah.
Soalan di tengah-tengah.
>> PENONTON: Adakah anda perlu berkata int n?
DAVID J. MALAN: Anda boleh melakukan tidak perlu untuk mengatakan int n.
Jadi kerana kita sudah mengatakan int, anda tidak perlu untuk mengatakan ia sekali lagi.
Tangkapan adalah bahawa n perlu menjadi jenis data yang sama seperti i.
Jadi itu hanya kemudahan di sini.
Yeah.
>> PENONTON: Bolehkah anda pergi ke atas kurungan cetak watak s i lagi?
DAVID J. MALAN: Sudah tentu.
Jadi% c, ingat dari lepas masa, hanya satu pemegang tempat.
Ini bermakna meletakkan arang di sini.
backslash n, sudah tentu, hanya cara meletakkan satu baris di sini.
Supaya hanya meninggalkan, sekarang, ini sekeping sintaks baru.
Dan ini adalah benar-benar berkata, cekau tali yang dipanggil dan pergi mendapatkan mereka
watak i'th, jadi untuk bercakap.
>> Dan saya terus berkata watak i'th kerana pada setiap lelaran gelung ini
ia seolah-olah kita mencetak keluar, yang pertama kurungan 0,
sebagai programmer mungkin berkata.
Kemudian s kurungan 1, maka s kurungan 2, kemudian 3, kemudian 4.
Tetapi sudah tentu ia pembolehubah, jadi saya hanya menyatakan dengan i.
>> Utama, walaupun, adalah untuk menyedari, terutamanya jika anda tidak sudah
telah acclimating kepada dunia ini pengaturcaraan, di mana kita semua
seolah-olah mengira dari sifar, kena mula mengira dari sifar sekarang.
Kerana tali, watak pertama, z di Zamyla adalah untuk lebih baik atau untuk lebih teruk
akan hidup di nombor lokasi sifar.
>> Baiklah, jadi biarlah saya membawa kita kembali di sini untuk Zamyla
dan melihat apa yang benar-benar akan di bawah hood.
Jadi ada tanggapan ini jenis pemutus.
Anda mungkin benar-benar dimainkan dengan ini sudah,
mungkin untuk penggodam edisi P menetapkan satu.
Tetapi jenis pemutus hanya merujuk kepada keupayaan dalam C dan beberapa bahasa lain
untuk menukar satu jenis data yang lain.
>> Sekarang bagaimana kita mungkin melihat ini cukup terus terang?
Jadi ini, ingat, adalah permulaan daripada abjad Inggeris.
Dan konteks, ingat, dari seperti seminggu yang lalu adalah ASCII.
American Standard Code Maklumat Interchange.
Yang hanya satu cara yang benar-benar panjang daripada menyebut pemetaan dari surat
kepada nombor, dan dari nombor-nombor untuk surat.
>> Jadi A melalui M sini, dot dot dot, garis-garis dengan, ingat,
nombor perpuluhan 65 di atas.
Dan kita tidak bercakap tentang perkara ini dengan jelas,
tetapi tentu sekali ada yang serupa nombor bagi huruf kecil.
Dan sesungguhnya ada.
Dunia ini memutuskan beberapa tahun lalu bahawa sedikit satu, huruf kecil a,
akan menjadi 97.
Dan sedikit b akan menjadi 98, dan sebagainya.
>> Dan bagi apa-apa lain yang penting pada papan kekunci anda, ada
akan menjadi corak yang sama bit.
Atau setara, nombor perpuluhan.
Jadi soalan di tangan, maka, adalah bagaimana kita
benar-benar melihat ini di bawah hood?
Jadi, saya akan pergi ke gedit lagi.
Dan bukannya jenis satu ini dari awal,
Saya akan pergi ke depan dan hanya membuka sesuatu
dari kod hari ini dikenali sebagai ASCII sifar.
>> Dan ASCII sifar kelihatan seperti ini.
Jadi mari kita membalut fikiran kami di seluruh ini.
Oleh itu, saya telah ulas kod, yang mana ianya bagus.
Kerana ia benar-benar memberitahu saya apa yang diharapkan,
memaparkan pemetaan untuk huruf besar.
Sekarang saya tidak tahu apa yang saya maksudkan dengan itu, jadi mari kita membuat kesimpulan.
>> Dalam bahasa Inggeris, mungkin agak techie Bahasa Inggeris,
apakah talian 18 muncul yang akan lakukan untuk kita?
Hanya beratur 18.
Apa yang ia mendorong?
Apa yang ia akan bermula di sini?
>> PENONTON: gelung A.
>> DAVID J. MALAN: gelung A.
Dan berapa kali adalah yang akan melelar?
PENONTON: [INTERPOSING VOICES] enam kali.
DAVID J. MALAN: Tidak enam kali.
PENONTON: 26 kali.
DAVID J. MALAN: 26 kali.
Yeah, maaf.
26 kali.
Mengapa?
Nah, ia sedikit pelik, tetapi Saya mula mengira dari 65.
Yang pelik, tetapi tidak salah.
Ia bukan buruk setiap katakan.
Dan saya lakukan yang hanya kerana, sebagai contoh ini,
Saya jenis menjangkakan bahawa A modal adalah 65.
Sekarang ini tidak adalah yang paling elegan cara untuk melakukan ini, untuk jenis kod keras
nilai esoterik bahawa tidak ada sentiasa dijangka ingat.
>> Tetapi untuk sekarang, notis bahawa saya melakukan ini menerusi 65 plus 26.
Kerana nampaknya saya tidak mahu untuk melakukan aritmetik dalam kepala saya.
Jadi saya akan memberitahu pengkompil melakukannya.
Tetapi pada setiap gelung, setiap lelaran gelung, saya menokok i.
>> Jadi sekarang ini kelihatan sedikit samar.
Tetapi kita harus mempunyai binaan asas blok dengan yang memahami ini.
% C hanya pemegang tempat untuk char a.
% I adalah pemegang tempat untuk int satu.
Dan ternyata bahawa dengan menggunakan ini sintaks baru, kurungan ini, jadi
untuk bercakap, jadi jenis data di dalam kurungan yang,
Saya boleh memaksa pengkompil untuk merawat i bukan integer, tetapi sebagai char a.
>> Dengan itu menunjukkan saya watak bersamaan dengan jumlah itu.
Sekarang turun di sini, kod ini adalah cukup banyak yang sama.
Saya hanya mahu membuat super jelas fakta
bahawa saya bermula pada 97, yang huruf kecil a.
Pada menerusi 26 lebih huruf.
Dan saya doing-- lagi, pemutus i, jadi untuk bercakap.
Atau jenis pemutus i, jadi untuk bercakap.
>> Dari int untuk char a.
Jadi keputusan akhir akan menjadi, terus-terang, maklumat yang kami sudah tahu.
Saya akan membuat ascii-0 tidak dot-- dot c.
Notis, anda mungkin dibuat bahawa kesilapan kerana saya hanya lakukan secara tidak sengaja.
Buat ascii-0.
Sekarang saya akan melakukan ./ascii-0.
Saya akan zum masuk, dan malangnya ia akan tatal off skrin.
Tetapi kita lihat keseluruhan carta di mana satu peta kepada 97, b peta ke 98,
dan jika kita tatal ke atas lagi A, sudah tentu, peta ke 65.
Jadi ini adalah hanya untuk mengatakan bahawa apa yang kita telah berkhutbah,
terdapat kesetaraan ini, sebenarnya kes itu dalam realiti.
Jadi pengubahsuaian cepat ini.
Biar saya membuka ascii-1.c.
Dan notis ini pandai, jenis daripada, penjelasan ini.
Ini adalah ascii-1.c, dan perhatikan perkara ini gila.
>> Dan ini benar-benar mendapat ke jantung apa yang komputer lakukan.
Walaupun kita manusia akan tidak mengira dari segi letters--
Saya tidak mula berfikir, semua hak itu b,
dan menggunakan mereka untuk mengira objek fizikal.
Anda tentu boleh mengatakan bahawa saya ingin memulakan beberapa pembolehubah dipanggil c--
tetapi saya boleh dipanggil anything-- ini jadi c adalah dimulakan dengan modal A.
>> Kerana pada akhir hari, komputer tidak peduli apa yang anda menyimpan,
ia hanya mengambil berat bagaimana anda mahu membentangkan maklumat tersebut.
Bagaimana anda mahu komputer untuk mentafsir corak bit?
Jadi ini bukan sesuatu yang saya biasanya akan mengesyorkan lakukan.
Ia benar-benar hanya satu contoh untuk menyampaikan bahawa anda boleh benar-benar
memulakan integer untuk char a.
Kerana di bawahnya yang hood arang, sudah tentu,
hanya antara 0 hingga 255.
>> Jadi, anda boleh pasti meletakkannya di dalam sebuah int.
Dan apa ini juga menunjukkan bahawa kita adalah
boleh menukar dari satu menaip yang lain, di sini,
akhirnya mencetak perkara yang sama.
Dan sebenarnya, ini saya akan menetapkan online-- bertujuan untuk mengatakan ini, sekali lagi, di sini.
Biar saya membersihkan sehingga ini dalam talian, dan kita akan lihat dalam Walkthrough dalam talian seperti yang diperlukan,
apa yang dimaksudkan di sana.
>> OK.
Contoh Jadi lepas kini yang melibatkan a dan b dan kemudian kita akan
mengambil perkara sehingga takuk a.
Jadi dengan dan b dan c dalam permodalan
dan kesetaraan kepentingannya itu, mari kita kita lihat pada contoh ini, di sini.
Satu lagi contoh kod.
Kami akan membuka satu itu sudah dibuat, jadi kami
tidak perlu taip semua keluar dari awal.
>> Dan perhatikan pada menjangkakan kita menggunakan header pelbagai
gambar, antaranya ialah rakan baru kami, string.h.
Sekarang ini kelihatan, pada mulanya sepintas lalu, sedikit samar.
Tetapi mari kita lihat jika kita tidak boleh sebab melalui apa yang sedang berlaku di sini.
Pertama saya mendapat rentetan daripada pengguna, dan saya meletakkan tali yang dalam pembolehubah yang
dipanggil s.
Copy paste dari sebelum.
Selaras 22, saya nampaknya melakukan apa yang
Saya masa lalu, saya iterating lebih watak-watak dalam s.
>> Dan helah baru di sini menggunakan panjang tali, pengoptimuman kecil
menyimpan panjang tali di n, bukan laungan strlen lagi,
dan sekali lagi, dan sekali lagi.
Dan hanya memeriksa bahawa saya adalah kurang daripada n.
Sekarang, hal-hal yang sedikit menarik.
Tetapi ia hanya permohonan ini idea baru sama.
Apa yang dalam bahasa Inggeris tidak s kurungan i mewakili?
>> PENONTON: Mengira setiap watak [didengar].
>> DAVID J. MALAN: Mengira setiap aksara.
Dan yang lebih ringkas, s kurungan i mewakili apa?
Anda akan katakan.
Tidak meletakkan anda di tempat kejadian di sini.
>> PENONTON: Well--
DAVID J. MALAN: Jadi, jika perkataan is-- jika tali adalah Zamyla, yang starts--
PENONTON: --you menangani watak-watak separately--
DAVID J. MALAN: Baik.
Tepat sekali.
Catatan kurungan persegi membolehkan anda untuk mengakses setiap watak secara individu,
jadi s kurungan 0 akan menjadi watak pertama dalam string.
s kurungan 1 akan menjadi kedua, dan sebagainya.
Jadi soalan yang saya bertanya, di sini, dalam keadaan ini adalah apa?
Adalah watak i'th s lebih besar daripada atau sama dengan huruf kecil a?
Dan apakah ini bermakna, di sini, dengan ampersands berganda?
PENONTON (BERSAMA): Dan.
DAVID J. MALAN: Dan.
Ia hanya bersamaan dengan ini.
Dan bukan kata kunci dalam C, anda perlu penggunaan, annoyingly, Ampersand Ampersand.
Dan ini, sebaliknya, meminta adalah s i'th watak kurang daripada atau sama
kepada huruf kecil z?
Dan sekali lagi, di sini di mana memahami asas
pelaksanaan komputer masuk akal.
Perhatikan bahawa, walaupun saya mempunyai dot dot dot di sana,
kelihatan seperti melalui z dalam huruf kecil adalah semua nilai berdampingan meningkat daripada 97 pada up.
>> Dan sama untuk huruf besar bermula 65.
Jadi bisa dibesarkan, kemudian, ialah dalam Bahasa Inggeris,
bagaimana anda menggambarkan apa talian 24 lakukan?
Yeah?
>> PENONTON: Pada 24 ia memeriksa untuk melihat sama ada setiap aksara adalah huruf kecil a.
DAVID J. MALAN: Ia memeriksa sama ada setiap aksara adalah huruf kecil.
Jadi lebih ringkas, adalah watak i'th s huruf kecil?
Itu semua kami menyatakan di sini secara logik,
sedikit cryptically, tetapi akhirnya cukup terus terang.
Adalah s i'th huruf kecil watak?
>> Jika ya, dan di sini di mana perkara mendapatkan fikiran sedikit lenturan
untuk seketika, jika demikian, pergi hadapan dan mencetak watak.
Jadi ini adalah hanya satu pemegang tempat, tetapi apa yang watak?
Kenapa saya melakukan s kurungan i tolak ungkapan ini di sini?
>> Nah notis corak di sini.
Nombor-nombor yang sebenarnya tidak penting begitu banyak.
Tetapi melihat bahawa 97 adalah bagaimana jauh dari 65?
>> PENONTON: 32.
>> DAVID J. MALAN: 32.
Berapa jauh 98 daripada 66?
>> PENONTON: 32.
>> DAVID J. MALAN: Little c dari C besar?
32.
Jadi ada 32 hop dari satu huruf yang lain.
Jadi terus terang saya, boleh memudahkan ini untuk itu.
Tetapi saya jenis keras pengekodan pemahaman yang rendah ini
bahawa tidak ada pembaca yang pernah akan faham.
Jadi saya akan umum sebagai, saya mengetahui huruf kecil adalah lebih besar.
Saya tahu huruf besar adalah nilai-nilai yang lebih kecil, ironinya.
>> Tetapi ini adalah bersamaan dengan berkesan berkata tolak 32 dari kurungan s i.
Jadi, dalam konteks ini surat, jika huruf yang
berlaku untuk menjadi, huruf kecil , dan saya tolak 32,
apa kesan adakah itu perlu, matematik, pada huruf kecil a?
PENONTON: Capitalizes--
DAVID J. MALAN: kesempatan itu.
Dan sesungguhnya, ini adalah mengapa kami program dipanggil kesempatan sifar.
Program ini sama ada memanfaatkan surat,
selepas memeriksa jika ia sesungguhnya huruf kecil.
Jika tidak, selaras 30, apa yang perlu saya lakukan jika ia bukan huruf kecil bahawa saya
melihat pada khususnya lelaran dalam gelung.
Hanya mencetak.
>> Jadi jangan menukar barangan bukan itu walaupun kecil.
Hadkan diri anda untuk sedikit melalui sedikit z.
Sekarang ini agak sukar difahami.
Tetapi pada akhir hari, ini ialah bagaimana kita, suatu masa dahulu,
terpaksa melaksanakan perkara.
Jika saya bukan tak terhad kesempatan satu, oh terima kasih tuhan.
Ada fungsi dipanggil untuk atas yang boleh
melakukan segala yang kita lakukan pada tahap yang agak rendah.
>> Sekarang untuk bahagian atas yang menarik kerana ia diisytiharkan dalam fail,
dan anda hanya akan tahu ini dengan memeriksa dokumentasi,
atau diberitahu, katakan, di dalam kelas, di mana ia wujud, dalam fail yang dipanggil ctype.h.
Jadi ini adalah satu lagi rakan baru kita.
Dan atas tidak tepat apa namanya.
>> Anda boleh lulus dalam, sebagai hujah, antara kurungan ini, beberapa watak.
Saya akan lulus dalam watak i'th daripada s menggunakan notasi mewah baru
melibatkan kurungan persegi.
Dan mengambil tekaan, apakah pulangan nilai ke atas nampaknya akan
menjadi?
Surat modal.
>> Jadi, jika saya meninggal dalam huruf kecil a, mudah-mudahan, dengan definisi ke bahagian atas,
ia akan kembali satu huruf besar A. Jika tidak,
jika ia bukan huruf kecil dalam tempat pertama, saya hanya mencetak.
Dan sesungguhnya, notis rakan kedua di sini.
Tidak hanya untuk atas wujud, tetapi lebih rendah, yang
sebenarnya menjawab soalan itu untuk saya.
>> Sekarang sesiapa yang telah menulis perkara-perkara ini, 10s tahun yang lalu, anda tahu apa?
Dilaksanakan untuk bahagian atas dan lebih rendah dengan menggunakan kod seperti ini.
Tetapi sekali lagi, selaras dengan idea ini pengabstrakan jauh,
jenis, tahap yang lebih rendah butir-butir pelaksanaan.
Dan berdiri di atas bahu orang yang mendahului kami, dengan menggunakan fungsi
seperti ke atas dan lebih rendah, yang cukup hebat adalah baik
dinamakan untuk mengatakan apa yang mereka lakukan, adalah paradigma yang indah untuk menerima pakai.
>> Kini, ternyata bahawa jika saya membaca halaman lelaki untuk, katakan, untuk atas,
Saya belajar sesuatu yang lain.
Jadi lelaki toUpper.
Ia sedikit hangat.
Tetapi notis, di sini yang menyebut fail header yang harus saya gunakan.
Sebagai mengetepikan, kerana ini mengelirukan, fungsi
menggunakan ints bukannya aksara atas sebab-sebab memeriksa kesilapan.
Tetapi kita mungkin akan datang kembali ke bahawa pada masa akan datang.
>> Tetapi perhatikan, di sini, untuk memeluk atas huruf c kepada huruf besar jika boleh.
Jadi, itu cukup mudah.
Dan sekarang mari kita menjadi sedikit lebih khusus.
Mari kita melihat sebahagian daripada Laman lelaki di bawah nilai pulangan.
Nilai kembali ialah surat yang ditukar.
Atau c, jika penukaran tidak mungkin,
di mana c adalah input yang asal.
Yang saya tahu dari sini, dari hujah untuk ke atas.
>> Jadi apa yang bisa dibesarkan ini?
Nilai kembali ialah surat yang ditukar,
atau c, surat asal, jika penukaran tidak mungkin.
Apa penambahbaikan boleh saya oleh itu membuat reka bentuk kod saya?
Yeah?
>> PENONTON: Anda boleh mengeluarkan lain itu.
DAVID J. MALAN: Saya boleh mengeluarkan satu kenyataan yang lain,
dan bukan hanya pernyataan lain.
>> PENONTON: Anda boleh mengeluarkan [didengar].
>> DAVID J. MALAN: Saya boleh memindahkan keseluruhan garpu
di jalan, jika yang lain sama sekali.
Jadi sesungguhnya, saya membuka versi akhir ini,
kesempatan-2 dan perhatikan betapa, jika anda akan, seksi, kod itu kini mendapat,
dalam bahawa saya telah berkurangan daripada beberapa tujuh atau lebih garisan hanya empat,
fungsi yang saya bertujuan dengan hanya menghubungi ke atas,
lulus dalam s kurungan i, dan percetakan keluar, dengan pemegang tempat% c,
bahawa watak tertentu.
>> Sekarang boleh dikatakan, terdapat pepijat, atau sekurang-kurangnya risiko pepijat,
dalam program ini.
Jadi, untuk kembali untuk bisa dibesarkan sebelum ini,
apa yang perlu saya mungkin juga boleh dilakukan di program ini untuk menjadikannya lebih mantap,
supaya tidak ada cara ia boleh crash, walaupun dalam kes-kes yang jarang berlaku?
PENONTON: Pastikan ia bukan NULL.
DAVID J. MALAN: Pastikan ia bukan NULL.
Jadi benar-benar, untuk membuat super ini betul, saya perlu melakukan sesuatu seperti,
jika s tidak NULL, maka pergi ke depan dan melaksanakan
ini baris kod, yang Saya kemudiannya boleh inden seperti itu,
dan kemudian dimasukkan ke dalam pendakap rapat saya.
Jadi baik mengikat bersama-sama kedua-dua idea.
Yeah?
PENONTON: Bolehkah anda menggunakan yang dilakukan semasa gelung, bukan?
DAVID J. MALAN: Bolehkah Saya melakukan tugasan manakala gelung?
PENONTON: --you ingin memastikan bahawa anda sebenarnya [didengar].
DAVID J. MALAN: Bolehkah anda menggunakan do semasa?
Jawapan pendek, tidak.
Kerana anda kira-kira untuk memperkenalkan kes sudut lain.
Jika tali itu adalah panjang sifar.
Jika misalnya, saya hanya melanda Masukkan, tanpa menaip Zamyla.
Saya akan menyerahkan kamu sebenar string, seperti yang kita akhirnya akan melihat,
yang mempunyai sifar aksara.
Ia masih rentetan, ia hanya super pendek.
Tetapi jika anda menggunakan do semasa, anda akan secara membuta tuli
cuba untuk melakukan sesuatu dengan menghormati kepada rentetan itu,
dan tiada apa yang akan berada di sana.
>> PENONTON: Nah, jika anda lakukan melakukan [didengar] semasa s--
DAVID J. MALAN: Oh saya lihat, menyimpan mendapatkan rentetan daripada pengguna.
Jadi jawapan pendek, anda boleh, dan menyimpan pestering
mereka untuk memberikan anda tali itu cukup pendek untuk dimuatkan dalam ingatan.
Sama sekali.
Saya memilih untuk tidak.
Jika mereka tidak memberikan saya tali Saya mahu, saya berhenti, saya berputus asa.
Tetapi benar-benar, bagi maksud itu, anda benar-benar boleh melakukannya.
>> Jadi gambar header perpustakaan yang kami kini adalah biasa dengan ini, di sini.
Standard I / O, CS50.h, string.h, ctype.h, dan ada, sesungguhnya, orang lain.
Sebahagian daripada anda telah menemui perpustakaan matematik dalam math.h.
Tetapi biarlah saya memperkenalkan anda, sekarang, untuk sumber ini bahawa kakitangan CS50, Davin,
dan Rob dan Gabe tertentu telah meletakkan bersama-sama.
Yang tidak lama lagi akan menghubungkan pada laman web kursus ini.
Ia dipanggil rujukan CS50.
>> Yang hanya untuk memberikan anda cepat rasa itu, kerja-kerja seperti berikut.
Biar saya pergi ke reference.cs50.net.
Anda akan lihat di kiri sisi senarai hangat
fungsi yang datang dengan c.
Tetapi jika saya mengambil berat, buat masa ini, tentang sesuatu seperti strlen,
Saya boleh menaip di sana.
Ia menapis ke bawah senarai hanya apa yang saya mengambil berat tentang.
Saya akan klik.
Dan kini di sebelah kiri, anda akan melihat apa yang kita harapkan
adalah lebih mudah, manusia penjelasan tentang bagaimana
fungsi ini berfungsi.
>> Kembali panjang rentetan.
Berikut adalah sinopsis di sini adalah bagaimana anda menggunakannya dari segi fail pengepala,
dan dari segi apa fungsi kelihatan seperti dari segi hujah-hujah itu.
Dan kemudian di sini, pulangan panjang rentetan.
Tetapi bagi anda lebih selesa, anda sebenarnya boleh klik lebih selesa,
dan kandungan ini halaman, sekarang, akan berubah
menjadi nilai lalai daripada apa yang anda dengan menggunakan halaman lelaki itu.
>> Dalam erti kata lain, CS50 rujukan adalah pemudahan yang
halaman manusia oleh kakitangan, untuk pelajar.
Terutama sekali, mereka yang kurang selesa dan di antara, supaya anda
tidak perlu cuba untuk membalut fikiran anda sekitar, terus-terang,
beberapa sintaks yang agak samar dan dokumentasi kadang-kadang.
>> Jadi ingatlah bahawa dalam fikiran pada hari-hari akan datang.
Jadi di sini, sekali lagi, adalah Zamyla.
Sekarang mari kita bertanya soalan itu lebih sedikit manusia diakses.
Terima kasih kepada Chang, yang sudah mencetak lebih banyak gajah
tanpa henti untuk beberapa hari lepas.
Kami mempunyai peluang untuk memberikan sekurang-kurangnya salah seorang daripada mereka dari sini.
Jika kita boleh mendapatkan hanya satu sukarelawan datang pada sehingga menarik pada skrin.
Bagaimana pula di sini?
>> Marilah naik.
Apakah nama anda?
ALEX: Alex.
DAVID J. MALAN: Alex.
Baiklah.
Alex, datang ke atas.
Kami kira-kira untuk melihat anda tulisan tangan pada skrin di sini.
Baiklah, baik untuk bertemu dengan kamu.
>> ALEX: Nice anda bertemu dengan kamu.
>> DAVID J. MALAN: Baiklah.
Jadi, senaman super mudah.
Bar tidak tinggi untuk mendapatkan gajah hari ini.
Anda memainkan peranan getstring.
Dan saya akan memberitahu anda hanya rentetan yang anda telah mendapat.
Dan andaikan bahawa anda, getstring, telah dipanggil.
Dan manusia, seperti saya, mempunyai ditaip Zamyla, Z-A-M-Y-L-A.
Hanya pergi ke hadapan dan menulis Zamyla pada skrin seolah-olah anda telah mendapat ia
dan disimpan di suatu tempat dalam ingatan.
>> Meninggalkan bilik untuk apa yang akan menjadi beberapa words-- lain itu OK, menyimpan berterusan.
>> [Ketawa]
>> Jadi Zamyla, Cemerlang.
Jadi sekarang andaikan bahawa anda, getstring, dipanggil lagi.
Oleh itu, saya memberikan anda, di papan kekunci, dengan nama yang lain, Belinda.
Baiklah.
Dan kini getstring masa seterusnya adalah dipanggil, saya menaip dalam sesuatu seperti Gabe,
G-A-B-E. Anda benar-benar mengambil hati memori akses rawak.
Yang menarik segala-galanya sepenuhnya secara rawak.
OK.
>> [Ketawa]
ALEX: Maaf tulisan tangan saya yang buruk.
DAVID J. MALAN: Tidak, itu OK.
Dan bagaimana pula Rob, R-O-B. OK.
Baik.
Jadi, saya tidak menjangka anda jenis meletakkan perkara-perkara di luar dengan cara ini.
Tetapi kita boleh membuat kerja-kerja ini.
Jadi bagaimana anda pergi tentang meletakkan daripada aksara ini dalam ingatan?
Dalam erti kata lain, jika kita memikirkan skrin hitam segi empat tepat
sebagai mewakili RAM atau memori komputer.
>> Dan ingat RAM yang hanya sejumlah besar bytes,
dan bait adalah sejumlah besar bit.
Dan entah bagaimana bit dilaksanakan, secara amnya
dengan beberapa bentuk elektrik dalam perkakasan.
Jadi itulah jenis yang lapisan kami telah berbincang mengenai
dan kini boleh mengambil untuk diberikan.
Bagaimana anda pergi tentang membuat keputusan di mana untuk menulis
Rob lawan Gabe lawan Belinda lawan Zamyla?
>> ALEX: Saya hanya melakukannya dalam memerintahkan supaya anda memberitahu saya.
>> DAVID J. MALAN: Dan yang benar.
Tetapi apa yang ditadbir di mana anda meletakkan Nama Belinda dan nama Gabe ini?
>> ALEX: Tiada apa-apa?
DAVID J. MALAN: [Ketawa] Jadi yang bekerja, itu denda.
Jadi komputer adalah sedikit lebih teratur daripada itu.
Dan apabila kita implement-- tinggal di sana hanya moment-- apabila kita benar-benar
melaksanakan sesuatu seperti getstring dalam komputer,
Zamyla mungkin diletakkan cukup banyak seperti yang anda lakukan pada skrin, di sana.
>> Dan apa yang penting kepada notis di sini, apa yang Alex lakukan,
adalah terdapat jenis penandaan yang antara setiap kata-kata ini, bukan?
Anda tidak menulis Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B--
dalam erti kata lain, ada beberapa jenis penandaan yang seolah-olah,
jenis, jarak rawak antara pelbagai kata-kata.
Tetapi itu baik, kerana kita manusia kini boleh
menggambarkan bahawa ini adalah empat tali berbeza.
Ia bukan hanya satu urutan lot aksara.
Jadi komputer, maka, sementara itu, mungkin mengambil rentetan seperti Zamyla,
meletakkan setiap orang surat di dalam satu bait memori.
Tetapi bilangan yang lebih besar, sudah tentu, daripada enam aksara.
>> Ada sejumlah besar RAM.
Dan selepas ini, ini grid kotak akan
untuk mewakili apa yang Alex hanya lakukan di sini pada skrin.
Dan sekarang, Alex, kita boleh menawarkan anda biru atau gajah oren dari Chang.
ALEX: Saya akan mengambil gajah biru.
DAVID J. MALAN: Seekor gajah biru.
Jadi satu pusingan besar tepukan, jika kita boleh, untuk Alex sini.
>> [Tepuk tangan]
>> ALEX: Terima kasih.
DAVID J. MALAN: Terima kasih.
Jadi bisa dibesarkan adalah bahawa, walaupun corak jenis berubah mengikut masa, di sini
di papan, terdapat ini penandaan antara tali pelbagai
Alex yang mendapat untuk kita.
Sekarang komputer, terus-terang, boleh melakukan perkara yang sama.
Mereka jenis boleh mencebur tali mana-mana sahaja dalam RAM.
Di sini, di sini, turun di sini, di sini.
>> Mereka boleh melakukan perkara tersebut.
Tetapi, sudah tentu, itu mungkin tidak perancangan yang terbaik.
Betul?
Jika saya bertanya kepada Alex untuk mendapatkan nama, mungkin dia akan
meletakkan lebih ke bawah di sini, mungkin sehingga di sini, di sini, di sini, akhirnya
di sini.
Tetapi dengan perancangan sedikit lebih, sudah tentu, kita boleh meletakkan perkara-perkara di luar lebih bersih.
Dan sesungguhnya, itulah yang komputer tidak.
>> Tetapi tangkapan adalah bahawa jika rentetan seterusnya saya mendapat
selepas Zamyla sesuatu seperti Belinda,
mencadangkan di mana kita menulis surat b berkenaan dengan grid ini?
Di mana anda akan pergi?
Di sebelah kanan yang itu, bawah z, di bawah satu ini?
Apa yang naluri pertama anda menjadi?
PENONTON: Di bawah z.
DAVID J. MALAN: Jadi di bawah z.
Dan yang cukup mudah, bukan?
Ia adalah jenis kemas, ia adalah apa yang kita lakukan pada papan kekunci apabila kita tekan Enter,
atau e-mel apabila membuat senarai bullet perkara.
Tetapi realitinya adalah bahawa komputer cuba untuk menjadi lebih cekap,
dan menjejalkan pasti sebanyak data ke dalam RAM yang mungkin,
supaya anda tidak membuang apa-apa bait.
Supaya anda tidak membazir apa-apa estet skrin sebenar.
Dan masalah itu, walaupun, adalah bahawa jika kita benar-benar meletakkan surat itu
b selepas, bagaimana kita akan tahu di mana nama Zamyla ini berakhir
dan nama Belinda bermula?
Jadi, anda hanya manusia zaman dicadangkan, baik, tekan kekunci Enter, pada dasarnya.
Meletakkannya di bawah.
Atau walaupun Alex lakukan, hanya mula menulis nama yang akan datang di bawah yang sebelumnya,
dan di bawah satu itu, dan kemudian di bawah satu itu.
Itu merupakan isyarat visual.
>> Komputer mempunyai satu lagi petunjuk visual, tetapi ia sedikit lebih ringkas.
Ia watak funky ini.
Garis sendeng terbalik 0, yang mungkin mengingatkan backslash n,
dan sebagainya, kini.
Urutan melarikan diri khas.
Garis sendeng terbalik 0 adalah cara mewakili lapan bit sifar berturut-turut.
0000 0000.
>> Cara anda menyatakan bahawa tidak adalah mencecah bilangan yang sifar pada papan kekunci anda,
kerana sebenarnya yang merupakan char ASCII.
Ia kelihatan seperti nombor, tetapi sebenarnya nombor perpuluhan
yang mewakili pekeliling glif, muka taip yang bulat.
Sementara itu, garis sendeng terbalik sifar bermakna, secara literal
meletakkan lapan sifar bait di sini untuk saya.
>> Jadi ini agak sewenang-wenangnya.
Kita boleh telah menggunakan apa-apa corak bit, tetapi dunia
memutuskan beberapa tahun lalu, yang mewakili
akhir rentetan dalam ingatan, hanya meletakkan sejumlah besar sifar.
Kerana kita dapat mengesan itu.
Sekarang ini bermakna bahawa tidak ada surat yang abjad boleh diwakili dengan sifar.
>> Tetapi itu OK, kita sudah dilihat bahawa kita menggunakan 65 di dalam 97 di atas.
Kami tidak mendapat mana-mana sahaja ditutup kepada semua sifar.
Jadi Belinda dalam ingatan komputer sebenarnya akan pergi di sini.
Saya tertarik dalam kuning hanya untuk menarik perhatian kita kepadanya.
Dan notis, juga, ini benar-benar sewenang-wenangnya.
Saya telah disediakan sebagai grid.
Seperti, RAM hanyalah beberapa objek fizikal.
Ia tidak semestinya mempunyai baris dan lajur, per se.
Ia hanya mendapat sejumlah besar bytes dilaksanakan dalam perkakasan entah bagaimana.
Tetapi jika selepas Belinda saya tulis nama Gabe itu,
dia akan berakhir di sini dalam ingatan, dan jika saya tulis nama Daven ini,
misalnya, dia akan berakhir di sini.
Dan saya boleh terus menulis lebih nama.
>> Malangnya, jika saya cuba untuk tulis nama yang super panjang,
Saya akhirnya mungkin kehabisan ingatan.
Di mana, getstring adalah akan kembali NULL, seperti yang kita katakan.
Tetapi bersyukur, sekurang-kurangnya ini visual di sini, kami tidak mendapatkan cukup yang jauh.
>> Sekarang apa yang baik adalah bahawa ini idea merawat perkara
sebagai dalam kotak adalah wakil ciri C
dan banyak bahasa, dikenali sebagai array.
Pelbagai adalah satu lagi jenis data.
Ia adalah satu struktur data, jika anda akan.
Struktur dalam erti kata ia benar-benar, jenis, kelihatan seperti kotak, sekurang-kurangnya
dalam fikiran anda.
Pelbagai adalah berdampingan urutan jenis data yang serupa,
kembali ke belakang untuk kembali ke belakang.
>> Jadi tali, dalam lain kata-kata, adalah pelbagai aksara.
Pelbagai watak-watak.
Tetapi ternyata anda boleh mempunyai tatasusunan tandan perkara.
Malah, kita boleh meletakkan walaupun nombor dalam array.
Jadi bentuk yang kita akan memulakan
mengisytiharkan data ini struktur yang dikenali sebagai array
juga akan menggunakan kurungan persegi.
Tetapi kurungan persegi akan mempunyai makna yang berbeza dalam konteks ini.
>> Dan mari kita lihat ia seperti berikut.
Katakan saya membuka satu fail baru di sini.
Dan menyimpan ini sebagai ages.c.
Dan saya akan menyimpan ini dalam folder saya di sini.
Dan sekarang saya akan pergi ke depan dan mula menaip sesuatu
seperti termasuk CS50.h, termasuk stdio.h, int tidak sah utama.
Dan kemudian di dalam di sini, saya mahu untuk pertama mempunyai int dipanggil umur.
>> Dan saya akan menggunakannya untuk mendapatkan int dari pengguna untuk umur mereka.
Tetapi program ini yang dimaksudkan untuk digunakan oleh ramai orang, atas apa jua konteks.
Saya ada garis orang.
Kesemua mereka perlu menaip dalam mereka umur mungkin beberapa, saya tidak tahu,
persaingan, atau peristiwa bahawa mereka telah tiba untuk.
Jadi orang yang akan datang, saya perlu berubah-ubah yang lain.
>> Kerana jika saya hanya melakukan umur mendapat getInt, itu
akan memukul berkali-kali, atau menulis ganti umur orang yang sebelumnya.
Jadi, itu tidak baik.
Jadi naluri pertama saya mungkin, oh, semua hak,
jika saya ingin mendapatkan beberapa rakyat ages-- mari kita memanggil age1 ini,
int age2 mendapat int, int age3 mendapat getInt.
Dan sekarang saya akan menggunakan kod pseudokod beberapa di sini.
>> Lakukan sesuatu dengan nombor-nombor.
Kami akan meninggalkan untuk hari yang lain apa yang yang kami lakukan di sana, kerana kami hanya
menjaga masa ini mengenai age1, age2, age3.
Malangnya, sebaik sahaja saya menyusun program ini
dan meletakkannya di hadapan pengguna sebenar, apa yang reka bentuk asasnya miskin
keputusan saya seolah-olah telah dibuat?
Yeah?
PENONTON: [didengar]
DAVID J. MALAN: Ya, Saya tidak cuba
untuk memikirkan berapa banyak peringkat umur saya benar-benar mengambil berat tentang?
Jika saya mempunyai kurang daripada tiga orang di sini, dan oleh itu kurang daripada tiga peringkat umur,
Saya masih membuta tuli menjangkakan tiga.
Allah melarang empat orang muncul.
Program ni hanya akan tidak menyokong mereka.
>> Dan hal ini, cerita lama pendek, bukan tabiat yang baik.
Betul?
Saya pada dasarnya menyalin dan paste kod dan hanya Tweaker
nama-nama yang berubah-ubah.
Dan, Tuhan saya, jika anda mempunyai, bukan tiga peringkat umur, tetapi 10, atau 100, atau 6,500
mahasiswa, misalnya.
Ini tidak akan menjadi terutamanya kod elegan, atau mapan.
Anda akan perlu menulis semula program ini setiap kali
nombor orang perubahan.
>> Jadi, Alhamdullillah di sebenar kami Fail ages.c untuk hari ini,
kita mempunyai penyelesaian yang lebih pandai.
Pertama, saya akan meminjam membina kami telah menggunakan beberapa kali,
ini dilakukan semasa gelung, untuk mendapatkan bilangan orang-orang di dalam bilik.
Saya hanya akan mengganggu pengguna, sekali lagi dan sekali lagi, sehingga dia memberikan saya
nilai n itu integer positif.
>> Saya boleh digunakan, lalu masa ini mendapatkan int positif.
Tetapi kita tidak perlu yang untuk sebenar, jadi saya pergi ke hadapan
dan dilaksanakan semula idea ini.
Sekarang turun di sini, ini adalah silap mata baru.
Selaras 27, sebagai komen selaras 26 mencadangkan,
mengisytiharkan array di mana untuk menyimpan umur semua orang.
>> Jadi jika anda mahu untuk mendapatkan, tidak satu int, tidak dua ints, tetapi sejumlah besar ints.
Secara khusus n integer, n ialah mungkin tiga, mungkin 100, mungkin 1000.
Sintaks, agak mudah, adalah untuk katakan, apa jenis data yang anda mahu?
Apa yang anda mahu untuk memanggil bahawa sebahagian memori?
Apa yang anda mahu untuk memanggil grid yang kelihatan seperti ini bergambar?
>> Dan dalam kurungan di sini, kamu katakan berapa besar anda mahu array untuk menjadi.
Dan lebih awal, apabila saya berkata, sintaks adalah sedikit berbeza di sini,
kami masih menggunakan kurungan persegi, tetapi apabila saya mengisytiharkan array,
bilangan bahagian dalam kurungan persegi cara
berapa besar anda mahu array untuk menjadi.
>> Sebaliknya, apabila kita telah menggunakan s kurungan i masa yang lalu, s, tali,
memang pelbagai aksara, tetapi apabila anda tidak mengisytiharkan pembolehubah,
seperti dengan kata kunci ini di sini, anda hanya mendapat
indeks tertentu, tertentu unsur dari pelbagai itu.
Setelah kita tahu bahawa, selebihnya ini adalah mudah.
Jika baru saya pertama akan mencetak apa yang usia bilangan orang i.
Di mana saya hanya mengatakan beberapa orang satu, bilangan orang dua, nombor tiga orang.
>> Dan saya hanya melakukan aritmetik, supaya orang-orang biasa seperti,
kita mengira dari satu untuk ini program, dan bukan dari sifar.
Kemudian saya memanggil getint, tetapi saya menyimpan jawapan dalam peringkat umur braket i.
Yang umur i'th dalam susunan.
Jadi manakala kali terakhir kami merawat kotak-kotak sebagai aksara bagi nama Zamyla ini,
dan lain-lain.
Kini, kotak-kotak mewakili 32 bit, atau empat bait
di mana kita boleh menyimpan satu int, int satu, int satu.
Semua yang, sekali lagi, adalah jenis data yang sama.
>> Sekarang saya melakukan sesuatu yang bodoh, seperti masa berlalu, hanya
untuk mewajarkan menulis program ini.
Dan kemudian turun di sini, saya sekali lagi melelar lebih array berkata setahun dari sekarang,
bilangan orang satu wasiat berusia sesuatu tahun.
Dan untuk memikirkan bahawa math-- Maksud saya, ini
tidak sangat rumit arithmetic-- Saya hanya menambah satu usia.
Hanya untuk menunjukkan, sekali lagi, ini.
>> Sama seperti saya boleh indeks ke dalam tali, s, jadi boleh saya indeks ke dalam pelbagai peringkat umur,
seperti itu di sana.
Jadi di mana adalah ini akan membawa kita?
Oleh itu, kita akan lihat, akhirnya, satu beberapa perkara pada hari-hari akan datang.
Satu, selama ini, apabila menulis program anda sendiri,
seperti Mario, tamak, kredit.
Anda telah menaip nama program dan memukul Enter.
Dan kemudian mendapatkan input pengguna.
>> Dengan getString, getInt, getLongLong, atau sebagainya.
Tetapi ternyata bahawa sokongan C sesuatu yang dinamakan baris arahan
hujah-hujah, yang akan membiarkan kami sebenarnya mendapat sekurang-perkataan yang anda taip,
di segera yang berkelip, selepas nama program anda.
>> Jadi pada hari-hari akan datang, anda mungkin menaip sesuatu seperti Caesar,
atau ./caesar bilangan 13, selepas itu.
Kita akan melihat bagaimana yang bekerja.
Kerana sesungguhnya, dalam masalah menetapkan dua, kami
akan memperkenalkan kepada anda untuk sesuatu yang sedikit
mengingatkan ini Ralphie mencabar awal kartografi.
Seni berebut maklumat.
Ini, sebenarnya, adalah sangat mengingatkan apa Ralphie lakukan.
>> Ini ialah contoh bagi sebuah penyulitan algoritma dipanggil ROT13, R-O-T 13.
Yang bermakna berputar huruf dalam abjad 13 tempat.
Dan jika anda melakukan itu, anda akan melihat kini apa yang, mungkin, frasa biasa.
Tetapi cara kita akan gunakan ini, akhirnya, adalah lebih umum.
>> Dalam P menetapkan dua, dalam edisi standard, anda akan melaksanakan beberapa tulisan rahsia,
satu dipanggil Caesar, satu dipanggil Vigenere.
Kedua-dua mereka adalah putaran nombor rahsia, kerana entah bagaimana anda
menjadikan satu huruf ke dalam huruf yang berbeza.
Dan Caesar adalah super mudah.
Anda menambah satu, anda menambah 13, atau beberapa nombor sehingga 26.
Vigenere tidak bahawa pada dasar setiap huruf.
Jadi Vigenere, kerana anda akan melihat dalam spec, adalah lebih selamat.
>> Tetapi pada akhir hari apa anda akan melaksana dan P menetapkan dua,
adalah yang utama yang menggunakan kedua-dua untuk penyulitan dan penyahsulitan.
Merujuk kepada proses menukarkan teks biasa, beberapa mesej asal,
ke dalam teks menghitung, yang adalah sesuatu yang disulitkan.
Dan kemudian decrypting sekali lagi.
>> Dalam edisi penggodam, Sementara itu, anda akan
ditugaskan untuk sesuatu yang serupa dalam semangat, di mana kami akan memberikan anda
fail, dari Linux biasa, atau Mac, atau Unix komputer dipanggil Etsy
kata laluan, yang mengandungi keseluruhan sekumpulan nama pengguna dan kata laluan.
Dan orang-orang mempunyai semua kata laluan telah disulitkan, atau dicincang,
boleh dikatakan, lebih baik kerana anda akan melihat dalam spec.
>> Dan edisi penggodam akan mencabar anda mengambil input seperti ini,
dan retak kata laluan.
Iaitu, mencari tahu apa yang kata laluan manusia benar-benar adalah.
Kerana, sesungguhnya, kata laluan adalah amnya tidak disimpan dalam jelas,
dan secara amnya kata laluan yang harus sukar untuk diteka.
Bukan itu sering kes itu.
>> Dan apa yang saya fikir kita akan lakukan ialah membuat kesimpulan dengan beberapa minit
renungan yang terutamanya Pilihan miskin kata laluan
dari filem yang anda mungkin ingat mesra dengan panggilan.
Dan jika tidak, anda perlu menyewa.
>> [VIDEO MAIN SEMULA]
>> -Helmet, Anda iblis, apa yang berlaku?
Apa yang anda lakukan untuk anak perempuan saya?
>> -Permit Saya untuk memperkenalkan cemerlang pakar bedah plastik muda,
Doktor Phillip Schlotkin.
Hidung besar lelaki kerja dalam seluruh alam semesta dan Beverly Hills.
>> Your Highness.
>> Kerja -Nose?
Saya tidak faham.
Dia sudah mempunyai pekerjaan hidung.
Ia adalah dia yang manis 16 ini.
>> Tidak, ia bukan apa yang anda fikirkan.
Ia lebih buruk.
Jika anda tidak memberi saya gabungan dengan perisai udara,
doktor Schlotkin akan memberikan anda anak perempuan belakang hidung rumahnya.
- [Situ menarik nafas terkejut] Nooooooooooooo.
Dari mana kamu mendapat bahawa?
>> -Semua Betul.
Saya akan memberitahu, saya akan beritahu.
>> Tidak, Ayah, tidak.
Anda tidak boleh.
>> -You're Betul sayang saya.
Saya akan terlepas hidung baru anda.
Tetapi saya tidak akan memberitahu mereka gabungan tidak kira apa.
>> -Sangat Juga.
Doktor Schlotkin, lakukan yang paling teruk anda.
>> Keseronokan -My.
>> -Tiada!
Tunggu, tunggu.
Saya akan memberitahu.
>> -Saya Tahu ia akan bekerja.
Baiklah, memberikan kepada saya.
>> Gabungan-The adalah satu.
>> -Satu.
-Two.
-Three.
-Four.
-Five.
-So Kombinasi adalah satu, dua, tiga, empat, lima.
Itu gabungan yang bodoh Pernah saya dengar dalam hidup saya.
Itulah jenis perkara yang bodoh kali ini kepada bagasinya.
>> -Thank Anda, tuanku.
>> [REMOTE KLIK]
>> -Apa Adakah anda lakukan?
>> -Saya Dimatikan dinding.
>> Tidak, anda tidak, anda dimatikan keseluruhan filem.
>> Must've -Saya menekan butang yang salah.
>> -Well, Meletakkannya kembali ke atas!
Letakkan filem kembali!
>> Ya, tuan!
Ya, tuan.
-Let Pergi, Arnold.
Marilah Gretchen.
Sudah tentu anda tahu saya akan perlu menghantar bil kepada anda untuk ini.
-Well?
Adakah ia berfungsi?
Di mana raja?
>> -Ia Bekerja, tuan, kita mempunyai gabungan.
-Great.
Sekarang kita boleh mengambil setiap nafas terakhir udara segar dari planet Druidia.
Apakah kombinasi?
>> -Satu, Dua, tiga, empat, lima.
>> -Satu, Dua, tiga, empat, lima?
-Ya.
-Itu Mengagumkan.
Saya ada yang sama gabungan di bagasi saya.
Sediakan Spaceball 1 untuk berlepas serta-merta.
>> Ya, tuan.
>> -Dan Menukar gabungan di bagasi saya.
[TUTUP PINTU BUNYI]
[Clink DARI PINTU memukul HELMET]
-Ahh.
[VIDEO AKHIR MAIN SEMULA]
DAVID J. MALAN: Itu sahaja untuk CS50, kita akan melihat anda minggu depan.
Pencerita: Dan kini, Deep Fikiran, oleh Daven Farnham.
>> DAVEN Farnham: Pengkodan dalam C adalah jadi jauh lebih sukar daripada Scratch.
printf, Scratch adalah satu pembohongan.
>> [Ketawa SOUNDBITE]