JavaRush /Blog Java /Random-MS /Harvard CS50: Tugasan Minggu 1 (Kuliah 3 dan 4)
Masha
Tahap

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

Diterbitkan dalam kumpulan
Harvard CS50: Tugasan Minggu 1 (Kuliah 3 dan 4) - 1Rakan-rakan, anda boleh mengumpul maklumat teori asas daripada nota seminar . Di sana, sebagai tambahan kepada asas-asas C, ia memberitahu bagaimana untuk menyambung ke awan khas IDE CS50 (ini mesti dilakukan untuk menjalankan dan menyemak tugas), dan menerangkan perintah Linux asas yang diperlukan dan struktur bahasa. Jika bahan yang dibentangkan dalam kuliah dan nota tentang C tidak mencukupi untuk anda, beralih kepada sumber lain. Contohnya, yang disenaraikan di penghujung artikel ini. Dalam topik " Bahan tambahan "
  • Matlamat minggu pertama
  • IDE CS50
  • Kemas kini baris arahan dan meja kerja
  • Bekerja dalam IDE
  • Hello, C!
  • pepijat?
  • Semakan pengesahan: ujian cek50
  • Asas C: Perbandingan dengan Gores
  • Jenis Data Asas dalam C
  • Perpustakaan C
  • Hello C sekali lagi: analisis sintaks program paling mudah
  • Sedikit lagi tentang I/O dalam C
Bahan dalam topik ini:
  • Kemasukan data yang disahkan: fungsi khas perpustakaan cs50.h
  • Tugasan 1. Pengiraan pintar penggunaan air
  • Tugasan 2. Mario bersama kami!
  • Tugasan 3. Masa untuk mendapatkan perubahan
  • Bagaimana untuk mengesahkan kod anda dan mendapatkan markah
  • Sumber kod
  • sastera tambahan

Kemasukan data yang disahkan: fungsi khas perpustakaan cs50.h

Untuk menjadikan kursus ini lebih mudah, kami telah membangunkan perpustakaan khas CS50, yang, khususnya, mempunyai fungsi yang sangat berguna untuk memproses data yang dimasukkan pengguna.
  • GetString()membaca rentetan yang dimasukkan oleh pengguna;

  • GetInt()membaca rentetan yang dimasukkan oleh pengguna dan menyemak sama ada ia mengandungi integer;

  • GetFloat()membaca rentetan yang dimasukkan oleh pengguna dan menyemak sama ada ia mengandungi nombor titik terapung;

  • GetLongLong()membaca rentetan yang dimasukkan oleh pengguna dan menyemak sama ada ia mengandungi nombor nyata yang panjang.

Tugasan 1. Pengiraan pintar penggunaan air

Harvard CS50: Tugasan Minggu 1 (Kuliah 3 dan 4) - 2Ia logik: lebih lama anda mandi, lebih banyak air dibelanjakan untuk proses ini. Mari kita fikirkan berapa banyak? Walaupun pancuran mandian anda hampir tidak terbuka, kira-kira 6 liter air mengalir keluar daripadanya seminit. Dan ini adalah 12 botol air yang anda bawa untuk diminum. Biasanya seseorang mandi selama kira-kira 10 minit. Secara keseluruhan, untuk mencuci, anda memerlukan 120 botol setengah liter. Agak banyak! Buat fail water.cdalam ~/workspace/pset1. Program ini harus mengira berapa banyak botol air digunakan untuk mandi bergantung pada masa. Itu dia:
  1. Program ini meminta pengguna untuk bilangan minit yang dihabiskan di bilik mandi
  2. Pengguna memasukkan integer positif
  3. Program ini memaparkan bilangan botol yang digunakan oleh pengguna.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Untuk kesederhanaan, kali ini kita akan menganggap bahawa pengguna sentiasa memasukkan bilangan minit dengan betul, iaitu, kita tidak menyemak sama ada nombor yang dimasukkan adalah positif dan integer. Nanti kita akan belajar menulis cek, tetapi buat masa ini sudah cukup. Untuk memastikan program berjalan dengan betul menggunakan check50,anda perlu memasukkan baris berikut dalam terminal:
