DOUG LLOYD: Baiklah.
Jadi sekarang mari kita hadapi cabaran topik yang benar-benar besar, fungsi.
Setakat ini dalam perjalanan, semua program yang kita telah menulis
telah ditulis dalam utama.
Mereka program agak mudah.
Anda tidak perlu mempunyai semua ini cawangan dan perkara yang berlaku.
Kami hanya boleh memuatkan semua dalam utama dan ia
tidak mendapat terlalu hangat.
Tetapi padang itu berterusan dan yang mana anda mula membangunkan program
secara bebas, mereka mungkin akan untuk memulakan untuk mendapatkan lebih banyak daripada 10
atau 15 baris.
Anda mungkin mendapat beratus-ratus atau beribu-ribu atau puluhan ribu baris kod.
Dan ia benar-benar tidak yang gila pemikiran.
Oleh itu, ia mungkin bukan idea yang baik untuk memastikan segala-galanya dalam utama.
Ia boleh mendapatkan sedikit sukar untuk mencari apa yang anda cari jika anda berbuat demikian.
>> Nasib baik, walaupun C, dan cukup banyak setiap bahasa pengaturcaraan lain yang
mungkin bekerja dengan, membolehkan kita menulis fungsi.
Dan saya hanya akan mengambil cepat yang mengetepikan sini
untuk menyebut bahawa fungsi adalah satu bidang sains komputer.
Dan anda akan melihat banyak lagi daripada mereka pada pelbagai mata sepanjang perjalanan
dan jika anda meneruskan.
Di mana ada banyak sinonim untuk perkataan yang sama.
Jadi, kita harap fungsi.
Tetapi anda juga mungkin mendengar mereka dirujuk sebagai prosedur,
atau kaedah, terutamanya, jika anda telah pernah melakukan apa-apa pengaturcaraan berorientasikan objek
sebelum itu dan jangan bimbang jika anda tidak mempunyai, tidak
yang deal-- besar tetapi dalam bahasa audit berorientasikan
sering dipanggil kaedah.
Kadang-kadang mereka dipanggil subrutin.
Tetapi mereka benar-benar semua merujuk kepada idea asas yang sama.
>> Mari kita lihat apa idea yang.
Apakah fungsi?
Well fungsi adalah benar-benar tidak lebih daripada satu kotak hitam.
Kotak hitam yang mempunyai satu set sifar atau lebih masukan dan satu keluaran.
Jadi, sebagai contoh, ini mungkin fungsi.
Ini adalah fungsi yang dipanggil func.
Dan ia mengambil masa tiga input a, b, dan c.
Dan di dalam kotak yang hitam, kita tidak tahu apa yang berlaku,
tetapi ia memproses input dalam beberapa cara dan kemudian ia
memberikan output tunggal, dalam kes ini, z.
Sekarang untuk membuat ia sedikit kurang abstrak, kita
boleh mengatakan bahawa mungkin kita mempunyai fungsi yang dipanggil
menambah yang mengambil tiga input a, b, dan c dan proses pengeluaran dalam beberapa cara
dalam kotak hitam untuk menghasilkan output tunggal.
Jadi dalam kes ini, jika menambah mengambil masa 3, 6, dan 7.
Di suatu tempat di dalam menambah fungsi, yang kami lakukan
mengharapkan mereka yang akan ditambah bersama-sama untuk menghasilkan keluaran yang
adalah 3 campur 6 tambah 7 atau 16.
>> Begitu juga, anda mempunyai fungsi yang dipanggil mult yang mengambil dua input, a dan b,
memproses mereka dalam beberapa cara seperti output fungsi
adalah hasil daripada kedua-dua input.
Kedua-dua input didarab bersama-sama.
4 dan 5 yang diluluskan ke dalam mult, sesuatu berlaku, pengeluaran kami menjangka
adalah 20.
Mengapa kita memanggilnya kotak hitam?
Baik jika kita tidak menulis berfungsi diri kita sendiri, yang
yang telah kami lakukan agak sedikit setakat ini cs50.
Kami telah melihat cetak f, sebagai contoh, yang adalah fungsi yang kita tidak menulis
diri kita, tetapi kita gunakan sepanjang masa.
Jika kita tidak menulis Fungsi diri kita sendiri,
kita tidak benar-benar perlu tahu bagaimana ia sebenarnya dilaksanakan di bawah hood.
>> Jadi, sebagai contoh kotak yang saya hitam hanya menunjukkan anda untuk pendaraban,
Mult a, b boleh menjadi defined-- dan ini hanyalah
beberapa pseudocode-- boleh menjadi ditakrifkan sebagai masa pengeluaran yang b.
Yang masuk akal, betul.
Jika kita mempunyai fungsi yang dipanggil mult yang mengambil masa dua input.
Kita akan menjangkakan bahawa output akan menjadi dua input didarab bersama-sama,
kali b.
Tetapi mult juga boleh menjadi dilaksanakan seperti ini,
kita mempunyai pembolehubah bertentangan dengan mendapatkan set di dalam mult kepada 0.
Dan kemudian kita mengulangi proses ini b kali menambah ke kaunter.
Sebagai contoh, jika kita darabkan 3a oleh 5b, kita boleh mengatakan menetapkan kaunter kepada 0,
mengulangi lima kali, menambah 3 ke kaunter.
Oleh itu, kita bermula dari 0 dan maka kita lakukan ini lima kali 3, 6, 9, 12, 15.
Ia adalah keputusan yang sama. Kami masih mendapat 3 kali 5 sahaja
pelaksanaan adalah berbeza.
>> Itulah apa yang kita maksudkan apabila kita mengatakan kotak hitam.
Ia hanya bermakna kita tidak benar-benar mengambil berat bagaimana ia dilaksanakan di bawah hood
selagi keluaran adalah apa yang kita harapkan.
Malah, itu sebahagian daripada kontrak menggunakan fungsi, terutamanya
fungsi-fungsi yang lain menulis.
Tingkah laku yang sentiasa akan menjadi biasa, tidak menentu
berdasarkan nama fungsi.
Dan itulah sebabnya ia benar-benar penting apabila anda menulis fungsi
atau apabila orang lain menulis fungsi yang anda boleh gunakan,
bahawa orang-orang fungsi mempunyai jelas, nama-nama yang agak jelas,
dan didokumentasikan dengan baik.
Yang sudah pasti kes untuk fungsi seperti cetak f.
>> Jadi mengapa kita menggunakan fungsi-fungsi?
Dan seperti yang saya katakan sebelum ini, jika kita menulis semua kod kami di dalam perkara-perkara utama
boleh mendapatkan benar-benar rumit dan benar-benar rumit.
Fungsi membolehkan kita keupayaan untuk menganjurkan sesuatu dan memecahkan
masalah yang sangat rumit ke dalam banyak sub bahagian yang lebih terkawal.
Fungsi ini juga membolehkan kita untuk memudahkan proses pengekodan.
Ia adalah lebih mudah untuk debug 10 fungsi garis berbanding baris 100
fungsi atau fungsi 1000 garis.
Jika kita hanya perlu debug kepingan kecil pada satu masa,
atau menulis kepingan kecil pada masa itu, ia membuatkan pengalaman pengaturcaraan
lebih baik.
Percayalah pada yang satu.
>> Akhir sekali, jika kita menulis fungsi kita boleh menggunakan semula orang-orang pelbagai bahagian.
Fungsi boleh dikitar semula.
Mereka boleh digunakan dalam satu program atau yang lain.
Anda sudah menulis majlis itu, semua yang anda
perlu anda lakukan adalah memberitahu program yang di mana untuk mencari fungsi itu.
Kami telah mengitar semula dan menggunakan mencetak f selama lebih 40 tahun.
Tetapi ia hanya ditulis satu masa.
Cukup berguna, betul.
Baiklah.
Jadi fungsi yang besar.
Kita tahu bahawa.
Sekarang mari kita mula menulis mereka.
Mari kita mula mendapat mereka ke dalam program kami.
Dalam usaha untuk melakukan itu, yang pertama perkara yang kita lakukan adalah mengisytiharkan fungsi.
Apabila anda mengisytiharkan fungsi apa yang anda lakukan pada dasarnya
memberitahu pengkompil, hey, supaya anda tahu,
Saya akan menulis fungsi di kemudian hari
dan di sini adalah apa yang ia akan kelihatan seperti.
Sebab untuk ini adalah kerana penyusun boleh
melakukan beberapa perkara pelik jika mereka melihat satu set simbol-simbol
bahawa mereka tidak biasa dengan.
Oleh itu, kita hanya memberikan pengkompil yang mengetuai, saya mewujudkan fungsi
dan ia akan melakukan ini.
Pengisytiharan fungsi umumnya jika anda menganjurkan kod anda dengan cara yang
bahawa orang lain akan dapat memahami dan menggunakan,
biasanya anda mahu meletakkan semua pengisytiharan fungsi anda
di bahagian paling atas kod anda, betul-betul sebelum anda mula menulis utama walaupun.
Dan mudah, ada bentuk yang sangat standard
bahawa setiap akuan fungsi berikut.
Mereka semua cukup banyak kelihatan seperti ini.
Terdapat tiga bahagian ke fungsi perisytiharan, jenis pulangan, nama,
dan senarai hujah.
>> Sekarang jenis pulangan adalah apa jenis pembolehubah output fungsi hati.
Jadi, sebagai contoh, jika kita berfikir kembali minit yang lalu dengan mendarabkan dua
fungsi nombor, apa yang kita harapkan jika kita darab integer dengan integer
output akan menjadi mungkin integer, betul.
Didarab dua integer bersama-sama, anda akan mendapat integer.
Jadi jenis pulangan yang fungsi akan menjadi int.
Nama adalah apa yang anda mahu untuk memanggil fungsi anda.
Ini mungkin yang paling penting sebahagian daripada akuan majlis itu,
dari segi fungsi.
Tetapi sebenarnya mungkin salah satu bahagian yang paling penting
akuan fungsi dari segi mengetahui apa fungsi sebenarnya
tidak.
Jika anda menamakan f fungsi atau g atau h atau rahsia atau sesuatu seperti itu,
anda mungkin akan mendapat sedikit tersandung cuba
ingat apa fungsi-fungsi itu lakukan.
Jadi ia adalah penting untuk memberikan anda nama-nama yang bermakna fungsi ini.
>> Akhir sekali, senarai argumen senarai dipisahkan oleh koma yang
semua input kepada fungsi anda, setiap yang mempunyai jenis dan nama.
Jadi bukan sahaja yang anda perlu menentukan jenis pembolehubah apa
output fungsi hati, anda juga ingin menentukan
jenis dan jenis pembolehubah yang fungsi akan menerima sebagai input.
Jadi mari kita buat contoh di sini.
Mari kita melihat dengan pada satu-satu yang lebih konkrit.
Jadi di sini adalah satu contoh fungsi pengisytiharan untuk fungsi yang
akan menambah dua integer bersama-sama.
Jumlah bagi dua integer akan integer juga, kerana kita hanya
dibincangkan.
Dan sebagainya jenis pulangan, di sini di hijau, akan menjadi int.
Yang hanya memberitahu kita bahawa menambah dua ints akan, pada akhir hari,
output, atau meludah semula keluar kepada kami, integer.
Memandangkan apa fungsi ini tidak kita mahu memberikan nama yang bermakna.
Tambah dua ints kelihatan sesuai, memandangkan
kami mengambil dua integer sebagai input dan mudah-mudahan menambah mereka bersama-sama.
Ia mungkin sedikit rumit nama dan terus-terang fungsi ini
mungkin tidak perlu kerana kita mempunyai tambahan
operator, jika anda ingat dari kami perbincangan operator, sebelum ini.
Tetapi mari kita hanya mengatakan dengan demi Hujah bahawa fungsi ini adalah berguna
dan dengan itu kita akan memanggilnya menambah dua ints.
Akhir sekali, fungsi ini mengambil masa dua input.
Setiap yang integer.
Jadi kita mempunyai koma ini senarai dipisahkan input.
Sekarang kita umumnya mahu memberi nama kepada setiap daripada mereka
supaya mereka boleh digunakan dalam majlis itu.
Nama-nama yang tidak terlalu penting.
>> Dalam kes ini, kita tidak semestinya mempunyai apa-apa makna yang menyertainya.
Jadi kita hanya boleh memanggil mereka a dan b.
Itu betul-betul halus.
Jika bagaimanapun, anda mendapati diri anda dalam keadaan
di mana nama-nama pembolehubah sebenarnya mungkin penting,
anda mungkin mahu untuk memanggil mereka sesuatu yang lain daripada a dan b
untuk memberi mereka sesuatu yang lebih simbolik bermakna.
Tetapi dalam kes ini, kita tidak benar-benar tahu apa-apa lagi mengenai majlis itu.
Kami hanya mahu menambah dua integer.
Oleh itu, kita hanya akan memanggil mereka bulat a dan b.
Itulah salah satu contoh.
>> Mengapa tidak anda mengambil kedua untuk berfikir tentang satu ini,
bagaimana anda akan menulis fungsi pengisytiharan untuk fungsi yang
mendarab dua terapung nombor titik?
Adakah anda ingat apa yang nombor titik terapung adalah?
Apa yang akan fungsi ini pengisytiharan kelihatan seperti?
Saya benar-benar mengesyorkan anda menjeda video sini dan mengambil berapa banyak masa yang anda perlukan.
Fikirkan tentang apa yang ini pengisytiharan fungsi tersebut?
Apa yang akan jenis pulangan menjadi?
Apa yang akan nama yang bermakna menjadi?
Apa yang akan menjadi input?
Jadi mengapa tidak anda menjeda video di sini dan menulis-up akuan fungsi
untuk sesuatu fungsi yang akan membiak dua nombor titik terapung bersama-sama.
Mudah-mudahan anda berhenti video.
>> Oleh itu, mari kita lihat pada contoh satu pengisytiharan mungkin.
Float mult dua sahih terapung x, apungan y.
Hasil daripada dua nombor titik terapung,
yang ingat adalah bagaimana kita mewakili nombor nyata
atau nombor dengan nilai-nilai perpuluhan dalam c, akan menjadi nombor titik terapung.
Apabila anda mendarab perpuluhan dengan perpuluhan,
anda mungkin akan mendapat nombor perpuluhan.
Anda mahu memberikan nama yang berkaitan.
Darab dua sahih kelihatan halus.
Tetapi anda benar-benar boleh memanggil ia mult dua pelampung, atau terapung mult.
Apa-apa seperti itu, selagi ia memberikan beberapa makna sebenar untuk apa
kotak hitam ini akan lakukan.
Dan sekali lagi, dalam kes ini, kita tidak seolah-olah mempunyai apa-apa makna yang dilampirkan
kepada nama-nama yang pembolehubah kita lulus dalam,
jadi kita hanya memanggil mereka x dan y.
Sekarang jika anda memanggil mereka sesuatu lagi, itu betul-betul halus.
Malah, jika anda lakukan pengakuan ini bukannya
menggunakan beregu sebaliknya daripada terapung, jika anda masih ingat
yang beregu adalah berbeza cara untuk lebih tepat
nyatakan nombor nyata atau terapung pembolehubah mata.
Itu betul-betul halus juga.
Salah seorang daripada mereka akan menjadi baik.
Malah, terdapat beberapa kombinasi yang berbeza
cara untuk mengisytiharkan fungsi ini.
Tetapi ini adalah dua yang cukup baik.
Kami telah mengisytiharkan fungsi, yang hebat.
Kami telah memberitahu pengkompil apa yang ia ini, apa yang kita akan lakukan.
Sekarang mari kita benar-benar menulis fungsi itu.
Mari kita memberikan definisi, supaya di dalam kotak hitam
tingkah laku boleh diramal yang berlaku.
Malah, kita sedang berganda dua sebenar nombor bersama-sama, atau menambah nombor
bersama-sama, atau melakukan apa sahaja yang kami ajukan fungsi kita lakukan.
>> Jadi sebenarnya, mari kita cuba dan menentukan membiak dua sahih yang kita hanya
bercakap tentang kedua yang lalu.
Sekarang awal definisi fungsi
kelihatan hampir sama sebagai suatu perisytiharan fungsi.
Saya mempunyai kedua-dua mereka di sini.
Di bahagian atas adalah akuan majlis itu, jenis, nama, dipisahkan oleh koma hujah
senarai, koma bertitik.
Koma bertitik ini menunjukkan bahawa iaitu pengisytiharan fungsi.
Permulaan majlis itu definisi kelihatan hampir sama
yang sama, jenis, nama, dipisahkan oleh koma senarai hujah, tiada koma bertitik,
membuka pendakap kerinting.
The kerinting terbuka, sama seperti kita telah lakukan dengan utama,
bermakna bahawa kita sekarang bermula untuk menentukan
apa yang berlaku di dalam kotak hitam yang kami telah membuat keputusan untuk memanggil mult dua sahih.
Berikut adalah salah satu cara untuk melaksanakannya.
Kita boleh berkata, kita boleh mengisytiharkan yang baru ubah jenis apungan dipanggil produk
dan menetapkan pembolehubah yang dengan nilai x kali y.
Dan kemudian kembali produk.
Apakah pulangan bermakna di sini.
Well pulangan adalah cara kita menunjukkan bahawa cara
kita lulus output menarik diri.
Jadi kembali sesuatu, adalah sama seperti, ini adalah keluaran dari kotak hitam.
Jadi itulah bagaimana anda melakukannya.
Berikut adalah satu lagi cara untuk melaksanakannya.
Kami hanya dapat kembali x kali y.
x ialah apungan.
y ialah apungan.
Jadi x kali y juga apungan.
Kita tidak perlu mencipta pembolehubah lain.
Jadi itulah cara yang berbeza untuk melaksanakan kotak hitam yang sama yang tepat.
>> Sekarang mengambil seketika, jeda video sekali lagi,
dan cuba dan menentukan menambah dua ints, yang merupakan fungsi lain yang kami
bercakap tentang masa yang lalu.
Sekali lagi di sini, saya telah meletakkan fungsi perisytiharan, dan sebagainya koma bertitik,
dan kerinting terbuka dan kerinting tertutup
pendakap untuk menunjukkan di mana kita akan memenuhi dalam kandungan menambah dua ints,
supaya kita menentukan tertentu tingkah laku dalam kotak hitam.
Jadi jeda video.
Dan mengambil masa sebanyak anda perlu cuba dan menentukan
yang pelaksanaan menambah dua ints, seperti yang apabila fungsi output nilai,
ia tidak, sebenarnya, kembali yang jumlah kedua-dua input.
Jadi seperti contoh sebelum ini, terdapat beberapa cara yang berbeza
bahawa anda boleh melaksanakan menambah dua ints.
Berikut adalah satu.
Di sini dalam oren saya telah hanya mempunyai beberapa comments--
Saya baru sahaja menambah beberapa komen untuk menunjukkan
apa yang berlaku pada setiap baris kod.
Jadi saya mengisytiharkan pembolehubah dipanggil jumlah jenis int.
Aku berkata jumlah sama tambah b.
Itulah di mana kita sebenarnya melakukan kerja menambah dan b bersama-sama.
Dan saya kembali jumlah.
Dan yang masuk akal kerana jumlah adalah pembolehubah jenis int.
Dan apa yang data jenis ini fungsi memberitahu saya ia akan output?
Int.
Jadi, saya kembali sejumlah wang, yang adalah pembolehubah integer.
Dan yang masuk akal memandangkan apa yang kita ada diisytiharkan dan ditakrifkan fungsi kami
yang perlu dilakukan.
>> Kini anda juga boleh menentukan fungsi dengan cara ini,
int jumlah sama tambah b-- skip yang pertama step-- dan kemudian, kembali jumlah.
Sekarang, anda boleh mempunyai juga dilaksanakan dengan cara ini,
yang Saya sangat tidak mengesyorkan.
Ini adalah gaya buruk bagi satu perkara dan reka bentuk yang benar-benar buruk,
tetapi ia tidak, sebenarnya, kerja.
Jika anda mengambil kod ini, yang merupakan int menambah buruk penambah dot c, dan menggunakannya.
Ia sebenarnya tidak menambah dua integer bersama-sama.
Ia adalah satu pelaksanaan yang sangat miskin tingkah laku tertentu.
Tetapi ia bekerja.
Ia hanya di sini untuk menggambarkan titik bahawa kita tidak benar-benar
peduli apa yang berlaku di dalam kotak hitam, selagi
kerana ia mempunyai output yang kita harapkan.
Ini adalah kotak hitam direka dengan buruk.
Tetapi pada akhir hari, ia output masih hasil tambah + b.
Baiklah.
Oleh itu, kita telah diisytiharkan fungsi.
Dan kita telah ditakrifkan fungsi.
Jadi, itu benar-benar baik.
Sekarang mari kita mulakan untuk menggunakan fungsi-fungsi bahawa kita telah diisytiharkan dan kami telah ditakrifkan.
Untuk memanggil function-- ia sebenarnya cantik easy-- semua yang perlu anda lakukan
adalah lulus hujah-hujah yang sesuai, hujah-hujah jenis data
bahawa ia menjangka, dan kemudian memberikan pulangan
nilai fungsi yang dan alasan this-- me--
memberikan nilai pulangan fungsi yang kepada sesuatu jenis yang betul.
>> Jadi mari kita lihat ini dalam amalan dalam fail
dipanggil penambah 1 dot c, yang Saya ada dalam IDE cs50 saya.
Jadi di sini adalah penambah 1 dot c.
Pada mulanya anda melihat saya mempunyai saya termasuk, pound termasuk,
standard IO, dan cs50 dot h.
Dan kemudian saya mempunyai akuan fungsi saya.
Ini adalah di mana saya memberitahu pengkompil Saya
akan menulis fungsi dipanggil menambah dua ints.
Ia akan output integer jenis pembolehubah.
Itulah yang bahagian ini adalah di sini.
Dan kemudian saya mempunyai dua input kepadanya yang dan b, setiap yang integer.
Dalam utama, saya meminta pengguna untuk input dengan berkata, berilah integer.
Dan mereka digesa untuk lupa int, yang merupakan fungsi yang
termasuk dalam perpustakaan CS50.
Dan itu akan disimpan dalam x, pembolehubah integer.
>> Kemudian kami meminta mereka untuk integer lain.
Kita mendapat integer lain dan menyimpan bahawa dalam y.
Dan kemudian, di sini pada baris 28, adalah di mana kita membuat panggilan fungsi kami.
Kami katakan, setaraf z int menambah 2 ints x koma y.
Adakah anda melihat mengapa ini masuk akal?
x ialah pembolehubah jenis integer dan y adalah pembolehubah jenis integer.
Jadi itulah yang baik.
Yang masuk akal dengan apa fungsi kami pengisytiharan di talian 17 kelihatan seperti.
Yang dipisahkan oleh koma senarai input menjangka dua integer, a dan b.
Dalam kes itu, kita boleh memanggil mereka apa sahaja yang kita mahu.
Ia hanya menjangka dua integer.
Dan x ialah integer dan y ialah integer.
Yang bekerja.
>> Dan kita tahu fungsi yang akan untuk output bilangan bulat juga.
Dan supaya kita menyimpan output fungsi,
menambah dua ints, dalam jenis integer berubah-ubah, yang kita panggil z.
Dan kemudian kita boleh berkata, jumlah peratus i dan i adalah peratus peratus i.
x, y dan z masing-masing mengisi mereka peratus i-kanak.
Apa yang dimaksudkan dengan menambah dua ints kelihatan seperti?
Ia agak mudah.
Ia adalah salah satu yang kami hanya melihat kedua yang lalu,
jumlah int sama sejumlah + b kembali.
Ini berfungsi?
Mari kita menyimpan fail.
Dan kemudian turun di sini di terminal saya Saya akan membuat penambah 1,
dan saya mengosongkan skrin saya.
Saya akan zum masuk kerana saya tahu ia sedikit sukar untuk melihat.
>> Oleh itu, kita menyusun program ini sebagai penambah 1.
Oleh itu, kita boleh lakukan dot mengurangkan penambah 1.
Berikan saya integer, 10.
Berikan saya integer lain, 20.
Jumlah 10 dan 20 adalah 30.
Oleh itu, kita panggilan fungsi yang berjaya.
Anda boleh menjalankan fungsi lagi, negatif 10, 17 jumlah negatif 10 dan 17 adalah 7.
Fungsi ini berfungsi.
Ia mempunyai tingkah laku yang kita mengharapkan ia.
Dan dengan itu kita telah membuat yang berjaya fungsi, definisi, perisytiharan,
dan panggilan fungsi yang berjaya.
Pasangan pelbagai mata tentang fungsi
sebelum kita membuat kesimpulan seksyen ini.
Ingat dari kami perbincangan mengenai jenis data,
sebelum ini, yang berfungsi kadang-kadang boleh mengambil input.
Jika itu berlaku, kita mengisytiharkan fungsi
sebagai mempunyai senarai hujah tidak sah.
Adakah anda masih ingat apa yang fungsi yang paling biasa
kita lihat setakat ini yang mengambil senarai hujah tidak sah itu?
Ia adalah utama.
Ingat juga fungsi yang kadang-kadang sebenarnya tidak mempunyai output.
Dalam kes itu, kita mengisytiharkan fungsi sebagai mempunyai jenis pulangan tidak sah.
Mari kita membuat kesimpulan seksyen ini oleh menangani masalah amalan.
>> Jadi di sini adalah masalah diletakkan.
Saya mahu anda untuk menulis fungsi digelar Segi tiga yang sah.
Apa fungsi ini perlu dilakukan yang mengambil masa tiga nombor nyata
yang mewakili panjang tiga belah segi tiga sebagai parameternya,
atau hujah, atau mana- inputs-- satu lagi set sinonim
yang mungkin anda hadapi.
Fungsi ini perlu sama ada output benar atau palsu
bergantung kepada sama ada ketiga-tiga panjang mampu membuat segi tiga.
Adakah anda masih ingat jenis data yang kita digunakan untuk menunjukkan benar atau salah?
Sekarang bagaimana anda melaksanakan ini?
Juga tahu ada pasangan peraturan mengenai segi tiga
yang sebenarnya berguna untuk mengetahui.
Segitiga A boleh mempunyai pihak dengan panjang yang positif.
Yang masuk akal.
Anda mungkin berkata, duh.
Perkara lain yang perlu diambil perhatian walaupun, adalah bahawa jumlah wang yang
daripada panjang mana-mana kedua-dua pihak segitiga
telah menjadi lebih besar daripada panjang sisi ketiga.
Itulah sebenarnya benar.
Anda tidak boleh mempunyai segi tiga sisi 1, 2 dan 4, sebagai contoh, kerana 1 + 2
tidak lebih besar daripada 4.
Jadi mereka adalah peraturan yang menentukan sama ada tiga
input difikirkan boleh membentuk segi tiga.
Oleh itu, mengambil beberapa minit dan mengisytiharkan dan kemudian menentukan
fungsi ini dipanggil sah segitiga, supaya ia benar-benar
mempunyai tingkah laku yang dinyatakan di sini.
>> Ia akan mengeluarkan kenyataan jika ketiga-tiga pihak mampu terdiri daripada segi tiga,
dan palsu jika tidak, Bersedia untuk melihat bagaimana anda lakukan?
Berikut adalah satu pelaksanaan segi tiga yang sah.
Ia bukan satu-satunya.
Anda mungkin berbeza sedikit.
Tetapi yang satu ini tidak, sebenarnya, mempunyai tingkah laku yang kita harapkan.
Kami mengisytiharkan fungsi kami di paling atas, bool segi tiga yang sah
terapung apung x y apungan z.
Jadi sekali lagi, fungsi ini mengambil masa tiga nombor nyata
sebagai hujah, terapung pembolehubah nilai mata,
dan output yang benar atau palsu nilai, yang merupakan Boolean, ingat.
Jadi itulah sebabnya jenis pulangan adalah bool.
Kemudian kita menentukan fungsi.
Perkara pertama yang kami lakukan adalah periksa untuk memastikan bahawa semua pihak adalah positif.
Jika x kurang daripada atau sama kepada 0, atau jika y = 0,
atau jika z adalah kurang daripada atau sama dengan 0, yang tidak mungkin menjadi segi tiga.
Mereka tidak mempunyai sisi positif.
Dan supaya kita boleh kembali palsu dalam keadaan itu.
Seterusnya, kami periksa untuk memastikan bahawa setiap pasangan input
adalah lebih besar daripada yang ketiga.
>> Jadi, jika x campur y kurang daripada atau sama dengan z,
atau jika x tambah z adalah kurang daripada atau sama dengan y,
atau jika y tambah z adalah kurang daripada atau sama dengan x, yang juga tidak boleh menjadi segi tiga yang sah.
Oleh itu, kita kembali palsu lagi.
Dengan andaian kita lulus kedua-cek walaupun, maka kita boleh kembali benar.
Oleh kerana ketiga-tiga pihak mampu returning--
mewujudkan segi tiga yang sah.
Dan itu sahaja.
Anda kini telah diisytiharkan dan ditakrifkan.
Dan anda mungkin boleh kini digunakan dan memanggil fungsi ini.
Bagus.
Saya Doug Lloyd.
Ini adalah cs50.