>> [MUSIC PLAYING]
>> SPEAKER 1: Ini adalah CS50 dan ini adalah awal dari dua minggu.
Jadi, mari kita terjun langsung menjadi sesuatu yang adalah kereta, sehingga untuk berbicara.
Jadi, di sini adalah CS50 IDE dan saya sudah berhenti di muka ini screen-- sialan
saya t.
Peringatan spoiler.
Baiklah.
Saya sudah berhenti layar ini di sini, yang memiliki program yang sangat sederhana.
Jika kita scroll ke bawah, yang paling ini hanya komentar,
tapi di sini di garis 13 melalui 17 kita memiliki sebuah program.
>> Ini sintaksis yang valid, yang berarti jika Saya kompilasi, itu akan mengkompilasi dan menjalankan,
tapi itu kereta.
Program ini mengklaim di komentar di bagian atas yang harus mencetak 10,
tapi tidak.
Dan berdasarkan pengalaman Anda, atau segera menjadi pengalaman dengan C,
dapat Anda secara logis membedakan mengapa hal ini, pada kenyataannya, Buggy?
Ya?
AUDIENCE: It goes dari nol sampai 10.
Itu 11 iterasi.
SPEAKER 1: Ya.
Jadi, itu akan dari nol melalui dan sama dengan 10,
yang tentu saja 11 iterasi.
Jadi, itu akan cetak, memang, 11.
Jadi, konvensi ilmu komputer dalam kebanyakan bahasa pemrograman
adalah, memang, hanya untuk mulai menghitung dari nol,
tetapi menghitung sampai tetapi tidak melalui nilai yang Anda benar-benar peduli.
>> Sekarang, ini adalah salah satu hal yang Dibutuhkan sedikit untuk membiasakan digunakan untuk
dan bahkan Scratch, dirancang seperti itu untuk non programmer atau non komputer
ilmuwan dan untuk anak-anak sebagian besar, dirancang untuk memiliki
Anda mulai menghitung umumnya pada satu.
Dan itu baik-baik saja.
Anda benar-benar dapat mulai menghitung di salah satu jika itu lebih nyaman.
Dan menghitung sampai dan melalui 10, tapi Anda akan menyadari sangat minggu ini
dan di luar itu hanya begitu banyak hal di pemrograman
menganggap bahwa 0 adalah pertama digit dengan yang Anda menghitung,
bahwa Anda akan merasa lebih mudah hanya untuk masuk ke kebiasaan ini mulai
dari nol dan menghitung sampai nilai Anda peduli sekarang dari
mendapatkan pergi.
>> Jadi, yang telah diperbaiki itu.
Kami mengubah kurang dari atau sama dengan hanya kurang dari.
Mari kita lihat contoh kedua di sini.
>> Jadi, program ini juga mengklaim dalam Surat komentar di bagian atas yang harus mencetak
sepuluh bintang, tapi tidak.
Apa bug di sini?
>> Jadi, maaf-UMPC dan, mari kita menjadi jelas.
10 bintang.
Satu per baris, tapi tidak.
Jadi, sebenarnya, biarkan aku pergi ke depan dan kompilasi ini salah karena itu sedikit kurang
jelas berdasarkan keterangan itu.
Biarkan aku masuk ke direktori sumber kami.
Membuat kereta satu titik garis miring, kereta satu.
OK, saya melihat 11, yang masih bermasalah,
tapi mereka juga semua dalam satu baris.
Apa masalah di sini?
Ya.
AUDIENCE: [tidak terdengar].
SPEAKER 1: Ya.
Jadi ini adalah kehalusan yang Anda mungkin ingat saya membuat penyebutan singkat dari.
Meskipun semuanya terlihat cukup, dan itu baik menjorok,
dan jenis terlihat Scratch-seperti di garis 16 dan 17 adalah,
memang, menjorok di bawah itu untuk loop.
Itu tidak penting.
Komputer tidak mengetahui atau melihat ruang putih.
Ruang putih hanya untuk kita manusia, Gaya.
Komputer tidak tahu kapan Anda memiliki kurung kurawal, yang akan, memang,
memperbaiki masalah ini.
>> Jadi, jika kita benar-benar pergi dan eksplisit dimasukkan ke dalam kurung kurawal ini
yang akan memperbaiki masalah ini dengan membuat jelas untuk compiler
bahwa saya benar-benar ingin mengeksekusi dua baris kode lagi,
dan lagi, dan lagi.
Tapi apa penjelasan mendasar?
Benar?
Kami tidak ketat perlu keriting kawat gigi sepanjang waktu,
meskipun itu mungkin terbaik praktek untuk masuk ke kebiasaan itu pula
meskipun itu menambahkan dua karakter untuk kode Anda. mengapa?
>> AUDIENCE: [tidak terdengar]?
SPEAKER 1: Ya jadi itu solusi lain sama sekali.
Benar?
Terutama jika pada pandangan pertama Anda tidak benar-benar menghargai apa yang terjadi.
Nah, pasti kita bisa hanya melakukan dua hal sekaligus
dan hanya menghindari masalah sama sekali.
Dan itu bagus, tapi sekarang, untuk tujuan hari ini, apa
adalah penjelasan untuk bug?
Mengapa semua orang bintang pada satu baris?
Ya?
>> AUDIENCE: Tampaknya bahwa jika Anda memiliki satu baris kode,
Anda dapat melakukannya tanpa mereka.
SPEAKER 1: Tepat.
Ini hanya sebuah konvensi manusia.
Orang menyadari bahwa itu adalah sedikit mengganggu atau membosankan
harus menempatkan kurung kurawal semua dari waktu jika semua yang Anda ingin lakukan
adalah mengeksekusi satu baris kode.
Jadi, manusia memutuskan beberapa waktu lalu bahwa itu baik-baik saja.
Jika Anda ingin menempatkan semua lingkaran Anda pada hanya satu baris seperti ini,
itu baik dengan single titik koma di akhir.
Tapi Anda hanya dapat melakukan satu seperti line tanpa kurung kurawal.
>> Jadi, ketika panduan gaya CS50 seperti yang akan mengarahkan Anda ke,
Anda akan melihat bahwa secara umum itu adalah kebiasaan yang baik
untuk masuk ke ini sampai Anda menyimpang cukup nyaman
dari jenis-jenis konvensi dan melakukan hal Anda sendiri.
Selama Anda diri yang konsisten.
Dan kita akan berbicara lebih banyak tentang gaya sedikit kemudian hari.
>> Jadi, biarkan aku membuka satu program lainnya.
Tentu saja, kita harus memperbaikinya 10 juga.
Biarkan aku pergi ke depan dan menulis nyata Program cepat yang saya akan menelepon,
katakanlah, lingkaran dot C. Jadi, lingkaran dot C. Dan dalam lingkaran dot C Aku akan memiliki,
termasuk standar I / O dot H int void main.
Dan sekarang mari kita lakukan, memang, satu lingkaran.
Jadi, 4 int saya mendapat nol.
Saya kurang dari, katakanlah, 50.
Saya ditambah, plus.
Dan kemudian di sini mari kita pergi ke depan dan jangan mencetak F.
Dan kemudian saya ingin mencetak saya dan baris baru, titik koma.
>> Dan ini harus mencetak semua nomor dari nol hingga 50?
Beberapa kepala mengangguk.
Beberapa nos.
Apa bug sudah?
Apa kesalahan mudah saya membuat?
Ya.
>> AUDIENCE: [tidak terdengar].
SPEAKER 1: Ya.
Jadi meskipun tampak seperti ini adalah apa yang saya ingin,
ingat bahwa saya juga hanya karakter ASCII.
>> Jadi, jika saya mengatakan, cetak "I."
Ini benar-benar akan untuk mencetak I. Jadi, jika saya
ingin plug-in placeholder nilai saya benar-benar perlu melakukan ini
dan kemudian plug-dalam nilai saya secara dinamis.
Kalau tidak aku hanya akan mendapatkan 50 I di layar.
>> Jadi, biarkan aku pergi ke depan dan membuat lingkaran ini, menjalankannya,
dan, memang, kita memiliki semua cara melalui 49.
Dan jika saya gulir kembali kali saya melihat angka nol di awal.
>> Nah, bagaimana jika aku agak mengacaukan?
Bagaimana jika saya melakukan ini?
Hanya karena aku tidak berpikir.
Apa program ini.
Setelah kembali dikompilasi dan dijalankan, akan melakukan secara logis?
>> AUDIENCE: Tidak ada.
>> SPEAKER 1: Tidak ada.
Kenapa itu?
>> AUDIENCE: Aku dirancang untuk nol.
Jadi, kondisi salah.
SPEAKER 1: Ya, persis.
Semua kode benar, sintaksis.
Hal ini akan mengkompilasi, ini Kode akan berjalan, tapi tidak
akan melakukan sesuatu yang berguna karena saya menginisialisasi saya ke nol.
Kami kemudian memeriksa, adalah saya lebih besar dari 50?
Jelas, tidak ada, itu tidak.
Jadi loop tidak pernah mengeksekusi sama sekali.
>> Bagaimana jika kita melakukan sesuatu sedikit lebih sembrono?
Jadi, bagaimana jika kita lakukan seperti int saya mendapat nol.
Dan sekarang saya menggunakan sementara lingkaran, yang kondisi lain.
Dan sementara saya katakan, sementara saya lebih besar dari atau sama dengan nol, dan kemudian di sini saya
pergi ke depan dan menyimpan file, membuat lingkaran.
Dan saya akan menjalankannya.
Apa yang saya akan melihat ini waktu dengan loop sementara?
Ya.
>> AUDIENCE: Sebuah loop tak terbatas?
>> SPEAKER 1: Sebuah loop tak terbatas?
Ya, dan mengapa?
AUDIENCE: Karena itu selalu nol.
SPEAKER 1: Ya.
Jadi, saya diinisialisasi sebagai nol.
Tentu saja aku selalu lebih besar dari atau sama dengan 0 sebagai hasilnya.
Jadi, aku hanya akan melihat ini jauh.
Dan sekarang, ini telah datang sekali atau dua kali untuk kepala kursus ini.
Apa yang terjadi ketika Anda memiliki loop tak terbatas?
>> AUDIENCE: Kontrol C.
SPEAKER 1: Ya.
Jadi Kontrol C akhirnya akan merespon.
Sayangnya, kita sudah dicetak jutaan dan jutaan nol sudah
dan komputer memiliki jenis mendapat depanku.
Jadi, itu akan mengabaikan saya untuk sedikit.
Tetapi jika Anda hanya tekan Control C beberapa kali pada keyboard Mac atau PC Anda,
akhirnya harus, memang, mengakhiri.
Dan jika tidak, kami akan menunjukkan beberapa teknik sebelum lama di mana Anda
benar-benar dapat membunuh secara paksa program, seperti pada Windows dan Mac OS,
jika perlu.
Tapi mari kita mencoba sesuatu yang lain.
Mari kita sebenarnya kenaikan I. Apakah ini masih akan menjadi tak terbatas?
Biarkan aku menjalankan ini.
Dan sekarang Anda bisa jenis melihat apa yang terjadi.
Ini juga merupakan loop tak terbatas.
Tapi ini adalah sedikit pertanyaan jebakan.
Apakah ini akan mencetak angka selamanya?
>> AUDIENCE: No.
SPEAKER 1: No.
Mengapa?
Saya mendengar beberapa nos di sini.
Someone-- Ya.
AUDIENCE: Anda tidak memiliki cukup bit untuk benar-benar terus.
SPEAKER 1: Baiklah.
Jadi saya tidak punya cukup bit untuk terus berjalan.
Jadi, apa yang akan terjadi?
Itu hanya akan berhenti?
>> AUDIENCE: Pada beberapa titik itu akan menutup the--
SPEAKER 1: Ini akan menutup loop turun, tapi mengapa?
Apa yang akan terjadi pada akhir batas-batasnya?
Ya?
AUDIENCE: Ini akan siklus kembali ke angka negatif.
SPEAKER 1: Untuk angka negatif, atau jika kita hanya mengobati positif,
nol setidaknya.
Jadi ya, benar-benar.
Ingat bahwa kita melihat terakhir kali bahwa jika Anda kenaikan bit Anda terlalu banyak kali,
dan Anda ada kedepan melimpah kapasitas int Anda
atau apa pun jenis data, Anda akan membungkus, mungkin,
dua angka negatif.
Atau jika Anda telah menentukan bahwa Anda Kisaran hanya harus positif,
yang dapat Anda lakukan, tetapi kita sudah tidak melihat yang belum,
Anda mungkin berakhir setidaknya kembali nol.
Meskipun, sebenarnya ya.
Dalam hal ini, negatif angka, dalam hal
loop akan mengakhiri karena saya tidak, pada kenyataannya,
lebih besar dari atau sama dengan nol jika itu negatif.
>> Jadi, sayangnya, bagaimana panjang akan kami harus menunggu?
Sekarang kita sampai apa, 2 juta-ish?
Kami seperti 2 miliar, kita akan harus menunggu
sampai kita benar-benar dapat melihat gejala ini.
Tapi kita bisa melihat sedikit lebih cepat, maybe-- mari kita lihat apakah kita bisa mengganggu.
Ayolah.
Bahkan menu yang muncul perlahan-lahan.
Baiklah.
Jadi, kami akan kembali ke yang lama.
Ini adalah baik time-- sialan itu, anak anjing.
>> Ini adalah waktu yang baik untuk beberapa pengumuman.
Jadi, jika Anda mungkin ingin untuk terlibat dalam YHack,
yang acara yang disponsori oleh teman-teman kita di Yale.
Dan, memang, beberapa saja yang TF di Yale yang terlibat dengan ini.
YHack adalah internasional hack-a-thon yang diselenggarakan oleh dan mengadakan
di Yale, menyatukan 1.500 seperti hacker berpikiran dan kreatif semua
seluruh dunia.
Jika ini adalah kepentingan, lihat di sini.
Jika ini terlalu singkat pada layar, lihatlah slide hari ini
untuk URL untuk yhack.org.
Jadi, juga beberapa pengumuman cepat.
Jadi, secara resmi akan mulai bagian minggu depan baik di sini dan New Haven.
Perlu diingat Anda akan mendapatkan email kemudian akhir pekan ini kemungkinan besar.
Dibutuhkan waktu yang lama untuk CS50 ke bagian,
mengingat semua orang di kelas dan semua orang bergerak di sekitar.
Dan semua Fellows Pengajaran ' jadwal juga masih memperkuat,
tetapi menantikan untuk email dan jika perlu akan, Anda dapat kembali bagian sana setelah.
>> Study.cs50.net.
Jadi, bahkan jika Anda seorang peserta konstan di bagian, menyadari bahwa hampir semua
dari sumber daya yang kami gunakan di bagian yang tersedia untuk umum di CS50
Belajar di URL ini di sini.
Jadi, jika Anda pernah ingin kembali ulasan bahan dari bagian, atau membaca ke depan,
atau Anda tidak dapat membuat beberapa minggu, menyadari bahwa sampel slide,
dan masalah, dan definisi, dan banyak lagi semua ada juga.
>> Jam kantor melanjutkan hari ini, dan besok, dan Rabu,
dan Kamis periksa saja yang website untuk jadwal.
>> Dan juga, sekarang meluncurkan hari ini adalah CS50 Diskusikan.
Jadi, jika dan ketika Anda memiliki pertanyaan untuk satu sama lain atau untuk staf saja yang,
dan umumnya bekerja pada beberapa masalah set,
menyadari bahwa Anda tidak harus harus beralih ke manusia berikutnya Anda.
Jika ada satu ada di sana, Anda bisa menjangkau kami dan teman-teman sekelas
online melalui CS50 Diskusikan.
Jadi, ini adalah diskusi papan untuk kursus,
dan menyadari bahwa ini mungkin yang terbaik
tempat untuk memulai ketika Anda memiliki pertanyaan saat di luar jam kantor
secara khusus.
>> Makan siang akan memulai minggu ini juga.
Pada Fire and Ice [Tidak terdengar] di New Haven.
Lihatlah kursus ini situs untuk RSVP.
Pertama datang, pertama melayani untuk itu.
Jika Anda tidak mendapatkan dalam minggu ini kami akan melakukan ini paling setiap hari Jumat
selama istilah.
>> OK, dan sekarang kata tentang grading.
Terutama saat kita memasuki masalah menetapkan satu, yang keluar minggu ini,
dan masalah mengatur dua dan selanjutnya.
Bagaimana kita pergi tentang evaluasi P set dan mengevaluasi kualitas daripadanya?
Jadi, itu empat sumbu yang kita gunakan dalam CS50, dan mereka empat sini.
>> Lingkup, yang menangkap pada numerik yang dasar berapa banyak dari P set
apakah Anda mengatasi.
Ini kira-kira sesuai dengan usaha, dan itu cara kita menangkap
Anda mencoba setengah P mengatur, semua P set.
Ini adalah mudah untuk mendapatkan yang sempurna skor pada jika Anda melakukannya, memang,
mencoba setiap aspek dari P set.
Jadi, ingat-ingat.
>> Kebenaran adalah persis seperti itu.
Tidak bekerja kode Anda sebagai spesifikasi dan sebagai solusi sampel staf '
menunjukkan bahwa kode Anda harus, pada kenyataannya, bekerja.
Periksa 50, jika Anda belum bertemu itu namun, dalam P menetapkan satu spesifikasi
dan akan umumnya memberikan jawaban ya / tidak
apakah kode Anda benar.
Setidaknya sejauh kita akan untuk mengevaluasi itu didasarkan pada tes
yang kita jalankan dalam program itu.
>> Desain jauh lebih subjektif.
Ini adalah seberapa baik ditulis adalah kode Anda.
Dan ini adalah sesuatu yang Anda akan mendapatkan lebih baik di waktu ke waktu,
dan itu adalah sesuatu yang kita akan memberikan umpan balik yang lebih kualitatif tentang.
Dan dengan desain saya mungkin berarti sebelum lama Anda
mungkin tergoda dalam beberapa P mengatur untuk melakukan sesuatu loopingly,
tetapi untuk memiliki mungkin tiga, atau empat, atau lima loop kedepan bersarang atau bersarang sementara
loop.
Yang umumnya harus mulai membuat Anda merasa ngeri
dan umumnya akan dianggap desain yang buruk.
Dan Anda akan mulai melihat di kelas dan dari cara kelas yang baik dalam melakukan sesuatu,
cara buruk untuk melakukan hal-hal yang mungkin semua benar, tapi tidak
tentu dirancang dengan baik.
Seperti menulis esai.
Anda mungkin dapat menempatkan kata-kata pada Halaman yang tata bahasa yang benar,
tetapi esai atau tesis mereka di hanya
benar-benar tidak koheren atau persuasif.
Dan sehingga mungkin analog di dunia tertulis buruk atau baik desain.
>> Dan gaya, juga, cukup subjektif.
Tapi setidaknya kami berharap konsistensi.
Ini adalah bagaimana cantik adalah kode Anda.
Apakah hal baik menjorok?
Apakah variabel Anda juga bernama / Apakah semua kurung dan kurung kurawal
selaras seperti yang seharusnya?
Kami memiliki panduan gaya CS50 sebagai set masalah akan mengarahkan Anda pada.
Mereka lebih nyaman adalah Selamat datang untuk menyimpang dari yang
asalkan Anda sendiri konsisten.
Dan ini juga merupakan pelajaran kami akan memperkuat di bagian.
Jadi, jika semua ini adalah sedikit cepat, menyadari set P dan bagian
akan masuk ke kedalaman lebih lama.
>> Namun umumnya kita memiliki sangat sedikit ember untuk CS50.
Skor umumnya dalam skala satu sampai tiga, atau 1-5.
Kami literally-- dan saya tidak bisa mengatakan ini cukup di minggu pertama.
Tiga baik.
Jadi, meskipun, ya, tiga lima biasanya, matematis,
mungkin 60 persen atau seperti minus D.
Tiga, pada kenyataannya, baik.
Dan, pada kenyataannya, kita berharap sebagian besar siswa di kelas
untuk memulai istilah sekitar berpasangan, dan bertiga, dan merangkak.
Mungkin tidak begitu banyak balita.
Tidak terlalu banyak yang.
Tetapi umumnya dimulai pada tempat yang manis dalam kurva
sehingga sebagai waktu berjalan, sebenarnya ada ruang untuk,
dan kesempatan untuk kemajuan atas.
Jadi, jangan menyamakan tiga dengan 60%.
Ini jauh lebih abstrak dari itu.
Rumus yang kita menghitung nilai tertimbang sebagai berikut.
Kebenaran bernilai paling.
Desain bernilai sedikit kurang.
Gaya bernilai sedikit kurang.
Dan ini umumnya menangkap jumlah waktu
yang masuk ke masing-masing mendapatkan sumbu ini tepat.
Gaya super mudah, harus super cepat,
tapi itu kebiasaan mudah untuk mendapatkan malas tentang.
Kebenaran mungkin mengambil Anda sebagian besar waktu.
Memburu beberapa mungkin bug mengambil jam tambahan atau lebih,
dan begitu, gol akhirnya menangkap itu.
Dan, sekarang kata yang lebih serius.
Sejak CS50 memiliki perbedaan, untuk lebih baik
atau buruk, menjadi mungkin lebih baik berkenalan
dengan masalah akademik kejujuran daripada kebanyakan kursus lainnya.
Dan memang, itu adalah untuk pengetahuan saya yang kami mengirim lebih banyak mahasiswa, sayangnya,
untuk tujuan disiplin setiap tahun sebagai hasilnya. Jadi,
untuk kepentingan penuh pengungkapan, mari kita bicara sebentar
tentang apa yang terjadi di CS50, dan apa yang Anda dapat dilakukan, dan apa yang Anda dapat sadar.
>> Jadi, di sini sejak 2007, ketika Aku mewarisi saja,
adalah jumlah kasus Dewan Ad.
Dewan iklan adalah disiplin Harvard tubuh, atau sekarang Honor Counsel,
yang kasus dirujuk ketika siswa melakukan sesuatu yang tentu saja itu
silabus menganggap tidak masuk akal.
Tidak ada pola yang nyata di sini, saya akan mengatakan.
Ini berfluktuasi selama tahun tetapi umumnya
ini adalah jumlah kasus yang dirujuk.
Jumlah siswa yang terlibat?
Juga bervariasi.
Biasanya, tahun lalu untuk Misalnya, 29 mahasiswa di Harvard
adalah Iklan Boarded, sehingga untuk berbicara.
29 dari mereka siswa saat ini, dua dari mereka siswa sebelum,
yang berkolaborasi dalam beberapa cara yang tak diinginkan.
Dan kemudian dalam hal persentase, biasanya sekitar 3%
kelas yang, sayangnya, membuat jenis-jenis keputusan.
>> Jadi, tahun lalu itu 3,5% tubuh mahasiswa CS50 ini
itu Ad Boarded, sehingga untuk berbicara.
>> Jadi, apa semua ini berarti?
Dan apa yang kita benar-benar melakukannya?
>> Jadi, untuk pengungkapan penuh, kami benar-benar, sebagai ilmuwan komputer,
memiliki perangkat lunak yang kita miliki dan itu sangat mudah bagi kita, dalam keadilan,
teman sekelas yang lain yang tidak melintasi garis-garis ini untuk menyeberang membandingkan
setiap pengajuan tahun ini terhadap setiap pengajuan selama delapan tahun terakhir.
Software melakukan hal ini.
Dan akhirnya itu mata manusia yang memutuskan
apakah atau tidak untuk merujuk beberapa penting untuk ajudikasi lanjut,
tapi software pasti membantu.
Dan ini, terus terang, mengapa yang saya pikir kami memiliki jumlah besar seperti di CS50.
Ini bukan karena CS50 siswa atau mahasiswa CS lebih
umumnya kurang jujur daripada siswa lain,
itu hanya kita memiliki alat dan teknik
yang dapat digunakan untuk mengambil lulus pertama ini.
>> Tapi kita mengawasi pada semua hal ini
juga, lagi, untuk kepentingan mengakui pekerjaan yang dimasukkan
oleh mayoritas super kelas.
Dan kebijakan saja yang kejujuran akademik,
meskipun itu sekelompok paragraf panjang dengan sekelompok peluru
yang mudah-mudahan cukup mudah dibaca, itu benar-benar mendidih hingga masuk akal.
Dan aturan terbaik praktis yang kami menawarkan up dalam silabus
adalah ini, esensi dari semua pekerjaan yang Anda
tunduk kursus ini harus Anda sendiri.
Dan memang, di hampir semua dari mereka kasus dirujuk untuk tindakan disipliner
itu karena beberapa terlambat satu mahasiswa malam biasanya berbalik kode nya
lebih langsung untuk teman sekelas, yang kemudian diadopsi itu
secara keseluruhan atau signifikan daripadanya.
>> Tapi benar-benar, ini adalah OK.
Dan memang, di kantor jam, slip kertas
Anda telah diserahkan jika Anda datang ke kantor jam pekan lalu mendorong lebih banyak.
Anda benar-benar menyambut dan mendorong
untuk membahas masalah set dengan teman sekelas.
Untuk saling membantu ketika tersandung.
Tetapi umumnya aturan praktis harus menjadi ini, "ketika Anda meminta bantuan,
Anda mungkin menunjukkan kode Anda kepada orang lain, tapi Anda mungkin tidak melihat mereka. "
Jadi, dengan kata lain, jika saya berjuang dengan beberapa set P
dan aku duduk di sana di makan aula, atau di perpustakaan,
atau di dalam kelas mencoba untuk menemukan beberapa kesalahan,
Aku pasti bisa menunjukkan kode saya di layar saya
untuk orang yang duduk di sebelah bagi saya, tentu staf,
tetapi juga teman sekelas.
Tetapi jika solusi yang teman sekelas saya menawarkan adalah, oh,
di sini hanya kita lihat apa yang Saya lakukan, yang melintasi garis.
>> Dan saya berani mengatakan bahwa umumnya hal yang wajar bagi kebanyakan orang
untuk dengan mudah melihat garis.
Dan, lihat silabus untuk lebih detail.
Dan sekarang salah satu yang lebih aspek kontroversial
dari CS50 silabus yang saya pikir saya akan berbicara dalam kesimpulan di sini
adalah disebut penyesalan klausa.
Jadi, inilah semua baik cetak.
Tapi secara umum kita telah melihat selama 8 tahun terakhir ditambah
bahwa, memang, hampir semua CS50 ini kasus ketidakjujuran akademik
telah hasil dari hanya miskin pengambilan keputusan larut malam.
Hasil stress, hasilnya kurangnya makan, kurang tidur,
terlalu banyak P set, terlalu banyak tenggat waktu, terlalu banyak komitmen.
Stres membangun di 2:00, 03:00 AM, 04:00, dengan tenggat waktu menjulang.
Kebanyakan siswa dalam kasus ini telah membuat keputusan yang buruk
bahwa mereka mungkin sangat baik menyesali keesokan harinya jika tidak menit kemudian,
tetapi sampai tahun lalu tidak ada rilis katup bahwa siswa tersebut bisa
sebenarnya membuka untuk benar-benar mengatasi Masalah kepala tanpa takut
boot dari perguruan tinggi sama sekali.
>> Dan, memang, kami memperkenalkan penyesalan ini klausul tahun lalu,
yang mengatakan bahwa jika dalam 72 jam, tiga hari,
dari persimpangan beberapa baris ditentukan dalam silabus
Anda datang ke depan untuk salah satu saja yang kepala dan kami akan ngobrol tentang hal itu.
Ada masih ada beberapa hasil, bertentangan dengan apa yang
dilaporkan sebaliknya.
Masih ada beberapa hasil yang adalah ditindaklanjuti oleh kursus,
umumnya zeroing P set atau mengambil beberapa tindakan lainnya,
tapi kami akan, memang, menanganinya sendiri dan tidak
merujuk tinggi yang hasilnya mungkin jauh lebih parah.
Dan, memang, untuk berbagi apa yang terjadi tahun lalu, dalam delapan tahun, dan sekarang
sembilan tahun, mengajar kursus ini dan setelah bermain-main dengan berbagai tombol,
memutar berbagai cepat selama masa lalu beberapa tahun pada kejujuran akademik,
dan melihat per data tidak jelas dampak, bahkan pidato seperti ini,
ini adalah tangan bawah yang terbaik kami telah memperkenalkan pedagogis
dalam delapan tahun bersama baris-baris di CS50.
>> 19 siswa maju di bawah klausul ini tahun lalu.
Kami tidak mengambil tindakan untuk tujuh orang siswa,
menentukan bahwa mereka tidak perlu khawatir.
Mereka tidak, pada kenyataannya, melintasi garis, tetapi
adalah chatting baik untuk memiliki tetap.
Kami memusatkan perhatian 11 dari skor yang diajukan.
Dan dalam satu kasus kami meminta siswa untuk melakukan masalah ditetapkan.
Tapi yang lebih menarik, jujur, dengan ini 19 chatting,
yang cara yang lebih dari saya diharapkan memiliki, masing-masing
10 menit untuk mungkin sebuah jam lama, juga membawa
untuk menyalakan sejumlah isu mengenai masalah keluarga, masalah teman,
masalah kesehatan mental bahwa kita kemudian terlibat,
dengan siswa berkah, warga dekan, atau teman, atau nomor lain
sumber daya dukungan.
Jadi bahwa ini adalah jauh salah satu dari penggunaan terbaik dari waktu kita
dan salah satu intervensi terbaik.
>> Dengan mengatakan bahwa, itu tidak ada masukan pada tingkat deteksi
ketidakjujuran akademik lebih umum.
Dan saya berani mengatakan, bagian ini mahasiswa tahun lalu
adalah demografi yang kita sebelumnya tidak pernah diidentifikasi sebelumnya
dan tidak pernah berhubungan dengan sebelumnya.
Dan, ini adalah kisah sukses indah
meskipun mereka dibawa ke cahaya dalam waktu kurang dari keadaan optimal.
Jadi, ingatlah ini ketika Anda membuat, mungkin,
beberapa keputusan yang buruk sendiri larut malam,
bahwa ada jalan begitu lama sebagai mahasiswa dalam situasi yang
memiliki dan maju ke depan sehingga kita bisa memiliki jenis chatting dan menghadapinya
dengan cara yang pendidikan, dan kemudian kita bisa menempatkannya di belakang kami hari berikutnya.
>> Jadi tanpa basa-basi, mengambil tepi off dari percakapan ini,
alasan anak-anak anjing yang up hanya untuk memecahkan es sejenak.
Dan sayangnya, mereka semua tidur, tapi apa yang seharusnya terjadi di sini
adalah setiap orang seharusnya untuk kekaguman dan jenis bersantai
setelah itu percakapan yang sangat berat.
Namun ternyata saya menempatkan anak-anak anjing untuk tidur.
Tetapi jika Anda pergi ke CS50 ini anak anjing situs slash,
Anda dapat melihat mereka sepanjang hari.
Terutama mungkin 02:00, atau 03:00, atau 04:00 di malam hari
untuk melihat menghilangkan stres sedikit ada.
Jadi yang memangkas anak anjing.
Baiklah.
Bukankah itu menyenangkan?
OKE.
Jadi, kembali ke beberapa komputer ilmu pengetahuan, kalau boleh.
>> Jadi, ingat bahwa terakhir kali kita mulai melihat tidak hanya pada utama, yang
adalah fungsi default, ketika bendera hijau diklik setara,
tapi kami juga mulai sebentar menulis beberapa fungsi kita sendiri.
Dan sejauh ini tidak ada fungsi-fungsi ini telah sangat besar atau gemuk.
Anda akan masuk ke mereka lebih besar fungsi mungkin, P set 2, P 3 set,
pasti P mengatur 4 dan seterusnya.
Sekarang sebagian besar program Anda, jika tidak semua dari mereka, tentu untuk P
set 1 dapat dilakukan sepenuhnya di utama.
Jika program anda hanya lima baris, 10 baris,
bahkan 20 garis panjang, sempurna wajar untuk menulis itu
semua di utama dan tidak lebih dari menyulitkan kode Anda, tapi apa yang kita lakukan hari ini
dan seterusnya berusaha untuk juga memperkenalkan beberapa teknik desain yang baik
sehingga sebagai kode Anda akan lebih rumit dan sebagai masalah
Anda ingin mendapatkan lebih keras dan memecahkan lebih menarik Anda memiliki, semacam,
alat-alat dalam kotak peralatan Anda dengan yang untuk merancang solusi yang baik bagi mereka.
>> Jadi, mari kita lihat kembali pada program ini dari minggu lalu saya, yang
adalah fungsi nol dot C. Dan melihat bahwa, cukup sederhana,
terlihat seperti ini dengan dua fungsi, utama dan nama cetak.
Dan berpikir kembali atau mungkin reverse engineering hari ini,
apa motivasi untuk memperkenalkan fungsi sejalan 28 disebut,
Nama cetak?
Atau apa ini contoh di hal prinsip atau takeaway,
jika kamu mau.
Beberapa murmur.
Apa?
>> Ya penguraian sehingga Fungsional adalah jenis cara mewah untuk mengatakan,
terurai program Anda menjadi bagian-bagian penyusunnya
dan kemudian menggunakan bagian-bagian untuk merakit keseluruhan.
Jadi, itu juga hanya jenis dari seteguk sudah,
tapi ini mungkin bahkan contoh yang lebih baik dari sesuatu
hanya disebut abstraksi.
Benar?
Abstraksi akan menjadi salah satu tema berulang di CS50
dan juga ilmu komputer lebih umum karena itu
teknik dengan mana Anda dapat memecahkan masalah lebih efektif karena Anda
dapat menulis solusi yang lebih intuitif dan dengan cara yang skala
dan dimengerti oleh orang lain.
Apa yang saya maksud dengan itu?
>> Jadi, bisa dibilang jauh lebih mudah dibaca untuk melihat program seperti ini,
super pendek meskipun.
Bila Anda melihat pada baris 22 yang ada fungsi disebut, nama cetak.
Nama itu saja mengatakan apa yang dilakukannya.
Fungsi yang tampaknya mengambil masukan antara kurung nya,
dan tampaknya melakukan sesuatu, mungkin mencetak nama.
Dan, meskipun kita benar-benar bisa memiliki
melakukan apa yang kami lakukan seminggu yang lalu, yang hanya mengambil baris ini sebenarnya kode,
menyingkirkan ini, dan mendapatkan menyingkirkan ini semua bersama-sama,
kita semacam disarikan pergi gagasan mencetak nama.
Saya tidak peduli jika Anda menggunakan cetak def.
Saya tidak peduli jika Anda memiliki persen S dan N. backslash ini
adalah rincian sangat misterius.
Apa yang saya pedulikan sebagai programmer mencetak nama.
Dan, apa cara yang lebih baik untuk melakukan itu daripada dengan memanggil fungsi, nama cetak?
Dan, itu salah satu motivasi untuk melakukan sesuatu seperti ini.
Membuat kode lebih mudah dibaca, lebih dapat digunakan kembali, dan juga diri deskriptif.
Sekarang, mari kita lihat contoh lain,
yang fungsi satu, yang telah kami di sini.
>> Jadi, yang satu ini mungkin bahkan lebih menarik karena, dalam kasus ini,
Saya tidak ingin hanya mendapatkan int.
Saya ingin mendapatkan int positif.
Dan ternyata untuk mendapatkan positif int Anda harus melakukan banyak kerja keras.
Benar?
Ini bukan satu garis sederhana sebut seperti nama cetak itu,
yang diakui kurang menarik.
>> Untuk mendapatkan int positif, logically-- biarkan aku gulir kembali ke menyembunyikan ini.
Apa yang harus kamu lakukan?
Seperti semua alat yang kita miliki saat ini adalah
hal-hal seperti cetak def dari Standard Perpustakaan dan juga dari perpustakaan CS50
kami memiliki Dapatkan Int, dan Dapatkan Lampung, Dapatkan Long Long, mendapatkan String,
tetapi hanya satu, erat, sekarang adalah Dapatkan Int.
Jadi, jika satu-satunya alat yang Anda miliki dalam kotak alat Anda Dapatkan Int,
bagaimana kita pergi tentang pelaksanaan untuk mendapatkan int positif?
>> AUDIENCE: Buat log dan memeriksa apakah masukan yang mereka berikan
positif atau tidak.
>> SPEAKER 1: Sempurna.
Tepat.
Alat lain yang kita miliki di kami toolbox dari satu atau dua minggu yang lalu
hanya konstruk perulangan.
Dan, ya, jika kita menggunakan sementara lingkaran, atau do while loop, atau kedepan
lingkaran kita mungkin bisa pergi dengan salah satu dari mereka dalam beberapa bentuk.
Kita dapat menerapkan gagasan get positif int dengan hanya menggunakan Dapatkan Int,
dan kemudian terus menyebutnya lagi dan terus mengganggu pengguna
sampai dia benar-benar memberi kita apa yang kita inginkan.
>> Dan sekarang, ini abstraksi dari proses
mendapatkan int positif menjadi fungsi yang disebut
Dapatkan Positif Int adalah sedikit lebih menarik karena melihat ini.
Ini adalah seperti 10 plus baris kode yang
terlibat dalam mendapatkan int positif, dan aku tidak benar-benar peduli bagaimana Anda melakukannya.
Semua saya peduli adalah bahwa Anda dapat melakukannya, dan jadi aku
tersembunyi semua rincian ini di belakang fungsi yang disebut Dapatkan Positif int itu,
memang, memiliki do ini while.
>> Dan melihat minggu lalu untuk sintaks di sana, tapi itu hanya menyatakan N,
dan mencetak keluar instruksi kepada pengguna.
Ini panggilan Dapatkan Int dan kemudian memeriksa Kondisi ini lagi, dan lagi,
dan lagi sampai pengguna bekerja sama.
>> Jadi sekarang, sebuah cek kewarasan beberapa.
Bagi mereka mungkin akrab dengan beberapa pemrograman,
mengapa N menyatakan, mengapa saya membuat N luar do while?
Mengapa pada baris 29 dan tidak pada seperti 33, misalnya.
>> AUDIENCE: Karena ketika Anda mendeklarasikan luar, itu jenis
lebih, yang scope-- lebih besar
>> SPEAKER 1: Baik.
>> AUDIENCE: --dan jika Anda menyatakan di dalam lingkaran, [tidak terdengar]
karena tidak tahu tentang hal itu.
SPEAKER 1: Tepat.
Jika saya bisa simplify-- itu masalah ruang lingkup.
Dan lingkup mengacu pada konteks yang variabel ada atau dapat digunakan.
Dan aturan yang baik praktis di sini adalah bahwa umumnya ketika Anda menyatakan atau membuat
variabel Anda hanya dapat menggunakannya di dalam dari yang paling dekat merangkul kurung kurawal.
Jadi apa artinya?
Jika saya, sebaliknya, membatalkan ini dan pergi dengan sesuatu yang terasa sedikit lebih sederhana.
Benar?
>> Baris 32 hanya tampak bersih kepada saya sekarang.
Aku melakukan kedua hal di sekali dan kemudian menugaskan
tangan kanan ke tangan kiri.
Masalahnya sekarang berdasarkan bahwa definisi lingkup
adalah N yang dapat digunakan di garis 31 dan 32 dalam lingkaran ini,
tetapi di mana menurut definisi yang bisa tidak digunakan?
Sejalan apa?
Ya.
>> AUDIENCE: 35.
>> SPEAKER 1: 35.
Pasti tidak 35.
Dan juga di mana lagi?
AUDIENCE: 34.
SPEAKER 1: Bahkan 34 adalah bermasalah karena
luar kurung kurawal.
Dan pada kenyataannya, mari kita lihat apa yang terjadi.
Benar?
Ini mungkin tampak sedikit intuitif atau tidak mungkin,
tapi mari kita lihat apa yang compiler telah mengatakan saat
kita masuk ke direktori source hari ini.
Membuat fungsi satu.
Astaga.
Yah, aku akhirnya selesai itu, dengan cara.
Baiklah.
Dan apa masalah di sini?
Sangat misterius untuk melihat.
Tapi inilah yang saya typed-- membuat fungsi satu.
Inilah yang membuat diinduksi, yang sebenarnya
menggunakan dentang compiler dengan beberapa dari mereka bendera
bahwa kita akan melihat lagi sebelum lama.
Dan lagi, selalu melihat pada kesalahan pertama,
karena mungkin hanya memiliki Cascading efek berarti pada jalur lain.
>> Jadi apa artinya ini adalah bahwa masalah adalah fungsi 1.c.
Hal ini pada baris 32.
Dan itu di kolom, atau karakter, 13.
Jadi, ketika editor teks Anda yang dapat membantu Anda mengidentifikasi mana masalah ini.
Jadi jika saya gulir ke atas, apa garis 32?
Itu memang yang satu ini yang sudah disorot
tepat di sini-tidak terpakai n variabel.
Tapi itu tidak terpakai.
Saya menggunakan itu.
Tapi compiler bingung, karena hanya ada dalam lingkup ini.
Dan jadi saya tidak bisa menggunakannya di sini.
Saya tidak bisa menggunakannya di sini.
Dan compiler, oleh karena itu, bahkan tidak peduli bahwa aku berusaha.
Tampaknya tidak terpakai dalam ruang lingkup yang sebenarnya.
>> Jadi kita dapat memperluas ruang lingkup dengan melakukan persis apa yang kita mulai with-- int n.
Dan meskipun itu tidak terlihat elegan, mungkin,
dan kami mengambil garis ekstra di sini, sekarang ini dalam lingkup di mana-mana.
Jadi mari kita coba lagi.
Sehingga membuat fungsi satu.
Bagus.
Dan sekarang jika saya jika saya menjalankan fungsi satu, mari kita memberikan negatif 10,
negatif 1, 0, 1, dan itu memang bekerja.
>> Jadi ada solusi lain di sini.
Kamu tahu apa?
Bagaimana jika saya benar-benar sedang bergulat dengan ini?
Saya tidak tahu di mana n seharusnya pergi.
Kamu tahu apa?
Aku hanya akan menempatkan semua cara di atas file saya di sini.
Apa yang akan ini lakukan, menurut Anda?
Ya?
>> AUDIENCE: [tidak terdengar].
SPEAKER 1: Ya.
Jadi saya sudah membuat global, sehingga untuk berbicara.
Jika Anda memiliki variabel yang luar semua fungsi Anda yang diperbolehkan,
dan kode harus mengkompilasi, dan n sekarang akan dapat diakses tidak hanya di get
int positif, tetapi juga di main-- yang adalah mengkhawatirkan sedikit karena ada
sudah n di utama, sehingga lebih pada yang hanya moment-- sebuah
tapi ini akan dianggap desain yang buruk.
Baiklah.
Jika Anda harus resor untuk sesuatu seperti, oh, aku akan
hanya menaruhnya di sini karena kode tampaknya untuk mengkompilasi
umumnya tidak praktek terbaik.
Sebaliknya Anda ingin memilih lingkup sempit mungkin
untuk variabel Anda, yang berarti pergi dengan desain awal kami, yang
ada di sini.
>> Sekarang sebagai samping, jika Anda memang harus sebuah identik-bernama variabel sini,
cara c akan menangani this-- meskipun ini tidak akan terjadi terlalu often--
adalah bahwa ini masih baik-baik saja di sini.
Tapi definisi ini dari n sejalan 22 akan bayangan yang global.
Jadi yang satu ini akan bekerja dalam utama, dan satu global
benar-benar akan berlaku bila Anda berada di mendapatkan positif int Tapi lebih pada
lain waktu, tetapi hanya bagi mereka penasaran.
>> Jadi singkatnya, kita memperbaiki hal ini di sini.
Sekarang mari kita menggoda terpisah dua potong lainnya sebelum kita melihat satu baris terakhir dari kode
dalam program ini.
Dapatkan int positif.
Di sisi kiri kata nya adalah int kata.
Apa yang menunjukkan menurut Anda?
Sejauh ini kita sudah sebagian besar terlihat kosong.
Ya?
>> AUDIENCE: Ini jenis variabel yang Anda bertanya tentang.
>> SPEAKER 1: Ya Ini jenis, biarkan aku tidak mengatakan variabel, tetapi jenis nilai
bahwa aku meminta kembali untuk.
Dan memang, itulah intuitif sini, mudah-mudahan.
Benar?
Jika Anda ingin mendapatkan int positif, apa yang kau
ingin function-- seperti kami relawan dari minggu lalu
untuk tangan Anda kembali sepotong kertas dengan int di atasnya?
Dan jadi kami telah ditentukan bahwa disebut tipe kembali fungsi ini
adalah mendapatkan int positif.
Jika kita tidak ingin kembali apa-apa, yang Anda katakan batal.
Jika Anda ingin kembali string, Anda mengatakan tali.
Jika Anda ingin kembali pelampung, Anda mengatakan float.
Tapi satu-satunya yang berlaku di sini logis, karena saya menggunakan get int,
meskipun aku membatasi untuk nilai-nilai positif, adalah untuk mengembalikan int.
>> Jadi sebaliknya, apa artinya bahwa ada kekosongan dalam tanda kurung?
Apa tanda kurung umumnya mendefinisikan?
Ya?
>> AUDIENCE: Ini berarti fungsi ini tidak benar-benar mendapatkan itu.
>> SPEAKER 1: Ini berarti fungsi ini tidak benar-benar mendapatkan apa?
>> AUDIENCE: Sebuah masukan.
>> SPEAKER 1: Sebuah masukan, apapun.
Jadi memang, jika kurung di sini Anda tentukan batal,
itu hanya berarti saya tidak ingin masukan apapun.
Saya akan menangani masalah sendiri.
Dan memang, Anda tidak perlu memberitahu mendapatkan int sesuatu yang positif.
Anda hanya mengatakan, dapatkan int positif, dan bahwa Fungsi akan pergi dan melakukan hal tersebut.
>> Tapi sudah ada sedikit trik saya sudah telah bermain di sini sepanjang waktu ini
memastikan kode ini mengkompilasi.
Perhatikan bahwa int-- mendapatkan positif int void-- adalah on line 27.
Tapi untuk beberapa alasan yang tampaknya aneh itu juga di sini on line 16.
Dan hanya untuk mengukur baik saya akan mengulangi ini jadi sempurna identik.
Dan saya sudah mengatakan prototipe dengan sedikit satu baris komentar.
Apa yang terjadi jika saya menghapus itu, dan sekarang jalankan kembali membuat fungsi 1, masukkan.
Whoops.
Tunggu sebentar.
Di mana tab saya?
Huh?
Siaga.
Membuat fungsi 1.
Di sana kami pergi.
OKE.
Tidak disimpan dengan benar.
Jadi, saya pikir ada sedikit bug di sini di mana saya tidak
melihat nama tab saat ini.
Jadi apa yang terjadi di sini?
Deklarasi implisit fungsi mendapatkan int positif tidak valid di C99.
Jadi membingungkan lagi.
Jadi apa indikasi ini?
Nah, ternyata bahwa C cukup bodoh.
Nah, itu pemrograman bahasa, atau lebih tepatnya compiler.
Hanya tahu apa yang Anda miliki mengajarkannya, dan itu hanya
akan tahu sesuatu jika Anda mengajarkannya sebelumnya.
Dengan kata lain, di utama pada saat ini, aku
mencoba untuk memanggil fungsi disebut mendapatkan int positif.
Tapi compiler tidak akan untuk melihat bahwa mendapatkan int positif
ada sampai baris 26.
Dan jadi apa compiler tidak hanya kesalahan segera setelah sampai ke garis 17,
mengatakan deklarasi implisit dari mendapatkan int positif, yang
adalah cara mewah untuk mengatakan, saya tidak tahu apa yang mendapatkan int positif belum.
>> Bahasa lain seperti Jawa dan Python dan Ruby mungkin melihat ke depan.
C tidak.
Dan cara kita memperbaikinya ini adalah salah satu dari dua cara.
Salah satu, jika masalahnya adalah bahwa mendapatkan int positif belum pernah terlihat sebelumnya,
baik, saya hanya memindahkannya ke atas.
Yang akan memperbaiki masalah ini.
Tapi pada umumnya, itu dianggap teknik yang lebih baik
untuk menempatkan fungsi utama Anda di bagian paling atas sehingga manusia membaca kode Anda
tahu apa program ini tidak, karena utama tidak mengubur semua
cara di bagian bawah atau di tengah.
Ini di bagian paling atas.
Jadi yang tidak merasa cocok.
Dan Anda benar-benar bisa mendapatkan ke dalam situasi di mana
jika panggilan satu fungsi lain, yang menyebut lain,
Anda bisa masuk ke masalah di mana tidak bisa pergi di atas yang lain, secara logis.
Hanya saja tidak mungkin.
>> Dan cara untuk bekerja sekitar ini adalah untuk hanya mengambil
signature fungsi, sehingga untuk speak-- baris pertama di mana itu declared--
dan hanya menyalin, paste di atas, tapi tidak dengan braces-- keriting
hanya dengan titik koma.
Ini seperti sedikit petunjuk dari apa yang akan datang.
Dan pada kenyataannya, semua waktu ini ketika kita telah melihat hal-hal seperti io.h standar
dan cs50.h, sama, pada mereka dot h file yang ada prototipe lainnya.
Dan kita akan melihat bahwa tak lama.
>> Jadi singkatnya, ketika Anda memiliki program dalam file dengan beberapa fungsi
selain utama, Anda hampir selalu ingin menyatakan mereka
hanya dengan cara pertama mereka line, diikuti oleh titik koma,
di bagian paling atas dari file.
Itu banyak sekaligus.
Ada pertanyaan?
Baiklah.
>> Jadi mari kita lanjutkan kemudian untuk sesuatu seperti batuk.
Oh.
Bagaimana pas.
Baiklah.
Batuk.
Jadi di sini adalah c pelaksanaan program
kita lakukan hari lain di Scratch yang sangat sederhana hanya
mengatakan batuk, batuk, batuk.
Baiklah.
Dan seseorang mengatakan beberapa hari yang lalu bahwa ada
cara membersihkan kode ini sudah.
Baiklah?
Begitu Anda menyalin dan menyisipkan desain mungkin buruk.
Setidaknya sekali kita mendapatkan empat atau lima atau 20 batuk, rasanya praktek yang buruk.
Kami hanya terus copy, paste.
Apa solusi yang jelas untuk membersihkan program ini sampai?
>> AUDIENCE: Loop.
>> SPEAKER 1: Ya.
Jadi menggunakan loop.
Dan kita bisa menggunakan untuk loop, sementara lingkaran, sejumlah pendekatan.
Dan memang, itulah yang kita lakukan dalam versi satu di sini.
Aku sudah bukan ditulis ulang itu dalam versi salah satu cough.c
menjadi hanya batuk dalam untuk loop.
Baiklah, tapi ada kesempatan sekarang untuk jenis awal
merancang ini sedikit lebih seperti pelajaran kita diajarkan beberapa saat yang lalu,
yang this-- kira bahwa saya ingin untuk membuat fungsi yang disebut batuk,
mari kita mempertimbangkan untuk sesaat apa itu akan terlihat seperti.
Jadi jika saya ingin sesuatu batuk, saya hanya perlu
menggunakan print f dalam fungsi.
Dan memang saya.
Dan sebenarnya, semua ini waktu, setiap saat Anda
mencetak sesuatu untuk layar, programmer
akan menyebut bahwa efek samping.
Ini saya tidak menyerahkan kembali seseorang nilai.
Ini saya mengambil beberapa tindakan yang mungkin secara visual jelas.
Tapi fungsi batuk ini, apakah itu kembali apapun berdasarkan baris pertama?
Tidak, karena tipe kembali nya batal, yang hanya berarti
itu tidak menyodorkan sesuatu kembali.
Ini mungkin melakukan sesuatu visual, tapi tidak menyodorkan
kembali selembar kertas seperti pekan lalu.
>> Apakah perlu masukan?
Tidak.
Dan jadi batal sini juga.
Jadi ini juga merupakan jenis lebih-engineering masalah ini.
Benar?
Saya sudah membuat program lebih kompleks, lebih baris kode,
Saya belum membuat setiap lebih fungsional, tapi ini
akan menjadi batu loncatan, mungkin, untuk yang lebih luas
konteks dengan kode yang lebih rumit.
Tapi bagaimana ini?
Apa yang telah saya done-- hanya melirik ini tanpa melihat komentar
di bagian paling atas dari file-- apa yang harus Saya pada dasarnya dilakukan di sini dengan batuk saya
implementasi yang berbeda?
Ya, di belakang?
>> AUDIENCE: Buatlah sehingga Anda dapat memiliki karakter mematikan.
SPEAKER 1: Ya.
Jadi ini terasa agak manis.
Benar?
Ini seperti menambahkan fitur untuk Anda program atau fungsi Anda, dalam hal ini.
Masih mengembalikan apa-apa.
Ini mungkin memiliki efek samping visual, karena itu memanggil cetak f.
Tapi sekarang saya telah parametrized fungsi, yang
berarti saya sudah dispesifikasikan diambil masukan tipe int dan menyebutnya n,
tapi aku bisa menyebutnya apa pun yang saya inginkan.
Bahkan, itu hanya bisa kali untuk menjadi lebih eksplisit.
Dan kemudian aku hanya bisa mengubah ini di sini.
Tapi intinya adalah bahwa ini adalah bagaimana saya membuat fungsi yang mengambil input.
Dan jika Anda ingat membalik melalui mungkin online dalam satu
dari berjalan-through, yang keempat dan contoh batuk akhir,
Anda akan melihat di sini saya sudah umum kode saya semacam further-- dari abstrak
lebih lanjut.
Seperti batuk dan bersin, keduanya tentang seperti mengatakan sesuatu atau membuat
beberapa jenis suara.
Simpan akan menjadi sesuai Scratch blok.
Dan apa yang saya lakukan di versi ini, yang kita dapat hanya melirik,
adalah batuk adalah seperti mengatakan, [BATUK], batuk, dan sementara itu, bersin adalah
seperti mengatakan, [Achoo].
Dan jadi saya sudah umum pelaksanaan mereka
sekarang menerapkan fungsi ini generik,
mengatakan, yang menarik untuk tujuan hari ini
hanya karena masih tidak memiliki jenis kembali.
Tapi berapa banyak input yang dimilikinya?
AUDIENCE: Dua.
SPEAKER 1: Dua.
Dan jadi jika Anda ingin mengambil dua argumen,
hanya pisahkan dengan koma.
Dan jika Anda ingin kemudian memanggil fungsi itu,
melihat bahwa Anda hanya sebut misalnya, kutipan, tanda kutip,
untuk argumen pertama, umum n, untuk argumen kedua.
Jadi sekali lagi, kita hanya sekarang blok bangunan sehingga kita dapat benar-benar
mengimplementasikan beberapa fungsi kita sendiri.
Baiklah.
Pertanyaan ini?
>> Jadi sekarang mari kita mengupas lapisan jika demikian.
Dan tujuan, akhirnya, adalah minggu depan masalah set
akan berada di cryptogrophy-- seni berebut informasi.
Dan secara khusus, informasi akan memiliki Anda mengenkripsi atau mendekripsi
akan menjadi teks.
Dan sehingga jenis undangan pertanyaan hari ini seperti juga,
apa yang terjadi di bawah tenda dengan teks yang melebihi ASCII dari seminggu nol,
dan bagaimana bisa kita benar-benar mulai memanipulasi?
Jadi di sini adalah nama Zamyla ini.
Dan dalam teks, yang mungkin diinput dalam seperti fungsi get tali.
Dan mulai sekarang, ketika Anda melihat string seperti this-- Z-A-M-Y-L-A--
mulai memikirkan hal itu seolah-olah setiap dari karakter-karakter ini dalam kotak yang
sendiri.
Dan memang, dalam seminggu atau lebih adalah waktu, masing-masing kotak-kotak ini
akan mewakili sangat khusus blok memory-- gigitan memori.
Jadi masing-masing surat-surat ini, akhirnya, akan mewakili 8 bit.
Dan kita benar-benar akan melihat apa yang terjadi di bawah kap di komputer saya.
>> Tapi untuk tidak cukuplah hanya untuk melihat Zamyla
melalui lensa ini, dimana masing-masing surat-surat ini adalah di dalam kotak sendiri.
Dan cukup baik di C kita bisa mengakses kotak ini langsung.
Jadi jika Anda ingin mendapatkan yang pertama surat namanya, super mudah di C.
Jika Anda ingin mendapatkan yang terakhir surat, super mudah serta
dengan sepotong sintaks baru.
>> Jadi aku akan pergi ke depan ke CS50 IDE dan membuka string nol dot C.
Dan dalam contoh ini di sini, ada beberapa hal-hal baru yang terjadi.
Jadi di baris pertama 19, kami sudah melihat ini before-- get tali.
Jadi hanya sebagai kewarasan cek cepat, jika seseorang bisa menawarkan up secara lisan
Penjelasan awam dari apa yang terjadi di baris 19.
Seperti hanya menerjemahkan ini ke Inggris yang teman sekamar tidak CS50
mungkin mengerti.
Ya.
>> AUDIENCE: Memiliki input pengguna yang tali dan menyimpannya dalam variabel s.
SPEAKER 1: Baik.
Memiliki input pengguna string dan menyimpannya dalam variabel s.
Itu bagus.
Jadi di kanan sisi, kita sebut get tali.
Yang mengembalikan nilai yang tidak mendapatkan ditugaskan
dari sisi kanan ke kiri sisi ke variabel disebut s yang
dirancang untuk menyimpan string.
Tepat.
>> Jadi sekarang berbaris 22, per komentar di line 21,
jelas mencetak string yang satu karakter per baris.
Tapi bagaimana caranya?
Jadi pertama-tama, kita menginisialisasi saya untuk 0.
Dan kemudian bagaimana kita bisa akhir nama Zamyla ini?
Nah, pada akhir Nama Zamyla, aku bisa
ketik manual dalam karakter terakhir dari namanya entah bagaimana, atau jumlah itu.
Benar?
Jika kita kembali di sini-Z-A-M-L-- Y-L-A-- sehingga saya bisa ketik.
Apa indeks Surat terakhir Zamyla ini?
Jika ini adalah 0-- berbicara seperti programmer-- 0, 1, 2, 3, 4, 5,
Saya heard-- sehingga memang, huruf terakhir nama Zamyla adalah keenam,
tetapi jika kita menghitung dari 0, itu akan menjadi nomor 5.
Jadi ingatlah bahwa dalam pikiran di sini.
>> Ternyata ada fungsi di C disebut strlen, dan kembali pada hari
dan sampai hari ini masih, banyak programmer
memilih untuk melakukan sinkronisasi nama untuk mereka fungsi yang terdengar seperti kata-kata
mereka mencoba untuk mengatakan.
Jadi strlen adalah panjang string.
Dan apa yang akan panjang string S kembali ketika Zamyla adalah input?
>> AUDIENCE: Lima.
>> SPEAKER 1: Z-A-M-Y-L. Enam.
Benar?
Apa panjang nama Zamyla ini?
Benar?
Dan hanya dalam kenyataannya, enam huruf.
Benar?
Dan apa artinya untuk loop kami?
Kita akan pergi dari 0 sampai enam, yang
akan memberi kita lima iterasi.
Apa yang kita lakukan pada setiap iterasi?
Nah, persen C, seseorang menebak hari yang lain,
berarti sebuah tempat untuk apa?
>> AUDIENCE: Char.
SPEAKER 1: Hanya char.
Jadi character-- tunggal tidak beberapa karakter seperti string.
Dan kemudian di sini adalah baris baru bahwa kita punya mencetak.
Dan kemudian inilah sintaks baru.
Jika Anda ingin mencetak i-th karakter dalam string S, sehingga untuk berbicara,
Anda hanya bisa mengatakan nama dari string S,
dan kemudian buka braket persegi, dan kemudian ditutup braket persegi, dengan i
Tengah.
Dan itu jenis yang baik dalam jenis terlihat seperti persegi
seperti kotak di mana Zamyla ini karakter yang ada pada gambar di sana.
>> Jadi jika saya benar-benar menjalankan ini sekarang, mari kita lihat apa yang terjadi.
Membuat tali 0 dot slash tali 0, dan kemudian aku
akan mengetikkan nama Zamyla ini.
Tidak ada yang cepat, karena saya tidak menggunakan print f, tapi itu baik-baik saja.
Aku hanya tahu apa yang harus dilakukan.
Dan memang, ia akan mencetak Nama Zamyla ini, satu per baris.
>> Sekarang mari kita sedikit ceroboh.
Misalkan saya tidak tahu tentang strlen dan saya pikir,
baik-baik, tidak ada yang akan memiliki nama besar dari seperti 50 karakter.
Mari kita pergi ke depan dan ulang ini dan jalankan kembali itu, dan kemudian ketik Zamyla
lagi.
Logikanya, apa Program akan mencoba untuk mencetak?
Z-A-M-Y-L-A kemudian seperti 45 byte diketahui memori.
Dan memang, kami akan kembali ide ini dari memori.
Tapi secara logis, jika Nama Zamyla adalah selama ini,
sesuai gambar di sini, apa yang kita katakan
adalah tetap mencetak, menyimpan cetak, terus pencetakan, tetap mencetak, menyimpan cetak,
semua jalan ke karakter 50, yang siapa yang tahu apa yang akan terjadi.
Jadi mari kita lihat sebenarnya.
Mari kita ketik Zamyla.
Menarik.
Kami beruntung.
Hanya sejumlah besar ruang putih.
Oh.
Ada satu karakter yang funky.
Kelihatannya jenis seperti pertanyaan aneh menandai sana, tapi ada nama Zamyla ini.
Mari kita benar-benar nekat.
Bagaimana kalau kita mencetak 500 blok ke yang tidak diketahui?
Mari kita pergi ke depan dan membuat ini juga dan kemudian kembali berjalan.
Dan mari layar penuh, karena kita perlu melihat lebih banyak ruang.
Zamyla.
Beruntung lagi.
>> Berani kita mendapatkan lebih sembrono?
Mari kita lebih nekat.
50.000 karakter.
Hal ini paling jelas bukan ide yang baik.
Baiklah.
Membuat tali 0.
Ini akan menjadi demo terakhir kami.
Zamyla.
Ugh.
OKE.
Jadi memori saya benar-benar kosong sekarang, yang sebenarnya jenis nyaman.
Apa yang saya coba untuk mendapatkan to---baik saja.
Dan sekarang aku hanya akan mendapatkan sembrono.
500.000.
Make-- mari layar penuh itu.
Masukkan.
Zamyla.
Di sana kami pergi.
Saya tidak tahu apa yang adalah, tapi kedengarannya buruk.
Baiklah.
Dan pada kenyataannya, segera, jika Anda antara beberapa beruntung di jam kantor
dan di masalah menetapkan satu, Anda mungkin sangat baik menemukan ini.
Segmentation fault sebenarnya memiliki makna yang jelas.
Ini berarti beberapa jenis kesalahan yang berkaitan dengan segmen memori.
Dan dalam istilah awam, itu berarti kita menyentuh
memory-- kami menggunakan RAM di komputer saya bahwa saya tidak harus memiliki akses ke.
Dan itulah yang baik kuat dan juga berbahaya
tentang C adalah bahwa Anda benar-benar memiliki akses tak terkekang
untuk keseluruhan memori program anda atau byte atau RAM, lebih khusus.
>> Jadi meskipun nama Zamyla ini hanya enam karakter,
Aku masih bisa pergi ke mana pun dalam memori saya inginkan.
Dan sebagai samping, jika Anda sudah pernah membaca beberapa artikel
selama bertahun-tahun tentang beberapa server atau beberapa program yang
mendapatkan retak atau hack yang mengambil keuntungan dari sesuatu
disebut buffer overflow mengeksploitasi bahwa kita akan benar-benar
berbicara tentang dalam beberapa minggu, itu umumnya mengacu entah bagaimana menipu
komputer dalam berjalan dengan baik melampaui batas-batas memori
yang seharusnya, dan menemukan sesuatu yang menarik
dalam sebuah memory-- password, mungkin, cara
dari menghindari beberapa nomor seri cek, atau hanya umumnya dapat
untuk mengelabui komputer mengeksekusi kode yang tidak dimaksudkan.
Tapi mari kita kembali ke realitas untuk sesaat
di mana program ini diimplementasikan dengan strlen,
dan memperkenalkan satu hal di sini.
Apa yang baru di antara tiga baris?
>> Jadi tali dot h.
Ternyata ada perpustakaan ini disebut String Dot H, atau String Perpustakaan,
yang file header, sehingga untuk berbicara, string dot h yang memberikan saya
akses ke fungsi strlen ini.
Jika saya menghilangkan itu, compiler adalah akan berteriak padaku dalam beberapa bentuk.
Tapi kau tahu apa?
Sekarang mari kita benar-benar bernuansa.
Sejalan 22, ada sesuatu semacam dari inefficient-- buruk dirancang,
arguably-- tentang baris kode ini.
Pikirkan kembali bagaimana untuk loop diimplementasikan
dan langkah-langkah apa yang terjadi lagi dan lagi dan again-- inisialisasi,
kondisi, kode yang mendapat dieksekusi, maka selisih tersebut
atau perubahan, maka kondisi, maka kode, kemudian perubahan, maka
kondisi, maka kode tersebut, maka perubahan, dan sebagainya.
Jadi apa yang mungkin sedikit mengkhawatirkan atau buruk dilakukan di sini?
Ya, warna biru.
AUDIENCE: Strlen adalah disebut banyak, berkali-kali.
SPEAKER 1: Ya.
Jadi strlen disebut berkali-kali, tapi apa
panjang Zamyla nama yang pertama kali loop mengeksekusi?
>> AUDIENCE: Enam.
>> SPEAKER 1: Enam.
Nah, apa yang panjang namanya kedua kalinya kode mengeksekusi?
>> AUDIENCE: Enam.
>> SPEAKER 1: Baiklah.
Ini masih enam.
Benar?
Nama Zarla memiliki tidak berubah, bahkan jika saya sedang mencari
di hanya bagian dari huruf dalam namanya.
Dan fakta bahwa aku secara efektif menanyakan pertanyaan ini, apa
panjang Zamyla, apa panjang dari Zamyla, apa panjang Zamyla,
enam kali terpisah, atau tujuh bahkan, hanya bodoh,
karena itulah jawaban yang tidak berubah.
Dan apa yang saya benar-benar bisa lakukan adalah this-- dalam string satu
Saya memiliki versi sedikit lebih baik di sini.
There-- whoops-- tali dua saya harus versi sedikit lebih baik dimana
Saya melakukan this-- bukan hanya menginisialisasi i ke 0, saya juga dengan koma
mendeklarasikan variabel kedua disebut n-- saya tidak harus mengatakan int lagi.
Aku seharusnya tidak, pada kenyataannya.
Tapi saya katakan n.
Dan kemudian saya menginisialisasi n untuk strlen dari n, sehingga sekarang
berapa kali strlen dijalankan secara total?
Sekali saja.
Dan ini adalah apa yang kita maksud sebelumnya tentang desain yang lebih baik.
Sebenarnya setelah kode Anda benar, akan kembali dan berpikir melalui,
aku menggunakan sesedikit memori atau sebagai beberapa detik
atau milidetik waktu komputer sebagai mungkin untuk mengimplementasikan beberapa masalah?
Dan aku akan gulir dan hanya menyebutkan
bahwa ada menyebutkan ini dari nol dalam versi ini,
tapi kami akan datang kembali ke sebelum lama.
Karena untuk saat ini, mari kita lihat di mana ini akan membawa kita.
Jadi satu, ternyata sekarang bahwa kita memiliki kemampuan
untuk melihat karakter individu, kita dapat memanfaatkan sesuatu
dari minggu 0 yang sangat misterius dan semacam menarik pada saat itu.
Tapi sekarang, dan terutama ketika kita bisa kriptografi dalam seminggu,
itu akan menjadi cukup kuat.
Ternyata dengan beberapa int Data types-- dan mengapung
dan karakter dan string dan lainnya things-- beberapa dari mereka
dapat sangat mudah dikonversi ke yang lain.
>> Misalnya, ketika kita berbicara tentang ASCII beberapa waktu ago-- inilah
huruf kapital A melalui M, dot, dot,
dot-- kita mengatakan bahwa ada pemetaan antara surat-surat ini dan angka.
Dan pada kenyataannya, itu berlaku untuk huruf kecil juga.
Huruf kecil adalah 97, modal adalah 65.
Dan ada nomor dalam ASCII, yang hanya pemetaan ini
sistem untuk semua surat-surat lainnya.
Jadi apa artinya?
Nah, aku akan pergi ke depan dan terbuka up nyata cepat sesuatu yang disebut
ASCII 0, yang sebagian besar adalah komentar.
Dan lagi secara online Anda selalu bisa sekilas melalui komentar.
>> Dan kita lihat apa yang ini akan dilakukan.
Jadi itu punya fungsi utama.
Aku sudah keras-kode angka hanya untuk sekarang, karena saya tahu apa yang saya lakukan.
Saya tahu apa yang saya ingin lihat di sini.
Dan aku sudah diinisialisasi saya ke 65.
Dan aku menghitung sampai melalui 26 huruf Total.
Dan apa yang akan saya mencetak satu baris pada satu waktu
jika Anda dapat menafsirkan ini disorot baris?
Apa yang akan dicetak?
Ya.
>> AUDIENCE: Apakah Anda akan untuk mencetak surat yang
sesuai dengan peta yang Nilai surat dan nilai integer?
SPEAKER 1: Tepat.
Aku akan mencetak surat sesuai dengan nilai integer,
dan sebaliknya, sebagai berikut.
Nah ini, seseorang mengatakan sebelumnya, hanya sebuah tempat untuk char.
Itu masih.
Ini, tentu saja, adalah placeholder untuk int-- tidak baris baru.
Dan sekarang perhatikan, nilai pertama saya yang Saya mencolokkan untuk placeholder yang
tidak hanya I. saya katakan, dalam kurung, char saya,
yang char kurung adalah memerintahkan compiler, mengobati saya
tidak apa itu, yang merupakan nomor.
Memperlakukannya sebagai karakter yang sebenarnya.
Sedangkan nilai kedua saya memasukkan in-- Aku-- hanya harus menjadi nomor satu.
>> Jadi jika saya mengkompilasi program-- ini jadi ini adalah membuat ASCII 0,
dot slash ASCII 0-- saya hanya mendapatkan grafik berguna sedikit ini yang
menunjukkan saya semua mungkin pemetaan tanpa harus berpikir
melalui atau mencari tahu sendiri.
Dan aku juga mencetak, perhatikan huruf kecil,
karena beberapa baris kemudian, saya juga mencetak pemetaan ini
juga, yang hanya untuk mengatakan bahwa setelah Anda memahami
apa yang terjadi di bawah kap, dapat Anda
otomatis mengkonversi bolak-balik.
Dan pada kenyataannya, jika salah satu dari Anda pernah melakukan ini di sekolah dasar
atau mendengar tentang seseorang mythically mengambil catatan
dan menyerahkannya pada-Nya atau temannya di kelas,
tetapi Anda mengacak huruf oleh seperti A menjadi B,
dan B menjadi C, atau sesuatu lebih rumit dari itu, baik,
bagaimana Anda akan pergi tentang menerapkan bahwa sebagai anak-anak?
Nah, Anda hanya jenis tahu A menjadi B, B menjadi C,
tapi matematis, apa yang anak itu lakukan?
Apa yang Anda menambah setiap huruf?
Efektif, 1.
>> Jadi, ketika Anda mengubah A ke B, yang jenis seperti mengubah 65-66,
yang secara matematis berarti hanya menambahkan 1.
Dan jika Anda adalah untuk menerapkan yang sedikit teknik menipu
untuk guru Anda dalam kode, Anda mungkin melakukan hal itu hanya
dengan menambahkan satu huruf bersama-sama.
Jadi tak lama, kami akan melihat bagaimana kami
dapat mengambil keuntungan dari itu untuk benar-benar berebut benar dan menguraikan
Informasi.
Sementara itu, tahu bahwa kita sudah mulai memperkenalkan beberapa perpustakaan lain
sini-string satu hari ini.
Dan situs yang sangat membantu mudah-mudahan Anda akan menemukan
disebut reference.cs50.net, yang staf pengajar telah mengumpulkan,
sehingga jika Anda ingin mencari pekerjaan bagaimana strlen,
Anda dapat mulai mengetik nama fungsi,
klik strlen sana, dan kemudian penjelasan kurang nyaman
akan muncul.
Atau jika Anda ingin resmi Penjelasan berbasis Linux,
Anda dapat mengklik lebih nyaman di kanan atas, dan itu
akan menyajikan informasi yang sama, tetapi dalam hal yang lebih kompleks.
Itu sumber yang berguna untuk benar-benar tahu apa yang semuanya tidak.
>> Lain kali kita akan lihatlah Ovaltine
dan lebih, dan memperkenalkan diri ke dunia kriptografi.
Sebelum itu, kita akan melihat Anda akhir pekan ini.
Dan sekarang, Colton Ogden.
Sampai jumpa pada hari Rabu.
>> [MUSIC PLAYING]
>> SPEAKER 1: Apa [Bleep] yang kamu lakukan?
>> SPEAKER 1: Saya makan makanan penutup saya?
Bagaimana Anda makan?
Dengan tangan Anda?
>> [MUSIC PLAYING]