Halo, dan selamat datang kembali.
Dalam kuliah ini, saya ingin pergi melalui
demonstrasi solusi dari tantangan kami sebelumnya yang adalah
membuat beberapa fungsi, terutama fungsi GCD dan a fungsi pasangan, fungsi nilai mutlak dan
fungsi akar kuadrat.
Saya akan membuat proyek, dan Saya mungkin
hanya akan menyebutkan fungsi proyek, saya akan untuk menutup proyek saya yang ada di sini.
Akan menjadi yang lain aplikasi konsol.
Kami belum benar-benar mendapatkan ke perpustakaan atau segala jenis
pemrograman grafis.
Ini akan menjadi bagaimana tentang beberapa fungsi saja.
Biasanya, Anda ingin memiliki nama baik di sana, tapi ini
hanya untuk tujuan pembelajaran.
Jadi kita agak adil menyediakan fungsi generik.
Jika itu adalah program GCD, saya akan tuliskan pembagi persekutuan terbesar.
Tapi hal pertama yang akan kita lakukan adalah kita akan menerapkan
program pembagi bersama terbesar kita.
Ini akan menjadi fungsi yang menemukan pembagi persekutuan terbesar antara
dua bilangan bulat non-negatif nilai dan kemudian mengembalikan hasilnya.
Kita harus menyediakan fungsi prototipe juga sehingga kami dapat memanggil mereka dan
kami dapat menempatkan mereka di mana saja dalam fungsi.
Jadi mari kita lakukan itu.
Untuk fungsi pertama, ini adalah deklarasi fungsi.
Mengapa kita membuat fungsi? deklarasi, sehingga
kita dapat memanggilnya di mana saja dalam program.
Kami tidak harus benar-benar mengimplementasikan fungsi
ini di atas fungsi utama saat kita memanggilnya.
Dan itu hanya latihan yang bagus, itu sangat mudah untuk melihat
dengan jelas apa yang terjadi dalam program dengan semua deklarasi fungsi di atas.
Ini akan mengembalikan sebuah int.
Jadi ingat, fungsi header yang pertama hal yang Anda lakukan adalah Anda menentukan jenis data
yang akan dikembalikan.
GCD akan mengembalikan sebuah int.
Ini akan kemudian nama fungsi yang merupakan GCD.
Dan kemudian di dalam tanda kurung adalah data yang sedang diteruskan ke GCD.
Dan ini akan juga menjadi int.
Kami akan melewati dua item data.
Jadi kita pisahkan dengan koma.
Kami menentukan tipe data untuk masing-masing dan nama variabel.
Aku hanya akan mengatakan ke u dan v.
Dan kemudian saya memiliki titik koma untuk mengakhiri definisi fungsi.
Sekarang saya dapat mendefinisikan fungsi saya di bawah ini main dan saya masih bisa
menjalankannya dan tidak mendapatkan masalah.
Jadi sekarang ketika Anda ingin benar-benar
tentukan fungsi implementasikan, Anda melakukan fungsi yang sama header int mengembalikan nilai GCD.
Itu harus cocok dengan deklarasi dalam hal jenis.
Anda bisa menamakannya sesuatu yang lain seperti int x untuk nama, tapi
kami akan konsisten.
Kami hanya akan mengatakan int v.
Kami tahu itu fungsinya definisi karena ada tanda
kurung yang mendefinisikan tubuh.
Ini adalah kode implementasi.
Algoritma sebenarnya untuk GCD cukup sederhana.
Yang harus Anda lakukan adalah menulis sebuah loop dan melalui loop dan lihat
nilai temp berdasarkan sisa.
Jadi saya akan membuat lokal variabel di dalam fungsi GCD saya.
Bagaimana kita tahu itu lokal karena itu di dalam kurung untuk 12 sampai 14.
Variabel ini tidak dapat diakses di dalam fungsi utama.
Ini hanya lokal untuk blok ini.
Di sini saya hanya akan panggil temp karena ini lokal.
Saya juga sekarang akan membuat loop saya.
Saya akan menggunakan perulangan while.
Dan while loop saya baru saja berjalan untuk pergi sampai v, yang akan menjadi
pembagi bersama terbesar kami.
Ingat, kesamaan terbesar pembagi mengambil dua parameter.
Itu akan membutuhkan parameter.
Dan berdasarkan kedua parameter tersebut, ia memiliki algoritma untuk dibuat untuk
menemukan pembagi persekutuan terbesar.
Jadi jika kita mencoba mencari pembagi,
kita harus memastikan bahwa v tidak sama dengan nol, parameter kedua kami.
Ini standar saja bagian dari algoritma.
Sementara v tidak sama ke nol, kita akan menempatkan
tanda kurung untuk loop.
Apa yang akan kita lakukan adalah kita
pertama-tama akan menetapkan temp ke nilai modul u mod v.
Kami kemudian akan mengaturmu sama dengan v, dan kita akan mengatur
v sama dengan suhu.
Dan kemudian kami ingin kembali data dari fungsi ini.
Jadi bagaimana kami mengembalikan data dari sebuah fungsi? kami menggunakan kata kunci
kembali, dan kami hanya mengembalikan data yang ingin kita kembalikan.
Dalam hal ini, kami ingin mengembalikan Anda.
Sekarang ingat bahwa jika fungsi ini tidak mengembalikan data apa pun, kami
harus mengubah jenisnya menjadi batal.
Dan kemudian kita hanya bisa memiliki pengembalian tanpa data.
Tapi ini mengembalikan data.
Jadi kita harus cocok.
Dan inilah yang akan kami lakukan katakan kembali lagi u.
Juga jika kita tidak melewatkan data untuk fungsi ini,
kita bisa menempatkan void sebagai parameter atau kita bisa biarkan kosong dan itu
akan mengatakan bahwa fungsinya tidak mengambil data, tapi kami melewati dua variabel.
Dan variabel u dan v ini adalah variabel lokal ke fungsi GCD.
Kita dapat menggunakannya di dalam fungsi.
Dan itulah yang kami lakukan.
Ini semua adalah ciri-ciri dari suatu fungsi.
Nilai kembalian, data yang Anda lewat, menggunakan variabel
lokal dan kemudian mengembalikan data.
Semua hal itu perhatikan dalam sintaks dengan tanda kurung dan kemudian juga
dengan deklarasi di atas.
Sekarang kami ingin mencoba menguji fungsi ini.
Jadi kami ingin mengujinya untuk semua macam hal yang berbeda.
Mari kita lanjutkan dan ingat bahwa ini fungsi mengembalikan data jadi kami mungkin ingin membuat
variabel lokal di utama kami, kami hanya akan menyebutnya hasil.
Kita dapat menginisialisasi ke nol.
Dan kemudian kami ingin pada dasarnya memanggil fungsi.
Bagaimana kita memanggil suatu fungsi?
Kami hanya menentukan fungsinya nama diikuti oleh data yang diteruskan
ke sana.
Karena fungsi ini kembali data, saya akan mengatakan hasil
sama dengan nama fungsi.
Nama fungsinya adalah GCD.
Dan saya akan melewatinya 150 untuk tes pertama saya dan 35.
Saya akan melakukan dua tes lainnya hanya melewati nomor yang berbeda, tetapi yang ingin saya
lakukan adalah saya mau untuk mencetak data yang
sedang dikembalikan hasilnya.
Jadi saya akan mengatakan printf, dan saya akan mengatakan GCD dari 150 dan 35 adalah
feed baris persen dan kemudian hasilnya.
Benar. Jadi baris 10 itu penting.
Kami mendapatkan data kembali dari GCD jadi kami menugaskannya ke variabel.
Dan kita bisa memanggil fungsi lewat dalam dua konstanta di sini, 150 dan 35.
Kita juga bisa melewatkan variabel.
Cara kita memanggil fungsi dengan data yang diteruskan ke dalamnya ada
di dalam tanda kurung, kami menempatkan nilainya dipisahkan dengan koma dan titik
koma ada di akhir.
Saya ingin melakukan beberapa tes.
Jadi saya akan menyalin baris 10 dan 11 dan hanya memasukkan beberapa data lainnya.
Saya akan memasukkan 1026 dan 405 dan kemudian juga 83.
Dan sebenarnya yang bisa kita lakukan adalah alih-alih mengembalikan variabel,
kita sebenarnya bisa meletakkannya di panggil fungsi di
dalam printf dan cetak di sana, kita bahkan tidak perlu menyimpannya.
Jadi kita bisa saja mengatakan GCD 83, 240.
Kita harus mengubah apa
kami mencetak dalam hal nilai hard-coded di sini, katakanlah 1026, 405 dan kemudian juga 240 dan 83.
Jadi mari kita lanjutkan dan kompilasi itu.
Pastikan kita mendapatkan tidak ada kesalahan atau peringatan.
Kami tidak memiliki kesalahan dan peringatan.
Jadi mari kita jalankan.
Ketika kita menjalankannya, kita akan melihat pembagi persekutuan terbesar
tiga kali untuk bilangan-bilangan tertentu.
Jadi kita lihat KPK dari 150 dan 35 adalah 5.
KPK dari 1026 dan 405 adalah 27.
Dan KPK dari 83 dan 240 adalah 1.
Pembagi persekutuan terbesar berarti faktor yang masuk ke dua
angka, apa faktor tertinggi.
Jadi 5 menjadi 35, dan 5 menjadi 150.
Dan itu yang tertinggi.
27 juga masuk ke 405 dan 1026, itu yang paling tinggi di antara keduanya.
Jadi sepertinya berhasil.
Dan kami membahas dasar-dasar melewatkan data dan mengembalikan data.
Sekarang kami ingin berlatih pasangan hal-hal lain dalam hal hanya
algoritma dan pemecahan masalah.
Mari kita buat fungsi lain disebut nilai mutlak.
Fungsi nilai absolut sedang berjalan untuk mengembalikan pelampung dan mengambil pelampung.
Ini akan menjadi fungsi yang sangat sederhana.
Jadi kita akan mendeklarasikan fungsi di baris lima.
Kita akan mengatakan float absolute nilai, itu nama yang diikuti oleh parameter, dan kami hanya akan
mengatakan float x, dan kemudian kita akan
mengakhiri titik koma.
Sekali lagi, perhatikan fungsinya deklarasi, nilai kembalian,
parameter yang ditentukan dengan tipe data dan kemudian nama fungsinya.
Kami kemudian dapat melanjutkan dan menentukan fungsi ini di bawah fungsi
GCD dan itu akan menjadi sangat sederhana.
Kami mendefinisikan fungsi dengan tipe itu akan dikembalikan, nama dan
kemudian parameternya, seperti deklarasi kecuali bahwa sekarang kita memiliki tanda kurung
untuk memulai blok kode.
Ini mudah karena yang harus kita lakukan adalah memeriksa parameter yang lewat
dan memeriksa apakah itu kurang dari nol.
Jika kurang dari nol, maka kita hanya akan menetapkan
kebalikannya yang akan menjadi minus x.
Jadi jika itu adalah nilai minus, itu akan
mengalikan dengan minus kembali positif.
Dan kami ingin mengembalikan data itu.
Jadi kita akan mengatakan kembali x.
Sekarang satu hal yang saya sebutkan di
kuliah yang saya tidak bisa berikan contoh adalah apa jika Anda mengembalikan data secara keseluruhan.
Karena kita bisa memiliki banyak jika pernyataan, dan kami dapat kembali di setiap
pernyataan if.
Jadi fungsi Anda bisa, di teori, memiliki banyak pernyataan kembali jika mereka berada di
dalam ifs atau loop.
Dan kemudian Anda bisa memiliki satu di bagian bawah.
Masalah dengan ini adalah sungguh sulit untuk diikuti.
Jika Anda perlu kembali berbeda bagian dari kode Anda, pada dasarnya, cukup simpan
data dalam variabel dan kembalikan di bagian bawah.
Tapi di sini ini adalah fungsi sederhana.
Kami hanya mengembalikan nilai.
Ayo lanjutkan dan coba gunakan fungsi ini dan sangat bagus bahwa dibutuhkan
pelampung sehingga kami bisa menggunakannya dengan bilangan bulat dan mengapung.
Jadi saya akan membuat beberapa variabel di sini yang
akan kita lewati.
Dan aku juga pergi untuk membuat bilangan bulat.
Aku akan melakukan itu di bagian atas utama saya.
Saya akan membuat pelampung untuk F1 F2 F3.
Dan saya akan membuat sebuah bilangan bulat I1.
Dan saya akan membuat yang lain variabel yang menyimpan hasil tetapi
harus berupa float.
Jadi saya harus
membuat variabel lain dan
ini hanya akan mengatakan hasil nilai absolut, dan saya akan menginisialisasi
ke 0. 0.
Sekarang saya akan memanggil berfungsi dan mencetak hasilnya.
Jadi saya akan menyalin dan tempel beberapa kode di sini.
Saya dapat memanggil fungsi dan menyimpan data yang dikembalikan atau saya bisa
meneruskannya ke fungsi printf.
Saya mungkin ingin melakukan beberapa komentar di
sini menguji fungsi nilai absolut.
Dan ketika Anda menggunakan tanda bintang pada satu baris, itu agak menyorotinya sedikit.
Jadi di sini saya menempelkan hanya banyak panggilan ke absolut nilai fungsi dan kemudian ditampilkan beberapa hasil.
Jadi di sini di 24, saya menelepon nilai mutlak dengan f1.
Ingat, f1 adalah pelampung.
Ini sama dengan negatif 15. 5.
Saya akan memformat hasil dan print out.
Dan kemudian aku juga akan mencetak f1.
Jadi kita akan melihat apakah hasil perubahan
dengan memanggil fungsi dari aslinya.
Jadi saya akan mencetak hasil pemanggilan fungsi
kemudian nilai aslinya.
Ini akan memberitahu kita jika itu berubah sama sekali.
Jika awalnya negatif dan berubah menjadi positif.
Melakukan itu pada banyak baris untuk beberapa tes.
Dan kemudian di baris 37, satu-satunya
perbedaan di sini adalah bahwa alih-alih menyimpan nilai dalam variabel, Saya akan mencetaknya saja.
Jadi saya harus mengubah hasilnya di sini untuk variabel yang tepat.
Jadi mari kita lakukan itu dan.
Jadi di bawah sini, saya ingin melakukan itu.
Ketika saya awalnya menulis Program, saya menulis mereka sebagai terpisah.
Jadi mudah-mudahan, saya tidak membuat kesalahan di sini.
Dan ubah semua yang saya butuhkan untuk berubah dan itu harus dilakukan.
Yang lain sebenarnya tidak mencetak hasil semua variabel,
hanya yang ada di baris 26.
Jika tidak, kami hanya menunjukkan hasil.
Yang pertama hanya menunjukkan itu itu berubah karena
f1 adalah nilai negatif.
Nah, mari kita membangun ini.
Kami tidak memiliki kesalahan atau tidak ada peringatan.
Output yang kita inginkan perhatikan hanya
output nilai absolut.
Jadi mungkin lebih baik untuk sebenarnya menambahkan beberapa umpan baris.
Setelah kami menampilkan yang terakhir, mari tambahkan beberapa umpan baris.
Lebih mudah untuk membaca dan menjalankan ini.
Jadi sekarang kita melihat hasilnya adalah 15. 5.
Jadi itu benar-benar mengubahnya dari negatif ke positif karena
f1 awalnya 15. 5.
Dan semua hasil lainnya juga bernilai positif.
Pernyataan cetak terakhir tidak dicetak keluar hasilnya, itu hanya mencetak
nilai yang dikembalikan dari fungsi.
Sepertinya berhasil.
Fungsi terakhir yang saya inginkan define adalah fungsi akar kuadrat.
Ini akan menjadi fungsi yang menghitung akar kuadrat dari suatu bilangan.
Dan jika argumen negatif adalah lulus, pesan akan ditampilkan dan
negatif 1 akan dikembalikan.
Jadi mari kita definisikan deklarasi ini berfungsi sebagai float square
root dan dibutuhkan float dengan nama apapun.
Dan akar kuadrat benar-benar pergi menggunakan fungsi nilai mutlak.
Jadi kita bisa mendefinisikannya di atas itu dan masih menggunakannya
karena deklarasi fungsi.
Jadi mari kita definisikan, dan dibutuhkan pelampung.
Jadi kita cukup berguna di mendefinisikan fungsi-fungsi ini, tipe data
untuk parameter pengembalian, tanda kurung.
Kita akan membuat pasangan variabel lokal di sini.
Ini hanya bisa diakses di dalam blok.
Ini hanya akan membantu dengan algoritma akar kuadrat kami.
Anda akan melihat di sini pada baris 59, Saya membuat variabel konstan.
Kami belum membicarakan itu, tapi itu hanya cara untuk
membuat konstanta sebagai lawan menggunakan definisi.
Kami membuat variabel float bernama epsilon, itu. 001, ini membantu dengan perhitungan
akar kuadrat kami untuk membuat yakin itu dalam kisaran tertentu.
Kami memiliki tebakan yang 1. 1 dan deklarasi nilai absolut di sini.
Kami sebenarnya tidak perlu menyediakan deklarasi karena kami mendefinisikannya di
atas, jadi saya bisa menyingkirkannya.
Sekarang ingat bahwa kita harus periksa parameter, kami ingin
melakukan validasi parameter.
Jika parameternya kurang dari
nol, kami ingin mencetak komentar dan mengembalikan nilai negatif.
Jadi jika x lebih kecil dari nol, cetak keluarkan argumen negatif ke akar kuadrat
dan kembalikan argumen negatif.
Di sinilah kita akan memiliki beberapa nilai pengembalian, dan
saya akan menunjukkan kepada Anda bagaimana Anda dapat kembali sekali dan letakkan saja di bagian bawah.
Jika tidak, kami memiliki algoritma untuk akar kuadrat.
Saya tidak akan menjelaskan algoritma karena itu tidak berhubungan dengan apa
yang kita pelajari.
Tapi pada dasarnya, untuk menemukan alun-alun akar suatu bilangan, kita mendapatkan nilai
absolutnya dengan mengalikan itu dan kemudian dikurangi di x.
Jadi tebakannya adalah kita akan menebak.
Jadi awalnya kita akan menebak dan kemudian periksa
apakah ini algoritme, periksa apakah itu dalam kisaran tertentu.
Dan jika ya, maka kita akan pergi untuk menetapkan tebakan kita pada sesuatu dan membaginya menjadi
dua dan itu akan terjadi menjadi tebakan bahwa kita kembali.
Jadi di bagian paling bawah, kami akan mengatakan kembali menebak.
Jadi kami menggunakan fungsi nilai mutlak.
Itu didefinisikan di bawah kita, tapi kami memiliki deklarasi kami di
atas, jadi itu bagus.
Satu hal di sini adalah kita punya beberapa pernyataan kembali.
Ini benar-benar legal, tetapi seharusnya dihindari karena lebih sulit untuk mencari
tahu apa yang terjadi.
Jadi yang akan saya lakukan di sini adalah mungkin menyimpan yang negatif ini dalam variabel selain
tebakan, tapi mari kita lihat di sini bagaimana kita bisa melakukan ini.
Jadi yang akan saya lakukan adalah menebak diinisialisasi ke 1. 0, dan kami mengembalikan
yang negatif.
Saya mungkin hanya akan membuat yang lain variabel yang disebut nilai pengembalian float.
Kita dapat mengatur ini ke 0. 0.
Dan kemudian sebelum mengembalikannya ke sini
karena ini melompat keluar dari fungsi matematika, saya hanya bisa katakan nilai pengembalian sama
dengan negatif 1. 0 alih-alih memiliki pengembalian.
Kemudian saya dapat memeriksa dan saya dapat mengatakan jika nilai pengembalian tidak sama
dengan negatif 1. 0 karena saya tidak ingin menjalankan
ini jika saya sudah memiliki nomor saya yang tidak valid, nomor tidak valid, dan saya bisa membungkus ini dalam
pernyataan if.
Dan kemudian di dalam pernyataan while, Saya dapat mengatakan nilai pengembalian sama dengan tebakan.
Dengan begitu saya mengembalikan yang benar hal jika itu adalah entri yang valid.
Dan kemudian bukannya kembali tebak yang saya lakukan
adalah mengembalikan nilai pengembalian.
Dan kode ini sedikit lebih bersih karena hanya
kembali sekali di bagian bawah dan lebih mudah untuk diikuti.
Jadi nilai pengembaliannya negatif satu jika itu argumen yang tidak valid atau itu akan menjadi
kotak yang sebenarnya root jika itu bukan argumen yang tidak valid.
Dan kita bahkan bisa membuat sesederhana ini dengan sebenarnya bahkan tidak memeriksa
nilai pengembalian di sini mungkin akan lebih
mudah untuk mengatakan yang lain dan membuat bagian lain dari aslinya jika.
Jadi jika itu bilangan positif itu bahkan akan membuatnya lebih bersih dengan cara itu
Anda tidak memiliki pernyataan if itu.
Sekarang kita perlu mengujinya.
Mari kita pergi ke depan dan menguji ini.
Kami hanya akan memanggil berfungsi beberapa kali.
Kami akan mengatakan pengujian akar kuadrat.
Aku tidak akan melakukan apapun percetakan mewah di sini.
Saya hanya akan memastikan bahwa saya dapat menambahkan banyak umpan baris
sehingga lebih mudah dibaca.
Tekan tombol insert di sana.
Baiklah. Jadi sekarang saya hanya akan melakukan banyak printfs di
mana saya akan mengirimkan beberapa data yang baik dan val dan beberapa data inval dan saya akan memformatnya dengan cara yang sama.
Katakan saja panggilan pertama akan menjadi akar kuadrat dari beberapa akar kuadrat valid
yang baik.
Baiklah, pertama kita akan memeriksa itu dengan bilangan negatif.
Jadi kami hanya akan mengatakan negatif 3 yang seharusnya mencetak kesalahan.
Jika tidak, kami akan mengujinya dengan beberapa nomor yang valid.
Jadi kita akan mengatakan akar kuadrat dari 16, dan kami hanya akan memberikan sebuah int, mereka akan dikonversi,
saya mungkin mendapatkan beberapa peringatan.
Yah, aku tidak ingin mendapatkannya peringatan, dan kami akan melakukan 165.
Sekarang mari kita jalankan ini dan mengujinya.
Mari kita berharap, itu akan dikompilasi.
Saya memiliki kesalahan ejaan dengan float.
Sekarang ketika saya menjalankannya, semoga, kita akan mendapatkan hasil akar kuadrat yang bagus.
Jadi di sini kita memiliki satu negatif.
Dan kami benar-benar mencetak negatif skor argumen, jadi itu bagus.
Dan kemudian yang lainnya adalah, aku percaya, akar kuadrat yang benar.
Jadi sepertinya fungsi bekerja cukup baik.
Kami melakukan akar kuadrat dari 16 yaitu 4, 25 yaitu 5, 9 yaitu 3,
165 adalah 12. 85.
Jadi saya melakukan beberapa kesalahan perhitungan di sana.
Saya mencoba untuk memikirkan 15 kali 15 yaitu 225.
Jadi jika saya memasukkan 225 di sini, itu akan kembali sebagai 15 sebagai akar kuadrat.
Saya akan memberikan kode sumber
ini untuk Anda sehingga Anda dapat menganalisisnya, tetapi memahami deklarasi
fungsi, memahami cara mendefinisikan fungsi dengan tipe kembalian dan
parameter melewati data, memahami variabel lokal, memahami caranya untuk kembali hanya sekali di bagian bawah.
Algoritma itu sendiri tidak begitu penting.
Saya harap ini membantu. Terima kasih.