JavaRush /Java блогу /Random-KY /Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар)
Masha
Деңгээл

Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар)

Группада жарыяланган
Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар) - 1Достор, сиз семинардын конспекттеринен негизги теориялык маалыматтарды ала аласыз . Ал жерде, C негиздеринен тышкары, ал атайын IDE CS50 булутуна кантип туташса болорун сүрөттөйт (бул тапшырмаларды аткаруу жана текшерүү үчүн жасалышы керек) жана негизги керектүү Linux буйруктарын жана тил структураларын сүрөттөйт. Эгерде сиз лекцияда жана конспекттерде С жөнүндө жетиштүү материал таппасаңыз, башка булактарга кайрылыңыз. Мисалы, ушул макаланын аягында саналып өткөндөр. " Кошумча материалдар " темасында
  • Биринчи жуманын максаттары
  • IDE CS50
  • Буйрук сабы жана жумушчу стол жаңыртылышы
  • IDEде иштөө
  • Салам!
  • Мүчүлүштүктөрбү?
  • Текшерүү текшерүү: check50 тест
  • C Негиздери: Scratch менен салыштыруу
  • С тorндеги маалыматтардын негизги түрлөрү
  • Китепканалар C
  • Дагы бир жолу Hello C: эң жөнөкөй программалардын синтаксисин талдоо
  • C тorнде I/O жөнүндө бир аз көбүрөөк
Бул темадагы материалдар:
  • Текшерилген маалыматтарды киргизүү: cs50.h китепканасынын өзгөчө функциялары
  • Тапшырма 1. Сууну керектөөнү акылдуу эсептөө
  • Тапшырма 2. Марио биз менен!
  • Тапшырма 3. Өзгөртүү үчүн убакыт
  • Кодуңузду кантип текшерип, белгилерди алса болот
  • Код булагы
  • кошумча адабияттар

Текшерилген маалыматтарды киргизүү: cs50.h китепканасынын өзгөчө функциялары

Бул курсту ыңгайлуураак кылуу үчүн биз атайын CS50 китепканасын иштеп чыктык, ал, атап айтканда, колдонуучу киргизген маалыматтарды иштетүү үчүн абдан пайдалуу функцияларга ээ.
  • GetString()колдонуучу киргизген сапты окуйт;

  • GetInt()колдонуучу киргизген сапты окуйт жана анда бүтүн сан бар же жок экенин текшерет;

  • GetFloat()колдонуучу киргизген сапты окуйт жана анда калкыма чекиттин саны бар же жок экенин текшерет;

  • GetLongLong()колдонуучу киргизген сапты окуйт жана анда узун реалдуу сан бар же жок экенин текшерет.

Тапшырма 1. Сууну керектөөнү акылдуу эсептөө

Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар) - 2Бул логикалуу: душка канчалык көп түшсөңүз, бул процесске ошончолук көп суу сарпталат. Келгиле, канча экенин аныктап көрөлү? Душуңуз араң ачылса да, андан мүнөтүнө болжол менен 6 литр суу агып чыгат. Ал эми бул 12 бөтөлкө сууну ичүү үчүн алып жүрөсүң. Көбүнчө адам 10 мүнөттөй душка кабылат.Жуу үчүн бардыгы болуп 120 жарым литрлик бөтөлкө керек. Абдан көп! Сиздин . water.c_ ~/workspace/pset1Программа убакытка жараша душка канча бөтөлкө суу колдонуларын санаш керек. Башкача айтканда:
  1. Программа колдонуучудан душта канча мүнөт өткөргөндүгүн сурайт
  2. Колдонуучу оң бүтүн сан киргизет
  3. Программа колдонуучу колдонгон бөтөлкөлөрдүн санын көрсөтөт.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Жөнөкөйлүк үчүн бул жолу колдонуучу мүнөттөрдүн санын ар дайым туура киргизет деп ойлойбуз, башкача айтканда, киргизилген сан оң жана бүтүн сан экенин текшербейбиз. Кийинчерээк чектерди кантип жазууну үйрөнөбүз, бирок азырынча бул жетиштүү. Программанын туура иштеп жатканын текшерүү үчүн check50,терминалга төмөнкү сапты киргизүү керек:
check50 2015.fall.pset1.water water.c
waterКурстун кызматкерлери жазган программа кандай иштээрин көргүңүз келсе , төмөнкү буйрукту аткарыңыз:
~cs50/pset1/water

Тапшырма 2. Марио биз менен!

Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар) - 3Дүйнөдөгү эң атактуу сантехникти билесизби? Nintendонун жардамы менен ойдон чыгарылган мурутчан жана бир аз толмочтуу кызыл калпакчан жигит оюнчулардын бир нече мууну үчүн баатыр болуп калды. Эгер ким жөнүндө сөз болуп жатканын билбесеңиз, бул жерде 1985-жылкы классикалык оюнга шилтеме : мага ишениңиз, ал дагы эле жакшы жана текшерип көрүүгө татыктуу! Ошондой эле смартфондор же оффлайн эмуляторлору үчүн классикалык Super Mario versionсын таба аласыз. Мунун баары бизге жалпы өнүгүү үчүн керек, бул, тилекке каршы, азырынча милдет эмес;). Ал эми милдет бул. Биринчи Марио деңгээлинин аягында ар бир оюнчу бул жарым пирамиданы көрдү mario.c: ~/workspace/pset1. Биздин программа сиз көргөнгө окшош жарым пирамиданы тартат, бирок түздөн-түз консолдо графикасы жок: блоктордун ар бири хэш белгисинен (#) турат. Муну кантип жасоону азырынча түшүнө элек болсоңуз да, мага ишениңиз: бул оңой. Маселени кызыктуураак кылуу үчүн ага жарым пирамиданын бийиктигин 0дөн 23кө чейинки терс эмес бүтүн сандын жардамы менен коюу мүмкүнчүлүгүн кошолу. Сүрөттөгү пирамиданын бийиктиги эң бийик жерде деп эсептелет, башкача айтканда, 8ге барабар. Эгерде колдонуучу номерди туура эмес киргизсе, аны кайра бир жолу жасоону суранышыңыз керек. Андан кийин генерациялаңыз (printf пирамидасын колдонуу менен). Төмөндөгү мисалдагыдай жарым пирамидаңыздын ылдыйкы сол бурчун терминалдык терезенин сол чети менен тегиздөөдөн сак болуңуз. Асты сызылган текстти колдонуучу өзү киргизет.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Эң оң жактагы эки мамычанын бийиктиги бирдей экенин байкаңыз. Бул түтүктөрдү, булуттарды жана Марио өзү дагы =) генерациялоонун кереги жок. Жок дегенде бул иш үчүн. Эгерде колдонуучу туура эмес маалыматтарды киргизсе (санды киргизбесе, же бирден аз же 23төн көп санды киргизсе), программа андан төмөнкү мисалдагыдай маалыматтарды кайра киргизүүнү суранышы керек, ал жерде асты сызылган текст эмне колдонуучу клавиатурадан киргизди. Киргизилген сапты окуу үчүн колдонуңуз GetInt. Бул туура эмес киргизүүнү текшерүүгө жардам берет, бирок бардык учурларда эмес.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Программаны компиляциялоо үчүн терминалга сапты киргизиңиз:
make mario
же ачык-айкын, бирок узун version:
clang -o mario mario.c -lcs50
Андан кийин, программаны аткаруу үчүн иштетиңиз:
./mario
Эгерде сиз программанын туура иштеп жатканын текшергиңиз келсе, төмөнкүнү иштетиңиз check50:
check50 2015.fall.pset1.mario mario.c
Жана эгер сиз курстун жардамчыларынын марио versionсы менен ойногуңуз келсе, төмөнкү сапты териңиз:
~cs50/pset1/mario

Тапшырма 3. Өзгөртүү үчүн убакыт

Harvard CS50: 1-жума тапшырмалары (3 жана 4-лекциялар) - 4Биздин кеңдиктерде биз муну көргөн жокпуз, бирок АКШда сүрөттө көрсөтүлгөн оюнчук бар окшойт: цorндрлер ар кандай диаметрдеги (жана номиналдагы) монеталар үчүн иштелип чыккан, алар пружиналык механизм менен чыгарылат. , ал эми агрегаттын езун бала кассирдин белме-суне бекитсе болот. Бирок, кимдир бирөө кассирге чоң эсеп менен төлөсө эмне болот? Өзгөртүү үчүн тыйындарды эсептөө канчалык кыйынчылыкка дуушар болорун элестетиңиз. Чыгарылган монеталардын санын азайтуу үчүн, сиз "ач көз" деп аталган алгоритмдерди колдоно аласыз. Алар, Улуттук Стандарттар жана Технологиялар Институту (NIST) аныктагандай, акыркы чечим (мындай кадамдардын жыйындысынан алынган) да оптималдуу болот деп эсептеп, маселени чечүүнүн ар бир кадамында ар дайым оптималдуу чечимди табат. Бул эмнени билдирет? Элестетип көрөлү, кассир кардарга акча алмаштыруу үчүн 41 цент карыз жана анын курунда 25, 10, 5 жана 1 цент номиналындагы монеталардын цorндрлери бар. "Ач көз" алгоритмин жетектеген кассир эң биринчи кадамда эле максимум берүүнү каалайт. Бул учурда, оптималдуу же мыкты чечим 25 пенс берүү болмок. 41-25 = 16. Төлөөгө 16 пенс калды. Албетте, 25 пенс өтө эле көп, ошондуктан 10 калтырат. 16-10 = 6. Эми ошол эле принцип боюнча 5 пенс беребиз, анан 1. Ошентип, сатып алуучу 25, 10 номиналындагы төрт гана тыйын алат. , 5 жана 1 пенс. Көрсө, акча чыгаруу боюнча этап-этабы менен "ач көз" көрсөтмөлөр бул иш үчүн гана эмес, АКШнын валюталык номиналдары үчүн (жана Европа Биримдиги үчүн да) оптималдуу экен. Башкача айтканда, кассирде кандайдыр бир номиналдагы тыйындар жетиштүү болсо, алгоритм эң жакшы иштейт, башкача айтканда, бардык мүмкүн болгон учурлардан монеталардын минималдуу санын чыгарат. Ошентип, монеталардын минималдуу саны кандай болушу керек? Бул биздин үчүнчү милдетибиз. greedy.cКаталогуңузда файл түзүңүз ~/workspace/pset1. Берилген: 25, 10, 5, 1 цент номиналындагы монеталар Программада:
  1. Колдонуучудан канча өзгөртүү берүүнү сураңыз
  2. Сиз муну жасай турган монеталардын минималдуу санын эсептеңиз
Эскертүү:GetFloatКиргизүү үчүн CS50 китепканасынан жана printfчыгаруу үчүн стандарттык I/O китепканасынан функцияны колдонобуз . Мындан тышкары, программа киргизүүнүн тууралыгын текшерүү керек. GetFloatКолдонуучуга доллар жана цент менен чекит менен бөлүнгөн маанини киргизүүгө уруксат берүү үчүн колдонууну сурандык . Мисалы, биз $9,75 карыз болсо, колдонуучу 9,75 киргизүү керек, бирок $9,75 же 975. Сиз колдонуучу мааниси бар санды киргизет камсыз кылуу керек. Терс эмес дейли; функциянын өзү буга GetFloatжардам бербейт . Колдонуучу туура эмес киргизсе, аны кайталап, программаны туура маалыматтар менен гана иштетүүсүн суранышыңыз керек. Калкыма чекиттердеги сандарга мүнөздүү болгон так эместиктерден сак болуңуз. Мисалы, 0,01ди түз эле көрсөтүү мүмкүн эмес float. Төмөнкү codeду колдонуп, форматталган чыгарууну, мисалы, 50 ондук орун менен колдонуп көрүңүз:
float f = 0.01;
printf("%.50f\n", f);
Айтмакчы, эч нерсени санаганга чейин, бүт сумманы центке айландыруу (жана ошол эле учурда аны -дан -га айландыруу float) логикалуу болмок int, бул көптөгөн каталардан жана кыйынчылыктардан качууга жардам берет. Биздин автоматтык code анализаторубуз көйгөйүңүздү туура текшере алышы үчүн, программаңыздын чыгарылышынын акыркы сабында монеталардын минималдуу санынан башка эч кандай маалымат жок экенин текшериңиз: андан кийин \n белгиси бар бүтүн сан (изилдөөчүлөр JavaRush бул жерде эмне жөнүндө сөз болуп жатканын жакшы билет =)). Төмөндө программаңыздын натыйжасы кандай болушу керектигинин мисалы келтирилген.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Калкыма чекиттүү сандардын мүнөзүн эске алуу менен, нөлгө көңүл бурбай, мындай санды .41 формасында киргизсе болот. Албетте, программаны туура эмес маалыматтарды толук киргизүү мүмкүнчүлүгүн текшергиси келген колдонуучулар төмөнкүдөй нерсени көрүшү керек:
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
Ушул талаптарга жана сиз жогоруда көргөн мисалга ылайык, сиздин codeуңуз кандайдыр бир циклди камтышы керек. Эгерде тиркемени сынап жатып, цикл токтобой турганын түшүнсөңүз, анда ctrl-c айкалышы менен программанын аткарылышын үзгүлтүккө учурата аласыз (кээде бир нече жолу). Сиз программаны кантип компиляциялоону жана иштетүүнү билесиз. Эгерде сиз программаңыздын туура иштеп жатканын текшергиңиз келсе, утorтаны колдонуп check50, терминалга төмөнкү сапты киргизиңиз:
check50 2015.fall.pset1.greedy greedy.c
Жана эгер сиз курстун ассистенттери жасаган бул программа менен ойногуңуз келсе, төмөнкү буйрукту жазыңыз:
~cs50/pset1/greedy

Кодуңузду кантип текшерип, белгилерди алса болот

  1. 1-вариант

    Эгер сиз codeдун тууралыгын текшерүү үчүн эмес, жыйынтыктоочу баа алуу үчүн маанилүү болсо, сиз буйрукту колдонуп текшерип, оңдосоңуз болот.

    check50 2015.fall.pset1.name name.c

    CS50 IDE терминалдык сабына киргизилген? nameсиздин тапшырма файлыңыздын аты кайда .

  2. 2-вариант

    Эгер сиз бааларды алгыңыз келсе (негизинен check50 менен бирдей, бирок натыйжаны эстеп, англис тorндеги кээ бир формаларды толтуруу менен, анда төмөнкү кадамдарды аткарыңыз:

    • 2ден 1-кадам

      1. Тиркемелер даяр болгондо, CS50 IDEге кириңиз.
      2. CS50 IDEнин жогорку сол бурчунда, анын файл браузеринде, терминал терезесинде эмес, hello.c файлыңызды (pset1 каталогунда жайгашкан) сол же оң баскыч менен чыкылдатып, Жүктөп алуу баскычын басыңыз. Сиз браузер hello.c жүктөгөнүн табышыңыз керек.
      3. Суу үчүн кайталаъыз.c.
      4. mario.c үчүн кайталаңыз.
      5. ач көздүк үчүн кайталаъыз.c.
      6. Өзүнчө өтмөктө же терезеден CS50 Submit'ке кириңиз .
      7. Терезенин төмөнкү сол бурчундагы Тапшыруу баскычын чыкылдатыңыз.
      8. Пайда болгон терезеде Көйгөйлөр топтому 1 астында Жаңы тапшырууну жүктөө баскычын басыңыз.
      9. Пайда болгон терезеде Файлдарды кошуу... чыкылдатыңыз. Open Files деп аталган терезе пайда болушу керек.
      10. hello.c жүктөлүп алынган жерге өтүңүз. Ал, адатта, Жүктөөлөр папкасында же жүктөөлөр үчүн демейки боюнча сизге дайындалган папкада жайгашкан. hello.c табылгандан кийин, аны белгилөө үчүн бир жолу чыкылдатыңыз, андан кийин ачуу баскычын басыңыз.
      11. "Файлдарды кошуу..." баскычын чыкылдатыңыз жана "Файлдарды ачуу" терезеси кайра пайда болот.
      12. Эми ошол эле жол менен water.c файлын табыңыз. Аны чыкылдатыңыз, андан кийин ачууну басыңыз (же "Ачуу").
      13. Эми mario.c табыңыз. Жана ошондой эле чыкылдатып, ошол эле жол менен ачыңыз.
      14. greedy.c файлында баары бирдей.
      15. Файлдарыңызды CS50 serverлерине жүктөй баштоо үчүн Жүктөп баштоону басыңыз.
      16. Пайда болгон экранда сиз "Файл тандалган жок" деген терезени көрөсүз. Эгер сиз чычкан курсоруңузду экрандын сол тарабына жылдырсаңыз, сиз жүктөп алган файлдардын тизмесин көрөсүз. Ар биринин мазмунун ырастоо үчүн ар бирин басыңыз. (Башка баскычтарды же сүрөтчөлөрдү басуунун кереги жок). Эгер сиз файлды текшерүүгө жөнөтүүгө даяр экениңизге ишенсеңиз, бүттү деп эсептеңиз! Кодуңузду кайра өзүңүз текшерип же бир нерсени оңдогуңуз келсе, CS50 Тапшыруу бөлүмүнө кайрылып, бул кадамдарды кайталаңыз. Каалаганыңызча кайра жөнөтө аласыз; Эң акыркы тапшыруу гана бааланат.
  3. 2/2 кадам (баалоо үчүн талап кылынbyte, эгерде ал =))

    Эми https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x дарегине өтүңүз, ал жерден сиз атайын формаларды табасыз. Аларда сиз бир нече теориялык суроолорго жооп беришиңиз керек, андан кийин алардын астындагы "Тапшыруу" баскычын чыкылдатыңыз.

Жылдызчалар менен суроолор талап кылынат:
  • Макул, мунун келе жатканын көрүш керек болчу! Бир нече сүйлөм менен айтканда, китепкана деген эмне? * (Китепкана деген эмне экенин кыскача айтып бериңиз)
  • Бир нече сүйлөм менен, #include <cs50.h> аны кандайдыр бир программанын үстүнө жазганыңызда кандай роль ойнойт? *(айрым программалардын башында пайда болгон #include <cs50.h> сызыгынын ролу кандай?)
  • Problem Set 0: Scratch программасына канча саат сарптадым деп айта аласыз?
  • 1-көйгөйлөр топтому: C үчүн канча саат өткөрдүм деп айта аласыз?
  • Ушул убакка чейин CS50x жөнүндө кандай пикирдесиз? *(Учурда CS50 жөнүндө сиздин пикириңиз, жактыруу же жактырбоо опциясын тандаңыз)
  • Сиз http://www.facebook.com/groups/cs50 дарегиндеги CS50s Facebook Group аркылуу классташтарыңыздан же кызматкерлерден жардам сурадыңыз беле? *(Фейсбук тобунда башка студенттерден же жардамчылардан жардам сурадыңыз беле)
  • Сиз http://www.reddit.com/r/cs50 дареги боюнча CS50s Subreddit аркылуу классташтарыңыздан же кызматкерлерден жардам сурадыңыз беле *(Subreddit аркылуу башка студенттерден же жардамчылардан жардам сурадыңыз беле)
  • @cs50 же #cs50 аркылуу Twitter аркылуу классташтардан же кызматкерлерден жардам сурадыңыз беле? *(Сиз Twitter'де @cs50 же #cs50 аркылуу башка студенттерден же ТАлардан жардам сурадыңызбы).
Достор, суроолоруңуз болсо, бул колдонмонун астына комментарийге жазыңыз. Эгер сиз маалыматка чакыруу алуу үчүн JavaRush 5-деңгээлине жете элек болсоңуз, биз муну сизге сунуштайбыз. Бул бекер, кызыктуу жана өтө кыйын эмес.

Код булагы:

  1. Үчүнчү лекция

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

  2. Төртүнчү лекция

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

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

кошумча адабияттар

http://cpp.com.ru/kr_cbook - тилдин авторлору Брайан Керниган жана Деннис Ритчиден С боюнча классикалык китептин орусча versionсы. Тар чөйрөдө K&R катары кеңири белгилүү. Бирок котормо эң жаңы басылышы эмес. Биринчи үч бөлүмдү оку. Керектүү материалдан бир аз көбүрөөк болот, бирок көйгөйлөрдү чечүү үчүн жетиштүү. https://computer.howstuffworks.com/c.htm бул CS50 авторлору сунуштаган булак. Англис тorнде. Page 1—7, 9 жана 10.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION