>> [MUSIC PLAYING]
>> ZAMYLA CHAN: Apakah Anda lebih suka menerima $ 10.000.000 sekarang atau menerima
uang setiap hari bulan, di mana setiap hari berikutnya, Anda menerima
dua kali lipat jumlah uang Anda menerima sehari sebelumnya?
Dalam uang, kita akan membuktikan mengapa Anda harus
pasti mengambil uang.
Tugas Anda adalah menulis pennies.c--
sebuah program yang pertama kali meminta user bagaimana beberapa hari ada di bulan dan
kemudian bertanya berapa banyak uang pengguna akan menerima pada hari pertama.
Program ini kemudian harus menghitung jumlah yang pengguna akan memiliki
terakumulasi pada akhir bulan dan menampilkannya.
>> Kita dapat mematahkan program ini sampai dalam beberapa tugas.
Kita harus meminta untuk beberapa input pengguna -
hari dan bulan, dan uang pada hari pertama.
Kita perlu untuk melacak berapa banyak uang pengguna memiliki dan memperbaruinya setiap
hari, dua kali lipat jumlah uang yang mereka terima.
Dan akhirnya, kita cetak mereka total akhir, dalam dolar.
>> Mari kita mengatasi input pengguna pertama.
Aku akan membuka apples.c, program jangka pendek yang berhubungan
dengan input dan output.
Di bagian atas di sini, saya telah menyertakan beberapa dari perpustakaan yang saya butuhkan -
Perpustakaan CS50 dan standar I / O perpustakaan.
Saya mencetak prompt menggunakan Fungsi printf dari
standar I / O perpustakaan.
Tapi sebenarnya mendorong pengguna terjadi di baris berikutnya dengan
Fungsi getInt di CS50 perpustakaan.
>> GetInt memperoleh masukan dari pengguna dan memastikan bahwa input adalah bilangan bulat.
Jadi saya menyimpan input pengguna ke bilangan bulat i, kurangi 1 dari i, dan kemudian
mencetak nilai baru jika i.
Setelah kompilasi apples.c menggunakan perintah "membuat apel," Saya memiliki
File apel eksekusi.
Menjalankan itu, saya akan masukan 1.
Program ini memberitahu saya bahwa Saya memiliki 0 apel tersisa.
Dan sehingga bekerja seperti yang diharapkan.
>> Jadi mari kita jalankan ini lagi dan input negatif 1.
Sekarang, memiliki jumlah negatif dari apel tidak benar-benar masuk akal, tapi
program menerimanya, karena negatif 1, baik, itu adalah sebuah integer.
Dan sekarang program atau rakasa dalam program makan negatif
apel, dan sekarang aku punya negatif 2 apel.
Hm, jadi itu satu pelajaran -
meskipun fungsi getInt dan fungsi terkait, seperti GetFlow atau
GetString mendapatkan tipe data yang tepat, Anda harus memastikan bahwa input membuat
akal bagi program anda.
>> Dalam uang, tidak akan melakukan prompt untuk integer, Anda harus membuat
memastikan bahwa input pengguna integer yang masuk akal mengingat konteksnya.
Bulan hanya dapat memiliki 28, 29, 30, atau 31 hari.
Kami ingin terus menuntut sebuah integer yang valid.
Jika mereka memasukkan sebuah luar integer kami batas diterima, kami akan meminta mereka
lagi dan lagi, sampai Anda memberi kita integer yang valid.
>> Ingat "ulangi sampai" blok di Awal?
Anda dapat membuat sebuah konstruksi yang serupa di C menggunakan "sementara" lingkaran
atau "do-while loop".
Struktur loop sementara memiliki kondisi yang harus dipenuhi untuk
tubuh loop untuk mengeksekusi.
>> Ini harus terlihat sedikit mirip, karena kondisinya yang seperti
Blok awal dengan sudut dan masuk ke dalam kurung
dari "sementara" lingkaran.
Jadi kondisi yang akan memeriksa apakah integer adalah dalam
batas yang sesuai.
Anda dapat meminta integer menggunakan getInt dan kemudian jalankan "sementara" Anda
lingkaran, mengulangi prompt dan pencetakan instruksi, sementara input
tidak valid.
>> Cara lain untuk memastikan input pengguna yang benar adalah dengan menggunakan "do-while" lingkaran,
yang sangat mirip dengan loop Sementara.
"Do-while" lingkaran mengeksekusi kode dalam tubuh seseorang dan kemudian cek
apakah kondisi terpenuhi atau tidak.
Hal ini berguna untuk mendapatkan input pengguna, karena Anda tahu bahwa Anda perlu
untuk meminta mereka setidaknya sekali.
Jika kondisi ini tidak terpenuhi, program akan mengeksekusi baris setelah
Anda "do-while loop".
Jika kondisi ini terpenuhi meskipun, loop akan mengulangi
>> A "do-while" loop untuk memvalidasi pengguna masukan akan terlihat seperti ini.
Saya mendeklarasikan n variabel, getInt, dan kemudian ulangi sampai n berlaku.
Dan proses ini, saya menjelaskan, itu menggunakan integer jenis-data, yang
Anda akan menggunakan untuk hari-hari bulan.
Tapi kita tahu bahwa jumlah uang akan menumpuk dengan cepat, sehingga untuk
menyimpan nomor yang lebih besar, menggunakan tipe data Longlong, tapi ingat sama
prinsip validasi berlaku.
>> Mengagumkan, jadi setelah kami memiliki dua valid masukan dari pengguna -
hari dalam sebulan dan uang pada hari pertama -
kita bisa pindah ke berikutnya bagian dari program.
Hari pertama, pengguna mulai dengan namun banyak uang mereka ditentukan
dan jumlah uang yang mereka menerima hari berikutnya adalah dua kali lipat.
Jadi masuk akal untuk melacak dari kedua jumlah tersebut -
berapa banyak uang pengguna memiliki dan bagaimana banyak uang mereka akan diberikan.
>> Sekarang, melakukan sesuatu selama 28 sampai 31 hari berulang-ulang, jadi mari kita gunakan "untuk"
loop untuk iterate atas hari di bulan, memperbarui total dan penny
jumlahnya setiap waktu.
"Untuk" berisi sintaks lingkaran berikut -
inisialisasi, kondisi, dan update.
Anda "untuk" lingkaran akan menginisialisasi variabel, ketika
pertama kali masuk loop.
Jika kondisi ini terpenuhi, tubuh loop akan mengeksekusi.
Setelah itu, update akan mengeksekusi.
Jika kondisi ini masih dipenuhi, Loop akan mengeksekusi dan memperbarui, dan
ulangi, asalkan kondisi Anda bernilai true.
>> Berikut adalah "untuk" lingkaran yang membagi suatu bilangan bulat p oleh 2 total 10 kali.
Perhatikan bagaimana saya menyatakan integer p di luar saya "untuk" lingkaran, sehingga
bilangan bulat dapat diakses luar "untuk" lingkaran.
Setelah satu bulan telah berlalu, saatnya untuk memberitahu pengguna berapa banyak uang
mereka sudah.
Per spec, Anda perlu memberitahu pengguna berapa banyak dolar, bukan berapa banyak
uang, yang mereka miliki.
Namun sejauh ini, Anda telah terus melacak Jumlah dan uang menggunakan LongLongs,
yang seluruh nomor.
>> Ada 100 sen ke $ 1, jadi kecuali jumlah uang adalah
kelipatan 100, Anda harus merupakan tempat desimal.
Dua kali lipat autotype memungkinkan Anda untuk melakukan hal ini.
Jadi bagaimana kita mengkonversi dari mewakili uang untuk dolar?
>> Mari kita lihat pi.c.
Program ini membutuhkan big_pi longlong dan membaginya dengan 100.000, dan mencetak
hasil sampai lima tempat desimal.
Jika kita ingin menampilkan empat desimal tempat, maka kita bisa mengganti ini
nomor di sini.
Jadi mari kita simpan, kompilasi pi, dan kemudian melihat hasilnya, yang kita
berharap untuk menjadi 3.1415 -
pertama lima digit pi.
>> Hal ini tidak sekalipun.
Dan mengapa?
Nah, karena big_pi adalah sebuah longlong, yang merupakan seluruh nomor, yang tidak akan
melacak desimal.
Modifikasi saya perlu membuat adalah di divisi.
Saya perlu untuk membuang ke ganda di sini sebelum membagi, karena ganda tidak bisa terus
melacak tempat desimal.
Dan aku akan menambahkan baris baru di sini untuk format yang lebih baik.
>> Dan di sini kita memilikinya -
3,1416.
Anda mungkin menyadari bahwa mencetak 3,1416 bukannya 3.1415 seperti yang diharapkan.
Itu karena putaran selama Proses pembelahan, dibandingkan dengan hanya
truncating nilai.
Sekarang Anda harus mampu mencetak total akhir benar, yang selesai
program.
>> Selamat.
Nama saya Zamyla.
Dan ini adalah uang.
>> [MUSIC PLAYING]