>> SPEAKER 1: Baiklah.
Selamat kembali.
Ini adalah Minggu Dua CS50, dan kami mempunyai setakat ini telah menggunakan fungsi tetapi
sebahagian besarnya mengambil mereka untuk diberikan.
Kami telah menggunakan printf yang mempunyai kesan sampingan percetakan
perkara pada skrin.
Kami telah menggunakan get-int, dapatkan terapung.
>> Tetapi bagaimana jika anda benar-benar mahu untuk mewujudkan fungsi anda sendiri, sebagai sebahagian daripada
anda mungkin telah mula lakukan untuk Set Masalah Satu, walaupun
tidak perlu ketat?
Nah, mari kita pergi ke hadapan dan mengkaji semula bahawa Masalah hanya meminta pengguna untuk
nama dan percetakan mereka sesuatu di skrin, tetapi cuba untuk beberapa faktor
persamaan yang kita telah dilihat dalam kod kami setakat ini.
Jadi oleh yang saya maksudkan yang berikut.
>> Saya akan pergi ke hadapan dan mewujudkan program yang baru, sila hubungi
ia hello.c seperti biasa.
Saya akan pergi ke hadapan dan memberikan diri saya termasuk io.h standard di atas.
Saya akan juga memberikan diri preemptively perpustakaan CS50 supaya
Saya tidak dapat menjerit oleh pengkompil.
Dan sekarang saya akan pergi ke hadapan dan mengisytiharkan int, utama, tidak sah.
>> Dan kemudian di sini, ini adalah di mana saya mahu untuk memulakan untuk outsource fungsi untuk
beberapa fungsi lain yang saya sendiri pagi akan menulis tetapi yang tidak
kini wujud.
Sebagai contoh, katakan bahawa saya mahu satu fungsi yang membolehkan saya
mencetak hello, koma, dan maka beberapa nama pengguna.
Bukannya terus berbuat printf hello,% s, ia tidak akan menjadi baik jika
terdapat hanya fungsi yang dipanggil tidak printf tetapi nama cetak?
>> Jadi, dalam erti kata lain, saya ingin dapat menulis program yang tidak sedikit
sesuatu seperti ini.
Pertama, saya akan mengatakan printf anda nama, sekali gus menyebabkan pengguna untuk
memberi saya nama beliau, dan kemudian saya akan menggunakan s tali biasa kepada
mengisytiharkan rentetan.
Berikan saya ubah rentetan jenis, memanggilnya s, dan simpan dalam bahawa
menyebabkan memanggil mendapatkan tali.
Tetapi sekarang dalam beberapa minggu yang lepas, saya akan mempunyai agak tediously dilakukan hello,% s / n.
>> Dan dalam erti kata lain, kita telah melihat ini contoh sekumpulan kali, dan ia adalah satu
contoh remeh kerana terdapat hanya satu baris kod supaya ia benar-benar bukan
masalah besar untuk terus menaip lagi.
Tetapi menganggap bahawa ini selaras kod sebenarnya telah menjadi beban, dan
ia bukan satu baris kod tetapi ia 10 baris kod dua minggu dari sekarang,
dan anda hanya mendapat letih menyalin dan menampal atau
penaipan semula kod yang sama.
Bukankah lebih baik daripada melakukan printf hello,% s dan sebagainya,
bukankah lebih baik jika terdapat hanya fungsi yang dipanggil nama cetak yang
mengambil hujah -
dalam erti kata lain, ia mengambil input -
dan kemudian koma bertitik.
Jadi fungsi itu, tidak akan ia akan bagus jika itu wujud?
Kemudian saya tidak akan perlu bimbang tentang apa printf, apa% s dan semua
ini kerumitan yang tidak semua yang menarik.
Mereka adalah berguna.
>> Jadi nama cetak, malangnya, tidak dicipta kira-kira 40 tahun campur lalu.
Tiada siapa yang terfikir untuk menulisnya.
Tetapi itulah keindahan yang mempunyai bahasa pengaturcaraan, seperti di
Awal anda boleh menentukan blok adat, jadi dalam C dan bahasa yang paling mana-mana, boleh anda
menentukan fungsi anda sendiri, boleh anda menentukan fungsi anda sendiri.
Jadi, walaupun kita mendapat utama oleh secara automatik untuk bebas, kita boleh mengisytiharkan
fungsi kita sendiri.
>> Jadi, saya akan membuat beberapa bilik di sini top up, dan saya akan mengisytiharkan saya
fungsi sendiri yang akan kelihatan sedikit pelik pada mulanya tetapi kami akan datang
kembali ke ini tidak lama lagi.
Saya akan mengatakan tidak sah, dengan itu menunjukkan fungsi ini tidak
sesuatu, mempunyai kesan sampingan, tetapi ia tidak kembali sesuatu kepada saya dalam
cara yang sama yang mendapat int atau mendapatkan tali sendiri tidak.
Dan saya akan memberikan fungsi ini nama nama cetak, dan saya akan
menentukan bahawa lelaki ini akan mengambil rentetan, dan saya akan memanggil bahawa
Nama tali.
Saya boleh memanggilnya apa-apa yang saya mahu, tetapi saya mahu kod saya untuk menjadi diri mendokumenkan.
Dalam erti kata lain, jika salah satu daripada anda adalah untuk membuka fail ini dan membacanya, anda boleh
jenis kesimpulan dari nama yang input apakah peranan yang ia sepatutnya untuk bermain.
>> Dan kini di bawah itu, saya akan membuka kerinting bersedia dan kerinting bersedia tertutup,
dan sebagainya notis saya diikuti yang sama corak pada garis empat melalui tujuh sebagai
Saya telah mengikuti selama seminggu yang baik serta sekarang, katakan antara sembilan dan garis
14 yang mengarang utama.
Dalam erti kata lain, mencetak nama adalah fungsi yang lain.
Sekarang, pengkompil tidak akan tahu untuk memanggil perkara ini secara automatik
kerana saya benar-benar hanya dicipta, tetapi ia akan tahu masih memanggil utama
secara automatik, dan kemudian tentu dalam line 13, saya memanggil fungsi saya sendiri.
Dan kerana saya telah mengumumkan bahawa fungsi di atas garis empat sebelum utama,
ini akan mengajar pengkompil apa yang quote, unquote, "nama print"
bermakna dan apa yang perlu dilakukan.
Jadi saya jenis memberikan adat baru menghalang dalam konteks, berkata, scratch.
>> Jadi di sini, saya boleh meletakkan bahawa sangat biasa atau corak berulang kod saya terus
menulis di dalam kelas, printf % S hello,% s / n ", -
apa yang saya mahu meletakkan di sini?
S?
Jadi saya mahu meletakkan nama dalam konteks ini.
Jadi notis sedikit dikotomi di sini.
Kerana saya mengisytiharkan fungsi saya sendiri dan saya agak sewenang-wenangnya dipanggil
ia mencetak nama, dan kerana saya telah yang dinyatakan dalam kurungan ini
fungsi mengambil satu hujah, jenis yang merupakan tali - jadi ia adalah satu perkataan
atau frasa atau sesuatu seperti itu - dan Saya memanggil nama hujah, bahawa
bermakna satu-satunya yang berubah-ubah dalam skop, jadi untuk bercakap, adalah nama.
>> S hanya wujud antara apa yang dua pendakap kerinting, sudah tentu?
Baik benar-benar, seperti baris 10 melalui 14, jadi sama seperti pada hari Isnin tidak boleh menggunakan
S, tetapi apa yang boleh saya lakukan adalah lulus S ke dalam nama cetak.
Mencetak nama hanya kebetulan untuk memberikan alias, sinonim, nama samaran,
memanggil nama, dan kini menggunakannya dalam bidang ini.
Jadi sekarang biarlah saya simpan ini, zum keluar.
>> Biar saya pergi ke hadapan dan membuat khabar.
Kelihatan baik.
Tidak meludah apa-apa kesilapan. . / Hello Enter.
Apakah nama saya?
Daud.
Dan hello Daud.
Jadi tidak semua yang menarik, tetapi hanya berfikir sekarang.
Anda kini mempunyai bahan yang sama seperti yang kita lakukan di Scratch untuk
membuat fungsi kita sendiri.
>> Tetapi ada sedikit gotcha a.
Katakan bahawa saya tidak benar-benar berfikir ini melalui dan saya benar-benar tanpa
benar-benar berfikir tentang ia menulis yang berfungsi di sini.
Berasa sempurna yang munasabah.
Dalam Scratch ada tanggapan lokasi dalam skrip anda.
Anda boleh meletakkan satu di sini, salah satu di sini, satu di sini, dan ia mungkin mula
untuk melihat berantakan sedikit jika anda tidak meletakkan ia keluar kemas, tetapi ia tidak
kira di mana fizikal skrip berada di skrin.
Malangnya di C - dan ini adalah seperti bahasa seperti Jawa dan Python
dan lain-lain yang anda mungkin biasa dengan - malangnya dalam C, perintah tidak
masalah kerana menonton apa yang akan berlaku sekarang.
>> Fungsi lalai yang akan untuk melaksanakan, sudah tentu, utama.
Utama akan memanggil nama cetak atas line lapan, tetapi malangnya,
pengkompil tidak akan tahu bahawa nama cetak wujud sehingga ia sampai ke garis 11,
yang malangnya ialah akan menjadi terlalu lewat.
Jadi mari kita buat membuat hello.
Dan kini damn, kesilapan dua dijana.
Jadi sekarang biarlah saya tatal ke atas dengan sangat pertama, seperti yang kita sentiasa perlu dilakukan, dan
melihat bahawa ia menjerit pada saya, "Perisytiharan tersirat fungsi
mencetak nama. "
>> Oleh itu, kita telah melihat mesej ini sebelum ini, pengakuan tersirat fungsi.
Apabila kita melihat bahawa jenis kesilapan?
Apabila saya tidak termasuk perpustakaan.
Jika saya terlupa cs50.h dan saya akan mendapat menjerit untuk mendapatkan tali atau mendapatkan int.
Tetapi dalam kes ini, ini cetak fungsi nama tidak ada di dalam perpustakaan, bukan?
Ia adalah benar-benar dalam fail ini, jadi apa yang benar-benar masalah ini?
>> Baik malangnya dalam bahasa C, ia akan membawa anda begitu amat benar-benar bahawa jika anda
mahu fungsi yang dipanggil nama cetak untuk wujud, anda perlu melaksanakan
yang berfungsi di bahagian paling atas anda kod supaya ia boleh diakses untuk mengurangkan
fungsi, tetapi terus-terang, yang menjadi ceroboh dengan cepat.
Secara peribadi, saya suka meletakkan utama pertama kerana maka ia sangat jelas apa ini
program tidak pada pandangan pertama.
Dan ditambah, anda boleh masuk ke dalam sudut pelik kes-kes di mana jika x mahu untuk memanggil
y tetapi y mungkin panggilan x, anda hanya fizikal sebenarnya tidak boleh meletakkan satu
di atas yang lain.
>> Tetapi ternyata dalam C, kita boleh menyelesaikan masalah ini sangat mudah.
Saya akan meletakkan sedikit ruang di sini, dan saya hanya akan
preemptively, walaupun agak redundantly, pergi untuk mengajar
pengkompil bahawa wujud fungsi dipanggil nama cetak, ia mengambil tali,
dan saya akan memanggil ia menamakan koma bertitik.
>> Jadi ini kini dalam talian empat, yang kita tidak pernah melihat sebelum ini, adalah perisytiharan
daripada nama cetak fungsi, tetapi ia hanya janji bahawa fungsi ini akan
akhirnya ditakrifkan, akhirnya dilaksanakan.
Ini sekarang saya boleh meninggalkan sahaja kerana sekarang ini adalah definisi itu,
pelaksanaan, jenis batu yang terakhir pelaksanaan ini
fungsi tertentu.
Jadi terus terang ia bodoh, ia adalah menjengkelkan, tetapi ini adalah cara C, dan ia
kerana ia akan membawa anda beribu-sangat dan seperti komputer terus terang harus,
sahaja apa yang anda beritahu kepada lakukan, dan supaya pesanan adalah penting.
>> Supaya menyimpan bahawa dalam fikiran dan sekali lagi, mula notis berulang corak.
Kemungkinan anda akan, jika anda tidak mempunyai sudah, mula menghadapi mesej
seperti ini yang pada pandangan pertama kelihatan sepenuhnya samar, tetapi jika anda mula
untuk mencari kata-kata utama seperti "Perisytiharan tersirat," beritahu seorang
fungsi dalam kes ini - dan terus-terang, anda kadang-kadang walaupun mendapat sedikit hijau
simbol lobak merah yang memberitahu anda di mana isu ini mungkin adalah -
anda boleh mula bekerja dengan cara anda melalui lagi mesej ralat ghaib.
Sebarang pertanyaan mengenai penulisan anda fungsi sendiri dengan cara ini?
>> Mari kita melakukan sesuatu itu adalah satu sedikit lebih menarik.
Daripada hanya melakukan sesuatu yang mempunyai kesan sampingan percetakan, izinkan saya pergi
hadapan dan menyimpan fail baru, dan kita akan memanggil positive.c ini, walaupun ia
akan menjadi sedikit berbeza berbanding masa lalu.
Dan kali ini, saya ingin untuk melaksanakan semula contoh positive.C masa lepas, yang
yang memaksa pengguna untuk memberi saya integer positif.
Tetapi saya terpaksa menggunakan mendapatkan int kali terakhir.
Bukankah telah baik jika terdapat fungsi yang dipanggil mendapatkan int positif
bahawa saya hanya boleh outsource ini sekeping fungsi ke?
Jadi perbezaan di sini ialah kita akan melaksanakan mendapatkan int positif, tetapi tidak seperti
Nama cetak yang mempunyai kesan sampingan - ia tidak kembali sesuatu kepada saya seperti
nombor atau rentetan -
mendapatkan int positif, sudah tentu, akan kembali, mudah-mudahan, int yang positif.
>> Jadi mari kita buat ini.
Termasuk cs50.h, Termasuk standard io.h.
Int sah utama.
Dan kini di sini, saya akan pergi ke hadapan dan katakan int, memanggilnya n, sama
mendapatkan int positif.
Dan seperti mendapatkan int sudah wujud kerana kakitangan menulis, saya akan
menganggap buat masa ini yang mendapat int positif wujud, dan kini saya akan
untuk pergi ke hadapan dan berkata printf, terima kasih untuk% i / n ", n.
>> Jadi sekarang jika saya menyusun program ini, apa yang yang akan berlaku di terminal saya
tingkap di bahagian bawah skrin?
Saya akan mungkin mendapatkan kesilapan yang sama seperti sebelum ini.
Jadi mari kita cuba ini.
Buat positif.
Dan sekali lagi, pengakuan tersirat fungsi, mendapatkan int positif.
Jadi kita boleh menyelesaikan masalah ini dalam beberapa cara.
Saya akan memastikan ia mudah dan hanya meletakkan akuan saya di sini dan mendapatkan
int positif.
Saya perlu tandatangan kononnya.
Tandatangan hanya merujuk kepada estetika
baris pertama program.
Jadi apa yang perlu mendapatkan positif int pulangan?
>> Jadi int.
Maksud saya ideal, ia akan kembali sesuatu seperti int positif, tetapi yang
tidak wujud.
Kami tidak melihat bahawa di antara data kami jenis, jadi kita perlu untuk berurusan dengan
Hakikat bahawa kita mempunyai sangat sedikit jenis data untuk bekerja dengannya.
Tetapi kita boleh kembali int an dan hanya percaya bahawa ia akan menjadi positif.
Ia akan dipanggil mendapatkan int positif.
>> Dan kini bagaimana pula hujah?
Adakah ia mengambil apa-apa input?
Adakah ia memerlukan input?
Jadi ia tidak perlu tahu dalam apa-apa terlebih dahulu.
Dapatkan tali tidak, mendapatkan int tidak.
Printf tidak - ia perlu mempunyai beberapa input berlalu ke dalamnya - dan nama cetak
diperlukan input tertentu, tetapi mendapat int positif tidak.
Jadi saya akan jelas memberitahu sah pengkompil.
Sah ialah ketiadaan apa-apa lagi.
Jadi tidak sah bermakna apa-apa yang sedang berlaku di dalam orang kurungan, koma bertitik.
>> Dan kini di bawah fail saya - dan jenis lagi, saya hanya menjadi satu dubur
di sini meletakkan utama di bahagian atas, yang adalah amalan yang baik kerana cara ini,
bila-bila masa anda atau orang lain membuka fail anda,
fungsi adalah di sana.
Anda boleh menyelam dari satu persegi.
Jadi sekarang saya akan salinan ini, mendapatkan sah int positif, tetapi saya tidak
akan melanda koma sekarang.
Saya akan membuka pendakap kerinting, dan sekarang saya perlu meminjam
idea dari hari Isnin.
>> Jadi seperti yang anda masih ingat, kita melakukan sesuatu suka melakukan perkara berikut semasa
sesuatu yang tidak benar.
Dan apa yang saya lakukan?
Saya sesuatu seperti memberi saya integer positif,
sedikit yang segera.
Saya boleh menggunakan apa-apa perkataan yang saya mahu.
Dan kemudian saya digunakan apa?
Int n sama mendapatkan int, ada hujah untuk itu.
>> Dan notis perbezaan.
Apabila anda memanggil fungsi, apabila anda menggunakan fungsi, anda tidak dimasukkan ke dalam tidak sah.
Anda hanya berbuat demikian apabila mengisytiharkan fungsi, mengajar pengkompil apa
ia harus harapkan.
Jadi anda tidak perlu meletakkan membatalkan sana sendiri.
>> Dan kini apa yang keadaan saya?
Well, n tidak sama dengan yang positif, tetapi itu hanya pseudo-kod.
Jadi bagaimana saya meluahkan ini lebih bersih?
Jadi kurang daripada atau sama dengan sifar.
Jadi sekali lagi, notis yang anda boleh lakukan kurang daripada atau sama dengan.
Walaupun ia adalah dua berasingan simbol, anda boleh melakukannya
papan kekunci anda seperti itu.
>> Tetapi masih ada bug yang Saya diskrukan masa lalu juga.
Saya perlu mengaku -
betul-betul.
Saya perlu mengaku n luar gelung.
Jadi saya perlu meletakkan n di sini, dan saya tidak ingin-mengisytiharkan semula di sini
supaya saya dapat berubah-ubah baru.
Saya hanya mahu memberi nilai di sini.
>> Dan sekarang saya tidak cukup dilakukan di sini.
Biar saya mendapatkan lebih awal daripada diri saya sendiri dan berpura-pura saya dilakukan.
Buat positif, dan kini ada kesilapan baru.
Kawalan sampai akhir fungsi tidak sah.
Jadi mesej ralat baru, tetapi jika anda jenis daripada mengusik selain setiap satu daripada kata-kata, ia
mungkin membayangkan apa yang salah.
>> Mengawal.
Kawalan hanya bermaksud kepada perintah operasi dalam program.
Komputer dalam kawalan dan sesuatu yang tidak kena.
Jadi ia sampai ke penghujung fungsi tidak sah.
Apa fungsi ia nampaknya merujuk kepada?
Apa fungsi adalah tidak sah?
Jadi mendapatkan int positif, dan sedikit mengelirukan dalam telaga itu,
ia adalah jenis tidak sah.
Ia mempunyai spesifikasi yang sah untuk hujah, tetapi output akan
menjadi n jenis.
Jadi perkataan di sebelah kiri adalah dipanggil jenis pulangan.
Perkataan di dalam di sini adalah sifar atau lebih hujah-hujah
bahawa fungsi yang diperlukan.
>> Jadi, apa yang perlu saya lakukan?
Pada ketika ini di dalam kod saya, line 21 di mana segera berkelip sekarang, saya
mempunyai int positif dalam pembolehubah yang dipanggil n.
Bagaimana saya memberikan kembali kepada utama?
Betul-betul.
Kembali n koma bertitik.
>> Jadi hanya sebagai Colton kembali sekeping kertas dengan jawapan kepada saya dengan menjatuhkan
sekeping kertas di hitam sedikit kotak di atas meja, untuk berbuat demikian dalam
kod, anda benar-benar hanya menulis, kembali n, dan ia seolah-olah telah Colton
saya menyerahkan sesuatu kembali fizikal.
Dalam kes ini, apa yang berlaku adalah mendapatkan int positif akan menyerahkan kembali
apa yang mungkin positif integer untuk siapa?
Di manakah nilai yang berakhir?
Yang berakhir dalam pembolehubah ini, n, dan maka kita teruskan dengan garis sembilan.
>> Jadi, dalam erti kata lain, perintah operasi, program ini bermula
melaksanakan, dan pengkompil menyedari, oh, anda mahu perpustakaan?
Biar saya pergi merebut apa sahaja yang di dalam itu.
Oh, anda mahu perpustakaan IO standard?
Biar saya pergi merebut apa sahaja yang di dalam itu.
Apakah pengkompil berkata kepada dirinya apabila ia mencecah garis empat?
Oh, anda berjanji untuk melaksanakan fungsi dipanggil mendapatkan positif, tetapi
kita akan kembali kepada yang kemudian, sesuatu bersama-sama orang-orang baris.
>> Tidak sah utama Int hanya bermakna di sini keberanian program saya.
Line tujuh hanya pendakap kerinting.
Line lapan mengatakan di sebelah kiri, memberi saya 32 bit untuk integer, memanggilnya n.
Pada sebelah kanan, ia adalah berkata mendapatkan int positif.
Sekarang berhenti mari kita bahawa cerita kerana sekarang Saya tidak terus bergerak kursor saya ke bawah.
Kursor saya sekarang pergi ke sini kerana kini mendapat int positif melaksanakan.
Int n diisytiharkan.
Melakukan yang berikut.
Printf memberi saya integer positif.
>> Dapatkan int an dari pengguna, menyimpannya dalam n, dan mungkin melakukan ini lagi dan lagi.
Gelung Ini bermakna kod ini mungkin melaksanakan atas dan ke bawah seperti ini lagi
dan sekali lagi, tetapi apabila pengguna akhirnya bekerjasama dan memberi saya yang positif
int, saya mencecah line 21, di mana titik nombor diserahkan kembali, dan yang mana satu
saya perlu menyerlahkan sekarang?
Nine.
Kawalan, jadi untuk bercakap, kembali untuk beratur sembilan.
Itulah garis yang kini bertanggungjawab.
>> Itulah apa yang telah berlaku di kali ini di bawah hood, tetapi
apabila kita telah menggunakan fungsi seperti printf atau bahkan mendapatkan tali bahawa orang lain
menulis untuk anda, kawalan sedang menyerahkan line kod pergi ke orang lain
oleh baris demi baris.
Ia hanya kita tidak dapat melihat dan kami boleh tidak benar-benar menggambarkan ia dalam
program kerana ia adalah dalam beberapa lain fail pada cakera keras
Tanpa diketahui kepada kami.
Jadi mari kita sebenarnya menyusun dan menjalankan ini sekarang.
>> Buat positif.
Menyusun, itulah kemajuan.
. / Positif.
Berikan saya integer positif.
Mari kita menjadi sukar.
Negatif 1.
Zero.
Mari kita memberikan 50.
Terima kasih untuk 50, dan sebagainya kawalan kini telah kembali.
Mana-mana soalan, maka, pada itu?
Ya?
>> [Didengar].
>> Katakanlah lagi.
Oh, soalan yang baik.
Jadi, anda mungkin notis selari di sini bahawa Saya jenis memotong sudut pada.
Selaras 12, saya berkata, mendapatkan int positif kembali int, tetapi oleh yang sama
logik, ia kini berdiri untuk sebab itu dalam garisan enam, saya mengatakan bahawa pulangan utama
an int, tetapi apa yang kita tidak mempunyai ada dalam mana-mana program kita?
Kami tidak pernah mempunyai sebutan ini kembali kata kunci.
>> Jadi ia ternyata bahawa dalam C, sekurang-kurangnya versi bahawa kita menggunakan
dibuat pada tahun 1999, secara teknikal, ini adalah berlaku untuk anda secara automatik.
Bila-bila masa anda melaksanakan program dan anda melaksanakan fungsi dipanggil utama,
yang berfungsi akan kembali sifar oleh lalai jika anda tidak mengatakan sebaliknya,
dan sifar hanya konvensyen.
Dunia kembali sifar itu menunjukkan bahawa semua adalah baik,
berkesan meninggalkan kita dengan empat bilion perkara-perkara yang mungkin boleh pergi
salah supaya jika kita kembali satu, yang mungkin menandakan kod yang bermakna ini
perkara yang salah.
Kita boleh kembali dua, yang bermaksud perkara ini lain pergi salah.
Kita boleh kembali empat bilion, yang bermakna perkara ini lain pergi salah.
>> Dan jika kini anda berfikir tentang anda sendiri PC atau Mac, anda mungkin ingat bahawa
kadang-kadang anda mendapat mesej ralat samar daripada perisian yang anda
menggunakan, dan kadang-kadang ia mempunyai manusia Penerangan mesra, tetapi ada
sering kod atau nombor pada skrin?
Jika ini tidak datang ke fikiran, hanya memerhatikan keluar untuk itu.
Itulah biasanya apa yang kod merujuk kepada.
Mereka dimasukkan ke dalam Microsoft Word dan program-program lain supaya jika anda memfailkan
laporan pepijat dengan syarikat itu, anda boleh memberitahu mereka, oh, saya mendapat ralat bilangan 45.
Dan beberapa kembali programmer di syarikat boleh melihat bahawa di dalam nya
kod dan berkata, oh, itu kerana saya membuat bug ini dan itulah sebabnya pengguna
mendapat mesej ini.
>> Tetapi terus terang, ia hanya sedikit mengganggu dan sedikit membosankan untuk
menyimpulkan bahawa, sekurang-kurangnya kami beberapa program pertama, jadi kami telah
telah meninggalkan ia.
Tetapi semua masa ini setiap seorang daripada anda fungsi utama telah diam-diam telah ini
line ditambah secara automatik untuk anda oleh pengkompil, hanya dengan konvensyen
menjimatkan masa.
>> [Didengar].
>> Anda tidak perlu untuk memasukkannya ke dalam utama.
Itu denda.
Anda perlu termasuk jika anda telah melaksanakan fungsi seperti ini.
Jika tidak rata fungsi keluar tidak akan bekerja.
Tetapi dalam utama, ia tidak perlu.
Dalam satu atau dua minggu, kami akan mula mendapat menjadi kebiasaan bahawa apabila kita ingin memulakan
menandakan kesilapan.
Really good soalan.
>> Rehat begitu cepat lisan untuk menyebut bahawa Jumaat ini, kita tidak akan makan tengah hari
per se, tetapi kita akan makan malam bersama beberapa pelajar dan kakitangan.
Jika anda ingin untuk menyertai kami, berasa bebas untuk pergi ke cs50.net/rsvp.
06:00 Jumaat ini.
Ruang adalah, seperti biasa, terhad, tetapi kita akan terus melakukan ini di hampir
setiap minggu jika ruang kehabisan minggu ini.
>> Jadi cliffhanger yang kita berhenti di Isnin adalah bahawa rentetan boleh sebenarnya
diindeks ke dalam, yang hanya bermakna anda boleh mendapatkan pada watak yang pertama,
watak kedua, watak ketiga dan sebagainya, kerana anda boleh
berkesan berfikir tali, seperti hello, sebagai dalam kes ini lima
surat di dalam kotak.
Dan anda boleh mendapatkan di setiap orang kotak dengan apa yang kita sintaks
memperkenalkan pada hari Isnin?
Mereka kurungan pada keyboard anda.
Itu hanya bermakna pergi ke lokasi sifar.
>> Kita mula mengira pada sifar, jadi kurungan sifar menandakan h, kurungan satu
menandakan e, dan sebagainya.
Dan supaya semua masa apabila kita telah menggunakan tali dan menaip "hello"
dan "dunia" dan perkara-perkara lain di skrin, ia telah disimpan
dalam kotak seperti ini.
Dan mengambil tekaan.
Apakah setiap kotak mewakili fizikal di dalam komputer anda?
>> [Didengar].
>> Maaf?
>> Watak-watak.
>> Jadi watak, dalam kes ini rentetan, dan watak yang hanya
lapan bit atau satu bait.
Jadi, anda mungkin sekurang-kurangnya samar-samar biasa dengan hakikat bahawa anda
komputer mempunyai ingatan.
Ia mempunyai dua jenis memori sekurang-kurangnya.
Satu adalah cakera keras di mana anda menyimpan barangan selama-lamanya, dan itulah
biasanya besar supaya anda boleh mempunyai filem dan muzik dan sebagainya.
>> Kemudian anda mempunyai satu lagi jenis memori dikenali sebagai RAM, R-A-M, Random Access
Ingatan, dan ini adalah jenis memori yang digunakan apabila komputer anda
berjalan tetapi jika anda kehilangan kuasa atau anda bateri mati, apa-apa yang disimpan
dalam RAM akan hilang jika anda kehilangan kuasa sama sekali kerana ia bukan
berterusan.
Anda biasanya mempunyai, hari ini, satu persembahan itu, dua persembahan, mungkin lebih.
Dan terbalik RAM adalah bahawa ia adalah lebih banyak, lebih cepat daripada cakera keras
atau keadaan pepejal memandu hari ini, tetapi ia biasanya lebih mahal jadi
anda mempunyai kurang daripada itu.
>> Jadi perbualan hari ini benar-benar merujuk untuk RAM, yang jenis memori yang
wujud hanya semasa ada kuasa yang dimasukkan ke dalam komputer anda.
Oleh itu, apabila anda menaip dalam H-E-L-L-O, Enter pada keyboard, H akan dalam satu
bait RAM, E yang sedang berlaku di satu lagi bait RAM, seperti
seluruh perkataan.
Jadi ingat apa yang kita dapat untuk melakukan masa lalu adalah ini.
Biar saya pergi ke hadapan dan membuka fail bahawa kita dipanggil string.c, dan ingat
bahawa ia kelihatan sedikit sesuatu seperti ini.
Biar saya sebenarnya melancarkan kembali dan menukar kepada apa yang ia kelihatan seperti,
panjang rentetan s.
>> Jadi melihat program itu di sini.
Kami termasuk perpustakaan CS50 supaya yang boleh kita gunakan mendapatkan tali.
Kami termasuk io.h standard supaya kita boleh menggunakan printf.
Mengapa kita termasuk string.h?
Ini adalah sesuatu yang baru pada hari Isnin.
Jadi kita mahu panjang tali.
Str Leng.
Orang memutuskan tahun yang lalu, mari kita hanya menjadi ringkas.
Daripada memanggil ia "panjang tali," mari kita memanggilnya "str Leng" dan membiarkan
tokoh dunia yang keluar, dan maka itulah apa yang kita dapat akses kepada dengan string.h.
>> Ini adalah biasa.
Ini adalah biasa.
Ini adalah sedikit baru.
Selaras 22 - dan kita akan kembali ini, tetapi untuk sekarang tahu -
dan anda hanya akan tahu ini daripada mempunyai membaca dokumentasi atau jika
anda tahu C sudah -
mendapatkan tali kadang-kadang boleh skru sehingga.
Jika pengguna adalah benar-benar pertentangan atau memberikan kerjasama dan dia hanya
tidak menaip apa-apa pada papan kekunci atau jenis begitu banyak pada keyboard yang
ia menguasai memori komputer, dalam teori, dapatkan tali dapat kembali
sesuatu yang lain daripada rentetan aksara.
Ia boleh mengembalikan nilai khas yang dipanggil NULL dalam semua topi, N-U-L-L, dan ini adalah
hanya nilai sentinel kononnya.
Ia adalah satu nilai khas yang melambangkan sesuatu yang buruk berlaku dalam kes ini.
Ia adalah ketiadaan rentetan.
>> Jadi menyeimbangkan saya memeriksa hanya supaya, cerita panjang pendek, str Leng dan
fungsi-fungsi lain yang datang dengan C, jika mereka mengharapkan tali tetapi anda lulus mereka
ketiadaan tali, jika anda meninggal mereka NULL, komputer atau program
hanya akan kemalangan terang-terangan.
Ia akan hang.
Ia akan membuang beberapa mesej ralat.
Perkara-perkara buruk yang akan berlaku.
Jadi, walaupun ini masih tidak yang jelas -
ini akan lebih masuk akal dalam seminggu atau dua - selaras 22, ini hanya
contoh kesilapan diri pemeriksaan pertahanan hanya dalam kes satu-satu masa daripada
sesuatu juta masalah, sekurang- program-kurangnya saya tidak akan kemalangan.
>> Jadi, jika s tidak sama dengan sesuatu yang buruk, Saya mempunyai ini untuk gelung, dan ini adalah
di mana kita mempunyai yang lain sekeping baru sintaksis.
Saya mempunyai untuk gelung iterating dari sifar sehingga panjang s.
Dan kemudian di sini, saya adalah seorang percetakan daripada s golongan i, tetapi kenapa saya menggunakan% c semua
tiba-tiba dan bukannya% s walaupun walaupun s adalah rentetan?
Ia adalah watak, bukan?
S adalah rentetan, tetapi s sesuatu kurungan, s kurungan i di mana saya adalah sifar
atau satu atau dua, itu individu watak dalam tali, dan sebagainya untuk
itu, printf perlu dimaklumkan bahawa ia merupakan satu watak yang diharapkan.
>> Dan kemudian ingat, adakah ini program sebenarnya lakukan?
>> Dicetak di tiang.
>> Ya, betul-betul.
Ia hanya dicetak perkataan yang saya menaip ruang, satu watak dalam satu barisan.
Jadi mari kita lihat ini lagi.
Oleh itu, tali.
Disusun OK. . / Tali.
Izinkan saya menaip H-E-L-L-O, Masukkan, dan sesungguhnya aku mendapatkannya, satu per baris.
>> Jadi biarlah saya melakukan satu pengoptimuman sini.
Jika anda berfikir tentang hal itu, terutamanya jika anda telah diprogramkan sebelum ini, ada
boleh dikatakan satu ketidakcekapan dalam talian 24.
Dalam erti kata lain, ia tidak semestinya reka bentuk yang terbaik.
Mudah, sekurang-kurangnya sekali anda ingat apa yang str Leng, tetapi ia
melakukan sesuatu yang bodoh yang berpotensi.
Apa yang mungkin?
>> [Didengar].
>> Tepat sekali.
Ia memeriksa panjang s setiap kali walaupun
H-E-L-L-O sentiasa akan menjadi lima watak.
Setiap kali melalui gelung ini, lima tidak berubah-ubah.
Saya mungkin menokok i, tetapi apa ialah panjang s pada setiap
lelaran gelung ini?
Ia adalah lima, ia lima, ia lima, dan namun saya tetap meminta ini
mempersoalkan sekali lagi dan lagi dan lagi.
Sekarang terus-terang, komputer adalah begitu bodoh cepat, tiada siapa akan notis
Perbezaan dalam kes ini, tetapi ini jenis keputusan reka bentuk miskin boleh
mula menambah sehingga jika pengkompil sendiri tidak cuba untuk menetapkan ini untuk anda yang
ia biasanya tidak akan, pada kurangnya dalam perkakas.
>> Jadi, saya akan melakukan ini.
Saya akan menambah koma selepas ubah pertama saya, i.
Saya akan memberikan saya satu lagi berubah-ubah, ia memanggil n, hanya dengan
konvensyen untuk nombor, dan kemudian saya akan memberikan n nilai rentetan
panjang s.
Dan kemudian saya akan menukar keadaan saya menjadi apa?
Saya akan mengubah keadaan saya untuk sementara i adalah kurang daripada n.
>> Jadi sekarang, berapa kali saya memeriksa panjang s?
Sebaik sahaja, tetapi ia OK untuk memeriksa i terhadap n sekali lagi dan sekali lagi kerana sekarang mereka
nilai-nilai yang tidak benar-benar berubah.
Sekarang untuk sekarang, hanya tahu bahawa bila-bila masa anda memanggil fungsi, terdapat sedikit
atas, tidak cukup untuk menggalakkan anda benar-benar dari yang pernah menggunakan fungsi, tetapi
pasti apabila ada baris kod suka itu - dan garis akan mendapat
lebih menarik tidak lama - di mana ada peluang untuk berfikir, jika saya
taip kod ini, berapa banyak kali ia akan melaksanakan?
Anda akan mula melihat dari masa ke masa prestasi program anda boleh
memang berubah.
>> Malah, salah satu daripada masalah itu kami telah menetapkan dilakukan pada tahun-tahun lalu melibatkan
melaksanakan, seperti yang anda boleh ingat dari minggu sifar, satu pemeriksa ejaan, tetapi
mengeja pemeriksa yang direka untuk menyokong kamus 150,000 ditambah
kata-kata yang kita berikan anda semua.
Anda perlu menulis kod yang banyak kata-kata ke dalam RAM, jadi ke
kotak seperti yang kita lihat pada skrin seketika yang lalu, dan kemudian secepat yang anda
boleh, anda perlu berupaya untuk menjawab soalan bentuk, adalah perkataan ini
silap eja?
Adakah perkataan ini silap eja?
>> Dan dalam sesuatu seperti itu apa yang kita telah dilakukan pada tahun-tahun lalu yang menjadikannya,
walaupun pada opt-in secara pilihan, satu persaingan pelbagai, di mana
pelajar yang menggunakan RAM yang kurang dan kurang masa, kitaran CPU kurang, akhirnya
menggelegak sehingga bahagian atas sedikit pemimpin lembaga atau kedudukan yang kita memakai
laman utama kursus ini seperti yang kita telah dilakukan pada tahun-tahun yang lalu.
Jadi sekali lagi, benar-benar pilihan, tetapi ini bercakap kepada peluang reka bentuk
yang lebih awal sekali kita mulakan bangunan di atas beberapa
blok binaan asas.
>> Jadi biarlah saya kembali kepada gambarajah ini untuk hanya seketika dan mendedahkan sedikit
sesuatu yang lebih.
Ini sememangnya adalah rentetan, dan kita telah mengambil kesempatan daripada beberapa perpustakaan,
io.h standard yang telah -
>> Printf.
>> Printf, antara lain.
cs50.h, yang telah mendapatkan int dan mendapatkan tali dan sebagainya, string.h, yang
mempunyai str Leng.
Tetapi ternyata ada satu lagi.
Terus terang, terdapat banyak dan banyak tajuk fail yang mengisytiharkan fungsi
untuk perpustakaan, tetapi ini adalah ctype.h sebenarnya akan menjadi agak
berfaedah kerana saya akan untuk pergi ke hadapan dan melaksanakan salah satu
program lain di sini.
>> Biar saya pergi ke hadapan dan membuka sesuatu Saya menulis terlebih dahulu dikenali sebagai
capitalize.c, dan mari kita lihat bagaimana kerja-kerja ini.
Perhatikan bahawa saya menggunakan, dalam versi ini itu, tiga fail biasa.
Perhatikan bahawa dalam line 18, saya mendapat baris teks.
Notis dalam line 21, saya mendakwa bahawa kod berikut akan
kesempatan s, apa sahaja yang pengguna ditaip dalam, dan bagaimana saya melakukannya?
Nah, saya mengambil -
pengajaran daripada masa lalu -
Saya mengisytiharkan i dan n dan iterating lebih watak-watak dalam rentetan.
Dan kemudian apa yang blok ini kod dalam talian 24 hingga 27
lakukan dari segi orang biasa itu?
>> Huruf kecil surat belakang.
>> Tepat sekali.
Jika s kurungan i - jadi jika i-ke- watak s, yang tertentu
char dalam tali, adalah lebih besar daripada atau sama dengan huruf kecil dan -
ingat bahawa Ampersand double menandakan dan -
dan ciri-ciri yang sama, s kurungan i, adalah kurang daripada atau sama dengan huruf kecil z,
yang bermakna ia adalah satu b atau a atau c atau dot, dot, dot, atau z, yang bermaksud
ia adalah kecil.
Apa yang saya mahu lakukan dalam kes itu?
Well, saya boleh melakukan ini agak cryptically, tetapi
mari kita mengusik ini selain.
>> Saya akan memanggil printf, mencetak% c kerana saya mahu untuk mencetak semula ini
watak pada skrin.
Saya kemudian akan mengambil s kurungan i, i-ke-watak dalam s, dan mengapa
yang saya lakukan ini helah sedikit di sini, huruf kecil A modal tolak?
Apakah yang akan memberi saya, secara umumnya bercakap?
>> [Didengar].
>> Tepat sekali.
Saya tidak ingat -
ia adalah 65 untuk modal A. Saya tidak benar-benar ingat apa yang huruf kecil adalah,
tetapi tidak kira.
Komputer yang tahu.
Jadi dengan berkata, huruf kecil tolak modal A, ia adalah pelik untuk menjadi
menolak satu char daripada yang lain, tetapi apakah aksara di bawah hood?
Mereka hanya nombor.
Jadi apa sahaja yang nombor-nombor, membiarkan komputer ingat
bukannya saya manusia.
>> Jadi huruf kecil modal tolak adalah akan memberikan saya perbezaan.
Ia berlaku kepada 32, dan yang akan kes huruf kecil b dan modal B
dan sebagainya.
Ia kekal konsisten, bersyukur.
Jadi saya pada dasarnya berkata, mengambil huruf kecil huruf, tolak luar yang
perbezaan standard, dan bahawa berkesan perubahan s kurungan dari i
huruf kecil untuk, sudah tentu, huruf besar, tanpa saya benar-benar perlu berfikir
mengenai atau ingat, apakah mereka nombor kita bercakap tentang apabila lapan
sukarelawan datang di atas pentas?
Sekarang Sementara itu, pada yang lain, jika ia tidak huruf kecil seperti yang ditentukan
dengan garis 24, hanya mencetak.
Saya hanya ingin menyentuh watak-watak yang telah
sebenarnya asalnya huruf kecil.
>> Jadi mari kita lihat ini.
Buat kesempatan.
Disusun, OK.
. / Mengambil kesempatan.
Dan biarlah saya menaip H-E-L-L-O dalam huruf kecil Enter.
Dan melihat bahawa ia ditukar ke dalam huruf besar.
Biar saya melakukan ini lagi dengan perkataan yang berbeza.
Bagaimana D-A-V-I-D dengan D pertama dipermodalkan sebagai nama yang biasanya adalah?
Enter.
Notis ia masih betul.
Ia hanya outputted yang pertama D berubah melalui yang lain membina.
>> Jadi ingat, kemudian, satu beberapa perkara di sini.
Satu, jika anda mahu untuk memeriksa dua keadaan sekali gus, anda boleh dan mereka
bersama-sama seperti yang kita meramalkan.
Anda boleh membandingkan watak-watak dalam cara ini dan berkesan merawat watak sebagai
nombor, tetapi terus terang saya katakan, ini adalah begitu bodoh samar saya tidak akan ingat
bagaimana untuk tampil dengan ini dari awal tanpa hujah melaluinya sekian
sedikit masa.
>> Bukankah telah baik jika seseorang di luar sana menulis fungsi dipanggil adalah
rendah yang boleh menjawab untuk saya benar atau palsu, watak ini adalah huruf kecil?
Juga bersyukur kerana, sesiapa sahaja yang menulis ctype.h berjaya melakukannya.
Biar saya pergi di sini dan menambah ctype untuk c jenis, dan sekarang biarlah saya pergi ke sini dan
menulis semula baris ini seperti berikut.
>> Jadi, jika ia dipanggil lebih rendah, saya menuntut, s golongan i, maka saya akan memadam
kedua-dua baris sama sekali.
Jadi sekarang orang lain, saya berharap, menulis fungsi yang dipanggil adalah lebih rendah, dan ia
bertukar keluar yang mereka lakukan dan mereka diisytiharkan ia dalam ctype.h.
Dan sekarang saya akan meninggalkan line 27 sahaja, saya akan meninggalkan line 31
sahaja, tetapi notis berapa banyak saya telah mengetatkan kod saya.
Ia kini lebih bersih.
Ia kurang sukar untuk melihat melalui kerana sekarang majlis itu, lebih-lebih lagi, adalah
begitu hebat dinamakan ia hanya melakukan apa yang ia berkata.
>> Jadi sekarang saya akan untuk menyelamatkan ini.
Saya akan zum keluar.
Dan seperti dalam Scratch anda boleh mempunyai Booleans, nilai Boolean benar atau
palsu, yang betul-betul apa yang menurunkan berkesan pulangan.
Biar saya susun semula.
Biar saya semula run.
Dan sekarang mari kita cuba lagi, H-E-L-L-O, Enter.
Itulah yang cukup baik.
Dan cuba sekali lagi, pastikan saya tidak skru sesuatu sehingga.
Yang dipermodalkan juga.
>> Tetapi ini tidak cukup baik kerana Perkara lain yang saya tidak akan
ingat kecuali saya bekerja melalui ia benar-benar berhati-hati, katakan, kertas
ini selaras celaka.
Bukankah lebih baik jika terdapat fungsi dipanggil atas?
Nah ternyata terdapat dalam ctype.h juga.
Saya akan pergi ke hadapan dan menaip -
izinkan saya membawa talian yang kembali.
Sebaliknya ini di sini, izinkan saya pergi ke hadapan dan berkata, menggantikan% c itu
hasil daripada memanggil fungsi ini untuk atas tentang sifat i-ke-s.
Dan kini melihat ia semakin sedikit seimbang.
Saya mempunyai untuk mengesan berapa banyak kurungan saya telah dibuka dan ditutup.
>> Jadi sekarang ia lebih bersih.
Kini program ini semakin lebih baik dan lebih baik yang direka boleh dikatakan kerana ia
banyak lagi boleh dibaca tetapi ia tidak mari kita betul.
Buat kesempatan.
. / Mengambil kesempatan.
H-E-L-L-O. Mari kita berjalan sekali lagi, D-A-V-I-D. OK, jadi kita masih dalam
cukup baik bentuk.
>> Tetapi sekarang ke atas.
Saya mencadangkan supaya ada satu lagi perbaikan kita boleh membuat yang akan
benar-benar baik, yang benar-benar boleh mengetatkan sehingga kod ini dan benar-benar memberi kita lima
daripada lima reka bentuk, misalnya.
Apa yang akan lebih baik untuk menghilangkan?
Well, melihat bagaimana bodoh lama blok ini kod adalah hanya untuk melakukan sesuatu yang mudah.
>> Sekarang sebagai diketepikan, seperti yang anda mungkin mempunyai dilihat dalam seksyen super lepas ini
hujung minggu, anda tidak tegas perlu pendakap kerinting apabila anda hanya mempunyai satu
baris kod, walaupun kami mencadangkan menjaga mereka supaya ia membuat banyak
lebih jelas, seperti di U berbentuk Scratch ini blok, apa yang di dalam cawangan.
Tetapi ia tidak akan menjadi baik jika ke atas, apabila diberi input, menjadikannya
huruf besar jika ia tidak, dan apa yang akan menjadi indah dalam kes yang bertentangan jika
ia sudah huruf besar?
Hanya lulus melalui dan biarkan dia bersendirian.
>> Jadi mungkin ia itu.
Saya boleh cuba dan hanya berharap bahawa ia tidak, tetapi biarlah saya
memperkenalkan satu perkara yang lain.
Daripada menggunakan ini terbina dalam terminal tingkap turun di sini, ingat bahawa
icon persegi hitam ini memberikan anda tetingkap terminal yang lebih besar yang boleh saya penuh
skrin jika saya mahu?
Jadi ternyata mereka jenis aneh dinamakan, tetapi ada perkara-perkara ini dipanggil
laman lelaki, laman manual, lelaki untuk jangka pendek, dan saya boleh mengakses oleh
menaip manusia -
apa yang saya mahu jenis yang?
Manusia atas.
>> Dan kini notis jika wujud berfungsi dalam komputer, dalam
kes ini perkakas, yang hanya sistem operasi Linux, ia akan
untuk memberi saya satu set agak samar daripada output, tetapi anda akan mendapati lebih masa itu
ia sentiasa diformat cukup banyak sama supaya anda mula untuk mendapatkan digunakan untuk ia.
Notis di atas ke atas, dan nampaknya adalah dokumentasi yang sama
bagi yang lebih rendah.
Sesiapa yang menulis ia memotong beberapa sudut dan meletakkan semuanya pada satu halaman.
Tujuan perkara-perkara ini dalam hidup adalah untuk menukar
surat kepada atas atau kecil.
>> Perhatikan bahawa di bawah Sinopsis, halaman lelaki itu mengajar saya apa yang saya perlu fail
termasuk untuk menggunakan perkara ini.
Ia memberi saya tandatangan bagi fungsi, kedua-dua mereka, walaupun
walaupun kita sekarang hanya mengambil berat tentang satu.
Berikut adalah penerangan kini.
Untuk menukarkan atas surat c kepada huruf besar jika boleh.
>> Masih tidak nafikan bahawa, tetapi biarlah saya kini lihat di bawah nilai pulangan, perkara
itu diserahkan kembali.
Jadi nilai yang dikembalikan ialah daripada surat ditukar atau c jika
penukaran tidak mungkin.
Apakah c?
>> Watak asal.
>> Watak asal dan kita tahu bahawa dengan, sekali lagi, akan naik kepada
sinopsis, dan sesiapa yang menulis ini fungsi hanya memutuskan bahawa input
untuk ke atas dan ke bawah adalah hanya sewenang-wenangnya akan dipanggil c.
Mereka boleh dipanggil yang paling apa-apa yang mereka mahu, tetapi mereka disimpan
semudah c.
Jadi saya telah berunding halaman lelaki itu.
Ayat ini meyakinkan saya bahawa jika ia bukan satu huruf kecil, ia
akan hanya memberi saya kembali c, yang merupakan sempurna, yang bermakna saya boleh menghilangkan
keadaan lain saya.
>> Jadi biarlah saya kembali ke GEdit, dan sekarang mari saya hanya melakukan ini.
Saya akan tulis pernyataan printf saya.
Saya akan pergi ke hadapan dan kanan di dalam untuk cetak gelung yang keluar, dan mendapatkan
menghilangkan kini keseluruhan ini jika membina.
Tidak adalah idea yang buruk, dan ia adalah sangat banyak betul dan selaras dengan
segala yang kita telah mengajar, tetapi tidak perlu.
Sebaik sahaja anda sedar beberapa perpustakaan fungsi wujud bahawa orang lain
menulis, atau mungkin anda menulis di tempat lain dalam fail, anda boleh menggunakannya dan benar-benar
mula mengetatkan kod.
>> Dan apabila saya mengatakan sesuatu seperti gaya yang baik, hakikat bahawa orang ini dipanggil
berfungsi untuk atas, atau sebelum ini adalah rendah adalah hebat berguna kerana
mereka sangat deskriptif.
Anda tidak mahu untuk memanggil fungsi anda x dan y dan z, yang mempunyai
banyak, makna yang lebih kurang.
Mana-mana soalan-soalan mengenai siri yang penambahbaikan?
>> Jadi memadai untuk mengatakan salah satu takeaways adalah lebih sebagai masalah anda sendiri
set - mungkin masalah set satu, tetapi pasti P menetapkan dua dan seterusnya, walaupun
apabila mereka yang betul tidak semestinya bermakna mereka adalah sempurna hanya
lagi atau terutamanya direka.
Itulah paksi lain untuk mula berfikir tentang.
Jadi ini adalah di dalam rentetan anda memori komputer, tetapi jika anda mempunyai
keseluruhan sekumpulan watak-watak seperti H-E-L-L-O dalam RAM, dan andaikan
bahawa anda dalam program anda memanggil mendapatkan tali berkali-kali seperti yang anda
memanggil mendapatkan tali sekali, maka anda memanggil mendapatkan tali lagi.
Nah, apa yang akan berlaku dari masa ke masa?
>> Dalam erti kata lain, jika anda mempunyai garis kod, walaupun di luar konteks, seperti
rentetan s mendapat -
mari kita buat ini.
Nama rentetan sama mendapatkan tali.
Jadi menganggap bahawa baris kod yang dimaksudkan untuk meminta pengguna untuk namanya.
Ini sejajar seterusnya kod bertujuan untuk meminta pengguna untuk atau sekolahnya, dan
talian ini akan datang, dan sebagainya.
Katalah kita terus bertanya pengguna yang lain dan
satu lagi dan satu lagi tali.
Mereka akan tinggal di dalam memori pada masa yang sama.
Satu tidak akan mengalahkan yang lain.
Sekolah tidak menimpa lain.
Tetapi di manakah mereka semua berakhir di dalam ingatan?
>> Nah, jika kita mula untuk menarik pada skrin, yang boleh kita gunakan benda ini
di sini seperti papan hitam, jika ini hitam segi empat mewakili komputer saya
ingatan, saya akan sewenang-wenangnya bermula membahagikan ia sehingga ke dataran kecil,
setiap yang mewakili satu bait memori.
Terus terang, jika anda mempunyai gigabait RAM hari ini, anda mempunyai satu bilion bait
memori dalam komputer anda, jadi satu bilion ini dua.
Jadi memadai untuk mengatakan, ini tidak benar-benar mengikut skala.
>> Tetapi kita boleh terus menarik semua ini jelas tidak mengikut skala dataran, dan ini
secara kolektif mewakili memori komputer saya.
Sekarang kita hanya akan melakukan dot, dot, dot.
Jadi, dalam erti kata lain, apabila saya kini mendorong pengguna dengan rentetan get memberi saya
tali, apa yang berlaku?
Jika jenis pengguna dalam "hello," yang berakhir dalam H-E-L-L-O. Tetapi andaikan
pengguna itu jenis dalam -
sebenarnya, saya tidak sepatutnya dilakukan hello kerana kita meminta
mereka nama-nama mereka.
Jadi mari kita kembali jika saya boleh melakukan ini.
>> Jadi jika saya taip D-A-V-I-D untuk nama saya, tetapi ingat bahawa baris kedua
kod telah mendapatkan tali lagi untuk mendapatkan sekolah mereka.
Di mana perkataan yang bahawa pengguna jenis dalam akan pergi seterusnya?
Well, mungkin ia akan pergi ke H-A-R-V-A-R-D. Jadi, walaupun saya telah
disediakan sebagai dua baris, ini hanya sejumlah bait dalam anda
RAM komputer.
Ada masalah sekarang kerana sekarang jika saya menggunakan RAM dalam ini sangat berpatutan
tetapi sejenis cara naif, apa yang boleh anda nampaknya tidak membezakan?
Jika satu bermula dan di mana salah satu hujung, bukan?
Mereka jenis kabur bersama-sama.
>> Jadi ternyata komputer tidak melakukan ini.
Biar saya sebenarnya skrol kembali dalam masa yang beberapa watak-watak, dan bukannya Harvard
akan segera selepas nama pengguna, pengguna sebenarnya mendapat, di belakang
tabir, aksara khas dimasukkan oleh
komputer untuk dia atau dia.
/ 0, atau dikenali sebagai watak nul annoyingly dipanggil N-U-L, tidak
N-U-L-L, tetapi anda menulisnya sebagai / 0.
Ia hanya semua bit sifar adalah penanda dalam antara perkataan pertama yang pengguna
ditaip dan kedua.
>> Jadi Harvard sebenarnya kini berakhir sebagai urutan ini watak-watak
dan satu lagi / 0.
Jadi, dalam erti kata lain, dengan mempunyai ini nilai sentinel, lapan sifar berdampingan
bit, kini anda boleh mula untuk membezakan salah satu watak dari yang lain.
Jadi semua masa ini apa yang telah "hello" adalah sebenarnya "hello" dengan / 0, dan
Sementara itu, ada juga yang mungkin RAM menjadi agak sedikit lebih
di dalam komputer.
>> Biar saya melakukan satu perkara lain sekarang.
Ia ternyata bahawa semua ini kuasa dua kita telah melukis, mereka, ya,
tali, tetapi secara umum, perkara-perkara ini adalah tatasusunan.
Array hanya sebahagian memori itu kembali ke belakang untuk kembali ke belakang,
dan anda biasanya menggunakan array dengan cara notasi ini kurungan persegi.
Oleh itu, kita akan melihat ini agak sedikit dari masa ke masa, tetapi biarlah saya pergi ke hadapan dan
membuka, mari kita memanggilnya peringkat umur.
Dan notis apa yang boleh kita lakukan dengan ini cara yang sama, sedikit
sintaks lebih sedikit di sini.
>> Jadi, dalam talian 17 program ini - sebenarnya, membiarkan saya menjalankan program pertama
supaya kita boleh melihat apa yang perkara ini tidak.
Izinkan saya membuat panggilan peringkat umur untuk menyusun program ini.
. Peringkat umur /.
Berapa ramai orang yang berada di dalam bilik?
Memanggilnya tiga.
Umur orang yang pertama?
18, 19, dan 20.
Dan kini agak mustahil, saya hanya telah membuat satu program yang umur mereka
tiga orang.
>> Jadi ada peluang jelas bagi sesetengah aritmetik menyeronokkan di sini.
Syukurlah, matematik adalah betul.
18 pergi ke 19, 19 pergi 20 dan sebagainya.
Tetapi apa yang benar-benar bertujuan untuk menjadi ilustrasi di sini ialah bagaimana kita menyimpan
peringkat umur mereka tiga orang.
Biar saya mengezum masuk pada apa yang berlaku di sini.
>> Jadi pertama, ini beberapa baris pertama perlu akan mendapat cukup biasa.
Saya hanya mendorong pengguna untuk beberapa orang di dalam bilik.
Kemudian saya menggunakan mendapatkan int dan lakukan semasa untuk melakukan ini sekali lagi dan lagi dan lagi.
Kami telah melihat corak yang sebelum ini, tetapi line 27 yang baru dan sebenarnya agak
berguna, dan akan menjadi semakin berguna.
Perhatikan apa yang berbeza dalam talian 27 adalah bahawa saya muncul untuk mengisytiharkan
int dipanggil peringkat umur, tetapi menunggu.
Ia bukan sahaja peringkat umur int.
Ada ini kurungan persegi, dalam yang n.
>> Jadi golongan n dalam konteks ini, tidak dalam satu kenyataan di sini tetapi printf
dalam talian tunggal 27, baris ini adalah berkata, memberi saya n Ints, setiap yang
adalah jenis int.
Jadi ini adalah baldi, jadi untuk bercakap, di, dalam kes ini, tiga integer kembali ke
kembali ke belakang supaya saya berkesan mempunyai tiga pembolehubah.
Alternatif, untuk menjadi jelas, akan ini.
>> Jika saya mahu pelajar pertama umur, saya mungkin melakukan ini.
Jika saya mahu pelajar yang kedua umur saya mungkin melakukan ini.
Jika saya mahu pelajar ketiga umur, saya mungkin melakukan ini.
Dan tuhan melarang kita perlu semua orang umur dalam bilik ini -
Maksud saya, ini adalah satu palang pintu dari banyak salinan, paste lagi dan lagi dan lagi.
Dan ditambah sekali saya menyusun program ini, jika pelajar lain berjalan di lebih daripada
pintu itu, kini nombor saya pembolehubah adalah tidak betul.
>> Jadi apa yang baik tentang array adalah seperti Sebaik sahaja anda mula berasa diri anda
menyalin dan menampal, kemungkinan adalah bahawa adalah tidak pendekatan yang terbaik.
Array dinamik berpotensi.
Saya tidak tahu terlebih dahulu berapa ramai orang akan berada di dalam bilik,
tetapi saya tahu saya perlu n daripada mereka, dan saya akan n memikirkan apabila tiba masanya.
Ini sejajar kod sekarang bermakna, beri saya sebahagian memori yang kelihatan seperti ini
di mana bilangan kotak pada skrin bergantung sepenuhnya pada n yang
pengguna ditaip masuk
>> Jadi sekarang sepanjang program ini adalah sebenarnya cukup sama dengan apa yang kita
hanya lakukan dengan watak-watak.
Notis saya mempunyai untuk gelung bermula pada baris 30.
Jadi sejurus selepas saya mendapat pelbagai, saya melelar dari y bersamaan dengan sifar pada sehingga n.
Saya hanya mempunyai ini printf nafikan Mesej hanya mengatakan, beri saya umur
orang #% i, jadi nombor satu, nombor dua, nombor tiga.
Dan mengapa saya lakukan ini?
Terus terang, manusia lebih suka untuk mengira dari satu atas sehingga manakala ahli sains komputer,
sifar di atas.
saintis komputer tidak akan menggunakan jenis ini program, jadi kita
akan hanya mula mengira pada satu-satu seperti orang normal.
>> Dan kini dalam talian 33, notis sedikit sekeping berbeza sintaksis.
Umur i-ke-dalam yang berubah-ubah jenis pelbagai akan mendapat int an.
Dan kini akhir sekali, ini hanya aritmetik di sini.
Saya membuat keputusan dalam gelung berasingan untuk menuntut beberapa masa berlalu, dan kini dalam ini
gelung berasingan, ayat-ayat ini melaksanakan.
>> Satu tahun dari sekarang, orang i akan i lama tahun, tetapi notis ini bukanlah
berubah-ubah i.
Ini kini% i untuk int.
Dan notis sebagai pemegang tempat pertama, saya pasangkan i campur 1, supaya kita mengira seperti
orang biasa.
Dan kemudian untuk nilai umur mereka, lama i tahun, saya mengambil masa yang lama kurungan
i - dan mengapa saya melakukan tambah satu di sini?
Mereka hanya berusia.
Ia adalah pilihan bodoh saya program.
Mereka hanya berumur satu tahun.
Saya boleh menaip apa-apa bilangan yang Saya benar-benar mahu di sana.
>> Jadi apa yang sebenarnya semua relevan di sini?
Baiklah, biar saya sebenarnya skrol kembali di sini dan cat gambar
apa yang akan berlaku.
Apa yang kita akan lakukan dengan kami seterusnya Set Masalah Dua yang berkecimpung dalam
dunia kriptografi.
Jadi ini adalah rentetan aksara, jadi urutan pelbagai aksara, dan apa
adakah ini katakan?
Ia bukan dalam versi dalam talian satu slaid.
>> Jadi saya mendakwa bahawa ini sama ini, iklan bodoh dari bertahun-tahun
lalu yang benar-benar mungkin ingat salah satu asal-usulnya.
Jadi ini adalah satu contoh penyulitan atau kriptografi.
Ia ternyata bahawa jika anda mahu sebenarnya menghantar maklumat atau berkongsi
maklumat dengan seseorang yang selamat, seperti mesej seperti ini, anda boleh
berebut huruf.
Tetapi biasanya, perkataan yang tidak hancur secara rawak.
Mereka permuted dalam beberapa cara atau diubah dalam beberapa cara supaya - oops.
Itulah spoiler menyeronokkan untuk masa akan datang.
>> Jadi, anda boleh merancang apa yang nampaknya O ke B. Perhatikan bahawa garisan sehingga
permodalan bijak.
Rupa-rupanya menjadi r e.
Rupa-rupanya F-H-E-R menjadi S-U-R-E. Jadi ternyata ada pemetaan, dan dalam
kes ini ada yang agak bodoh pemetaan jika sesiapa telah digambarkan ia keluar?
Ini adalah sesuatu yang dinamakan Rot 13 Putar 13.
Ia adalah bodoh penyulitan mekanisme kerana ia benar-benar hanya
menambah 13 hingga setiap satu daripada huruf, bodoh dalam erti kata bahawa jika anda hanya
mempunyai sedikit masa lapang di tangan anda dan pensil, atau anda hanya fikir ia
melalui dalam kepala anda, anda boleh cuba semua tambahan mungkin - satu, dua,
tiga, dot, dot, dot, 25 hanya memutarkan keseluruhan abjad, dan
akhirnya, anda akan memikirkan apa mesej ini.
Jadi, jika anda melakukan sesuatu seperti ini di sekolah gred lulus mesej kepada anda
kawan baik, jika sekolah gred anda guru hanya membaca melalui
mesej dan kasar memaksa penyelesaian, anda mungkin telah mendapat
jawapan oleh itu.
>> Sekarang sudah tentu, dalam dunia sebenar, kriptografi yang lebih canggih.
Ini adalah coretan teks dari sistem komputer yang mempunyai nama pengguna dan
kata laluan, kerana hampir semua kita lakukan, dan ini adalah apa yang mungkin kata laluan anda
kelihatan seperti jika disimpan di keras anda memandu tetapi dalam bentuk disulitkan.
Ini bukan sahaja satu putaran surat, A ialah B dan B ialah C. Ini adalah
lebih canggih, tetapi ia menggunakan apa yang diketahui umum sebagai kunci rahsia
kriptografi.
Gambar ini menceritakan seperti berikut cerita dengan ikon ini.
>> Di sebelah kiri, kita mempunyai apa yang kami akan memanggil teks biasa.
Dalam dunia kriptografi, jelas teks hanya mesej asal
ditulis dalam bahasa Inggeris atau Perancis atau mana-mana bahasa sekalipun.
Jika anda ingin menyulitkan, kita akan lulus ia bergambar melalui mangga, jadi
beberapa jenis algoritma, beberapa fungsi atau program yang seseorang menulis
yang duduk huruf diharapkan complicatedly lebih daripada sekadar menambah 13
kepada setiap daripada mereka.
>> Apa yang anda dapat daripada proses yang di tengah ada dipanggil cyphertext.
Jadi jenis perkataan seksi.
Ia hanya bermakna ia adalah disulitkan versi teks biasa.
Dan hanya jika anda mempunyai rahsia yang sama, 13 atau tolak 13, anda dapat
menyahsulit mesej seperti itu.
>> Jadi dalam Set Masalah Dua, antara perkara anda akan lakukan jika dalam Hacker
Edition, anda akan mempunyai untuk menulis kod untuk memecahkan kata laluan ini, memikirkan
apa yang mereka dan bagaimana mereka disulitkan, walaupun kita lakukan memberi anda sedikit
petunjuk sepanjang jalan.
Dalam Edisi Standard, kita memperkenalkan beberapa rahsia, penyulitan
mekanisme, satu dipanggil Caesar, satu dipanggil Vigenere, yang masih
sifer putaran di mana A menjadi sesuatu, B menjadi sesuatu, tetapi
anda perlu lakukan ia programatik kerana sesungguhnya akan menjadi rahsia
utama yang terlibat yang biasanya sebilangan atau kata kunci yang hanya
penghantar dan penerima ini Mesej perlu memahami.
>> Sekarang, ini sebenarnya mempunyai jelmaan dalam dunia sebenar.
Ini, misalnya, adalah anak yatim sedikit Cincin penyahkod rahsia Annie, dan anda
sebenarnya boleh melaksanakan ini sifer putaran -
A menjadi sesuatu, B menjadi sesuatu - dengan beberapa roda,
satu di luar, satu di bahagian dalam itu bahawa jika anda berputar roda atau
cincin, anda sebenarnya boleh membariskan huruf dengan huruf yang berbeza,
mendapat kod rahsia.
Dan sebagainya sebagai cliffhanger untuk hari ini, apa yang saya fikir saya akan lakukan adalah sedikit
throwback bahawa jika anda menghidupkan TV pada 24 Disember, anda boleh menonton
filem iklan nauseum untuk 24 jam berturut-turut.
Tetapi hari ini, saya akan buka di sini dan memberikan kita hanya dua minit dari
pedagogically berkaitan Krismas Story dengan rakan-rakan kecil bernama Ralphie.
>> [MAIN SEMULA VIDEO]
>> -Jadilah ia dikenali kepada segala-galanya yang Ralph Parker adalah dengan ini dilantik sebagai
ahli Anak-Anak Yatim Little Annie rahsia bulatan dan adalah berhak kepada semua
penghormatan dan manfaat berlaku kepadanya.
>> -Ditandatangani, Little Orphan Annie.
Balas, Pierre Andre dalam dakwat.
Kepujian dan faedah sudah pada usia sembilan tahun.
>> [Menjerit ON RADIO]
>> Ayuh, mari kita mendapatkan pada dengannya.
Saya tidak memerlukan semua itu jazz tentang penyeludup dan lanun.
>> -Dengar malam esok bagi pengembaraan penutup hitam
kapal lanun.
Kini, sudah tiba masanya untuk Rahsia Annie Mesej untuk anda ahli
bulatan rahsia.
Ingat, anak-anak.
Hanya ahli Circle Rahsia Annie boleh decode mesej rahsia Annie.
Ingat, Annie adalah bergantung kepada anda.
Set pin anda untuk B2.
Berikut adalah mesej.
12, 11, 2 -
>> -Saya dalam mesyuarat rahsia pertama saya.
>> -25, 14, 11, 18, 16 -
>> -Pierre adalah pada malam ini suara besar.
Saya boleh memberitahu mesej yang malam ini adalah benar-benar penting.
>> -3, 25.
Itulah mesej dari Annie dirinya.
Ingat, jangan beritahu sesiapa.
>> -90 Saat kemudian, saya dalam satu-satunya bilik di rumah di mana seorang budak sembilan
boleh duduk di privasi dan decode.
Aha, B. saya pergi ke depan.
E. Perkataan pertama adalah "tidak." S. Ia telah datang lebih mudah sekarang.
U. 25.
Itu R.
>> -Ayuh, Ralphie.
Saya terpaksa pergi.
>> I'll-betul turun, Ma.
Pakar Gee.
>> -T. O. Pastikan anda.
Pastikan untuk apa?
Apa yang Anak-Anak Yatim Little Annie cuba katakan?
Pastikan untuk apa?
>> -Ralphie, Randy telah mendapat untuk pergi.
Anda akan sila datang keluar?
>> -Baiklah, Ma.
Saya akan segera keluar.
>> -Saya telah mendapat lebih dekat dengan sekarang.
Ketegangan adalah amat dahsyat.
Apakah ia?
Nasib planet boleh tergantung di kira-kira.
>> -Ralphie, pergi Randy terpaksa.
>> I'll-betul keluar untuk menangis dengan kuat.
>> -Hampir di sana.
Jari saya terbang.
Fikiran saya perangkap besi.
Setiap liang digetarkan.
Ia adalah hampir jelas.
Ya, ya, ya, ya, ya.
>> -Pastikan anda minum Ovaltine anda.
Ovaltine?
A komersial tdk bagus?
Celaka.
>> [AKHIR VIDEO MAIN SEMULA]
>> SPEAKER 1: Ini adalah CS50, dan bahawa akan Set Masalah Dua.
Jumpa anda minggu depan.
>> SPEAKER 2: Pada seterusnya CS50, ini berlaku.
>> SPEAKER 1: Jadi, satu topik yang kita tidak mempunyai melihat setakat ini
bahawa petunjuk fungsi.
Kini, penunjuk fungsi hanya alamat awam
fungsi, tetapi lebih seperti -
anak a -