[Грає музика] Девід Малан: Привіт, всім. Це supersection CS50 в. Призначені розділу не буде почати ще на тиждень. І тому сьогодні, я тут with-- МАРІЯ: Марія. Девід Малан: --to насправді поглянути на проблеми встановити один, курс років Перші тижні матеріалу, вам орієнтуватися з CS50 IDE, трохи з Linux, операційної системи, це працюють на IDE, а також поглянемо на деякі з переходу з нуля до C провідних до проблеми встановіть один. Так що без подальших церемоній, в задачі встановити один, Ви будете введений в CS50 IDE, який це веб-програмування Середа, яку ми використовуємо для того, писати програми. Він розроблений, щоб виглядати дуже нагадує типового комп'ютера Система працює під управлінням операційної Система називається Linux. Але це в так званому хмарі, що означає кожен у класі може насправді мають його або її власний рахунок і використовувати його, як добре. Так що більшість з вас, ймовірно, ніколи не використовували Середа Linux, перш ніж або, можливо, навіть середу командного рядка. І командного рядка Середа відрізняється. Це все текстові. Це все клавіатурні команди. І це не Mousing, що не ікони, немає діалогу вікон, ні меню. Це чисто текстовий. Тому спочатку, що це начебто відчуває, як крок назад в плані складності. Але він виявився набагато більш потужний, звичайно, для комп'ютерної вченого, в кінцевому рахунку ,. Отже, давайте поглянемо. Ось я в CS50.io, через який Ви можете увійти в CS50 IDE. І так само, як в порожньому, є втричі основні області цього екрані. Так на лівій стороні, у нас є що буде файл-браузер. І є ця папка на зверху, що в даний момент порожній право так як я позбувся всіх своїх файли до supersection. І ось, коли ми будемо зберегти C файли, які ми пишемо. У правому верхньому куті, у нас є місце, де весь наш код збирається отримати письмове. І справді, якщо я натискаю це плюс, це буде дозвольте мені вибрати новий файл. І тут я можу почати писати код на Сі чи дійсно, будь-яку кількість інших мов. А потім на дно, де його говорить jharvard @ ide50-- і ваш буде щось сказати небагато different-- Що це було називається? Вікно терміналу. Так. Таким чином, вікно терміналу так званий командного рядка Інтерфейс, через який ви можете взаємодіяти з операційною системою. І зараз, ми збираємося зробити дуже мало використання this-- скомпілювати, щоб дивитися на Повідомлення про помилки, які ми бачимо, і запустити наші програми. Але в кінцевому рахунку, ми збираємося щоб зробити набагато більше, а також. І ви навіть можете встановити програмне забезпечення і управляти робочий простір в CS50 IDE, а також. Але більше на це іншим разом. Так що давайте йти вперед і написати дуже проста програма просто пройти через розминки hello.c, які, можливо, найпростіший програма, ми можемо написати. Я вже відкрив нову вкладку. Я збираюся йти вперед і кажуть включають в себе стандартні io.h. Тоді Int основний (порожнечу). І тоді Е ("привіт, світ" Обернена коса риска н, недалеко цитата, Закрити дужки, і крапка з комою. Добре. Так що тепер моя помітити вікно без назви. Так що я дуже швидко збираюся піднятися на файл, зберегти. І важливо, що Я називаю це «не привіт." Таким чином, дуже поширена помилка, особливо в задачі на один, це випадково просто назвати свою Програма "вода" або "жадібним" або "Маріо" або "кредит" тощо. Але ви насправді хочете, щоб що у вас є розширення файлу тому що це єдиний шлях, який компілятор, а також редактор коду знає, що ти насправді писати код C. Отже, дозвольте мені йти вперед і натисніть кнопку Зберегти. І зараз теж, те, що CS50 IDE зробив для нас це також Синтаксис підкреслив все. Так що це все стало дуже барвисті. І весь сенс що не працює. Це просто, щоб привернути очі на концептуально різних частин з цієї програми. Так що давайте йти вперед і скомпілювати. І я можу скомпілювати в декількох відносинах. І на тиждень один, то старої школи, як ми зробили це було буквально на командування line-- "брязкіт hello.c." А потім я потрапив Enter. І нічого не здається, відбулося у вікні терміналу. Але те, що зробив зміни в IDE? Де, знову ж таки, просто означає, що IDE Інтегроване середовище розробки. Це химерний спосіб сказати, це комплексний розвиток середовище для розробки програмного забезпечення. Отже, що ж зміниться в інтерфейсі? Що ви помітили це інше, Марія? МАРІЯ: Я помітив, щось під IDE50 папку тут. Девід Малан: Так. Так тут не тільки у нас є "hello.c." У нас також є "a.out", який є свого роду німий назва програми. Але насправді, це ім'я за замовчуванням для Програма, коли ви просто скомпілювати код і не кажіть компілятор який файл для виводу. Так що, якщо я хочу, щоб запустити це, я потрібно сказати compiler-- або, скоріше, мені потрібно розповісти робочий простір, що я хочу, щоб запустити програму під назвою "a.out". Enter. І є "привіт, Світ. "Тепер" ./ ". насправді важливо. Навіть хоча зазвичай ми тільки написати імена команд, коли це програма у Вас є написано, ви хочете сказати, "./" бо явно говорить Linux що ви хочете, щоб запустити програму під назвою "a.out", який в цьому, де точка означає цей каталог, що я в даний час в, який, трапляється, називається робоче місце, "a.out. Тому що, якщо я тільки що сказав "a.out", Enter, Я йду, щоб отримати "a.out команди не знайшов ", тому що computer-- тому що я придумав "a.out"; він не прийшов з computer-- не знаю, де його шукати, хоча це право у мене під носом, так сказати. ДОБРЕ. Таким чином, ми могли б змінити це бути "дзвін -o привіт hello.c." І якщо я вдарив Enter, яка програма це відбувається на вихід для мене? Що ім'я файлу? Так, в спину. Це вірно. "Здравствуйте." Таким чином, "привіт" буде назва програми бо ми використовували так званий параметр командного рядка, який є тільки спосіб зміни поведінки компілятор насправді вихід конкретне ім'я файлу. І справді, якщо я збільшити , І подивитися тут, Тепер у мене є не тільки "a.out" і "hello.c", але і "привіт", а також. Так що тепер я можу зробити "./hello," Enter. І є "привіт, мир." Але і це lastly-- тепер буде конвенція ми використовуємо протягом всієї семестр, typically-- що ви можете також просто сказати "привіт зробити." І справді, це сказати, що це до на сьогоднішній день, тому що він вже існує. Дозвольте мені йти вперед і видалити з команда RM, як "a.out" - і сказати "видалити регулярний файл a.out"? Це просто означає ,, ви впевнені, що хочете видалити його? Я хочу сказати, так. А потім я збираюся видалити "привіт", але не "hello.c." Я збираюся сказати "так" у явному вигляді, але "у" достатньо, як добре. А тепер зверніть увагу, якщо я введіть ls-- який, нагадаємо, означає list-- це список всіх файли в моїй папці. І справді, якщо я збільшити , І подивіться на лівій верхній, це підтверджує, що те, що в цій папці, навіть хоча це помічені як IDE50 тут і не місце для роботи, це просто "hello.c." Так що тепер тут, якщо я у "зробити привіт", Enter, Тепер я бачу набагато більше команду, але більш складні команди, що відбувається щоб бути корисним в найближчі тижні. І тепер я можу сказати, "./hello." Отже, давайте зробимо короткий огляд команди деякі інші Linux. Тоді чому б нам не зробити крок назад і реально поглянути на C більш Як правило, перехід від нуля С, а потім укласти з виразом в першій задачі в С. Добре. Так що я збираюся йти вперед і тільки чистий до моєї робочої області Control-L тільки тримати екран акуратно. Але це не має ніякого функціонального вплинути інакше. Нагадаємо, що ми вже бачили кілька команд зараз. Таким чином, ми бачили брязкіт, які, як правило ви не доведеться виконувати вручну більше. Ми замість цього використовувати марку. Але ми також бачили, Ls, який показує список файлів в моєму каталозі. А тепер чомусь there-- є два Файли тепер, "привіт" і "hello.c." Чому зірка або Зірочка після "привіт"? Що це означає на основі на те, що ми бачили в тиждень один? Що ти думаєш? Що означають зірки? МАРІЯ: For-- програми "привіт"? Девід Малан: "Привіт *". Так. О так? О, виконуваним. Це вірно. Так це означає, що "привіт" є виконуваним. Так насправді, ось чому Я можу зробити "./hello." Добре. Так що ще я можу зробити тут? Ну, виявляється, що я можу Також створювати каталоги. Отже, дозвольте мені йти вперед і створювати, наприклад, "pset1" Каталог. І проблема встановити параметри буде у вас зробити саме це, так що вам не потрібно пам'ятати сьогодні. Але "MkDir pset1" здається не мають ніякого впливу. Але знову, повідомлення про помилку як правило, добре. Так що, якщо я типу "LS" now-- ах, тепер У мене є виконуваний файл з ім'ям "привіт," З файл з ім'ям "hello.c." І тоді Слеш, так говорити, що це означає, є каталогом. Так насправді, тепер я хочу, щоб відкрити його. І я не двічі клацніть на ньому, як в GUI, графічному середовищі. Я замість сказати "CD pset1." Enter. Нічого цікавого не здається, відбулося, за винятком моєї маленької рядку here-- це спосіб в Linux нагадувати мені, де я перебуваю, так, що папка відкрита. Це просто говорить мені явно на відміну від графічно. І якщо я набираю "Ls", чому я бачу інше підкажіть відразу, як ви думаєте, коли я перерахувати вміст pset1? МАРІЯ: Ви, напевно, не є що-небудь в там. Девід Малан: Так. Отже, ми маємо, очевидно, не створили нічого там тому що я просто створив каталог. Тепер, якщо я хотів, щоб створити для file-- Я, наприклад, міг би створити новий файл. І тоді я міг піти в Зберегти і збережіть його як, як, "mario.c", якщо ви робите стандартний випуск PSET одного. А потім, як і будь-який Mac або ПК, просто вибрати папку "pset1, Зберегти. А тепер файл порожній. Але давайте збільшувати разів протягом секунди. Давайте зробимо Ls тут. Тепер ми бачимо, "mario.c". Так що кілька інших команд, які варто маючи на увазі, протягом time-- ясно, або Control-L є те, що я було удару; MkDir ми бачили; гт ми бачили, як добре, що для видалення або видалення файлу. Остерігайтеся ви можете also-- і якщо ви подивитеся на електронні підручники, ви гт-ВЧ є дуже поширеним способом сказати видалити папку, в якій речі в ньому. Просто супер, супер обережні. -rf означає рекурсивно видалити все це Ви намагаєтеся видалити і насильно видалити його. Так рекурсивний засобу, якщо це папка з папка з папкою з папкою, видалити всі з них. І насильно означає навіть не запитаєте мене, так чи ні, я впевнений, що? Так що це супер небезпечний шлях видалення багато речей швидко. Але beware-- занадто часто робить безстрашний студент випадково видалити, скажімо, PSET Один з них, наприклад. МАРІЯ: А якщо вони просто зробити -r, вони збираються щоб запитати їх про кожен файл. Девід Малан: Який помірно дратує. МАРІЯ: Так. Девід Малан: Так ось чому так багато з нас, самостійно входить, перебуваю в звичку використовувати -rf. Але це небезпечно. Так покупець, бережися. А потім мв це свого роду цікаво імені. Так що це команда переміщення, яка відчуває себе трохи дивно тому що ви дійсно можете використовувати його для переміщати файли з одного місця в інше. Наприклад, припустимо, що я зіпсував. Припустимо, що я створив новий файл для PSET. І я зберіг його як "greedy.c." Але припустимо, я випадково зберегти його в IDE50-- так і в самій моєї робочої а не в pset1. Ви можете бачити, як багато у верхньому лівому кутку. Там це "greedy.c." І є декілька рішень. Таким чином, одна, я можу використовувати супер зручно спосіб просто перетягнувши його. І що буде насправді виправити цю проблему. Але сьогодні, ми намагаємося дивитися на більш таємні, але ефективні способи робити це. Отже, дозвольте мені взяти "LS" в pset1. І я бачу тільки "mario.c." Дозвольте мені йти вперед і робити "CD ..". Так компакт знову змінити каталог. ".." Означає, що, хоча? Останній раз я сказав "CD pset1 "йти в pset1. Тому, коли я говорю "CD ..", що я роблю? У зворотному напрямку. Так. Так це буде так званий батьків. Перейти на один рівень вгору, як виходу з папки. Так Enter. І справді, подивіться, що він зробив. Це зворушило мене просто в робочому просторі, а не з в pset1, який знаходиться в робочій області. І тепер, якщо я друкую "LS", є ціла купа речей. У є "greedy.c". Так що тепер дозвольте мені використовувати мв буквально рухатися "greedy.c" в pset1. І так багато команд Linux працювати так само, як це. Вони не приймають ніяких аргументів чи вони приймають один Аргумент, або вони взяти два командного рядка Аргументи і так далі. І в цьому випадку, це робити те, що буквально він говорить, хоча succinctly-- рухатися greedy.c в pset1. Enter. Ніщо, здається, не відбудеться. Але якщо я роблю Ls знову, жадібний немає. А якщо я "CD" pset1, Enter, а потім Ls знову, тепер він знаходиться в потрібному місці. Як осторонь, якщо для деякі reason-- особливо якщо у вас є переривчастий підключення до мережі або ви ходити Кампус з кришкою ноутбука закритий, а потім відкрити його знову і ваш робочий простір здається дещо з синхронізації, не склало великих труднощів. Просто перезавантажте ваш браузер вікна, і він повинен ресинхронізація так, що ліва файловий браузер виглядає точно як у вікні терміналу. Не хвилюйтеся. Якщо ви сумніваєтеся, перезавантажте сторінку, так Поки ви зберегли файли вже. ДОБРЕ. Так мв також може бути використаний для перейменування файлів. І давайте поглянемо на це остання команда тут. Так suppose-- і це супер загального, теж рано. Деякі студенти іноді створюють файл називається, давайте say--, що ще один? Як "WATER.C." Так що я просто кричати, для немає підстав, у всіх кришок. Але це не Правильна назва для файлу якщо тільки тому, що наше завдання встановити Специфікація не сказати вам, щоб зберегти файл як усі великі "WATER.C." Замість цього, ми очікуємо, "water.c" у нижньому регістрі. І, справді, це проблематично, оскільки check50, програма ви збираєтеся зустрітися в задачі встановити один, який автоматично перевіряє правильність коду буде кричати на вас, якщо він не може знайти "water.c" у нижньому регістрі. Тому мені потрібно, щоб виправити це. Так багато різних способів зробити це, перший з яких контролюватиме клік або клацніть правою кнопкою миші ім'я файлу і просто змінити Перейменувати. Всього в порядку, щоб зробити це. Але, знову ж, сьогодні, давайте зробити його трохи любитель. Давайте використовувати мв змінити "WATER.C", щоб "water.c." Таким чином, ви також можете використовувати перший аргумент перейменувати його на другий аргумент якщо другий аргумент не на Те, папка або ім'я каталогу. Добре. І, нарешті, трохи trick-- так що я перебуваю в Мій сайт каталогу на даний момент. Якщо я хочу, щоб потрапити в PSET однієї, Я, звичайно, можете ввести "CD pset1." Але це так втомлює типу "pset1" або більше назви файлів або каталогів ще. Так дуже часто в Linux, те, що Ви можете зробити, це почати, набравши "PSE" і просто нудно, вдарив Tab, і нехай комп'ютер показник його для вас. Супер корисно, щоб потрапити в цю звичку. Єдина заковика в тому, якщо у вас є декілька файлів або папок, що починаються з буквою "р" або "PS", ви, можливо, ввести ще кілька, перш ніж комп'ютер знає, що робити. МАРІЯ: Ми хотіли ярлики. Девід Малан: це заощадити багато часу. А також, як ми вже говорили в лекції, ви можна прокручувати в історії, вгору і вниз, знайти недавно виконаний команди, а також. Добре. Так що тепер, давайте звернемо нашу увагу назад в простій програмі, привіт світ. Таким чином, ми зібрали цього точно. А тепер, чому б нам не взяти погляд на типи даних а потім перехід від деяких відповідні блоки Скретч З МАРІЯ: Високий. Так що тепер ви почали написання програм на С, ми збираємося, щоб почати говорити про типи і змінних даних. Таким чином, деякі типи даних, які хотів би знати, починаючи з сьогоднішнього дня є ті, які виділені синім кольором. Отже, ми маємо INT-перше, яка виступає за ціле. І, що має цілих, як ви може мати guessed-- так 1, 2, 3, і будь-які інші цілі числа що ви можете думати. Девід Малан: А також негативний. МАРІЯ: А також негативні, так. І 0. Тоді у нас є поплавці, які плаваючою комою. Так от всі реальні цифри які мають десяткової крапки. Так 5,0, 5,2, і ще більш цифри після десяткової крапки, а також, а також негативні. Тоді у нас є символ, який є символом. Тому я думаю, ми говорили про це в лекції сьогодні. Але у нас є листи, за example-- A, B, C--, які можуть бути збережені як символ. Але тоді у нас є набагато більше символів які можуть бути збережені як символ. А ті, зберігаються у вигляді ASCII. І тоді у нас є логічний, які Булеві. А ті, оцінити, Правда чи Помилкові або 1 і 0, відповідно. Девід Малан: І нагадаємо, що BOOL приходить з бібліотеки CS50. Так що це не вбудований в С, але це супер корисно мати поняття справжнє і хибне. І навіть якщо ви може think-- забавний факт. Логічне значення технічно необхідний скільки бітів, дійсно, представляти Правда проти невірно? Скільки бітів ви думаєте, Ви повинні були б, максимально? Так, лише один. Так що виходить, що C не можу дати вам тільки один біт. Найменша одиниця виміру Ви можете отримати восьмій. Так що це трохи марнотратно вони ви використовуючи весь байт, або восьми бітів, представляти Правда чи Брехня. Але це тільки так, як це реалізовані в C бібліотекою CS50. Марія: А потім ті, які ми не буду казати про так широко Право now-- двічі, це для великих поплавців. Довгі довгі і короткі Також для цілих чисел. Девід Малан: Дійсно. У хакерської видання PSET однієї, ми насправді використовувати довгі довго. Але для стандартної версії, він не повинен бути необхідним. МАРІЯ: Прохолодний. ДОБРЕ. Так operators-- ви повинні бути ймовірно, знайомі з більшістю з них. Додавання +; віднімання, -. Для множення, ми маємо *. Так що не Х, що ми зазвичай використовуємо. Відділ, у нас є зворотну косу риску. І по модулю наш останній оператор, ми будемо говорити про прямо зараз. Це оператор, який дозволяє взяти залишок від ділення. Так що, якщо у нас є 4% 2, 4 ділиться на 2, 2 із залишком 0. Так 4% 2 0. 4% 3 Розділ 1. 4% 5. 4, як ви вже здогадалися, може. І пам'ятати при використанні всіх цих операторам використовувати правила PEMDAS. Девід Малан: Так ясно, якщо ви зробити 4% 2, чому це 0, точно? МАРІЯ: Тому що 4 ділиться на 2 2 із залишком 0. Так модулю дає нам, що залишок як протилежність результаті поділу. Девід Малан: І справді, те, що ми знайдемо це корисно для, що в деяких проблем це не обов'язково одне, якщо ви хочете мати Ефект обмежуючи себе в діапазоні чисел як 0 через щось, Ви можете використовувати модуль, щоб обернути навколо раніше, ніж як 2 млрд або 4 млрд значення, ми говорили в лекції. МАРІЯ: Так. І навіть в "жадібні" ми могли б. Девід Малан: Так, в Проблема встановити один, а також. МАРІЯ: Так, приємно. Девід Малан: Добре натяк. МАРІЯ: Вибачте. Логічне expressions-- так для логічних операторів, ми будемо говорити про все з них, які ви бачите тут. Так що зараз у нас є два рівні знаки вказані для рівних. Так що ті для порівняння. Дотепер ми бачили тільки один дорівнює знак. От коли ми призначаємо значення змінної. Так що, якщо ми бачили Int N = 5, то ми призначили 5 до змінної п. Але якщо ми хочемо використовувати == для порівняння, ми можемо перевірити, якщо п == 5. А якщо н == 5, те, що це правда. Так логічні оператори дозволить нам, в основному, оцінити логічне вираження в Правда чи Брехня. Так що не equals-- у нас є знак оклику, а одно. Таким чином, ми могли також перевірити, якщо п не дорівнює 5-- так н! = 5. Менш, менше або дорівнює, більше, більше або дорівнює, а то у нас логічний І і логічне АБО. А ті, дозволяють оцінити кілька логічних виразів разом в основному зібратися разом, як одне ціле логічне вираження. Так що, якщо ми хочемо, щоб знайти номер, кажуть, що більше, ніж 5, але менш 15 в той же час, ми б використовувати логічний оператор, щоб побачити, якщо п більше, ніж 5 && н менш 15. Девід Малан: І ось, занадто, це дійсно легко рано, щоб випадково використовувати тільки один амперсанд або один вертикальна смуга. І, сподіваюся, компілятор буде кричати на вас, тому що вони насправді мають дуже різне значення. Для тих, кому цікаво, вони для бітових операцій, працюють на окремих бітів. Але ви хочете, пару з них тут. І супер важливо, що Перший, знак рівності, який є рівність оператор в на відміну від оператора присвоювання. МАРІЯ: А вертикальна бар розташований між Видалити і повернення. Девід Малан: Так. На типової американської клавіатурі. МАРІЯ: Так. Отже, давайте стрибати прямо в умовні оператори. У порожньому, ви, вже бачили, напевно, якщо заяви, які дозволяють вам перевірити, якщо щось вірно, то зробити щось ще. Таким чином, ви, можливо, хотіли щоб перевірити, якщо ваш спрайт торкаючись деяких інших спрайт або кордон екрана. І тоді ви, можливо, хотіли, щоб закінчити гру або зробити щось ще. Так синтаксису, що «Якщо (умова)." Так що, якщо ваш спрайт торкаючись щось, щось не знаходиться всередині фігурних дужок. Тоді ми мати, якщо-інакше заяви. Решта дозволяє нам робити щось якщо умова, що ми перевірити на початку це не так. Так що, якщо спрайт торкаючись межі цього ще робити щось ще. Так в іншому випадку зробити щось ще. Тоді у нас є короткий приклад для цього. Так що, якщо (military_time <12), ми хочу PRINTF "Доброго ранку!" Інакше ми збираємося Printf "Добрий вечір!" Простий приклад. Девід Малан: Добре. МАРІЯ: Прохолодний. Так що тепер у нас є перемикач заяви. Перемикач заяви взагалі може дозволяють нам зробити багато тієї ж самої речі що ми тільки що говорили о, якщо із заявами. Наприклад, прямо зараз у нас є Загальна форма перемикача заяву що дозволяє нам приймати змінна називається п і порівняти її з великою кількістю різні значення, яку ми тут назвав constant1, constant2. У нас може бути багато більше. А ті, які називають випадки. Так що, якщо у нас є перемикач statement-- і це працює тільки для integers-- у нас є змінна в даному випадку це п. Якщо змінна п одно constant1, ми буде виконувати деякі фрагмент коду або щось, що ми хочемо зробити. І тоді ми б зламати. Таким чином, розрив означає, що перемикач заяву буде припинити виконання якщо п дорівнює constant1, а потім ваша програма буде продовжуватися. Це буде виходу з перейти заяву і воно буде продовжувати робити щось ще. Якщо, проте, п не дорівнює constant1, то справа для constant2 будуть перевірені. Так, якщо п одно constant2, що інші фрагмент коду буде виконаний. А потім зламаю якщо дорівнює їй. І тоді ми можемо мати also-- НЕ обов'язково, though-- варіант за замовчуванням, що станеться, якщо п не дорівнює будь-який з випадків, що ви перерахували. І у випадку, за замовчуванням, ми також не потрібен перерву обов'язково бо комутатор заява буде знати, що необхідно припинити після замовчуванням випадку, якщо це так. Девід Малан: Але стилістично, ми завжди ставимо його там. МАРІЯ: Так. Девід Малан: Так. Так, особливо коли починали, особливо якщо серед тих, хто менш комфортно, я б особисто просто рекомендуємо дотримуватися IFS і повернулися на Батьківщину IFS-і якщо-інакше-якщо-повернулися на Батьківщину і т.д., якщо тільки тому що вони трохи простішим. Це хороший оптимізація, або іноді навіть естетично це робить код більш читабельним. І справді, ймовірно, середині семестру ми побачимо проблему встановити, де він просто виглядає краще і легше читати на людину за допомогою перемикача заяву. Але не турбуйтеся про чіпляючись за це занадто рано. МАРІЯ: Так. Якщо у вас є багато якщо заяви, це може бути просто не дуже читаний. Це може бути не дуже швидко для вас, щоб пройти через це. Так звітність перемикання може бути дуже корисно, як добре. А також, чи не remember-- НЕ забудьте поставити перерви в там. Девід Малан: Чи не пам'ятати про це. МАРІЯ: Бо тоді ви може впасти через від одного випадку до іншого. Отже, давайте говорити, що випадок constant1 не мають про брейк в ньому. Тоді ми могли б провалитися всередині випадок constant2. І ми не хочемо, щоб це зробити, якщо ми вже досягли випадок constant1 і він дорівнює п. Так, наприклад, якщо ми маємо змінну п, який містить номер класу, і ми хочемо, щоб подивитися, що клас is-- якщо п одно 50, ми збираємося надрукувати "CS50 є Введення в Computer Science I. " Тоді ми йдемо, щоб зламатися. І це все. Якщо, проте, п одно 51, ми збираємося друкувати "CS51 є впровадження інформатики II ". Потім, знову ж таки, ми збираємося зламати. Однак, якщо то покладемо 124, 61, будь інший номер, який ви могли б думати про, або програму не буде визнати, що. Так що збирається сказати: «Вибачте, я не знайомі з цим класом ". І це буде перерва. Девід Малан: Таким чином, ви можете реально побачити ПЧ, інакше, якщо ще ідея тут. Це просто різні синтаксис висловлюючи ту ж саму ідею. МАРІЯ: Точно. Тепер у нас є потрійні операторів. Так потрійні оператори трьох parts-- стан, щось робити, якщо умова істинна, а потім щось робити якщо умова помилкова. Отже, ви бачите, в основному, синтаксис, що тут. У нас є знак запитання, і те, що the-- ми називаємо це? Девід Малан: двокрапка. МАРІЯ: Колон. Дякую. Вибачте. Отже, давайте подивимося на наш приклад з побачити, якщо ми можемо зрозуміти this-- class_num == 50. Так от, ми бачимо наш оператор логічне == який порівнює змінну class_num 50. Так class_num зберігає ціле число. І якщо цього числа дорівнює 50, то ми збираєтеся зберігати "Девід Малан" усередині рядка професора. Якщо номер класу не дорівнювати 50, "А Давид не Малан" буде професор. Девід Малан: Спасибо. І так це, здається, відповідає що, ви скажете, на перший погляд? МАРІЯ: Мені здається, як якщо-інакше заяви. Девід Малан: Так. І справді, це свого роду красива один лайнер, так би мовити, для реалізації саме логіка, якщо-інакше але робити все, що в один крок. МАРІЯ: Точно. Так. Так що, якщо-інакше заяви можуть займають багато місця. Вони можуть бути занадто довгим для щось само просто, як це. Таким чином, це може бути дуже лаконічним і дуже приємно. Так що тепер ми йдемо в дивлячись на виконання щось знову і знову, тому перевірка для стан кілька разів а потім продовжує робити те у той час як умова істинна. Таким чином, це приводить нас У той час як приємно в петлях. Зліва, у нас є наш перший цикл, а. Таким чином, хоча щось вірно, зробити щось знову і знову. Тому переконайтеся, що помітите, що наші стан тут перевіряються на вершині. У той час як з нашим другим loop-- ми називаємо що робити-то час loop-- ми робимо щось, Потім ми перевіряємо, стан. І якщо цього умови раніше вірно, ми повернемося і зробити це знову. Таким чином, головна відмінність, де умова перевіряється для. І код ніколи не може бути виконується, якщо умова не вірно з той час циклу. У той час як з зроби час цикл, у нас є код що завжди виконується принаймні один раз. А потім, поки умова раніше вірно, ми можемо повернутися назад і повторювати знову всередині. Так чому ж ви думаєте, ми хотіли б використовувати Зроби той час як цикл протягом час циклу? Право. Так що, якщо ми хочемо, щоб спонукати Користувач протягом деякого роду вхід, якщо ми хочемо, щоб попросити їх ввести своє ім'я, ми хочемо, щоб, принаймні попросити їх один раз. І якщо вони введіть що ім'я, ми не збирається просити їх знову тому що ми вже знаємо це. Але якщо вони не входять їх ім'я, або, якщо вони введіть що-небудь очевидно, не ім'я, ми все ще хочемо, щоб продовжити з проханням протягом їхнього імені. Девід Малан: І в лекції у нас був один як це з позитивною отримати Int Наприклад, там, де немає нічого, щоб перевірити спочатку, тому що у вас немає навіть отримав листа Int. Таким чином, ми хочемо зробити this-- отримати Int від user-- а потім перевірити його, можливо, знову і знову, і знову. МАРІЯ: Точно. Для loops-- OK. Для петлі можуть дозволити нам робити майже точно така ж річ, як добре. Це насправді точно такий же річ. Таким чином, немає нічого, що ви можете зробити з петель для що ви не могли б робити з в той час як петлі. Але для петель може здатися трохи трохи більше ускладнюється синтаксично тому що вони мають три частини, що всередині було до просто стан з в той час як петлі. Таким чином, перша частина, що ви море, крайній ліворуч, у нас є "INT гноми = 0." Так що це, де ми ініціалізувати змінну. Тоді у нас є коми і "карлики <7." Так що це, де з стан насправді. Так що те, що ми б помістити тільки в той час loop-- "в той час як гноми <7." Тут, який йде в Середина наш цикл. Таким чином, "dwaves <7." І тоді наша остання частина "гноми ++," який є, де ми оновлюємо нашу змінну. Так важливої ​​речі щоб зрозуміти, що це буде йти через це цикл сім разів і виконати сім разів. Отже, ми маємо сім гноми, і всі вони хочу сказати, "Я тут, щоб допомогти вам, Білосніжка " тому що вони готові щоб допомогти Білосніжку. С, а петлі, ми б зробили ініціалізація і оновлення не всередині стану, знову, але або до, або всередині час циклу щоб переконатися, що через we-- ми завжди повинні ті частини. Таким чином, щоб переконатися, що у нас є їм, ми б досі додав їх , Просто не в круглих дужках. Девід Малан: І так це виглядає like-- У лекції, наприклад, Я майже завжди використовують, як, я і п і досить нудні змінні. Схоже, що ви можете використовувати більш спритно імені змінних, занадто. МАРІЯ: Так, це насправді дуже приємно використовувати трохи більш описові змінні тому що, особливо якщо хтось ще читати вашу code-- може бути, ви грейдер або якщо ви співпрацює з somebody-- Ви хочете, щоб переконатися, що вони зрозуміти, що ви робите. ДОБРЕ. Так що це щось дуже funky-- цикл всередині циклу для. Я не знаю, якщо ми бачили це раніше. Напевно, ні. Але ми можемо насправді мають this-- так петлі замість петель. Так хто-небудь, може, хочете, щоб ходити мені через що тут відбувається? Девід Малан: Я візьму удар. МАРІЯ: Прохолодний. Девід Малан: ОК. Так, spoiler-- ми хочемо надрукувати матеріал це в нижньому правому куті є. МАРІЯ: Вірно. Так Так. Девід Малан: Таким чином, ми просто покласти, що приклад виведення є. Так що я можу зробити висновок з верхній цикл, який ви перебору рядків у зовнішній контур, так сказати. І ви перебору колони з самого внутрішнього циклу. Й інтуїтивно, цей слід сподіватися, має сенс бо за своєю природою кожна програма, що ми бачили до, Printf, який є Функція ми використовуємо, в підсумку, має можливість друкувати матеріал , По суті, рядок за рядком. Мовляв, як тільки ви виводиться нова лінія, є немає подвоєння назад і щось роздрукувати вище на екрані, принаймні, не використовуючи Printf, як це. І так у цьому зв'язку, що робить відчуття, що зовнішній контур слід мати на увазі рядків так як для кожного даний рядок, Ви будете хотіти, щоб роздрукувати XXXXX, а потім перейти до наступного рядка, XXXXX. Так рядків в першу чергу. І потім протягом кожного ряд, друку стовпців. Якщо ви намагалися зробити це в навпаки, він, ймовірно, не таким, як ви маєте намір. МАРІЯ: Так. Ми просто не могли повернутися до попередній рядок з Printf. Девід Малан: І що цікаво за сьогодні поговорити про рамках, насправді, те, що ряд є INT який оголошений у верхній петлі. Але зверніть увагу, що досі всередині, так би мовити, фігурні дужки, що негайно випливає, хоча це технічно не в цих фігурних дужках. Так рядок в простір для Сукупність фрагменті коду, як усередині зовнішньої петлі для і всередині внутрішній цикл. Але на відміну від, де це стовпець у рамках? Мінлива колонка? Так, лише в всередині петлі. І це нормально, тому що ми не відкрити це за межами його у фігурні дужки. Все, що ми робимо це роздрукувати новий лінія в самому кінці там. Так що насправді все в порядку. Таким чином, це має ефект, як він виглядає, робити три ряди і чотири колонки. МАРІЯ: Вірно. Отже, спочатку ми йдемо через наш перший ряд. І тільки в нашій першій рядку, ми робимо чотири колони всередині першого рядка. Таким чином, ми роздрукувати чотирьох ікси. І тоді ми можемо вийти для циклу, так як ми вже надруковані чотирьох ікси. І ми друкуємо новий рядок. І тоді ми йдемо через Той же самий процес протягом ще двох рядків щоб в цілому три. Девід Малан: І варто зазначити, що це просто артефакт шрифту, то що вихід зразка здаються набагато вище, неначе там більше рядків, ніж стовпців. Але це тільки тому, що Х це вище, ніж в ширину. Це все, що там відбувається, плюс прогалину між рядками. МАРІЯ: Вірно. Прохолодний. Девід Малан: Гаразд. Таким чином, швидкий погляд на проблеми встановіть один, приймати будь-які питання, а потім відкласти? Добре. Таким чином, в один проблема встановити, є три Основними проблемами, в кінцевому рахунку ,. Але спочатку, ви знайдете що встановити проблема Специфікація, як і багатьох з них psets цієї осені, ходитиме вас через кілька розминок вправ, вказати вам кілька ресурсів що ви можете або не вужче бачили. Наприклад, CS50 має набір шорти, які є короткі відео, не в відміну від цього, але, що дуже тема specific-- може бути, п'ять хвилин, 10 хвилин в довжину на петлях або на умовах або на алгоритмах чи пізніше більш додаткові теми, а також. І ми, як правило вставляти ті, в завдання набори, так що студенти є ресурс, за допомогою якого розглянути матеріал, який може мати вже прийшли в лекції чи розділу. Але цей шлях, це більш цілеспрямованою і більше на кінчиках пальців. Ми також, як правило, для вбудовування в задачі встановлює речі, звані покрокові. Таким чином, практично всі приклади, які я роблю в лекції, на сцені тут, ми також розстріляли на камеру в сприяти більш повільніше, більш інтимний проходження мною на мій ноутбук з цього коду, рядок за рядком так що в класі, ми будемо часто побіжно то або когось буде вставляти з відповісти на запитання. Але це не обов'язково занурюватися в для всіх в аудиторії. Таким чином, ви знайдете код покрокові керівництва для більшості з прикладів що ми робимо тут, у лекції, так що ви може пройти через це в своєму власному темпі й перемотування назад або вперед або пропустити взагалі, якщо ви хотіли б. Там часто кілька розминка питання, які прошу вас розібратися в посилити цей матеріал і переконайтеся, що ви зручні, перш ніж Ви переходите з рештою PSET. І тоді, звичайно, Тобто сама PSET. І одна з речей, ми абсолютно свідомо зробити в CS50 майже кожен нецікаво або інтелектуально нецікавим механічна крок, який Ви, можливо, доведеться зробити майже завжди дуже добре документовані. Протягом терміну, ми будемо починають ставити риторичні запитання більш як пам'ятаю, як це зробити, або що? Але в цілому, ви знайдете що проблема набори отримаєте вас через механіки про щось, так що цікаві інтелектуальні виклики, в кінцевому рахунку, залишається вам студента. З урахуванням сказаного, Zamyla, яким ми продовжував на увазі сьогодні в лекції, є одним з наших давніх співробітників член, який також має покрокові керівництва на конкретних проблемах, таких як Маріо Pset і жадібний, хоча і не поливати в цьому році. І це в ті покрокові, що вона часто пропонує деякі поради та рекомендації для як вчинити, ніколи не говорю вам, саме те, що потрібно робити, але rather-- як стан, якщо ви will-- дає вам принаймні, пара ідей, так що до вас, У кінцевому рахунку, щоб вирішити, як підійти до їх. МАРІЯ: ніби як високий рівень розуміння того, що логіка ми просимо вас зробити. Девід Малан: Точно. І справді, Zamyla-х покрокові призначені відповісти на часто задається питання про те, де я почав, особливо коли ці довгі технічні характеристики трохи складною враховуючи весь текст і образи, які вони мають в них. Так water.c, ви знайдете після того як ви завершили його, насправді відносно проста. Абсолютно купа з вас збирається вдарити Ваші головою об стіну, намагаючись щоб з'ясувати, чому це не компіляції або чому він не працює правильно. Але як тільки ви закінчите з ним і як тільки ви провів деякий час боровся з будь-яким з помилок, які ви могли б мати, Ви знайдете, що це дуже коротка програма. Це може бути зроблено протягом кількох рядків коду, більшість з яких ми бачили тут, в лекції вже при ви зібрати правильні блоки. І, як ми припускаємо, тут, це буде запитати вказати, скільки хвилин хтось приймає душ на території кампуса. Ми вказуємо на проблеми встановити швидкість потоку води в, як, душем низької витрати голова, так само, як в кліпі Seinfeld ми бачили вчора або навпаки їх. І тоді ви просто повинні щоб зробити трохи математики, really-- арифметику за допомогою C сказати нам, як багато хто, приблизно, пляшки води що еквівалентно, якщо ми приймаючи н-хвилинний душ. Тепер, в mario.c, це буде бути трохи довше програми. Він як і раніше не буде так довго. Всього кілька рядків длиннее water.c. Але це буде можливість відтворити стару школу Маріо Піраміда з Super Mario Брати або деякі подальші на. Це не буде виглядати, як гарніше або як барвисті, як, що один там. Ми просто збираємося використовувати маленькі хештегі як у нас тут, на екрані використовуючи текст ASCII. Але це буде приблизно ту ж ідею. І це збирається бути здійснювати які на перший погляд здається досить просто simple-- надрукувати простий піраміди. Але є пара характеристики тут цікаві. Зверніть увагу, що в крайньому правому краю піраміда насправді має ширину два. Так що дві рівні висота колони, які робить його зажадає трохи трохи думки, щоб зробити що ви отримаєте, що саме право, а на відміну від просто прекрасно кутом лінія. Так що це трохи кутового випадку але відповідає реальному гру. І це також спочатку неочевидним погляд, як друкувати пробіли. Так що, коли я дивлюся на Приклад виведення here-- і це також в spec-- це вид виглядає як прямокутник, а діагоналі прямокутник відрубали, і це тільки прогалини, так сказати. І так часто задаються Питання тут завжди, добре, як я перемістити хештегі на правий? Або, як я роздрукувати прогалини? І це насправді простіше ніж більшість студентів думати. Вірно? Ви можете наблизити його візуально, просто натиснувши пробіл один або два рази або три рази. І навіть те, що з Printf ми майже завжди роздрукувати рядок або Int або слово, як "привіт, Мир "або серія слів, Ви також можете просто роздрукувати цитата, простір, кінець цитати. І що буде насправді дати Ви пробіл існує. Так що майте це на увазі і НЕ overthink це. Ви дійсно повинні вирішити, рядок за рядком у рядку, не в відміну від вашого Наприклад, Хвилину тому, як багато хто з тих, Стовпці повинні прогалини і скільки з них повинно бути Hashtags. Це займе трохи часу, але це в кінцевому рахунку, логічна головоломка в дусі. МАРІЯ: Так. Але логіка збирається рядок за рядком буде дуже корисно тут. Девід Малан: Так. Я думаю, що приклад коду ви gave-- навіть хоча це не було повною програмою. Ви все ще повинні INT і основний сили і #include stdio.h, багато матеріалу з лекції. Але будівельні блоки здається, щоб бути там. І тоді, нарешті, щось трохи більше алгоритмічне. Так що виходить, що будь-який час перейти в CVS або будь-який зручний магазин і хтось вручає вам на касир рахунку або монети, як зміна, Виявляється, що вони, люди, або не знають, що вони це чи ні, Ймовірно, ви використовуєте те, що називається жодній алгоритм, в результаті чого, якщо ви заборгували, скажімо, $ 21 у зміні, тому що з деяких причин Ви купили щось дуже недорогий з дуже великою рахунок в CVS, це було б дійсно дратує, якщо касир дав вам 21 синглів, або, гірше Тим не менш, в цілому багато монет. Швидше за все, те, що розумна людина ймовірно, зробити це вони збираються щоб захопити $ 20, а потім $ 1-рахунок, і вручити вам всього два рахунки в цьому випадку. МАРІЯ: Так вони прагнуть звести до мінімуму зміни, які вони дають вам назад. Девід Малан: Точно. І те ж саме справу з монетами, а також. Якщо ви заборгували, скажімо, $ 0,50, сподіваюся, ви не хочете 50 копійки. Ви замість цього хочете дві квартали, наприклад. Тепер, це робить припустити що касир достатньо кожній деномінації, які він чи вона, можливо, захочете, щоб дати вам. Але ми дозволяють припустити, стільки в задачі. І мета, в кінцевому рахунку, щоб реалізувати в C код жодній алгоритм. Таким чином, користувач може ввести, скільки змінити він або вона зобов'язаний з доларами і центів, свого роду плаваючою точкою Значення напевно. І тоді ви повинні зробити математику і з'ясувати алгоритмічно, ну, скільки монет я можу дати Ви мінімально дати вам саме така кількість змін. Але там буде Кілька Хитрість тут, вірно? Як є вся неточність питання. МАРІЯ: Точно. Так з плаваючою точкою значення мають похибку. Хіба ми говоримо про це в лекції сьогодні? Девід Малан: Ми зробили останній раз в лекції. Ми говорили про неточності. І ви не хочете, щоб обманути користувача про те, як багато змін він або вона повинен. І тому проходження в проблема встановити параметри, подумати, в кінцевому рахунку, щоб як ви можете пом'якшити ті неточність Помилки, потенційно. Це можна уникнути, звичайно, для входи, ми говоримо про. І справді, pennies-- може бути, ми відкласти до Zamyla, Я думаю, що для трюків там. Так в кінцевому рахунку, ви будете знайти прогресування проблем на цьому тижні, перший з яких досить невеликий, потім середній, потім трохи більше. Але всі вони використовують будівлі блоки з цього минулого тижня, з цього supersection, Проблема встановити параметри ставить вас на незліченних ресурсів. Але все-таки, якщо взагалі з усіх сил, особливо серед тих, менш комфортно без попереднього тлі, прийти до офісної годин в понеділок і вівторок і Середу і четвер. Перейти до CS50 Обговорити допомогою Сайт Курсу, через який ви можете спілкуватися з персоналом та однокурсників. Але в кінцевому рахунку, я думаю, що Кращий рада, просто рано. Це не вид класі, що ви повинні починати psets в середу ніч, або ще гірше в четвер ввечері. МАРІЯ: Мій кращий рада щоб почали в понеділок. Девід Малан: понеділок. Так що, якщо ви ще не почали already-- немає. Але навіть якщо не понеділок, то у вівторок. Чим раніше, тим краще. І це причина, по якій Звичайно є так багато пізніх днів щоб дати вам трохи психологічний тиск щоб почати раніше, але досі нехай речі ковзання, коли речі зайняти більше часу, ніж ви очікуєте. МАРІЯ: А ви хочете, щоб зробити використання Прийомні години стільки, скільки ви можете теж. Девід Малан: Є запитання? Добре. Ну, чому б нам не відкласти тут?