check50 2015.fall.pset1.water water.c
Dan jika anda ingin melihat bagaimana program wateryang ditulis oleh kakitangan kursus berfungsi, jalankan arahan berikut:
~cs50/pset1/water

Tugasan 2. Mario bersama kami!

Harvard CS50: Tugasan Minggu 1 (Kuliah 3 dan 4) - 3Adakah anda tahu tukang paip paling terkenal di dunia? Dengan bantuan Nintendo, lelaki bermisai fiksyen dan sedikit gempal berkopiah merah itu telah menjadi wira untuk beberapa generasi pemain. Jika anda tidak tahu siapa yang kami bincangkan, berikut ialah pautan ke permainan klasik 1985 : percayalah, ia masih bagus dan berbaloi untuk dilihat! Anda juga boleh menemui versi Super Mario klasik untuk telefon pintar atau emulator luar talian. Kami memerlukan semua ini untuk pembangunan umum, ini, malangnya, bukan tugas lagi;). Dan tugasnya adalah ini. Pada penghujung tahap Mario yang pertama, setiap pemain melihat separuh piramid ini: Buat fail mario.cdalam ~/workspace/pset1. Program kami akan melukis separuh piramid yang serupa dengan yang anda lihat, tetapi terus dalam konsol, tanpa grafik: setiap blok akan terdiri daripada ikon cincang (#). Walaupun anda masih belum mengetahui cara melakukannya, percayalah: ia mudah. Untuk menjadikan masalah lebih menarik, mari kita tambahkan padanya keupayaan untuk menetapkan ketinggian separuh piramid menggunakan integer bukan negatif dari 0 hingga 23. Ketinggian piramid dalam gambar dianggap berada di tempat tertinggi, iaitu sama dengan 8. Jika pengguna memasukkan nombor dengan salah, anda perlu memintanya melakukannya sekali lagi. Kemudian jana (menggunakan printf piramid). Berhati-hati untuk menjajarkan sudut kiri bawah separuh piramid anda dengan tepi kiri tetingkap terminal, seperti dalam contoh di bawah. Teks yang digariskan ialah apa yang pengguna masukkan sendiri.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Perhatikan bahawa dua lajur paling kanan adalah ketinggian yang sama. Ia tidak bernilai menjana paip, awan dan Mario sendiri lagi =). Sekurang-kurangnya untuk tugasan ini. Jika pengguna memasukkan data yang salah (memasukkan bukan nombor, atau memasukkan nombor yang kurang daripada satu atau lebih daripada 23), program harus memintanya memasukkan data sekali lagi, seperti dalam contoh di bawah, di mana teks yang digariskan adalah apa pengguna masuk dari papan kekunci. Untuk membaca rentetan yang dimasukkan, gunakan GetInt. Ia boleh membantu menyemak input yang salah, tetapi tidak dalam semua kes.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Untuk menyusun atur cara, masukkan baris dalam terminal:
make mario
atau versi yang lebih telus tetapi lebih panjang:
clang -o mario mario.c -lcs50
Selepas itu, jalankan program untuk pelaksanaan:
./mario
Jika anda ingin menyemak sama ada program berjalan dengan betul, jalankan check50:
check50 2015.fall.pset1.mario mario.c
Dan jika anda ingin bermain dengan versi pembantu kursus mario, taip baris berikut:
~cs50/pset1/mario

Tugasan 3. Masa untuk mendapatkan perubahan

Harvard CS50: Tugasan Minggu 1 (Kuliah 3 dan 4) - 4Di latitud kami, kami tidak melihat ini, tetapi di Amerika Syarikat, nampaknya, terdapat mainan sedemikian, ditunjukkan dalam foto: silinder direka untuk syiling dengan diameter yang berbeza (dan denominasi), ia dikeluarkan oleh mekanisme spring. , dan unit itu sendiri boleh dilekatkan pada tali pinggang juruwang kanak-kanak. Namun, apa yang berlaku jika seseorang membayar juruwang dengan bil yang besar? Bayangkan betapa sukarnya mengira syiling untuk pertukaran. Untuk meminimumkan bilangan syiling yang dikeluarkan, anda boleh menggunakan algoritma yang dipanggil "tamak". Mereka, seperti yang ditakrifkan oleh Institut Piawaian dan Teknologi Kebangsaan (NIST), sentiasa mencari penyelesaian optimum pada setiap langkah dalam menyelesaikan masalah, dengan mengandaikan bahawa penyelesaian akhir (diperolehi daripada keseluruhan langkah tersebut) juga akan optimum. Apakah maksudnya? Bayangkan seorang juruwang berhutang 41 sen kepada pelanggan sebagai pertukaran, dan dia mempunyai silinder syiling pada tali pinggangnya untuk menukar denominasi 25, 10, 5 dan 1 sen. Juruwang yang dipandu oleh algoritma "tamak" akan serta-merta mahu memberikan maksimum pada langkah pertama. Pada ketika ini, penyelesaian yang optimum atau terbaik adalah dengan memberikan 25 pence. 41-25 = 16. Tinggal 16 pence untuk dibayar. Jelas sekali, 25 pence adalah terlalu banyak, sehingga meninggalkan 10. 16-10 = 6. Sekarang kita memberikan 5 pence mengikut prinsip yang sama, dan kemudian 1. Oleh itu, pembeli akan menerima hanya empat syiling dalam denominasi 25, 10 , 5 dan 1 sen. Ternyata arahan langkah demi langkah yang "tamak" untuk mengeluarkan wang adalah optimum bukan sahaja untuk kes ini, tetapi juga untuk denominasi mata wang AS (dan juga Kesatuan Eropah). Iaitu, jika juruwang mempunyai syiling yang mencukupi dari mana-mana denominasi, algoritma akan berfungsi dengan baik, iaitu, ia akan mengeluarkan bilangan minimum syiling dari semua kes yang mungkin. Jadi, berapakah jumlah minimum syiling yang perlu kita berikan perubahan? Ini adalah tugas ketiga kami. Buat fail greedy.cdalam direktori anda ~/workspace/pset1. Diberikan: syiling dalam denominasi 25, 10, 5, 1 sen Program harus:
  1. Tanya pengguna berapa banyak perubahan yang perlu diberikan
  2. Kira bilangan minimum syiling yang anda boleh lakukan ini
Catatan:Kami akan menggunakan fungsi GetFloatdaripada perpustakaan CS50 untuk input dan printfdaripada perpustakaan I/O standard untuk output. Di samping itu, program mesti menyemak ketepatan input. Kami meminta anda menggunakan GetFloat, untuk membenarkan pengguna memasukkan nilai dalam dolar dan sen yang dipisahkan dengan titik. Contohnya, jika kita berhutang $9.75, pengguna harus memasukkan 9.75, tetapi bukan $9.75 atau 975. Anda mesti memastikan bahawa pengguna memasukkan nombor yang masuk akal. GetFloatKatakan bukan negatif; fungsi itu sendiri tidak akan membantu dengan ini . Jika pengguna membuat input yang salah, anda perlu memintanya mengulanginya dan menjalankan program hanya dengan data yang betul. Berhati-hati dengan ketidaktepatan yang wujud dalam nombor titik terapung. Sebagai contoh, 0.01 tidak boleh diwakili secara langsung sebagai float. Cuba gunakan output berformat, contohnya dengan 50 tempat perpuluhan, menggunakan kod di bawah:
float f = 0.01;
printf("%.50f\n", f);
Ngomong-ngomong, sebelum mengira apa-apa, adalah logik untuk menukar keseluruhan jumlah kepada sen (dan pada masa yang sama menukarnya dari floatkepada int), yang akan membantu mengelakkan banyak kesilapan dan kesukaran. Untuk memastikan penganalisis kod automatik kami dapat menyemak masalah anda dengan betul, pastikan baris terakhir keluaran program anda tidak mengandungi sebarang maklumat lain selain bilangan minimum syiling: integer dengan aksara \n selepasnya (mereka yang mengkaji JavaRush sangat mengetahui apa yang kita bincangkan di sini =)). Di bawah ialah contoh rupa hasil program anda.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Memandangkan sifat nombor titik terapung, anda boleh mengabaikan sifar dan memasukkan nombor sedemikian dalam bentuk .41. Sudah tentu, pengguna yang ingin menyemak program untuk kemungkinan memasukkan data yang salah sepenuhnya harus 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 keperluan ini dan contoh yang anda lihat di atas, kod anda berkemungkinan besar mengandungi beberapa jenis gelung. Jika, semasa menguji aplikasi, anda menyedari bahawa gelung tidak berhenti, anda boleh mengganggu pelaksanaan program dengan gabungan ctrl-c (kadangkala beberapa kali). Anda sudah tahu cara menyusun dan menjalankan program. Jika anda ingin menyemak sama ada program anda berfungsi dengan betul, menggunakan utiliti check50, masukkan baris berikut dalam terminal:
check50 2015.fall.pset1.greedy greedy.c
Dan jika anda ingin bermain dengan program ini yang dibuat oleh pembantu kursus, tulis arahan berikut:
~cs50/pset1/greedy

Bagaimana untuk mengesahkan kod anda dan mendapatkan markah

  1. Pilihan 1

    Jika penting untuk anda menyemak ketepatan kod, dan bukan untuk mendapatkan gred akhir, anda boleh menyemak dan membetulkannya menggunakan arahan.

    check50 2015.fall.pset1.name name.c

    dimasukkan dalam talian terminal CS50 IDE? di manakah namenama fail tugas anda.

  2. Pilihan 2

    Jika anda ingin mendapatkan gred (pada asasnya sama seperti menjalankan check50, tetapi dengan mengingati keputusan dan mengisi beberapa borang dalam bahasa Inggeris, kemudian ikuti langkah berikut:

    • Langkah 1 daripada 2

      1. Apabila aplikasi sedia, log masuk ke CS50 IDE.
      2. Di sudut kiri atas IDE CS50, dalam pelayar failnya, bukan tetingkap terminal, klik kiri atau klik kanan pada fail hello.c anda (yang terletak dalam direktori pset1) dan klik Muat turun. Anda sepatutnya mendapati bahawa penyemak imbas telah memuatkan hello.c.
      3. Ulang untuk air.c.
      4. Ulang untuk mario.c.
      5. Ulang kerana tamak.c.
      6. Dalam tab atau tetingkap yang berasingan, log masuk ke CS50 Submit .
      7. Klik Hantar di sudut kiri bawah tetingkap.
      8. Di bawah Set Masalah 1 dalam tetingkap yang muncul, klik pada Muat Naik Penyerahan Baharu.
      9. Dalam tetingkap yang muncul, klik Tambah fail…. Tetingkap yang dipanggil Open Files akan muncul.
      10. Navigasi ke lokasi tempat hello.c dimuat turun. Ia biasanya terletak dalam folder Muat Turun atau dalam folder yang ditetapkan kepada anda secara lalai untuk muat turun. Sebaik sahaja anda menemui hello.c, klik padanya sekali untuk menandakannya, kemudian klik Buka.
      11. Klik Tambah fail... sekali lagi dan tetingkap Open Files akan muncul semula.
      12. Sekarang cari fail water.c dengan cara yang sama. Klik padanya, kemudian klik Buka (atau "Buka").
      13. Sekarang cari mario.c. Dan juga klik dan buka dengan cara yang sama.
      14. Semuanya sama dengan fail greedy.c.
      15. Klik Mula muat naik untuk mula memuat naik fail anda ke pelayan CS50.
      16. Pada skrin yang muncul, anda akan melihat tetingkap berlabel Tiada Fail Dipilih. Jika anda menggerakkan kursor tetikus anda ke sebelah kiri skrin, anda akan melihat senarai fail yang telah anda muat turun. Klik pada setiap satu untuk mengesahkan kandungan setiap satu. (Tidak perlu klik pada butang atau ikon lain). Jika anda pasti bahawa anda sudah bersedia untuk menghantar fail untuk pengesahan, pertimbangkan bahawa anda telah selesai! Jika anda ingin menyemak semula kod anda sendiri atau membetulkan apa-apa, kembali ke CS50 Submit dan ulangi langkah ini. Anda boleh menghantar semula seberapa banyak yang anda mahu; Hanya penyerahan terkini akan dinilai.
  3. Langkah 2 daripada 2 (ia tidak diperlukan untuk penilaian, jika itu =))

    Sekarang pergi ke https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x di mana anda akan menemui borang khas. Di dalamnya anda perlu menjawab beberapa soalan teori, dan kemudian klik Hantar di bawahnya.

Soalan dengan asterisk diperlukan:
  • Baiklah, sepatutnya melihat yang ini datang! Dalam hanya beberapa ayat, apakah perpustakaan? * (Terangkan secara ringkas apa itu perpustakaan)
  • Dalam beberapa ayat sahaja, apakah peranan yang #include <cs50.h> dimainkan apabila anda menulisnya di atas beberapa program? *(apakah peranan baris #include <cs50.h> yang muncul di bahagian atas beberapa program?)
  • Kira-kira berapa jam yang anda katakan yang anda habiskan untuk Set Masalah 0: Gores?
  • Kira-kira berapa jam yang anda akan katakan yang anda habiskan untuk Set Masalah 1: C?
  • Apakah pendapat anda tentang CS50x setakat ini? *(Pendapat anda tentang CS50 pada masa ini, pilih pilihan suka atau tidak suka)
  • Pernahkah anda meminta bantuan daripada rakan sekelas atau kakitangan melalui Kumpulan Facebook CS50s di http://www.facebook.com/groups/cs50? *(adakah anda meminta bantuan pelajar atau pembantu lain dalam kumpulan facebook)
  • Pernahkah anda meminta bantuan daripada rakan sekelas atau kakitangan melalui CS50s Subreddit di http://www.reddit.com/r/cs50 *(adakah anda meminta bantuan daripada pelajar atau pembantu lain melalui Subreddit)
  • Pernahkah anda meminta bantuan daripada rakan sekelas atau kakitangan melalui Twitter menggunakan @cs50 atau #cs50? *(pernahkah anda meminta bantuan pelajar atau TA lain di Twitter menggunakan @cs50 atau #cs50).
Rakan-rakan, jika anda mempunyai sebarang soalan, tuliskannya dalam ulasan di bawah panduan ini. Jika anda belum mencapai JavaRush tahap 5 untuk menerima jemputan maklumat, kami mengesyorkan anda berbuat demikian. Ia percuma, menarik dan tidak terlalu sukar.

Sumber kod:

  1. Kuliah tiga

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

  2. Kuliah empat

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

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

sastera tambahan

http://cpp.com.ru/kr_cbook - Versi Rusia buku klasik tentang C daripada pengarang bahasa - Brian Kernighan dan Dennis Ritchie. Dikenali secara meluas dalam kalangan sempit sebagai K&R. Terjemahan itu, bagaimanapun, bukanlah daripada edisi terbaru. Baca tiga bab pertama. Akan ada lebih sedikit bahan daripada yang anda perlukan, tetapi cukup untuk menyelesaikan masalah. https://computer.howstuffworks.com/c.htm ialah sumber yang disyorkan oleh pengarang CS50. Dalam Bahasa Inggeris. Halaman 1-7, 9 dan 10.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION