JavaRush /Блоги Java /Random-TG /Маводҳои иловагӣ барои лексияҳои CS50: Ҳафтаи 1 (лексияҳо...
Masha
Сатҳи

Маводҳои иловагӣ барои лексияҳои CS50: Ҳафтаи 1 (лексияҳои 3 ва 4)

Дар гурӯҳ нашр шудааст
cs50 бо забони русӣ маводҳои иловагӣ Вазифаҳои ҳафтаи 1

Ҳадафҳои ҳафтаи аввал

  • Бо фармонҳои асосии Linux шинос шавед
  • Синтаксиси асосии C-ро омӯзед ва чанд масъаларо ҳал кунед
  • Ба таври равшантар фикр карданро оғоз кунед =)
IDE CS50
Барои анҷом додани вазифаҳо, CS50 дар абр IDE (Integrated Development Environment) -ро пешниҳод мекунад. Барои истифодаи он, дар платформаи edX ҳисоб эҷод кунед ва барои курси аслӣ сабти ном кунед . Баъд аз ин:
1. Ба cs50.io равед, edX-ро аз рӯйхат интихоб кунед, логин ва пароли худро ворид кунед, Ирсол-ро пахш кунед 2. Маълумоти ҳисоби edX-и худро ворид кунед, Бозгашт ба ID.CS50.NET -ро клик кунед . cs50.io 3. Мо интизорем: фазои маҷозии шумо эҷод шуда истодааст. фазои виртуалӣ cs50 4. Иҷро шуд! cs50 ide
Сатри фармон ва оғози CS50 IDE
Дар поёни равзанаи IDE CS50, дар ҷадвали Терминал, равзанаи терминал ё панели сатри фармон мавҷуд аст. Шумо метавонед фармонҳои сатрро дар ин ҷо ворид кунед: шумо метавонед ҳамон кореро, ки бо интерфейси тиреза иҷро мекунад, иҷро кунед, масалан, барномаҳоро оғоз кунед, файлҳоро нест кунед ва эҷод кунед, нармафзорро насб кунед. Агар шумо ҳеҷ гоҳ бо сатри фармон кор накарда бошед, ин усул эҳтимол душвор ба назар мерасад: шумо бояд фармонҳоро дар хотир доред ва онҳоро ба ҷои пахш кардани нишонаҳо ва тугмаҳо нависед. То андозае ин дуруст аст, пас интерфейси тиреза ихтироъ карда шуд. Аммо, сатри фармон дар ҳама системаҳои оператсионӣ мавҷуд аст ва маъмурон онро дӯст медоранд. Ва ҳама аз он сабаб, ки баъзан шумо бе он зиндагӣ карда наметавонед. Дар равзанаи IDE дар терминал шумо як хати пурасрор хоҳед дид: номи корбар:~/workspace $ дар ҷои “номи корбар” номи худкор тавлид мешавад (дар асоси маълумоти бақайдгирии шумо). Дар равзанаи терминал клик кунед, нависед: update50 Enter-ро пахш кунед. Фармон аз система хоҳиш мекунад, ки навсозӣ кунад. Шумо дар терминал хатҳоеро мебинед, ки раванди насбкуниро тавсиф мекунанд. CS50 IDE-ро то он даме, ки Навсозӣ ба итмом нарасид, напӯшед ! . Пас аз ин, хати пешфарз боз пайдо мешавад, ки бо номи шумо.
Дар IDE кор мекунад
Биёед папкаеро созем, ки дар он файлҳои шумо нигоҳ дошта мешаванд. Дар кунҷи чапи болоии CS50 IDE ~/workspace (директорияи решавӣ) -ро бо тугмаи рост клик кунед , Папкаи нав -ро интихоб кунед . Номи ҷузвдони pset1 -ро тағир диҳед (агар шумо номро хато карда бошед, папкаи худро бо тугмаи рост клик кунед ва Иваз кардани ном -ро интихоб кунед ). Пас аз папкаи pset1 тугмаи ростро клик кунед ва Файли нав -ро интихоб кунед . Файли Untilted пайдо мешавад, биёед онро hello.txt иваз кунем . hello.txt-ро ду маротиба клик кунед. Дар CS50 IDE шумо ҷадвали нав ва майдонеро дар тарафи рост хоҳед дид, ки дар он шумо метавонед чоп кунед. Агар шумо ин корро карда бошед, ба аломати ситорача (*), ки пеш аз номи файл дар ҷадвал пайдо мешавад, диққат диҳед - нишондиҳандае, ки ба файл тағирот ворид шудааст, аммо захира нашудааст. Файлро тавассути гузариш ба *Файл > Захира ё бо истифода аз фармон + S (дар мошинҳои Apple) ё Ctrl + S (дар компютерҳо) захира кунед. Ситорача бояд нопадид шавад. Биёед тафтиш кунем, ки файл дар куҷост, ки бояд бошад. Биёед инро бо истифода аз сатри фармон иҷро кунем, вақти он расидааст, ки ба он одат кунем :). Мисли пештара, хати фаъол дар терминал чунин менамояд: Фазои корӣ - директорияи кории ҷорӣ (касе, ки дар муҳити корӣ кушода аст). Тилда (~) директорияи решаро нишон медиҳад (фазои корӣ дар он ҷойгир аст). Дар хотир доред, ки фазои корӣ дар терминал бо тасвири ~/workspace дар кунҷи чапи болоии CS50 IDE якхела аст. Биёед машқ кунем. Дар ягон ҷои терминал клик кунед ва дар сатри фармон ворид кунед ва Enter-ро пахш кунед. Ин ду ҳарфи хурд - кӯтоҳ барои "рӯйхат" - рӯйхати файлҳо ва ҷузвдонҳоеро, ки дар дохor директорияи фазои кории ҷорӣ ҷойгиранд, мебарорад. Дар байни чизҳои дигар, шумо pset1-ро , ки шумо офаридаед, хоҳед дид ! Акнун биёед бо ёрии фармон папкаи худро кушоем. Мо ё бештар ба таври муфассал менависем: Фармони cd (тағйир додани директория) директорияи фаъолро иваз мекунад, дар ҳолати мо, Сатри фаъол ба ин тағир ёфтааст Ин тасдиқ мекунад, ки шумо ҳоло дар директория ҳастед (хат маънои "Ман дар pset1 дар дохor фазои корӣ ҳастам" аст. ҷузвдонеро, ки дар папкаи реша ҷойгир аст, бо аломати ~" ифода мекунад). Акнун нависед Шумо файли hello.txt -ро хоҳед дид ! Агар шумо номро дар терминал пахш кунед, ҳеҷ чиз рӯй намедиҳад: ин матн аст ва он фаъолро намедиҳад. истинод, аммо он тасдиқ мекунад, ки hello.txt дар куҷост, ки он бояд бошад.Навиш Агар шумо танҳо худи фармони cd-ро нависед, вале далеле наоваред (яъне номи ҷузвдоне, ки бояд ба он равад), он шуморо бармегардонад. ба феҳристи решавӣ пешфарз, то шумо расми зеринро дар хати фаъол хоҳед дид: Барои баргаштан ба ҷузвдони pset1, рақамро пахш кунед cs50 ide папкаро тағир диҳедcs50 ideМаводҳои иловагӣ барои лексияҳои CS50: Ҳафтаи 1 (лексияҳои 3 ва 4) - 1username:~/workspace $lscd pset1cd ~/workspace/pset1~/pset1username:~/workspace/pset1 $~/workspace/pset1lscdusername:~ $cd workspace ва Enterро пахш кунед. Пас cd pset1 аз нав ворид кунед. Шумо инчунин метавонед ин ду фармонро бо як фармони аслӣ иваз кунед: cd workspace/pset1
Салом, C!
Ниҳоят, ин лаҳза фаро расид! Биёед барномасозиро оғоз кунем. Дар дохor ҷузвдони pset1-и мо дар IDE, файлеро бо номи hello.c эҷод кунед (васеъкунӣ лозим аст), онро дар ҷадвали нав кушоед (мо фикр мекунем, ки шумо ин корро аз параграфи қаблӣ дар хотир доред). МУҲИМ! Ҳарфҳо бояд хурд бошанд, Linux ба ҳарфҳо ҳассос аст. Hello.c ва hello.c файлҳои гуногун мебошанд. Дар тарафи рости равзанаи CS50 IDE айнан ҳамон матнеро, ки дар зер мебинед, нависед. Бале, шумо метавонед онро нусхабардорӣ кунед, аммо чоп кардани он муфидтар аст. Ҳарфҳо рангҳои гуногун доранд, зеро CS50 IDE дорои равшании синтаксис мебошад. Он барои хондан беҳтар блокҳои матнро бо ранг таъкид мекунад. Рангҳо дар худи файл захира карда намешаванд; онҳо танҳо дар IDE намоёнанд. Агар онҳо дар он ҷо бошанд, пас IDE C-ро мефаҳмад ва шумо нишон додед, ки он дар васеъшавии файл (*.c) C аст. Агар шумо ҳамон файлро hello.txt номида бошед, матн як ранг мешавад. Боварӣ ҳосил кунед, ки шумо ҳама чизро ҳамон тавре ки дар мисол навиштаед, дар акси ҳол шумо хатогии аввалро мегиред =). Мо бори дигар диққати шуморо ба фарқияти байни ҳарфҳои хурд ва калон ҷалб мекунем. Аломати \n курсорро ба сатри дигар мебарад ва матни дар оянда воридшуда бо баромади барнома якҷоя намемонад. Оре, ва дар бораи нуқта-вергул (;) фаромӯш накунед. Ин як ҷудокунандаи муҳим барои изҳороти барнома аст; C намехоҳад бе онҳо кор кунад. Файл > Захира клик кунед (ё фармон ё Ctrl-s). Аҳамият диҳед, ки ситорача дар пеши номи файл нопадид шудааст? Агар ҳа, пас тағиротҳо захира карда шудаанд. Дар ҳама ҷо дар равзанаи терминали зери рамзи худ клик кунед ва боварӣ ҳосил кунед, ки шумо дар дохor ~/workspace/pset1 ҳастед (агар шумо набошед, cd-ро пахш кунед ва Enter-ро пахш кунед, пас cd workspace/pset1 ва дубора ворид кунед). Хати фаъоли шумо бояд чунин бошад: Биёед боварӣ ҳосил кунем, ки файли hello.c маҳз дар куҷост. Навиштан ва Enterро пахш кунед. Оё шумо низ hello.c-ро мебинед? Дар акси ҳол, якчанд қадамро баргардед ва файлро дар директорияи дилхоҳ дубора эҷод кунед. ...Акнун лахзаи ботантана фаро мерасад: ангуштонамонро мезанем ва... менависем: ва бо ангуштонамон Enter-ро пахш мекунем. Айнан салом, на hello.c. Агар пас аз ин амал ҳама чизеро, ки шумо дар пеши шумо мебинед, хати дуюми фаъол бошад, ки маҳз ба пешина монанд аст, пас ҳама чиз кор мекунад! Рамзи сарчашмаи шумо ба codeи мошин ё an object (яъне бо пайдарпаии 0 ва 1) тарҷума шудааст. Акнун ин codeро иҷро кардан мумкин аст (яъне барномаро иҷро кардан мумкин аст!). Барои ин, нависед: дар сатри фармон, Enter -ро пахш кунед. Агар шумо матни дар байни ""ҳо ҷойгиршударо тағир надода бошед, шумо дар зер мебинед: Агар шумо ҳоло фармонро ворид кунед ва Enter-ро пахш кунед, шумо файли нави hello-ро дар якҷоягӣ бо hello.c ва hello.txt хоҳед дид. Саломи аввал бояд пас аз ном ситорача дошта бошад, ки ин файли иҷрошаванда аст, яъне файлест, ки шумо бо он барномаро оғоз мекунед. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Хатогиҳо?
Агар пас аз фармони make шумо хатогиҳоро бинед, вақти ислоҳи аввалин расидааст! Навиштаҷот ба монанди "эъломияи интизорӣ" маънои онро дорад, ки шумо дар ҷое хатои чопӣ кардаед. Рамзи дар боло зикршударо бори дигар санҷед, танҳо дар бораи ҳама тафсилот хеле эҳтиёт бошед. Диққат! Тавсифи хатогиҳо бо забони англисӣ оварда шудаанд. Агар он равшан набошад, аз системаи ҷустуҷӯии Google Translate истифода баред ё дар шарҳҳо савол диҳед. Пас аз ислоҳи хатогиҳо, фаромӯш накунед, ки codeи худро бо истифода аз Файл > Захира (ё фармон ё Ctrl-s) захира кунед, бори дигар дар дохor равзанаи терминал клик кунед ва нависед make hello (Танҳо боварӣ ҳосил кунед, ки шумо дар ~ ҳастед. /workspace/pset1 аввал). Агар дигар хато набошанд, барномаро бо чоп кардани фармон иҷро кунед.Дар ./hello назария, ибораи арзишманд бояд дар назди шумо дар дохor нохунакҳои оператори printf, ки фармони «чашм»-ро дорад, пайдо шавад. Агар равзанаи терминал хеле хурд ба назар расад, тасвири доирашакл (+)-ро дар паҳлӯи hello.c клик кунед.
Санҷиши дурустӣ
Замимаи check50 дар CS50 IDE сохта шудааст. Он аз сатри фармон кор мекунад ва баъзе барномаҳоро барои хатогиҳо тафтиш мекунад. Агар шумо ҳоло дар он ҷо набошед, бо иҷро кардани фармон дар терминал ба директорияи ~/workspace/pset1 гузаред: cd ~/workspace/pset1 Акнун иҷро кунед ls , шумо ҳадди аққал файли hello.c-ро хоҳед дид. Боварӣ ҳосил кунед, ки номи файл чунин аст ва на, мегӯянд, Hello.c ё hello.C. Шумо метавонед номи файлро тавассути иҷро кардани mv source destination манбаи фармон - номи файли ҷорӣ, макони таъинот - номи нави файл иваз кунед. mv (аз инглисӣ move) як утorтаи тағир додани ном аст. Агар шумо тасодуфан файлро Hello.c номида бошед, сатрро нависед: mv Hello.c hello.c Пас аз он ки боварӣ ҳосил кунед, ки файл маҳз hello.c номида мешавад, биёед ба барномаи чеки check50 занг занем. Лутфан таваҷҷӯҳ намоед, ки 2015.fall.pset1.hello идентификатори беназири мушкилоти "салом ҷаҳон" мебошад. check50 2015.fall.pset1.hello hello.c Агар барнома дуруст иҷро шуда бошад, шумо хоҳед дид: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 2 Чеҳраҳои табассумҳои сабз маънои гузаштани санҷишро доранд. Шумо инчунин метавонед URL-ро дар поёни баромади check50 бубинед, аммо он танҳо барои кормандон аст (аммо, агар шумо таваҷҷӯҳ дошта бошед, онро санҷед!). check50 3 санҷиш мегузаронад: оё файли hello.c вуҷуд дорад, оё hello.c тартиб медиҳад ва оё барнома хатеро тавлид мекунад, ки "салом, ҷаҳон\n" мегӯяд. Агар шумо эмотиконҳои сурхи ғамгинро бинед, ин маънои онро дорад, ки шумо хато доред. :( hello.c exists \ expected hello.c to exist :| hello.c compiles \ can't check until a frown turns upside down :| prints "hello, world\n" \ can't check until a frown turns upside down Дар ин ҷо check50 hello.c-ро наёфтааст ва табассуми сурх нишон медиҳад, ки шумо ё дар ном хато кардаед ё файлро ба ҷои нодуруст бор кардаед. Эмотиконҳои "бетараф" зард маънои онро доранд, ки санҷишҳо иҷро нашудаанд. Ва агар барнома файлеро, ки бояд тафтиш карда шавад, наёбад, онҳо аз куҷо оғоз карда метавонанд? Ин аст варианти дигаре, ки агар шумо матнеро, ки функсияи printf() бояд барорад, тағир диҳед, пайдо мешавад: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 гузориш медиҳад, ки сатри hello, world\n интизор буд, аммо чизи дигаре пайдо шуд. check50 холҳоро барои хатми курс ҳисоб намекунад, балки тафтиш мекунад, ки натиҷаи супориш аз он чизе, ки интизор буд, фарқ мекунад. Ва он ба шумо имкон медиҳад, ки инро пеш аз тасдиқи дурустии супориш дар курс тафтиш кунед (мо ба шумо баъдтар чӣ гуна ин корро карданро хоҳем гуфт).
C Асосҳо: Муқоиса бо Scratch
Салом ҷаҳон дар Scratch ва C:
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 4функсияеро муаррифӣ мекунад, ки "калимаҳо" -и спрайтро ба ҳубобчаи комикс дар Scratch чоп мекунад, дар C функсияи printf мавҷуд аст, ки ҳамон корро мекунад, танҳо бе мультфильмҳо.
  • асосӣ - ба забони англисӣ - "асосӣ". Нуқтаи вуруд ба барнома. Ҳамон тавре ки Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 5.
Давраи беохир
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 6 Тарҷума ба C: while (true) { printf("hello, world\n"); } while (true) ҳамон корро мекунад: ҳалқа кори худро идома медиҳад, дар ҳоле ки арзиш ҳақиқӣ аст (ифодаи мантиқии “true” ё “як”). Ин ҳалқа беохир давом хоҳад кард.
Даврае, ки як ибораро дар экран 10 маротиба нишон медиҳад
Scratch Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i як тағирёбандаи ҳисобкунанда аст; арзиши он тавассути оператори афзояндаи i++ тағир дода мешавад ва дар ҳар як такрори давр онро ба 1 зиёд мекунад. Дар аввал, i бо истифода аз оператори таъини = арзиши 0 дода мешавад. Диққат! Тавре ки дар Java, дар С баробарӣ бо ==, оператори таъинот = ишора мешавад. Яъне, a = 5 маънои онро дорад, ки ба тағирёбандаи a қимати 5 дода шудааст ва (a= =5) ифодаи Булонро дорад (агар a ба 5 баробар бошад, пас ифода дуруст аст, агар баробар набошад, дурӯғ аст) . Давра вақте қатъ мешавад, ки i то 9 "рӯяд". Ҳисоб кардан осон аст, давра 10 маротиба иҷро мешавад. Ҳамин тавр, агар ба шумо лозим ояд, ки чизеро чанд маротиба такрор кунед, дар C шумо даври for-ро муайян мекунед (int i = 0; i < 10; i++). Мисоли дигар: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 8 Ва ҳамон чизе, ки ба C тарҷума шудааст: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • ҳисобкунак арзишро дар C ва Scratch нигоҳ медорад. Дар C мо ба ҷои int counter = 0 таъин мекунем Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Мо навъи тағирёбандаро ҳамчун int барои тавзеҳот қайд мекунем: i адад аст (аз инглисӣ integer, tam).
  • Аломати %i, ки мо дар printf дар сатри чорум истифода мебарем, ҷойнишинест, ки ба мо мегӯяд, ки адади даҳиро чоп кунем, ҳамон тавре ки мо ба printf мегӯем, ки ҷойнишинро бо арзише, ки тағирёбандаи ҳисобкунак мегирад, иваз кунад.
Ифодаҳои булӣ
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 Ин ҳамон тавре аст (x < y) ((x < y) && (y < z))
Шароит
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 Ва муодor "шит": Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 Дар бораи ибораи аввалини нофаҳмо чӣ гуфтан мумкин аст? Муфассалтар дар ин бора баъдтар, дар бахши "Китобхонаҳо". #include
Изҳороти шартӣ
Ин бачаҳо тафтиш мекунанд, ки оё ягон шарт (ифодаи мантиқӣ, саволе, ки танҳо бо “ҳа” ё “не” ҷавоб додан мумкин аст) дуруст аст ва агар ин тавр бошад, онҳо баъзе амалҳои марбут ба ин шартро иҷро мекунанд. Мисол аз зиндагӣ: агар борон меборад (фарз кардем, ки борон меборад) ва ман дар берун бошам (вақте ки борон меборад, дар берун ҳастам), чатрро мекушоям. if (condition) { //исполнить, если meaning истинно } Варианти мураккабтар: агар шарт иҷро шавад, амал кунед, агар не, дигар амал кунед. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } Мисол: агар шумо аз 18 боло бошед, дастрасиро тасдиқ кунед. Агар камтар бошад, тасдиқ накунед. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
Оператори интихоб
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } Мисол: агар n = 50 бошад, чоп кунед "CS50 Муқаддима ба Илми Информатика I аст", агар n = 51 бошад, "CS51 Муқаддима ба Информатика II" -ро чоп кунед, дар акси ҳол чоп кунед "Бубахшед, ман бо он синф ошно нестам!" switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
Сиклҳо
дар ҳоле ки: шартро месанҷад, пас амалро ҳангоми дуруст будани шарт иҷро мекунад while (condition) { // выполнять, пока истина } do/while бо он фарқ мекунад, ки бори аввал амалро бидуни тафтиши шарт иҷро мекунад ва баъд танҳо онро месанҷад. Агар шарт дуруст бошад, он амалро то он даме, ки шарт нодуруст шавад, такрор мекунад. do { ) // выполнять, пока истина } while (condition); Давраи for амалро миқдори муайяни маротиба такрор мекунад. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 Доиравҳоро дар байни ҳамдигар ҷойгир кардан мумкин аст. Дар ин ҳолат, дар ҳар як қадами ҳалқаи беруна, ҳалқаи ботинӣ пурра иҷро карда мешавад. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
Намудҳои асосии маълумот дар C
основные типы данных в C
Китобхонаҳо C
Эҳтимол шумо аллакай дар ҳайрат шудаед, ки сатри аввали барномаи C чӣ маъно дорад: Нақши он чист ва оё бе он кор кардан мумкин аст? Сатри #include як кори хеле муҳимро иҷро мекунад: он китобхонаҳои codeи аллакай навишташударо дар барномаи шумо дар бар мегирад. Номи китобхонаи пайвастшуда дар қавсҳои кунҷӣ (<>) дохил карда шудааст ва дорои васеъшавӣ (.h). Агар китобхонаҳо намебуданд, пас ҳар як, ҳатто як амали оддитарин, бояд ҳар дафъа такрор ба такрор тасвир карда шавад. Китобхонае, ки мо пайвастем#include дорои функсияҳои вуруд / баромад. Ин ба мо имкон медиҳад, ки функсияи printf()-ро барои чоп дар экран истифода барем. Яъне, агар мо хати #include нанавиштем , аммо функсияи printf()-ро дар бадани барнома гузошта будем; вақте ки мо онро иҷро карданӣ будем, мо хатогие мегирем! Зеро бидуни ин китобхона компилятор намедонад, ки printf() чист. Китобхонаҳои стандартӣ вуҷуд доранд, ки онҳо лексикаи забонро ташкил медиҳанд. Функсияи printf() дар компютер сохта нашудааст, аммо он ба китобхонаи стандартии Си дохил карда шудааст.Яъне ягон барномасоз пештар онро навишта ба китобхона дохил карда буд. Акнун дигарон метавонанд онро бидуни ихтироъ кардани чарх истифода баранд. Барои он ки компилятор онро "фаҳмад", мо пайваст мешавем . Дар раванди CS50 дигар китобхонаҳои стандартӣ мавҷуданд. Масалан, китобхонаи сатрхо, ки амалиётро бо сатрхо тавсиф мекунад (муайян кардани дарози, илова ва гайра). Дар муқоиса бо дигар забонҳои маъмули барномасозӣ, шумораи китобхонаҳои стандартии C хеле кам аст. Аммо китобхонаҳои худнависӣ вуҷуд доранд, ки аксар вақт бештар махсусгардонида шудаанд. Ҳа, китобхона махсус барои донишҷӯёни CS50 офарида шудааст. Вақти он расидааст, ки як ёддошти муҳим гузорем: илова бар навиштани барномаҳо ва ҳалли мушкилот бо истифода аз codeи худ, як таҳиягари хуб як маҳорати муҳими дигар дорад: дониши асбобҳое, ки аллакай навишта шудаанд ва қобorяти истифода бурдани онҳо (китобхонаҳои одамони дигар) ба тавре ки барои аз нав ихтироъ кардани «чарх» вактро бехуда сарф накунад. Ҳамин тавр, агар шумо дар ҷараёни ҳалли мушкилоти дилгиркунанда ё мураккабе бошед, ки ба назар маъмул аст, ба худ савол доданро ёд гиред: "Оё ягон каси дигар ҳалли худро навиштааст?" Имконияти хуб аст, ки ин ҳолат аст ва шумо метавонед ин функсияро дар китобхонаи мавҷуда пайдо кунед. Ба истилоҳи техникӣ, китобхона як файли бинарӣ мебошад, ки тавассути омезиши маҷмӯи файлҳои an objectӣ бо истифода аз пайвандак тавлид мешавад. Файлҳои an objectӣ он файлҳои дорои васеъшавӣ (*.o) мебошанд, ки ҳангоми тартиб додани барномаҳо ба даст меоред.
Сохтори китобхонаҳои C
Когда программист пишет библиотеку, code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та or иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 15 Whatбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит code функций, что служит примером очень важного понятия — сокрытия данных or инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя How её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой code хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается an objectный файл, который собран так, чтобы создать файл с двоичным codeом библиотеки. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16 Author библиотеки передает программисту, который хочет её использовать, два file — с двоичным codeом, а также заголовочный файл. Таким образом, файл с исходным codeом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпorровать её под собственные нужды. Whatбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Name библиотеки в угловых скобках: #include <Name_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Name_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок codeа, в котором уже есть or подаются Howие-то данные, а Howие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это How переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента. Пример: функция, которая отнимает от целого числа 0.5: double bit_less(int a) { double b; b = a – 0.5; return b; } int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов. Внимание! main всегда возвращает int, но return для неё не обязателен. Пример функции не возвращающей значения: void sayhello(void) { printf(“hello everyone!\n”); } При вызове функции в главной программе, она выведет приветствие. Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main(). В C, How и любом языке, есть такой элемент, How комментарий or примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает code. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) codeе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #include //функция возведения в квадрат числа a int sqr(int a) { return a*a; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); printf("%d\n", sqr(5)); } Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены How void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: meaningм аргумента является символ;
  • d or i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. What если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Whatбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION