[Музички] АНДИ Пенг: Ова е CS50, и добредојдовте во две недела на секција. Ова е, всушност, додека недела двајца од нашите class-- всушност, првата недела имавме секција. Кревање на рака, колку од сите вас дојде до супер секција минатата недела? Добро, тоа е во ред. Во ред е. Колкумина од вас го гледал супер секција минатата недела? ВО РЕД. А вие момци не парична казна на еден проблем во собата? Па јас ќе одам да го земам дека имаме еден куп навистина интелигентни деца во оваа класа и работите ќе биде добро. ВО РЕД. Па first-- Прво, ние сме само ќе накратко одиме во текот на дневен ред за денес. Ние ќе зборуваме за се разбира логистика. Многу од вас веројатно имаат прашања во врска како работите се кандидира во овој курс. Ние ќе им одговори. Ние ќе треба да накратко поминат јамки во случај ниту еден од вас момци пропушти супер секција. Ќе зборуваме за ASCII мапирање. Ќе зборуваме за низи, функции, аргументи на командната линија. И, конечно, она што вие момци веројатно сите Навистина сакам да бидам тука за да дознаете за, е вашата pset2. Ќе имаме некои убави трикови и совети за тоа како да го направите тоа. ВО РЕД. Исто така, второ, имаме многу слатки тука. Секој кој сака бонбони, само да излезе тука. Зграби некој. Имам еден куп. Имаме еден тон во канцеларијата. Јас навистина не би сакал да јадат бонбони на целиот ден. Вие момци треба да јадат сите бонбони, затоа што јас го донесов тука за вас момци. Само јаде бонбони. Таму ќе бидат слатки секој дел. Значи прво, кој сум јас? Моето име е Анди Пенг. Јас сум на чело на ТА CS50 тука на Јеил. А во прилог на тоа, јас, исто така, ќе be-- ако некој би like-- вашиот трчање другар, рамо за плачење. Ако ноќта пред должи вашата pset е, немате поим што се случува, удри ме. Ние ќе сочувствува заедно, и така натаму. Само знам дека јас сум тука како ресурс за вас, како на линијата на фронтот во помагање на вас момци дознаам како да ги реши проблемите во CS50 и пошироко. Мојот е-мејл е andi.peng@yale.edu. Јас исто така ќе испрати еден поединец e-mail со мојот телефонски број во неа така што не може секој од интернет може да се види мојот телефонски број. Чувствуваат слободни да ми се јавите во секое време. Сериозно, мојот телефон е обично во прилог на мојата рака. Јас не може да одговори во рок од неколку минути. Јас не може да се одговори во рок од неколку часа. Но, можам да ви гарантирам, ако ви e-mail мене, ако ме нарекуваат, текст мене, јас ќе одговори во рок од 24 часа. Честопати, јас ќе одговори пред дека, бидејќи јас ги разбирам дека секој има некои проблеми, и ако сакате вашите одговори треба да се одговори многу брзо. Меѓутоа, ако се јавите ми 30 минути пред тоа парче што се должи четврток night-- биде како, Анди, помогни ми, Не сум started-- јас може да даде вас, кои рамо за плачење. Но, тоа може да биде време да се размислува за како не треба да го стори тоа следниот пат. ВО РЕД. Упс. Како можам да се врати? Таму ќе одиме. Така што во овој разбира, имаме тон на поддршка за секого. Во прилог на само секции, што ќе се секоја недела да поминуваат 90 прекрасни минути со мене, ние, исто така, имаат на работното време. Колкумина од вас момци веќе имаат бил на работното време за помош? Одлично. Тоа е навистина добро да се види, затоа што ние има персонал од над 45 TAS и CAS обучени и се разбира дека се тука за да ви помогнеме со вашата момци psets. Понеделник, тие се одржуваат во ТЕАЛ училница во 17 Хил куќа овде на Јеил. Вторник и четврток, тие се одржа во заедничкото. 8:00-11:00 доста секој делничен ден. Дојдат, излезе. Било каков проблем, нема problem-- само да дојде во, а потоа ние ќе ви помогнеме со тоа. Второ, во прилог на работното време и секции, ние исто така имаат шорцеви. Дали некој некогаш видел неколку од шорцеви или walkthroughs во видеа на веб страницата? ВО РЕД. Па тие се навистина, навистина корисна. Нашата убава производство Харвард обедините таму на тоа училиште на север, тие се снимени и произведени овие неверојатни можи видеа. Тие ќе ве однесе чекор по чекор, преку како да одат за решавање на некој проблем. Честопати, ако сте збунети околу едноставен концепт, од единствен концепт, ги погледне, бидејќи најверојатно имаат кратко на неа некаде на нашата веб страница. И тоа е обично голем ресурс да се погледне за кога си прв изгубени за тоа како да се справи со проблемот. Трето, ние исто така имаат study50 и reference50. Така студираат 50 на веб-страница е само линк. Тоа е, според мене, study.cs50.net или нешто слично. Само да го Google. Имаме многу слајдови подготвени. Имаме многу кратки и walkthroughs-- работите сите состави многу убаво и уредно за вас момци сите да ги пребарувате преку, гледам никаква концепти дека сте збунети околу тоа. Тоа веројатно ќе биде покриен таму во study50. Reference50-- слични. Имаме голем број на различни белешки лесно достапни за ваша употреба. И на крај, имаме што е наречен CS50 дискутираат, форум во кој, ако претходната ноќ правиш вашите проблеми, да речеме, имате некое прашање. Логирајте се за да CS50 разговараат. Објави го твоето прашање. А потоа еден од hundreds-- можеби, thousands-- на врсници преземање на оваа класа на интернет ќе се најавите. А можеби и некој може да се добие Вашиот одговор пред ТА може. Тоа е во суштина само еден онлајн форум за да можеме сите користи за да разговараат за нашите проблеми. Тоа е кул. ВО РЕД. Значи проблемот поставува. Ние сме во право во врска со дебелина на проблемот постави два. А многу од нас веќе имаат бореа проблем во собата еден. Ние веќе знаеме дека можеби чека за минатата ноќ за да го направите вашиот pset не е на најпаметните нешто да се направи во CS50. Совети и совети во суштина за Успехот се прочита целиот спец. Како и многумина од вас веќе имаат читај спецификациите за pset 2? ВО РЕД. Тоа е солидна сума. Знам дека вие момци веројатно имаат признаено до сега спецификациите се навистина долго. Тие се многу, многу долго. Тоа е навистина тешко да се прочита секоја линија на таа внимателно збор по збор. Сакате само да видиш до каде тоа ви кажува да се направи нешто. Можам да ви гарантирам, не го прават тоа. Ако го направите тоа, ти си веројатно ќе го пропушти некаде каде тоа ви кажува како да започнете проблемот или тоа ти кажува што да име вашиот проблем или тоа ви кажува, ова е можеби најдобриот начин за да почнете да го правите вашиот проблем. А потоа ќе бидат изгубени. Кога ќе се обидам да ја прочитате вашата спец половина пат, многу важни information-- во-дека не сте ќе биде во можност да навистина пристап. Па прочитајте ја целата спецификации. Обидете се да го прочитате целиот спец пред да се дојде до делот, затоа што тогаш, кога ќе зборува за pset, сите ние може да се има идеја од она што се случува. Како второ, тоа е концепт дека јас ќе се допаѓа на референтни многу во текот на семестарот се разбира. Но, во суштина, се сретне со нас на половина пат, нели? Мене, како на вашите ТП и Џејсон како се разбира менаџер и Scaz како професор и Давид како професор и сите Од друга прекрасна TAS во овој курс, асистенти во оваа разбира ние ќе се потрудиме да се осигура дека вие сте во собата Регистрација за да се успее во овој курс. Ние ќе се одржи секција. Ние ќе се одржи на работното време. Ние ќе одговори на вашиот телефон повици, одговори на вашиот e-mail, направиме се што можеме да се направи сигурни дека вашите прашања се одговорени. Сепак, да ни помогне премногу. Ги исполнуваат ни до половина. Ако дојде до работното време не има качил на секција, а не ја видел предавања, немајќи идеја што се случува, да биде како, да ми помогне. Одам да се биде како, добро, жал ми е. Тоа може да биде време да се дадат кои рамо за плачење, затоа што јас не сум сигурен она што можам да направам за да ви помогнат ако не се обидуваат да се барем помош себе малку на почетокот. Ги исполнуваат ни до половина. Знаете, ве молиме да дојде подготвени да одговорат и да добијат подготвени да се вклучат во материјалот. Тоа го прави работи толку многу полесно за сите кои се вклучени. Да, тоа е тоа прилично многу. Оценување. Така, на програмата, тоа е прилично во-длабочината на поглед на тоа како ние одделение. Но, во суштина, дефект во тоа е 50% од вашата оценка ќе биде psets, која е прекрасна, затоа што тоа е каде што сте трошење огромни поголемиот дел од вашето време на курсот. Квизови од 40%, и вашиот Конечниот проект ќе биде 10%. Ќе има две квизови текот текот на семестарот. Мислам дека времето и датумите се исто така се наведени на наставната програма. Начинот на кој ние ќе биде оценување на вашите psets е тоа што имаме суштински четири вредности кои ги додели на секое одделение. Имаме вредноста на обемот, коректност, дизајн и стил. Па како што можете да видите, тоа е вид на нашите формула за пресметување psets. Три ние даде најмногу тежина на коректност, бидејќи очигледно вашиот тренер треба да се тестира за случаите дека сакаме да се тестира. Вие момци имаат check50 на располагање. Тоа е многу корисна функција дека вие момци можат да сите испратите вашиот код на нашите сервери, каде што ние ќе го провериме тоа за вас. И сте виделе оние frowny лица, смешковци лица. Тие се навистина, навистина од голема помош. Ве молиме да не биде студент кој сакал обиди да hardcode во сите одговори на нив. Јас сум дефинитивно видел pset каде некој виде сите вредности на check50 и тие само хард кодирани in-- ако овој број, печати од овој број. Ако тој број, печати од тој број. Не го правам тоа. Иако технички check50 е точен, вашиот начин на решавање на Проблемот не е точна. Па само го користите check50 повремено. Но, исто така бидете сигурни дека ќе се разбере како тоа функционира, програмата функционира во прилог на check50, бидејќи не можеме да се тестираат секоја можен случај на check50. Ние ќе биде тестирање на некои од нив. Дизајн во суштина, како добро дизајниран е вашиот број? Ако сте копи-вметнување повеќе линии на код многу, многу пати. Можеби немате доста најдобар дизајн во вашиот код. Можеби е време да се додаде дека јамка. Во суштина, тоа е само тука сите за се обидува да го направи вашиот код, обидувајќи се да го напишете вашиот код како ефикасно што е можно повеќе, така што вашата програма работи што е можно побрзо. И на крај, ние имаме стил. Па стил е вид на произволна, субјективен рок. Знам дека официјално има стил 50 водич за CS50, каде што тоа ти го кажува, о ти, треба да има простор овде. Треба вид на формат кодот на овој начин. Вие треба да ги именува работите на овој начин. Јас навистина не се грижат, само по себе, како ке го одберете да стил вашиот код, само онолку колку што можете да останат доследни. На пример, ако сакате да се оставете простор по вашето четири пред четири вашата телефонска линија, само да го направите тоа во секое време. Не вид на го направи тоа. Не правете го тоа други времиња. Ако сакате да ја задржите кадрава загради просторот на одреден начин, само секогаш го на тој начин да се направи. Не вид на го направи тоа некаде тука и таму некаде не. Кога сме оценување, навистина е тешко ако јас немам идеја како што го форматирате вашиот код, работите се чукнат и надвор од местото. Ако само го задржи во согласност, тоа е многу полесно за мене како поголема да бидат во можност да го прочитате вашиот код. Тоа е многу полесно за вас, како студентот да бидат во можност да се погледне преку вашиот код и да видиме што е проблемот со таа црта зошто има проблеми. Стил е една од најлесните работи вие момци можат да се направи за да се добие целосна резултати. Во суштина, ако само се грижи, ако плаќате пет минути на внимание на вашиот код секоја недела, ќе треба се добива целосна поени стил. И на крај, ние сме она што се нарекува мултипликатор на опсегот. Scope-- Знам дека тоа е голема збор, особено во оваа класа. Но, обемот, сето она што значи е во тоа што се обидуваш на psets на најдоброто од вашата способност. Ако ја вклучите во три на вашиот четири проблеми па дури и не обидувајте се на последната, ти си веројатно случува да се изгуби некои точки на опсегот. Дури и ако само да почне на проблемот, направите вашиот најдобар да преку неа. Дури и ако тоа не функционира, да се претвори тоа во, затоа што тоа го покажува и докажува за нас што ти се обидуваш, дека сте се обиделе проблемот поставени на најдоброто од вашата способност. А потоа ние може да ви даде целосна поени за опсегот. Опсег е исто така многу важно за кога ќе зборува за најниска капка pset резултат. Па во текот на семестар, вие момци имаат девет psets. И ние, всушност, ќе се намалува најниска оценка од тие девет, но само ако имаат целосен опфат поени. Па ако може да се претвори во нецелосна pset, За жал, ние не може да се откажат од таа една, бидејќи вашиот обем точки не се завршени. Па дури и ако имате страшна недела каде умираш и си болен или вашето куче ќе умре, вашата мачка ќе умре, и сте преоптоварени со домашни задачи, само да се обиде на pset. Да го направи тоа на најдоброто од вашата способност. Ако тоа не функционира, тоа не е важно. Само да го предаде. Најмалку што може да даде ви укажува на напори. А за труд во оваа класа. Најмалку најниска капка резултат за напор. Па је. Тоа е доста тоа многу. Дали некој има прашања, така далеку од тоа колку ние одделение во наставата? Или било кој од овие? Било кој од овие па far-- делови, работното време? Кул. ВО РЕД. Значи ова е тема која не некој навистина сака да зборува за. Јас навистина не би сакал да зборувам за тоа. Вие момци навистина не би сакал да ме слушнат зборуваат за тоа. Но, за жал, сите ние треба да се зборува за тоа. Дејвид помина 20 минути предавање зборува за тоа. И кој е предмет на академски искреност. Значи ние сите тука сме веројатно напишана есеј некаде во нашите Јеил кариера. Ние веројатно сме добиле еден разговор, каде што имаме беше кажано да не плагиатствувам нашиот есеј, затоа што тоа не е наша работа. По компјутерски науки, имаме од ист вид на концепт. Целата работа што ќе ги достават, сите кодот што ќе пишувам треба да биде код кој сте го напишале. Не треба да биде број кои сте копирани од друго место. Не треба да биде код кој сте googled и plopped во а вие навистина не знам дали таа работи. Можете вид на имаат чувство на она што таа го прави, но навистина не. Кога се двоумите, во суштина, тоа е само да биде разумна. На нашата програма, имаме цела листа на работите гледаме како разумно наспроти не е разумно. На пример, разумно е вие ​​и вашиот пријател дискутираме за она што е најдобар начин да се оди за решавање на логички проблем. Тоа е прилично разумна. Што не би било разумно е ако момци се собраа заедно, внесе истиот код, и се претвори во истата шифра. Тоа не е разумно. Истото, вид на есеј. Ако сакате да се разговара со вашиот пријател, еј, тоа е она што сакам да пишувам за. Овие се чекорите што сакам да преземат за да пишувам за тоа, одлично. Тоа е прекрасно. Ве молиме да соработуваат едни со други. Ако вие момци да почне пишување на истото, претворат во истиот есеј, тоа е помалку ОК. Значи, кога се двоумите, само не го направи тоа. Тука, ние во CS50, имаме скрипти кои што работат за да се автоматизира да се тестира не само во исправноста на вашиот код, но исто така и единственоста на вашиот код. Затоа ве молам не ни се стави во позиција на морале да се однесуваат на вашиот случај да Екском. Ве молам само за сите, ајде да направи ова прекрасно искуство. Секој учи подобро, сите ние сме посреќни, и сите ние се постави за да се се успее во овој курс. Нешто што е многу единствено во врска со оваа група што мислам дека секој треба навистина обрне внимание е дека имаме што се вика на жалење клаузула во нашата програма. Значи во суштина, во рок од 72 часа, ако мислите дека сте го направиле нешто вие не сте сосема сигурни беше соодветно, Ве молиме да дојде кај нас. Ние Ви ветувам дека во рок од 72 часа ние ќе се справи со себе случај без да се однесуваат на високото орган во администрацијата. Па ако може да стигне до мене и да каже, Анди, еј, јас сум навистина жал, но мислам дека има неколку линии во мојата код синоќа дека јас вид на googled, се симна од магацинот Преливник, копирајте го и атипичен, и јас сум навистина, навистина жал за тоа, да ме известите. Ве молиме не само нека се гнои и само се надевам дека јас го фатат. Ние ќе го фатат. Само да се дојде до мене. Дозволете ми да знам во рок од 72 часа. Ќе дознаам решение. А ние ветуваме дека ние нема да се однесуваат на универзитетските власти суштина. Така, тоа е во ваш најдобар интерес само да се биде искрен со секого вклучени во курсот. ВО РЕД. ВО РЕД. Па сега, брзо пред Се движат натаму, дали некој имаат прашања во врска логистика за тоа како курсеви ние се случува да се кандидира, колку делови се случува да се кандидира, било што од тоа? ВО РЕД. Је. ПУБЛИКАТА: [Беззвучен]? АНДИ Пенг: Да. Па quizzes-- колку од вас се во делот понеделник / среда? Колкумина од вас се во вторник / четврток? Добро, па тоа е солидна Сплит тука. Па начинот на кој ние се кандидира тоа во Јеил е дека ние се случува да имаат две одделни quizzes-- еден за секоја section-- дека ќе бидат преземени за време на часот. Мислам дека тоа е октомври, крајот на октомври, нешто слично, што е една недела на квизот. Да, па само да дојде до класа. На тој понеделник или среда, ќе ги преземат квиз. На тој вторник или четврток, ќе донесе поинаква квиз. Но истиот материјал ќе бидат покриени. Је. Добро прашање. Је. ПУБЛИКАТА: Каде правиме одат за да се провери нашата оценки? АНДИ Пенг: Да. Па јас ќе се испраќаат на е-пошта што и секоја недела кога квизови се graded-- или, Жал ми е, кога psets се оценуваат. Psets обично се вклучен во од страна на пладне или петок. Па јас ветувам дека ќе обидете се да ги вратам на вас од страна на пладне од следниве петок. Секогаш кога ќе одделение pset, ќе го испратам надвор известување на книга на одделение што ви кажува вашиот резултат може да се гледа на интернет. Па право на оваа недела, откако јас заврши оценување psets минатата недела, вие момци ќе добиете e-mail известувањето ти го кажувам, еј ова е местото каде што одат за да ја видите вашата оценки. И може да се види секој дефект на оценките. Можете да ја видите коментари. Ох, брза работа, исто така. Делот за коментари во големата Книгата е местото каде што ќе веројатно поминуваат поголемиот дел од моето време оценување. Па едно нешто што е навистина важно кога вие момци се гледање оценките на вашиот psets не само што е во потрага на физичко резултат туку и преземање на време да навистина чита моите коментари. Често се што ви дава повратни информации за тоа како ви се решавање на проблемот. Ако ви треба да се направи нешто малку подобро, конструктивна критика обично е најдобро дадени во овие коментари секција. Затоа ве молам, ве молам, јас ќе одам да поминат извесно време пишувате коментари. Ве молиме, Јас навистина би го ценат ако вие момци ќе ги прочитате овие коментари. ВО РЕД. Кул. Во ред. Па ние ќе се обидеме да почнам да зборувам и само разгледување брзо некои од материјалот од нула само така сме недела на десната страна за почнуваат проблемите од оваа недела. Така е еден циклус, додека на три типа на јамки зборувавме претходно во оваа класа. Додека јамка суштина е напишано во синтакса каде што, додека некој услов, да го направите ова во неколку наврати, нели? Сфатете го тоа во овој графички тука. Ви се случува да започне во одреден момент во вашиот код. Си оди за да влезат состојба јамка if-- Не know-- x е помалку од еден. Ако тоа е точно, си оди да се изврши на телото јамка. И ви се случува да го прави дека, повторно, повторно, повторно, одново и over-- кој е зошто тоа е loop-- додека вашата состојба станува неточно. Така на овој начин, додека јамка е еден од поедноставни начини да се напише било кој вид на услов треба да се повторува одново и одново и одново. Но, бидете внимателни кога сте пишување било кој вид на јамка дека имате состојба излез како и надградба на што и да е така што вашиот јамка не само се кандидира повторно и бескрајно. Во секој случај, ви се случува да сакате да бидете сигурни дека сте менување на некои аспекти на Вашиот код или на крајот на циклусот само за да бидете сигурни дека ќе имаат начин за напредување кон состојба што сакате да се исполнат до крај. Дали тоа има смисла за секого? Ние едноставно не сакаат да бидат во фатени во оваа спирала каде одиме наоколу и наоколу и не постои начин да се пробие на јамка. И секоја јамка во суштина има начин да се направи тоа. ВО РЕД. Второ, многу од вас во вашиот Марио psets веројатно да се вработат овој вид на јамка. Тоа се вика направите додека јамка. Прво на сите, може ли некој да ми каже она што разликата помеѓу do додека јамка и додека јамка е? Је. ПУБЛИКАТА: На направите додека јамка работи на првиот [Беззвучен]. АНДИ Пенг: Да, точно. Па направите додека јамка секогаш го прави она што е во внатрешноста на задачи, се внатре во заградите таму и прави таа состојба пред проверка за the-- ми е, не дека кодот пред проверка на состојбата. И ова е особено значајно за нас овде, во оваа класа, бидејќи повеќето пати ние се случува да сакаат да се поттикне корисникот за некој вид на влез. А потоа, во зависност од влезниот тие ни даваат, тогаш може да се оцени, ај да се направи ние треба да ги поттикне повторно? Па во Марио, ако корисникот ти дал негативен висина, на пример, си оди за да првиот брза и го она што е внатре. Тогаш сте ќе треба да проверите, додека. Што знаете, е негативен 1, е дека позитивен број? Ако тоа не е, јас ќе одам да се оди врати и да го повтори do и повторете и се повторува и се повторува се додека не се конечно ви даде голем број кој ви се допаѓа, дека сите ние може да се вработат во нашиот код. Тоа е доста важно за во суштина било корисник влез. Можам да ви гарантира било време во pset каде бараме од вас да го внесете било кој вид на код, ние сме веројатно нема да ви даде случај тест во кој ние сме одам да ви даде нешто лошо, тоа е ќе се обиде да се пробие твојот код. Ако се обидеме да ви побара да внесување на цел број, ние само може да ви даде низа и да видиме како ќе се справи со тоа. Ако бараме од вас да вработи возраст, ние може да ви даде негативен број да се види како ќе се справи со тоа. Само бидете сигурни дека вие момци се тестира случаи во кои вие не го добиете најдоброто влез, да речеме. И направите додека јамка е многу пати од најдобрите начин да се дизајнира вашиот код, така дека го исполнува тој опсег. ВО РЕД. ВО РЕД. Така што ова е веројатно најголемиот комплекс јамка надвор од трите дека ние сме погледна досега. И се чини дека многу страшно на прв. Но, јас ви гарантирам, но откако ќе момци добиете висат на, како да се користи за телефонска линија, тоа е една од најпознатите корисни работи, најкорисните алатки во вашиот арсенал за придвижување напред во оваа класа. Така на пример, во нула, имавме овој многу едноставен блок дека само рече повтори овој одредени фрази, одреден број на пати. Патем, SAJ-- тоа е Scaz Анди Џејсон. Ние често се регистрирате нашите пораки Saj. Ако речеме Saj, немојте да бидете збунети. Тоа е само за нас. Па во нула, бевме во можност да се има блок, што рече, се повторува сакам Saj! 10 пати. Многу едноставна. Логиката дека е многу, многу едноставно, нели? Сакам прво да поминат низ првиот време и да се види дека, по втор пат и да се види дека, по трет пат, итн и така натаму, се додека не го погоди до 10. И начинот на кој ќе се претставуваат дека во код е само преку едноставен за телефонска линија. Па за, си оди за да се изјасни променлива овде, во овој случај, со int. Ние ќе треба да го именува тоа јас. Ние ќе треба да се иницијализира на 0. И едицијата сопирањето е Ќе биде ли е помалку од 10. И ажурирање се случува да биде з ++. И во рамките на циклусот, тоа се случува да се изврши до крајот тоа хитови на крајот на condition-- во кои случај, тоа се случува да се пробие на јамка. Не треба да има работи кои ви се момци имаат сите видови на виделе досега и мораше да се направи за вашиот проблем постави еден. Дали некој има било какви прашања врска за петелки во моментов? ВО РЕД. Одлично. ВО РЕД. Така и за оние од вас кои имаат прочитате pset спецификации за оваа недела знаат дека ние се случува да мора да се вработат нешто што се нарекува ASCII и ASCII табелата. Така Давид отиде во текот на предавањето на кратко како што се компјутери essentially-- е кодиран во компјутер во бинарни, во нули и единици. И начинот на кој што компјутерите се во можност за складирање на различни вредности во прилог да нули и единици се преку мапирање тие бројки да претставуваат други бројки или во суштина други ликови. Значи во овој случај, ASCII table-- сите тоа го прави е мапа знаци, или карактери, за да броеви. Па изворниот код датотека во Вашиот computer-- го гледа, еј, еден куп од нули и единици, нули и единици, нули и единици. Тоа е она што се чуваат во Крај на меморијата на вашиот компјутер. Но, кога ние, луѓето сакаат да комуницира со компјутерот, ние want-- каже, на пример, ако сакам големи букви А, Одам да треба некој начин на раскажување на компјутер, ох, кога ќе напишете голема буква А, мислам оваа претстава во бинарна. Така и на начинот на кој тоа го правиме се фрли произволна работа наречена табела ASCII, каде што ние, како луѓе, како програмери, пред некое време, ние произволно одлучи дека ние требаше да му ја додели на овие број вредности на овие ликови. Па вие момци можат Google оваа онлајн. Мислам дека има линк до него во вашата pset-- само маса е ASCII мапа, ASCII табела. Тоа само значи бинарни броеви во ликовите. И тоа се случува да биде многу корисни за вашиот проблем сет секогаш кога ќе сакате да го пресмета нешто или ако сакате да се прикаже одредени карактери или броеви или манипулира со одредени ликови. Тоа се случува да биде многу важно да сите знаете како да се движите со ASCII табелата. Така на пример, во големи букви А е претставена со бројот 65. И мали букви на е претставена со 97. Па затоа е важно да се знае дека Разликата меѓу двете вредности е 32. Честопати, ако треба да се конвертира од една до друга, разликата е 32. И не грижете се ако сте вид на збунети за ова во прв. Ќе одиме околу тоа како ние би вработуваат тоа во вистински код. ВО РЕД. Така и за оние од вас со лаптопи, се чувствуваат слободни да се повлече до една маса ASCII, затоа што тие ќе веројатно бара од вас момци да референца што ликовите се. ВО РЕД. Па знаејќи дека одредени знаци на сајтот за одредени броеви ако јас се да се кандидира само првиот линија на кои code-- на printf a, мали букви на минус големи А. Дали некој имаат претпоставка за тоа што ќе биде печатење на екран во моментов? Значи прво на сите, она што го прави тоа мали репрезент? Што е тоа што бројот кодирани во табелата на ASCII. Жал ми е? ПУБЛИКАТА: 97? АНДИ Пенг: 97, одлично. И она што е голема буква А? ПУБЛИКАТА: 65. АНДИ Пенг: Значи, што е 97 минус 65? ПУБЛИКАТА: 32. АНДИ Пенг: Во ред. Значи она што го делат ова мислење ќе се случи кога јас внесување дека линија на кодот во мојот компјутер? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Жал ми е, кажете го тоа. Без грижи. Ова е многу безбеден животната средина, минус на камерата. Сите ние сме ќе to-- без грижи. Само сите ние ќе треба да се преправаме како тоа е само нас застрашувачки во оваа соба. Без грижи. Не станува збор е премногу глупаво. Без одговор е глупав одговор. Јас сум веројатно нема да се прават грешки во текот на моето предавање. Сериозно, момци, само да го blurt од. Бидете сигурни во себе, знаеш? Така што беше тоа? Кој рече дека последен одговор? ВО РЕД. Викне дека убаво и јасно. ПУБЛИКАТА: 32? АНДИ Пенг: 32. Добро, ајде да се кандидира овој законик и види дали тоа е она што се случува. ВО РЕД. Така што вие момци можат да вид на види, типичниот нотација сум поставени се тука за тоа како ние би можеле да вработат било кој вид на програма во нашиот компјутер. Имаме нашата главна функција во рок од нашата главна функција. Јас сум само ќе копирајте го и ставете оваа линија код. Исто така, да се биде внимателен кога ќе момци се копирање и вметнување код. Понекогаш одредени оператори не ставете над правилно. Во тој случај, минусот знак е всушност цртичка. И така што компјутер не го собереш. Па морав да се вратам и физички Повторете тоа. Но, бидете внимателни кога вие момци го прават. ВО РЕД. Ние ќе треба да ја извршите оваа тука. Па ние ќе го CD-то во нашата section2. Сум се нарекува оваа програма asciimath. Па се сеќавам, кога ќе ја стартувате која било програма, ние сакаме да го компајлирате прв со трчање преку нашата шминка. И тогаш ние навистина сакаме да се кандидира програмата со правење точка-црта. Па ние ќе се ./asciimath. Право, таму ќе одиме. И можеме да видиме 32. Браво. Заслужуваат едно парче од бонбоната. Бонбони за вас. Жал ми е. Во ред. ВО РЕД. За да можеме да се вратиме на нашиот пример овде. ААХ, бр. Aah. ВО РЕД. Јас сум само ќе го чувам како тоа. ВО РЕД. ВО РЕД. Така што вие момци да видите, ние може да го направи многу многу интересни работи, многу многу интересни нешта, многу многу комплицирани нешта кои вклучуваат ASCII карактери и броеви. Откако ќе се фаќате за редат пет, тоа е многу за да го следат заедно. Ние нема да се оди преку рез. Слободно можете да се, ако можеш, таа причина на хартија прво за тоа што треба да се случува кога го внесуваш таква низа на вредности. На пример, со тоа што последната линија, имаме z-- што претставува одреден number-- a-- кој меѓу другото е одредени number-- плус 1 modulos 26 плус мали букви a. Ако вие момци да ги задржи читање во текот на овие, можете забележите шема излезе во како ние сме манипулирање на кодот. Силно, многу сугерираат по делот сите вас момци одат напред и влезни сите оние кои се во вашиот компјутер и да видиме каков вид на броеви се излегува и расудување преку зошто тоа се случува, затоа што за вашиот psets тоа ќе биде навистина важно за да се разбере зошто некои работи се случуваат. Сите овие слајдови ќе биде онлајн. Па не се грижи за се обидува да физички копирајте белешки. Сè што е онлајн. Ова се дел ќе биде онлајн. Сите мои код која Јас се кандидирам ќе биде онлајн. Је. Дали сеуште имате прашање? ПУБЛИКАТА: Што е modulos? АНДИ Пенг: Во ред. Па modulo е оператор кој ќе да е многу важно да се pset вашата момци е овде. Па начинот на кој операторите во Ц и во програмирање е дека имате она што се нарекува Симболот поделба и симбол на модул, што е исто како и знакот за процент. Па во C, кога ќе се направи цел број поделено со цел број со расцеп, Ц има тенденција да сакаат да ги намалат исклучите сите на децимална поени, бидејќи цел број сака да се претворат во цел број. Тоа не се случува да сакаат да бидат двојно со еден куп на децимали сите по него. Значи, ако јас се направи 3 поделено со 2, тоа се случува да им ја исклучи 0.5 и само да ви даде 1. Па тоа е нешто да се биде многу внимателни за тоа кога сте прави било кој вид на математика во програмирање, е дека бројките ќе добиете не може да биде на броеви дека сте биле размислување, која е причината зошто заокружување во вашата последните pset е толку важно. Modulo ви дава остатокот. Така на пример, ако сум го правела 3 modulo 2-- така 3 отсто знак 2-- тоа ќе ви даде до крајот на таа. Па 3 поделено со 2 е 1,5. Тоа е 1 остатокот од 1. Тоа ќе ви даде 1, која е остатокот од тоа. Па кога ќе момци се движат преку масата на ASCII, modulo ќе завршат да бидат нешто што е многу важно, и ние ќе разговараат за тоа подоцна. ВО РЕД. Така нешто што е убава, прилично нови и прилично уникатен дека ние сме се дискутира оваа недела концептот на она што е низа. Па низа е прв тип на податоци структура дека ние ќе треба да средба во оваа класа. Сите податоци структура е е некој вид на произволни, буквално работи како структура дека ние како програмери го создале, дека ние се стави во нашиот код кој може да содржи и други парчиња на код. Па во таа смисла, на array-- мислам на тоа како датотека кабинет, каде што ако се отвори различни полиците на вашата датотека кабинет, можете да пристапите на различни нешта. Во меморијата, низа прави само иста работа на вашиот компјутер. Можете да имаат различни blocks-- ние ги нарекуваат indices-- на низа. Тоа е исто како да го блокира, полица на меморија дека ние сме создадени во рамките на вашиот компјутер кој што можете да внесете некои работи во различни простори. Така со ред, ќе Секогаш треба да се specify-- Треба да ја наведете прогласување низа во следниов формат. Си оди за да првиот одредите типот податоци што сакате да се создаде на низата. Ако сакам низа на цели броеви, Јас ќе се стави int право таму. Ако сакам низа на стрингови, Одам да се стави жици таму, името на вашиот низа, а потоа ви се случува да имаат квадратни загради. И внатре во квадратни загради, ти си ќе мора на големината на вашиот низа. Нешто што е навистина важно да се има предвид при креирање низи е тоа, откако ќе се создаде низа, дека големината не може да се промени. Па ако се знае дека во моментов имате низа на големина 10, ти знаеш дека јас ќе одам да се има 10 ќелии во рок од 10 или индекси во оваа низа, и тоа никогаш не се случува да се прошири или да го намалите без оглед на тоа, и дека има Во моментов само 10 блокови на простор распределени во вашата меморија, која може да собере до 10 нешта на она што сте го стави. Така на овој начин, еден вид низа на податоци, податочна структура која е низа е многу различен од некои други, ние ќе се покриваат подоцна во овој курс. Је. На пример, ако си сакал да создаде низа со големина 3 кој содржани променливи на integer-- Ох извинете, на temperature-- и температура, на Се разбира, е цел број. Па ние ќе се создаде int, која е податоци за видот на она што сакаме да ги чувате. Ние ќе треба да се јавите на оваа температури за доброто на номенклатурата на именување нешто што сите ние се разбере. И ние ќе треба да имаат квадратни загради. И ние сакаме три броја. Па ние ќе треба да се стави три во него. Нешто што е навистина важно да се задржи во умот е дека низи се нула индексирани. Сето она што значи е дека започне со индекс на 0, и ќе снема до преку големината на низата минус 1. Така на пример, еве, ние имаат низа на големината 3. Тоа се случува да биде во можност да се одржи три вредности. Но бројките themselves-- дека број, низа, тој индекс, низа, се од 0 до 2. Значи момци, да, навистина, навистина внимателни кога си минува низ вашите проблеми поставени и создавање на било кој вид на низа, затоа што многу пати тоа е навистина, навистина лесно да се заборави тоа. Јас всушност немаат индекс од 3, што во моментов е нешто имаат индекс на 2. И ако се обидете да пристап на трети индекс, тоа се случува да биде што е наречен null терминатор. Тоа не се случува да се, всушност, постојат во низа. И компјутерите нема да се допаѓа тоа. Па бидете внимателни секогаш кога сте пристапуваат работи едноставно да се осигура дека ќе се сетите кои низи се нула-индексирани. ВО РЕД. Така, првиот пример е само еден начин на создавање на низа. Вториот пример имам подолу е само посебен начин на создавање на она што е на исти податоци структура која ние само внесуваат. Така, наместо на физички работи преку и пуштање во температура од 0 еднакво на она што, температурата 1 еднакво на она што, температурата 2 еднаквите без оглед на тоа, би можел всушност само директно сето тоа се создаде во една линија Температурата во квадратни загради рамноправни. И известувањето, во овој случај, вие не треба да за да одредите како голем вашиот низа е, затоа што компјутерот ќе одат преку и да се види дека има три елементи во оние големите загради. И тоа се случува да се знае, во ред, Ми треба низа на големината 3. Вие не се случува да треба да се внесување тоа на следниот начин. И, исто така, да, на тој начин. Дали некој има прашања за тоа како ќе се направи низи или како работи на структурата на низа? Је. ПУБЛИКАТА: [Беззвучен]? АНДИ Пенг: Да, точно. Значи, ако сте во ситуација да се изјасни и да се иницијализира низа на следниов начин, кој е втор пат, можете само да ја напушти оние. И на компјутерот автоматски се знае дека тоа треба да се смета како многу елементи се во тие големи загради, одделени со запирки. Па тука ќе го видат 65, 87, 30. Така што компјутер не знае, ох, има три цели броеви. Знам да се создаде име низа температурата со три елементи во неа. Добро прашање. Је. ПУБЛИКАТА: Зарем не е можно да се создаде низа со различни типови на податоци кои може да се влезе во неа? На пример, со цели броеви [Беззвучен]? АНДИ Пенг: За целите на оваа класа, не, токму сега. Кога ќе се создаде податоци структура како низа, ти си кажува компјутер, еј, ми требаш да одвои оваа многу меморија во мојот хард диск, со секоја клетка да биде одреден број на битови. Сетам што научивме во недела нула дека различни податоци видови имаат различни големини? Така на пример, стринг е различен износ на простор од еден знак, кој е различна количина на простор од цел број. И така, ако не се определи и вие се меша и натпревар какви типови на променливи имате, на компјутерот Ќе биде многу збунет. И тоа не се случува да се знае колку меморија за да ви даде. Така и за целите на правото само сега, компјутерите можат препознае еден вид на низа. Добро прашање. ВО РЕД. Па природно, Второто прашање што имаме е, добро, сега дека ние сме создале низа и ние се стави сите овие работи во низа, колку сме ние ќе биде во можност за пристап до неа? Така типична структура што ние секогаш пристап до низа е нашата прекрасна за телефонска линија. Јас ветувам дека вие момци дека ние ќе бидеме гледајќи голем број на овој човек овде. Во суштина, во секое време сакате за внесување вредности во низа или ако сакате да пристапите до нив, Најдобар начин да се стори тоа е за телефонска линија, бидејќи во за телефонска линија, можете знам колку пати сте ќе сакате да ја извршите преку низа, затоа што имаат станица издание, нели? И секој пат кога ќе ја стартувате преку, можете да пристапите на друг елемент од низата. И, исто така, ова е причината зошто обично да започнеме нашата за петелки на вредноста на 0, бидејќи кога ќе пристапите низи, можете да пристапите до индексот на нула. И така тоа е паралелна многу убаво. Вие момци можат да се сака да се пишуваат за int i е еднакво на 1. i е помалку од или еднакво на 3. Но, тоа не би сакал да работиш толку и тука, само заради тоа што имаат елементи на 0, 1, и 2. И така, ако сте во ситуација да започнете Мислам вашите елемент во 1, 2 и 3, ви се случува да се заокружи трчање надвор од границите на својата низа, и лоши работи се случува да се случи. Па се надевам дека вие момци видите segue зошто во раните часови бевме наставата момци како да работи и форматирам за телефонска линија на начинот на кој што бевме. Тоа е затоа што, сега ние сме transitioned во низи, можете да видите зошто 0 позајми многу убаво да се пристапува. Па начинот на кој го правиме е that-- сум само да го отпечатите тука за доброто од неа печатење. Но имам моите случаеви, запирка. И вистинскиот пристапува дел се случува. Името на низата бил повикан на температурата. Така, тоа е температурата и i-тиот елемент од низата. Па како за телефонска линија тече низ, тоа се случува да се започне на 0. Тоа се случува да се печати од 0. индекс на оваа низа. Тогаш тоа се случува да се печати од првиот елемент. Тогаш тоа се случува да се печати од втората. И тогаш ние ќе треба да се скрши. Е јасно на сите како што се случува? Одлично. Во ред. Значи тука имаме начин на велејќи дека, ако ние не сакавме до тешко код ме in-- како програмер. Не сакав да всушност физички стави во секој поединечен елемент на оваа низа. Ако сакав да Ве има корисникот влезни вредности, што е најдобар начин да го направите тоа? Па, еве јас се создаде оваа прекрасна функција, во кои можам да се изјаснам како низа. Па int scores-- ајде речеме ние сакаме да се направи низа што се одржа на оценки од сите 18 на студенти и тука во овој дел. Мислам дека имаме малку повеќе од 18 деца денес. Но заради пример е, ајде да претпоставиме имавме 18. Јас би се создаде име низа резултати со int тип, бидејќи голем број, се разбира, се бројки. А јас ќе одам да се има 18 во квадратни загради, бидејќи тоа е како јас многу студенти сакате да бидете во можност да се сместат голем број. И начинот на кој јас би се доверат низата е дека сум му го стартувате преку за телефонска линија, на Се разбира, со 0 биде мојот 0. индекс. А потоа и со 18 да се биде мој запирање издание, затоа што има 18 елементи во низата. А потоа јас ќе одам да направите printf, Внесете гол за student-- ала ала-чевли. Може ли некој да ми каже зошто јас сум тука печатење i плус 1, а не јас? Тоа е вид на трик прашање, навистина не. Тоа всушност не физички влијаат на водењето на кодот. Је. ПУБЛИКАТА: [Беззвучен] 0? АНДИ Пенг: Да, точно. Тоа е малку непријатно да се каже, еј, ти си на 0. студент во оваа класа. Тоа е малку чудно. Па нас, како луѓе, не ми се допаѓа да се размислува за тоа како компјутерите мислите. Значи, иако во компјутер, тоа е зачувување на вредности во 0-ти индекс, кога ние сме луѓе, ние навистина не сакал да се однесуваат како да се нула. Па кога ќе се печати само тоа, Одам да се печати и ги додадете 1 само за доброто на јасност. Па кога ќе се печати, ќе одам да се биде можност да се печати ученици од 1 до 18. Тоа всушност не влијаат водењето на кодот на било кој начин, онака како што се печати. Но, бидете внимателни кога сте всушност пристапуваат на низата. Кога ќе ја видите резултати I, известување овде сум, всушност, пристапуваат на 0. индекс и не на плус 0-- 1 или 1 плус 1, во овој случај, па индексот дека тоа е всушност јасно. Е секој вид на ОК на како тоа се работи преку и со секој индекс сум ставање на вредност во низа и создавање на низа со 18 броеви дека корисникот ќе внесување? ВО РЕД. Кул. ВО РЕД. Ние сега се пресели во нешто што е прилично релевантни за ова парче собата, како и. Знам дека во предавањето, David-- Жал ми е, ти мораше прашање? ПУБЛИКАТА: Можете ли да го зголемиш? АНДИ Пенг: Да, па се обидов. Но, јас не знам. Поради некоја причина, ова верзија на PowerPoint, навистина не работи добро со екранот. Значи ние сме само ќе да го чуваме како оваа. Сите овие ќе бидат поставени на интернет. Извинете, момци. Је. ВО РЕД. Значи, ние исто така може да имаат стрингови. Значи, ако вие момци всушност notice-- јас знам Роб отиде над ова во тој час дека тој did-- стринг е, всушност, само низа од карактери, ако мислите дека за тоа, нели? А низа е името или реченица или збор, нели? Ако јас да се создаде низа име Andi-- само моето име, А-Н-Д-јас. Мислите на тоа како само една променлива. Но всушност, тоа е паднат во само низа од карактери. Па тоа е се здобија со карактер на чуваат во вредност низа. Тоа доби карактер на n чуваат во Вториот индекс и така натаму и така натаму. Па на таков начин, ние всушност имаат овој вид на структурата наведена во место за нашите жици. Па еве, да, требаше да го внесете Зборот "јаде" - така стринг збор е еднаква добијат низа. Ако јас се да го внесете зборот "јаде", кој физички е начинот на кој мојот компјутер е зачувување на таа низа во мојата меморија. И ако сакав да ја извршите преку кои и печатење што out-- па за во з е еднаква на нула, се сеќавам, во предавање, ние опфатени нешто што се вика strlen, или должината на стрингот. Бидејќи јас не се всушност знаете како големи низата е на она што inputting-- на корисникот На пример, се внесуваат зборот "јаде", а знам тоа е долга три карактери, нели? Па можев да се стави во три таму и сè ќе биде во ред. Но, ако вашиот кориснички влез нешто тоа е друга број на вредности, си оди за да не биде во можност да навистина знам дека кога ќе го програмирате вашиот код. Па начинот на кој ние ги решаваме тест случаи како тоа е дека имаме нешто наречен strlen, која е само функција што ви кажува колку долго стринг е. Па strlen на зборот. Мојот збор е да јадат. n е еднакво strlen на зборот. Може некој да ми каже што тој вредност, всушност, е во право таму? Што значи n што го претставува право сега, во овој пример, ако имав јаде? ПУБЛИКАТА: 3. АНДИ Пенг: 3, точно. Па ние имаме за int i еднаква нула, n е еднакво на 3, во суштина. И јас се случува да се кандидира додека не е помалку од 3i ++. И тоа се случува да одат во суштина преку и да го прават истото. Тоа се случува да се печати секоја вредност и да ви даде E-A-T. Тоа е само означувајќи поинаков начин на пишување. Што се случува да биде многу корисна. Је. ПУБЛИКАТА: Која е користа од ставање n е еднакво на strlen збор внатре дека за телефонска линија [Беззвучен]? АНДИ Пенг: Да. Значи, ако јас се to-- каже, на пример, ако јас се да го направи тоа, а потоа do-- oop-- тоа, во мојот код, тоа ќе всушност се прави како истото. Сепак, начинот на кој објасни Дејвид тоа за време на предавањето, ако некој од вас момци се сеќавам, беше дека, како и луѓето, како програмери, ние навистина се обиде да се програмира нашата код, така што нашите компјутер има да работат на минимум колку што е можно, па дека нашиот код е многу ефикасен. Па ако ја имав таму, што ќе се случи преку мојата за телефонска линија е дека сум му прв прогласи променлива со име јас се случува да биде 0. Одам да се провери, ох, она што е на strlen на зборот? Ох, strlen е 3. Така е ли помалку од три? Да тоа е. Одам да се кандидира. А потоа по втор пат назад околу јамка, јас ќе одам да прираст i. јас се случува да биде еден. И јас се случува да се провери, ох, но она што е strlen на зборот? Ох, тоа е три. И тоа го прави да изгледа вид на непотребното, секој пат кога ќе ја извршите преку телефонска линија, што треба да се проверка на функција, иако strlen на зборот всушност никогаш не се менува? Така, тоа е дополнителна енергија за компјутер. Кога ќе почнам да зборувам за работите кои се милијарди и милијарди и милијарди места долго, замислете вашиот компјутер да мора да одат преку и физички провери сето тоа секој пат. Тоа е причината зошто, да се направи само за доброто на ефикасноста, Ние настојуваме да се само да го направите ова, бидејќи на овој начин ние сме само повик на функција уште во почетокот, и дека секој пат кога тоа оди преку тоа се случува за чување на вредноста 3 таму, што ќе не мора постојано да се провери во секое време. Је. ПУБЛИКАТА: Жал ми е. Само [Беззвучен]. Може да ви се int n еднаква strlen и го стави дека над надвор од за јамка исто така? АНДИ Пенг: Да. Вие би можеле да го направат тоа, апсолутно. Причина ние го имаме во овде е бидејќи начинот за телефонска линија дела е тоа што се вика локална променлива во смисла дека сè си создавањето внатрешноста на за телефонска линија постои само во внатрешноста на за телефонска линија. Па променливата i само постои во тие рамки. И тука на променливи од n, исто така, постои само во оние рамки. Значи, ако сте во ситуација да го користите на strlen збор повеќе пати долу, апсолутно најдобар начин да го направите тоа ќе биде да го пријават до врвот така да не треба да го прават тоа еднаш. Је. ПУБЛИКАТА: Зошто имаш нова линија по отсто гледање, ако сакате да се стави сите писмата до него се разделите? АНДИ Пенг: О, јас сакав да сите нив се печати на секоја линија. Тоа не е важно. Да, тоа е форматирање. Тоа е добро прашање, иако. Да, ако сакав да се печати сето тоа на само една линија, Јас и не би цртичка во. ВО РЕД. Секој добар? ВО РЕД. Кул. Па мислам дека имам доволно зборуваше. Пак вие момци да ја извршите преку код и да ми кажете што не е во ред тука. Каде е грешка? Па како што можете да видите, јас сум прогласена за нова низа од стринг тип по име класа. И јас сум се внесуваат Сем, Џес, и Ким во неа. И јас сум се обидува да се печати сите елементи на низата. Може некој да ми каже зошто ова се случува да ми даде проблеми? Јас ќе ти дадам 10 момци секунди да се размислува за тоа. ВО РЕД. Да? ПУБЛИКАТА: Дали е лево центар еднакво на 3 или [Беззвучен]? АНДИ Пенг: Токму така. Па колку пати е ова всушност ќе помине низ овој циклус? ПУБЛИКАТА: Четири години. АНДИ Пенг: Токму така. Тоа се случува да преку четири пати. Тоа се случува да се кандидира преку на 0, 1, 2 и 3, бидејќи нивните елемент е з е помалку од или еднакво на 3. Тоа не се случува да се запре кога тоа е 2. Тоа се случува да се задржи случува додека таа хитови 3. И како што знаеме, има само три елементи во нашите вистински низа. Ако се обидеме да пристапите до четвртиот елемент или индексот на 3, ви се случува да го погоди некаде во меморија, која не постои. Таа се вика null терминатор. Ништо не се случува да биде таму. Вашиот компјутер не се случува да биде многу среќен со вас. Је. Дали некој има прашања за тоа зошто тој се случува? Тоа е заедничка област за да се избегне. Је. ПУБЛИКАТА: Зарем првиот лизгајте исто така имаат низа на 2? АНДИ Пенг: Не Значи во суштина, кога си прави низа, што заграда право таму, дека number-- сите ја кажува ви е како многу елементи што го имам. Тоа не е всушност кажува ме индексите на ништо. Значи во овој случај, знам што сакам да се напише со три места, со три физички места да држете што сакам да се одржи. Па тоа е зошто бројот три е таму. Меѓутоа, ако сакав всушност да го достигнете, ако сакав да кажам, printf број класа заграда, тогаш си оди за да всушност се стави физичкиот индекс таму. Да, добро прашање. ПУБЛИКАТА: Така е на физички индекс би требало да биде [Беззвучен]? АНДИ Пенг: Жал ми е. Може да ви зборувам малку? ПУБЛИКАТА: Така е физичката индекс [Беззвучен] секоја од кутии? [Беззвучен]? АНДИ Пенг: Да. Па јас ќе одам да се врати во право тука. Мислам на право тука. Имаме низа од големината 3. Има три места, како, физички променливи тука. Но тие се именувани 0, 1 и 2. Значи, ако јас сакав да им пристапите, начинот на кој јас им пристапите printf е од она што сакав тука. Вие ќе треба да се печати дознаете името на тоа, бидејќи тогаш компјутерот знае, ох, јас треба да се погледне во оваа низа за 0. индекс. Је. Но, големината на тоа не се менува. Големината е 3, без оглед за тоа како ќе ги етикетираат. ВО РЕД. Секој добар? ПУБЛИКАТА: Значи, секој пат кога ќе [Беззвучен]? АНДИ Пенг: Во ред. Значи во овој случај, ние навистина не навлегувам во тоа токму сега во курсот. Но, знаете дека string-- како јас реков претходно, стринг е во суштина низа на карактери. Значи, ако јас се создаде низа на стрингови, јас вид на имаат низа на низа на карактери, нели? Значи во овој случај, бидејќи јас имаат низа на стрингови, ако сте во ситуација да го внесете навистина долго збор, кои се уште го зазема само еден простор, затоа што тоа е еден стринг. Но, ако сте во ситуација да се мисли на ликовите на таа низа, тогаш тоа е преземањето многу повеќе ликови од некоја од другите зборови се. Навистина не е важно за сега. Но тоа е само општо колку е тоа е работа. ВО РЕД. Па ова е нешто што ќе те оставам да се направи многу во текот на семестарот. Јас треба да се одморат мојот глас. Вие момци треба да се стимулира себе. Многу од вас веројатно треба да спијат во моментов. Јас сум внесување случаен проблеми каде што ние како класа или со партнерот до ви се случува да поминат неколку минути разговара за тоа како ние ќе одиме за решавање на или креирање на програма како што е оваа. Значи, токму сега, ние сакаме да се создаде program-- ние ќе треба да го наречеме upper.c-- кое конвертира со мали букви збор за високата класа string-- големи букви, жалам. Збор во низи, жал, е синоним. Одам да ги промени да означува истото нешто. Је. Потребни неколку минути. Тоа не мора да биде напишани на било кој јазик. Само во pseudocode код или логично тоа како ние би дури и обратите за тоа таков проблем. Је. [СТРАНА РАЗГОВОР] Осетив дека вие момци can-- Јас вид на се види веќе во програмата. Претпоставувам мојата недостаток на режим презентер е проблем. Но, тоа е во ред. [СТРАНА РАЗГОВОР] Да, ве молам, момци. Дојде добие бонбони. Дојде добие бонбони. ПУБЛИКАТА: Да! [СТРАНА РАЗГОВОР] АНДИ Пенг: Исто така, да, Ќе почнам да фрлаат бонбони на луѓе кои не се одговори на прашања. Затоа мора да се одговори на сите прашања. Или Претпоставувам дека луѓето кои не одговара на прашања. Да, обратно. [СТРАНА РАЗГОВОР] ПУБЛИКАТА: [Беззвучен] АНДИ Пенг: Да. Је. [СТРАНА РАЗГОВОР] Добро, момци. Преземат, како, повеќе од 10 секунди. [СТРАНА РАЗГОВОР] Добро, момци. Па пред да почнете да се обидува да всушност физички се напише код, добра навика да се развие е дека сакаме да Првиот вид на разумот од логично како ќе го направи тоа. Вие сакате да бидете сигурни, пред физички почнете да се обидува да го кодот во Марио, што ќе се направи Осигурајте се дека имате вашиот pseudocode. Која се движи во правец преку она што треба да се создаде толку дека, кога ќе се физички напишете ја вашата програма подоцна, ви се поспособни да се фати грешки во вашиот код и работи како што. Значи ние се случува да се само на проектот by-- на англиски јазик, во pseudocode, Сака ли некој да даде мене општо објаснување за тоа како ние би се обратите за тоа? Је. ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Секако, не се грижи. ПУБЛИКАТА: Можете ли да го прашам да или прашајте некој да добие низа 1-- је, стринг, и потоа-- АНДИ Пенг: Да, така што ова е добар почеток. Ќе почнете да пишувате, жал, како што се зборува. So-- ПУБЛИКАТА: --the мали букви бројки се повисоки, нели? Или мали букви имаат високи бројки? АНДИ Пенг: Токму така. ПУБЛИКАТА: Па тогаш ние одземе 32 од она што [Беззвучен]. АНДИ Пенг: Велики. Па ние вид на имаат општа смисла за тоа како да се работи околу овој проблем. Знаејќи дека ние сме вид на научиле физичкиот начин на кој стрингови се чуваат во меморијата, она што го правите веќе знаете дека ви се случува да се веројатно мора да пишува во вашиот код со цел да се движат низ низа? ПУБЛИКАТА: за телефонска линија. АНДИ Пенг: за телефонска линија, точно. Одлично. Па ние вид на имаат генерички pseudocode запишано тој вид на се откажува белешки за тоа како можете ќе се движи околу решавање на проблемот. Сега дека имате ова, може да го референца за подоцна за тоа кога ќе се обидуваш да всушност пишува вашиот код. Па ние всушност може да оди тука. А имам функција наречена upper.c-- таму is-- од само празен терк право сега дека вие момци се случува да го да ми помогне да дознаам за тоа како да се напише оваа линија на не code-- линија код. Тоа ќе биде повеќе линии на код. Кога ќе се започне со било кој вид на празно pset, што е првото нешто што ми треба да се сеќавам да се направи? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Велика Да. Вклучат. stdio.h. Честопати тоа е една од повеќето лесно грешки луѓе ќе се направи кога тие се пишување, е дека тие ќе се заборавајте да го вклучите важно библиотека им се потребни. Па ако е работното време и вие ќе бидете како, Не знам зошто мојот код не работи. Можете ли да ми кажете зошто тоа не е работа? Ние се случува да се каже си # Include? Треба да го # Include. ВО РЕД. Значи имаме стандардот I / O тука. Е дека единствениот библиотека ние се случува да треба овде? Што друго ќе правиме? Жал ми е. Некој само што врескаат надвор? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Има да одите. ВО РЕД. И како можам да се обратите за започнување на било кој вид на функција, било кој вид на главната функција во рамките на нашата програма? Int главната. ВО РЕД. Што мислам кога го стави во внатрешноста тука? Што е првото нешто што сакате да направите? Ако сакаме да се добие низа од корисникот, она што сме ние ќе имаме да се направи на овој првата линија? Извинете, вие момци само се чувствуваат слободно да се проговори и гласно. Само извикам сеедно. ПУБЛИКАТА: Прашајте на корисникот? АНДИ Пенг: Како го правиме тоа? Ask-- сум јас ќе напишете "побара од корисникот"? ПУБЛИКАТА: printf. АНДИ Пенг: Во ред. Printf. Што сакам да printf? ПУБЛИКАТА: Тип во нешто. АНДИ Пенг: како тоа? Дечки, се преправаат како да сум на компјутер. Физички да ми кажете на секој чекор дека јас треба да напишеш во оваа ситуација? Правам нешто погрешно? Треба ли да се внесе нешто? ПУБЛИКАТА: Треба цитати. АНДИ Пенг: Ми треба наводници? ВО РЕД. ВО РЕД. ПУБЛИКАТА: И тогаш нова линија. Запирка. АНДИ Пенг: запирка? ВО РЕД. Добро. ПУБЛИКАТА: А можеби и се определи дека ќе го сакаат во мали букви? АНДИ Пенг: Велики. Вие момци се смееш на мене заборавајќи да стави точка-запирка. Јас ви гарантирам некаде во текот на оваа класа, ќе заборавите да се стави точка и запирка, и тоа ќе ви бидат потребни три часа за да дознаам зошто вашиот код не е работа. Тоа се случи на сите нас. Тоа најверојатно ќе се случи со вас. Добие во добра навика на користење на точка-запирка. ВО РЕД. ПУБЛИКАТА: Дали сакате да се направи обратна коса црта во? АНДИ Пенг: Секако. Дали сакате да го направите обратна коса црта во? ПУБЛИКАТА: Да. АНДИ Пенг: Велики. ВО РЕД. Што да правам следно? ПУБЛИКАТА: Земете стринг. АНДИ Пенг: Земете стринг. Па што не сум тип? Некого? ПУБЛИКАТА: Стринг а. АНДИ Пенг: Стринг а. ПУБЛИКАТА: GetString. АНДИ Пенг: Некој, може ли да ми кажете каде оваа функција GetString е што доаѓаат од? ПУБЛИКАТА: String.h. АНДИ Пенг: String.h? Мислите дека тоа е од string.h? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Има да одите. Тоа е од cs50.h. Ако сте секогаш збунети каде библиотека датотека е или хедер датотека е, Google буквално string.h, и јас ќе ти кажам Кои се сите функции кои се во string.h. ВО РЕД. Па сега дека јас се создаде низа и јас сум го извести корисникот за тоа, Сум го чуваат во една променлива именувана е, она што ми е потребно да направите сега? ПУБЛИКАТА: Проверете дали е со мала буква. АНДИ Пенг: Жал ми е? ПУБЛИКАТА: Проверете дали е со мала буква. АНДИ Пенг: Во ред, ајде да го направите тоа. Како можам да го направите тоа? Всушност, за целите на класата во моментов, ние сме само ќе се претпостави дека сè дека ние влезот е веќе со мала буква. Ако си сакал да се провери, што би само додадете условни изјави кои е означено, што се провираше низ секој елемент од низата и провери дали е помеѓу одредени вредности. Ќе заборавам што бројот на вредностите на мали се. Можете да го гледам нагоре на масата во ASCII. Но, да, тоа е навистина добра поента. Но, во моментов, ние сме само ќе се претпостави дека сите конци ги влезните се со мали букви. ВО РЕД. Па, како ќе одам за овој проблем е следно? ПУБЛИКАТА: за телефонска линија. АНДИ Пенг: За јамка? ВО РЕД. Кажи ми што да напишеш. ПУБЛИКАТА: За int i изнесува 0. АНДИ Пенг: Во ред. ПУБЛИКАТА: Ах, всушност, тогаш направи запирка и направи n еднаква strlen. АНДИ Пенг: Значи најважно што мислам дека таа е забележано тука е дека ние не треба да се каже int n втор пат, го направи ова. Само знам дека во за јамка кога сте прогласување, вие всушност не треба на int на по втор пат ќе го направите со променлива. Може да се каже n strlen. ПУБЛИКАТА: Се е. АНДИ Пенг: s. ВО РЕД. ПУБЛИКАТА: Потоа точка-запирка. АНДИ Пенг: Секако. ПУБЛИКАТА: И тогаш [Беззвучен] n. Тогаш јас ++. АНДИ Пенг: Велики. Во ред. Што сакаме внатре на овој за телефонска линија сега? Запомни, ако ние се случува да се кандидира преку стринг и поминува низ низа, ние сакаме да се провери работи во неа. Што сме ние ќе треба? Ова е вид на слабо дел сега. Секој имате претпоставка? ВО РЕД. Значи прво, како ние дури и да пристапите? Како ние дури и првиот чек или пристап елемент во низата? Како го правиме тоа? Што е нотација ние ги користиме за да го направите тоа? Кое е името на оваа низа наречен? Таа се вика ОК, нели? Се сеќавам, која било низа е секогаш низа. Па на заградата јас, нели? Затоа што тоа е сегашната вредност или индекс на вредност ние сме проверка. И ние си оди за да го поставите тој еднакви to-- сакаме мали вредност, нели? Ние сакаме да се претвори дека lower-- Жалам, сакаме големи букви. Ние сакаме да се сврти на мали вредност во една голема буква. И така like-- Жал ми е, како се викаш? ПУБЛИКАТА: Хајди. АНДИ Пенг: Жал ми е? ПУБЛИКАТА: Хајди. АНДИ Пенг: Хајди. Како Хајди рече на почетокот, ние сме веројатно случува да треба the-- сме веројатно ќе треба да се одземе 32 charc од она што е, нели? Затоа што на ден е ASCII табелата, разликата меѓу мали букви и голема латинична буква е 32. Значи, кога ние го правиме ова, ние си веројатно ќе сакаат да одземе 32, нели? Па ние ќе треба да се направи и јас. Дали сите се разбере зошто го направив тоа? Бидејќи во моментов, во нашата низа, ние сме проверка на 0. индекс, нели? И во 0. индексот на низа, што е прв лик. И тој лик ние ќе да се претпостави дека е со мали букви. Ако сакаме да се направи тоа во големи букви, ние мора да се одземат 32 години од својата вредност, затоа што во нашата ASCII маса, тоа е како ние го добие на следната соодветните вредност што го прави големи букви. Дали сите се разбере тоа? Је. ПУБЛИКАТА: Не можам вас, исто така, се мали букви на minus-- АНДИ Пенг: Да, така што е навистина добри. Одам да се вратам на тоа прашање откако ќе го направите тоа. Је. А потоа ако сакам да да видиме што се случува, Јас сум веројатно нема да сакате да ја испечатите, нели? Некој да ми каже што Сакам да се печати тука. ПУБЛИКАТА: printf проценти в коса црта [Беззвучен]. Тоа е вредност на [Беззвучен] S i. АНДИ Пенг: S i, жалам? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Не знам. Што мислиш? ПУБЛИКАТА: Па, јас wouldn't-- Претпоставувам дека не би bring-- Јас би го извадиш внатре, затоа што [Беззвучен]. АНДИ Пенг: Ох, ти би го направиле тоа? ПУБЛИКАТА: Да. АНДИ Пенг: Ајде да го оставиме тоа на начин што е, и јас ќе објасни зошто подоцна. Запомнете, дури и кога ќе се има држач за место, сакате да се стави загради околу неа. Во ред. Па ова треба да биде солидна функција овде. Ајде да се кандидира и да се види дали тоа компајлира. Направи горниот. Ух-ах. Што не изгледа премногу добро. Зошто се случува ова? Како и со било каква грешка, која сакате да одите назад и да се започне со првата, бидејќи обично предизвикува една грешка многу други грешки по него. Овде можеме да видиме upper.c: 18: 25, кој ја раскажува мене во оваа програма со име upper.c, на линија 18, грешка имплицитно прогласување Библиотека на функции strlen со видот unassigned-- бла, не знам она што се случува после тоа. Сето тоа е ми кажуваше токму сега е дека нешто се случува на strlen. И на компјутерот се збунети, бидејќи Тоа е како, јас не знам што strlen е? Што значи дека, најверојатно, ти кажам ти си пропуштаа? ПУБЛИКАТА: Ти си пропуштаа [Беззвучен]. АНДИ Пенг: Во право си. Токму така. Значи ова е местото каде што тоа е важно да бидете сигурни дека секоја функција што ја користите во код е да се има правилна глава датотека за библиотека, или на друго место си оди за да се добие многу на грешки и кодот не се случува да се знае што се случува. Па ние ќе треба да се вклучат string.h тука. Сега кога ние се обидуваме да ги собере горниот. Компајлира правилно. Ајде да ја извршите оваа програма. Па напишете нешто со мала буква. Што ви момци сакате да пишувате? Викне нешто. Добро, Charly само одеше во. Ние ќе се запишете име Charly е. Charly со мала буква. И се надевам, да се надеваме, ова е ќе извикам и плукаат Charly во големи букви. Јеее! дали сите се разбере како Отидов во врска со решавање на тоа? Начинот на кој што можам манипулира со користење на природни броеви за да се реши нешто што Сакам да се направи во низи, бидејќи ликовите и цели броеви може да се референцира на ист начин, бидејќи на ASCII мапирање. Значи да се вратам на вашата точка, ако можам сакав да се стави тука, наместо на 32 големи минус мали букви а исто како и дека, дека ќе работат подеднакво како и, затоа што тоа е едноставно само на Разликата помеѓу овие две вредности. Ако сакам да се направи овој again-- Charly. О не. Јас мислам дека ние отиде во погрешна насока, да? ПУБЛИКАТА: [Беззвучен] мали букви а. АНДИ Пенг: Има да одите. Да. И надвор плука Charly. Па бидете внимателни при сте одземање вредности да се сетам на кои еден е поголема од другата. На пример, тука сум заборавил што е, всушност, една мала буква поголема од големи А. Значи, кога го се обиде да ги одземе на друг начин наоколу, добив негативен 32. И компјутерот ми беше како, Не знам што е тоа. Тоа е веројатноста само некои случајни вредност која не е многу добра. И така бидете сигурни дека сте одземање во точната должина да се најде на ликот што го сакате. ВО РЕД. Дали некој се збунети за тоа како ние отиде за пишување на оваа функција? ВО РЕД. Па, всушност, на функција веќе постои во библиотека наречена ctype.h. Наречен ctype.h на библиотеката. Оваа функција е, всушност, веќе напишано за вас. Таа се вика на горниот дел. И така за потребите на оваа pset, си оди да се најде дека навистина сакате да ја користите многу од функциите содржани во рамките на ctype библиотека. На горниот дел, да ги намали, е горната, е lower-- тоа се сите функции дека ќе бидат во можност да се користи многу, многу брзо во свој код, кој го прави токму она што овој го прави тоа. Пишувавме како да го конвертирате стринг во големи букви. Но, ова е, всушност, го кодот дека некој друг има напишано и дека можете да пристапите преку различна функција. Да? ПУБЛИКАТА: Така да само копирате во таму и направете го тоа за секоја буква? АНДИ Пенг: Да, затоа што јас не се грижат за вредностите на една. Јас само се грижат дека разликата меѓу нив е 32, нели? Разликата меѓу мали букви б и е исто така голема буква Б 32. И разликата помеѓу C и големи букви C е секогаш 32. Јас само треба да се грижат за Разликата меѓу двете, бидејќи сите букви следат истиот модел, нели? Ако имам разликата меѓу еден од нив, Знам дека она што разликата меѓу сите нив е. Добро прашање. Је. Секој добар? ВО РЕД. OOP. ВО РЕД. Па тоа е уште еден концепт Ќе биде многу корисна како што продолжи да се развива вашиот код е оваа идеја на создавање на функции или апстракција. Значи, токму сега, ние сме сите преземени алгебра. Во алгебра, ќе се учат дека не постои ова прекрасно нешто што се нарекува функција машина, каде што ако внесување еден вид на број, што тече низ овој прекрасен функција и надвор се појавува на различни излезни, нели? Во кодот, истото се случува во било кој вид на функција. Па можев да се физички пишуваат во моето тело на мојот код главна изјава дека всушност не без оглед на телото од кодот се прави. Но надвор од тоа, јас, исто така, може да пишуваат многу различни функции кој направи многу различни нешта. На пример, ние сме веќе започнале да го користат некои од нив. Printf-- што е функција која некој друг веќе пишуваше дека ние може да се јавите во нашиот код. Да upper-- во овој случај, upper-- е уште една функција Ние ги напишав дека ние може да се јавите во нашиот код. И така претпоставувам зошто ние дури имаат функции? Зошто не можеме само да го паднала сите во иста линија код? Тоа го прави лесен за секого. Добро, причината што е, пред сè, организација. Тоа е навистина досадно случува преку нечиј код и една функција како printf. Ако вие момци всушност не знаеше што функција printf бараше да се напише, Тоа е тоа, како, 1.000 линии на код. Ако секој пат кога сакав да printf нешто, Морав да напишам 1.000 линии на код, тоа би било навистина досадно да се чита, нели? Тоа е причината зошто ние сме само создаде оваа апстрактна функција дека имаме веќе некој друг има напишано некаде на друго место. И секој пат кога ние треба да го користат во нашиот код, ние само треба да се каже printf. И дека е во состојба да ја користите функцијата некој друг има напишано во нашиот код. Тоа го прави полесно организационо да го прочитате кодот. Второ, тоа е поедноставување. Се поедноставува чекорите имаме да ги преземе за решавање на нашиот проблем. Printf, функции како printf, функции како на горниот дел се сите работи што ни овозможи да се поедноставување на нашиот код надолу така што е полесно. И последното нешто што е reusability. Значи фактот дека имаме функција наречена printf дека ние може да се јавите на многу различни пати и му овозможува да биде еднократно. Ако јас се да се напише printf, Јас само го пишувам еднаш. Таа постои само во кој на едно место. Ако јас сакав да го направите тоа, повторно, јас би треба да го копирате и залепите сето тоа во мојата втора линија код. Затоа, ако ние се создаде функцијата што постои надвор од нашите главни, ние само може да се повикаат тоа и тоа кога и повторна употреба ние треба, така што тоа е многу полесно за нас како програми за да се напише. Па начинот на кој ние, всушност, ќе се напише функција е многу сличен, нели? Ова е вид на првиот пример во кој ние ќе види функција земе на стилот различни од нашите int главната неважечки. Во овој случај, ако сакав да напише функција наречена П, нели? И вредноста на int тука е сите да ми каже, што сакам ова функцијата да се врати кај мене? Ако сакам да се коцка цел број, Одам да сакате да го внесете. Тоа се параметри. Одам да се внесува вредност од тип int. А јас ќе одам да се врати друг тип вредност на Инт. И овде, како што се може да се види, сите што го правам е местење Рубикова коцка што и мојот влез е како мојот аутпут и им се врати. Така што сите на оваа функција не е зема некој вид на цел број. Тоа се размножува по себе два пати така што тоа коцки кои имаат ефект. А потоа се враќа што и да е излезен. Значи во овој случај, тоа е две линии на кодот што моравме да се напише екстра. Но, ако сакаме да се нарекуваме по ова неколку пати, тоа е многу полесно да напишеш дека еден линија токму тука, тоа е во коцка од мора да одат преку повеќе пати. Па начинот на кој во суштина било форматирање за било кој вид на функција ќе постои е како тука. Значи ние треба името на функцијата. Во овој случај, тоа се вика коцка. И ние го именуваме коцка, бидејќи тоа е лесно да се запомни. Можете да го името што плоштадот и тоа, всушност, може да се коцки. Не е важно. Само име што сте доделување на вашата функција. Ова право тука, цел број, е Вид на параметарот што ви треба. Значи она што не на оваа функција се потребни со цел да се работи? Па, тоа е потребен внес. Јас ја нарекол влез. Можете да го името што сакате. Но ми треба нешто од типот int. Тоа се случува да всушност извршување се што е во внатрешноста на овде, телото на функцијата. А потоа враќање на видот токму тука, на оваа int-- сето тоа е ми кажуваше се дека оваа функција е ќе се врати кај мене во Инт. Па затоа се случува да се земе во int, и тоа се случува да ви даде вратам int. Дали сите се разбере како на форматирање на овој вид дела? Кул. ВО РЕД. Затоа, не се загрижени, ако се чини дека ова малку апстрактен во моментов. Ова е нешто што ние ќе зборуваме за. Ние ќе се нурне во подлабок подоцна во текот на курсот. Начинот на кој било вид на повисоко ниво апстракција на овие работи работата е во тоа што, во меморијата, во вашиот компјутер, се ' се чуваат во овој тип од оџакот, да кажам. Значи, таму горе на врвот. Јас не знам дали сте момци можат да се види дека е добро. Ќе се обидам да го зголемите. Еве на врвот, ние имаат физички текст за тоа што компјутерот е interpreting-- сите нули и единици кои постојат во рамките на нашиот компјутер. И тогаш имаме иницираните податоци и деиницијализира податоци, она што го нарекуваме глобални променливи. Така променливи кои постојат во сите програми и низ целата своја, во суштина, код. Не се грижи, ако вие момци се вид на нејасни за тоа. Тоа не е важно во моментов. И тогаш имаме што е наречен грамада во оџак. Мислам на магацинот буквално како исто како и еден куп на работи, магацинот на различни работите се турка на врвот на едни со други кои се чуваат на различни променливи и синтаксата во вашиот код. А потоа тука на самото дно, имаме на животната средина променливи на она што се извршува во рок од само малку вашата линија код. И ние сме само ќе да зумирате во основа на фактичката магацинот дел. Па токму тука, ако веќе треба да ја зголемите во само на оваа област на магацинот, тоа е она што изгледа. И ова е всушност многу важно кога вие момци се зборува за функции, поради информации дека меморијата на вашиот компјутер е чување на променливи и функциите и параметрите на двете вашиот функција и вашата главна променливи во различни места. Значи, токму сега, главната е вистинската функција дека сте во извршување на кодот. Сте чуваат овде неговите параметри и нејзините локални променливи чуваат овде. Локална променлива само значи секоја променлива кои постојат само во рамките на таа функција. И згора на тоа, ќе мора ова посебна функција наречена коцка. Имаш тоа е параметри како и оние кои локалното население. А причината што можете да види тука е дека она што се случува кога коцка зема во вредност од вашата главна функција е дека всушност тоа е дека со текот на копирање. Значи, ако јас сакав да се коцка 2 и се врати 8, дека 2 е, всушност внесуваат како параметар и тоа е копирани повеќе, така што можете да го имаат постоечки во две различни места во меморијата. И ќе мора да бидат многу внимателни на запомнете во која еден од оние ти си, всушност манипулирање. И е пример за тоа што се случило дека ќе биде многу, многу лошо постои право тука. Па токму тука, имам, во теорија, програма токму тука, на главната функција дека јас сум прогласување на int x е еднаква на 1. Јас сум прогласување друг int y е еднакво на 2. И тогаш јас сум го работи преку оваа функција наречен трампа, каде што јас се претпостави дека тоа е Замена на две вредности. А потоа јас ќе одам да ги испечатите и надвор, нели? Тоа е она што јас сакам оваа програма да се направи. Па ајде да дојде и да ги разгледаме. Значи, ако јас всушност пишува различна функција, како што можете да видите, имаме нашата главна функција овде. А потоа ние си имаме Втората функција овде. Празнина трампа. Празнина само значи дека тоа е нема да се врати ништо. Името на функцијата е наречен трампа, а тоа е ќе внес две променливи, int a и int b, од вашиот [Беззвучен] функција. Значи во суштина овде, ние сме кој поминува x и y во оваа функција. И ако можеме да ги создаде this-- затоа сакаме да се создаде привремена вредност, нели? Ние ќе треба да се додели дека до. А потоа и се случува да се сега еднакви б. И b се случува да се врати каде што вредноста на темп беше, која е, бидејќи кога сакате да се разменуваат нешта, што не може само сакал да ги трампа. Мора да се задржи еден тука, така што тоа се сеќава она што е, затоа што еднаш се разменуваат една, те заборавам она што нејзината оригинална вредност е, нели? Така што во теорија, оваа програма треба да се работи, нели? Ако сакав да се разменуваат со две, тие треба да се разменуваат. Па ајде да го работи и да видат дали тоа функционира. Така што вие момци можат да се види, x некогаш беше 1 и y некогаш беше 2. И ако јас го испечатите, x се уште е 1 и y е 2. Хм, оваа програма не чини да се биде работа на начинот на кој јас сакам тоа да работат. Сака ли некој да ги сними во Сомневајќи зошто тоа се случува? Тоа има врска со начинот на кој кои се различни работи складирани во различни места во меморијата. ВО РЕД. Па вие момци не треба да се грижите премногу за ова право сега. Но знаеш дека коцката е локалната променливи беа a и b, бидејќи тука во нашата функција, ние се изјаснивме a и b како варијабли кои постојат во рок од коцка, таа функција. Но, како што можете да видите, на параметрите со кои тоа е преземање на биле зачувани овде. Но, ние не се всушност враќајќи се ништо. Ние не беа всушност менување на x и y. Бевме само менување на a и b. Имавме копирани x и y во нешто што се нарекува и b. Но, ние никогаш не манипулирани х и у себе. Дали сте момци гледање како што се случува? Е во тоа што ние едноставно сте го копирале готово, но ништо не сме, всушност, чуваат пратите на местото каде што беа во меморијата. Па сега на компјутерот е во потрага, О, јас сум ја извршите оваа работа преку оваа прекрасна функција. Но, x и y се уште x и y. Ништо да не се случило на нив поради фактот дека оние параметри и локални променливи се складирани во различни ставете во меморијата. И ова е на повисоко ниво Концептот дека ќе започнете да гледате подоцна во текот на курсот. Но, само знам дека ова е проблем што може да се случи и дека ќе дознаам начини за тоа како да се справи со ова подоцна во текот на курсот. ВО РЕД. Во ред. Па во последните концепт ние сме навистина се случува да ги покрие што се случува да бидат корисни за pset оваа недела се она што се нарекува командната линија аргументи. Така Роб во своето предавање изложи вид на кратко за тоа како овие работи. Суштина се знае дека кога сте пишување како главна функција, кога ќе напиша функции пред и во минатото, имавме int главната неважечки. А причината моравме празнина таму е затоа што нашите програми не треба да го внесете вредности за да работи, нели? Кога налетав Марио, јас не треба за да всушност само го пишувате нешто кога налетав Марио. Можев да го извести корисникот за подоцна. Но, тоа не е секогаш случај. На пример, во овој Проблемот недела поставува, си оди за да се побара тоа, во прилог на водење на вашата програма, ви се случува да сакаат да го внесете некои работи во право како ќе се се кандидира на вашата програма. Па начинот на кој го правиме тоа што се нарекува аргументите на командната линија, која е како аргумент што можете да внесете директно како што се обидуваш да ја стартувате програмата. Па нотација за ова, тоа е прилично сложен изглед, но тоа навистина не е толку тешко. Па int main-- тоа е само вашата главна функција. Во argc запирка стринг argv загради. Така што сите тоа е дека е тоа што овој int argc-- што сите тоа е ти го кажувам е во тоа што тие се на бројот на Аргументите на компјутерот треба да се очекува. Па едно нешто што е навистина важно да ги пратите на е физичката името на вашата програма брои како една од тие аргументи. Значи, ако сакав да имам мојата програма работи плус еден дополнителен командната линија аргумент, јас сум всушност ќе има две. Argc што всушност се случува да бидат две. А потоа низа argv bracket-- сето она што се прави, тоа ме на давање низа на стрингови кои е ќе се прикаже и да се сместат само што сите оние аргументи на командната линија се. Така на пример, ако сакав да ја имаат оваа програма, ./copy infile OUTFILE, нели? Тоа е само типичен команда Линукс. Што всушност е argc? Колку аргументи на командната линија има всушност во тоа? Сето ова го прави е да се направи копија од на infile на името на една датотека и тоа го копии во друга датотека, нели? Тоа е сето ова се прави. Како што можете да видите, јас сум тоа го правам на една линија без всушност потреба од програмата. Која е нашата argc во овој случај? Колку аргументи имаме? ПУБЛИКАТА: Три? АНДИ Пенг: Имаме три, точно. Така што е многу интуитивен за само мислам дека тоа е само на infile и outfile. Но се знае дека физичката името на програма која што работите се брои како едно. Значи во овој случај, argc е всушност три. Како за, она што е argv 0? Запомнете, сите од аргументи на командната линија се чуваат во низа на стрингови. Значи, ако јас се обидувам да го достигнете, она што би argv заградата 0 ми даде? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Токму така. Тоа ќе ми даде дот црта копија, бидејќи тоа е на 0. елемент, Првиот елемент на мојот низа. Што е со argv 1? ПУБЛИКАТА: infile. АНДИ Пенг: infile, точно. Што е со argv 2? ПУБЛИКАТА: OUTFILE. АНДИ Пенг: OUTFILE. Ова е малку незгодно сега. Што ви момци мислам argv 3 ќе се ми дава ако јас се обидував да се печати ова? ПУБЛИКАТА: [Беззвучен]? АНДИ Пенг: Дали имате рака нагоре? Је. ПУБЛИКАТА: алтернатива. АНДИ Пенг: Токму така. Па се сеќавам на предавањето што ние има на крајот на трката нешто нарекува нулти Терминатор? Ние ќе дојдеме во ова, исто така, понатаму во класата. Но знам дека во нотација, начинот на кој вашиот компјутер знае дека тоа е крајот на низата е тоа што става нешто што се нарекува нулти терминатор или цртичка нула. Значи, ако се обидете да пристапите argv 3, ви се случува да го погоди ова цртичка 0. Ова е уште повеќе на трик прашање. Што е со argv 4? Значи ова е минато null терминатор, минатото од границите на нашата низа. Што мислите дека ќе се се случи кога ќе се обидете да го направите тоа? ПУБЛИКАТА: [Беззвучен]? АНДИ Пенг: Жал ми е? Кажам дека малку погласно? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Да. Тоа е името на површина на која, најверојатно, ќе се добие. Но знаеш дека argv 4-- кој ви овозможува да пристап места во вашиот компјутер меморија дека навистина не треба да се допираат, бидејќи сега знаеш што argv е. Знаете ли дека тоа е низа од големината 3 кој има точка копија, infile и outfile. Ако се обидете да одат толку далеку повеќе од тоа дека сте минатото нултата терминатор, вашиот компјутер има веројатно чуваат нешто во argv 4. И навистина не треба да биде дозволен пристап во argv 4, бидејќи имате датотека кабинет и вие ќе бидете само дозволен пристап до овие три полиците. Но, ако се обидете да стигнат далеку полица на местото каде што е дозволено, ви се случува да започне Месинг со други работи во меморијата на вашиот компјутер. Кој се случува да биде многу, многу лошо. Па само да го знае тоа. Бидете внимателни што не само случајно да почне пристапуваат елементи во низа што не се во она што си сакал да се создаде. Да. ВО РЕД. Па ние ќе треба да се направи уште еден терминал пример тука. ВО РЕД. Роб така брзо во предавање пред некој ден отидов преку овој пример, каде што имаше int главната int argc стринг argv загради, која ми кажуваше дека јас сум случува да имаат аргументи на командната линија. Тој ги има, ако argc е еднаква еднаква 2-- сеќавам, еднаква на еднаквите значи споредување. Ако тоа е еднакво на 2, тогаш јас сум печатењето здраво, што и првиот елемент од низата е. Друго печати, Здраво светот. Што е ова се случува да го суштина се случи? Некој може да се објасни само со Англиски она што оваа програма е тоа? Је. ПУБЛИКАТА: Ако некој ја внеле во командната и рече дека прв и последен име, тоа не само што ќе се печати на Првиот и да каже, здраво, без оглед на вашето име е. АНДИ Пенг: Добро, ајде да го работи. Така на пример, ако јас се да се направи оваа датотека направи здраво to-- здраво to-- што ти ме натера да сакате да го внесете? ПУБЛИКАТА: име и презиме. АНДИ Пенг: Име и презиме? Простори? ПУБЛИКАТА: Да. АНДИ Пенг: Може некој каже мене во моментов, што е argc? Само право таму? Упс, жал. Дозволете ми да се вратам. Колку аргументи на командната линија ви are-- момци навистина не може да се види. Но ќе се обидам да го зголемите. Се трудам. Да, има три, нели? Тоа е точка црта здраво, тоа е Анди, а тоа е Пенг. Значи она што вие момци мислам дека ова Програмата ќе се испечати? Ох. Извини. Погрешно име. Тоа е печатење, Здраво светот. Сака ли некој да објасни зошто тоа се случува? Да? ПУБЛИКАТА: [Беззвучен]. АНДИ Пенг: Токму така. Па еве, се услов е, ако argc еднаква изнесува 2. Па само во случај дека има две командната линија аргументи. Тогаш јас ќе одам да се печати, Здраво, што и да е. Но, што друго, ќе одам да се печати само, Здраво светот. Значи не сакате некој да ми даде пример за тоа како јас ќе бидам во можност да всушност се добие тоа да се печати вредноста на argv 1? Она што ќе морам да го внесете тука? Само една работа, нели? Бидејќи точката здраво на веќе брои како прв аргумент. Имам само уште еден. Па dot здраво ако јас само го направи Анди. Здраво, Анди. Дали сите се разбере зошто тоа се случува? Је. ПУБЛИКАТА: Значи, на просторот меѓу команда line-- е тоа [Беззвучен]? АНДИ Пенг: Не Па просторот во командната линија аргумент, x, да му кажете на вашиот компјутер дека ова е почеток на нов стринг. Па низа argv тоа here-- продавници сите на вашите команди линија аргументи во жици. Така и на просторот во командната линија argument-- сето тоа го прави е да ви кажам, ова е крајот на еден стринг и дека е време да се движи кон друг. Је. Ова е прилично важно за Вашиот pset, затоа што ти си случува да биде тестирање на овие. Значи Дали некој има било какви прашања во врска со ова? Добро, кул. Да? ПУБЛИКАТА: Значи вие причина и би стави целобројни аргументи калк наместо на [Беззвучен] би било кога сакате да напишеш дополнителни информации за [Беззвучен]? АНДИ Пенг: Да, точно. Некои програми ќе бара од вас за да го внесете аргумент командната линија тоа што поминува во и дека го користи тоа. Је. ПУБЛИКАТА: Па што ако [Беззвучен]? АНДИ Пенг: Па, што не морам да се промени, тогаш во мојата програма? ПУБЛИКАТА: Само 3. АНДИ Пенг: Зошто е тоа случува, што мислиш? ПУБЛИКАТА: Бидејќи [Беззвучен]. ПУБЛИКАТА: Ќе треба да го ја промените да 2 [Беззвучен]. ПУБЛИКАТА: 1 и 2. АНДИ Пенг: 1 и 2, точно. Значи во овој случај, најверојатно ќе сакаат да имаат две printf statements-- оној кој печатени argv 1 и оној кој печатени argv 2. Овде. Јас всушност може да го направи тоа вистински брз. Ете ти. Ох. Не е баш она што го сакаше. Но, ако вие момци се плеткаме околу со форматирање, тоа ќе излезе. Је. Кул. Знам дека си малку кратки на време. Но јас сум само ќе брзо да поминат неколку минути одење преку helpful-- ПУБЛИКАТА: Имаш две минути. АНДИ Пенг: Имам две минути? Ти благодарам. Некои брзи совети pset. Така и за овој pset, Силно препорачувам, како што реков, сите да ја прочитате на спец. Ќе бидат писмено три programs-- еден наречен initials.c, еден вика caesar.c, еден вика vigenere.c. Некои важни совети кои вие момци навистина сакаат да се задржи во mind-- така има оваа функција наречен atoi-- како што сакам да кажам, а trois. Нејасно дали тоа е всушност, како ќе го кажеш. Но, сето тоа го прави, тоа е внесување. Таа се конвертира стринг да int. Па претставува ASCII да з цел број. Тоа е само конвертирање на ASCII вредности за целобројни вредности. Па се сеќавам argv, низата кој продавници сите на вашите команди редат arguments-- таа сите нив ги чува како жици. И така, ако сакате да бидете во можност да имаат една од нив стануваат цел број, ви се случува да имаат да се користи оваа вредност тука. Modulo, како што се опфатени претходно во класа денес, Ви овозможува да имаат остатокот од она што го имате. Значи, ако имаме навистина, навистина голем број во Цезар, што ако ние сме на крајот на низа Vigenere? Како ви се случува да бидат во можност да се добие тоа да се заврши околу? Ако јас го погоди z и сакам тоа да се врати во еден, колку сум јас ќе се добие дека за да се заврши околу? Веројатно ќе сакате да го користите modulo таму некаде. Второ, да пребарува вашата библиотека. ctype.h. Тоа е нова библиотека имаме. Ќе најдете голем број на навистина, навистина корисно functions-- isupper, islower, toupper, tolower, isalpha, итн. Сите функции кои ќе биде многу корисно кога ќе се обидуваш да дознаам, е овој лик мали букви? Како можам да ја претвори оваа стринг за да се голема латинична? Сите овие работи ќе биде многу, многу корисни за вашиот pset. ВО РЕД. На работното време од 8:00 до вечерва се 11:00 часот во ТЕАЛ училница утре како и во среда и четврток навечер. Работното време, се во заедничкото. Силно препорачуваме момци сите да започнете веднаш, затоа што не сакаат да бидат во тој дете кое во четвртокот ноќта има проблеми поднесување на вашиот pset и е како, јас не знам што да правам. Почнав, го завршив, го поднесе. Обидете се да се даде некаква помош, затоа што секогаш се јавуваат проблеми во кодот. Вие сакате да бидете сигурни дека кои ви се даде многу време за да може за завршување на psets. Кул. Јас ќе се врткаат околу тука. ПУБЛИКАТА: Дали е ова на интернет веќе? АНДИ Пенг: Јас не знам дали тоа е онлајн веќе, но тоа ќе биде. Јас ќе се врткаат околу тука, ако некој има било какви прашања веќе. Ви благодариме за кои доаѓаат.