[Грає музика] ANDI Пен: Це CS50, і Ласкаво просимо в тиждень два розділи. Це насправді в той час як тиждень два наші class-- фактично, перший тиждень у нас була розділ. Показати рук, як багато хто з вас все прийшли до супер розділу минулого тижня? ОК, це нормально. Все добре. Як багато з вас дивилися супер розділ минулого тижня? ДОБРЕ. А ви, хлопці, зробили добре з проблеми встановити один? Так що я збираюся взяти його, що ми маємо купа дійсно розумних дітей в цьому класі і все буде в порядку. ДОБРЕ. Так first-- По-перше, ми тільки збираємося коротко перейти до порядку денного на сьогодні. Ми будемо говорити про курсові логістики. Багато хто з вас, напевно, є питання, що стосуються як речі працюють в цьому курсі. Ми на них відповісти. Ми збираємося коротко перейти петель у разі будь-який з вас, хлопці пропустили супер розділ. Ми будемо говорити про відображення ASCII. Ми будемо говорити про масивах, функції, аргументи командного рядка. І, нарешті, те, що ви, хлопці, напевно, все дійсно хочете бути тут, щоб дізнатися про, Ваш pset2. Ми матимемо деякі цікаві трюки і поради про те, як це зробити. ДОБРЕ. Крім того, по-друге, ми маємо багато цукерок тут. Той, хто любить цукерки, просто прийти сюди. Візьміть деякі. У мене є купа. У нас є тонни в офісі. Я дійсно не хочу з'їсти цукерку весь день. Ви, хлопці, повинні з'їсти всі цукерки, бо я приніс його тут для вас, хлопці. Просто є цукерки. Там буде цукерки кожна секція. Отже, спочатку, хто я? Мене звуть Енді Пен. Я є керівником ТА CS50 тут в Єльському університеті. І на додаток до що, я також be-- якщо хтось like-- свій хід приятель, плече, щоб кричати на. Якщо ніч перш з вашого Pset, в Ви поняття не маєте, що відбувається, вдарив мене. Ми поспівчувати разом, і так далі. Просто знаю, що я тут, як ресурс для вас, як лінії фронту допомагаючи вам, хлопці, з'ясувати, як для вирішення проблем в CS50 і за її межами. Моя електронна пошта andi.peng@yale.edu. Я також відправити індивідуальний по електронній пошті з мій номер телефону в ньому так що не всі на Інтернет може побачити свій номер телефону. Не соромтеся дзвонити мені в будь-який час. Серйозно, мій телефон як правило, додається до моєї руки. Я не може відповісти протягом декількох хвилин. Я не може відповісти протягом декількох годин. Але я можу гарантувати вам, якщо Ви по електронній пошті мені, якщо ви телефонуєте мені, напиши мені, я відповім протягом 24 годин. Часто, я відповім, перш ніж що, тому що я розумію що кожен отримав деякі проблеми, і ви хочете, щоб ваші відповіді дати відповідь дуже швидко. Тим не менш, якщо ви телефонуєте мені 30 хвилин до що шматок, який через четвер night-- бути, як Енді, допоможи мені, Я не started-- я можу дати Ви що плече, щоб кричати на. Але це може бути час, щоб думати про як не робити, що наступного разу. ДОБРЕ. Ой. Як повернутися? Там ми йдемо. Таким чином, в цьому, звичайно, у нас є тонна підтримки для всіх. На додаток до щойно розділи тут, які вам щотижня отримую витратити 90 прекрасні хвилини зі мною, у нас також є прийомні години. Як багато з вас, хлопці, вже був в робочий час за допомогою? Відмінно. Це дійсно приємно бачити, тому що ми мати штат більше 45 ТП та сертифікації підготовку для цього, звичайно, що тут знаходяться за допомогу, ви, хлопці з psets. Щопонеділка вони проводяться в ТЕАл клас в 17 Hill House тут в Єльському університеті. По вівторках і четвергах, вони проводяться в звичайні. З 8:00 до 11:00 в значній мірі кожен будній день. Заходьте, вийти. Будь-яка проблема, немає problem-- просто заходьте, і тоді ми вам допоможемо в цьому. По-друге, на додаток до офісних годин та секції, у нас також є шорти. Хто-небудь коли-небудь бачив пару з шорти або покрокові відео в на веб-сайті? ДОБРЕ. Таким чином, вони насправді, дуже корисно. Наш прекрасний виробництво Гарвардського команда там на цій школі до півночі, вони зняли і виробляється ці неймовірні Проходження відео. Вони візьмуть Вас крок за кроком через як йти про вирішенні проблеми. Часто, якщо ви плутати про проста концепція, особлива концепція, поглянути, тому що ми, ймовірно, короткий на нього десь на нашому сайті. І це, як правило, великий ресурс дивитися, коли ви знаходитесь в першу чергу втратили про те, як впоратися з проблемою. По-третє, у нас також є study50 і reference50. Так що вчіться на 50 Сайт це всього лише посилання. Це, мені здається, study.cs50.net або щось подібне. Просто Google це. У нас є багато слайдів, підготовлених. У нас є багато шорти і walkthroughs-- речі все скомпільовані дуже красиво і акуратно для вас всіх, хлопці переглядати, які поняття см що ви збентежені о. Це, напевно, буде покрита там, в study50. Reference50-- схожі. У нас є багато різних нот легко доступні для вашому розпорядженні. І, нарешті, у нас є те, що називається CS50 Обговорити, форум, в якому, якщо в ніч перед ви робите ваші проблеми, скажімо, у вас є питання. Увійти в CS50 Обговорити. Задайте своє питання. І тоді один з hundreds-- можливо, thousands-- однолітків приймаючи цей клас онлайн буде увійти. І, може бути, хтось може отримати Ваш відповідь перед банкою TA. По суті, це просто онлайн форум, який ми всі можемо використовувати, щоб обговорити наші проблеми. Круто. ДОБРЕ. Так проблема встановлює. Ми збираємося прямо в товщиною проблеми встановіть два. Багато хто з нас вже боролися з проблемою встановити один. Ми вже знаємо, що, можливо, чекає протягом минулої ночі, щоб зробити ваше PSET не найрозумніший, що потрібно зробити в CS50. Поради та підказки по суті для Успіх читаються весь спец. Як багато з вас вже читати специфікації для PSET 2? ДОБРЕ. Це тверде кількість. Я знаю, ви хлопці, напевно, визнали зараз специфікації дійсно довго. Вони дійсно, дійсно довго. Це дійсно важко читати кожен рядок цього обережно слово за словом. Ви хочете, щоб просто побіжно, де він говорить вам щось робити. Я можу гарантувати вам, не робіть цього. Якщо ви зробите це, ви, ймовірно, буду сумувати-то де він говорить вам, як почати проблему або говорить вам, що ім'я ваша проблема, чи це говорить вам, це, мабуть, кращий спосіб щоб почати робити вашу проблему. І тоді ви будете втрачені. При спробі прочитати вашу спекуляція на півдорозі, багато важливої information--, що ви не буде в змозі дійсно доступу. Так що читайте всю специфікацію. Спробуйте прочитати всю специфікацію на перш ніж прийти до розділу, бо тоді, коли ми говорити про PSET, ми всі можемо мати уявлення що відбувається. По-друге, це концепція що я буду посилатися на подобається багато протягом усього семестру. Але по суті, нам назустріч, вірно? Мене, як ваш ТА і Джейсон, звичайно менеджер і Scaz якості професора і Девід, як ваш професор і всі інші милі ТП в цьому процесі, помічниками в цьому course-- ми зробимо все можливе, щоб гарантувати, що ви встановлені до успіху в цьому процесі. Ми проводитимемо розділ. Ми проводитимемо робочі години. Ми відповімо ваш телефон дзвінки, відповідати на електронну пошту, зробити все від нас залежне, щоб зробити впевнений, що ваші запитання відповідає. Тим не менш, допомогти нам теж. Нам назустріч. Якщо ви приїхали в робочий час НЕ пішовши в розділі не побачивши лекції, маючи ніякого Ідея, що відбувається, бути, як мені допомогти. Я збираюся бути, як добре, я перепрошую. Це може бути час, щоб надати що плече, щоб кричати на, тому що я не впевнений, що я можу зробити, щоб допомогти вам якщо ви не намагаєтеся принаймні, допомога самі трохи на початку. Нам назустріч. Ви знаєте, будь ласка, приходьте готовий відповісти і отримати готові брати участь в матеріалі. Це робить речі набагато простіше для всіх учасників. Так, це досить багато його. Класифікація. Так на програмі, це досить в глибині відносно, як ми клас. Але по суті, пробій в це 50% Вашого сорти будуть psets, які прекрасний, бо це де ви витрачаєте величезну Більшість свого часу курс на. Вікторини 40%, і ваш Остаточний проект буде 10%. Там буде два вікторини по всьому курс семестру. Я думаю, що раз і дати також перераховані на програмі. Таким чином, що ми будемо бути сортування ваші psets є те, що у нас є, по суті чотирьох цінності, які ми приписуємо кожного сорту. У нас є значення обсягу, Правильність, дизайн, і стилю. Отже, як ви бачите, що це свого роду наш Формула для розрахунку psets. Три ми даємо найбільш Вага правильності, тому що очевидно, ваш тренер повинні відчувати за винятком випадків, що ми хочемо, щоб перевірити. Ви, хлопці, всі мають check50 у вашому розпорядженні. Це дуже корисна функція що ви, хлопці, все це може завантажити код до наших серверів, де ми будемо перевіряти її для вас. І ви бачили тих, frowny особи, усміхнені обличчя. Вони дійсно, дійсно корисно. Будь ласка, не будьте студент, який хотів спроб жорстко у всіх відповідей на них. Я безумовно бачив PSET де хто-небудь бачив всі значення check50 і вони просто жорстко, якщо in-- це число, роздрукувати цей номер. Якщо це число, роздрукувати цього числа. Не роби цього. Навіть якщо технічно check50 правильно, Ваш спосіб вирішення Проблема не правильно. Так просто використовувати check50 економно. Але і переконайтеся, що ви зрозуміти, як це працює, Програма функціонує на додаток до check50, тому що ми не можемо перевірити кожен можливий випадок check50. Ми будемо тестувати деякі з них. Дизайн по суті справи, як добре розроблена ваш код? Якщо ви копіювання вставки декількох рядків коду багато, багато разів. Може бути, ви не мають цілком кращий дизайн в коді. Можливо, настав час додати, що цикл. По суті, тут це просто все про спробу зробити ваш код, намагаюся написати код, як ефективно як можна так, що ваша програма працює якомога швидше. Нарешті, у нас є стиль. Так стиль свого роду довільним, суб'єктивним. Я знаю, що ми офіційно є стиль 50 керівництво для CS50, де він говорить тобі, о, ви, повинен мати місце тут. Ви повинні роду форматі код таким чином. Ви повинні назвати це таким чином. Я дійсно не хвилює, як такої, як Ви обираєте для оформлення коду, як довго, як вам залишатися послідовним. Наприклад, якщо ви хочете залишити простір після ваших чотирьох до вашого чотири цикли, просто робити, що кожен раз. Не вид це зробити. Не зробити це в інший час. Якщо ви хочете зберегти кучеряве дужки простір певним чином, просто завжди зробити це таким чином. Не вид зробити це десь тут і десь не там. Коли ми класифікації, це дійсно важко якщо у мене немає ідеї, як Ви форматування коду, речі дурні й не до діла. Якщо ви просто тримати його у відповідність, це набагато легше для мене, як велика щоб мати можливість читати ваш код. Це набагато простіше для вас, як студенту щоб мати можливість переглядати код і подивитися, що трапилося з це скоротити чому є проблеми. Стиль є одним з найпростіших речей, ви, хлопці, можете зробити, щоб отримати повний оцінки. По суті, якщо ви просто піклуються, якщо Ви платите п'ять хвилин уваги щоб ваш код щотижня, ви повинні бути повний стиль очок. Нарешті, у нас є те, що називається множник масштабу. Scope-- Я знаю, що це великий Слово, особливо в цьому класі. Але сфера, все, що кошти є те, що ви намагаєтеся в psets на краще вашої здатності. Якщо ви включите в трьох з з ваших чотирьох проблем і навіть не спроба Останній, ви, ймовірно, збирається втрачати кілька точок на сферу. Навіть якщо ви тільки починаєте проблему, зробити все можливе, щоб пройти через це. Навіть якщо це не працює, вимкніть його, бо показує і демонструє нам, що ви намагаєтеся, що Ви спробували встановити проблему до кращої з Вашої здібності. І тоді ми можемо дати вам повна очок за рамки. Область є також дуже важливим, коли ми говорити про низьку краплі оцінка PSET. Так протягом з семестр, ви, хлопці, є дев'ять psets. І ми насправді буде падати найнижча оцінка з тих дев'яти, але тільки якщо у вас є повний точки розмах. Так що, якщо ви включите в неповному PSET, На жаль, ми не можемо відмовитися, що один, бо Вашій області не були завершені очок. Таким чином, навіть якщо у вас є жахливий тиждень де ви вмираєте і ви хворі або ваша собака вмирає, ваша кішка вмирає, і ви перевантажені домашніми завданнями, просто спробувати PSET. Зробіть це в міру ваших можливостей. Якщо це не працює, це не має значення. Просто увімкніть його в. Принаймні, ми можемо дати Ви очки за зусилля. А при спробі в цьому класі. Принаймні, низькою краплі оцінка для зусилля. Так що, так. Це досить багато його. Хто-небудь є питання, щоб далеко, як ми сорту в класі? Або будь-який з них? Будь-який з них так far-- Розділи, офісна годин? Прохолодний. ДОБРЕ. Так що це питання, яке не людина дійсно любить поговорити. Я справді не хотів, щоб про це говорити. Ви, хлопці, дійсно не хочу щоб почути мене говорити про це. Але, на жаль, ми всі повинні говорити про це. Девід провів 20 хвилин у лекції говорити про це. І це є предметом академічної чесності. Таким чином, ми всі тут, ймовірно, написана есе-то в нашій Єльського кар'єри. Ми, ймовірно, отримали розмова, де ми сказали не займатися плагіатом наш нарис, тому що робота не наша. У комп'ютерній науці, у нас є такий же концепції. Всі роботи, які ви надаєте, весь код, який ви пишете повинно бути код, який ви написали. Не повинно бути код, який Ви скопійовані з іншого. Не повинно бути код, який Ви гуглі і гепнувся в і ви дійсно не знаю, чи працює він. Ви начебто є почуття що він робить, але не зовсім. Якщо ви сумніваєтеся, по суті, це просто бути розумним. На нашому навчальному, у нас є цілий список речей, ми бачимо, як розумно в порівнянні з не розумно. Наприклад, розумно це ви і ваш друг обговорювали, що кращий спосіб піти про логіку вирішення проблеми. Це досить розумно. Те, що не було б розумно, якщо ви Хлопці зібралися, набрали такий же код, і виявилося в тому ж коді. Це не розумно. Те ж саме, свого роду есе. Якщо ви хочете, щоб обговорити з вашим другом, гей, це те, що я хочу написати про. Ці кроки, які я хочу часу, щоб написати про це, великий. Це чудово. Ласка, співпрацювати один з одним. Якщо ви, хлопці почати написати те ж саме, включити в тій же статті, що менше ОК. Тому, коли є сумніви, просто не зробити це. Тут ми в CS50, у нас є сценарії які працюють для автоматизації, щоб перевірити не тільки правильність коду, але також унікальність вашого коду. Тому, будь ласка, не ставте нас у становище того, щоб звернутися ваша справа EXCOMM. Будь ласка, просто для всіх, давайте просто зробити це чудовий досвід. Кожен вчиться краще, всі ми щасливішими, і ми всі налаштовані на домогтися успіху в цьому процесі. Щось, що дуже Унікальність цього класу Я думаю, що кожен повинен дійсно звернути увагу на те, що у нас є те, що називається жаль застереження в нашій програмі. Так по суті, протягом 72 годин, якщо Ви впевнені, що ви зробили щось Ви не впевнені, був дійсно необхідності, будь ласка, приходьте до нас. Ми обіцяємо вам, що протягом 72 годин ми буде обробляти самі справи не звертаючи до вище влада в адміністрації. Так що, якщо ви прийшли до мене і кажуть, Енді, гей, я дійсно жалкую, але я думаю, що є пара рядків на мою Код вчора ввечері, що я начебто гуглі, зійшов з стека Переповнення, скопіюйте і вставити, і я дуже, дуже шкода про те, дайте мені знати. Будь ласка, не просто дозволити їй тліти і тільки сподіваюся, що я зловити його. Ми зловити його. Просто приходьте до мене. Дозвольте мені знати, протягом 72 годин. Ми з'ясувати, рішення. І ми обіцяємо, що ми не будемо посилатися на університетські влади по суті. Так що це у ваших інтересах просто бути чесним з усіма участь у процесі. ДОБРЕ. ДОБРЕ. Так що тепер, швидко, перш ніж Я рухатися далі, хто-небудь є питання, що стосуються логістики від того, як курси ми збираємося працювати, як секції збираються бігти, кожен з? ДОБРЕ. Так. АУДИТОРІЯ: [нерозбірливо]? ANDI Пен: Так. Так як quizzes-- багато з вас в розділі понеділок / середовище? Як багато з вас в Вівторок / Четвер? ОК, так що це тверде сплати тут. Таким чином, шлях, який ми запускаємо це в Єльському університеті, що ми будуть мати два окремих quizzes-- один для кожного section--, що будуть прийняті під час занять. Я думаю, що це жовтень кінець жовтня, щось подібне, а тижні одна вікторини. Так, так просто прийти в клас. На цій понеділок або в середу, ви будете приймати тест. На цій вівторок або четвер, ви будете приймати різноманітні вікторини. Але той же матеріал буде покрита. Так. Гарне питання. Так. АУДИТОРІЯ: Де ми піти перевірити наші оцінки? ANDI Пен: Так. Так що я буду посилати поза адресу електронної пошти все, що щотижня коли вікторини graded-- або вибачте, коли psets оцінюються. Psets зазвичай виявилося опівдні або в п'ятницю. Так що я обіцяю, що я буду спробувати отримати їх назад до вас до полудня наступного п'ятницю. Всякий раз, коли я Grade A PSET, я пошлю з повідомлення про книгу класу що говорить вам ваш рахунок можна дивитися онлайн. Так прямо на цьому тижні, після того як я завершити класифікації psets минулого тижня, ви, хлопці, отримаєте електронною поштою Повідомлення кажу вам, Ей, це де ви перейти переглядати оцінки. І ви можете бачити кожен Аналіз ваших класах. Ви можете бачити коментарі. О, швидко, що також. У розділі коментарів у великий Книга, де я, напевно, проводять більшу частину свого часу класифікації. Так одна річ, яка Дуже важливо, коли Ви, хлопці, перегляду Ваші сорту на ваших psets не тільки шукає на фізичному рахунок але також знайшли час, щоб дійсно прочитав мої коментарі. Часто це дає вам зворотний зв'язок про те, як ви вирішуєте проблему. Якщо вам потрібно зробити, щось трохи краще, конструктивна критика зазвичай краще призначати в тих розділі коментарів. Так що будь ласка, будь ласка, я збираюся провести час на написання коментарів. Будь ласка, я би дуже вдячний якщо ви, хлопці, буде читати ці коментарі. ДОБРЕ. Прохолодний. Добре. Отже, ми збираємося, щоб почати говорити і просто розгляд швидко деякі з матеріалу з нулю просто так ми тиждень на правій сторінці для починаючи проблеми на цьому тижні. Таким чином, у той час як петля є одним з трьох типів петель ми обговорювали раніше в цьому класі. Деякий час циклу істотно написано в синтаксисі де, в той час як певний стан, Зробіть це кілька разів, вірно? Думайте про нього, в цьому графіку тут. Ви збираєтеся починаються в певна точка в коді. Ви збираєтеся увійти в умова циклу if-- я не знаю-- х менше, ніж один. Якщо це правда, що ви збираєтеся для виконання тіла циклу. І ви збираєтеся продовжувати робити що знову, знову, знову, знову і over-- тому це loop--, поки ваш умова не стане помилковий. Так що в цьому шляху, в той час як петлі є одним з найпростіших способів написати який-небудь умови, що Необхідно повторити знову і більше. Тільки будьте обережні, коли Ви пишете якийсь петлі що у вас є вихід в стан а також оновлення для б то не так що ваш цикл не просто доведеться знову і знову нескінченно. У будь-якому випадку, ви будете хочуть, щоб переконатися, що ви змінюєте деякий аспект код або в кінці циклу просто щоб переконатися, що у вас є спосіб прогресуючої до стані що ви хочете, щоб задовольнити до кінця. Чи має це сенс для всіх? Ми просто не хочемо бути опинилися в цій спіралі де ми йдемо навколо і навколо і немає ніякого способу, щоб розірвати петлю. І кожен цикл по суті є спосіб зробити це. ДОБРЕ. По-друге, багато хто з вас у ваших psets Маріо ймовірно, використовувати Цей тип циклу. Це називається робити під час циклу. Перш за все, хто може сказати мені, в чому різниця між справ в той час як цикл і в той час як цикл? Так. Аудиторія: зроби той час як цикл працює на перший [нерозбірливо]. ANDI Пен: Так, саме так. Так зроби той час як цикл завжди робить те, що знаходиться всередині справ, в дужках там і робить, що умова до перевірки the-- вибачте, робить що-код перед перевірка стану. І це особливо актуально для нас Тут в цьому класі, бо більшість часу ми збираємося хочете, щоб спонукати користувач протягом деякого роду входом. А потім, залежно від вхід вони дають нам, то ми можемо оцінити, ох, зробити ми повинні спонукати їх знову? Таким чином, в Маріо, якщо користувач дав вам негативне зростання, наприклад, Ви збираєтеся першому рядку і робити все, що знаходиться всередині. Тоді ви йдете, щоб перевірити час. Ви знаєте, це негативний 1, є те, що позитивне число? Якщо це не так, я збираюся піти назад і повторити робити і повторення і повторювати і повторювати, поки вони нарешті, дати вам номер, який вам подобається, що всі ми можемо використовувати в нашому коді. Це дуже важливо для по суті, будь-який користувацький ввід. Я можу гарантувати вам, будь раз в PSET де ми просимо вас ввести якої-небудь коду, ми ймовірно, щоб дати вам тест випадок, в якому ми збираюся дати вам щось погане, що це намагатиметься зламати ваш код. Якщо ми намагаємося запитати вас Для введення число, ми можемо просто дати вам рядок і подивитися, як ви б впоратися з цим. Якщо ми просимо вас використовувати вік, ми можемо дати вам негативне число щоб подивитися, як ви б впоратися з цим. Просто переконайтеся, що ви, хлопці, тестування на випадки, в яких ви не отримаєте найкращий вхід, давайте просто сказати. І зроби той час як цикл це часто кращий спосіб створити свій код так, що він відповідає, що обсяг. ДОБРЕ. ДОБРЕ. Так що це, ймовірно, найбільш Комплекс цикл з трьох що ми дивилися на досі. І, здається, дуже страшно на перший погляд. Але я гарантую вам, після того, як ви, хлопці, отримати навик, як використовувати цикл, це один з найбільш корисних речей, найбільш корисних інструментів у вашому арсеналі для просування вперед у цьому класі. Так, наприклад, в порожньому, у нас була ця дуже простий блок що тільки що сказав, повторювати це напевно фрази певну кількість разів. До речі, SAJ-- це Scaz Енді Джейсон. Ми часто увійдіть наші листи Сай. Якщо ми говоримо, Сай, не плутати. Ось тільки ми. Таким чином, в порожньому, ми були в змозі мати блок, який сказав, що я люблю повторювати Сай! 10 разів. Дуже просто. Логіка, яка є дуже, дуже просто, вірно? Я хочу, щоб спочатку пройти через перший час і бачити, що вдруге і бачити, що втретє, і так далі і так далі, поки ви не натиснете 10. І те, як ми буде уявляти, що в Код просто через простий цикл. Таким чином, для, ви збираєтеся оголосити змінна тут, у цьому випадку, з внутр. Ми збираємося назвати це я. Ми збираємося, щоб ініціалізувати його в 0. І зупинка видання буде я менше 10. І оновлення буде я ++. І в циклі, це відбувається не виконувати поки врешті-решт його парад кінець condition--, в якому так, він збирається розірвати петлю. Там повинно бути речі, які ви Хлопці все начебто бачив і повинен був зробити для вашої проблеми встановіть один. Хто-небудь є які-небудь питання відносно, петель прямо зараз? ДОБРЕ. Відмінно. ДОБРЕ. Так що для тих з вас, хто читати Pset специфікації на цьому тижні знаєте, що ми будемо мати на роботу те, що називається ASCII і таблиці ASCII. Давид в лекції підійшов стисло як комп'ютери все essentially-- кодується в комп'ютері в двійковий, в нулів і одиниць. І те, комп'ютери здатні для зберігання різних цінностей, на додаток в нулів і одиниць є відображенням через ці цифри являють інші цифри або суттєво інші характери. Таким чином, в цьому випадку, ASCII-table-- все це робить це символи карту, або символи, на номери. Так файлу вихідного коду в Ваш computer-- він бачить, агов, купа нулів і одиниць, нулів і одиниць, нулів і одиниць. Це те, що зберігається в фактичний обсяг пам'яті вашого комп'ютера. Але коли ми, люди, хочемо спілкуватися з комп'ютером, ми want-- сказати, наприклад, якщо я хочу заголовну A, Я збираюся потрібно якимось чином розповідати комп'ютер, ох, коли я друкую у верхньому регістрі A, я маю на увазі це подання в двійковій системі. І так, як ми робимо, що кинув довільне, що називається таблицю ASCII, де, як люди, так як програмісти, деякий час назад, ми довільно вирішив, що ми збиралися призначити ці номери Значення цих символів в. Таким чином, ви, хлопці, можете Google це в Інтернеті. Я думаю, що є посилання на нього у вашій pset-- просто ASCII таблиця карти, ASCII Таблиця. Це просто переводить двійковий номера в символів. І це буде дуже корисно для вашої проблеми набору всякий раз, коли ви хочете, щоб розрахувати що-небудь або якщо ви хочу, щоб відобразити певний символи або цілі числа або маніпулювати певні символи. Це збирається бути дуже Важливо, що ви все знаєте, як переміщатися таблицю ASCII. Так, наприклад, у верхньому регістрі A представлена ​​на число 65. І в нижньому регістрі представлена ​​97. Тому важливо знати, що Різниця між цими двома значеннями 32. Часто, якщо вам потрібно конвертувати з один до одного, різниця 32. І не хвилюйтеся, якщо ви вид збентежений про це спершу. Ми підемо над тим, як ми б використовувати це в реальному коду. ДОБРЕ. Так що для тих з вас з ноутбуками поза, не соромтеся, щоб підтягти таблицю ASCII, тому що вони, ймовірно, вимагають ви, хлопці, щоб посилатися на те, що персонажі. ДОБРЕ. Так, знаючи, що деякі символи відображаються на певні номери, якби я працювати тільки перший лінія, що code-- в PRINTF а, нижній регістр в мінус, прописні А. Хто-небудь є припущення про те, що буде друк з екрану прямо зараз? Отже, насамперед, те, що робить Рядкові представляють? Яке число є те, що кодується в таблиці ASCII. На жаль? АУДИТОРІЯ: 97? ANDI Пен: 97, великий. І те, що у верхньому регістрі A? АУДИТОРІЯ: 65. ANDI Пен: Так що 97 мінус 65? АУДИТОРІЯ: 32. ANDI Пен: ОК. Так що ви, хлопці, думаєте, що станеться, коли я вхід, рядок коду в моєму комп'ютері? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: На ​​жаль, говорити. Не турбуйтеся. Це дуже безпечно Середа, мінус камера. Ми всі, метою яких без турбот. Просто ми всі збираємося робити вигляд, як це просто нам охолодження в цій кімнаті. Не турбуйтеся. Жодне питання не є надто нерозумно. Відповіді не дурний відповідь. Я, ймовірно, буде робити помилки в ході мого навчання. Серйозно, хлопці, просто ляпнути це. Будьте впевнені в собі, ви знаєте? Так що це було? Хто сказав, що остання відповідь? ДОБРЕ. Кричіть, що красиво і зрозуміло. АУДИТОРІЯ: 32? ANDI Пен: 32. ОК, давайте запустимо цей код і побачити, якщо це те, що відбувається. ДОБРЕ. Отже, як ви, хлопці, можете вид см, типовий позначення Я налаштувати тут, як ми буде використовувати якої-небудь програми в нашому комп'ютері. У нас є основною функцією в нашій основної функції. Я просто хочу, щоб скопіювати і вставте цей рядок коду. Також будьте обережні, коли ви, хлопці, копіюванні і вставці код. Іноді деякі оператори НЕ обклеювати правильно. У цьому випадку, мінус Знак був насправді тире. І тому комп'ютер не забрати його. Так що мені довелося повернутися і фізично передруковувати, що. Тільки будьте обережні, коли ви, хлопці, робите це. ДОБРЕ. Ми збираємося запустити це тут. Отже, ми збираємося, щоб компакт-диска в нашій розділ2. Я назвав цю програму asciimath. Так що пам'ятайте, коли ми біжимо будь Програма, ми хочемо, щоб скомпілювати його запустивши його через наш марки. І тоді ми дійсно хочемо працювати Програма роблячи точка-слеш. Отже, ми збираємося, щоб ./asciimath. Право, ми йдемо. І ми бачимо, 32. Молодці. Ви заслуговуєте цукерку. Цукерки для вас. Вибачте. Добре. ДОБРЕ. Таким чином, ми можемо повернутися до нашого прикладу тут. Ааа, немає. Ааа. ДОБРЕ. Я просто хочу, щоб тримати його так. ДОБРЕ. ДОБРЕ. Отже, як ви, хлопці, можете побачити, що ми можемо зробити багато дуже цікавих речей, багато дуже цікавих речей, багато дуже складні речі за участю Символи ASCII і цифри. Після того, як ви сідаєте на лінію п'ять, що це багато, щоб слідувати. Ми не збираємося йти через секцію. Не соромтеся, якщо ви можете, Причина це на папері в першу чергу на те, що повинно бути, коли відбувається Ви ввели такого рядка значень. Наприклад, в останньому лінії, ми маємо z-- який представляє певний number-- a-- який також являє собою деякі number-- плюс 1 модуль 26 плюс нижній регістр а. Якщо ви, хлопці, продовжуйте читання через них, вам можна побачити зразок придумати в як ми маніпулювати код. Я дуже, дуже рекомендую після розділу ви все хлопці йти вперед і вхід ті, все у вашому комп'ютері і подивитися, які номери виходять і розмірковуючи, чому через ті відбувається, тому що для psets це буде дійсно важливо для вас, щоб зрозуміти, чому деякі речі трапляються. Всі ці слайди буде онлайн. Так що не турбуйтеся про спробу фізично копіювати нотатки. Онлайн Все в. Це саме по собі розділ буде онлайн. Всі мій вихідний код, що Я біжу буде онлайн. Так. Ти все ще є питання? АУДИТОРІЯ: що модуль? ANDI Пен: ОК. Так модулю є оператором, який збирається досить важливо PSET ваші хлопці ігрова тут. Таким чином, шлях, який оператори в С і в програмуванні роботи є те, що у вас є те, що називається символ розділення і символом модуль, який так само, як знак відсотка. Таким чином, в C, коли ви робите ціле розділити на ціле число з косою риси, З має тенденцію потрібно вирізати від усіх десяткових знаків, бо ціле хоче перетворити в ціле число. Це не захоче бути подвійний з купою знаків після коми все після нього. Так що, якщо я 3 розділений на 2, це буде відрізати 0,5 і просто дати вам 1. Так ось щось, щоб бути дуже обережні, коли ви робити будь-якої математики в програмуванні, є те, що число ви отримаєте може бути число що ви думаєте, тому округлення у вашому Останнє PSET так важливо. Модулю дає залишок. Так, наприклад, якщо б я зробив 3 модулю 2-- так 3 знак відсотка 2-- це дасть вам решту цього. Так 3 ділиться на 2 1,5. Це 1 залишок 1. Це дасть вам 1, який є залишком цього. Так що, коли ви, хлопці, рухається по таблиці ASCII, по модулю буде в кінцевому підсумку те, що дуже важливо, і ми обговоримо, що пізніше. ДОБРЕ. Так щось, що є досить, досить новий і досить унікальний що ми обговорювали на цьому тижні концепція про те, що масив є. Так масив перший тип структури даних що ми збираємося зіткнутися в цьому класі. Всі структури даних є свого роду довільним, буквально речі, як структури що ми, як програмісти створили, що ми вклали в нашому коді, що може містити інші шматки коду. Так що в цьому сенсі, array-- думаю про нього, як картотеці, де, якщо ви відкрити відрізняється полки вашого картотеці, Ви можете отримати доступ різні речі. У пам'яті масив просто робить те ж саме на вашому комп'ютері. Ви можете мати різне blocks-- ми називати їх indices-- масиву. Це просто, як блок, полку пам'яті що ми створили у вашій комп'ютер, ви можете ввести деякі речі в різних просторах. Так з масивом, ви завжди повинні specify-- Ви повинні вказати оголошенні Масив в наступному форматі. Ви збираєтеся спочатку вказати тип даних що ви хочете створити масиву. Якщо я хочу масив цілих чисел, Я збираюся поставити Int прямо там. Якщо я хочу масив рядків, Я збираюся поставити струни там, ім'я вашого масиву, а потім Ви будете мати квадратні дужки. А всередині квадратних дужок, ви матиме розмір вашого масиву. Щось, що дійсно важливо для майте на увазі, коли створення масивів що, як тільки ви створюєте Масив, що розмір не може змінитися. Так що, якщо ви знаєте, що зараз у вас є масив розміром 10, Ви знаєте, що я буду мати 10 осередків в межах або 10 показників в межах цього масиву, і це ніколи не збирається розширити або зменшити незалежно від того, що, і що є В даний час всього в 10 кварталах простору виділено у вашій пам'яті, яка може зберігати до 10 речей, того, що ви вклали. Таким чином, в цьому випадку, тип даних масиву, структура даних, яка є масивом дуже відрізняється від деяких інших ми покривати пізніше в цьому курсі. Так. Наприклад, якщо ви хочете, щоб створити масив розміром 3, містяться змінні integer-- ой, вибачте, з temperature-- і температура, з Звичайно, це ціле число. Таким чином, ми створили б Int, яка є Тип даних, що ми хочемо зберегти. Ми збираємося називати це температур заради номенклатури назв те, що ми все зрозуміли. І ми збираємося, щоб мати квадратні дужки. І ми хочемо, три номери. Отже, ми збираємося поставити трьох всередині нього. Щось, що дійсно Важливо мати на увазі, є те, що масиви дорівнюють нулю індексуються. Все це означає, що ви почати з індексом 0, і ви підбігли через розмір масиву мінус 1. Так, наприклад, тут, ми є масив розміром 3. Це збирається бути в змозі провести три значення. Але цифри, які themselves-- Кількість масив, що індекс, масив, є від 0 до 2. Так хлопці, дійсно, насправді обережні при Ви збираєтеся через ваші проблеми, встановленим і створення будь-яких масиву, бо багато часу це дійсно, дуже легко забути, що. Я насправді не мають індекс з 3, що я в даний час тільки мають індекс 2. І якщо ви спробуєте доступ до третього індекс, це буде те, що називається нуль-термінатор. Це не збирається насправді існує в масиві. І комп'ютер не сподобається, що. Так що будьте обережні, коли ви звертаєтеся речі тільки щоб переконатися, що ви пам'ятаєте що масиви дорівнюють нулю, індексовані. ДОБРЕ. Таким чином, перший приклад є лише один із способів створення масиву. Другий приклад у мене є Нижче тільки окремий шлях створення що те ж саме дані Структура, що ми тільки що введений. Таким чином, замість фізично працює через і покласти в температурі від 0 дорівнює б то не було, температура 1 дорівнює завгодно, температури 2 рівних все, я міг насправді просто безпосередньо створювати все це в одному рядку у квадратних дужках температури дорівнює. І зауважте, в цьому випадку, вам не потрібно щоб вказати, як великий ваш масив, тому що комп'ютер збирається пройти і подивитися, що там три елементи в цих фігурних дужках. І це буде знати, ОК, Мені потрібен масив розміром 3. Ви не будете потребувати, щоб вхід це таким чином. А також, так, саме так. Хто-небудь є питання про те, як ми робимо масиви або як структура з масиву працює? Так. АУДИТОРІЯ: [нерозбірливо]? ANDI Пен: Так, саме так. Так що, якщо ви були оголосити і ініціалізувати масив наступний метод, який є другим способом, Ви можете просто залишити їх. І комп'ютер автоматично знає, що це потрібно порахувати, скільки елементів які в ті фігурні дужки, розділені комами. Так ось вони бачать 65, 87, 30. Таким чином, комп'ютер знає, про, є три числа. Я знаю, щоб створити ім'я масиву Температура з трьома елементами в ньому. Гарне питання. Так. АУДИТОРІЯ: Хіба це не можливо, щоб створити масив з різними типами даних які можуть бути до нього увійшли? Наприклад, з цілими числами [нерозбірливо]? ANDI Пен: Для цілей цього класу, ні, просто зараз. При створенні даних структурувати як масив, ви говорите комп'ютер, гей, ти мені потрібен виділити стільки пам'ять в моєму жорсткому диску, з кожного осередку бути Певна кількість бітів. Пам'ятайте, що ми дізналися в тиждень нулю, що різні дані типи мають різні розміри? Так, наприклад, рядки це різна кількість простору, ніж гольця, який це інший обсяг простору від цілого числа. І так, якщо ви не вкажете, і ви змішувати і поєднувати, які види змінних у вас є комп'ютер-х буде дуже збентежений. І це не буде знати, скільки пам'яті, щоб дати вам. Таким чином, для цілей права Тепер, комп'ютери можуть тільки визнати один тип масиву. Гарне питання. ДОБРЕ. Так природно, Друге питання у нас є , Ну, тепер, коли ми створили Масив і ми поставити всі ці речі в масиві, як ми буде в змозі отримати доступ до його? Таким чином, типова структура, що ми завжди доступ до масиву наш прекрасний цикл. Я обіцяю вам, хлопці, що ми будемо бачачи багато цієї людини тут. По суті, в будь-який час ви хочете для введення значення в масив або ви хочете, щоб доступ до них, то Кращий спосіб зробити це для циклу, бо в циклі, ви знаю, скільки разів ви збирається хочете запустити через масив, тому що у вас є зупинки видання, чи не так? І кожен раз, коли ви запустите через, ви можете отримати доступ другий елемент масиву. А також, це причина, чому, як правило, ми починаємо для петель на значення 0, тому що, коли ви отримуєте доступ масиви, Ви можете отримати доступ до нульової індекс. І так паралелі дуже красиво. Ви, хлопці, можливо, хотіли писати для INT я дорівнює 1. Я менше або дорівнює 3. Але це не буде працювати зовсім як Ну от, тому що ви тільки є елементи 0, 1, і 2. І тому, якщо ви були, щоб почати ваш I в елементі 1, 2 і 3, Ви збираєтеся в кінцевому підсумку працює з меж вашого масиву, і погані речі будуть відбуватися. Тому я сподіваюся, що ви, хлопці побачити Segue чому в попередніх класах ми вчили вас, хлопці, як запустити і відформатувати цикл так, що ми були. Це тому, що, тепер ми перейшли в масиви, Ви можете бачити, чому надає 0 Сама дуже красиво доступу. Таким чином, як ми робимо це that-- Я просто друкуючи його тут заради друкувати його. Але у мене є заповнювача, кому. І фактична Доступ частина відбувається. Назва масиву назвали температура. Так що це температура і я-й елемент масиву. Так як цикл проходить через, він збирається почати з 0. Це відбувається, щоб роздрукувати 0-й індекс масиву. Тоді це буде друкувати з першого елемента. Тоді це буде друкувати з другого. А потім ми збираємося зламати. Це все ясно, на як це відбувається? Відмінно. Добре. Так от у нас є спосіб говорить, що якщо ми не хочемо, на жорсткий-код in-- мене як програміста. Я не хочу, щоб насправді фізично покласти в кожну окремий елемент цього масиву. Якби я хотів, щоб замість є користувальницький введення значення, що кращий спосіб зробити це? Ну, от я створив це прекрасний функція, в якому я можу оголосити масив. Так INT scores-- давайте просто сказати, що ми хочемо зробити масив, який провів оцінки всіх 18 звідси в цьому розділі студентів. Я думаю, що ми отримали трохи більше 18 дітей сьогодні. Але заради отриманими в Прімері, в давайте припустимо, у нас було 18 років. Я б створити десятки ім'я масиву з Тип Внутрішні, тому оцінки, звичайно, є числа. І я збираюся мати 18 у квадратних дужках, тому що це, скільки студентів я хочу, щоб мати можливість зберігати безліч. І те, як я заповнити масив, що я запустити його через цикл, з Звичайно, з 0 мій 0-я індексом. А потім з 18 Бути моїм зупинки видання, тому що є 18 елементів у масиві. А потім я збираюся зробити Printf, введіть забив student-- балаканина балачки. Може хто-небудь сказати мені, чому тут я друк I плюс 1 і ні? Це свого роду хитрість Питання, насправді не. Це насправді не фізично впливає на хід коду. Так. АУДИТОРІЯ: [нерозбірливо] 0? ANDI Пен: Так, саме так. Це трохи незручно сказати, гей, ти студент 0-я в цьому класі. Це трохи дивно. Так нас, як людей, насправді не як думати про те, як комп'ютери думати. Так що, хоча в комп'ютер, це зберігання значень в 0-й, коли індекс ми люди, ми дійсно не хотів би послатися на себе нулю. Тому, коли я просто роздрукувати, що Я збираюся друкувати і додавати 1 тільки для ясності. Так що, коли я друкую, я буду можливість друку студентів з 1 по 18. Це насправді не впливають на біг коду в будь-якому випадку, то, як я друкую. Але будьте обережні, коли ви фактично доступу масиву. Коли ви бачите результати я, помітити тут насправді я доступ до 0-й індекс і Не 1 плюс 0-- або 1 плюс 1, У цьому випадку, так індекс що це насправді зрозуміло. Це все начебто ОК як це проходить через і з кожним індексом Я покласти значення в масив і створення масиву з 18 чисел що користувач буде вводити? ДОБРЕ. Прохолодний. ДОБРЕ. Тепер ми переходимо в те, що це досить ставлення до цієї частини встановленої також. Я знаю, в лекції, David-- вибачте, у вас питання? АУДИТОРІЯ: Чи можете ви збільшити його? ANDI Пен: Так, тому я спробував. Але я не знаю. З якоїсь причини, це версія PowerPoint дійсно не працює а з дисплеєм. Таким чином, ми просто збираємося тримати його, як це. Все це буде завантажений в Інтернеті. Вибачте, хлопці. Так. ДОБРЕ. Таким чином, ми можемо також рядки. Так що, якщо ви, хлопці, насправді notice-- I знаю, Роб підійшов це в тій лекції що він did-- рядок насправді просто масив символів, якщо ви думаєте про це, вірно? Рядок це ім'я або речення чи слово, вірно? Якби я був, щоб створити рядок з ім'ям в Andi-- тільки моє ім'я, А-Н-Д-я. Ви думаєте, що з просто як однієї змінної. Але насправді, це розбивається в тільки масив символів. Так він отримав персонаж збережена у значенні масиву. Він отримав характер п зберігається в Другий індекс і так далі, і так далі. Так таким чином, ми насправді є такий структури встановити в місце для наших струн. Так от, якби я, щоб ввести в Слово "є" - так рядок слово дорівнює отримати рядок. Якби я був, щоб ввести слово "є", що фізично так, що мій комп'ютер зберігає цей рядок в моїй пам'яті. І якби я хотів, щоб пробігти, що і друк, що out-- так і для I в дорівнює нулю, пам'ятаєте, в лекції, ми те, що покривається називається StrLen, або довжина рядка. Тому що я насправді не знаєте, як великий масив з якої inputting-- користувача Наприклад, я вводяться слово "є", і я знаю, це довго трьох символів, вірно? Так що я міг би поставити в три там і все буде в порядку. Але якщо ваш користувальницький введення чогось що це різна кількість значень, Ви збираєтеся не зможе по-справжньому знаю, що коли ви програмуєте свій код. Таким чином, шлях, який ми обробляємо тестів так це те, що ми щось називається StrLen, що це просто функція який говорить вам, як довго рядок. Так STRLEN слова. Моє слово, це є. п дорівнює STRLEN в слова. Може хто-небудь сказати мені, що це значення насправді тут? Що н представляє право Тепер, в цьому прикладі, якби мені довелося з'їсти? АУДИТОРІЯ: 3. ANDI Пен: 3, точно. Отже, ми маємо для INT я дорівнює нулю, п дорівнює 3, по суті ,. І я маю намір запустити поки це не менше, ніж 3i ++. І це відбувається, по суті, перейти через і робити те ж саме. Це відбувається, щоб роздрукувати кожне значення і дасть вам ЇСТИ. Це просто, що позначають Інший спосіб написання. Це буде дуже корисно. Так. АУДИТОРІЯ: Що переваги здачі п дорівнює STRLEN слово всередині, що для контуру [нерозбірливо]? ANDI Пен: Так. Так що, якщо б я був, метою яких, наприклад, сказати, якби я був зробити це, а потім do-- oop--, що в моєму коді, було б насправді робити, як те ж саме. Однак, спосіб, яким пояснив Девід це під час лекції, якщо які-небудь з вас, хлопці пам'ятаєте, було те, що, оскільки люди, як програмісти, Ми дійсно намагаємося, щоб Наша програма Код, щоб наш комп'ютер має працювати якомога менше, так що наш код не дуже ефективним. Так що, якщо я, що там, що відбуватиметься через мій цикл є те, що я вперше оголосити Змінна з ім'ям я буде 0. Я збираюся перевірити, ох, що таке StrLen слова? О, StrLen 3. Так я менше, ніж три? Так. Я збираюся бігти. А потім другий раз тому навколо цикл, я йду, щоб збільшити I. я буде один. І я маю намір перевірити, ох, але те, що StrLen слова? О, це три. І робить це, здається, вид марнотратно, кожен раз, коли ви запускаєте через петлю, щоб перевіряти функцію, навіть незважаючи на те STRLEN слова ніколи не зраджує? Таким чином, це додаткове харчування для комп'ютера. Коли ви починаєте говорити про речі, що мільярди і мільярди і мільярди місць довго, уявіть комп'ютер того, щоб фізично пережити і перевірити все, що кожен раз. Саме тому, щоб просто заради ефективності, ми, як правило, тільки зробити це, тому що таким чином ми тільки виклику функції один раз на початку, і що кожен раз, коли він проходить через це відбувається для зберігання значення 3 там, що ви не повинні постійно перевіряти кожен раз. Так. АУДИТОРІЯ: Вибачте. Просто [нерозбірливо]. Може ви Int N дорівнює StrLen і покласти що вище зовнішнього боку для контуру так само? ANDI Пен: Так. Ви можете зробити це, абсолютно. Причина, чому ми повинні його в тут бо шлях для циклу робіт є те, що це називається локальна змінна в тому сенсі, що всі ви створення всередині цикл існує тільки всередині для циклу. Таким чином, змінна я тільки існує в тих дужках. А ось змінні п також існує тільки в тих дужках. Так що, якщо ви були у використанні STRLEN з Слово кілька разів внизу, абсолютно кращий спосіб зробити це буде оголосити його на вершину так що вам не доведеться зробити це один раз. Так. АУДИТОРІЯ: Чому у вас є Нова лінія після відсотка бачачи, якщо ви хочете, щоб поставити всі літери поруч з ним розділяють? ANDI Пен: О, я хотів друкувати їх все на кожній лінії. Це не має значення. Так, це форматування. Це хороше запитання, хоча. Так, якби я хотів, щоб надрукувати все тільки на одній лінії, що, Я б не тире в. ДОБРЕ. Все добре? ДОБРЕ. Прохолодний. Так що я думаю, що я говорив достатньо. Поворот, ви, хлопці, щоб запустити через Код і скажіть, що це не так. Де помилка? Отже, як ви бачите, я оголошений Новий масив строкового типу по імені класу. І я вводяться Сем, Джесс, і Кім в нього. І я намагаюся роздрукувати всі елементи масиву. Може хто-небудь сказати мені, чому це збирається дати мені проблеми? Я дам вам хлопці 10 секунд, щоб думати про це. ДОБРЕ. Так? АУДИТОРІЯ: Чи є лівий центральний рівним 3 або [нерозбірливо]? ANDI Пен: Право. Так скільки разів це насправді збирається запустити через цю петлю? АУДИТОРІЯ: Чотири. ANDI Пен: Точно. Це буде через чотири рази. Це збирається бігти через на 0, 1, 2 і 3, тому що їх елементом є я менше або дорівнює 3. Це не збирається зупинятися, коли це 2. Це буде тримати відбувається, поки не досягне 3. І як ми знаємо, є тільки три елементи нашого фактичного масиву. Якщо ми спробуємо відкрити четвертий елемент або індекс 3, Ви збираєтеся кудись вдарив в пам'яті, що не існує. Це називається нуль-термінатор. Ніщо не збирається бути там. Ваш комп'ютер не буде бути дуже щасливий з тобою. Так. Хто-небудь є питання про те, чому, що відбувається? Це загальна площа, щоб уникнути. Так. АУДИТОРІЯ: Не перший ковзати також рядок 2? ANDI PENG: Ні Так по суті, коли Ви робите масив, що кронштейн правої там, що всі number-- це кажу вам як багато елементів у мене є. Це насправді не говорив мені індекси небудь. Таким чином, в цьому випадку, я знаю, що я хочу писати трьох місцях, з трьох фізичних місць для провести все, що я хочу, щоб тримати. Так от, чому номер три є. Проте, якби я хотів насправді отримати до нього доступ, якщо я хотів сказати, Printf номер класу кронштейн, потім Ви збираєтеся насправді поклав індекс фізичного там. Так, гарне питання. АУДИТОРІЯ: Так це фізичне Індекс повинен бути [нерозбірливо]? ANDI Пен: Мені дуже шкода. Чи можете ви говорити трохи? АУДИТОРІЯ: Так індекс фізичного [Нерозбірливо], кожна з коробки? [Нерозбірливо]? ANDI Пен: Так. Так що я збираюся повернутися до прямо тут. Подумайте прямо тут. У нас є масив розміром 3. Там три місця, як і, фізичні заповнювачі тут. Але вони назвали 0, 1, 2 і. Так що, якщо я хотів, щоб отримати до них доступ, так, що я до них доступ це Printf все, що я хотів тут. Ви повинні надрукувати з імені ній, Бо тоді комп'ютер знає, про, мені потрібно подивитися в цьому масиві на 0-й індекс. Так. Але розмір цього не змінюється. Розмір 3, незалежно як ви їх помітити. ДОБРЕ. Все добре? АУДИТОРІЯ: Так що кожен раз я [нерозбірливо]? ANDI Пен: ОК. Таким чином, в цьому випадку, ми насправді не потрапити в нього зараз в процесі. Але знаю, що string-- як I говорив раніше, рядок по суті масив символів. Так що, якщо я створюю масив рядків, я начебто є масив масив символів, вірно? Таким чином, в цьому випадку, тому що я є масив рядків, якби ви були на вхід дійсно довге слово, які досі займає тільки одне місце, тому що це одна струна. Але якщо ви були думати про герої цього масиву, те, що це займаючи багато більш символів, ніж будь-який з інших слів є. Не дуже важливо для прямо зараз. Але це тільки в цілому як це працює. ДОБРЕ. Так що це те, що я дам вам зробити багато протягом семестру. Мені потрібно, щоб відпочити мій голос. Ви, хлопці, потрібно, щоб стимулювати себе. Багато хто з вас, напевно, доведеться спати прямо зараз. Я введення випадкових проблем де ми, як клас, або ви з партнером поруч з вами збираємося провести пару хвилин обговорення про те, як ми йти про рішення або створення програми, такі, як цей. Так що зараз, ми хочемо створити program-- ми збираємося називати його upper.c--, що новонавернені рядкова слово до верхньої класу string-- верхній регістр, вибачте. Слово в рядках, вибачте, це синоніми. Я збираюся їх міняти означає те ж саме. Так. Візьміть пару хвилин. Це не повинні бути написані на будь-якій мові. Просто в коді або псевдокоду логічно, як ми б навіть ходити робити такою проблемою. Так. [СТОРОНА РОЗМОВА] Я також помітив, що ви, хлопці can-- Я начебто вже бачимо програму. Я думаю, моя відсутність Режим провідний проблема. Але це нормально. [СТОРОНА РОЗМОВА] Так, будь ласка, хлопці. Приходьте отримати цукерку. Приходьте отримати цукерку. АУДИТОРІЯ: Так! [СТОРОНА РОЗМОВА] ANDI Пен: Крім того, так, Я почну кидати цукерки на людей, які не відповідають на запитання. Таким чином, ви повинні відповісти на питання всіх. Або я вважаю, люди, які у відповідати на запитання. Так, навпаки. [СТОРОНА РОЗМОВА] АУДИТОРІЯ: [нерозбірливо] ANDI Пен: Так. Так. [СТОРОНА РОЗМОВА] Гаразд, хлопці. Візьміть, наприклад, ще 10 секунд. [СТОРОНА РОЗМОВА] ОК, хлопці. Тому, перш ніж ми почнемо, намагаючись насправді фізично написати код, гарна звичка розвивати те, що ми хочемо, щоб першого роду причин логічно, як ми зробимо це. Ви хочете, щоб переконатися, що, перед вами фізично почати намагатися кодувати в Маріо, що ви робите Переконайтеся, що у вас є псевдокод. Тобто приймаючи вас через те, що вам потрібно, щоб створити так що, коли ви фізично написати програму пізніше, ви краще в змозі зловити помилки в коді тощо. Отже, ми збираємося, щоб просто почати по-- англійською мовою, в псевдокоді, Хто-небудь хоче, щоб дати мені родове пояснення про те, як ми б про це? Так. АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Звичайно, не варто турбуватися. АУДИТОРІЯ: Чи можете ви попросити його або попросити хтось отримати рядок 1-- Так, рядок, і потім-- ANDI Пен: Так, так що це хороший початок. Я почну набирати, вибачте, як ви кажете. Так-- АУДИТОРІЯ: --the рядкові цифри вище, вірно? Або малі літери мають високі цифри? ANDI Пен: Точно. АУДИТОРІЯ: Отже, ми віднімаємо 32 від того, що [нерозбірливо]. ANDI Пен: Відмінно. Так ми начебто є загальний зміст про те, як працювати з цією проблемою. Знаючи, що ми дізналися вид фізичне так, що рядки зберігаються в пам'яті, Що ви вже знаю, що ви збираєтеся, ймовірно, потрібно написати в коді для того, щоб рухатися по рядку? АУДИТОРІЯ: Для циклу. ANDI Пен: для циклу, точно. Відмінно. Так ми начебто є спільний псевдокод записано що вид дає Ви відзначає, як ви буде рухатися про вирішення проблеми. Тепер у вас є це, вам може посилатися на потім коли ви намагаєтеся насправді писати код. Таким чином, ми можемо насправді йти тут. І я отримав функцію під назвою upper.c-- там is-- тільки з пустого шаблону Прямо зараз, що ви, хлопці, збираєтеся допомогти мені з'ясувати про те, як написати ця лінія code-- не рядки коду. Це буде кілька рядків коду. При запуску будь-якої заготовки PSET, що Перше, що мені потрібно пам'ятати, щоб робити? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Великий Да. Включати. stdio.h. Часто це є одним з Найпростіший помилки люди зробить, коли вони писати, що вони будуть забудьте включати Важливо бібліотека їм потрібно. Так що, якщо це офіс годин, і ви, як, Я не знаю, чому мій код не працює. Чи можете ви сказати мені, чому це не працює? Ми збираємося сказати ти #include? Ви повинні #include його. ДОБРЕ. Отже, ми отримали стандарт I / O тут. Хіба що тільки бібліотека ми збираємося тут потрібно? Що ще ми будемо робити? Вибачте. Хтось просто кричіть це? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Там ви йдете. ДОБРЕ. І як я можу йти про запуск якої-небудь функції, будь-який вид основної функції в нашій програмі? Int основною. ДОБРЕ. Що я можу покласти всередині тут? Що перше, що ви хочете зробити? Якщо ми хочемо, щоб отримати рядок від користувача, що ми будемо мати щоб зробити на цьому першій лінії? На жаль, ви, хлопці, просто відчуваю, вільно говорити і голосно. Просто кричати що завгодно. АУДИТОРІЯ: Попросіть користувача? ANDI Пен: Як ми це робимо? Ask-- я збираюся ввести "задати користувачеві"? АУДИТОРІЯ: Printf. ANDI Пен: ОК. Printf. Що я хочу, щоб PRINTF? АУДИТОРІЯ: Тип в чомусь. ANDI Пен: Як що? Хлопці, робити вигляд, ніби я комп'ютер. Фізично скажіть мені кожен крок що мені потрібно ввести тут? Я роблю щось неправильно? Чи повинен я щось набрали? АУДИТОРІЯ: Ви повинні лапки. ANDI Пен: Мені потрібно лапки? ДОБРЕ. ДОБРЕ. АУДИТОРІЯ: А потім нова лінія. Крапка з комою. ANDI Пен: крапкою з комою? ДОБРЕ. Добре. АУДИТОРІЯ: А може бути, вказати що ви хочете, в нижньому регістрі? ANDI Пен: Відмінно. Ви, хлопці, наді мною сміятися забуваючи поставити крапку з комою. Я гарантую вам, де У ході цього класу, Ви забудете поставити крапка з комою, і це Вам буде потрібно 3:00, щоб з'ясувати чому ваш код не працює. Це сталося з усіма нами. Це, ймовірно, трапиться з вами. Отримати в гарну звичку з комою. ДОБРЕ. АУДИТОРІЯ: Ви хочете зробити зворотний слеш в? ANDI Пен: Звичайно. Ви хочете, щоб зробити зворотний слеш? АУДИТОРІЯ: Так. ANDI Пен: Відмінно. ДОБРЕ. Що мені робити далі? АУДИТОРІЯ: Отримати рядок. ANDI Пен: Отримати рядок. Так що я типу? Хто? АУДИТОРІЯ: String s. ANDI Пен: Рядок с. АУДИТОРІЯ: GetString. ANDI Пен: Хтось, Ви можете сказати мені, де ця функція GetString приходять? АУДИТОРІЯ: string.h. ANDI Пен: string.h? Ви думаєте, що це через string.h? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Там ви йдете. Це від CS50.h. Якщо ви завжди плутають від того, де Файл бібліотеки або файл заголовка, Google буквально string.h, і я скажу вам, які всі функції які знаходяться в string.h. ДОБРЕ. Так що тепер я створив рядок а у мене запропонує користувачеві для нього, Я зберіг його в змінній названі їй, що мені потрібно робити зараз? АУДИТОРІЯ: Перевірте, якщо він знаходиться в нижньому регістрі. ANDI Пен: На ​​жаль? АУДИТОРІЯ: Перевірте, якщо він знаходиться в нижньому регістрі. ANDI Пен: Гаразд, давайте зробимо це. Як мені це зробити? Насправді, для цілей класу прямо зараз, ми тільки збираємося Припустимо, що всі що ми вхід вже в нижньому регістрі. Якщо ви хочете, щоб перевірити, ви б просто додайте умовну що перевіряється, що побіг через кожен елемент масиву і перевіряється, якщо це між певними значеннями. Я забув, що число значень малі літери. Ви можете подивитися його на стіл ASCII. Але так, це дійсно хороша точка. Але прямо зараз, ми просто збираємося Припустимо, що всі рядка введення ми в нижньому регістрі. ДОБРЕ. Так як я пішов би близько ця проблема в наступному? АУДИТОРІЯ: Для циклу. ANDI Пен: Для циклу? ДОБРЕ. Скажи мені, що друкувати. АУДИТОРІЯ: Для Int я дорівнює 0. ANDI Пен: ОК. АУДИТОРІЯ: Так, насправді, то вам зробити кому і робити н дорівнює STRLEN. ANDI Пен: Так важливо що я думаю, що вона помітила, тут є те, що ми не повинні сказати Int н вдруге ми зробили це. Просто знаю, що протягом цикл, коли ви заявивши, ви насправді не потрібно Int в другий раз, коли ви змінну. Ви можете сказати, н STRLEN. АУДИТОРІЯ: З с. ANDI Пен: с. ДОБРЕ. АУДИТОРІЯ: Тоді крапка з комою. ANDI Пен: Звичайно. АУДИТОРІЯ: І потім [нерозбірливо] п. Тоді я ++. ANDI Пен: Відмінно. Добре. Що ми хочемо всередині це цикл тепер? Пам'ятайте, що якщо ми збираємося запустити через рядок і запустити через масив, ми хочемо, щоб перевірити речі в ньому. Що ми збираємося потрібно? Це свого роду складна частина в даний час. Будь, є припущення? ДОБРЕ. Отже, спочатку, як ми навіть отримати доступ? Як ми навіть перша перевірка або доступу до елементу в масиві? Як ми це робимо? Що позначення ми використовуємо, щоб зробити це? Що ім'я цього масиву називається? Це називається с, правильно? Пам'ятайте, будь-який рядок завжди є масивом. Так їй кронштейн я, вірно? Тому що це поточне значення або значення індексу, ми перевірки. І ми збираємося встановити, що одно , Метою яких ми хочемо рядкову значення, вірно? Ми хочемо, щоб перетворити це lower-- вибачте, ми хочемо великими літерами. Ми хочемо, щоб включити нижній регістр значення у верхньому регістрі. І так like-- я вибачаюся, як вас звати? АУДИТОРІЯ: Хайді. ANDI Пен: На ​​жаль? АУДИТОРІЯ: Хайді. ANDI Пен: Хайді. Як сказав Хайді Спочатку, ми, ймовірно, знадобиться the-- ми ймовірно, доведеться відняти 32 з будь-якого charc, що, вірно? Тому що на ASCII стіл, різниця між малої літери і прописна буква 32. Тому, коли ми робимо це, ми, ймовірно, захоче, щоб відняти 32, вірно? Так що ми збираємося робити S I. Чи всі розуміють, чому я це зробив? Тому що зараз, в нашому масиві, ми перевірки 0-й індекс, вірно? А в 0-й індекс Рядок, це перший символ. І, що персонаж, якого ми збираємося щоб припустити, що це в нижньому регістрі. Якщо ми хочемо, щоб зробити його у верхньому регістрі, ми повинні відняти 32 з його вартості, тому що в нашій ASCII стіл, ось як ми отримаємо його на наступний відповідної Значення, яке робить його у верхньому регістрі. Всі розуміють, чи що? Так. АУДИТОРІЯ: Могли б ви також у нижній регістр в minus-- ANDI Пен: Так, так от насправді дуже добре. Я збираюся повернутися до того, що Питання після того як ми це зробити. Так. І потім, якщо я хочу бачити, що відбувається, Я, ймовірно, буде хочете надрукувати, вірно? Хтось сказати мені, що Я хочу надрукувати тут. АУДИТОРІЯ: Printf відсотків Зі зворотного косою [нерозбірливо]. Це значення [нерозбірливо] S I. ANDI Пен: я їй, вибачте? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: я не знаю. Що ти думаєш? АУДИТОРІЯ: Ну, я wouldn't-- Я думаю, я б не bring-- Я б воно поза всередині, тому що [нерозбірливо]. ANDI Пен: О, ви б зробили це? АУДИТОРІЯ: Так. ANDI Пен: Давайте залишимо це так, як вона є, і я поясню, чому пізніше. Пам'ятайте, навіть якщо ви є утримувач місце, Ви хочете, щоб покласти дужки навколо нього. Добре. Таким чином, це має бути тверде функцію тут. Давайте запустити його і подивитися, якщо він компілює. Зробіть верхній. Ой-ой. Це не виглядає занадто добре. Чому це відбувається? Як і в будь-якої помилки, ви хочете піти назад і почати з першого, бо зазвичай викликає одну помилку багато інших помилок після нього. Тут ми бачимо, upper.c: 18: 25, що говорить мені в цій програмі імені upper.c, в рядку 18, помилка неявно оголошення бібліотека функцій STRLEN з типом unassigned-- бла, я не знаю, що відбувається після цього. Все це говорить мені прямо зараз що щось відбувається на STRLEN. І це плутати комп'ютер, тому що це як, я не знаю, що це StrLen? Що, що, ймовірно сказати, що ви не вистачає? АУДИТОРІЯ: Ви пропустили [нерозбірливо]. ANDI Пен: Ви праві. Точно. Так що це, де це Важливо, щоб переконатися, що кожна функція ви використовуєте у вашій код, який має правильний заголовок файл для бібліотеки, або ж Ви збираєтеся отримати багато помилок і ваш код не буде знати, що відбувається. Отже, ми збираємося включити string.h тут. Тепер, коли ми намагаємося скласти верхньої. Компіляція правильно. Давайте запустити цю програму. Так щось типу в нижньому регістрі. Що ви, хлопці, хочете, щоб ввести? Викрікну щось. Гаразд, Чарлі просто увійшов. Ми введіть ім'я Чарлі в. Чарлі в нижньому регістрі. І, сподіваюся, ми сподіваємося, це збирається кричати і виплюнув Чарлі у верхньому регістрі. Ура! Чи всі розуміють, як Я пішов про рішення, що? Таким чином, що я можу маніпулювати за допомогою цілих чисел вирішити те, що Я хочу зробити в рядках, тому що персонажі й цілі можете посилатися таким же чином, тому що відображення ASCII. Таким чином, щоб повернутися до точки, якщо я хотів поставити тут замість 32 прописні мінус нижній регістр справедливий, як що, що буде працювати однаково добре, тому що це просто тільки Різниця між цими двома значеннями. Якщо я хочу, щоб зробити цю again-- Charly. О ні. Я думаю, що ми пішли не в ту сторону, так? АУДИТОРІЯ: [нерозбірливо] нижній регістр а. ANDI Пен: Там ви йдете. Так. І з плює Чарлі. Так що будьте обережні, коли Ви віднімання значення пам'ятати, який з більше, ніж інша. Наприклад, тут я забув що в нижньому регістрі а є насправді більше, ніж у верхньому регістрі A. Тому, коли я намагався вичитати їх в іншу сторону навколо, я отримав негативну 32. І мій комп'ютер, як, Я не знаю, що це таке. Це лише деякі ймовірність випадкового Значення, яке не дуже добре. І тому переконайтеся, що ви віднімання в правильної довжини знайти символ, який ви хочете. ДОБРЕ. Хто плутати, як ми чи пішов про написання цієї функції? ДОБРЕ. Так насправді, функція вже існує в бібліотеці називається ctype.h. Називається ctype.h бібліотеки. Ця функція насправді вже написана для вас. Це називається у верхній. І так для цілей це PSET, ви збираєтеся щоб знайти, що ви дійсно хочете використовувати багато функцій, що містяться в бібліотеці CTYPE. Для верхньої, знизити, зверху, є lower-- ті всі функції що ви зможете використовувати дуже, дуже швидко в своєму коді, що робить саме, що це робить. Ми написали, як перетворити рядок у верхній регістр. Але це насправді код що хтось написав і що ви можете отримати доступ до за допомогою іншої функції. Так? АУДИТОРІЯ: Таким чином, ви просто скопіювати років там і зробити це для кожного листа? ANDI Пен: Так, тому що я не піклуватися про значеннях а. Я просто все одно, що різниця між ними 32, вірно? Різниця між малими б і у верхньому регістрі B також 32. І різниця між C а верхній З завжди 32. Мені просто потрібно піклуватися про Різниця між цими двома, бо всі букви за тією ж схемою, вірно? Якщо у мене є різниця між одним з них, Я знаю, що різниця між усіма з них. Гарне питання. Так. Все добре? ДОБРЕ. ООП. ДОБРЕ. Так ще одне поняття, що це буде дуже корисно, як ви продовжувати розвивати код ця ідея створення функції або абстракцію. Так що зараз, ми всі прийняли алгебру. В алгебрі, вас вчать, що є це чудова річ називається функцією машина, де, якщо ви вхід один вид числа, вона проходить через цього чудового функції і поза плескає інший вихід, вірно? У коді, те ж саме відбувається в якої-небудь функції. Так що я міг фізично написати в моєму тілі мого коду головна твердження, що насправді все тіло коду робить. Але за межами цього, я можу також написати безліч різних функцій що робити багато різних речей. Наприклад, ми вже почали використовувати деякі з них. Printf--, що є Функція що хтось вже написано, що ми можемо назвати в нашому коді. Для upper-- в цьому випадку, upper-- інша функція ми написали, що ми можна зателефонувати в наш код. І тому я думаю, чому у нас навіть є функції? Чому б нам просто не грюкнути його все в тому ж рядку коду? Це робить його легким для всіх. Ну, що обґрунтування це, в першу чергу, організації. Це дійсно дратує збирається через чиюсь код і одна функція, як Printf. Якщо ви, хлопці, насправді знав, що Функція Printf спричинило написати, це, начебто, 1000 рядків коду. Якщо кожного разу, коли я хотів щоб PRINTF те, Я повинен був написати 1000 рядків коду, Це було б дійсно дратує, щоб читати, вірно? Ось чому ми тільки створив цей абстрактна функція що у нас є хтось вже ще написав десь ще. І кожного разу, коли ми повинні використовувати його в наш код, ми просто повинні сказати Printf. І це можливість використовувати функцію хтось написав в коді. Це полегшує організаційно читати код. По-друге, це спрощення. Це спрощує кроки, які ми прийняти, щоб вирішити нашу проблему. Printf, функції, такі як Printf, функції, такі як у верхній всі речі, які дозволяють нам спростити код вниз так легше. І останнє, що є можливість багаторазового використання. Так на те, що у нас є функція називається Printf що ми можемо назвати багато різних раз і дозволяє йому бути багаторазового використання. Якби мені довелося писати Printf, Я пишу тільки один раз. Вона існує тільки в цьому одному місці. Якби я хотів, щоб зробити це знову, я б повинні скопіювати і вставити все, що в моїй другому рядку коду. Ось чому, якщо ми створимо функцію що існує поза нашого головного, ми можемо тільки закликати це і використовувати його, коли ми повинні так, що це набагато простіше, для нас, як програми для запису. Таким чином, шлях, який ми б насправді писати функція дуже схожа, так? Це свого роду перша випадок, в якому ми будемо см функцію беруть на стиль відрізняється, ніж наш основний Int порожнечу. У цьому випадку, якби я хотів, щоб написати функцію з ім'ям д, вірно? І тут значення INT це все розповідав мені, що я хочу, щоб це функціонувати, щоб повернутися до мене? Якщо я хочу, щоб куб ціле, Я збираюся хочете ввести. Ці параметри. Я збираюся вводить значення типу Int. І я збираюся повернутися інше значення тип Int. І тут, як ви бачите, все, що я роблю є те, що в куб мій вхід як мій виходу й повернення його. Так що все це робить функція є займає якесь число. Це примножує його на собі два рази так, щоб він кубів в дію. А потім він повертається все, що вихід. Таким чином, в цьому випадку, це дві лінії код, який ми повинні були написати окремо. Але якщо ми хотіли назвати На цій кілька разів, це набагато простіше набрати, що один лінія прямо тут, що це в кубі, ніж повинні пройти кілька разів. Таким чином, спосіб, що практично будь форматування для будь-якого виду функції буде існувати, як тут. Таким чином, ми маємо ім'я функції. У цьому випадку, це називається куб. І ми називаємо це, тому що куб це легко запам'ятати. Ви можете назвати це квадрат і це насправді може бути в кубі. Не має значення. Просто ім'я, що ти присвоєння вашу функцію. Це прямо тут, INT, є тип параметра потрібно. Отже, що ж цю функцію потрібно для того, щоб працювати? Ну, вона повинна вхід. Я назвав його введення. Ви можете назвати це, що ви хочете. Але мені потрібно щось типу Int. Це відбувається насправді виконати все, що всередині тут, тіло функції. І тоді тип повертається прямо тут, у цьому int-- Все це говорить мені, це що ця функція збирається повернутися до мене в міжнар. Таким чином, це займе в INT, і він збирається дати вам назад в Int. Всі розуміють чи, як форматування цього роду роботи? Прохолодний. ДОБРЕ. Так що не турбуйтеся, якщо це здається трохи абстрактний прямо зараз. Це те, що ми будемо говорити про. Ми пірнати глибше пізніше в курсі. Таким чином, що будь-якої більш високого рівня абстракція ці речі працюють є те, що, в пам'яті, в комп'ютер, все зберігається в цьому типі стека, я повинен сказати. Так там на самому верху. Я не знаю, якщо ви хлопці, можете побачити, що добре. Я постараюся, щоб збільшити. Тут на вершині, ми мають фізичний текст що комп'ютер interpreting-- всі нулі і одиниці, які існують в нашому комп'ютері. А потім ми ініціалізувати Дані даних і неініціалізованих, що ми називаємо глобальні змінні. Так змінних, які існують всіх програм і по всій вашій, по суті, код. Не турбуйтеся, якщо ви, хлопці, вид неясно про це. Це дійсно не має значення прямо зараз. І тоді у нас є те, що називається купа в стеку. Подумайте про стек буквально так само, як стек речей, стек відрізняється речі штовхають зверху один від одного, що зберігати різні Змінні і синтаксис в коді. А потім тут, у самому низу, у нас є змінні середовища що ви виконуєте в просто ваш маленький рядки коду. І ми тільки збираємося, щоб збільшити У від фактичного частини стека. Так от тут, якби ми були, щоб збільшити У тільки на цій області стека, це те, що він виглядає. І це насправді дуже важливо коли ви, хлопці, говорити про функції, тому що повідомлення про те, що пам'яті комп'ютера зберігає змінні і функції і параметри як ваш функції і ваші основні змінні в різних місцях. Так що зараз, головне, фактична функція що ви виконання в коді. Ви його параметри зберігаються тут і її локальні змінні зберігаються тут. Локальна змінна просто означає будь-яку змінну що існують тільки в цій функції. І на ньому, у вас є це окрема функція називається куб. Ви повинні це параметри а також тих місцевих жителів. І причина ви можете бачите тут те, що відбувається, коли куб займає в Значення з основного функції є те, що насправді це копіювання що протягом. Так що, якщо я хотів куба 2 і повернутися 8, що 2 фактично запроваджується як параметр, і це скопійовані, так що у вас є це існуюча в двох різних місцях в пам'яті. І ви повинні бути дуже обережні, на запам'ятовування, які один з тих, ви насправді маніпулювання. І приклад того, що сталося це було б дуже, дуже погано існує прямо тут. Так прямо тут, у мене, в теорії, Програма прямо тут, головним функція що я оголосивши Int х дорівнює 1. Я оголошую ще один INT у дорівнює 2. І тоді я біжу його через цю функцію називається підкачки, куди я припускаю, що це обмін двох значень. А потім я збираюся друкувати їх, вірно? Це те, що я хочу, щоб ця програма робити. Отже, давайте спуститися і подивитися. Так що, якщо я насправді написати відрізняється Функція, як ви можете бачити, у нас є основні функції тут. І тоді у нас є наші Друга функція тут. Порожнеча підкачки. Порожнеча означає лише те, що це не збирається нічого повертати. Назва Функція називається своп, і це збирається впускних двох змінних, Int А і INT B, з вашої [нерозбірливо] функції. Так по суті тут, ми проходячи х і у в цю функцію. І якби ми створити this-- тому ми хочемо створити тимчасове значення, вірно? Ми збираємося призначити, що а. А потім буде даний рівний б. І б збирається повернутися де значення температури було, яка представляє собою, тому що, коли Ви хочете, щоб обміняти речі, Ви не можете просто подобається поміняти їх місцями. Ви повинні тримати одного з них тут, так що він пам'ятає, що це таке, тому що, коли Ви поміняти один, ви забули що це первісне значення було, вірно? Так в теорії, ця програма повинно працювати, чи не так? Якби я хотів, щоб поміняти місцями два, вони повинні поміняти. Отже, давайте запустити його і подивитися, чи працює він. Отже, як ви, хлопці, можете побачити, х колись був 1 і у 2 був колись. І якщо я роздрукувати його, х ще 1 і Y 2. Хм, ця програма не здаються працює так, що я хочу, щоб працювати. Хто-небудь хоче, щоб зробити знімок на гадати, чому це відбувається? Це має відношення до шляху що різні речі зберігаються в різних місцях у пам'яті. ДОБРЕ. Таким чином, ви, хлопці, не треба турбуватися занадто багато про це прямо зараз. Але знаю, що куб Часовий змінні були б, тому що тут, в нашій функції, ми оголосили А і В а змінні, які існують в кубі, що функція. Але, як ви бачите, параметри, які він приймає в зберігалися тут. Але ми не були насправді повернення нічого. Ми не були насправді зміни х та у. Ми були тільки в заміні і б. Ми скопіювали х і у в то називається і б. Але ми ніколи фактично маніпулювати х і у самих себе. Ви, хлопці, бачачи як це відбувається? Це ми просто скопіювали їх закінчилася, але ми насправді не зберігається трек, де вони були в пам'яті. І ось тепер комп'ютер шукає, О, я запустити цю річ через це прекрасний функція. Але х і у ще х та у. Нічого не сталося їм через те що цих параметрів і локальні змінні зберігаються у іншій місце в пам'яті. І це вище рівня Концепція, що ми будемо почати бачити пізніше в курсі. Але точно знаю, що це проблема, яка може трапитися і що ми будемо з'ясувати способи про те, як мати справу з цим пізніше в курсі. ДОБРЕ. Добре. Таким чином, останнє поняття ми насправді відбувається, щоб покрити що буде корисно для PSET на цьому тижні те, що називають Аргументи командного рядка. Так Роб у своїй лекції пройшли вид коротко, як ці роботи. По суті знаю, що коли ви пишете як основної функції, коли ми написав функцій до і в минулому, у нас було Int основний порожнечу. І причина у нас було недійсним є тому, що наші програми не зробив потрібно вхідних значень для запуску, правда? Коли я побіг Маріо, мені не потрібно насправді просто введіть те коли я втікав Маріо. Я міг би підказати користувачу надалі. Але не завжди буде так. Наприклад, цього Проблема тиждень встановлює, Ви збираєтеся бути запропоновано, що в Крім запуску вашої програми, Ви збираєтеся хочете, щоб ввести деякі речі в прямо, як ви запустити програму. Таким чином, як ми робимо, що називається аргумент командного рядка, що це як аргумент Ви можете ввести безпосередньо як ви намагаєтеся запустити вашу програму. Таким чином, позначення для цього, це досить складний вид, але це дійсно не те, що важко. Так INT main-- це просто ваш головний функція. У ARGC коми рядок ARGV дужках. Таким чином, все, що говорить, що це INT argc-- все, що кажу вам, є те, що ті число Аргументи комп'ютер повинен очікувати. Так одна річ, яка дійсно Важливо стежити є фізична ім'я вашої програми вважається одним з тих аргументів. Так що, якщо я хотів, щоб моя програма запускати один додатковий плюс командного рядка Аргумент, насправді я матиме два. ARGC насправді буде два. І тоді рядок ARGV bracket-- все, що робить, це дає мені Масив рядків, це збираюся просто показати і зберегти те, що всі ці аргументи командного рядка. Так, наприклад, якби я хотів, щоб це Програма, ./copy вхідний_файл вихідний_файл, вірно? Це просто Типова команда Linux. Що насправді ARGC? Скільки аргументів командного рядка є насправді в це? Все це робить, це зробити копію вхідний_файл імені одного файлу і копіює його в інший файл, вірно? Ось все це робить. Як ви можете бачити, я роблю це по одній лінії фактично не потребуючи програму. Що наша ARGC в цьому випадку? Скільки аргументів у нас? АУДИТОРІЯ: Три? ANDI Пен: У нас є три, точно. Так що це дуже інтуїтивно просто думаю, що це просто вхідний_файл і вихідний_файл. Але знаю, що фізичне ім'я з Програма ви працюєте розраховує як один. Таким чином, в цьому випадку, насправді ARGC зо три. Як щодо того, що ARGV 0? Пам'ятайте, що всі з Аргументи командного рядка були збережені в масиві рядків. Так що, якщо я намагаюся отримати до нього доступ, те, що буде ARGV кронштейн 0 дати мені? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Точно. Це дасть мені точку скоротити копію, тому що це 0-я стихія, Перший елемент мого масиву. Що про ARGV 1? АУДИТОРІЯ: вхідний_файл. ANDI Пен: вхідний_файл, точно. Що про ARGV 2? АУДИТОРІЯ: OUTFILE. ANDI Пен: OUTFILE. Це трохи складніше в даний час. Що ви, хлопці, думаю, ARGV 3 буде давати мені якби я спробував надрукувати, що з? АУДИТОРІЯ: [нерозбірливо]? ANDI Пен: Чи було у вас руки вгору? Так. АУДИТОРІЯ: альтернатива. ANDI Пен: Точно. Так що пам'ятайте, в лекції, що ми тобто в кінці гоночного то називається нуль-термінатор? Ми увійдемо до це також далі в класі. Але знаю, що в позначеннях, спосіб комп'ютер знає, що це кінець масиву є те, що цим ставить те, що називається нульовим термінатор або тире дорівнює нулю. Так що, якщо ви намагаєтеся отримати доступ ARGV 3, Ви збираєтеся вдарити цю рису 0. Це навіть більше питання з підступом. Що про ARGV 4? Так це минуле нуль термінатор, повз межах масиві. Що ви думаєте, що станеться, коли ми намагаємося зробити? АУДИТОРІЯ: [нерозбірливо]? ANDI Пен: На ​​жаль? Скажіть, що трохи голосніше? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Так. Це ім'я з площу ви швидше за все, отримаєте. Але знаю, що ARGV 4-- що дозволяє отримати доступ до місця вашого комп'ютера пам'яті, що ви насправді не повинно бути зворушливим, бо Прямо зараз ви знаєте, що це ARGV. Ви знаєте, що це масив розміру 3 що має точка копіювання, INFILE і вихідний_файл. Якщо ви спробуєте піти так далеко за межі, що що ви повз порожнього термінатора, Ваш комп'ютер має, ймовірно, зберігати щось у ARGV 4. І ви дійсно не повинні бути дозволений доступ в ARGV 4, тому що у вас є файл шафа, і ви тільки дозволений доступ до цих трьох полиць. Але якщо ви намагаєтеся досягти далеко за межі шельф, де ви маєте право, Ви збираєтеся почати возитися з інші речі в пам'яті комп'ютера. Це буде дуже, дуже погано. Так просто знаю, що. Будьте дуже обережні, що ви не просто випадково почати доступ до елементів масиву, що не в тому, що ви хочете створити. Так. ДОБРЕ. Так що ми збираємося зробити ще один Термінал приклад тут. ДОБРЕ. Так Роб швидко в лекції другий день пішов через цей приклад, де була INT INT основний ARGC рядок ARGV кронштейни, які говорить мені, що я матиме аргументи командного рядка. Він, якщо ARGC дорівнює дорівнює 2-- пам'ятайте, дорівнює одно означає порівняння. Якщо він дорівнює 2, то я в друк привіт, що було першою елемент масиву є. Інакше друк, привіт світ. Що це збирається відбулося в основному? Може хтось просто пояснити Англійська що ця програма робить? Так. АУДИТОРІЯ: Якщо хтось набрав в команду і сказав, що їх ім'я та прізвище, це буде не просто друкувати Перший і сказати, привіт, все ваше ім'я є. ANDI Пен: Добре, давайте його запуску. Так, наприклад, якби я, щоб зробити цей файл зробити привіт привіт, метою яких , Метою яких те, що ти хочеш, щоб ввести? АУДИТОРІЯ: ім'я та прізвище. ANDI Пен: ім'я та прізвище? Простору? АУДИТОРІЯ: Так. ANDI Пен: Може хто-небудь сказати мені прямо зараз, що ARGC? Просто тут? Ой, вибачте. Дозвольте мені повернутися. Скільки аргументів командного рядка are-- ви, хлопці, не можу бачити. Але я постараюся, щоб збільшити. Я намагаюсь. Так, є три, чи не так? Це точка слеш привіт, це Енді, і це Пен. Так що ви, хлопці, думаю, що це Програма буде роздруківки? Ох. Ой, вибачте. Неправильне ім'я. Це роздруківки, привіт світ. Хто-небудь хоче пояснити чому це відбувається? Так? АУДИТОРІЯ: [нерозбірливо]. ANDI Пен: Точно. Так от, є умовними Тобто, якщо ARGC дорівнює дорівнює 2. Таким чином, тільки в тому випадку, існує два аргументи командного рядка. Тоді я йду до друку, привіт, що це таке. А ще, я збираюся надрукувати лише, привіт світ. Так само хтось хоче щоб дати мені приклад про те, як я міг би насправді зробити це, щоб надрукувати значення ARGV 1? Що б я, щоб вхід тут? Тільки одна річ, вірно? Оскільки точка привіт до вже вважається як перший аргумент. У мене є ще один тільки. Так точка привіт, якщо я просто зробити Енді. Здрастуйте, Енді. Чи розуміє все чому це відбувається? Так. АУДИТОРІЯ: Так простір між Команда line-- це [нерозбірливо]? ANDI PENG: Ні Так просторі в командному рядку Аргумент, х, сказати комп'ютер що це початок нового рядка. Так рядок ARGV here-- це магазини всі ваші аргументи лінії команд в рядках. І тому простір в командному рядку argument-- все, що робить вам сказати, це врешті одного рядка і цей час, щоб перейти до іншої. Так. Це дуже важливо для Ваш PSET, тому що ви буде відчувати їх. Так хто-небудь є які-небудь питання з цього приводу? ОК здорово. Так? АУДИТОРІЯ: Так що причина вам буде помістити ціле аргумент вапняно замість з [нерозбірливо] буде, коли ви хочете ввести додаткову інформацію [Нерозбірливо]? ANDI Пен: Так, саме так. Деякі програми вимагають для введення аргументу командного рядка що вона проходить в і який використовує це. Так. АУДИТОРІЯ: Так що, якщо [нерозбірливо]? ANDI Пен: Ну, те, що у мене є щоб потім змінити в моїй програмі? АУДИТОРІЯ: Просто 3. ANDI Пен: Чому це відбувається, як ви думаєте? АУДИТОРІЯ: Тому що [нерозбірливо]. АУДИТОРІЯ: Ви повинні були б змінити його на 2 [нерозбірливо]. АУДИТОРІЯ: 1 і 2. ANDI Пен: 1 і 2, точно. Таким чином, в цьому випадку, ви, ймовірно, хочуть мати двох Printf statements-- який друкується ARGV 1 і той, який друкується ARGV 2. Ось. Я може реально зробити що реальний швидкий. Ось так. Ох. Не зовсім те, що ви хотіли. Але якщо ви, хлопці, возитися з форматування, він вийде. Так. Прохолодний. Я знаю, ми трохи короткий за часом. Але я просто хочу, щоб швидко провести пару хвилин, що проходять через helpful-- АУДИТОРІЯ: У вас є дві хвилини. ANDI Пен: у мене є дві хвилини? Дякую. Деякі швидкі підказки Pset. Таким чином, для цієї PSET, я настійно рекомендую, як я вже сказав, все читати специфікації. Ви будете писатимуть три programs-- одна називається initials.c, одна називається caesar.c, одна називається vigenere.c. Деякі важливі поради, які ви, хлопці, дійсно хочуть зберегти mind-- так Тобто ця функція називається atoi--, як я люблю говорити, труа. Незрозуміло, якщо це насправді, як ви це говорите. Але все, що він робить, це введення. Він перетворить рядок в Int. Таким чином, являє ASCII для цілого я. Це просто перетворення ASCII значення в ціле значення. Так що пам'ятайте ARGV, масив, який зберігає всі ваші команди шикуються arguments-- він зберігає їх усіх, як струни. І тому, якщо ви хочете, щоб мати можливість у одного з них стали ціле число, Ви будете мати використовувати тут це значення. Модулю, як ми розглянули раніше в класі сьогодні, дозволяє мати Інша частина, що ви є. Так що, якщо у нас є дуже, дуже великі номери в Цезар, що, якщо у нас є кінець з рядка Vigenere? Як ви збираєтеся бути в змозі щоб отримати, що обернути навколо? Якщо я вдарив г і я хочу це, щоб повернутися до, як я збираюся отримати що, щоб обернути навколо? Можливо хочете використовувати модулю десь там. По-друге, переглядати навколо Ваша бібліотека. ctype.h. Це нова бібліотека у нас є. Ви знайдете багато дуже, дуже корисно functions-- ISUPPER, ISLOWER, ToUpper, ToLower, ISALPHA, і так далі. Всі функції, які будуть дуже корисні коли ви намагаєтеся з'ясувати ,, цей персонаж малої буквою? Як перетворити це рядок великої літери? Всі ці речі будуть дуже, дуже корисно для вашого PSET. ДОБРЕ. Годинники сьогодні ввечері 8:00 до 11:00 в ТЕАЛ класі завтра а також у середу і в четвер вночі. Години роботи офісу у звичайні. Настійно рекомендую вам, хлопці все почати прямо зараз, тому що ви не хочете бути, що Дитина, яка в четвер ввечері є проблеми представивши свій PSET і як, я не знаю, що робити. Я почав, я закінчив, я представив. Спробуйте дати собі деякі можливості, бо в завжди відбуваються проблеми коду. Ви хочете, щоб переконатися, що ви даєте собі багато часу, щоб бути в змозі для завершення psets. Прохолодний. Я повішу тут. АУДИТОРІЯ: Це онлайн вже? ANDI Пен: Я не знаю, якщо це вже в Інтернеті, але він буде. Я повішу тут, якщо хто- вже які-небудь питання. Дякую за увагу.