JavaRush /Java Blog /Random-TL /Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 ...
Masha
Antas

Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 at 4)

Nai-publish sa grupo
Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 at 4) - 1Mga kaibigan, maaari kang kumuha ng mga pangunahing teoretikal na impormasyon mula sa mga tala sa seminar . Doon, bilang karagdagan sa mga pangunahing kaalaman ng C, ito ay nagsasabi kung paano kumonekta sa isang espesyal na cloud IDE CS50 (ito ay dapat gawin upang patakbuhin at suriin ang mga gawain), at inilalarawan ang mga pangunahing kinakailangang Linux command at mga istruktura ng wika. Kung ang materyal na ipinakita sa panayam at mga tala tungkol sa C ay hindi sapat para sa iyo, bumaling sa ibang mga mapagkukunan. Halimbawa, ang mga nakalista sa dulo ng artikulong ito. Sa paksang " Karagdagang materyales "
  • Mga layunin sa unang linggo
  • IDE CS50
  • Pag-update ng command line at workbench
  • Nagtatrabaho sa IDE
  • Hello, C!
  • Mga bug?
  • Pagsusuri ng pagpapatunay: pagsusuri ng check50
  • C Basics: Paghahambing sa Scratch
  • Mga Pangunahing Uri ng Data sa C
  • Mga Aklatan C
  • Hello C muli: pagsusuri ng syntax ng pinakasimpleng mga programa
  • Kaunti pa tungkol sa I/O sa C
Mga materyales sa paksang ito:
  • Validated data entry: mga espesyal na function ng cs50.h library
  • Gawain 1. Matalinong pagkalkula ng konsumo ng tubig
  • Gawain 2. Kasama natin si Mario!
  • Gawain 3. Oras para makakuha ng pagbabago
  • Paano i-validate ang iyong code at makakuha ng mga marka
  • Mapagkukunan ng code
  • karagdagang panitikan

Validated data entry: mga espesyal na function ng cs50.h library

Upang gawing mas maginhawa ang kursong ito, bumuo kami ng isang espesyal na library CS50, na, sa partikular, ay may napakakapaki-pakinabang na mga function para sa pagproseso ng data na ipinasok ng user.
  • GetString()binabasa ang string na ipinasok ng user;

  • GetInt()binabasa ang string na ipinasok ng user at sinusuri kung naglalaman ito ng integer;

  • GetFloat()binabasa ang string na ipinasok ng user at sinusuri kung naglalaman ito ng floating point number;

  • GetLongLong()binabasa ang string na ipinasok ng user at sinusuri kung naglalaman ito ng mahabang totoong numero.

Gawain 1. Matalinong pagkalkula ng konsumo ng tubig

Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 at 4) - 2Ito ay lohikal: kapag mas matagal kang naliligo, mas maraming tubig ang ginugugol sa prosesong ito. Alamin natin kung magkano? Kahit na halos hindi bukas ang iyong shower, humigit-kumulang 6 na litro ng tubig ang umaagos mula dito kada minuto. At ito ay 12 bote ng tubig na dala mo para inumin. Karaniwan ang isang tao ay naliligo sa loob ng halos 10 minuto. Sa kabuuan, upang maghugas, kailangan mo ng 120 kalahating litro na bote. medyo marami! Lumikha ng isang file water.csa iyong ~/workspace/pset1. Dapat bilangin ng programa kung ilang bote ng tubig ang ginagamit para sa shower depende sa oras. Yan ay:
  1. Ang programa ay nagtatanong sa gumagamit para sa bilang ng mga minuto na ginugol sa shower
  2. Nagpasok ang user ng positive integer
  3. Ipinapakita ng programa ang bilang ng mga bote na ginamit ng gumagamit.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Para sa pagiging simple, sa pagkakataong ito ay ipagpapalagay namin na ang gumagamit ay palaging pumapasok sa bilang ng mga minuto nang tama, iyon ay, hindi namin sinusuri kung ang numero na ipinasok ay positibo at integer. Mamaya ay matututo tayo kung paano magsulat ng mga tseke, ngunit sa ngayon ay sapat na ito. Upang suriin na ang programa ay tumatakbo nang tama gamit ang check50,kailangan mong ipasok ang sumusunod na linya sa terminal:
