JavaRush /Java Blog /Random-ID /Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4)
Masha
Level 41

Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4)

Dipublikasikan di grup Random-ID
Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4) - 1Teman-teman, Anda dapat memperoleh informasi teoritis dasar dari catatan seminar . Di sana, selain dasar-dasar C, ini menjelaskan cara terhubung ke cloud IDE CS50 khusus (ini harus dilakukan untuk menjalankan dan memeriksa tugas), dan menjelaskan perintah dasar Linux dan struktur bahasa yang diperlukan. Jika Anda tidak menemukan cukup materi tentang C dalam kuliah dan catatan, carilah sumber lain. Misalnya saja yang tercantum di akhir artikel ini. Dalam topik " Bahan tambahan "
  • Tujuan minggu pertama
  • IDE CS50
  • Pembaruan baris perintah dan meja kerja
  • Bekerja di IDE
  • Halo, C!
  • Bug?
  • Pemeriksaan validasi: tes check50
  • Dasar-Dasar C: Perbandingan dengan Scratch
  • Tipe Data Dasar di C
  • PerpustakaanC
  • Halo C lagi: analisis sintaksis program paling sederhana
  • Sedikit lebih banyak tentang I/O di C
Materi dalam topik ini:
  • Entri data yang divalidasi: fungsi khusus perpustakaan cs50.h
  • Tugas 1. Perhitungan konsumsi air yang cerdas
  • Tugas 2. Mario bersama kita!
  • Tugas 3. Saatnya mendapatkan kembalian
  • Cara memvalidasi kode Anda dan mendapatkan nilai
  • Sumber daya kode
  • literatur tambahan

Entri data yang divalidasi: fungsi khusus perpustakaan cs50.h

Untuk membuat kursus ini lebih nyaman, kami telah mengembangkan perpustakaan CS50 khusus, yang khususnya, memiliki fungsi yang sangat berguna untuk memproses data yang dimasukkan pengguna.
  • GetString()membaca string yang dimasukkan oleh pengguna;

  • GetInt()membaca string yang dimasukkan oleh pengguna dan memeriksa apakah string tersebut berisi bilangan bulat;

  • GetFloat()membaca string yang dimasukkan oleh pengguna dan memeriksa apakah string tersebut berisi angka floating point;

  • GetLongLong()membaca string yang dimasukkan oleh pengguna dan memeriksa apakah string tersebut berisi bilangan real yang panjang.

Tugas 1. Perhitungan konsumsi air yang cerdas

Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4) - 2Logikanya: semakin lama Anda mandi, semakin banyak air yang dihabiskan untuk proses ini. Mari kita cari tahu berapa jumlahnya? Meskipun pancuran Anda hampir tidak terbuka, sekitar 6 liter air mengalir keluar per menit. Dan ini adalah 12 botol air yang kamu bawa untuk diminum. Biasanya seseorang mandi sekitar 10 menit, total untuk mencuci membutuhkan 120 botol ukuran setengah liter. Cukup banyak! Buat file water.cdi ~/workspace/pset1. Program ini harus menghitung berapa botol air yang digunakan untuk mandi tergantung waktunya. Itu adalah:
  1. Program ini menanyakan jumlah menit yang dihabiskan pengguna di kamar mandi
  2. Pengguna memasukkan bilangan bulat positif
  3. Program ini menampilkan jumlah botol yang digunakan oleh pengguna.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Untuk lebih mudahnya kali ini kita asumsikan user selalu memasukkan jumlah menit dengan benar yaitu kita tidak mengecek apakah angka yang dimasukkan positif atau integer. Nanti kita akan belajar cara menulis cek, tapi untuk saat ini sudah cukup. Untuk memeriksa apakah program berjalan dengan benar, check50,Anda perlu memasukkan baris berikut di terminal:
check50 2015.fall.pset1.water water.c
Dan jika Anda ingin melihat cara kerja program wateryang ditulis oleh staf kursus, jalankan perintah berikut:
~cs50/pset1/water

Tugas 2. Mario bersama kita!

Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4) - 3Tahukah Anda tukang ledeng paling terkenal di dunia? Dengan bantuan Nintendo, pria fiksi berkumis dan sedikit montok bertopi merah ini telah menjadi pahlawan bagi beberapa generasi gamer. Jika Anda tidak tahu siapa yang sedang kita bicarakan, berikut tautan ke game klasik tahun 1985 : percayalah, ini masih bagus dan layak untuk dicoba! Anda juga dapat menemukan versi Super Mario klasik untuk ponsel cerdas atau emulator offline. Kita membutuhkan semua ini untuk perkembangan umum, sayangnya ini belum menjadi tugas ;). Dan tugasnya adalah ini. Di akhir level Mario pertama, setiap pemain melihat setengah piramida ini: Buat file mario.cdi file ~/workspace/pset1. Program kami akan menggambar setengah piramida serupa dengan yang Anda lihat, tetapi langsung di konsol, tanpa grafik: setiap blok akan terdiri dari ikon hash (#). Meskipun Anda belum tahu cara melakukannya, percayalah: itu mudah. Agar soal lebih menarik, mari kita tambahkan kemampuan mengatur tinggi setengah piramida menggunakan bilangan bulat non-negatif dari 0 hingga 23. Ketinggian limas pada gambar dianggap berada di tempat tertinggi, yaitu sama dengan 8. Jika pengguna salah memasukkan nomor, Anda perlu memintanya melakukannya lagi satu kali. Kemudian hasilkan (menggunakan printf piramida). Berhati-hatilah saat menyelaraskan sudut kiri bawah setengah piramida Anda dengan tepi kiri jendela terminal, seperti pada contoh di bawah. Teks yang digarisbawahi adalah teks yang dimasukkan sendiri oleh pengguna.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Perhatikan bahwa dua kolom paling kanan memiliki tinggi yang sama. Belum ada gunanya menghasilkan pipa, awan, dan Mario sendiri =). Setidaknya untuk tugas ini. Jika pengguna memasukkan data yang salah (tidak memasukkan angka, atau memasukkan angka yang kurang dari satu atau lebih besar dari 23), program harus memintanya untuk memasukkan data lagi, seperti pada contoh di bawah ini, di mana teks yang digarisbawahi adalah apa pengguna memasukkan dari keyboard. Untuk membaca string yang dimasukkan, gunakan GetInt. Ini dapat membantu memeriksa input yang salah, tetapi tidak di semua kasus.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Untuk mengkompilasi program, masukkan baris di terminal:
make mario
atau versi yang lebih transparan namun lebih panjang:
clang -o mario mario.c -lcs50
Setelah itu jalankan program yang akan dieksekusi:
./mario
Jika Anda ingin memeriksa apakah program berjalan dengan benar, jalankan check50:
check50 2015.fall.pset1.mario mario.c
Dan jika Anda ingin bermain dengan mario versi asisten kursus, ketikkan baris berikut:
~cs50/pset1/mario

Tugas 3. Saatnya mendapatkan kembalian

Harvard CS50: Tugas Minggu 1 (Kuliah 3 dan 4) - 4Di garis lintang kami, kami belum pernah melihat ini, tetapi di AS, tampaknya, ada mainan seperti itu, yang ditunjukkan dalam foto: silinder dirancang untuk koin dengan diameter (dan denominasi) berbeda, dilepaskan dengan mekanisme pegas , dan unitnya sendiri dapat dilekatkan pada sabuk kasir anak. Namun, apa jadinya jika seseorang membayar ke kasir dengan tagihan yang besar? Bayangkan betapa sulitnya menghitung koin untuk kembalian. Untuk meminimalkan jumlah koin yang dikeluarkan, Anda dapat menggunakan apa yang disebut algoritma “serakah”. Mereka, sebagaimana didefinisikan oleh National Institute of Standards and Technology (NIST), selalu menemukan solusi optimal pada setiap langkah penyelesaian suatu masalah, dengan asumsi bahwa solusi akhir (yang diperoleh dari totalitas langkah-langkah tersebut) juga akan optimal. Apa artinya? Bayangkan seorang kasir berhutang kembalian kepada pelanggan sebesar 41 sen, dan dia memiliki silinder koin di ikat pinggangnya untuk uang kembalian pecahan 25, 10, 5, dan 1 sen. Seorang kasir yang berpedoman pada algoritma “serakah” akan langsung ingin memberikan hasil maksimal pada langkah pertama. Pada titik ini, solusi optimal atau terbaik adalah memberikan 25 pence. 41-25 = 16,16 pence tersisa untuk dibayarkan. Jelasnya, 25 pence terlalu banyak, sehingga menyisakan 10. 16-10 = 6. Sekarang kita membagikan 5 pence dengan prinsip yang sama, lalu 1. Jadi, pembeli hanya akan menerima empat koin pecahan 25, 10 , 5 dan 1 pence. Ternyata petunjuk langkah demi langkah yang “serakah” dalam mengeluarkan uang optimal tidak hanya untuk kasus ini, tetapi juga untuk denominasi mata uang AS (dan juga Uni Eropa). Artinya, jika kasir memiliki cukup koin dari denominasi apa pun, algoritme akan bekerja paling baik, yaitu akan mengeluarkan jumlah koin minimum dari semua kemungkinan kasus. Jadi, berapa jumlah minimum koin yang perlu kita berikan kembalian? Ini adalah tugas ketiga kami. Buat file greedy.cdi direktori Anda ~/workspace/pset1. Diberikan: uang logam pecahan 25, 10, 5, 1 sen Program harus:
  1. Tanyakan kepada pengguna berapa banyak uang kembalian yang akan diberikan
  2. Hitung jumlah minimum koin yang dapat Anda gunakan untuk melakukan ini
Catatan:Kita akan menggunakan fungsi GetFloatdari perpustakaan CS50 untuk masukan dan printfdari perpustakaan I/O standar untuk keluaran. Selain itu, program harus memeriksa kebenaran input. Kami meminta Anda untuk menggunakan GetFloat, untuk memungkinkan pengguna memasukkan nilai dalam dolar dan sen yang dipisahkan oleh sebuah titik. Misalnya, jika kita berhutang $9,75, pengguna harus memasukkan 9,75, bukan $9,75 atau 975. Anda harus memastikan bahwa pengguna memasukkan angka yang masuk akal. GetFloatKatakanlah non-negatif; fungsi itu sendiri tidak akan membantu dalam hal ini . Jika pengguna membuat input yang salah, Anda perlu memintanya mengulanginya dan menjalankan program hanya dengan data yang benar. Waspadalah terhadap ketidakakuratan yang melekat pada bilangan floating point. Misalnya, 0,01 tidak dapat direpresentasikan secara langsung sebagai float. Coba gunakan output yang diformat, misalnya dengan 50 desimal, gunakan kode di bawah ini:
float f = 0.01;
printf("%.50f\n", f);
Ngomong-ngomong, sebelum menghitung apa pun, masuk akal untuk mengubah seluruh jumlah menjadi sen (dan pada saat yang sama mengubahnya dari floatmenjadi int), yang akan membantu menghindari banyak kesalahan dan kesulitan. Untuk memastikan bahwa penganalisis kode otomatis kami dapat memeriksa masalah Anda dengan benar, pastikan bahwa baris terakhir keluaran program Anda tidak berisi informasi lain selain jumlah minimum koin: bilangan bulat dengan \n setelahnya (bagi yang mempelajari JavaRush sangat menyadari apa yang kita bicarakan di sini =)). Di bawah ini adalah contoh tampilan hasil program Anda.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Mengingat sifat bilangan floating point, Anda dapat mengabaikan angka nol dan memasukkan angka tersebut dalam bentuk .41. Tentu saja, pengguna yang ingin memeriksa program untuk kemungkinan memasukkan data yang salah secara lengkap akan melihat sesuatu seperti:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
Berdasarkan persyaratan ini dan contoh yang Anda lihat di atas, kode Anda kemungkinan besar berisi semacam loop. Jika, saat menguji aplikasi, Anda menyadari bahwa loop tidak berhenti, Anda dapat menghentikan eksekusi program dengan kombinasi ctrl-c (terkadang beberapa kali). Anda sudah mengetahui cara mengkompilasi dan menjalankan suatu program. Jika Anda ingin memeriksa apakah program Anda berfungsi dengan benar, menggunakan utilitas check50, masukkan baris berikut di terminal:
check50 2015.fall.pset1.greedy greedy.c
Dan jika Anda ingin bermain-main dengan program yang dibuat oleh asisten kursus ini, tulis perintah berikut:
~cs50/pset1/greedy

Cara memvalidasi kode Anda dan mendapatkan nilai

  1. Pilihan 1

    Jika penting bagi Anda untuk memeriksa kebenaran kode, dan tidak mendapatkan nilai akhir, Anda dapat memeriksa dan memperbaikinya menggunakan perintah.

    check50 2015.fall.pset1.name name.c

    dimasukkan di baris terminal IDE CS50? di mana namenama file tugas Anda.

  2. pilihan 2

    Jika Anda ingin mendapatkan nilai (pada dasarnya sama dengan menjalankan check50, tetapi dengan mengingat hasilnya dan mengisi beberapa formulir dalam bahasa Inggris, ikuti langkah-langkah berikut:

    • Langkah 1 dari 2

      1. Jika aplikasi sudah siap, login ke IDE CS50.
      2. Di sudut kiri atas IDE CS50, di dalam browser filenya, bukan di jendela terminal, klik kiri atau klik kanan pada file hello.c Anda (yang terletak di direktori pset1) dan klik Unduh. Anda akan menemukan bahwa browser telah memuat hello.c.
      3. Ulangi untuk air.c.
      4. Ulangi untuk mario.c.
      5. Ulangi untuk serakah.c.
      6. Di tab atau jendela terpisah, masuk ke CS50 Submit .
      7. Klik Kirim di sudut kiri bawah jendela.
      8. Di bawah Kumpulan Masalah 1 di jendela yang muncul, klik Unggah Pengajuan Baru.
      9. Di jendela yang muncul, klik Tambahkan file…. Sebuah jendela bernama Open Files akan muncul.
      10. Arahkan ke lokasi tempat hello.c diunduh. Biasanya terletak di folder Unduhan atau di folder yang ditetapkan secara default untuk Anda unduh. Setelah Anda menemukan hello.c, klik sekali untuk menandainya, lalu klik Buka.
      11. Klik Tambahkan file... lagi dan jendela Open Files akan muncul lagi.
      12. Sekarang temukan file water.c dengan cara yang sama. Klik di atasnya, lalu klik Buka (atau “Buka”).
      13. Sekarang temukan mario.c. Dan juga klik dan buka dengan cara yang sama.
      14. Semuanya sama dengan file serakah.c.
      15. Klik Mulai unggah untuk mulai mengunggah file Anda ke server CS50.
      16. Pada layar yang muncul, Anda akan melihat jendela berlabel No File Selected. Jika Anda menggerakkan kursor mouse ke sisi kiri layar, Anda akan melihat daftar file yang telah Anda unduh. Klik masing-masing untuk mengonfirmasi konten masing-masing. (Tidak perlu mengklik tombol atau ikon lain). Jika Anda yakin siap mengirimkan file untuk verifikasi, anggap saja Anda sudah selesai! Jika Anda ingin memeriksa kembali kode Anda sendiri atau memperbaiki apa pun, kembali ke Pengiriman CS50 dan ulangi langkah-langkah ini. Anda dapat mengirim ulang sebanyak yang Anda mau; Hanya kiriman terbaru yang akan dievaluasi.
  3. Langkah 2 dari 2 (tidak diperlukan evaluasi, jika itu =))

    Sekarang buka https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x di mana Anda akan menemukan formulir khusus. Di dalamnya Anda perlu menjawab beberapa pertanyaan teoretis, lalu klik Kirim di bawahnya.

Pertanyaan dengan tanda bintang wajib diisi:
  • Baiklah, seharusnya kita sudah melihat yang ini datang! Hanya dalam beberapa kalimat, apa itu perpustakaan? * (Jelaskan secara singkat apa itu perpustakaan)
  • Hanya dalam beberapa kalimat, peran apa yang #include <cs50.h> dimainkan ketika Anda menulisnya di atas suatu program? *(apa peran baris #include <cs50.h> yang muncul di bagian atas beberapa program?)
  • Menurut Anda, berapa jam yang Anda habiskan untuk Kumpulan Masalah 0: Goresan?
  • Menurut Anda, berapa jam yang Anda habiskan untuk Kumpulan Masalah 1: C?
  • Apa pendapat Anda tentang CS50x sejauh ini? *(Pendapat Anda tentang CS50 saat ini, pilih opsi suka atau tidak suka)
  • Pernahkah Anda meminta bantuan teman sekelas atau staf melalui Grup Facebook CS50 di http://www.facebook.com/groups/cs50? *(sudahkah kamu meminta bantuan siswa atau asisten lain di grup facebook)
  • Pernahkah Anda meminta bantuan teman sekelas atau staf melalui Subreddit CS50s di http://www.reddit.com/r/cs50 *(sudahkah Anda meminta bantuan siswa atau asisten lain melalui Subreddit)
  • Pernahkah Anda meminta bantuan teman sekelas atau staf melalui Twitter menggunakan @cs50 atau #cs50? *(sudahkah Anda meminta bantuan siswa atau TA lain di Twitter menggunakan @cs50 atau #cs50).
Teman-teman, jika Anda memiliki pertanyaan, tulislah di komentar di bawah panduan ini. Jika Anda belum mencapai JavaRush level 5 untuk menerima undangan info, kami menyarankan Anda melakukannya. Gratis, menarik, dan tidak terlalu sulit.

Sumber daya kode:

  1. Kuliah ketiga

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. Kuliah keempat

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

literatur tambahan

http://cpp.com.ru/kr_cbook - Buku klasik C versi Rusia dari penulis bahasa tersebut - Brian Kernighan dan Dennis Ritchie. Dikenal luas di kalangan sempit sebagai K&R. Namun terjemahannya bukan edisi terbaru. Baca tiga bab pertama. Bahannya akan lebih banyak dari yang Anda butuhkan, tetapi cukup untuk memecahkan masalah. https://computer.howstuffworks.com/c.htm adalah sumber yang direkomendasikan oleh penulis CS50. Dalam bahasa Inggris. Halaman 1-7, 9 dan 10.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION