>> SPEAKER 1: Baiklah.
Selamat datang kembali.
Ini adalah Minggu Dua dari CS50, dan kami memiliki sejauh ini telah menggunakan fungsi tetapi
sebagian besar diambil mereka untuk diberikan.
Kami telah menggunakan printf yang memiliki efek samping dari pencetakan
hal di layar.
Kami telah menggunakan get-int, dapatkan mengapung.
>> Tetapi bagaimana jika Anda benar-benar ingin membuat fungsi sendiri, karena beberapa
Anda mungkin sudah mulai lakukan untuk Masalah Set One, meskipun
tidak benar-benar diperlukan?
Nah, mari kita pergi ke depan dan kembali bahwa masalah hanya meminta pengguna untuk
nama dan mencetak sesuatu di layar, tetapi cobalah untuk faktor beberapa
dari kesamaan bahwa kita sudah terlihat dalam kode kami sejauh ini.
Jadi maksud saya berikut ini.
>> Aku akan pergi ke depan dan menciptakan sebuah program baru, sebut saja
itu hello.c seperti biasa.
Aku akan pergi ke depan dan memberi diriku termasuk io.h standar di atas.
Aku akan juga memberi diriku preemptively perpustakaan CS50 sehingga
Saya tidak dimarahi oleh compiler.
Dan sekarang aku akan pergi ke depan dan menyatakan int, utama, batal.
>> Dan kemudian di sini, ini adalah di mana saya ingin untuk mulai outsourcing fungsi untuk
beberapa fungsi lain yang aku sendiri akan menulis tapi itu tidak
saat ini ada.
Misalnya, bahwa saya ingin menulis fungsi yang memungkinkan saya untuk
mencetak halo, koma, dan maka nama beberapa pengguna.
Daripada terus melakukan printf halo,% s, tidak akan lebih baik jika
hanya ada fungsi yang disebut tidak printf tapi nama cetak?
>> Jadi dengan kata lain, saya ingin bisa menulis sebuah program yang tidak sedikit
sesuatu seperti ini.
Pertama, saya akan mengatakan printf Anda nama, sehingga mendorong pengguna untuk
memberi saya namanya, dan kemudian aku akan menggunakan string s akrab bagi
menyatakan string.
Beri aku sebuah variabel bertipe string, menyebutnya s, dan simpan di bahwa
hasil memanggil get tali.
Tapi sekarang dalam beberapa pekan terakhir, saya akan agak perlahan dilakukan halo,% s / n.
>> Dan dengan kata lain, kita pernah melihat ini Contoh beberapa kali, dan itu
Contoh sepele, karena hanya ada satu baris kode sehingga benar-benar tidak
masalah besar untuk terus-menerus mengetikkan lagi.
Tapi anggaplah bahwa baris kode sebenarnya itu menjadi beban, dan
itu bukan satu baris kode tapi itu 10 baris kode beberapa minggu dari sekarang,
dan Anda hanya mendapatkan lelah menyalin dan menyisipkan atau
mengetik ulang kode yang sama.
Bukankah lebih bagus daripada melakukan printf halo,% s dan sebagainya,
tidak akan lebih baik jika hanya ada fungsi yang disebut nama cetak yang
mengambil argumen -
dengan kata lain, dibutuhkan masukan -
dan kemudian koma.
Jadi fungsi itu, tidak akan itu akan baik jika itu ada?
Maka saya tidak akan perlu khawatir tentang printf apa, apa% s dan semua
kompleksitas ini yang tidak semua yang menarik.
Mereka berguna.
>> Jadi nama cetak, sayangnya, tidak menemukan sekitar 40 ditambah tahun yang lalu.
Tidak ada yang berpikir untuk menulis itu.
Tapi itulah keindahan memiliki bahasa pemrograman, seperti di
Scratch Anda dapat menentukan blok kustom, sehingga di C dan sebagian bahasa apapun, bisa Anda
mendefinisikan fungsi Anda sendiri, bisa Anda mendefinisikan fungsi sendiri.
Jadi meskipun kita mendapatkan utama dengan otomatis gratis, kita dapat mendeklarasikan
fungsi kita sendiri.
>> Jadi aku akan membuat beberapa ruang di sini atas, dan aku akan menyatakan saya
fungsi sendiri yang akan terlihat agak aneh pada awalnya tapi kami akan datang
kembali ke ini sebelumnya lama.
Aku akan mengatakan batal, sehingga menunjukkan fungsi ini tidak
sesuatu, memiliki efek samping, tetapi tidak kembali sesuatu kepada saya dalam
cara yang sama yang mendapat int atau mendapatkan string itu sendiri tidak.
Dan aku akan memberikan fungsi ini nama nama cetak, dan aku akan
menetapkan bahwa orang ini akan mengambil string, dan aku akan menyebutnya
string name.
Saya bisa menyebutnya apa pun yang saya inginkan, tapi saya ingin kode saya menjadi mendokumentasikan diri.
Dengan kata lain, jika salah satu dari Anda adalah untuk membuka file ini dan membacanya, Anda bisa
semacam menyimpulkan dari nama yang masukan apa peran yang seharusnya dimainkan.
>> Dan sekarang di bawah itu, aku akan membuka keriting brace dan tertutup keriting brace,
dan jadi perhatikan Saya sudah mengikuti yang sama pola pada baris empat sampai tujuh sebagai
Saya sudah mengikuti selama seminggu baik ditambah sekarang antara, misalnya, garis sembilan dan
14 yang membentuk utama.
Dengan kata lain, cetak nama adalah fungsi lain.
Sekarang, compiler tidak akan tahu untuk memanggil hal ini secara otomatis
karena saya benar-benar hanya menciptakannya, tetapi akan tahu masih memanggil utama
secara otomatis, dan kemudian tentu saja dalam baris 13, saya memanggil fungsi saya sendiri.
Dan karena saya telah menyatakan bahwa fungsi up on line empat sebelum main,
ini akan mengajarkan compiler apa kutipan, tanda kutip, "nama cetak"
berarti dan apa yang harus dilakukan.
Jadi aku semacam memberikan kebiasaan baru blok dalam konteks, katakanlah, Scratch.
>> Jadi di sini, saya dapat menempatkan bahwa sangat umum atau pola berulang kode saya tetap
menulis di kelas, printf % S halo,% s / n ", -
apa yang saya ingin menempatkan di sini?
S?
Jadi saya ingin menuliskan nama dalam konteks ini.
Jadi perhatikan sedikit dikotomi di sini.
Karena saya menyatakan fungsi sendiri dan saya agak sewenang-wenang disebut
itu mencetak nama, dan karena aku sudah ditentukan dalam tanda kurung bahwa ini
Fungsi mengambil satu argumen, jenis yang merupakan string - jadi kata
atau frase atau sesuatu seperti itu - dan Saya menelepon bahwa nama argumen, bahwa
berarti satu-satunya variabel yang ada di ruang lingkup, sehingga untuk berbicara, adalah nama.
>> S hanya ada antara apa dua kurung kurawal, tentu saja?
Yah benar, seperti baris 10 melalui 14, jadi hanya seperti pada hari Senin tidak dapat menggunakan
S, tapi apa yang bisa saya lakukan adalah lulus S dalam nama cetak.
Cetak nama Kebetulan untuk memberikan alias, sinonim, nama panggilan,
menyebutnya nama, dan sekarang menggunakannya di baris ini.
Jadi sekarang mari saya simpan ini, zoom out.
>> Biarkan aku pergi ke depan dan membuat halo.
Terlihat bagus.
Tidak dimuntahkan kesalahan. . / Hello Enter.
Siapa nama saya?
David.
Dan halo Daud.
Jadi tidak semua yang menarik, tapi hanya berpikir sekarang.
Sekarang Anda memiliki bahan yang sama seperti yang kita lakukan di Scratch untuk
membuat fungsi kita sendiri.
>> Tapi ada sedikit gotcha.
Misalkan bahwa aku tidak benar-benar berpikir ini melalui dan saya benar-benar tanpa
benar-benar berpikir tentang hal itu menulis yang berfungsi di sini.
Terasa sangat masuk akal.
Dalam Scratch tidak ada pengertian lokasi di script Anda.
Anda bisa menempatkan satu di sini, satu di sini, satu di sini, dan mungkin mulai
terlihat sedikit berantakan jika Anda tidak berbaring dengan rapi, tapi tidak
peduli di mana secara fisik script berada di layar.
Sayangnya di C - dan ini tidak seperti bahasa seperti Java dan Python
dan lain-lain bahwa Anda mungkin akrab dengan - sayangnya dalam C, agar tidak
penting karena menonton apa akan terjadi sekarang.
>> Fungsi default yang akan untuk mengeksekusi, tentu saja, utama.
Main akan memanggil nama cetak pada baris delapan, tapi sayangnya,
compiler bahkan tidak akan tahu bahwa nama cetak ada sampai mencapai garis 11,
yang sayangnya akan terlambat.
Jadi mari kita lakukan membuat halo.
Dan sekarang sialan, dua kesalahan yang dihasilkan.
Jadi sekarang biarkan aku gulir ke atas untuk sangat pertama, karena kami harus selalu melakukan, dan
melihat bahwa itu berteriak padaku, "Deklarasi implisit fungsi
cetak nama. "
>> Jadi kita telah melihat pesan ini sebelumnya, deklarasi implisit fungsi.
Ketika kita telah melihat bahwa jenis kesalahan?
Ketika saya tidak termasuk perpustakaan.
Jika saya lupa cs50.h dan saya akan mendapatkan berteriak untuk mendapatkan tali atau mendapatkan int.
Tapi dalam kasus ini, fungsi ini cetak namanya tidak di perpustakaan, kan?
Ini benar-benar di file ini, sehingga apa benar-benar masalah?
>> Nah sayangnya dalam C, itu akan membawa Anda sehingga sangat harfiah bahwa jika Anda
ingin fungsi yang disebut nama cetak untuk ada, Anda juga harus menerapkan
yang berfungsi pada bagian paling atas Anda kode agar dapat diakses untuk menurunkan
fungsi, tapi terus terang, yang menjadi ceroboh sangat cepat.
Secara pribadi, saya suka menempatkan utama pertama karena maka itu sangat jelas apa ini
Program tidak pada pandangan pertama.
Dan ditambah, Anda bisa masuk ke sudut aneh kasus di mana jika x ingin menelepon
y tapi y sebut x, Anda hanya secara fisik tidak bisa benar-benar menempatkan satu
di atas yang lain.
>> Tapi ternyata di C, kita dapat memecahkan ini sangat sederhana.
Aku akan menaruh sedikit ruang di sini, dan aku hanya akan
Terlebih Dahulu, meskipun agak berlebihan, akan mengajarkan
compiler bahwa ada fungsi disebut nama cetak, dibutuhkan string,
dan aku akan menelepon itu nama titik koma.
>> Jadi sekarang ini sejalan empat, yang kami belum pernah melihat sebelumnya, adalah sebuah deklarasi
dari nama fungsi print, tapi itu hanya sebuah janji bahwa fungsi ini akan
akhirnya didefinisikan, akhirnya diimplementasikan.
Ini sekarang saya bisa meninggalkan sendirian karena sekarang ini adalah definisi,
pelaksanaan, semacam mil terakhir pelaksanaan ini
fungsi tertentu.
Jadi terus terang itu bodoh, itu menjengkelkan, tapi ini adalah cara C adalah, dan itu
karena membawa Anda sangat harfiah dan, sebagai komputer terus terang harus,
hanya tidak persis apa yang Anda kirim ke lakukan, dan sehingga pemesanan sangat penting.
>> Jadi ingatlah bahwa dalam pikiran dan lagi, mulai melihat terulangnya pola.
Kemungkinan besar Anda akan, jika Anda belum sudah, mulai menemukan pesan
seperti ini yang sekilas tampak benar-benar samar, tetapi jika Anda mulai
untuk mencari kata-kata kunci seperti "Deklarasi implisit," menyebutkan dari
fungsi dalam hal ini - dan terus terang, Anda kadang-kadang bahkan mendapatkan sedikit hijau
simbol wortel yang memberitahu Anda di mana masalah mungkin -
Anda dapat mulai bekerja dengan cara Anda melalui belum terlihat pesan kesalahan.
Setiap pertanyaan untuk menulisnya fungsi sendiri dengan cara ini?
>> Mari kita lakukan sesuatu itu adalah sedikit lebih menarik.
Daripada hanya melakukan sesuatu yang memiliki efek samping dari pencetakan, biarkan aku pergi
depan dan menyimpan file baru, dan kami akan sebut positive.c ini, meskipun itu
akan menjadi sedikit berbeda dibandingkan terakhir kali.
Dan kali ini, saya ingin kembali menerapkan waktu lalu misalnya positive.C, yang
adalah memaksa pengguna untuk memberikan saya bilangan bulat positif.
Tapi aku harus menggunakan mendapatkan int terakhir kali.
Bukankah menyenangkan jika ada fungsi disebut mendapatkan int positif
bahwa aku hanya bisa outsourcing ini bagian dari fungsi ke?
Jadi perbedaan di sini adalah kita akan menerapkan mendapatkan int positif, tapi tidak seperti
Nama cetak yang memiliki efek samping - itu tidak kembali sesuatu bagi saya seperti
nomor atau string -
mendapatkan int positif, tentu saja, akan kembali, mudah-mudahan, int positif.
>> Jadi mari kita lakukan ini.
Sertakan cs50.h, Termasuk standar io.h.
Int void main.
Dan sekarang di sini, aku akan pergi ke depan dan katakanlah int, sebut saja n, sama
mendapatkan int positif.
Dan seperti mendapatkan int sudah ada karena staf menulis itu, aku akan
untuk menganggap untuk saat itu mendapatkan int positif ada, dan sekarang aku akan
untuk terus maju dan mengatakan printf, terima kasih untuk% i / n ", n.
>> Jadi sekarang jika saya mengkompilasi program ini, apa yang akan terjadi di terminal saya
jendela di bagian bawah layar?
Aku akan mungkin mendapatkan bahwa kesalahan yang sama seperti sebelumnya.
Jadi mari kita coba ini.
Membuat positif.
Dan lagi, deklarasi implisit fungsi, dapatkan int positif.
Jadi kita bisa menyelesaikan ini dalam beberapa cara.
Aku akan tetap sederhana dan hanya menempatkan deklarasi saya sampai di sini dan mendapatkan
int positif.
Aku butuh yang disebut tanda tangan.
Tanda tangan hanya mengacu dengan estetika
baris pertama dari program ini.
Jadi apa yang harus mendapatkan positif int kembali?
>> Jadi int.
Maksudku idealnya, itu akan kembali sesuatu seperti int positif, tapi itu
tidak ada.
Kami sudah tidak melihat bahwa di antara data kami jenis, jadi kita harus berurusan dengan
Fakta bahwa kita memiliki sangat sedikit tipe data untuk bekerja dengan.
Tapi kita bisa mengembalikan int dan hanya percaya bahwa itu akan positif.
Ini akan dipanggil mendapatkan int positif.
>> Dan sekarang bagaimana argumen?
Apakah mengambil masukan apapun?
Apakah perlu masukan apapun?
Jadi tidak perlu tahu di muka apapun.
Dapatkan string tidak, dapatkan int tidak.
Printf tidak - itu harus memiliki beberapa masukan berlalu ke dalamnya - dan nama cetak
diperlukan beberapa masukan, tapi sampai int positif tidak.
Jadi aku akan secara eksplisit memberitahu kekosongan compiler.
Void adalah tidak adanya hal lain.
Jadi batal berarti tidak ada yang masuk ke dalam dari mereka kurung, koma.
>> Dan sekarang di bawah file saya - dan lagi, aku hanya menjadi semacam anal
di sini menempatkan utama di bagian atas, yang adalah praktik yang baik karena dengan cara ini,
kapan saja Anda atau orang lain membuka file Anda,
fungsi adalah di sana.
Anda dapat menyelam di dari satu persegi.
Jadi sekarang aku akan menduplikasi ini, mendapatkan batal int positif, tapi aku tidak
akan memukul titik koma sekarang.
Aku akan membuka kurung kurawal, dan sekarang aku perlu meminjam
beberapa ide dari Senin.
>> Jadi seperti yang Anda ingat, kita melakukan sesuatu seperti melakukan hal berikut saat
sesuatu yang benar.
Dan apa yang saya lakukan?
Aku melakukan sesuatu seperti memberikan saya bilangan bulat positif,
sedikit dari prompt.
Saya bisa menggunakan kata-kata yang saya inginkan.
Dan kemudian saya menggunakan apa?
Int n sama mendapatkan int, tanpa argumen untuk itu.
>> Dan melihat perbedaan.
Bila Anda memanggil fungsi, bila Anda menggunakan fungsi, Anda tidak dimasukkan ke dalam kekosongan.
Anda hanya melakukannya ketika mendeklarasikan fungsi, mengajar compiler apa
itu harus berharap.
Jadi Anda tidak perlu menempatkan membatalkan sana sendiri.
>> Dan sekarang apa kondisi saya?
Nah, n tidak sama dengan positif, tapi itu hanya pseudo-code.
Jadi bagaimana cara mengungkapkan hal ini lebih bersih?
Jadi kurang dari atau sama dengan nol.
Jadi sekali lagi, melihat Anda dapat melakukan kurang dari atau sama dengan.
Meskipun itu dua terpisah simbol, Anda dapat melakukannya pada
keyboard Anda seperti itu.
>> Tapi masih ada bug yang Aku kacau terakhir kali juga.
Saya harus menyatakan -
persis.
Saya harus menyatakan n luar loop.
Jadi saya harus menempatkan n di sini, dan saya tidak ingin kembali mendeklarasikan di sini
supaya saya mendapatkan variabel baru.
Saya hanya ingin memberikan nilai di sini.
>> Dan sekarang aku tidak cukup dilakukan di sini.
Biar terburu-buru dan berpura-pura aku sudah selesai.
Membuat positif, dan sekarang ada kesalahan baru.
Pengendalian mencapai akhir fungsi non-batal.
Jadi pesan kesalahan baru, tetapi jika Anda jenis menggoda selain dari masing-masing kata-kata,
mungkin mengisyaratkan apa yang salah.
>> Kontrol.
Kontrol hanya berarti untuk pesanan operasi dalam sebuah program.
Komputer yang memegang kendali dan sesuatu yang tidak beres.
Jadi mencapai akhir fungsi non-batal.
Fungsi apa itu rupanya maksud?
Apa fungsi non-batal?
Jadi bisa int positif, dan sedikit membingungkan dalam sumur itu,
itu semacam kekosongan.
Memiliki spesifikasi batal untuk perusahaan argumen, tapi outputnya akan
menjadi tipe n.
Jadi kata di sebelah kiri adalah disebut tipe kembali.
Kata di dalam sini adalah nol atau lebih argumen
bahwa fungsi memakan waktu.
>> Jadi apa yang harus saya lakukan?
Pada titik ini dalam kode saya, line 21 di mana prompt berkedip sekarang adalah, saya
memiliki int positif di dalam dari variabel yang disebut n.
Bagaimana cara mengembalikannya ke main?
Secara harfiah.
Kembali n titik koma.
>> Jadi seperti Colton kembali sepotong kertas dengan jawaban saya dengan menjatuhkan
potongan kertas dalam hitam kecil kotak di atas meja, untuk melakukan itu dalam
kode, Anda benar-benar hanya menulis, kembali n, dan itu seolah-olah Colton yang
menyodorkan sesuatu kembali fisik.
Dalam hal ini, apa yang terjadi adalah mendapatkan int positif akan menyerahkan kembali
apa mungkin positif integer untuk siapa?
Mana nilai yang berakhir?
Itu berakhir dalam variabel ini, n, dan maka kita lanjutkan dengan garis sembilan.
>> Jadi dengan kata lain, dalam rangka operasi, program ini dimulai
melaksanakan, dan kompilator menyadari, oh, Anda ingin perpustakaan?
Biarkan aku pergi ambil apa pun yang ada di dalamnya itu.
Oh, Anda ingin perpustakaan IO standar?
Biarkan aku pergi ambil apa pun yang ada di dalamnya itu.
Apa compiler berkata kepada dirinya sendiri ketika hits line empat?
Oh, Anda berjanji untuk melaksanakan fungsi yang disebut mendapatkan positif, namun
kita akan kembali nanti, sesuatu sepanjang garis itu.
>> Void main Int hanya berarti inilah keberanian dari program saya.
Baris tujuh hanya penjepit keriting.
Baris delapan mengatakan di sebelah kiri, berikan saya 32 bit untuk integer, sebut saja n.
Di sisi kanan, itu mengatakan mendapatkan int positif.
Sekarang mari kita jeda cerita karena sekarang Saya tidak terus bergerak kursor saya turun.
Kursor saya sekarang turun di sini karena sekarang mendapatkan int positif mengeksekusi.
Int n dinyatakan.
Lakukan hal berikut.
Printf memberi saya bilangan bulat positif.
>> Dapatkan int dari pengguna, menyimpannya dalam n, dan mungkin melakukan ini lagi dan lagi.
Loop ini berarti bahwa kode ini mungkin mengeksekusi atas dan ke bawah seperti ini lagi
dan lagi, tapi ketika pengguna akhirnya bekerja sama dan memberi saya positif
int, aku memukul line 21, di mana titik nomor diserahkan kembali, dan mana yang
Aku harus menyorot sekarang?
Sembilan.
Control, sehingga untuk berbicara, kembali untuk berbaris sembilan.
Itulah garis yang kini berkuasa.
>> Jadi itulah apa yang telah terjadi di kali ini di bawah tenda, tetapi
ketika kita telah menggunakan fungsi seperti printf atau bahkan mendapatkan string yang orang lain
menulis untuk Anda, kontrol diserahkan baris kode pergi ke orang lain
oleh baris demi baris.
Hanya saja kita tidak bisa melihatnya dan kami tidak bisa benar-benar menggambarkan dalam hal ini
Program karena dalam beberapa lainnya file di hard drive
tanpa sepengetahuan kami.
Jadi mari kita benar-benar mengkompilasi dan menjalankan sekarang.
>> Membuat positif.
Kompilasi, itu kemajuan.
. / Positif.
Beri aku bilangan bulat positif.
Mari kita sulit.
Negatif 1.
Nol.
Mari kita berikan 50.
Terima kasih untuk 50, dan sehingga kontrol kini telah kembali.
Semua pertanyaan, kemudian, pada itu?
Ya?
>> [Tak terdengar].
>> Katakanlah lagi.
Oh, pertanyaan yang bagus.
Jadi Anda mungkin melihat paralel di sini bahwa Aku agak memotong sudut pada.
Sejalan 12, saya katakan, dapatkan int positif mengembalikan sebuah int, tapi itu sama
logika, sekarang berdiri untuk alasan bahwa dalam jalur enam, aku mengatakan bahwa pengembalian utama
int, tapi apa yang kita tidak pernah telah di salah satu program kami?
Kami tidak pernah memiliki penyebutan kata ini kembali kunci.
>> Jadi ternyata bahwa dalam C, setidaknya versi itu yang kita gunakan
dibuat pada tahun 1999, secara teknis, ini adalah terjadi untuk Anda secara otomatis.
Setiap kali Anda menerapkan program dan Anda melaksanakan fungsi yang disebut utama,
fungsi yang akan kembali nol oleh default, jika Anda tidak mengatakan sebaliknya,
dan nol hanya konvensi.
Dunia kembali nol sehingga menunjukkan bahwa semuanya baik-baik,
efektif meninggalkan kami dengan empat miliar hal yang mungkin yang bisa
salah sehingga jika kita kembali satu, yang mungkin menandakan kode yang berarti ini
hal yang tidak beres.
Kita bisa kembali dua, yang berarti Hal ini lain beres.
Kita bisa kembali empat miliar, yang berarti hal ini lain beres.
>> Dan jika Anda sekarang berpikir tentang Anda sendiri PC atau Mac, Anda mungkin ingat bahwa
kadang-kadang Anda mendapatkan pesan kesalahan yang rumit dari perangkat lunak yang Anda
menggunakan, dan kadang-kadang memiliki manusia deskripsi ramah, tapi ada
seringkali berupa kode atau nomor di layar?
Jika ini tidak datang ke pikiran, hanya mengawasi keluar untuk itu.
Itu biasanya apa ini Kode mengacu.
Mereka termasuk dalam Microsoft Word dan program lain sehingga jika Anda mengajukan
laporan bug dengan perusahaan, Anda dapat memberitahu mereka, oh, saya punya kesalahan nomor 45.
Dan beberapa programmer kembali di perusahaan dapat melihat bahwa di nya
kode dan berkata, oh, itu karena aku membuat bug ini dan itulah sebabnya pengguna
mendapat pesan ini.
>> Tapi terus terang, itu hanya sedikit mengganggu dan sedikit membosankan untuk
menyimpulkan bahwa, setidaknya pada kami beberapa program pertama, jadi kami sudah
telah menghilangkan itu.
Tapi selama ini setiap satu dari Anda fungsi utama telah diam-diam punya ini
baris otomatis ditambahkan untuk Anda oleh compiler, hanya dengan konvensi untuk
menghemat waktu.
>> [Tak terdengar].
>> Anda tidak perlu memasukkannya dalam utama.
Itu baik-baik saja.
Anda perlu untuk memasukkannya jika Anda menerapkan fungsi seperti ini.
Jika tidak datar fungsi keluar tidak akan bekerja.
Tapi dalam utama, itu tidak perlu.
Dalam satu atau dua minggu, kami akan mulai mendapatkan menjadi kebiasaan bahwa setelah kita ingin memulai
menandakan kesalahan.
Pertanyaan yang bagus.
>> Istirahat lisan begitu cepat untuk menyebutkan bahwa Jumat ini, kita tidak akan makan siang
per se, tapi kami akan makan malam dengan beberapa mahasiswa dan staf.
Jika Anda ingin bergabung dengan kami, merasa bebas untuk pergi ke cs50.net/rsvp.
06:00 Jumat ini.
Ruang adalah, seperti biasa, terbatas, tetapi kita akan terus melakukan ini pada hampir
setiap minggu jika ruang habis minggu ini.
>> Jadi cliffhanger yang kita tinggalkan di Senin adalah bahwa string dapat benar-benar
diindeks ke dalam, yang hanya berarti Anda bisa mendapatkan karakter pertama,
karakter kedua, karakter ketiga dan sebagainya, karena Anda dapat
efektif memikirkan string, seperti halo, sebagai dalam kasus ini lima
huruf dalam kotak.
Dan Anda bisa mendapatkan di masing-masing kotak dengan apa yang kita lakukan sintaks
memperkenalkan pada hari Senin?
Mereka kurung siku pada keyboard Anda.
Itu hanya berarti pergi ke lokasi nol.
>> Kami mulai menghitung dari nol, sehingga braket nol menandakan h, braket satu
menandakan e, dan sebagainya.
Dan sepanjang waktu ketika kami sudah menggunakan string dan mengetikkan "halo"
dan "dunia" dan hal-hal lain layar, sudah disimpan
dalam kotak seperti ini.
Dan mengambil menebak.
Apa setiap kotak mewakili fisik dalam komputer Anda?
>> [Tak terdengar].
>> Maaf?
>> Karakter.
>> Jadi karakter, tentu dalam kasus string, dan karakter hanya
delapan bit atau satu byte.
Jadi Anda mungkin setidaknya samar-samar akrab dengan fakta bahwa Anda
komputer memiliki memori.
Ini memiliki dua jenis memori minimal.
Salah satunya adalah hard disk di mana Anda menyimpan hal-hal secara permanen, dan itu
biasanya besar sehingga Anda dapat memiliki film dan musik dan sebagainya.
>> Maka Anda memiliki jenis lain dari memori disebut RAM, R-A-M, Random Access
Memori, dan ini adalah jenis memori yang digunakan ketika komputer Anda
berjalan tetapi jika Anda kehilangan kekuasaan atau Anda dies baterai, apa pun yang disimpan
di RAM akan hilang jika Anda kehilangan kekuatan sama sekali karena itu tidak
persisten.
Anda biasanya memiliki, hari ini, pertunjukan itu, dua pertunjukan, mungkin lebih.
Dan terbalik RAM adalah bahwa itu jauh banyak, jauh lebih cepat daripada hard disk
atau bahkan solid state drive hari ini, tapi biasanya lebih mahal sehingga
Anda memiliki kurang dari itu.
>> Jadi pembicaraan hari ini benar-benar mengacu ke RAM, jenis memori yang
hanya ada saat ada kekuatan yang dimasukkan ke dalam komputer Anda.
Jadi, ketika Anda mengetik di H-E-L-L-O, Enter pada keyboard, H akan dalam satu
byte RAM, E yang terjadi di byte lain dari RAM, seperti
sisa kata.
Jadi ingat apa yang kita mampu lakukan terakhir kali adalah ini.
Biarkan aku pergi ke depan dan membuka file bahwa kita dipanggil string.c, dan mengingat
bahwa itu tampak sedikit sesuatu seperti ini.
Biarkan aku benar-benar memutar kembali dan mengubah untuk apa yang tampak seperti,
panjang string s.
>> Jadi melihat program di sini.
Kami termasuk perpustakaan CS50 sehingga yang bisa kita gunakan mendapatkan tali.
Kami menyertakan standar io.h sehingga kita bisa menggunakan printf.
Mengapa kita termasuk string.h?
Ini adalah baru pada hari Senin.
Jadi kita ingin panjang string.
Str leng.
Orang-orang memutuskan tahun yang lalu, mari kita menjadi ringkas.
Alih-alih menyebutnya "panjang string," sebut saja "str leng" dan membiarkan
Angka dunia yang keluar, dan sebagainya yang apa yang kita mendapatkan akses ke dengan string.h.
>> Ini akrab.
Ini akrab.
Ini sedikit baru.
Sejalan 22 - dan kami akan kembali ini, tapi untuk sekarang tahu -
dan Anda hanya akan tahu ini dari memiliki membaca dokumentasi atau jika
Anda tahu C sudah -
mendapatkan string yang kadang-kadang bisa mengacaukan.
Jika pengguna benar-benar bermusuhan atau kooperatif dan ia hanya
tidak mengetikkan apapun sama keyboard atau jenis begitu banyak pada keyboard yang
itu menguasai memori komputer, dalam teori, dapatkan tali bisa kembali
sesuatu selain string karakter.
Ini bisa mengembalikan nilai khusus yang disebut NULL dalam semua topi, N-U-L-L, dan ini adalah
hanya disebut nilai sentinel.
Ini adalah nilai khusus yang menandakan sesuatu yang buruk terjadi dalam kasus ini.
Ini adalah tidak adanya string.
>> Jadi nol aku memeriksa hanya sehingga, panjang cerita pendek, str leng dan
fungsi lain yang datang dengan C, jika mereka mengharapkan string tetapi Anda melewati mereka
tidak adanya string, jika Anda lulus mereka NULL, komputer atau program
hanya akan crash langsung.
Ini akan menggantung.
Ini akan muntah beberapa pesan kesalahan.
Hal-hal buruk akan terjadi.
Jadi meskipun ini masih tidak didefinisikan dengan baik -
ini akan lebih masuk akal dalam seminggu atau dua - di baris 22, ini hanya
contoh diri defensif pengecekan error hanya dalam kasus satu waktu dari
sejuta sesuatu yang tidak beres, pada Setidaknya program saya tidak akan crash.
>> Jadi jika s tidak sama dengan sesuatu yang buruk, Aku punya untuk loop, dan ini adalah
di mana kita punya yang lain potongan baru sintaks.
Aku punya untuk loop iterasi dari nol pada hingga panjang s.
Dan kemudian di sini, saya adalah seorang pencetakan keluar s braket i, tapi kenapa saya menggunakan% c semua
tiba-tiba bukannya% s bahkan meskipun s adalah string?
Ini karakter, kan?
S adalah string, tapi s braket sesuatu, s braket i dimana i adalah nol
atau satu atau dua, itu individu karakter dalam string, dan sebagainya untuk
itu, printf perlu diinformasikan bahwa itu memang tokoh yang diharapkan.
>> Dan kemudian ingat, apa yang melakukan ini Program benar-benar melakukannya?
>> Mencetaknya dalam kolom.
>> Ya, persis.
Itu hanya dicetak kata yang saya ketik kolom, satu karakter per baris.
Jadi mari kita lihat ini lagi.
Jadi membuat tali.
Disusun OK. / String..
Mari saya ketik di H-E-L-L-O, Enter, dan memang saya mendapatkannya, satu per baris.
>> Jadi biarkan aku melakukan satu optimasi sini.
Jika Anda berpikir tentang hal ini, terutama jika Anda telah diprogram sebelumnya, ada
bisa dibilang sebuah inefisiensi di line 24.
Dengan kata lain, itu tidak selalu desain terbaik.
Langsung, setidaknya sekali Anda ingat apa str leng, tapi itu
melakukan sesuatu yang bodoh berpotensi.
Apa yang mungkin itu?
>> [Tak terdengar].
>> Tepat.
Ini memeriksa untuk panjang s setiap saat meskipun
H-E-L-L-O selalu akan menjadi lima karakter.
Setiap kali melalui loop ini, lima tidak berubah.
Aku mungkin incrementing i, tapi apa adalah panjang s pada setiap
iterasi dari loop ini?
Ini lima, lima, lima, dan namun saya tetap bertanya ini
mempertanyakan lagi dan lagi dan lagi.
Sekarang terus terang, komputer begitu sialan cepat, tidak ada yang akan melihat
perbedaan dalam hal ini, tapi jenis ini keputusan desain miskin dapat
mulai menambahkan jika compiler itu sendiri tidak mencoba untuk memperbaiki ini untuk Anda yang
biasanya tidak akan, pada setidaknya dalam alat.
>> Jadi aku akan melakukan hal ini.
Aku akan menambahkan koma setelah variabel pertama saya, saya.
Aku akan memberi diriku lagi variabel, menyebutnya n, hanya dengan
konvensi untuk nomor, dan kemudian aku akan menetapkan n nilai string
panjang s.
Dan kemudian aku akan berubah kondisi saya menjadi apa?
Aku akan mengubah kondisi saya untuk sementara saya kurang dari n.
>> Jadi sekarang, berapa kali aku memeriksa panjang s?
Sekali, tapi itu OK untuk memeriksa i terhadap n lagi dan lagi karena sekarang mereka
nilai-nilai yang tidak benar-benar berubah.
Sekarang untuk saat ini, hanya tahu bahwa kapan saja Anda memanggil fungsi, ada sedikit
biaya overhead, tidak cukup untuk mencegah Anda benar-benar dari yang pernah menggunakan fungsi, tetapi
tentu ketika ada baris kode seperti itu - dan garis akan mendapatkan
lebih menarik sebelum lama - di mana ada kesempatan untuk berpikir, jika saya
ketik kode ini, berapa banyak kali akan mengeksekusi?
Anda akan mulai melihat dari waktu ke waktu kinerja program Anda dapat
memang berubah.
>> Bahkan, salah satu masalah kami telah menetapkan dilakukan dalam tahun terakhir melibatkan
melaksanakan, karena Anda mungkin ingat dari minggu nol, spell checker, tetapi
mengeja checker yang dirancang untuk mendukung kamus 150.000 ditambah
kata-kata yang kita berikan kalian.
Anda harus menulis kode yang beban kata-kata ke dalam RAM, sehingga menjadi
kotak seperti yang kita lihat di layar saat lalu, dan kemudian secepat Anda
bisa, Anda harus mampu menjawab Pertanyaan bentuk, adalah kata ini
salah eja?
Apakah kata ini salah eja?
>> Dan dalam sesuatu seperti itu apa yang kita sudah dilakukan dalam tahun terakhir ini berubah menjadi,
meskipun pada opt-in secara opsional, sebuah kompetisi macam, dimana
siswa yang menggunakan RAM kurang dan kurang waktu, siklus CPU sedikit, berakhir
meluapkan ke atas sedikit papan pemimpin atau peringkat yang kita pasang di
homepage kursus seperti yang kita sudah dilakukan di masa lalu.
Jadi sekali lagi, benar-benar opsional, tapi ini berbicara kepada peluang desain
yang depan sekali kita mulai membangun di atas beberapa
blok bangunan dasar.
>> Jadi biarkan aku kembali ke diagram ini untuk hanya beberapa saat dan mengungkapkan sedikit
sesuatu yang lebih.
Ini memang sebuah string, dan kami telah mengambil keuntungan dari beberapa perpustakaan,
io.h standar yang memiliki -
>> Printf.
>> Printf, antara lain.
cs50.h, yang telah mendapatkan int dan String dan sebagainya, string.h, yang
memiliki str leng.
Tapi ternyata itu belum ada lagi.
Terus terang, ada banyak dan banyak header file yang menyatakan fungsi
untuk perpustakaan, tapi ctype.h ini benar-benar akan menjadi agak
menguntungkan karena aku akan untuk terus maju dan menerapkan satu
Program lain di sini.
>> Biarkan aku pergi ke depan dan membuka sesuatu Saya menulis di muka disebut
capitalize.c, dan mari kita melihat bagaimana ini bekerja.
Perhatikan bahwa saya menggunakan, dalam versi ini itu, tiga file akrab.
Perhatikan bahwa dalam baris 18, aku mendapatkan baris teks.
Perhatikan pada baris 21, aku mengklaim bahwa kode berikut akan
memanfaatkan s, apa pun pengguna mengetik dalam, dan bagaimana aku melakukan itu?
Yah, aku mengambil -
pelajaran dari terakhir kali -
Saya menyatakan i dan n dan iterasi atas karakter dalam string.
Dan lalu apa blok ini kode sejalan 24 sampai 27
lakukan dalam istilah awam?
>> Huruf kecil huruf kembali.
>> Tepat.
Jika s braket i - jadi jika ke-i karakter s, yang merupakan spesifik
arang dalam string, lebih besar dari atau sama dengan huruf kecil dan -
ingat bahwa ampersand ganda menandakan dan -
dan karakter yang sama, s braket i, adalah kurang dari atau sama dengan huruf kecil z,
itu berarti ini merupakan sebuah atau b atau c atau titik, titik, titik, atau z, yang berarti
itu huruf kecil.
Apa yang ingin saya lakukan dalam kasus ini?
Yah, aku bisa melakukan ini agak samar, namun
mari kita menggoda ini terpisah.
>> Aku akan menelepon printf, mencetak% c karena saya ingin mencetak ulang ini
karakter di layar.
Saya kemudian akan mengambil s braket i, -i karakter dalam s, dan kemudian mengapa
saya lakukan ini sedikit trik di sini, huruf kecil A modal dikurangi?
Apa yang akan memberikan saya, secara umum?
>> [Tak terdengar].
>> Tepat.
Saya tidak begitu ingat -
itu 65 untuk modal A. Saya tidak benar-benar ingat apa huruf kecil adalah,
tapi tidak peduli.
Komputer tahu.
Jadi dengan mengatakan, huruf kecil minus modal A, itu aneh untuk menjadi
mengurangkan satu char dari yang lain, namun apa karakter bawah tenda?
Mereka hanya angka.
Jadi, apa pun angka-angka itu, biarkan komputer mengingatnya
daripada saya manusia.
>> Jadi huruf kecil modal Minus adalah akan memberikan perbedaan.
Itu terjadi menjadi 32, dan itu akan menjadi kasus untuk huruf kecil b dan modal B
dan sebagainya.
Ini tetap konsisten, untungnya.
Jadi aku mengatakan pada dasarnya, mengambil huruf kecil huruf, kurangi dari yang
Perbedaan standar, dan bahwa efektif perubahan s braket i dari
huruf kecil untuk, tentu saja, huruf besar, tanpa saya benar-benar harus berpikir
tentang atau ingat, apa yang mereka angka yang kita bicarakan ketika delapan
relawan datang di panggung?
Sekarang sementara itu, di lain, jika tidak huruf kecil sebagaimana ditentukan
oleh garis 24, hanya mencetaknya.
Saya hanya ingin menyentuh karakter yang
sebenarnya awalnya huruf kecil.
>> Jadi mari kita lihat ini.
Membuat memanfaatkan.
Disusun, OK.
. / Memanfaatkan.
Dan biarkan aku ketik di H-E-L-L-O dalam huruf kecil, Enter.
Dan melihat bahwa itu dikonversi menjadi huruf besar.
Biarkan aku melakukan ini lagi dengan kata yang berbeda.
Bagaimana D-A-V-I-D dengan D pertama dikapitalisasi sebagai nama biasanya adalah?
Enter.
Perhatikan itu masih benar.
Itu hanya dikeluarkan yang pertama kali D tidak berubah melalui yang lain membangun.
>> Jadi perlu diingat, saat itu, beberapa hal di sini.
Satu, jika Anda pernah ingin memeriksa dua kondisi sekaligus, Anda bisa dan mereka
bersama-sama seperti yang kita prediksi.
Anda dapat membandingkan karakter dengan cara ini dan efektif mengobati karakter sebagai
angka, tapi terus terang, ini begitu sialan samar aku tidak akan ingat
bagaimana untuk datang dengan ini dari awal tanpa penalaran melalui itu untuk waktu yang cukup
sedikit waktu.
>> Bukankah lebih baik jika seseorang di luar sana menulis sebuah fungsi yang disebut adalah
menurunkan yang bisa menjawab untuk saya benar atau palsu, karakter ini adalah huruf kecil?
Yah untungnya, siapa pun yang menulis ctype.h melakukan hal itu.
Biarkan aku pergi di sini dan menambahkan ctype untuk c jenis, dan sekarang biarkan aku pergi di sini dan
menulis ulang baris ini sebagai berikut.
>> Jadi jika itu disebut lebih rendah, saya menyatakan, s braket i, maka aku akan menghapus
dua baris sama sekali.
Jadi sekarang orang lain, aku berharap, menulis fungsi yang disebut lebih rendah, dan
ternyata keluar mereka lakukan dan mereka menyatakan itu dalam ctype.h.
Dan sekarang aku akan meninggalkan baris 27 saja, aku akan meninggalkan garis 31
saja, tapi perhatikan betapa aku sudah diperketat kode saya.
Ini sekarang bersih.
Ini terlalu sulit untuk melihat melalui karena sekarang fungsi, apalagi, adalah
begitu luar biasa menamakannya hanya melakukan apa yang tertulis.
>> Jadi sekarang aku akan simpan ini.
Aku akan zoom out.
Dan seperti dalam Scratch Anda bisa memiliki Boolean, nilai Boolean true atau
palsu, itulah apa yang menurunkan efektif kembali.
Mari saya mengkompilasi ulang.
Biarkan aku kembali berjalan.
Dan sekarang mari kita coba lagi, H-E-L-L-O, Enter.
Itu cukup bagus.
Dan coba lagi, memastikan aku tidak mengacaukan sesuatu.
Yang dikapitalisasi juga.
>> Tapi ini tidak cukup baik karena Hal lain yang saya tidak akan pernah
ingat kecuali aku bekerja melalui itu benar-benar hati-hati pada, katakanlah, kertas
baris ini sialan.
Bukankah lebih baik jika ada fungsi dipanggil untuk atas?
Nah ternyata ada dalam ctype.h juga.
Aku akan pergi ke depan dan ketik -
membiarkan saya membawa garis itu kembali.
Alih-alih ini di sini, biarkan aku pergi ke depan dan berkata, menggantikan% c
hasil dari panggilan fungsi ini untuk atas pada karakter-i dari s.
Dan sekarang melihat itu semakin sedikit seimbang.
Saya harus melacak berapa banyak kurung Aku sudah dibuka dan ditutup.
>> Jadi sekarang itu bahkan lebih bersih.
Sekarang program ini semakin baik dan lebih baik dirancang dibilang karena itu
jauh, jauh lebih mudah dibaca tapi itu tidak mari kita perbaiki.
Membuat memanfaatkan.
. / Memanfaatkan.
H-E-L-L-O. Mari kita jalankan lagi, D-A-V-I-D. OK, jadi kita masih dalam
cukup bagus bentuknya.
>> Tapi sekarang ke atas.
Saya mengusulkan bahwa ada satu lagi perbaikan kita bisa membuat yang akan
benar-benar baik, yang benar-benar bisa mengencangkan up kode ini dan benar-benar memberi kita lima
dari lima untuk desain, misalnya.
Apa yang akan menyenangkan untuk menyingkirkan?
Yah, lihat berapa lama sialan ini blok kode adalah hanya untuk melakukan sesuatu yang sederhana.
>> Sekarang sebagai samping, karena Anda mungkin memiliki terlihat di bagian Super masa ini
akhir pekan, Anda tidak benar-benar perlu kurung kurawal ketika Anda hanya memiliki satu
baris kode, meskipun kami mengusulkan menjaga mereka sehingga membuat banyak
lebih jelas, seperti dalam berbentuk U itu Scratch blok, apa yang di dalam cabang.
Tapi tidak akan lebih baik jika ke atas, ketika diberi input, mengubahnya menjadi
huruf besar jika tidak, dan apa yang akan menjadi indah dalam kasus sebaliknya jika
itu sudah huruf besar?
Hanya menyebarkannya melalui dan meninggalkannya sendirian.
>> Jadi mungkin melakukan itu.
Aku bisa mencoba dan hanya berharap bahwa itu tidak, tapi biarkan aku
memperkenalkan satu hal lainnya.
Alih-alih menggunakan terminal built-in jendela di sini, ingat bahwa
ini ikon hitam persegi memberi Anda jendela terminal besar yang saya bisa penuh
layar jika saya ingin?
Jadi ternyata mereka semacam aneh bernama, tapi ada hal-hal yang disebut
man, halaman manual, pria untuk jangka pendek, dan saya dapat mengakses dengan
mengetikkan man -
apa yang saya ingin mengetik?
Man ke atas.
>> Dan sekarang melihat jika terdapat berfungsi dalam komputer, di
hal ini alat, yang hanya sistem operasi Linux, itu akan
untuk memberikan satu set yang agak samar output, tetapi Anda akan menemukan selama waktu itu
selalu diformat cukup banyak sama sehingga Anda mulai terbiasa untuk itu.
Perhatikan di bagian atas untuk bagian atas, dan ternyata adalah dokumentasi yang sama
untuk menurunkan.
Siapa pun yang menulis itu memotong beberapa sudut dan menempatkan semuanya dalam satu halaman.
Tujuan-hal 'di hidup adalah untuk mengkonversi
surat kepada atas atau huruf kecil.
>> Perhatikan bahwa di bawah Sinopsis, halaman manual mengajar saya apa file saya
untuk menyertakan menggunakan hal ini.
Ini memberi saya tanda tangan untuk ini fungsi, keduanya, bahkan
meskipun kami sekarang hanya peduli satu.
Berikut ini adalah deskripsi sekarang.
Untuk mengkonversi atas surat c ke huruf jika mungkin.
>> Masih tidak instruktif, tapi biarkan aku sekarang lihat di bawah nilai kembali, hal
itu diserahkan kembali.
Jadi nilai yang dikembalikan adalah bahwa dari Surat dikonversi atau c jika
konversi itu tidak mungkin.
Apa c?
>> Karakter asli.
>> Karakter asli dan kita tahu bahwa dengan, sekali lagi, naik ke
sinopsis, dan siapa pun yang menulis ini Fungsi hanya memutuskan bahwa input
untuk ke atas dan ke bawah hanya sewenang-wenang akan dipanggil c.
Mereka bisa menyebutnya apa yang paling yang mereka inginkan, tetapi mereka tetap
sederhana seperti c.
Jadi saya sudah berkonsultasi halaman manual.
Kalimat ini meyakinkan saya bahwa jika itu bukan huruf kecil, itu
akan hanya memberikan kembali c, yaitu sempurna, yang berarti saya bisa menyingkirkan
Kondisi lain saya.
>> Jadi biarkan aku kembali ke gedit, dan sekarang saya hanya melakukan ini.
Aku akan menyalin pernyataan printf saya.
Aku akan pergi ke depan dan tepat di dalam untuk loop cetak yang keluar, dan mendapatkan
Singkirkan sekarang keseluruhan ini jika membangun.
Apakah bukan ide yang buruk, dan itu sangat banyak benar dan konsisten dengan
semua yang kita sudah diberitakan, tetapi hanya tidak diperlukan.
Segera setelah Anda menyadari beberapa perpustakaan Fungsi ada bahwa orang lain
menulis, atau mungkin Anda tulis di tempat lain di file, Anda dapat menggunakannya dan benar-benar
mulai memperketat kode.
>> Dan ketika saya mengatakan hal-hal seperti gaya yang baik, fakta bahwa orang ini disebut
berfungsi untuk bagian atas, atau yang sebelumnya adalah rendah mengagumkan berguna karena
mereka sangat deskriptif.
Anda tidak ingin untuk memanggil fungsi Anda x dan y dan z, yang memiliki
banyak, apalagi makna.
Setiap pertanyaan tentang seri yang perbaikan?
>> Jadi cukup untuk mengatakan salah satu takeaways bahkan sebagai masalah Anda sendiri
set - mungkin masalah set satu, tapi tentu P mengatur dua dan seterusnya, bahkan
ketika mereka sedang benar tidak selalu berarti mereka sempurna hanya
belum atau khususnya yang dirancang dengan baik.
Itulah sumbu lain untuk mulai berpikir tentang.
Jadi ini di dalam string Anda memori komputer, tetapi jika Anda memiliki
Seluruh sekelompok karakter seperti H-E-L-L-O dalam RAM, dan anggaplah
bahwa Anda dalam program anda memanggil mendapatkan tali beberapa kali sehingga Anda
sebut mendapatkan tali sekali, maka Anda sebut mendapatkan tali lagi.
Nah, apa yang akan terjadi dari waktu ke waktu?
>> Dengan kata lain, jika Anda memiliki garis kode, meskipun di luar konteks, seperti
string s mendapat -
mari kita lakukan ini.
String name sama mendapatkan tali.
Jadi misalkan bahwa baris kode yang dimaksud untuk meminta pengguna untuk nya atau namanya.
Ini baris berikutnya kode dimaksudkan untuk meminta pengguna untuk nya atau sekolah, dan
ini baris berikutnya, dan sebagainya.
Misalkan kita terus bertanya pengguna yang lain dan
dan lain lain tali.
Mereka akan tinggal di memori pada waktu yang sama.
Salah satunya adalah tidak akan mengalahkan yang lain.
Sekolah tidak menimpa yang lain.
Tapi di mana melakukan mereka semua berakhir di memori?
>> Nah, jika kita mulai menggambar pada layar, yang dapat kita gunakan hal ini
di sini seperti papan tulis, jika hitam ini persegi panjang merupakan komputer saya
memori, aku akan mulai sewenang-wenang membaginya ke dalam kotak kecil,
yang masing-masing mewakili satu byte memori.
Terus terang, jika Anda memiliki gigabyte RAM hari ini, Anda memiliki milyar byte
memori di komputer Anda, sehingga satu miliar kotak ini.
Jadi cukup untuk mengatakan, ini tidak benar-benar untuk skala.
>> Tapi kita bisa terus menggambar semua ini jelas tidak untuk skala kotak, dan ini
kolektif mewakili memori komputer saya.
Sekarang kita hanya akan melakukan titik, titik, titik.
Jadi dengan kata lain, ketika saya sekarang meminta pengguna dengan get string untuk memberi saya
String, apa yang terjadi?
Jika jenis pengguna dalam "halo," yang berakhir di H-E-L-L-O. Tapi misalkan
pengguna maka jenis di -
sebenarnya, aku tidak seharusnya dilakukan halo karena kami meminta
mereka untuk nama mereka.
Jadi mari kita kembali jika saya bisa melakukan ini.
>> Jadi jika saya ketik D-A-V-I-D untuk nama saya, tapi ingat bahwa baris kedua
kode yang mendapatkan tali lagi untuk mendapatkan sekolah mereka.
Dimana kata itu bahwa pengguna jenis dalam akan pergi selanjutnya?
Yah, mungkin itu akan masuk ke H-A-R-V-A-R-D. Jadi meskipun saya sudah
ditarik sebagai dua baris, ini hanya sejumlah besar byte Anda
RAM komputer.
Ada masalah sekarang karena sekarang jika saya menggunakan RAM dalam hal ini sangat wajar
tapi semacam cara yang naif, apa yang bisa Anda tidak tampaknya membedakan?
Di mana orang mulai dan di mana salah satu ujungnya, kan?
Mereka jenis kabur bersama-sama.
>> Jadi ternyata komputer tidak melakukan hal ini.
Biar benar-benar gulir kembali dalam waktu beberapa karakter, dan bukannya Harvard
akan segera setelah nama pengguna, pengguna benar-benar mendapatkan, di belakang
adegan, karakter khusus dimasukkan oleh
komputer baginya.
/ 0, atau dikenal sebagai karakter nul mengganggu yang disebut N-U-L, tidak
N-U-L-L, tapi Anda menulis sebagai / 0.
Hanya saja semua bit nol adalah penanda dalam antara kata pertama yang pengguna
diketik dan kedua.
>> Jadi Harvard benar-benar sekarang berakhir sebagai urutan karakter
dan satu lagi / 0.
Jadi dengan kata lain, dengan memiliki ini nilai sentinel, delapan nol bersebelahan
bit, Anda sekarang dapat mulai untuk membedakan satu karakter dari yang lain.
Jadi selama ini apa yang "halo" adalah sebenarnya "halo" dengan / 0, dan
Sementara itu, ada mungkin sangat baik cukup sedikit lebih RAM
dalam komputer.
>> Biarkan aku melakukan satu hal lain sekarang.
Ternyata bahwa semua kotak ini kami telah menggambar, mereka, ya,
string, namun secara umum, hal-hal ini array.
Array adalah hanya sepotong memori itu kembali ke belakang untuk kembali ke belakang,
dan Anda biasanya menggunakan sebuah array dengan cara notasi ini braket persegi.
Jadi kita akan melihat ini cukup sedikit dari waktu ke waktu, tapi biarkan aku pergi ke depan dan
membuka, sebut saja usia.
Dan perhatikan apa yang bisa kita lakukan dengan ini trik yang sama, sedikit
sedikit lebih sintaks sini.
>> Jadi sejalan 17 dari program ini - sebenarnya, biarkan aku menjalankan program pertama
sehingga kita dapat melihat apa hal ini tidak.
Biarkan saya sebut membuat usia untuk mengkompilasi program ini.
. / Usia.
Berapa banyak orang berada di ruangan?
Sebut saja tiga.
Usia orang pertama?
18, 19, dan 20.
Dan sekarang agak ridiculously, saya hanya telah membuat sebuah program yang usia mereka
tiga orang.
>> Jadi jelas ada kesempatan untuk beberapa menyenangkan aritmatika sini.
Untungnya, matematika benar.
18 pergi ke 19, 19 pergi 20 dan sebagainya.
Tapi apa yang benar-benar dimaksudkan untuk menjadi ilustrasi di sini adalah bagaimana kita menyimpan
usia tiga orang.
Biarkan aku memperbesar pada apa terjadi di sini.
>> Jadi pertama, beberapa baris pertama harus akan mendapatkan cukup akrab.
Aku hanya mendorong pengguna untuk jumlah orang di dalam ruangan.
Lalu aku menggunakan mendapatkan int dan dilakukan sementara untuk melakukan ini lagi dan lagi dan lagi.
Kami telah melihat pola yang sebelumnya, tapi baris 27 adalah baru dan benar-benar cukup
berguna, dan akan menjadi semakin berguna.
Perhatikan bahwa apa yang berbeda di baris 27 adalah bahwa saya tampak mendeklarasikan
int disebut usia, tapi tunggu.
Ini bukan hanya int usia.
Ada ini kurung siku, dalam yang n.
>> Jadi braket n dalam konteks ini, tidak dalam pernyataan printf sini tapi
dalam hal ini satu-satunya baris 27, baris ini mengatakan, beri aku n ints, yang masing-masing
adalah tipe int.
Jadi ini adalah ember, sehingga untuk berbicara, dari, dalam kasus ini, tiga bilangan bulat kembali ke
kembali ke belakang sehingga saya efektif memiliki tiga variabel.
Alternatif, menjadi jelas, akan ini.
>> Jika saya ingin siswa pertama usia, saya mungkin melakukan hal ini.
Jika saya ingin siswa kedua itu Usia Saya mungkin melakukan hal ini.
Jika saya ingin siswa ketiga usia, saya mungkin melakukan hal ini.
Dan Allah melarang kita perlu semua orang usia di ruangan ini -
Maksudku, ini adalah heck of a banyak copy, tempel lagi dan lagi dan lagi.
Dan ditambah setelah saya mengkompilasi program ini, jika siswa lain berjalan di atas keluar
dari pintu itu, sekarang nomor saya variabel tidak benar.
>> Jadi apa yang bagus tentang array adalah sebagai Begitu Anda mulai merasa diri
copy dan paste, kemungkinan besar itu bukan pendekatan yang terbaik.
Array adalah dinamis berpotensi.
Saya tidak tahu sebelumnya berapa banyak orang akan berada di dalam ruangan,
tapi saya tahu saya harus n dari mereka, dan aku akan mengetahui n ketika saatnya tiba.
Baris kode ini sekarang berarti, beri saya sepotong memori yang terlihat seperti ini
dimana jumlah kotak pada layar sepenuhnya tergantung pada n yang
pengguna diketik masuk
>> Jadi sekarang sisa dari program ini adalah sebenarnya cukup mirip dengan apa yang kita
hanya melakukan dengan karakter.
Perhatikan Aku punya untuk loop dimulai pada baris 30.
Jadi setelah saya mendapatkan array, saya iterate dari y sama dengan nol pada hingga n.
Aku hanya punya ini instruktif printf pesan hanya mengatakan, memberi saya umur
orang #% i, jadi nomor satu, nomor dua, nomor tiga.
Dan kenapa saya melakukan ini?
Terus terang, manusia lebih memilih untuk menghitung dari satu ke atas sedangkan ilmuwan komputer,
nol ke atas.
ilmuwan komputer tidak akan menggunakan program semacam ini, jadi kita
akan hanya mulai menghitung di salah satu seperti orang normal.
>> Dan sekarang sejalan 33, perhatikan sedikit bagian yang berbeda dari sintaks.
-I usia dalam variabel jenis array akan mendapatkan int.
Dan sekarang akhirnya, ini hanya aritmatika di sini.
Aku memutuskan dalam loop terpisah untuk mengklaim beberapa waktu berlalu, dan sekarang dalam
lingkaran terpisah, garis-garis ini mengeksekusi.
>> Satu tahun dari sekarang, orang saya akan saya th, tetapi pemberitahuan ini tidak
variabel i.
Sekarang ini adalah% i untuk int.
Dan pemberitahuan sebagai placeholder pertama, saya plug in i ditambah 1, jadi kami menghitung seperti
orang normal.
Dan kemudian untuk nilai usia mereka, untuk lama saya tahun, saya mengambil usia braket
i - dan mengapa aku melakukan ditambah satu di sini?
Mereka hanya berusia.
Ini adalah pilihan bodoh saya program.
Mereka hanya berusia satu tahun.
Saya bisa mengetik dalam jumlah yang Aku benar-benar ingin di sana.
>> Jadi apa sebenarnya semua relevansi di sini?
Nah, biarkan aku benar-benar kembali gulir di sini dan melukis gambar
apa yang ada di depan.
Apa yang kita akan lakukan dengan kami berikutnya Masalah Set Dua yang berkecimpung dalam
dunia kriptografi.
Jadi ini adalah string karakter, sehingga urutan beberapa karakter, dan apa
artinya ini?
Ini bukan dalam versi online dari slide.
>> Jadi saya mengklaim bahwa ini sama dengan ini, iklan bodoh dari bertahun-tahun
lalu yang mungkin benar-benar ingat salah satu asal-usulnya.
Jadi, ini adalah contoh dari enkripsi atau kriptografi.
Ternyata bahwa jika Anda ingin sebenarnya mengirimkan informasi atau berbagi
informasi dengan seseorang aman, seperti pesan seperti ini, Anda dapat
mengacak huruf.
Tapi biasanya, kata-kata yang tidak perlu diacak acak.
Mereka permuted dalam beberapa cara atau diubah dalam beberapa cara sehingga - oops.
Itu menyenangkan spoiler untuk waktu berikutnya.
>> Jadi, Anda dapat memetakan apa yang tampaknya O ke B. Perhatikan bahwa berbaris
kapitalisasi-bijaksana.
Rupanya r menjadi e.
Rupanya F-H-E-R menjadi S-U-R-E. Jadi ternyata ada pemetaan, dan
kasus ini ada cukup bodoh pemetaan apakah ada yang tahu itu?
Ini adalah sesuatu yang disebut Rot 13, Putar 13.
Ini adalah terbodoh enkripsi mekanisme karena benar-benar hanya
menambahkan 13 untuk setiap satu dari surat-surat, bodoh dalam arti bahwa jika Anda hanya
memiliki sedikit waktu luang di tangan Anda dan pensil, atau Anda hanya berpikir itu
melalui di kepala Anda, Anda bisa mencoba semua tambahan mungkin - satu, dua,
tiga, titik, titik, titik, 25 hanya memutar seluruh alfabet, dan
akhirnya, Anda akan mengetahui pesan apa ini.
Jadi jika Anda melakukan sesuatu seperti ini di sekolah dasar lewat pesan ke
sahabat, jika sekolah dasar Anda guru hanya membaca melalui
pesan dan brute memaksa solusi, Anda mungkin mendapatkan
jawaban dengan itu.
>> Sekarang tentu saja, di dunia nyata, kriptografi yang lebih canggih.
Ini adalah potongan teks dari sistem komputer yang memiliki username dan
password, karena hampir semua dari kita lakukan, dan ini adalah apa kata sandi Anda mungkin
terlihat seperti jika disimpan pada hard Anda drive tetapi dalam bentuk terenkripsi.
Ini bukan hanya rotasi huruf, A adalah B dan B adalah C. Ini
jauh lebih canggih, tetapi menggunakan apa yang umumnya dikenal sebagai kunci rahasia
kriptografi.
Gambar ini menceritakan berikut cerita dengan beberapa ikon.
>> Di sebelah kiri, kita memiliki apa yang kita akan menyebutnya teks biasa.
Dalam dunia kriptografi, polos teks hanya pesan asli
ditulis dalam bahasa Inggris atau Perancis atau bahasa apapun.
Jika Anda ingin mengenkripsi, kita akan lulus itu pictorially melalui gembok, sehingga
beberapa jenis algoritma, beberapa fungsi atau program yang seseorang menulis
yang mengacak huruf mudah-mudahan lebih complicatedly dari sekedar menambahkan 13
untuk masing-masing.
>> Apa yang Anda dapatkan dari proses yang di tengah ada disebut cyphertext.
Jadi semacam kata seksi.
Itu hanya berarti itu dienkripsi versi teks biasa.
Dan hanya jika Anda memiliki rahasia yang sama, 13 atau minus 13, apakah Anda dapat
mendekripsi pesan seperti itu.
>> Jadi pada Soal Set Dua, antara hal-hal akan Anda lakukan jika dalam Hacker
Edition, Anda harus menulis kode untuk crack password tersebut, mencari tahu
apa mereka dan bagaimana mereka dienkripsi, meskipun kami memberi Anda sedikit
bimbingan sepanjang jalan.
Dalam Edisi Standar, kami memperkenalkan beberapa cipher, enkripsi
mekanisme, yang disebut Caesar, satu disebut Vigenere, yang masih
cipher rotasi di mana A menjadi sesuatu, B menjadi sesuatu, tapi
Anda harus melakukannya pemrograman karena memang akan menjadi rahasia
kunci yang terlibat yang biasanya nomor atau kata kunci yang hanya
pengirim dan penerima tersebut pesan harus memahami.
>> Sekarang, ini sebenarnya memiliki inkarnasi di dunia nyata.
Ini, misalnya, sedikit yatim Rahasia cincin decoder Annie, dan Anda
benar-benar dapat menerapkan ini rotasi cipher -
A menjadi sesuatu, B menjadi sesuatu - dengan beberapa roda,
satu di luar, satu di dalam sehingga jika Anda memutar roda atau
cincin, Anda benar-benar dapat berbaris huruf dengan huruf yang berbeda,
mendapatkan kode rahasia.
Dan sebagai cliffhanger untuk hari ini, apa yang saya pikir saya akan lakukan adalah sedikit
throwback bahwa jika Anda menyalakan TV pada tanggal 24 Desember, Anda dapat menonton
nauseum iklan film 24 jam berturut-turut.
Tapi untuk hari ini, saya akan membukanya di sini dan memberi kita hanya dua menit dari
Christmas Story pedagogis yang relevan dengan sesama kecil bernama Ralphie.
>> [VIDEO PEMUTARAN]
>> -Jadilah itu diketahui segala-galanya bahwa Ralph Parker dengan ini menunjuk
anggota Little Orphan Annie rahasia lingkaran dan berhak atas semua
penghargaan dan manfaat terjadi hal tersebut.
>> -Ditandatangani di Little Orphan Annie.
Ditandatangani, Pierre Andre dalam tinta.
Honors dan manfaat sudah pada usia sembilan.
>> [BERTERIAK PADA RADIO]
>> Ayo, mari kita dengan itu.
Aku tidak butuh semua itu jazz tentang penyelundup dan bajak laut.
>> Dengar-besok malam untuk menyimpulkan petualangan hitam
kapal bajak laut.
Sekarang, saatnya untuk Secret Annie Pesan untuk Anda anggota
dari lingkaran rahasia.
Ingat, anak-anak.
Hanya anggota Annie Rahasia Lingkaran dapat memecahkan kode pesan rahasia Annie.
Ingat, Annie tergantung pada Anda.
Set pin ke B2.
Berikut adalah pesan.
12, 11, 2 -
>> -Saya dalam pertemuan rahasia pertama saya.
>> -25, 14, 11, 18, 16 -
>> -Pierre berada di suara besar malam ini.
Aku tahu pesan itu malam ini benar-benar penting.
>> -3, 25.
Itulah pesan dari Annie dirinya.
Ingat, jangan bilang siapa-siapa.
>> -90 Detik kemudian, aku di kamar hanya di rumah di mana anak laki-laki sembilan
bisa duduk di privasi dan decode.
Aha, B. Aku pergi ke yang berikutnya.
E. Kata pertama adalah "menjadi." S. Itu datang lebih mudah sekarang.
U. 25.
Itu R.
>> -Ayolah, Ralphie.
Aku harus pergi.
>> -Aku akan segera turun, Ma.
Jagoan Gee.
>> -T. O. Pastikan untuk.
Pastikan untuk apa?
Apa Sedikit Orphan Annie coba katakan?
Pastikan untuk apa?
>> -Ralphie, Randy telah harus pergi.
Maukah Anda keluar?
>> -Baiklah, Ma.
Aku akan segera keluar.
>> -Aku semakin dekat sekarang.
Ketegangan itu mengerikan.
Apa itu?
Nasib planet mungkin menggantung di keseimbangan.
>> -Ralphie, Randy harus pergi.
>> -Aku akan keluar untuk menangis dengan suara keras.
>> -Hampir sana.
Jemariku terbang.
Pikiranku adalah perangkap baja.
Setiap pori bergetar.
Itu hampir jelas.
Ya, ya, ya, ya, ya.
>> -Pastikan untuk minum Ovaltine Anda.
Ovaltine?
Sebuah payah komersial?
Bajingan.
>> [END VIDEO PEMUTARAN]
>> SPEAKER 1: Ini adalah CS50, dan bahwa akan Soal Set Dua.
Sampai jumpa minggu depan.
>> SPEAKER 2: Pada berikutnya CS50, hal ini terjadi.
>> SPEAKER 1: Jadi satu topik kita belum melihat sejauh ini
bahwa fungsi pointer.
Sekarang, fungsi pointer hanya alamat publik
fungsi, tetapi banyak seperti -
anak seorang -