check50 2015.fall.pset1.water water.c
At kung gusto mong makita kung paano watergumagana ang program na isinulat ng staff ng kurso, patakbuhin ang sumusunod na command:
~cs50/pset1/water

Gawain 2. Kasama natin si Mario!

Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 at 4) - 3Kilala mo ba ang pinakasikat na tubero sa mundo? Sa tulong ng Nintendo, ang kathang-isip na bigote at medyo mabilog na lalaki sa isang pulang cap ay naging isang bayani para sa ilang henerasyon ng mga manlalaro. Kung hindi mo alam kung sino ang pinag-uusapan natin, narito ang isang link sa klasikong 1985 na laro : magtiwala ka sa akin, maganda pa rin ito at sulit na tingnan! Makakahanap ka rin ng bersyon ng classic na Super Mario para sa mga smartphone o offline na emulator. Kailangan namin ang lahat ng ito para sa pangkalahatang pag-unlad, ito, sa kasamaang-palad, ay hindi pa isang gawain;). At ang gawain ay ito. Sa dulo ng unang antas ng Mario, nakita ng bawat manlalaro ang half-pyramid na ito: Gumawa ng file mario.csa iyong ~/workspace/pset1. Ang aming programa ay gumuhit ng isang half-pyramid na katulad ng nakikita mo, ngunit direkta sa console, nang walang mga graphics: ang bawat isa sa mga bloke ay bubuo ng isang hash icon (#). Kahit na hindi mo pa naiisip kung paano ito gagawin, maniwala ka sa akin: madali ito. Upang gawing mas kawili-wili ang problema, idagdag natin dito ang kakayahang itakda ang taas ng half-pyramid gamit ang isang non-negative integer mula 0 hanggang 23. Ang taas ng pyramid sa larawan ay itinuturing na nasa pinakamataas na lugar, ibig sabihin, katumbas ng 8. Kung mali ang pagpasok ng user sa numero, kailangan mong hilingin sa kanya na gawin itong muli nang isang beses. Pagkatapos ay bumuo (gamit ang printf isang pyramid). Mag-ingat na ihanay ang kaliwang sulok sa ibaba ng iyong half-pyramid sa kaliwang gilid ng terminal window, tulad ng sa halimbawa sa ibaba. Ang may salungguhit na teksto ay kung ano ang ipinasok mismo ng gumagamit.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Pansinin na ang dalawang pinakakanang column ay magkapareho ang taas. Hindi ito nagkakahalaga ng pagbuo ng mga tubo, ulap at si Mario mismo =). Hindi bababa sa para sa gawaing ito. Kung maling data ang ipinasok ng user (hindi numero ang inilagay, o naglagay ng numerong mas mababa sa isa o higit sa 23), dapat hilingin sa kanya ng program na ipasok muli ang data, tulad ng sa halimbawa sa ibaba, kung saan ang tekstong may salungguhit ay kung ano ipinasok ng user mula sa keyboard. Para basahin ang inilagay na string, gamitin ang GetInt. Makakatulong itong suriin kung may maling input, ngunit hindi sa lahat ng kaso.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Upang i-compile ang programa, ipasok ang linya sa terminal:
make mario
o isang mas transparent ngunit mas mahabang bersyon:
clang -o mario mario.c -lcs50
Pagkatapos nito, patakbuhin ang programa para sa pagpapatupad:
./mario
Kung nais mong suriin na ang programa ay tumatakbo nang tama, patakbuhin ang check50:
check50 2015.fall.pset1.mario mario.c
At kung gusto mong laruin ang bersyon ng mario ng course assistants, i-type ang sumusunod na linya:
~cs50/pset1/mario

Gawain 3. Oras para makakuha ng pagbabago

Harvard CS50: Linggo 1 Mga Takdang-aralin (Mga Lektura 3 at 4) - 4Sa aming mga latitude, hindi namin nakita ito, ngunit sa USA, tila, mayroong isang laruan, na ipinapakita sa larawan: ang mga silindro ay idinisenyo para sa mga barya ng iba't ibang mga diameters (at denominasyon), sila ay inilabas ng isang mekanismo ng tagsibol. , at ang unit mismo ay maaaring ikabit sa sinturon ng isang cashier ng bata. Gayunpaman, ano ang mangyayari kung may nagbabayad sa cashier ng malaking bayarin? Isipin kung gaano kahirap magbilang ng mga barya para sa pagbabago. Upang mabawasan ang bilang ng mga inilabas na barya, maaari mong gamitin ang tinatawag na "matakaw" na mga algorithm. Sila, tulad ng tinukoy ng National Institute of Standards and Technology (NIST), ay palaging nakakahanap ng pinakamainam na solusyon sa bawat hakbang sa paglutas ng isang problema, sa pag-aakalang ang panghuling solusyon (nakukuha mula sa kabuuan ng naturang mga hakbang) ay magiging pinakamainam din. Ano ang ibig sabihin nito? Isipin natin na ang isang cashier ay may utang sa isang customer na 41 sentimo bilang sukli, at siya ay may mga silindro ng mga barya sa kanyang sinturon para sa pagbabago sa mga denominasyon na 25, 10, 5 at 1 sentimo. Ang isang cashier na ginagabayan ng isang "matakaw" na algorithm ay agad na nais na magbigay ng maximum sa pinakaunang hakbang. Sa puntong ito, ang pinakamainam o pinakamahusay na solusyon ay ang magbigay ng 25 pence. 41-25 = 16. 16 pence ang natitira upang bayaran. Malinaw, ang 25 pence ay labis, kaya naiwan ang 10. 16-10 = 6. Ngayon ay nagbibigay kami ng 5 pence ayon sa parehong prinsipyo, at pagkatapos ay 1. Kaya, ang mamimili ay makakatanggap lamang ng apat na barya sa mga denominasyon ng 25, 10 , 5 at 1 pence. Lumalabas na ang "matakaw" na sunud-sunod na mga tagubilin para sa pag-isyu ng pera ay pinakamainam hindi lamang para sa kasong ito, kundi pati na rin para sa mga denominasyon ng pera ng US (at ang European Union din). Iyon ay, kung ang cashier ay may sapat na mga barya ng anumang denominasyon, ang algorithm ay pinakamahusay na gagana, iyon ay, ito ay maglalabas ng pinakamababang bilang ng mga barya mula sa lahat ng posibleng mga kaso. Kaya, ano ang pinakamababang bilang ng mga barya na kailangan nating bigyan ng pagbabago? Ito ang aming ikatlong gawain. Lumikha ng isang file greedy.csa iyong direktoryo ~/workspace/pset1. Ibinigay: mga barya sa mga denominasyon na 25, 10, 5, 1 sentimo Ang programa ay dapat:
  1. Tanungin ang user kung magkano ang ibibigay na pagbabago
  2. Kalkulahin ang pinakamababang bilang ng mga barya kung saan maaari mong gawin ito
Tandaan:Gagamit kami ng function GetFloatmula sa CS50 library para sa input at printfmula sa standard na I/O library para sa output. Bilang karagdagan, dapat suriin ng programa ang kawastuhan ng input. Hiniling namin sa iyo na gamitin ang GetFloat, upang payagan ang user na magpasok ng halaga sa dolyar at sentimo na pinaghihiwalay ng isang tuldok. Halimbawa, kung may utang kami ng $9.75, ang user ay dapat magpasok ng 9.75, ngunit hindi $9.75 o 975. Dapat mong tiyakin na ang user ay nagpasok ng isang numero na may katuturan. GetFloatSabihin nating hindi negatibo; ang function mismo ay hindi makakatulong dito . Kung ang gumagamit ay gumawa ng isang maling input, kailangan mong hilingin sa kanya na ulitin ito at patakbuhin ang programa lamang gamit ang tamang data. Mag-ingat sa mga kamalian na likas sa mga numero ng floating point. Halimbawa, ang 0.01 ay hindi maaaring direktang kinakatawan bilang float. Subukang gumamit ng naka-format na output, halimbawa na may 50 decimal na lugar, gamit ang code sa ibaba:
float f = 0.01;
printf("%.50f\n", f);
Sa pamamagitan ng paraan, bago magbilang ng anuman, magiging lohikal na i-convert ang buong halaga sa mga sentimo (at sa parehong oras i-convert ito mula sa float) int, na makakatulong upang maiwasan ang maraming mga error at kahirapan. Upang matiyak na masusuri nang tama ng aming awtomatikong code analyzer ang iyong problema, tiyaking ang huling linya ng output ng iyong programa ay hindi naglalaman ng anumang iba pang impormasyon maliban sa minimum na bilang ng mga barya: isang integer na may \n character pagkatapos nito (mga nag-aaral Alam na alam ng JavaRush kung ano ang pinag-uusapan natin dito =)). Nasa ibaba ang isang halimbawa kung ano ang magiging hitsura ng resulta ng iyong programa.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Dahil sa likas na katangian ng mga numero ng floating point, maaari mong balewalain ang zero at ipasok ang naturang numero sa form na .41. Siyempre, ang mga gumagamit na gustong suriin ang programa para sa posibilidad ng pagpasok ng maling data nang buo ay dapat makakita ng isang bagay tulad ng:
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
Batay sa mga kinakailangang ito at sa halimbawang nakita mo sa itaas, malamang na naglalaman ang iyong code ng ilang uri ng loop. Kung, habang sinusubukan ang application, napagtanto mo na ang loop ay hindi hihinto, maaari mong matakpan ang pagpapatupad ng programa gamit ang kumbinasyon ng ctrl-c (minsan nang maraming beses). Alam mo na kung paano mag-compile at magpatakbo ng isang programa. Kung gusto mong suriin kung gumagana nang tama ang iyong program, gamit ang utility check50, ipasok ang sumusunod na linya sa terminal:
check50 2015.fall.pset1.greedy greedy.c
At kung gusto mong maglaro sa program na ito na ginawa ng mga katulong sa kurso, isulat ang sumusunod na utos:
~cs50/pset1/greedy

Paano i-validate ang iyong code at makakuha ng mga marka

  1. Opsyon 1

    Kung mahalaga para sa iyo na suriin ang kawastuhan ng code, at hindi makakuha ng panghuling grado, maaari mong suriin at itama ito gamit ang command.

    check50 2015.fall.pset1.name name.c

    ipinasok sa terminal line ng CS50 IDE? nasaan nameang pangalan ng iyong task file.

  2. Opsyon 2

    Kung gusto mong makakuha ng mga marka (sa pangkalahatan ay kapareho ng pagpapatakbo ng check50, ngunit sa pag-alala sa resulta at pagsagot sa ilang mga form sa Ingles, pagkatapos ay sundin ang mga hakbang na ito:

    • Hakbang 1 ng 2

      1. Kapag handa na ang mga application, mag-log in sa CS50 IDE.
      2. Sa kaliwang sulok sa itaas ng CS50 IDE, sa loob ng file browser nito, hindi ang terminal window, left-click o right-click sa iyong hello.c file (ang matatagpuan sa pset1 directory) at i-click ang Download. Dapat mong makita na ang browser ay nag-load ng hello.c.
      3. Ulitin para sa tubig.c.
      4. Ulitin para kay mario.c.
      5. Ulitin para sa sakim.c.
      6. Sa isang hiwalay na tab o window, mag-log in sa CS50 Submit .
      7. I-click ang Isumite sa kaliwang sulok sa ibaba ng window.
      8. Sa ilalim ng Set ng Problema 1 sa lalabas na window, mag-click sa Mag-upload ng Bagong Pagsusumite.
      9. Sa lalabas na window, i-click ang Magdagdag ng mga file…. Dapat lumitaw ang isang window na tinatawag na Open Files.
      10. Mag-navigate sa lokasyon kung saan dina-download ang hello.c. Karaniwan itong matatagpuan sa folder ng Mga Download o sa folder na nakatalaga sa iyo bilang default para sa mga pag-download. Kapag nahanap mo na ang hello.c, i-click ito nang isang beses upang markahan ito, pagkatapos ay i-click ang Buksan.
      11. I-click muli ang Magdagdag ng mga file... at lilitaw muli ang window ng Open Files.
      12. Ngayon hanapin ang file water.c sa parehong paraan. I-click ito, pagkatapos ay i-click ang Buksan (o “Buksan”).
      13. Ngayon hanapin si mario.c. At i-click at buksan din sa parehong paraan.
      14. Ang lahat ay pareho sa greedy.c file.
      15. I-click ang Simulan ang pag-upload upang simulan ang pag-upload ng iyong mga file sa mga server ng CS50.
      16. Sa screen na lalabas, makikita mo ang isang window na may label na Walang Napiling File. Kung ililipat mo ang iyong mouse cursor sa kaliwang bahagi ng screen, makikita mo ang isang listahan ng mga file na iyong na-download. Mag-click sa bawat isa upang kumpirmahin ang mga nilalaman ng bawat isa. (Hindi na kailangang mag-click sa iba pang mga pindutan o mga icon). Kung sigurado kang handa ka nang ipadala ang file para sa pag-verify, isaalang-alang na tapos ka na! Kung gusto mong suriin muli ang iyong code sa iyong sarili o ayusin ang anuman, bumalik sa CS50 Submit at ulitin ang mga hakbang na ito. Maaari mong ipadala muli nang maraming beses hangga't gusto mo; Tanging ang pinakahuling pagsusumite ang susuriin.
  3. Hakbang 2 ng 2 (hindi kinakailangan para sa pagsusuri, kung iyon =))

    Pumunta ngayon sa https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x kung saan makakahanap ka ng mga espesyal na form. Sa mga ito kailangan mong sagutin ang ilang mga teoretikal na tanong, at pagkatapos ay i-click ang Isumite sa ilalim ng mga ito.

Ang mga tanong na may mga asterisk ay kinakailangan:
  • Okay, dapat nakita ko ang isang ito na darating! Sa ilang pangungusap lang, ano ang library? * (Ilarawan nang maikli kung ano ang aklatan)
  • Sa ilang pangungusap lang, anong papel ang #include <cs50.h> ginagampanan kapag isinulat mo ito sa ibabaw ng ilang programa? *(ano ang papel ng linyang #include <cs50.h> na lumalabas sa itaas ng ilang program?)
  • Mga ilang oras ang masasabi mong ginugol mo sa Problema Set 0: Scratch?
  • Mga ilang oras ang masasabi mong ginugol mo sa Set ng Problema 1: C?
  • Ano ang iyong opinyon sa CS50x sa ngayon? *(Ang iyong opinyon tungkol sa CS50 sa ngayon, piliin ang opsyon na gusto o hindi gusto)
  • Humingi ka na ba ng tulong sa mga kaklase o staff sa pamamagitan ng CS50s Facebook Group sa http://www.facebook.com/groups/cs50? *(humingi ka na ba ng tulong sa ibang estudyante o katulong sa facebook group)
  • Humingi ka na ba ng tulong sa mga kaklase o staff sa pamamagitan ng CS50s Subreddit sa http://www.reddit.com/r/cs50 *(humingi ka na ba ng tulong mula sa ibang mga mag-aaral o katulong sa pamamagitan ng Subreddit)
  • Humingi ka na ba ng tulong sa mga kaklase o staff sa pamamagitan ng Twitter gamit ang @cs50 o #cs50? *(humingi ka na ba ng tulong sa ibang mga mag-aaral o TA sa Twitter gamit ang @cs50 o #cs50).
Mga kaibigan, kung mayroon kang anumang mga katanungan, isulat ang mga ito sa mga komento sa ilalim ng gabay na ito. Kung hindi mo pa naabot ang JavaRush level 5 para makatanggap ng imbitasyon sa impormasyon, inirerekomenda namin na gawin mo ito. Ito ay libre, kawili-wili at hindi masyadong mahirap.

Mapagkukunan ng code:

  1. Pangatlong lecture

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

  2. Lecture apat

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

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

karagdagang panitikan

http://cpp.com.ru/kr_cbook - Ruso na bersyon ng klasikong aklat sa C mula sa mga may-akda ng wika - Brian Kernighan at Dennis Ritchie. Kilala sa mga makitid na bilog bilang K&R. Ang pagsasalin, gayunpaman, ay hindi sa pinakabagong edisyon. Basahin ang unang tatlong kabanata. Magkakaroon ng kaunting materyal kaysa sa kailangan mo, ngunit sapat na upang malutas ang mga problema. Ang https://computer.howstuffworks.com/c.htm ay isang mapagkukunang inirerekomenda ng mga may-akda ng CS50. Sa Ingles. Pahina 1-7, 9 at 10.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION