JavaRush /Блоги Java /Random-TG /Harvard CS50: Супоришҳои ҳафтаи 1 (Лекцияҳои 3 ва 4)
Masha
Сатҳи

Harvard CS50: Супоришҳои ҳафтаи 1 (Лекцияҳои 3 ва 4)

Дар гурӯҳ нашр шудааст
Harvard CS50: Супоришҳои ҳафтаи 1 (Лекцияҳои 3 ва 4) - 1Дӯстон, шумо метавонед аз қайдҳои семинар маълумоти асосии назариявӣ гиред . Дар он ҷо ба ғайр аз асосҳои забони C, он тарзи пайвастшавӣ ба абри махсуси IDE CS50 (ин бояд барои иҷро ва тафтиши супоришҳо анҷом дода шавад) ва фармонҳои асосии зарурии Linux ва сохторҳои забонро тавсиф мекунад. Агар шумо дар лекция ва кайдхо дар бораи С материали кофй наёбед, ба манбаъхои дигар мурочиат кунед. Масалан, онҳое, ки дар охири ин мақола оварда шудаанд. Дар мавзӯи « Материалҳои иловагӣ »
  • Ҳадафҳои ҳафтаи аввал
  • IDE CS50
  • Навсозии сатри фармон ва мизи корӣ
  • Дар IDE кор мекунад
  • Салом, C!
  • Хатогиҳо?
  • Санҷиши тасдиқ: санҷиши check50
  • C Асосҳо: Муқоиса бо Scratch
  • Намудҳои асосии маълумот дар C
  • Китобхонаҳо C
  • Салом C боз: таҳлor синтаксиси соддатарин барномаҳо
  • Каме бештар дар бораи I/O дар C
Маводҳо дар ин мавзӯъ:
  • Вуруди маълумоти тасдиқшуда: вазифаҳои махсуси китобхонаи cs50.h
  • Вазифаи 1. Ҳисобкунии оқилонаи истеъмоли об
  • Вазифаи 2. Марио бо мост!
  • Вазифаи 3. Вақти ба даст овардани тағирот
  • Чӣ тавр рамзи худро тасдиқ кардан ва ба даст овардани аломатҳо
  • Манбаи code
  • адабиёти иловагй

Вуруди маълумоти тасдиқшуда: вазифаҳои махсуси китобхонаи 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Оё шумо машҳуртарин сантехники ҷаҳонро медонед? Бо кӯмаки Nintendo, як бачаи афсонавии мӯйлабдор ва каме пурмол дар сарпӯши сурх қаҳрамони чанд насли бозигарон гардид. Агар шумо намедонед, ки мо дар бораи кӣ гап мезанем, дар ин ҷо истиноди бозии классикии соли 1985 мавҷуд аст : ба ман бовар кунед, он ҳанӯз ҳам хуб аст ва қобor тафтиш аст! Шумо инчунин метавонед versionи классикии Super Mario-ро барои смартфонҳо ё эмуляторҳои офлайнӣ пайдо кунед. Хамаи ин ба мо барои тараккиёти умумй лозим аст, ин, мутаассифона, хануз вазифа нест;). Ва вазифа ин аст. Дар охири сатҳи якуми Марио, ҳар як бозигар ин ним пирамидаро дид: mario.cДар ~/workspace/pset1. Барномаи мо ним пирамидаи шабеҳеро, ки шумо мебинед, мекашад, аммо бевосита дар консол, бе графика: ҳар як блок аз тасвири ҳаш иборат хоҳад буд (#). Ҳатто агар шумо то ҳол нафаҳмида бошед, ки чӣ тавр ин корро кардан лозим аст, ба ман бовар кунед: ин осон аст. Барои ҷолибтар кардани масъала, биёед ба он қобorяти муқаррар кардани баландии нимпирамидаро бо истифода аз адади ғайриманфӣ аз 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 сент қарздор аст ва дар камараш сorндрҳои тангаҳо барои иваз кардани арзишҳои 25, 10, 5 ва 1 сент дорад. Кассир, ки бо алгоритми "тамаъкор" роҳнамоӣ мекунад, фавран мехоҳад, ки дар қадами аввал ҳадди аксарро диҳад. Дар ин лаҳза, ҳалли беҳтарин ё беҳтарин додани 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. Кӯшиш кунед, ки баромади форматшударо истифода баред, масалан бо 50 адад даҳӣ, бо истифода аз рамзи зер:
float f = 0.01;
printf("%.50f\n", f);
Воқеан, пеш аз ҳисоб кардани чизе, мантиқӣ мебуд, ки тамоми маблағро ба сент табдил диҳем (ва ҳамзамон онро аз , floatба int). Барои он, ки таҳлилгари codeи автоматии мо мушкor шуморо дуруст тафтиш карда тавонад, боварӣ ҳосил кунед, ки дар сатри охирини баромади барномаи шумо ягон маълумоти дигар ба ҷуз шумораи ҳадди ақали тангаҳо мавҷуд нест: адади бутун бо \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
Дар асоси ин талабот ва мисоле, ки шумо дар боло дидед, рамзи шумо бояд эҳтимолан як навъ ҳалқаро дар бар гирад. Агар ҳангоми санҷиши барнома шумо дарк кунед, ки гардиш қатъ намешавад, шумо метавонед иҷрои барномаро бо комбинатсияи ctrl-c қатъ кунед (баъзан чанд маротиба). Шумо аллакай медонед, ки чӣ тавр тартиб додан ва иҷро кардани барнома. Агар шумо хоҳед тафтиш кунед, ки оё барномаи шумо дуруст кор мекунад, бо истифода аз утorта check50, дар терминал сатри зеринро ворид кунед:
check50 2015.fall.pset1.greedy greedy.c
Ва агар шумо хоҳед, ки бо ин барнома аз ҷониби ассистентҳои курсӣ бозӣ кунед, фармони зеринро нависед:
~cs50/pset1/greedy

Чӣ тавр рамзи худро тасдиқ кардан ва ба даст овардани аломатҳо

  1. Варианти 1

    Агар барои шумо дурустии рамзро тафтиш кардан муҳим бошад, на гирифтани баҳои ниҳоӣ, шумо метавонед онро бо ёрии фармон тафтиш ва ислоҳ кунед.

    check50 2015.fall.pset1.name name.c

    дар хати терминали CS50 IDE ворид карда шудааст? nameноми файли вазифаи шумо дар куҷост .

  2. Варианти 2

    Агар шумо хоҳед, ки баҳо гиред (аслан бо иҷроиши check50 монанд аст, аммо бо дар хотир доштани натиҷа ва пур кардани баъзе варақаҳо ба забони англисӣ, пас ин қадамҳоро иҷро кунед:

    • Қадами 1 аз 2

      1. Вақте ки барномаҳо омодаанд, ба CS50 IDE ворид шавед.
      2. Дар кунҷи чапи болоии CS50 IDE, дар дохor браузери файли он, на дар равзанаи терминал, файли hello.c-и худро (касе, ки дар феҳристи pset1 ҷойгир аст) бо тугмаи чап ё рост клик кунед ва Зеркашӣ -ро пахш кунед. Шумо бояд фаҳмед, ки браузер hello.c-ро бор кардааст.
      3. Барои об такрор кунед.c.
      4. Барои mario.c такрор кунед.
      5. Барои тамаъкорӣ такрор кунед.c.
      6. Дар ҷадвал ё равзанаи алоҳида, ба CS50 Submit ворид шавед .
      7. Дар кунҷи чапи поёни равзана Ирсолро клик кунед.
      8. Дар доираи Маҷмӯи мушкилот 1 дар равзанаи пайдошуда, клик кунед Боркунии пешниҳоди нав.
      9. Дар равзанаи пайдошуда, клик кунед Иловаи файлҳо…. Равзанаи кушодани файлҳо бояд пайдо шавад.
      10. Ба маконе гузаред, ки hello.c зеркашӣ карда мешавад. Он одатан дар папкаи Боргириҳо ё дар папкае ҷойгир аст, ки ба таври нобаёнӣ барои зеркашиҳо ба шумо таъин шудааст. Вақте ки шумо hello.c-ро пайдо мекунед, онро як маротиба клик кунед, то онро қайд кунед ва Кушоданро пахш кунед.
      11. Боз Иловаи файлҳо...-ро пахш кунед ва равзанаи кушодани файлҳо боз пайдо мешавад.
      12. Акнун файли water.c-ро ба ҳамин тариқ ёбед. Онро клик кунед ва сипас Кушоданро пахш кунед (ё "Кушодан").
      13. Акнун mario.c-ро пайдо кунед. Ва инчунин ба ҳамин тариқ клик кунед ва кушоед.
      14. Ҳама чиз бо файли greedy.c якхела аст.
      15. Барои оғоз кардани боркунии файлҳои худ ба serverҳои CS50-ро оғоз кунед.
      16. Дар экране, ки пайдо мешавад, шумо равзанаро мебинед, ки "Не файл интихоб нашудааст" ном дорад. Агар шумо курсори мушро ба тарафи чапи экран гузоред, шумо рӯйхати файлҳоеро, ки шумо зеркашӣ кардаед, хоҳед дид. Барои тасдиқи мундариҷаи ҳар як ҳар якро клик кунед. (Ба тугмаҳои дигар ё нишонаҳо пахш кардан лозим нест). Агар шумо мутмаин бошед, ки шумо омодаед, ки файлро барои тафтиш фиристед, фикр кунед, ки шумо тамом шудед! Агар шумо хоҳед, ки codeи худро дубора тафтиш кунед ё ягон чизро ислоҳ кунед, ба CS50 Submit баргардед ва ин қадамҳоро такрор кунед. Шумо метавонед чанд маротиба, ки мехоҳед, дубора ирсол кунед; Танҳо пешниҳоди охирин арзёбӣ мешавад.
  3. Қадами 2 аз 2 (барои арзёбӣ талаб карда намешавад, агар ин =))

    Акнун ба https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x равед , ки дар он шумо шаклҳои махсус пайдо мекунед. Дар онҳо ба шумо лозим аст, ки ба якчанд саволҳои назариявӣ ҷавоб диҳед ва сипас дар зери онҳо Ирсолро пахш кунед.

Саволҳо бо ситорачаҳо лозиманд:
  • Хуб, мебоист ин омадани онро медидам! Танҳо дар чанд ҷумла, китобхона чист? * (Китобхонаро мухтасар шарҳ диҳед)
  • Танҳо дар чанд ҷумла, #include <cs50.h> вақте ки шумо онро дар болои ягон барнома менависед, чӣ нақш мебозад? *(нақши хати #include <cs50.h>, ки дар болои баъзе барномаҳо пайдо мешавад, чӣ гуна аст?)
  • Тақрибан чанд соат гуфта метавонистед, ки дар Set Problem 0: Scratch сарф кардед?
  • Шумо гуфта метавонед, ки шумо дар маҷмӯи мушкилоти 1: C чанд соат сарф кардаед?
  • Назари шумо дар бораи CS50x то ҳол чӣ гуна аст? *(Андешаи шумо дар бораи CS50 дар айни замон, варианти маъқул ё нописандиро интихоб кунед)
  • Оё шумо аз ҳамсинфон ё кормандон тавассути CS50s Facebook Group дар http://www.facebook.com/groups/cs50 кӯмак пурсидед? *(Оё шумо дар гурӯҳи Facebook аз дигар донишҷӯён ё ёрдамчиён кӯмак пурсидед)
  • Оё шумо аз ҳамсинфон ё кормандон тавассути CS50s Subreddit дар http://www.reddit.com/r/cs50 кӯмак дархост кардаед *(Оё шумо аз дигар донишҷӯён ё ёрдамчиён тавассути Subreddit кӯмак дархост кардаед)
  • Оё шумо аз ҳамсинфон ё кормандон тавассути Twitter бо истифода аз @cs50 ё #cs50 кӯмак пурсидед? *(Оё шумо бо истифода аз @cs50 ё #cs50 аз дигар донишҷӯён ё TA барои кӯмак дар Твиттер дархост кардаед).
Дӯстон, агар шумо ягон савол дошта бошед, онҳоро дар шарҳҳои зери ин дастур нависед. Агар шумо барои гирифтани даъват ба иттилоот ба сатҳи JavaRush 5 нарасида бошед, тавсия медиҳем, ки ин корро кунед. Ин ройгон, ҷолиб ва чандон душвор нест.

Манбаи code:

  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 - нусхаи русии китоби классикӣ оид ба C аз муаллифони забон - Брайан Керниган ва Деннис Ричи. Дар доираҳои танг ҳамчун K&R маъруф аст. Аммо тарҷума аз нашри навтарин нест. Се боби аввалро хонед. Дар он ҷо маводи каме бештар аз шумо лозим аст, аммо барои ҳалли мушкилот кофӣ аст. https://computer.howstuffworks.com/c.htm сарчашмаест, ки муаллифони CS50 тавсия кардаанд. Дар забони англисӣ. Саҳифа 1-7, 9 ва 10.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION