[Powered by Google Translate] DAVID J. Malan: Baiklah.
Ini adalah CS50, dan ini adalah akhir dari dua minggu.
Jika Anda berharap untuk menjadi lapar sekitar ini waktu besok, tahu bahwa kita akan
untuk mengadakan sebagai besok kelompok kecil, Kamis, 1:15 PM.
Ada URL ini di sini jika Anda ingin RSVP.
Ruang terbatas, jadi tolong maafkan jika bentuk telah diisi pada saat Anda
mengisi ini.
URL lain meskipun yang mungkin menarik ini.
>> Jadi di hampir waktu satu bulan, kursus ini akan disediakan
semua lebih luas melalui edx, melalui mana orang-orang di Internet akan
mampu mengikuti bersama, terlibat dalam kursus cukup aktif, pada kenyataannya.
Mereka akan menggunakan Appliance CS50 CS50 dan Bahas dan sebagian besar
berbagai software yang sudah kita telah menggunakan semester ini.
Dan salah satu inisiatif kami ingin mengambil sebagai percobaan tahun ini
adalah untuk melihat seberapa banyak konten kita dapat menerjemahkan ke lain diucapkan dan
bahasa tertulis.
Jadi jika Anda mungkin memiliki kepentingan untuk berpartisipasi dalam proyek ini, dimana
kami akan memberikan transkrip bahasa Inggris dan sub judul untuk kursus ini
ceramah dan celana pendek dan seminar dan bagian dan sejenisnya -
jika Anda berbicara fasih atau menulis dengan lancar beberapa bahasa lain, kita akan
senang melibatkan Anda dalam proyek ini, dimana Anda mengambil satu atau lebih dari
video, menerjemahkannya ke dalam bahasa yang Anda tahu cukup baik.
Untuk memberikan rasa antarmuka, ada ini antarmuka pengguna berbasis web
bahwa kita akan menggunakan yang akan menciptakan dasarnya UI seperti ini.
Ini saya mengajar beberapa Halloween lalu.
Dan di sisi kanan ada hitam di samping ini perangko waktu,
Anda akan melihat berbagai hal yang keluar dari mulut saya hari itu.
Dan kemudian di bawahnya, Anda akan mampu menerjemahkan ke dalam beberapa bahasa lain.
Tepat apa pemetaan adalah antara, dalam hal ini, Inggris
dan, katakanlah, Spanyol.
Jadi itu sebenarnya alat yang sangat user-friendly.
Anda dapat mundur dan maju cepat sangat mudah dengan shortcut keyboard.
Jadi jika Anda ingin mengambil bagian dalam percobaan ini dan memiliki kata-kata Anda
dilihat dan dibaca oleh berpotensi ribuan orang di luar sana, jangan merasa
bebas untuk berpartisipasi.
>> Sekarang satu kata tentang kucing dari hari Senin, jangan sampai kita telah mengirim terlalu
menakutkan pesan.
Lakukan menyadari bahwa sebagai jam kantor menyarankan dan sebagai bagian menyarankan,
desain tentu saja sangat banyak untuk memiliki siswa berkolaborasi dan
berbicara untuk bekerja melalui set masalah dan masalah bersama-sama.
Dan benar-benar garis hanya turun ke, sekali lagi, pekerjaan Anda akhirnya
harus menyerahkan harus Anda sendiri.
Dan jadi, cukup jujur ​​- dalam jam kantor, itu benar-benar normal -
itu benar-benar diharapkan, bahkan - untuk mengobrol dengan beberapa
teman sebelah Anda.
Jika ia sedang berjuang dengan topik tertentu, dan Anda seperti, oh, juga membiarkan
saya memberikan sekilas dari beberapa baris kode yang saya tulis.
Itu baik-baik saja.
Itu terjadi.
Dan itu sangat kondusif, saya pikir, dengan proses pembelajaran.
Dimana baris, sekali lagi, akan menyeberangi adalah ketika kepala adalah semacam miring atas
di sini untuk detik terlalu banyak atau menit untuk yang benar-benar untuk memiliki hanya
menjadi kesempatan blokir untuk teman Anda.
Dan tentu, ketika hal-hal bisa dipertukarkan melalui email dan Dropbox dan
sejenisnya, ada juga adalah garis.
Jadi dengan segala cara, merasa nyaman dan merasa didorong untuk chatting dengan teman-teman
dan teman sekelas tentang psets dan banyak lagi.
Dan hanya menyadari bahwa apa yang Anda akhirnya menyerahkan benar-benar harus menjadi
produk kreasi Anda dan bukan orang lain.
>> Jadi dalam vena yang sama makhluk suka diemong, Anda mungkin
tahu orang ini di sini.
Jadi ini adalah film murahan mengerikan dari tahun lalu.
Siapapun sini terlihat Spaceballs?
Baiklah.
Jadi angka yang bagus di sini.
Jadi ini adalah cara kami mengagumkan akademis memperkenalkan hari ini akhirnya
gagasan kriptografi.
Dan jadi salah satu masalah domain yang spesifik untuk pset 2, yang akan datang
keluar besok malam larut, adalah untuk menyelam ke dalam dunia kriptografi, yang
adalah seni enkripsi atau mengacak informasi.
Dan ini pada akhirnya berhubungan dengan dunia keamanan.
>> Sekarang keamanan untuk kebanyakan kita datang dalam bentuk mekanisme yang cukup biasa.
Semua dari kita memiliki username dan password.
Dan kita semua memiliki username dan password yang sangat buruk, kemungkinan besar.
Jika password Anda adalah sama pada beberapa situs Web, yang mungkin tidak
ide yang terbaik, seperti yang akan kita bahas menjelang akhir semester.
Jika password Anda ditulis pada catatan lengket - tidak ada lelucon - pada
monitor, itu juga belum tentu desain terbaik tetapi cukup umum
fenomena.
Dan jika Anda tidak menggunakan kriptografi untuk mengenkripsi password Anda, mereka
sangat rentan.
Jadi jika Anda berpikir Anda menjadi super pintar dengan memiliki Firman yang tersembunyi
mendokumentasikan suatu tempat pada hard drive Anda yang memiliki semua password Anda, tetapi
itu di folder yang tidak ada yang akan melihat, itu juga bukan sangat
Mekanisme aman.
Dan jadi apa pset 2 akan memperkenalkan ini seni kriptografi dan
mengacak informasi sehingga hal-hal seperti password
semua lebih aman.
Jadi, untuk memotivasi ini masalah yang sangat nyata-dunia dengan sangat non-dunia nyata
Skenario, izinkan saya memperkenalkan Anda ke salah satu klip favorit kami di sini dari ini
film, Spaceballs.
>> [PEMUTARAN VIDEO]
-Helm, Anda iblis, apa yang terjadi?
Apa yang Anda lakukan untuk anak saya?
-Izinkan saya untuk memperkenalkan dokter bedah plastik muda yang brilian, Dr Philip
Schlotkin, pekerjaan terbesar hidung pria di seluruh
alam semesta dan Beverly Hills.
-Yang Mulia.
Hidung-job?
Saya tidak mengerti.
Dia sudah memiliki pekerjaan hidung.
Ini adalah hadiah manis 16.
-Tidak, itu bukan apa yang Anda pikirkan.
Ini jauh, jauh lebih buruk.
Jika Anda tidak memberi saya kombinasi dengan perisai udara, Dr Schlotkin akan
memberikan anak Anda kembali hidung lamanya.
-Tidak!
Dimana kau dapatkan itu?
-Baiklah.
Aku akan memberitahu.
-Tidak, ayah, tidak.
Anda tidak harus.
-Kau benar, sayangku.
Aku akan kehilangan hidung baru Anda.
Tapi aku tidak akan memberitahu mereka kombinasi apa pun.
-Sangat baik.
Dr Schlotkin, melakukan terburuk Anda.
-My kesenangan.
-Tidak!
Tunggu, tunggu.
Aku akan memberitahu.
-Saya tahu itu akan berhasil.
Baiklah, berikan kepada saya.
-Kombinasi adalah satu.
-Satu.
-Dua.
-Tiga
-Tiga.
-Empat.
-Lima
-Lima.
-Jadi kombinasi adalah satu, dua, tiga, empat, lima.
Itulah kombinasi terbodoh yang pernah saya dengar dalam hidup saya.
Itulah jenis hal idiot akan di koper.
-Terima kasih, Yang Mulia.
-Apa yang Anda lakukan?
-Aku mematikan dinding.
-Tidak, Anda tidak.
Anda mematikan seluruh film.
-Saya harus menekan tombol yang salah.
-Yah, meletakkannya kembali.
Menempatkan film kembali.
-Ya, Pak.
Ya, Pak.
-Mari kita pergi, Erna.
Ayo, Gretchen.
Tentu saja Anda tahu saya masih harus menagih Anda untuk ini.
-Nah, apakah itu berhasil?
Dimana pintu gerbang?
-Itu berhasil, Pak.
Kami memiliki kombinasi.
-Besar.
Sekarang kita bisa mengambil setiap napas terakhir udara segar dari planet Druidia.
Apa kombinasi?
-Satu, dua, tiga, empat, lima.
-Satu, dua, tiga, empat, lima?
-Ya.
-Itu menakjubkan.
Aku punya kombinasi yang sama di bagasi saya.
Siapkan spaceball 1 untuk keberangkatan segera.
-Ya, Pak.
-Dan mengubah kombinasi di bagasi saya.
-Ow!
[END PEMUTARAN VIDEO]
>> DAVID J. Malan: Sebuah film yang menakjubkan Anda sekarang harus semua melihat.
Jadi konteks di sini adalah bahwa dengan data tidak aman datang kesempatan untuk
mengenkripsi dan berebut itu.
Dan jadi ini, misalnya, adalah contoh dari pesan dienkripsi.
Ini benar-benar mengatakan sesuatu dalam bahasa Inggris.
Tapi itu jelas tidak sepenuhnya jelas.
Dan kami akan datang lingkaran penuh hari ini untuk menggoda selain apa rahasia ini
Pesan di sini adalah.
Tapi di dunia nyata komputer, hal-hal bahkan tidak terlihat seperti mereka mungkin
menjadi frase bahasa Inggris.
Sebagai contoh, ini adalah apa yang Anda mungkin menemukan pada Linux atau Mac atau standar
Komputer unix dalam file yang sekali waktu disebut file password.
Saat ini, sudah dipindahkan ke tempat lain.
Tetapi jika Anda melihat di tempat yang tepat pada sistem, Anda akan melihat tidak hanya Anda
username atau bahwa orang lain pada sistem, tetapi Anda akan melihat
dienkripsi versi password mereka.
Memang, kata crypt ada menunjukkan bahwa hal-hal berikut dienkripsi.
Dan rangkaian huruf acak dan karakter dan nomor dan
sebagainya dapat didekripsi hanya dengan mengetahui rahasia umum beberapa -
kata rahasia, nomor rahasia.
Dan begitu memang, seni kriptografi pada akhirnya bermuara percaya dari beberapa
mengurutkan dan mengetahui sesuatu yang orang lain tidak.
Kita akan menjelajahi secara rinci sedikit lebih saat ini dan di pset yang akan datang.
>> Dan sekarang kata pada lulus / gagal.
Jadi, terutama, karena beberapa dari Anda telah menyelam ke pset 1, alat, dan
dunia yang sangat baru untuk diri sendiri, menyadari bahwa frustrasi dan
kebingungan dan hanya kesulitan teknis yang harus diharapkan.
Terutama dengan pset pertama, di mana ada begitu banyak baru, hanya mendapatkan
akrab dengan ls dan cd dan semua perintah misterius di lingkungan yang baru.
Dan itu terpisah dari bahan aktual dan pemrograman sendiri.
Jadi menyadari juga, bahwa ada pasti jam kantor yang ada sebagai
struktur pendukung.
Bagian ini dimulai Minggu mendatang.
Tapi yang paling penting, jika Anda merasa hal itu ini bukan
dunia untuk Anda, menyadari bahwa itu benar-benar hanya mengambil waktu.
Dan kalau bukan karena kesempatan ini tahun yang lalu bagi saya mengambil kelas
lulus / gagal, jujur, saya tidak akan pernah menginjakkan kaki di kelas.
Dan Anda dapat mengubah ini sampai, katakanlah, Senin kelima kursus.
Jadi jika Anda berada di tepi sekarang, menyadari bahwa daripada kepala ke beberapa lainnya
air sama sekali, jangan tentu mempertimbangkan hanya berubah untuk lulus / gagal.
Sekali lagi, tidak ada yang benar-benar budaya ini di sini di Harvard mengambil hal-hal
lulus / gagal karena semua orang benar-benar ingin mencapai atau overachieve.
Tapi terus terang, ini adalah cara yang indah untuk mencoba sesuatu yang tidak mungkin
menjadi familiar bagi Anda.
Dan Anda akan berakhir melakukan dalam banyak kasus cukup baik, mungkin
banyak kejutan Anda.
Dan dalam hal yang lebih konkret, apa yang saya pikir lulus / gagal pada umumnya tidak,
terutama karena Anda mungkin pernah mengalami dengan pset 0, jika Anda telah menempatkan
dalam 10 jam, 15 jam, 25 jam ke pset beberapa - dan Anda hanya membenturkan
Anda kepala ke dinding,
dan semakin Super larut malam,
tetapi Anda telah mengambil pset seperti 90% dari jalan,
Anda tahu bahwa Anda tidak bisa mengetahui satu hal -
lulus / gagal benar-benar mengambil tepi off dari kelas seperti ini, di mana Anda dapat mengurutkan
dari bahagia bilang oke, aku tahu itu tidak sempurna.
Tapi aku bekerja pantatku off ini.
Aku cukup senang dengan mana ia berakhir.
Dan itu akan memenuhi harapan untuk lulus / gagal.
Jadi jangan ingat-ingat.
>> Baiklah.
Jadi anda yang telah berjuang untuk menggunakan Universitas Harvard Wi-Fi tahu
bahwa ada SSID CS50, koneksi Wi-Fi beredar bahwa Anda
mungkin lebih beruntung untuk.
Ini sedikit ironis bahwa password untuk ini - jika Anda ingin mencoba
menghubungkan ke ini untuk kecepatan yang lebih baik dan biarkan kami tahu apakah itu tidak lebih baik -
adalah salah satu, dua, tiga, empat, lima, sepanjang jalan hingga delapan karena delapan adalah
lebih aman dari lima.
Jadi jika Anda memerlukan sandi Wi-Fi, koneksi ke CS50 nirkabel sini.
Satu, dua, tiga, empat, lima, enam, tujuh, delapan.
Dan kirim ke CS50 Diskusikan jika Anda masih memiliki masalah konektivitas intermittent,
dan kami akan membiarkan kekuatan yang akan tahu untuk ruang ini.
>> Baiklah.
Jadi teaser cepat, terutama bagi Anda yang penggemar laki-laki atau perempuan
Semua Apple dari hal.
Apa yang saya digali dari beberapa tahun yang lalu adalah file ini di sini, ilock.c, hanya untuk
jenis membuat lebih konkrit dan lebih kompleks beberapa C lebih mendasar
program yang kami telah menulis.
Jadi saya membuka file ini, ilock.c.
Ini tersedia pada halaman kuliah untuk hari ini.
Di sisi kiri, Anda akan melihat daftar panjang fungsi.
Jadi rekan yang menulis ini menulis sebuah banyak fungsi,
lebih dari sekedar utama.
Dia menggunakan sejumlah besar perpustakaan di sini.
Dan jika kita mulai bergulir melalui, apa ini sebenarnya adalah sangat
pertama, saya percaya, retak untuk iPhone asli.
Bila Anda ingin jailbreak iPhone asli, yang berarti untether
itu dari AT & T dan benar-benar menginstal software khusus di atasnya dan melakukan hal-hal
bahwa Apple tidak ingin orang untuk melakukan -
baik, seseorang mengambil waktu untuk mencari tahu persis bagaimana mereka bisa mengeksploitasi
software kekurangan, kesalahan, bug, dalam perangkat lunak Apple.
Dan dengan demikian lahir ilock.c.
Bahwa jika Anda membuatnya pada komputer dan diinstal ke iPhone yang
terhubung ke komputer Anda melalui, katakanlah, kabel USB, ini akan memberi Anda
hak akses administratif atau root pada iPhone Anda dan membiarkan Anda melakukan cukup banyak
apa pun yang Anda inginkan.
>> Dan begitu sudah ada kucing ini menarik dan permainan mouse antara Apple dan
seluruh dunia khususnya karena mereka, seperti banyak perusahaan, cobalah untuk mengunci
mereka hal-hal ke bawah sehingga Anda hanya bisa melakukannya dengan itu apa yang mereka inginkan.
Namun berkat orang-orang seperti ini dan pemahaman mereka tentang tingkat rendah
rincian dan, dalam kasus ini, pemrograman C dan banyak konstruksi familiar
bahwa kita sudah mulai bermain dengan, Anda dapat benar-benar memanfaatkan
hardware dengan cara Anda lihat cocok dan belum tentu beberapa entitas perusahaan.
Jadi misalnya, saya tidak tahu apa semua ini lakukan.
Tapi GetVersion terdengar cukup sederhana.
Dan sepertinya ini adalah fungsi bahwa orang ini menulis.
Ambil beberapa jenis integer sebagai argumen, tidak kembali apa-apa, namun
tampaknya loop dengan untuk loop di sini dan jika kondisi, jika kondisi,
istirahat, dan entah bagaimana berhubungan dengan nomor versi.
Jika kita scroll ke bawah -
meskipun banyak kata kunci akan menjadi baru, dan ada
seluruh banyak fungsi di sini kita belum pernah melihat dan mungkin tidak pernah melihat lebih
jalannya semester -
pada akhir hari, itu mengikuti aturan yang sama dan logika yang kita sudah
bermain dengan sejauh ini.
Jadi ini jauh terlalu tua untuk memecahkan 3s iPhone 4s atau atau segera 5s, hari ini,
tapi tahu bahwa itu semua sangat banyak berasal dari dunia ini bahwa kita telah
menyelam ke dalam.
>> Jadi mari kita lihat contoh yang sedikit lebih sederhana.
Ini satu, hanya untuk mendapatkan pemanasan dengan beberapa sintaks dan juga beberapa data lainnya
jenis yang kita bicarakan, tetapi belum benar-benar terlihat di C. Jadi ini adalah
file bernama positive1.c.
Dan per komentar di atas, ini hanya menuntut bahwa pengguna memberikan
positif nomor.
Jadi contoh dari sebuah loop do-while, yang bagus bagi pengguna-interaktif
program di mana Anda perlu untuk memberitahu pengguna untuk melakukan sesuatu.
Dan jika mereka tidak bekerja sama, Anda berteriak pada mereka atau menolak masukan mereka.
Kasus di titik, saya akan melakukan baris 19 sampai 24 selama pengguna memiliki
tidak memberi saya angka positif.
Sekarang ini detail di sini on line 18, mengapa saya menyatakan n diatas ini seluruh
membangun perulangan sebagai lawan tepat di sebelah jalur 22 di mana aku
benar-benar peduli untuk mendapatkan n?
Ya?
[Tak terdengar]
>> DAVID J. Malan: Ya, jadi ini masalah lingkup.
Dan dalam istilah awam, apa lingkup lihat?
Ya?
[Tak terdengar]
DAVID J. Malan: Bisakah Anda berbicara sedikit lebih keras?
SPEAKER 1: Di mana Anda dapat mengakses variabel tertentu.
DAVID J. Malan: Sempurna.
Di mana Anda dapat mengakses variabel tertentu.
Dan secara umum, aturan praktis sejauh ini telah bahwa ruang lingkup dari beberapa
variabel didefinisikan oleh kurung kurawal terbaru bahwa Anda telah melihat.
Dan sehingga dalam kasus ini, jika saya membuat kesalahan dengan menyatakan n on line 22,
baris yang akan bekerja.
Saya akan mendapatkan sebuah int, dan saya akan memasukkannya ke dalam n variabel di baris 22.
Tapi yang baris kode sekarang akan tidak tahu apa yang saya bicarakan?
Jadi 25, dan ternyata 24, juga, karena dalam kasus ini, itu berada di luar
dari kurung kurawal.
Jadi hanya sedikit gangguan tapi sangat mudah dipecahkan dengan hanya menyatakan
luar variabel fungsi itu sendiri.
>> Sekarang kita akan lihat nanti hari, Anda bisa melangkah lebih jauh.
Dan Anda bahkan bisa mendapatkan sedikit malas -
dan ini tidak direkomendasikan, secara umum -
tetapi Anda bahkan bisa malas dan menempatkan variabel global, sehingga untuk berbicara, tidak
dalam fungsi, bukan dalam lingkaran, tetapi dalam file itu sendiri, di luar
dari semua fungsi yang sudah Anda tulis, seperti yang saya lakukan di sini pada baris 15.
Tapi ini umumnya disukai.
Tapi menyadari bahwa ini adalah solusi kadang-kadang masalah lain, seperti yang kita akan
akhirnya melihat.
Jadi untuk saat ini, kita akan meninggalkan seperti ini.
Tapi mari kita lihat apakah kita dapat menulis ulang ini hanya untuk memulai mengekspresikan diri kita
sedikit berbeda.
>> Jadi program ini, hanya harus jelas, adalah positive1.
Biarkan aku pergi ke depan di sini dan di jendela terminal saya membuat positive1, Enter.
Mengkompilasi, oke.
Aku akan menjalankan positive1, tekan Enter.
Saya menuntut bahwa Anda memberi saya bilangan bulat positif.
Aku akan mengatakan -1.
Itu tidak bekerja.
0, 99, yang tampaknya bekerja.
Mungkin tidak tes yang paling ketat.
Tapi setidaknya itu adalah cek kewarasan bagus yang kita berada di jalur yang benar.
Jadi sekarang biarkan aku pergi ke depan dan membuka versi dua ini.
Dan apa yang berbeda sudah?
Menerapkan hal yang sama.
Tapi apa yang melompat keluar sebagai jelas berbeda kali ini?
Ya, jadi ini bool dalam warna hijau.
Gedit telah disorot dalam warna hijau ini dikenal sebagai kata kunci bool,
yang merupakan tipe data.
Ini tidak datang dibangun untuk semua versi C. Anda perlu menyertakan
spesifik perpustakaan.
Dalam kasus kami, saya termasuk perpustakaan CS50 sehingga kita
memiliki akses ke bool.
Tapi di baris 18, kita tampaknya memiliki nilai Boolean sini disebut bersyukur.
Jadi aku bisa disebut apa-apa ini.
Tapi aku menyebutnya bersyukur hanya untuk jenis menyampaikan beberapa makna semantik.
Jadi awalnya on line 18, saya tampaknya tidak bersyukur karena
Nilai Boolean bersyukur diinisialisasi ke false dalam baris 18.
Dan maka tampaknya apa yang saya lakukan di sini di baris 21 sampai 23 adalah aku baru saja
jenis ditulis ulang logika saya.
Jadi tidak secara fungsional berbeda.
Tapi sejalan 22 sekarang, saya memeriksa apakah int pengguna telah memberikan lebih besar dari
0, maka saya hanya mengubah nilai bersyukur ke true.
Dan mengapa saya melakukan itu?
Karena sejalan 25, rupanya, aku akan memeriksa kondisi.
Melakukan loop ini sementara bersyukur adalah palsu.
>> Jadi saya mengusulkan ini sebagai alternatif untuk versi satu karena setidaknya
sedikit lebih intuitif, mungkin.
Ini sedikit lebih membumi dalam bahasa Inggris.
Jadi melakukan hal berikut saat Anda tidak bersyukur atau saat bersyukur adalah palsu.
Dan kali ini, juga, saya tampaknya tidak peduli untuk mengingat apa yang pengguna mengetik
di karenakan pemberitahuan tidak ada n variabel.
Jadi sebenarnya, I -
sedikit kebohongan putih di sana.
Secara fungsional, program ini sedikit berbeda setelah kami sampai ke bawah
karena aku tidak mengingat apa n adalah.
Tapi saya ingin menunjukkan di sini juga bahwa meskipun kita telah melihat GetInt dan
GetString yang digunakan pada sisi kanan tanda sama sejauh ini sehingga
kita ingat nilai, secara teknis, itu tidak benar-benar diperlukan.
Jika untuk alasan apapun Anda tidak peduli untuk menyimpan nilai, Anda hanya ingin
untuk memeriksa nilai, perhatikan bahwa kita hanya bisa menulis ini sebagai GetInt terbuka
paren, paren dekat.
Itu fungsi akan mengembalikan nilai, seperti yang kita telah mengatakan.
Ini akan memberi Anda kembali sebuah int.
Dan jadi jika Anda berpikir mental ini terjadi, ketika saya mengetik 99, GetInt
mengembalikan nomor 99.
Dan begitu konseptual, itu seolah-olah kode saya sebenarnya ini.
Jadi jika 99 memang lebih besar dari 0, maka bersyukur menjadi benar.
Kemudian baris 25 menyadari ooh, kita sudah selesai karena aku sekarang bersyukur.
Dan sejalan 26, kami hanya mengatakan, terima kasih untuk bilangan bulat positif, apa pun
kebetulan.
>> Sekarang mari kita lakukan sintaksis gula sedikit di sini, sehingga untuk berbicara.
Mari kita lihat apakah kita dapat membersihkan baris ini 25 dengan varian ketiga dan terakhir
di positive3.
Jadi perhatikan satu-satunya perbedaan sekarang adalah apa baris kode?
Ya, jadi 25.
Dan kita tidak benar-benar melihat trik ini dulu.
Tapi kami memang melihat tanda seru pada hari Senin, yang menunjukkan apa?
Jadi tidak, atau negasi.
Jadi mengambil nilai Boolean dan flip nilainya.
Benar menjadi palsu.
Salah menjadi benar.
Jadi ini, saya akan mengusulkan, bahkan sedikit lebih intuitif cara
menulis kode karena saya masih bersyukur menginisialisasi ke false.
Saya masih melakukan hal berikut.
Aku mengatur bersyukur untuk benar ketika saatnya tiba.
Tapi sekarang Anda benar-benar bisa hanya menerjemahkan kode ini secara lisan kiri ke kanan,
sementara tidak bersyukur.
Karena bang, atau tanda seru, menunjukkan gagasan tidak, jadi sementara
tidak bersyukur.
>> Jadi sekali lagi, kami belum memperkenalkan konsep-konsep baru per se.
Kami telah berbicara tentang boolean kembali ketika kami bermain dengan Scratch.
Tapi sadar sekarang kita hanya bisa mulai menulis kode kita di
berbagai cara.
Jadi terutama di pset1, jika Anda semacam berjuang untuk mencari tahu cara untuk
menulis beberapa program, kemungkinan Anda beruntung karena ada yang akan ada
sejumlah solusi yang dapat terjadi atas.
Misalnya, ini hanya tiga untuk bahkan yang paling sederhana dari program.
Baiklah.
Dan sekarang mengingat pada hari Senin, kami meninggalkan pada catatan ini dengan nilai-nilai kembali.
Jadi untuk pertama kalinya, kami menulis sebuah program yang tidak hanya memiliki utama,
juga memiliki fungsi kustom sendiri yang saya tulis di sini.
Jadi sejalan 31 sampai 34, saya telah menerapkan fungsi kubus.
Ini tidak rumit.
Ini hanya kali kali, dalam kasus ini.
Tapi apa yang penting tentang hal itu adalah bahwa aku mengambil input dalam bentuk dan
Aku kembali output dalam bentuk kali kali.
>> Jadi sekarang aku punya kemampuan, seperti saya dulu dengan printf saja, untuk memanggil
fungsi ini dengan memanggil fungsi kubus.
Dan fungsi kubus mengambil beberapa masukan.
Dan fungsi kubus kembali beberapa output.
Dan begitu sebaliknya, printf hanya melakukan sesuatu.
Ini tidak kembali apa-apa yang kita peduli - meskipun, sebagai
samping, itu tidak mengembalikan nilai.
Anda hanya umumnya mengabaikannya.
Printf hanya melakukan sesuatu.
Ini memiliki efek samping dari mencetak ke layar.
Sebaliknya di sini, kita memiliki fungsi kubus, yang
sebenarnya kembali sesuatu.
>> Jadi ini umumnya -
bagi mereka yang terbiasa dengan ini, itu ide yang cukup jelas.
Tetapi bagi mereka yang kurang akrab dengan ide lewat di input dan mendapatkan
output kembali, mari kita coba sesuatu yang super hanya sederhana.
Apakah ada yang nyaman datang di panggung sebentar?
Anda harus nyaman dengan kamera pada Anda, juga.
Ya.
Oke, siapa namamu?
KEN: Ken.
DAVID J. Malan: Ken.
Baiklah, Ken.
Ayo up.
Jadi Ken akan menjadi fungsi dari macam di sini.
Dan mari kita pergi ke depan dan melakukan hal ini.
Mari kita sedikit mewah.
Senang bertemu Anda.
Selamat datang di tengah panggung.
Baiklah.
Mari kita menekan tombol ini di sini.
Baiklah.
Jadi di sini Anda memiliki papan tulis modern.
Dan apa yang saya adalah fungsi utama, misalnya.
Dan saya tidak memiliki iPad di tanganku.
Saya tidak begitu ingat bagaimana - baik, sebenarnya, tidak bisa mengatakan bahwa.
Saya tidak benar-benar memiliki tulisan tangan yang bagus.
Dan karena itu, saya ingin Anda untuk mencetak sesuatu di layar untuk saya.
>> Jadi saya menjadi program utama.
Dan saya akan memiliki Anda mengatakan ini dengan menulis dalam cakar ayam saya dan
kemudian melewati Anda masukan.
Jadi seperti konyol meskipun latihan ini, gagasan tentang fungsi dan memanggil
fungsi dan mengembalikan fungsi benar-benar bermuara pada hal ini.
Saya utama.
Saya baru saja menulis printf ("sesuatu") pada layar.
Saya sedang menjalankan program ini.
Dan segera setelah printf dipanggil, dibutuhkan satu argumen - atau satu parameter,
kadang -
antara tanda kutip ganda.
Berikut ini adalah argumen itu.
Saya menyerahkannya pada Ken.
Sekarang dia adalah kotak hitam menulis beberapa beberapa tahun yang lalu yang tampaknya
hanya tahu bagaimana untuk mencetak hal-hal di layar.
>> Jadi, jalankan.
Itu tidak buruk.
Jadi, sangat baik.
Jadi sekarang Ken dilakukan mengeksekusi.
Apakah dia harus menyerahkan apa-apa kembali?
Jadi tidak yang kita lihat sejauh ini.
Sekali lagi, printf tidak benar-benar kembali nomor.
Tapi kami akan mengabaikan bahwa untuk saat ini karena kita belum pernah menggunakannya.
Jadi itu saja untuk Ken.
Dan jadi sekarang main datang kembali untuk mengeksekusi -
utama mengambil alih kendali program lagi karena baris kode,
printf, dilakukan mengeksekusi.
Dan kami pergi tentang cara kami melaksanakan apapun jalur lain yang ada.
>> Baiklah.
Jadi sekarang mari kita coba contoh yang sedikit berbeda.
Dan ini waktu di sini, mari kita pertama menghapus layar di sini.
Dan kali ini, kita akan melakukan fungsi cubing.
Tapi kali ini, saya mengharapkan nilai output.
Jadi mari kita pergi ke depan dan melakukan hal ini.
Jadi sekarang aku punya baris kode yang mengatakan x = kubus (x).
Jadi sebenarnya ayo -
baris kode, ingat, tampak seperti ini.
x = kubus (x).
Jadi bagaimana ini akan bekerja?
Jadi mari kita pergi ke depan dan memberikan layar putih lagi.
Dan saya akan menulis sekarang turun nilai x, yang pada saat ini dalam
Waktu kebetulan, katakanlah, 2, untuk tetap sederhana.
Jadi saya telah menulis di selembar kertas nilai 2,
yang adalah x nilai saya.
Saya menyerahkannya kepada Ken.
KEN: Dan aku hanya menulis jawabannya?
DAVID J. Malan: Ya, mari kita menulis jawabannya.
Oke.
Dan sekarang dia harus kembali saya sesuatu.
Jadi -
sempurna.
Bagus segue.
>> Jadi sekarang dia tangan saya kembali nilai 8, dalam kasus ini.
Dan apa yang harus saya lakukan dengan itu?
Nah, sebenarnya, mari kita lihat.
Dapatkan hak ini.
Apa yang akan saya lakukan dengan itu?
Sekarang aku akan mengambil nilai ini dan benar-benar menyimpannya pada mereka
sama bit dalam memori.
Tapi perhatikan, aku agak berjuang di sini.
Aku agak bingung karena di mana saya benar-benar menulis nilai x?
Karena apa yang saya baru saja dilakukan secara fisik tangan Ken selembar kertas
yang memiliki nilai 2, yang x.
Dan memang, inilah yang terjadi.
Jadi ternyata bahwa ketika Anda memanggil fungsi, dan Anda lulus dalam argumen
seperti "hello world" atau Anda lulus dalam argumen seperti 2, secara umum, Anda
lewat di salinan argumen itu.
Dan jadi seperti aku menuliskan nomor 2 di sini dan menyerahkannya kepada Ken; yang harus
berarti bahwa saya masih memiliki salinan dari 2 nilai di suatu tempat.
Karena memang, sekarang aku sudah mendapatkan kembali nilai 8, saya harus kembali ke
RAM dan benar-benar menuliskan 8 di mana saya pernah punya nomor 2.
>> Jadi ingat visual ini gagasan lewat di harfiah
salinan nilai.
Ken melakukan hal itu, tangan saya kembali sesuatu - dalam hal ini,
nilai seperti 8.
Dan kemudian saya harus melakukan sesuatu dengan nilai bahwa jika saya
ingin tetap sekitar.
Jadi semua ini akan menjadi semua terlalu akrab sebelum lama.
Terima kasih banyak untuk demo ini di sini, Ken.
Baiklah.
Sangat baik dilakukan.
Jadi mari kita lihat bagaimana yang pada akhirnya berhubungan dengan beberapa fungsi
menelepon bahwa kita sudah lakukan di sini.
Jadi biarkan aku pergi ke depan dan membawa kita kembali ke contoh cubing sini.
Dan perhatikan bahwa jika kita ingin benar-benar mulai mengambil ini lebih lanjut, kita akan
harus berhati-hati dari fakta bahwa x jumlah yang sedang lewat di
di sini berbeda dengan apa yang sebenarnya sedang masuk ke fungsi.
Jadi sekali lagi, ini disahkan oleh copy akan menjadi sangat
erat hanya dalam beberapa saat.
>> Jadi mari kita lihat sesuatu yang tidak cukup bekerja benar belum.
Aku akan pergi ke depan dan membuka contoh kereta ketiga, yang
adalah cacat oleh alam.
Dan itu disebut buggy3, dan menerapkan fungsi swapping.
Jadi di sini kita memiliki fungsi utama yang x dan y sewenang-wenang diinisialisasi
1 dan 2, masing-masing.
Kita bisa menggunakan GetInt, tetapi kita hanya perlu latihan sederhana.
Jadi sulit-kode sebagai 1 dan 2.
Di baris 21 dan 22, kita tampaknya mencetak x dan y, satu per baris.
Kemudian, pada baris 23, saya menyatakan saya menukar nilai-nilai, titik, titik, titik.
Saya rupanya memanggil fungsi di baris 24 disebut pertukaran
yang mengambil dua argumen.
Ini benar-benar legit untuk fungsi-fungsi untuk mengambil dua argumen.
Kami telah melihat printf melakukannya sudah.
Jadi pertukaran ternyata mengambil x dan y.
Dan seperti namanya, saya berharap bahwa itu akan
menukar dua nilai.
Jadi kemudian aku mengklaim on line 25, bertukar.
Dan saya cetak ulang x dan y dengan asumsi bahwa
mereka memang telah bertukar.
Tetapi jika aku benar-benar menjalankan program ini -
biarkan aku membuka jendela terminal.
Biarkan saya membuat buggy3.
Seperti namanya, ini tidak akan berakhir dengan baik.
Karena ketika saya tekan Enter, perhatikan bahwa x adalah 1.
y adalah 2.
Namun di akhir program, mereka masih, pada kenyataannya, sama.
>> Jadi berdasarkan demonstrasi hanya sekarang dengan Ken, apa yang sebenarnya terjadi?
Nah, mari kita menyelam ke dalam fungsi swap.
Ini super pendek.
Ini hanya beberapa baris kode yang panjang.
Tapi apa masalah mendasar berdasarkan cerita sederhana mengatakan kepada
di sini dengan Ken?
Mengapa swap yang rusak?
[Tak terdengar]
Tepat.
Jadi kita menyimpan untuk menyalin, bukan variabel itu sendiri.
Dengan kata lain, swap ternyata membutuhkan dua argumen, int.
Dan itu sewenang-wenang disebut a dan b.
Dan di sini, saya sudah lulus dalam x dan y, yang masing-masing 1 dan 2.
Tapi aku tidak benar-benar lewat di x.
Aku tidak benar-benar lewat di y.
Saya melewati salinan x dan salinan y.
Ini seperti hampir seolah-olah Anda disalin dan disisipkan ke swap nilai yang
Anda ingin untuk benar-benar memanipulasi.
Jadi jika itu terjadi, ketika saya, program, mulai menjalankan
baris 35, kemudian 36 -
ketika saya sampai ke baris 37, saat ini dalam cerita, berapakah nilai dari?
Pada titik ini dalam cerita, baris 37, berapakah nilai dari pada saat ini?
Jadi itu hanya harus 1.
Benar?
Karena x disahkan sebagai argumen pertama.
Dan fungsi ini hanya sewenang-wenang memanggil argumen pertama, a.
Demikian pula adalah y, argumen kedua.
Dan itu hanya sewenang-wenang memanggil b argumen kedua.
>> Sekarang dikotomi ini sebenarnya cukup sederhana dijelaskan.
Pikirkan tentang hal ini.
Tak satu pun dari kita telah bertemu dengan orang yang menulis printf.
Jadi pasti, dia tidak tahu apa variabel kita 30 tahun kemudian akan
untuk dipanggil.
Jadi harus ada perbedaan antara apa yang Anda sebut variabel dalam
fungsi Anda sedang menulis dan apa yang Anda sebut variabel dalam fungsi Anda
menelepon atau menggunakan.
Jadi dengan kata lain, saya telah menulis saya sebagai variabel x dan y.
Tapi jika orang lain telah menulis fungsi swap, ia tentu
tidak akan tahu apa yang saya variabel yang akan dipanggil.
Jadi menyadari bahwa ini adalah mengapa Anda memiliki dualitas nama.
Secara teknis, aku bisa melakukan ini secara kebetulan.
Tapi mereka masih akan disahkan sebagai salinan.
Itu hanya akan menjadi murni kebetulan estetis jika orang tersebut yang menulis
pertukaran telah menggunakan nama yang sama.
>> Baiklah.
Jadi pada titik ini dalam cerita, baris 37, adalah 1.
b adalah 2.
Dan sekarang saya melanjutkan untuk swap mereka.
Yah pertama-tama, biarkan aku benar-benar melakukan hal ini jauh lebih sederhana.
Aku tidak tahu apa tiga baris kode lakukan.
Mari saya hanya melakukan ini.
b mendapat.
mendapat b.
Selesai.
Mengapa hal ini rusak, logis?
Ini semacam hal yang intuitif, kan?
Jadi menjadi b.
Dan b menjadi.
Tapi masalahnya adalah bahwa segera setelah baris 37 mengeksekusi, apa
nilai a dan b?
Hal yang sama, 1.
Karena anda telah musnah, sehingga untuk berbicara, Anda telah berubah b menyamai.
Jadi sekali baris 37 dijalankan, itu bagus.
Anda sekarang memiliki dua salinan dari bagian dalam 1 jumlah fungsi ini.
Jadi ketika Anda mengatakan di baris 38, mendapat b, baik, kau jenis kacau.
Karena Anda hanya menugaskan 1 ke 1.
Kau seperti kehilangan nilai yang Anda pedulikan.
>> Jadi dalam versi asli ini, perhatikan apa yang saya lakukan.
Saya bukannya punya baris ketiga kode yang tampak seperti ini.
Saya mendeklarasikan variabel sementara - tmp adalah nama yang sangat umum
untuk variabel sementara.
Ini int karena itu harus sesuai dengan apa yang saya ingin membuat salinan.
Saya menyimpan salinan dari dalam tmp. Jadi sekali baris 37 telah dieksekusi,
nilai adalah -
kewarasan cepat check -
1.
Nilai b adalah 2.
Dan nilai tmp juga 1.
Jadi sekarang saya mengeksekusi baris 38.
Jadi sekali baris 38 mengeksekusi, yang mengambil nilai b.
Dan b adalah 2.
Jadi sekarang 2.
Jadi pada titik ini dalam cerita, adalah 2, b adalah 2,
dan tmp adalah 1.
Jadi sekarang logis, kita bisa nilai hanya celepuk tmp ke dalam b.
Dan kita sudah selesai.
>> Jadi kita sudah memecahkan masalah itu.
Sayangnya, ketika saya menjalankan program ini dalam bentuk ini, tidak benar-benar menukar
nilai-nilai.
Tapi harus jelas, mengapa?
Aku tetap masalah logis dari beberapa saat yang lalu.
Tapi sekali lagi, jika saya menjalankan program ini, x dan y tetap tidak berubah pada akhir
program eksekusi.
[Tak terdengar]
DAVID J. Malan: Jadi kita tidak kembali apa-apa.
Jadi itu benar.
Tapi ternyata ada sedikit masalah di sini karena sejauh ini, para
Satu-satunya hal yang kita sudah bisa kembali adalah satu hal.
Dan ini adalah pembatasan C. Anda hanya dapat kembali benar-benar satu nilai,
dalam hal ini, aku seperti terjebak di sini
karena saya bisa mengembalikan nilai baru x atau saya bisa mengembalikan
baru nilai y.
Tapi aku ingin kembali keduanya.
Jadi kembali ini bukan solusi sederhana di sini.
Tapi masalahnya fundamental adalah mengapa?
Apa yang telah kita benar-benar bertukar?
dan b.
Tapi a dan b adalah salinan dari x dan y, yang berarti kita hanya melakukan semua ini
bekerja - kami hanya menghabiskan seperti tiga menit berbicara tentang swap
fungsi dan ketiga variabel.
Dan itu bagus, sempurna benar dalam isolasi.
Tapi ruang lingkup dan b hanya dalam baris-baris di sini.
Jadi sama seperti untuk loop, jika Anda mendeklarasikan integer i dalam untuk
loop - sama, di dalam jika Anda mendeklarasikan dan b fungsi yang
Anda sudah menulis, mereka hanya di dalam fungsi yang berlaku.
Yang berarti secepat swap dilakukan mengeksekusi dan kita pergi dari baris 24 sampai
baris 25, x dan y belum berubah sama sekali.
Anda hanya menyia-nyiakan banyak waktu swapping salinan variabel.
>> Jadi ternyata bahwa solusi untuk ini sebenarnya tidak jelas.
Ini tidak cukup memadai untuk mengembalikan nilai-nilai karena kita bisa
hanya kembali satu nilai.
Dan aku benar-benar ingin menukar kedua x dan y pada waktu yang sama.
Jadi kita akan kembali ke ini.
Tapi untuk saat ini, menyadari bahwa masalah fundamental berasal dari kenyataan
bahwa a dan b adalah salinan.
Dan mereka berada di ruang lingkup mereka sendiri.
Nah, mari kita coba untuk memecahkan masalah ini dalam beberapa cara.
Biarkan saya benar-benar gulir kembali ke sini dan membuka, katakanlah, varian keempat
ini, buggy4.
Dan bagaimana dengan ini?
Ini adalah masalah serupa tetapi sederhana untuk melihat sebelum kita mengambil bacokan di
memecahkannya.
Program ini disebut kenaikan.
Dan itu tampaknya menginisialisasi integer x untuk 1 di baris 18.
Saya kemudian mengklaim x adalah 1.
Saya kemudian mengklaim incrementing, titik, titik, titik.
Saya kemudian memanggil kenaikan.
Tapi kemudian di baris 22 dan 23, saya menyatakan itu sudah bertambah.
Saya mengklaim x sekarang apapun itu, mungkin 2.
>> Tapi program ini adalah kereta.
Apa masalahnya?
Ya?
[Tak terdengar]
DAVID J. Malan: Tepat.
Jadi x telah dinyatakan jelas on line 18.
Yang ada di dalam kurung kurawal utama itu.
Jadi jawaban sederhana di sini adalah bahwa, baik, x ada di sini.
Ini tidak ada di baris 32.
Jadi program ini benar-benar bahkan tidak akan mengkompilasi.
Compiler, ketika saya coba kompilasi kode ini, akan berteriak padaku
tentang beberapa identifier dideklarasikan atau sesuatu seperti itu.
Bahkan, mari kita coba.
Ini adalah membuat buggy4.
Ada itu.
Penggunaan x pengenal dideklarasikan di baris 32.
Dan sebenarnya, mari kita lebih eksplisit di sini hari ini sehingga ini berguna dalam
jam kantor dan di rumah.
Perhatikan bahwa itu agak samar tertulis.
Tapi fakta bahwa dentang memiliki berteriak pada kita, mengatakan
buggy4.c: 32:5, benar-benar berguna.
Ini berarti bahwa kesalahan adalah on line 32 di posisi lima karakter.
Jadi satu, dua, tiga, empat, lima.
Itu, pada kenyataannya, di mana masalahnya.
Dan juga untuk diingat pada jam-jam kantor dan di rumah, aku beruntung di sini.
Saya punya satu kesalahan.
Ini akan relatif mudah untuk memperbaikinya.
Tetapi jika Anda mendapatkan seluruh layar penuh pesan kesalahan yang luar biasa, sekali lagi,
menyadari bahwa satu paling bawah mungkin saja gejala
paling atas yang.
Jadi selalu memburu bug Anda dari atas ke bawah.
Karena mungkin saja ada efek daisy-chain yang menyarankan Anda
memiliki masalah cara yang lebih dari yang Anda benar-benar melakukan.
>> Jadi bagaimana kita bisa memperbaiki ini jika tujuan saya adalah untuk kenaikan x?
Apa itu?
Oke.
Jadi kita bisa membuat x global.
Mari kita mengambil jalan pintas yang saya memperingatkan tentang sebelumnya.
Tapi heck, kita hanya perlu perbaikan cepat.
Jadi katakan saja x int di sini.
Itu membuat x global.
Jadi sekarang utama memiliki akses ke sana.
Dan kenaikan memiliki akses ke sana.
Dan jadi biarkan aku pergi ke depan dan kompilasi ini sekarang.
Membuat buggy4, Enter.
Sepertinya untuk mengkompilasi sekarang.
Mari kita jalankan buggy4, dan tampaknya benar-benar bekerja.
Sekarang ini adalah salah satu dari hal-hal ini -
melakukan seperti yang saya katakan, bukan seperti yang saya lakukan, karena saya baru saja dilakukan di sini.
Karena pada umumnya, program kami akan mendapatkan jauh lebih menarik dan
lebih lama dari ini.
Dan jika solusi Anda untuk masalah kehidupan hanya ah, menaruh semua
variabel di bagian atas file Anda, sangat cepat melakukan program mendapatkan
mengerikan sulit untuk mengelola.
Ini akan sulit untuk memikirkan nama variabel baru.
Semakin sulit untuk memahami apa variabel yang melakukan apa.
>> Dan sehingga secara umum, ini bukan solusi yang baik.
Jadi mari kita lakukan ini lebih baik.
Kami tidak ingin menggunakan variabel global di sini.
Saya ingin kenaikan x.
Jadi saya jelas bisa -
pada akhir hari, itu semacam cerita konyol karena kita hanya melakukan hal ini.
Tapi kalau aku tidak tahu tentang operator yang, atau saya tidak diizinkan untuk
mengubahnya dalam utama itu sendiri, bagaimana lagi yang bisa saya menerapkan Ken di sini, ini
waktu tidak kubus tetapi untuk kenaikan?
Bagaimana cara mengubah hal ini di sini?
Ya.
[Tak terdengar]
DAVID J. Malan: Oke, baik.
Jadi kenapa tidak saya lulus di x?
Dan kemudian daripada mengembalikannya, kenapa tidak aku hanya melakukan pengembalian x + 1?
Sekarang, beberapa hal yang lebih harus mengubah sini.
Aku di jalur yang benar.
Apa lagi yang harus saya Tweak?
Orang lain.
Ya?
[Tak terdengar]
DAVID J. Malan: Saya perlu mengubah jenis kembalinya selisih
karena itu tidak membatalkan.
Void berarti tidak ada yang dikembalikan.
Tapi yang jelas, sekarang ini.
Jadi ini kebutuhan untuk mengubah ke int untuk konsisten dengan apa
Aku benar-benar kembali.
>> Sekarang sesuatu yang lain masih kereta di sini.
Ya?
[Tak terdengar]
DAVID J. Malan: Jadi saya perlu untuk kenaikan x?
[Tak terdengar]
DAVID J. Malan: Ah, jadi saya harus lulus x.
Jadi saya harus melakukannya di sini.
Jadi prototipe, saya harus mengubah ini di sini.
Jadi ini harus menjadi int.
Ini harus menjadi -
hmm.
Saya benar-benar memiliki bug di sini.
Mari kita perbaiki ini yang pertama.
Apa yang harus ini benar-benar menjadi?
Jadi itu harus menjadi sesuatu yang int.
Bisa jadi x.
Tapi terus terang, jika Anda mulai memanggil semua x variabel Anda, itu akan mendapatkan
kurang dan kurang jelas yang mana.
Jadi mari kita sembarangan memilih konvensi penamaan yang berbeda untuk saya
helper fungsi, fungsi aku menulis.
Kita akan menyebutnya.
Atau kita bisa menyebutnya - sebut saja even_number menjadi lebih eksplisit.
Jadi kemudian aku harus kembali apapun jumlahnya ditambah 1.
Dan sekarang saya harus mengubah satu hal lainnya di sini dan satu
hal lain di sini.
Apa yang saya harus mengubah on line 21 pertama?
Saya harus menetapkan ke x.
Jadi saya tidak bisa hanya memanggil x kenaikan.
Saya perlu mengingat jawaban dengan mengubah nilai x pada
sisi kiri tangan.
Dan meskipun x sekarang di sebelah kiri dan kanan, itu benar-benar baik karena
sisi kanan dijalankan pertama kemudian akan menjatuhkan ke kiri
tangan hal, x dalam kasus ini.
Dan kemudian yang terakhir, ini adalah memperbaiki mudah sekarang.
Ini hanya harus sesuai apa yang di bawah.
Int nomor.
>> Baiklah.
Jadi sejumlah besar perubahan untuk fungsi benar-benar bodoh.
Tetapi wakil dari hal-hal yang kita akan semakin ingin lakukan.
Jadi membuat buggy4.
Saya sudah kacau di suatu tempat.
Oh my God.
Lima kesalahan dalam, seperti, sebuah program enam-line.
Jadi apa yang salah pada baris 18, karakter 5?
Baiklah.
Jadi saya harus mendeklarasikan int ini.
Baiklah.
Jadi mari kita lihat, sejumlah besar kesalahan lainnya.
Oh my god.
19, 18, 21.
Tapi sekali lagi, mari kita membersihkan layar -
Kontrol L di sini - dan re-run dentang.
Jadi lima masalah sebenarnya hanya satu.
Jadi sekarang mari kita jalankan buggy4, Enter.
Wah.
x telah bertambah dengan benar.
>> Baiklah.
Setiap pertanyaan tentang bagaimana untuk kenaikan angka?
Ya?
SPEAKER 2: Mengapa Anda hanya dapat mengubah x ke nomor dalam variabel
nama dan akan tahu apa yang Anda maksudkan?
DAVID J. Malan: Pertanyaan yang bagus.
Bagaimana mungkin aku bisa mengubah x ke nomor dan program akan tahu
segera?
Jadi sekali lagi, menganggapnya sebagai abstraksi ini.
Jadi jika saya utama dan Ken adalah inkremental, terus terang, saya tidak peduli
apa Ken panggilan iPad nya.
Saya tidak peduli apa yang dia sebut sesuatu yang ada hubungannya dengan pelaksanaan nya
dari fungsi ini.
Jadi ini adalah detail pelaksanaan yang saya, main, jangan
harus peduli.
Dan sehingga hanya mengubah secara konsisten dalam fungsi, jumlah disini
dan nomor di sini, adalah semua yang diperlukan selama aku mengkompilasi ulang.
Ini semacam seperti jika Anda berpikir tentang - banyak dari kita, bagi anda dengan pengemudi
lisensi yang telah didorong, atau jika Anda bahkan didorong dalam mobil -
kebanyakan dari kita tidak tahu bagaimana mobil bekerja di bawah kap mesin.
Dan harfiah, jika Anda membuka kap, kebanyakan dari kita - termasuk saya sendiri -
tidak akan benar-benar tahu apa yang kita sedang melihat.
Jenis seperti Anda mungkin merasa dengan hal-hal seperti ini sekarang.
Tapi kita tidak benar-benar harus peduli bagaimana mobil bekerja.
Kami tidak harus peduli apa semua batang dan piston dan kabel dalam
mobil yang sebenarnya dilakukan.
>> Jadi sesuatu seperti apa yang Anda sebut piston tidak masalah
di sini dalam kasus ini.
Ide yang sama.
Ya?
[Tak terdengar]
DAVID J. Malan: Jika ada menggunakan lebih dari saat xa variabel lalu,
Anda, programmer, harus mengubah mereka di mana-mana.
Atau Anda benar-benar bisa melakukan File, Menu, dan kemudian Cari / Ganti,
sesuatu seperti itu.
Tapi Anda akan harus membuat perubahan sendiri.
Anda harus konsisten.
[Tak terdengar]
DAVID J. Malan: Sebuah urutan tertentu seperti di sini?
Jika ini adalah int nomor lain?
Ya.
Jadi urutan penting ketika Anda memanggil fungsi.
Jadi jika saya memanggil peningkatan sini dengan sesuatu sesuatu koma,
ada pemetaan langsung.
Variabel pertama, apa pun namanya, dibuat salinan pertama
Argumen di sini.
Maaf, ini seharusnya tidak menjadi kurung.
Garis Argumen kedua dengan yang kedua.
>> Jadi urutan, ya, hal.
Baiklah.
Maaf aku mengambil jalan panjang untuk sampai ke sana.
Pertanyaan lain?
Baiklah.
Jadi mari kita lihat apakah kita tidak bisa melukis gambaran tentang apa yang sebenarnya terjadi
di sini di bawah kap mesin, sehingga untuk berbicara.
Jadi ini adalah sebuah persegi panjang yang mungkin mewakili memori komputer Anda.
Jadi bahkan jika Anda tidak tahu bagaimana memori bekerja atau bagaimana RAM bekerja, setidaknya
berasumsi bahwa Anda memiliki tandan itu hari ini.
Anda punya megabyte itu.
Anda punya gigabyte itu.
Dan kita tahu dari nol minggu yang byte adalah hanya apa?
8 bit.
Benar, jadi 8 nol dan yang.
Jadi jika komputer Anda memiliki pertunjukan RAM, dua gigs RAM hari ini, Anda memiliki
miliar atau 2 miliar byte memori, atau sekitar 8 miliar atau 16 miliar
bit, dalam komputer Anda.
Sekarang tidak seperti contoh Willy kecil Woolly, itu bukan partikel magnetik
biasanya lagi.
Semakin, di laptop setidaknya, itu solid state drive, SSD, yang
hanya memiliki bagian yang bergerak.
Ini semua elektronik.
Ini semua listrik berdasarkan.
Jadi pikirkan, meskipun, dari persegi panjang ini hanya sebagai mewakili satu atau dua
gigabyte memori yang Anda miliki.
>> Jadi sepotong memori.
Sekarang dunia ilmu komputer memiliki semacam potongan dipartisi dari
memori untuk melakukan hal yang berbeda.
Jadi misalnya, jika ini adalah RAM komputer Anda - seperti yang disarankan oleh
rectangle ada - ternyata bahwa dengan konvensi, di bagian atas RAM Anda, sehingga
untuk berbicara, umumnya apa yang disebut segmen teks.
Mereka adalah nol dan orang-orang yang Anda telah dikompilasi.
Jadi ketika kita telah melihat di bawah kap pada apa a.out, semua
angka nol dan satu -
ketika Anda menjalankan sebuah program, mereka nol dan yang diambil dari hard
drive ke sesuatu yang disebut RAM.
Dan dalam RAM, mereka diletakkan di atas.
Sekarang sementara itu, Anda memiliki hal-hal lain.
Diinisialisasi data, data uninitialized.
Kedua petak memori mengacu pada variabel global, yang
Anda tidak sering digunakan.
Tapi kadang-kadang jika Anda melakukannya, mereka akhirnya sampai di sana juga.
Lalu ada beberapa hal lain.
Lingkungan variabel, yang kita tidak akan menghabiskan banyak waktu di.
Tapi kemudian dua hal penting yang akan datang kembali seluruh hal ini
semester, stack dan heap.
>> Jadi sebagian besar memori komputer Anda dicadangkan ketika menjalankan sebuah program untuk
sesuatu yang disebut stack dan sesuatu yang disebut tumpukan.
Dan kita tidak akan berbicara tentang tumpukan saat ini, tapi kami akan
berbicara tentang stack.
Dan tumpukan dimaksudkan untuk menyulap visual seperti ruang makan
makan nampan di Mather House, atau di mana pun Anda berada, di mana
dining hall staf bersih mereka setiap hari.
Mereka menumpuk mereka dari lantai atas.
Dan sama dalam memori, ada ide menempatkan sesuatu pada
stack, meletakkan sesuatu di tumpukan, meletakkan sesuatu di tumpukan.
Dan apa yang kita maksudkan dengan ini?
Nah, mari kita memperbesar hanya pada bagian bawah gambar ini, komputer Anda
RAM, mengusulkan berikut.
Ternyata bahwa ketika Anda menjalankan program seperti a.out atau Halo, apa pun
program ini adalah bahwa Anda telah menulis,
lagi, mereka nol dan yang diambil dari hard drive Anda - yang
penyimpanan jangka panjang, tetap ada bahkan ketika Anda tarik steker -
dimuat ke RAM.
RAM lebih cepat daripada hard drive.
Ini lebih kecil dari hard drive.
Tapi itu di mana program hidup saat Anda sedang menjalankan mereka.
>> Jadi Anda klik dua kali sebuah program pada Mac atau PC - itu diambil dari
hard drive ke dalam RAM.
Segera setelah itu dimuat ke dalam RAM, angka nol dan satu pergi di atas jalan, yang
disebut segmen teks.
Tapi kemudian segera setelah program Anda benar-benar mulai berjalan, utama
fungsi disebut.
Dan utama, seperti yang kita lihat, seringkali memiliki variabel lokal.
Dan memiliki ints dan string dan karakter dan sejenisnya.
Jadi jika program anda yang telah Anda tulis atau program yang Anda miliki
double klik menggunakan beberapa variabel dalam utama, mereka berakhir di
bawah tumpukan memori Anda, sehingga untuk berbicara.
Sekarang lebih konkret, apakah benar-benar berarti?
Ini hanya berarti bahwa jika kami akan menomori hal -
jika kita akan ke nomor byte RAM di komputer Anda, perhatikan bahwa
ini mungkin angka nol byte.
Ini mungkin jumlah byte satu, dua, tiga, empat, lima, enam, semua
jalan sampai ke seperti -
2 milyar akan semua jalan sampai ada di bagian atas.
Jadi dengan kata lain, ketika kita berbicara tentang RAM atau memori dalam hal byte,
hanya berarti bahwa seseorang telah memutuskan apa yang harus menomori masing-masing
mereka potongan memori.
>> Jadi, ketika Anda membutuhkan 32 bit untuk int, atau Anda perlu 8 bit untuk char, di mana
mereka berakhir di memori?
Nah konseptual, mereka hanya berakhir di bawah ini
hal yang disebut stack.
Tapi apa yang menarik sekarang adalah saat utama memanggil fungsi.
Misalkan sebuah fungsi yang disebut foo, hanya nama sewenang-wenang.
Apa yang terjadi adalah utama adalah di bagian bawah ini tumpukan memori.
Foo sekarang diletakkan di atas utama dalam memori.
Jadi setiap variabel lokal yang foo telah berakhir semacam konseptual di atas
mereka yang utama.
Jika foo panggilan fungsi lain yang disebut bar, variabel-variabel tersebut berakhir di sini.
Jika bar panggilan sesuatu yang lain, di sini, di sini, di sini.
Jadi apa yang menarik tentang menjalankan sebuah program adalah bahwa ketika Anda memanggil fungsi,
dan sebagai fungsi-fungsi memanggil fungsi-fungsi, dan sebagai fungsi-fungsi panggilan fungsi,
Anda membangun ini tumpukan fungsi dalam memori.
Dan hanya sekali kembali fungsi Anda mulai mendapatkan memori yang kembali.
Jadi salah satu cara termudah untuk kehabisan memori dalam program komputer adalah untuk
menulis fungsi yang tidak pernah kembali.
>> Jadi misalnya, mari kita menunjukkan sebanyak dengan
sengaja kereta program.
Biarkan aku pergi ke depan dan melakukan # include, int main (void).
Dan aku akan melakukan sementara (2> 1), yang mungkin tidak akan pernah
berubah pada kami.
Dan biarkan aku pergi ke depan sekarang dan lakukan printf.
Sebenarnya, itu akan menjadi kurang menarik secara visual.
Mari kita lakukan ini.
Untuk int (i = 0; i> 0).
Mari kita membuat kesalahan ini, i + +.
Dan jangan printf sini.
Mari kita mempraktekkan apa yang saya berkhotbah.
Mari kita memiliki metode di sini.
Void chorus, dan kita akan mengatakan int i.
Dan kemudian aku akan mengatakan, printf -
oh, mari kita membuat ini lebih menarik.
Mari kita sebenarnya tidak mencetak apa pun sama sekali.
Mari kita lakukan ini.
Chorus (i).
>> Baiklah.
Jadi ini adalah kereta karena mengapa?
Saya membuat ini sebagai aku pergi karena program tidak benar-benar melakukan apa-apa
kepentingan.
Tapi itu bukan tujuan.
Tujuannya adalah untuk menulis sebuah program yang fungsi utamanya melakukan apa, rupanya?
Menyebut dirinya.
Dan sebenarnya, kita tidak perlu loop.
Mari kita menyederhanakan bahkan ini hanya agar tidak melupakan benar-benar
mendasar bug.
Panggilan utama chorus menyanyikan chorus beberapa.
Lalu aku melakukan sesuatu yang bodoh, dan aku punya chorus chorus panggilan karena saya diasumsikan
orang lain akan menerapkannya mungkin.
Dan sekarang ini tidak akan mengkompilasi belum.
Saya perlu melakukan apa?
Aku butuh prototipe, ingat.
Jadi saya harus memiliki di sini chorus void (int i);.
>> Jadi sekarang, jika saya pergi ke sini -
sebenarnya, mari kita gunakan jendela besar.
Mari kita pergi ke depan dan membuat chorus.
Penggunaan declarer teridentifikasi i.
Oh, itu bodoh.
Kita tidak perlu argumen.
Mari kita lakukan ini.
Berharap kita sudah mulai dengan cara ini.
Ini akan menjadi sebuah program jauh lebih mudah untuk menulis.
Jadi ada.
Sekarang mari kita pergi ke jendela terminal saya, re-run dentang.
Dan di sini kita pergi.
Itu benar-benar cepat.
Apa yang sebenarnya baru saja terjadi, meskipun?
Nah, sekarang saya akan menambahkan garis cetak, sehingga kita dapat melihat.
Jadi saya katakan printf, katakanlah, aku di sini.
Oke, tidak ada variabel, kita akan meninggalkan seperti itu.
Biarkan aku kembali jalankan make.
Mari saya ulang-run chorus.
Dan ayolah.
Terus.
Sebagai samping, mengapa tidak jatuh belum?
Kesalahan segmentasi terjadi super cepat sebelumnya.
[Tak terdengar]
DAVID J. Malan: Tepat.
Jadi butuh waktu untuk mencetak.
Ini hanya membutuhkan lebih banyak pekerjaan pada bagian komputer.
Dan ada itu.
Segmentation fault.
>> Jadi perhatikan betapa cepat program dijalankan.
Jika Anda tidak mencetak apapun, super cepat.
Tapi kami masih punya kesalahan segmentasi karena apa yang terjadi?
Nah, jika Anda berpikir tentang bagaimana memori komputer Anda diletakkan keluar, hal ini
kebetulan utama.
Tapi di sini -
mari kita sebut chorus ini, dan mari kita sebut chorus ini.
Dan sekarang jika saya melakukan estetika saya benar, ini hanya akan mengatakan chorus,
chorus, chorus, chorus, chorus, chorus, chorus, nauseum iklan.
Dan pada akhirnya, apa yang akan terjadi?
Jika gambaran besar harfiah ini, apa yang baru saja terjadi konseptual?
Overruns tumpukan tumpukan.
Atau lebih buruk lagi, Anda hanya dibanjiri segala sesuatu, termasuk segmen teks, yaitu
angka nol dan satu yang mewakili program anda.
Singkatnya, ini hanya super, buruk super.
Benar?
Program Anda telah berputar di luar kendali.
Anda menggunakan memori jauh lebih daripada yang Anda inginkan semua karena bodoh
kesalahan, dalam hal ini.
Atau dalam kasus ini, fungsi yang sangat sengaja dilakukan menamakan dirinya.
Sekarang ini tidak semuanya buruk.
Fungsi menyebut diri mereka sebenarnya memiliki kekuatan besar
saat Anda menggunakannya dengan benar.
Saya belum menggunakannya dengan benar di sini.
>> Jadi ini tidak semuanya buruk.
Tapi fakta bahwa saya tidak pernah benar-benar berhenti menyebut diri saya adalah mendasar
Kelemahan di sini dari program ini.
Jadi di mana kita pergi dengan semua ini?
Nah, apa yang sebenarnya terjadi?
Ketika saya memanggil fungsi kenaikan, seperti yang kami lakukan pada mereka contoh,
Aku punya nilai seperti 1 bahwa saya lulus masuk
Saya lulus dalam salinan nomor satu.
Jadi berikut ini terjadi.
Jadi mari kita pergi ke contoh kenaikan.
Dan ini pria yang tepat di sini.
Jadi, inilah apa yang sebenarnya terjadi.
Ketika saya menelepon kenaikan, dan saya lulus dalam x, pictorially apa
terjadi di sini adalah ini -
jika saya memiliki nilai 1 disimpan di sini, dan aku benar-benar memanggil kenaikan, yang
sekarang disebut chorus -
yeah, itu melempar saya dari sini.
Jadi mari kita sebut kenaikan ini.
Dan kita tidak tahu apa fungsi berikutnya akan menjadi.
Jadi apa yang sebenarnya terjadi di sini di suatu tempat di utama, saya memiliki sepotong
memori yang menyimpan nomor 1.
Ketika saya sebut kenaikan, saya menggunakan lain sepotong memori, tapi sekarang aku
memiliki salinan 1.
Ketika saya kenaikan nilai tersebut, ini menjadi 2 - mengerikan ditulis pada
layar di sini.
Tapi kemudian, apa yang terjadi segera setelah kembali kenaikan?
Memori ini hanya akan diserahkan kembali ke sistem operasi, yang berarti semua
Anda telah melakukan apa-apa yang bermanfaat.
Salah satu yang awalnya terkandung dalam utama masih benar-benar ada.
>> Jadi di mana kita pergi dengan ini?
Nah, ternyata bahwa dalam memori Anda memiliki ini kembali ke belakang urutan
byte yang Anda dapat menempatkan barang-barang masuk
Dan ternyata kita sudah melihat sesuatu yang melibatkan menempatkan
hal kembali untuk kembali ke kembali ke belakang.
Apa yang dimaksud dengan string, berdasarkan satu minggu dan sekarang dua minggu?
Jadi itu hanya kumpulan karakter.
Jadi ternyata, seperti yang Anda dapat menempatkan angka dalam memori, sama Anda dapat
menempatkan karakter dalam memori.
Dan sekali kita mulai menempatkan karakter dalam memori back to back untuk kembali ke
kembali, ternyata menggunakan sederhana hal-hal seperti untuk loop atau
while loop, kita dapat iterate -
dari kiri ke kanan atas karakter dalam string -
dan mulai memijat mereka menjadi karakter yang berbeda sama sekali.
A bisa menjadi B. B bisa menjadi C. Sehingga pada akhirnya, kita bisa mengambil
Kalimat bahasa Inggris yang benar-benar masuk akal dan mengkonversi masing-masing
huruf satu per satu waktu dengan berjalan melalui memori komputer kita dibiarkan
tepat untuk benar-benar mengenkripsi.
>> Jadi mari kita lima menit istirahat kami di sini, dan ketika kita kembali, kita akan
memulai proses mengacak informasi.
>> Baiklah.
Jadi sebelum kita menyelam di beberapa kripto dan hal-hal yang disebut array, biarkan aku
jeda untuk setiap pertanyaan karena saya merasa seperti aku benar-benar jenis kacau beberapa
topik tersebut.
Jadi mari kita perbaiki sekarang jika kita bisa.
Jadi kita hanya berbicara tentang nilai-nilai kembali.
Kami berbicara tentang argumen.
Dan kita berbicara tentang gagasan ini, yang kita akan kembali ke dalam minggu-minggu
datang, memandang memori sebagai sejumlah besar tersebut ditumpuk
nampan, sehingga untuk berbicara.
Dari bawah ke atas, sehingga setiap baki yang akan diletakkan di stack mewakili
fungsi yang saat ini sedang dipanggil.
Ada pertanyaan?
Jadi bagaimana - biarkan aku mencoba mengajukan pertanyaan.
Saya terus memanjakan itu, tapi sekarang ini kan - Anda sudah melihat semua wajah anak itu.
Jadi kita akan datang kembali untuk itu.
>> Jadi biarkan saya mengajukan pertanyaan di sini.
Biarkan aku menyederhanakan ini kembali ke apa itu sebelum beberapa dari kami Q & A. sebelumnya
Dan fakta bahwa kenaikan memiliki kurung buka, nomor int, ditutup
kurung.
Apa nomor int mewakili?
[Tak terdengar]
DAVID J. Malan: argumen An.
Oke, tapi apa argumen?
[Tak terdengar]
DAVID J. Malan: Maaf, apa itu?
SPEAKER 3: Sesuatu yang lulus masuk
DAVID J. Malan: Oke.
Jadi sesuatu yang Anda lulus masuk
Dan lebih umum, itu hanya input.
Jika Anda sedang menulis sebuah fungsi dan tujuan yang berfungsi dalam hidup adalah melakukan
sesuatu yang sedikit berbeda setiap kali Anda menggunakannya, maka satu-satunya cara untuk
yang terjadi akan benar-benar tampaknya untuk menyediakan dengan masukan sehingga
dapat melakukan sesuatu yang berbeda dengan masukan bahwa setiap kali.
>> Jadi, Anda perlu menentukan dua hal ketika fungsi mengambil input.
Anda perlu menentukan nama yang Anda ingin memberikan masukan itu, semata-mata untuk
kenyamanan Anda sendiri sehingga Anda dapat merujuk ke dalam fungsi yang Anda
sendiri yang menulis, seperti yang saya lakukan di sini di baris 32.
Tapi Anda juga perlu menentukan jenisnya karena C adalah bahasa pemrograman
yang hanya membutuhkan
bahwa jika Anda ingin variabel, Anda harus memberitahu komputer apa
tipe data itu,
sebagian besar sehingga tahu berapa banyak bit untuk
mengalokasikan untuk variabel tersebut.
Karena bisa jadi enam -
maaf, itu tidak akan menjadi enam.
Hal ini dapat 16.
Hal ini dapat 8.
Hal ini dapat 32, bahkan 64.
Tapi komputer perlu tahu.
Sekarang int di sisi kiri mewakili apa, sebaliknya?
[Tak terdengar]
DAVID J. Malan: Apa itu?
[Tak terdengar]
DAVID J. Malan: Jenis fungsi dan, lebih khusus,
jenis output.
Benar.
Jadi sementara hal dalam kurung merupakan input, jika ada, yang
hal ke kiri mewakili output.
Dan dalam hal ini, peningkatan rupanya mengembalikan sebuah int.
Dan sehingga int adalah jenis kembalinya fungsi ini.
>> Apa artinya untuk kembali?
Secara harfiah, Anda menggunakan kata kunci kembali.
Dan kemudian jika apa yang Anda kembali ke sebelah kanan kata kunci adalah
integer, maka itu memang konsisten dengan apa yang telah kita janjikan.
Anda tidak bisa melakukan sesuatu seperti ini -
halo, dunia -
karena itu adalah string.
Jelas itu bukan integer.
Jadi singkatnya, beban benar-benar pada kita, programmer, untuk lebih spesifik sebagai
untuk apa kita kembali dan kemudian benar-benar pergi tentang mengembalikannya.
Dan kemudian untuk membuat anak laki-laki lebih jelas konteks -
ada dia lagi.
Konteks -
kejutan besar datang hanya dalam beberapa saat.
Konteks di sini sekarang adalah bahwa memori komputer Anda adalah, sekali lagi,
gigabyte, dua gigabyte, apapun.
Mungkin lebih.
Mungkin itu kurang.
Tapi komputer memandangnya sebagai memiliki bagian yang berbeda.
Sesuatu turun di sana.
Sesuatu yang lain naik sana.
Hal-hal yang berbeda terjadi di tengah.
Dan hari ini, kita hanya mulai menceritakan kisah ini.
>> Tapi kita akan kembali ke ini dari waktu ke waktu.
Untuk saat ini, satu-satunya memori kita benar-benar peduli adalah segmen teks
karena itu hanya mewakili nol dan yang
yang telah dentang outputted.
Jadi, ketika Anda menjalankan perintah pada keyboard seperti a.out, atau Anda ganda
klik ikon di Mac OS atau Windows, program Anda yang diambil dari hard
drive ke RAM.
Dan itu menjatuhkan di bagian atas RAM komputer Anda, sehingga untuk berbicara.
Sekarang sementara itu, sebagai program Anda mulai berjalan dan utama dipanggil dalam
Program Anda menulis atau program Microsoft atau Apple menulis, apapun yang
variabel lokal berakhir di sana di bagian bawah memori komputer Anda.
Tapi kalau main memanggil fungsi lain yang sendiri memiliki variabel atau
argumen, mereka berakhir di atasnya.
Dan jika fungsi yang memanggil sesuatu, mereka berakhir di atasnya,
di atasnya, di atasnya.
Dan hanya sekali fungsi dilakukan mengeksekusi melakukan tumpukan nampan, sehingga
untuk berbicara, mulai mendapatkan rendah dan lebih rendah.
Dan inilah yang kemudian, secara singkat, menjelaskan mengapa, ketika Anda menelepon kubus -
atau Anda menelepon kenaikan -
Anda lewat di salinan nilai.
Dan apa artinya pictorially adalah bahwa Anda benar-benar menulis
nomor 1 di bagian lain dari memori, perubahan bahwa 1 sampai 2, dalam kasus
increment -
atau ke 8, dalam kasus kubus -
dan kemudian membuang memori yang pergi segera setelah kenaikan atau kubus
Fungsi kembali.
>> Pertanyaan.
[Tak terdengar]
DAVID J. Malan: Dimana - variabel global disimpan dalam apa yang
saat ini disebut data diinisialisasi atau data uninitialized.
Bedanya ini, jika Anda memiliki variabel global, dan Anda menetapkan
segera nilai dengan tanda sama, itu berakhir di atas sana.
Dan jika Anda hanya mengatakan int x koma dengan tidak ada nilai, itu berakhir sedikit
lebih rendah dalam RAM hanya dengan konvensi.
Pertanyaan lain.
Baiklah.
>> Jadi gambar ini akan datang kembali seperti yang kita dapatkan lebih kuat dengan apa yang bisa kita lakukan
dengan komputer.
Tapi untuk saat ini, mari kita intro singkat untuk kriptografi, jenis tertentu
kriptografi yang tidak menyelesaikan semua masalah di dunia tetapi tidak memecahkan
beberapa dari mereka.
Dalam hal ini di sini, kita memiliki sesuatu yang disebut kriptografi kunci rahasia.
Dan kriptografi kunci rahasia, seperti namanya, berasal keamanan
dari rahasia.
Jadi misalnya, jika Anda sudah kembali di sekolah dasar dan Anda melewati
sedikit surat cinta rahasia untuk anak laki-laki atau perempuan Anda menghancurkan pada - jika Anda
ingin lulus bahwa melalui penonton, Anda mungkin tidak akan menulis
seperti catatan dalam bahasa Inggris atau apa pun bahasa asli Anda, melainkan, Anda
mungkin mengenkripsi itu.
Atau Anda mungkin hanya mengirim pesan teks hari ini.
Tapi Anda mungkin benar-benar melewati mereka catatan seluruh kelas.
Dan untuk melakukan hal ini dengan aman, sedemikian rupa sehingga Anda teman dan guru
tidak tahu apa yang Anda tulis, Anda mungkin datang dengan cukup sederhana
algoritma -
muda meskipun Anda mungkin -
hanya berebut kata-kata.
Jadi alih-alih menulis A, Anda mungkin menulis B. Daripada B, Anda mungkin menulis
C. Alih-alih C, Anda mungkin menulis D, dan sebagainya.
Atau Anda bisa datang dengan terjemahan yang lebih canggih dari surat
untuk huruf yang berbeda.
Tapi menangkap adalah anak laki-laki atau perempuan kepada siapa Anda mengirim catatan ini perlu
tahu sesuatu.
Yang adalah apa, jelas?
Seperti, apa rahasia Anda.
Seperti, apa itu pemetaan antara As dan B dan C dan Ds?
Apakah itu hanya menambahkan satu, sehingga untuk berbicara, untuk masing-masing huruf untuk pergi dari
A ke B, B ke C?
Apakah lebih kompleks dari itu?
Jadi, Anda dan menghancurkan Anda perlu memiliki informasi rahasia.
Tapi ada semacam catch-22 di sini.
Jika ini adalah pertama kalinya Anda mengirimkan surat cinta melalui
kelas, bagaimana adalah bahwa laki-laki atau perempuan akan tahu apa rahasia bahkan ini?
Jadi kunci rahasia kripto tidak memecahkan semua masalah dunia.
Dan sebenarnya ada hubungan yang kita akan kembali ke arah
semester akhir.
>> Demikian pula, memiliki satupun dari kita mungkin pernah mengirimkan -
sama, jangan kebanyakan dari kita tidak tahu seseorang yang bekerja, misalnya, pada
Amazon.com.
Namun, banyak dari kita mungkin membeli barang-barang di Amazon.com.
Dan kita sudah diajarkan untuk mengasumsikan bahwa e-commerce
transaksi yang aman.
Benar?
URL ini mungkin mengatakan https.
Ada mungkin ikon gembok konyol kecil di suatu tempat.
Ada beberapa jenis kriptografi mengamankan informasi kartu kredit Anda
antara Anda dan Amazon.com.
Namun, jika kriptografi melibatkan mengetahui beberapa rahasia, namun saya tidak
tahu siapa di Amazon, dan saya sudah pasti tidak mengatur apapun
rahasia dengan seseorang di Amazon, bagaimana komputer saya atau browser saya melakukan hal ini?
Nah, ternyata ada jenis lain sama sekali kriptografi yang memecahkan
masalah itu.
Tapi untuk saat ini, kita akan fokus pada yang sederhana, di mana Anda dapat mengatur dalam
maju untuk mengetahui beberapa rahasia, seperti ditambah 1 atau beberapa pemetaan antara As dan B.
>> Dan proses kriptografi umumnya melibatkan ini.
Anda memiliki beberapa teks biasa, digambarkan di sini di sebelah kiri.
Anda menjalankannya melalui beberapa jenis algoritma atau prosedur
untuk mengenkripsi itu.
Mungkin itu hanya A menjadi B, B menjadi C. Dan kemudian Anda berakhir dengan
cipher teks.
Sementara itu, setelah menghancurkan Anda menerima catatan rahasia, ia harus kemudian
mendekripsi dengan umumnya membalikkan algoritma yang sehingga untuk mendapatkan
kembali teks biasa.
Sekarang ada inkarnasi fisik ini.
Sebagai contoh, ini adalah sebuah cincin decoder rahasia kecil.
Dan ini adalah sebuah cincin dalam arti bahwa ada dua cepat di sini.
Di pinggiran luar dari hal ini, ada huruf A sampai Z,
meskipun mereka berada di urutan acak.
Dan di dalam, sebenarnya ada beberapa nomor, sehingga dengan ini
cincin, Anda dapat mengubah jenis luar tapi tidak dalam dalam rangka untuk berbaris
angka dengan huruf.
Dan dalam klip Anda akan melihat - beberapa di antaranya Anda mungkin telah melihat 24/7
sekitar musim Natal dari film berjudul A Christmas Story.
Anda akan melihat bahwa Ralphie kecil itu begitu bersemangat untuk mencari tahu apa yatim sedikit
Pesan rahasia Annie adalah kepadanya bahwa telah dikomunikasikan, saya pikir, dalam
membentuk pesan numerik pada kotak serial.
Dan Anda harus mengumpulkan semua kartu kecil yang datang
dalam kotak sereal.
Anda harus mengirimkan mereka masuk
Anda harus mendapatkan kembali cincin decoder rahasia, sehingga Anda akhirnya dapat mencari
apa pemetaan antara huruf dan angka,
atau surat dan surat-surat.
Jadi saya memberikan ini klip singkat dari A Christmas Story untuk memotivasi pset 2 dan
kami diskusi, suatu saat, array.
Jadi di sini kita memiliki Ralphie.
>> [PEMUTARAN VIDEO]
-Jadilah itu diketahui segala-galanya bahwa Ralph Parker dengan ini menunjuk
anggota dari Lingkaran Orphan Annie Little Secret dan berhak atas semua
penghargaan dan manfaat yang terjadi dalamnya.
-Signed Orphan, Annie kecil.
Ditandatangani, Pierre Andre!
Dalam tinta!
Honors dan manfaat, sudah pada usia sembilan.
Ayo, mari kita dengan itu.
Aku tidak butuh semua yang jazz tentang penyelundup dan bajak laut.
Dengar-besok malam untuk petualangan penutup dari The Black
Pirate Ship.
Sekarang saatnya untuk pesan rahasia Annie untuk Anda anggota
dari Lingkaran Rahasia.
Ingat, anak-anak, hanya anggota dari Lingkaran Rahasia Annie bisa decode
Annie rahasia pesan.
Ingat, Annie tergantung pada Anda.
Set pin Anda ke B2.
Berikut adalah pesan.
12, 11 -
-Saya dalam pertemuan rahasia pertama saya.
-14, 11, 18, 16 -
-Pierre berada di malam suara besar.
Saya bisa mengatakan bahwa pesan malam ini benar-benar penting.
-3, 25.
Itulah pesan dari Annie sendiri.
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.
-Oh, ayolah, Ralphie.
Aku harus pergi.
-Aku akan segera turun, ma.
-Gee jagoan.
-T, O. Pastikan untuk.
Pastikan untuk apa?
Apa Sedikit Orphan Annie coba katakan?
Pastikan untuk apa?
-Ralphie!
Randy harus pergi.
Tolong keluar?
-Baiklah, ma.
Aku akan segera keluar.
-Aku semakin dekat sekarang.
Ketegangan sangat mengerikan.
Apa itu?
Nasib planet yang hang dalam keseimbangan.
-Ralphie!
Randy yang harus pergi.
-Aku akan segera keluar, menangis dengan suara keras.
-Gee, hampir sampai.
Jemariku terbang.
Pikiranku adalah perangkap baja.
Setiap pori bergetar.
Itu hampir jelas.
Ya, ya, ya, ya.
-Pastikan untuk minum Ovaltine Anda.
Ovaltine?
Sebuah iklan payah?
Bangsat.
[END PEMUTARAN VIDEO]
>> DAVID J. Malan: Jadi ada yang kita miliki kriptografi.
Jadi bagaimana di komputer kita bisa pergi tentang pelaksanaan atau
mewakili hal-hal seperti ini?
Nah, kita membutuhkan suatu cara untuk mengekspresikan diri kita sedikit lebih fleksibel daripada
variabel kami sejauh ini telah memungkinkan.
Kami sudah ints.
Kami sudah chars.
Kami sudah mengapung dan ganda dan beberapa orang lainnya.
Tetapi mereka adalah potongan individu dari memori yang tidak benar-benar memungkinkan kita untuk
mengungkapkan hal-hal seperti kata-kata dan kalimat dan frase.
Memang, kami telah disebut string seperti hal.
Tapi kami berjanji bahwa ini benar-benar hanya penyederhanaan dalam CS50
perpustakaan yang kita berniat untuk mengupas.
>> Dan jadi mari kita mulai melakukannya di sini.
Biarkan aku pergi ke depan dan membuka file -
semua file yang tersedia secara online yang biasa -
disebut array.c untuk memecahkan masalah yang tidak terkait dengan string tapi itu cat
gambar di sini tentang bagaimana kita bisa menggunakan sesuatu yang disebut array.
Array adalah tipe data.
Ini adalah jenis variabel, macam, yang memiliki beberapa jenis data yang lebih kecil
dalamnya kembali untuk kembali ke kembali ke belakang.
Jadi misalnya, jika kita ingin menulis sebuah program kecil yang memberikan Anda
kuis rata-rata untuk kursus seperti 50 yang memiliki dua kuis, Anda sangat bisa dengan mudah
menulis program ini - didasarkan bahkan pada beberapa materi minggu lalu -
dengan menggunakan GetInt dan beberapa variabel.
Int quiz1, int quiz2, dan itu cukup sederhana.
Ini mungkin 10, 20 baris kode, max, untuk melaksanakan program yang meminta
pengguna untuk dua nilai kuis dan kemudian menghitung rata-rata dengan menambahkannya
bersama-sama, membagi dua, dan kemudian mencetak hasilnya.
Kita mungkin bisa melakukan itu cukup mudah sekarang setelah
beberapa jumlah menit.
>> Tapi masalahnya adalah bahwa anggaplah bahwa 50 memiliki tiga atau empat kuis.
Misalkan Anda ingin menggunakan program yang sama untuk kelas yang memiliki
kuis mingguan.
Pikirkan tentang kelas yang mingguan kuis.
Jika ada seperti 16 atau lebih minggu dalam satu semester, sekarang Anda memiliki 16 variabel -
int quiz1, int quiz2, int quiz3, int quiz4.
Segera setelah Anda mulai melihat redundansi ini, copy dan paste
kode, harus mulai untuk membuat Anda berharap ada cara yang lebih baik.
Dan untungnya, karena array, ada.
Jadi mari kita lakukan ini.
Pertama, biarkan saya memperkenalkan hal yang sangat sederhana bahwa kita sudah tidak digunakan sejauh ini,
tetapi Anda akan melihat kadang-kadang dalam kode.
Ini adalah apa yang umumnya disebut konstanta.
Jadi itu adalah konstan dalam arti bahwa nilai ini tidak pernah berubah.
Konvensi manusia saat membuat sebuah konstanta adalah dengan menggunakan modal semua
surat, hanya supaya benar-benar menonjol dalam kode Anda.
Dan kata kunci khusus yang Anda gunakan dalam C # define.
Jadi jika Anda mengatakan # define, lalu spasi, maka kata yang ingin Anda gunakan untuk
konstan Namanya, dan kemudian nilai konstan.
Jadi pemberitahuan, ini berbeda dengan menugaskan sesuatu untuk variabel.
Tidak ada tanda sama.
Ada titik koma ada.
Ini adalah apa yang umumnya dikenal sebagai direktif preprocessor, tapi lebih pada
itu di lain waktu.
>> Untuk saat ini, ini menciptakan nilai tidak berubah disebut Kuis aktual yang
nilai numerik adalah 2.
Jadi di mana pun Anda melihat kuis, kuis, kuis seluruh file ini, itu
hanya nomor 2.
Sekarang, jika saya melihat utama sekarang, mari kita lihat bagaimana ini bekerja.
Pada awalnya, tampak sedikit samar.
Tapi itu semua barang dari satu minggu.
Meminta pengguna untuk nilai.
Bagaimana kita melakukan ini?
Nah, sejalan 22 -
ini benar-benar bagian dari nakal -
Saya menyatakan pelampung, tapi tidak hanya pelampung tunggal.
Saya menyatakan, lebih tepatnya, array nilai floating point.
Variabel itu akan disebut kelas, seperti yang tersirat di sini.
Tapi satu-satunya sintaks baru kemudian orang-kurung siku, fakta
bahwa saya telah mengatakan nilai mengambang dan kemudian braket terbuka dan kemudian nomor.
Perhatikan, jika ini adalah sebuah konstanta, ini hanya seperti yang kita lakukan ini.
Ini berarti komputer hey, beri aku dua mengapung, dan mari kita bersama-sebut
mereka nilai.
Hal ini berbeda dengan proses yang jauh lebih membosankan seperti ini.
Mengapung Grade1, mengambang grade2, dan sebagainya.
Jadi array memungkinkan kita untuk menerapkan ide ini, tetapi jauh lebih sedikit messily, di
sedemikian rupa sehingga kita dapat menulis satu baris kode bukan, katakanlah, 16 untuk 16
minggu semester.
Jadi saya tidak mau keras-kode 2 karena jika Anda berpikir tentang hal ini sekarang
logis - kira tahun depan CS50 perubahan 3 kuis gantinya.
Dan aku punya nomor 2 di sini.
Aku punya nomor 2 di sini.
Ini menjadi sangat membosankan dan sangat mudah untuk mengacaukan dan sengaja mengubah
satu nilai 3 dan kehilangan beberapa nilai lain 2.
Jadi aku akan pergi bukan abstrak ini dan menggunakan konstan yang, sebagai yang
nama menyarankan, tidak pernah berubah.
Dan sekarang, tidak peduli apakah kami memiliki berbagai kuis tahun ini atau berikutnya, saya
hanya perlu mengubahnya di satu tempat, di sini di atas.
>> Jadi itu saja konstan.
Sementara itu, fitur konseptual baru adalah bahwa dari array.
Jadi tanda kurung siku memberikan saya ini banyak mengapung dan membuat saya kolektif
menyebut mereka nilai di sini.
Jadi sekarang mari kita lihat apa yang akan saya lakukan.
Di sini, di baris 24 adalah awal dari untuk loop.
Ini benar-benar tidak ada yang mewah.
Ini hanya menggunakan kuis bukan nomor keras-kode.
Tapi tidak ada intelektual yang berbeda ada dari minggu lalu.
Ini hanya printf.
Jadi printf ("kuis nomor% d dari% d") karena saya hanya ingin mencetak memberikan kuis
nomor satu dari dua dan kemudian dua dari dua.
Jadi ini adalah murni sebuah hal estetika.
Tapi bagian yang menarik sekarang ini sejalan 27.
Dalam rangka untuk mengisi salah satu dari dua penampung dengan floating-point
nilai, Anda lagi menggunakan tanda kurung siku.
Dalam kasus ini, saya menggunakan i karena ini untuk loop telah dimulai dengan i menyamai
apa nilai, rupanya?
0.
>> Jadi pada iterasi pertama dari loop ini, itu seolah-olah saya
menulis ini dalam kode.
Namun pada iterasi kedua lingkaran ini, itu seolah-olah saya
menulis ini dalam kode saya.
Tapi fakta bahwa saya menggunakan variabel sempurna karena, sebagai nama
menunjukkan, itu bervariasi nilainya pada setiap iterasi.
Jadi saya mengisi array ini satu tempat pada suatu waktu.
Apa array ini terlihat seperti?
Nah, alasan saya menarik ini persegi panjang super sederhana di layar di sini
sebelumnya adalah untuk alasan ini.
Array hanyalah sepotong memori diikuti oleh sepotong memori,
diikuti oleh sepotong memori, dan sebagainya.
Jadi, jika array saya adalah ukuran 2, dalam hal ini di sini, semua saya akan melakukan dengan
mengetik dalam skor kuis saya, seperti di sini.
Aku punya 100 yang satu ini.
Dan kemudian aku punya 99 yang satu ini.
Maka memori ini bahkan mungkin tidak digunakan karena aku hanya meminta
komputer untuk berbagai ukuran 2.
Mereka kotak masih ada.
Benar?
Anda masih memiliki dua gigabyte RAM, bahkan jika Anda hanya
meminta dua mengapung.
Jadi ide di balik array adalah bahwa komputer hanya mengambil sepotong memori
dan kemudian pembagian adil untul potongan kecil kembali untuk kembali ke kembali ke belakang.
Dan sehingga semua array adalah.
Ini sepotong bersebelahan memori, yang di dalamnya Anda bisa meletakkan segala sesuatu.
>> Sekarang ini terjadi untuk kemudian melakukan beberapa aritmatika membosankan.
Jika saya scroll ke bawah sini, ini adalah di mana saya kemudian iterate atas array.
Saya datang dengan penjumlahan dari semua nilai dalam array.
Dan kemudian saya menggunakan fungsi putaran di sini untuk benar-benar melakukan
jumlah dibagi dengan kuis.
Tapi biarkan aku melambaikan tanganku pada saat itu sebagai semacam aritmatika cukup untuk saat ini.
Tapi semua itu lakukan bagi saya pada akhirnya adalah menghitung rata-rata.
Jadi pertama kuis ditambah kuis kedua, dibagi 2, dan kemudian mencetak
keluar sebagai int.
>> Tapi mari kita sekarang transisi ke contoh yang berbeda yang disebut string1,
yang melukiskan gambaran serupa tapi string menggunakan.
Biarkan aku pergi ke depan dan menyederhanakan ini untuk sesaat.
Dan memaafkan lekukan untuk saat ini.
Perhatikan pada baris 19 dari contoh ini, saya mendapatkan string dari pengguna.
Tapi perhatikan apa yang saya lakukan selanjutnya dalam garis 22 dan seterusnya.
Aku benar-benar iterasi dari saya sampai - dan ini adalah trik baru -
strlen, string panjang.
Ini adalah fungsi yang datang dengan C bahwa jika Anda lulus string, ia memberitahu
Anda berapa banyak karakter dalam string tersebut.
Itu saja.
Fakta bahwa itu strlen bukannya panjang string hanya karena
lebih ringkas.
30 tahun yang lalu, orang suka menulis hal-hal sesingkat mungkin.
Jadi kita terus konvensi itu di sini.
i + + hanya berarti kenaikan i di setiap iterasi.
Dan sekarang perhatikan ini, yang benar-benar menarik.
Jadi di baris 24, saya katakan komputer, memberi saya karakter, delapan
bit, dan menyebutnya c.
Tapi apa ini di sisi kanan katakan?
Dalam bahasa Inggris, apa yang mewakili?
[Tak terdengar]
DAVID J. Malan: Tepat.
Berikan karakter pertama dalam array.
Atau lebih umum, memberikan karakter ke-i dalam array.
Dan menyadari itu penting sekarang bahwa sebagai ilmuwan komputer, kami benar-benar
menghitung dari 0.
Anda tidak memiliki kebijaksanaan sekarang untuk mulai melakukan hal ini.
Sekarang Anda harus berperilaku sesuai dengan harapan komputer dan
dihitung mulai dari nol karena [0] akan menjadi yang pertama
karakter dalam string.
[1] akan menjadi yang kedua.
[2] akan menjadi yang ketiga, dan sebagainya.
Jadi program ini, jika saya compile - ini, sekali lagi, string1.
>> Jadi membuat string1.
Dan sekarang saya menjalankan string1 di jendela terminal saya.
Ini menunggu masukan, jadi saya akan mengetik, katakanlah, David.
Enter.
Dan sekarang mencetak DAVID semua pada baris yang berbeda karena
perhatikan apa yang saya lakukan.
Saya mencetak satu karakter pada satu waktu.
Sekarang kita tidak akan pergi ke detail hari ini.
Tapi aku dihapus sesaat lalu cek ini di sini.
Ternyata bahwa jika pengguna mengalami gangguan, permusuhan, atau hanya
bingung, Anda benar-benar dapat gagal untuk memberikan string dengan panjang tertentu.
Jika Anda menekan tombol yang salah pada keyboard, Anda mungkin memberikan
ada string sama sekali.
Atau jika Anda berbahaya, Anda dapat mencoba untuk menyisipkan di bernilai gigabyte terhadap suatu
esai untuk mengisi string ini.
Dan jika komputer kehabisan memori, ternyata kita akan
untuk mendapatkan kembali nilai ini khusus yang disebut null.
Jadi untuk saat ini, hanya tahu bahwa ada nilai ini khusus yang disebut nol bahwa
akan memungkinkan kami untuk memeriksa ketika kita keluar dari memori, antara lain.
>> Tapi kalau aku membuka sekarang string2, melihat satu perbedaan di sini.
Perhatikan satu perbedaan di sini dengan string2.
Dengan string2, ini untuk loop adalah sedikit berbeda.
Biarkan saya menghapus nulls sehingga kita bisa berbicara dengan orang lain waktu.
Tapi apa yang berbeda tentang untuk loop saat ini?
Dan aku bisa kembali ke contoh sebelumnya.
Jadi itulah versi dua.
Ini adalah versi satu.
Satu, dua, satu dua.
Jadi panggilan strlen mana?
Itu di bagian pertama dari untuk loop.
Setiap pikiran tentang mengapa aku melakukan ini?
Ya.
[Tak terdengar]
DAVID J. Malan: Jadi kita tidak memanggil fungsi setiap saat.
Tepat.
Ingat dari untuk loop yang mereka super sederhana sekali Anda semacam
memahami bahwa ini adalah inisialisasi, yang
Kondisi, dan pembaruan.
Masalahnya adalah bahwa kondisi yang terjadi pada setiap
iterasi dari loop.
Dan sehingga dalam contoh di sini, apa yang buruk tentang fakta
bahwa ini adalah kondisi saya?
Anda menelepon strlen lagi dan lagi dan lagi.
Tapi begitu aku sudah mengetik di DAVID, panjang string yang lima.
Dan itu tidak akan berubah pada setiap iterasi dari loop karena
string yang masih D-A-V-I-D. Jadi ini adalah petunjuk pada apa yang akan menjadi
semakin penting ide yang dikenal sebagai keputusan desain, di mana - hanya tidak
membuat komputer melakukan pekerjaan yang tidak perlu.
>> Sekarang hanya sebagai sneak preview dari pset 2, pset 2 dalam edisi standar
akan menantang Anda untuk benar-benar menerapkan beberapa jumlah cipher, beberapa
jumlah algoritma enkripsi, sehingga Anda berdua dapat mengenkripsi dan mendekripsi
pesan rahasia, banyak seperti Ralphie orang di sana diterjemahkan.
Dalam edisi hacker dari pset 2, kita akan pergi sedikit lebih jauh.
Kami akan menyerahkan file dari sebuah sistem komputer yang sebenarnya yang berisi
Seluruh sekelompok username dan password terenkripsi yang sebenarnya, dan tantangan
untuk edisi hacker akan menjadi untuk mengcrack password dan angka
apa kriptografi atau apa rahasia yang digunakan untuk benar-benar
menghasilkan orang password.
Dan kita akan melakukan hal ini dengan menggunakan fitur baru di sini C bahwa saya akan memberikan
Anda hanya demo, yang dikenal sebagai argumen baris perintah.
>> Jadi ternyata, karena beberapa dari Anda mungkin telah melihat dalam bagian atau dalam buku teks,
utama tidak selalu harus kekosongan dalam tanda kurung.
Ternyata utama juga dapat ditulis seperti ini, dengan dua argumen,
argc dan argv, di mana argc adalah jumlah kata yang Anda ketik setelah
program nama pada baris perintah Anda.
Dan argv adalah kata-kata yang sebenarnya.
Dan sebagai tanda kurung siku ada menunjukkan, argv tampaknya array.
Ini akan menjadi string setelah string setelah string dalam memori.
Jadi apa yang akan kita dapat lakukan, dimulai dengan pset 2, adalah
sesuatu seperti ini.
Jika saya membuat argv1, yang merupakan contoh kita akan kembali ke pada hari Senin, dan menjalankan
itu, melihat bahwa ia tampaknya tidak melakukan apa-apa belum.
Itu hanya mencetak namanya sendiri.
Tapi kalau aku mengatakan selamat tinggal kelas, perhatikan bahwa program ini ternyata iterates
atas setiap kata-kata yang diketik pada prompt.
Dan cara dimana kita akan mendapatkan akses ke kata-kata bahwa pengguna memiliki
diketik pada prompt adalah dengan mengubah utama, mulai akhir pekan ini, dari int
main (void) ke int main (argc, argv).
Dan dengan demikian akan lahir argumen baris perintah.
Dan sekali Anda mendapatkan benar-benar canggih ini, Anda akan mampu menulis
benar-benar trippy program, seperti ini satu di sini, yang berjalan di atas dan di luar
beberapa fungsi yang sudah kita lakukan sejauh ini, tetapi semua cukup kuat.
>> Jadi kita akan meninggalkan ini dengan ini di layar.
Dan kita akan melihat Anda pada hari Senin.