[Powered by Google Translate] David J. Малан: Все правильно, це CS50 і це
кінця тижня 1, так картами дослідження знаходяться, і загальне число
однокласникам, що у вас в цьому році 745.
І ми так раді мати настільки багато хто з вас у ході
в цьому семестрі, але навіть якщо це звичайно так велика,
розумію, що це такі речі, як обід п'ятниці, як
робочий час, 15-віч розділів, і так далі, що
насправді призначені для створення цього більш інтимним
навколишнього середовища.
Так що, хоча ми можемо збирати один або два рази на тиждень, тут, в
Сандерс, знаю, що у вас багато досвіду в цьому курсі
буде дуже сильно бути практичним разом на ваших однокласників
і викладацького складу.
>> Тому тут ми йдемо, осінь 2012 року.
Так Нагадаємо, що минулого разу ми закінчили на ноті
неточність, говорячи про представлення чисел.
І ми подивилися на одному з невдач, які сталися в
реальний світ, коли він прийшов до непорозуміння
як працюють комп'ютери.
Що ж, сьогодні ми знову одна з тих ідей,
а також продовжити наше обговорення CS50 клієнта
і С і що це означає насправді в програмі.
Але, по-перше, тільки кілька оголошень вихор.
>> Розділи починаються в це неділю, і в перший тиждень завжди
Трохи швидкий старт, тому що ми просто потрапили в
Ваші форми перерізу.
Ми робимо те ж, тепер, з вченням хлопці, тепер
що вони знають свій розклад, тому ми прагнемо, по
У суботу вранці, щоб стежити за вас з вашим розділі
призначення і TF.
Зрозумійте, що вони почнуть наступний день, в неділю
або в понеділок чи у вівторок.
І тоді ми будемо розмістити розділі зміни в міру їх виникнення
У дні.
Годинник, тим часом, знову сьогодні, 8 години вечора до 11, в
Annenberg, а також завтра ввечері.
Навіть незважаючи на проблеми набори, як правило, через, по четвергах
опівдні, розумію, у вас є до п'яти кінця днів, щоб витратити,
отже, наявність робочих годин, по четвергах, якщо
Вам готівкові гроші в одному з цих пізніх днів, і, таким чином, являє
щось на п'ятницю.
Дозвольте мені припустити, що до подряпин є одним з найбільш весело, серед
більш низький ключ безлічі проблем.
І я б повісити на тих, хто пізно днів, стратегічно, просто
для пізніше в семестр, коли життя починає заважати
з проміжних виборах та інших класів.
Проблема Set 1, тим часом, будуть розміщені на курси
сайт в цю п'ятницю, як буде на прогулянці курсу
за допомогою відео, яке буде знято в 2:30 вечора в п'ятницю
, А потім розміщені в Інтернеті на наступний день.
>> Таким чином, ми закінчили в понеділок.
Я хочу - насправді, один Відзначимо тут.
Оскільки класи - тому що Сандерс точно не надають
себе випадкові Q & взад і вперед страшенно добре, ми
збираюся спробувати щось нове в цьому році, в результаті чого
якщо вас не влаштовує піднімаючи руку, або ви просто
не хотів би підняти руку в кімнату, як це,
ми будемо мати деякі вчення стипендіатів та сертифікації
комплектуванню cs50.net/discuss під час лекції.
Так що якщо у вас є питання, тому що я був повністю
неясні про щось або вам цікаво, деякі
Тема, спробуйте відправити його туди.
Відзначити це з міткою лекція, і ми зробимо все можливе,
сьогодні і на наступному тижні - МИ спробувати це - в полі,
в електронному вигляді, через Інтернет або, якщо він відчуває, що ми повинні
насправді її вирішення в масовому порядку, один з хлопців навчання або
ЦС буде підняти руку і запитати
анонімно від вашого імені.
Таким чином, ми дамо цьому спробу і подивитися, як це працює.
Але, в будь-якому випадку, продовжувати піднімати руки, як би вам хотілося.
>> Таким чином, в минулий раз ми показали, що 10% або одну десяту не є,
Фактично, 0,1, як вас вчили багато років тому.
Це насправді значення, як це.
Але це не зовсім вірно, вірно?
Ми просто повинні це обмеження на комп'ютерах яких, якщо Ви
є тільки кінцеве кількість пам'яті, RAM, або більш
спеціально біт, а є тільки кінцеве число
речей, які ви можете представляти.
Наприклад, якщо у нас є нуль, і ми хочемо, щоб
представляють в двійковій, за допомогою восьми біт, де небагато,
Знову ж таки, це нуль або один, ми могли б
Представимо його у вигляді 00000000.
І це трохи зайве багатослівним.
Так само, як в десятковій системі в реальному світі,
Взагалі, якщо ви хочете написати номер 123, ми
люди, ймовірно, не пишіть 00000123 незважаючи на те,
функціонально, це точно такий же номер.
Ми тільки що падіння провідних нулів, так би мовити.
>> У двійковій, що ми можемо зробити те ж саме.
Подвійні і нуль, нуль і бінарні просто нуль.
Вам потрібно всього лише один біт.
Але, знову ж таки, найбільш поширеною одиницею виміру в світі
обчислювальні є байт, вісім біт.
Просто тому, що один біт, досить марно.
Вісім біт, не дуже корисно, але принаймні це більш
корисніше, ніж одна одиниця виміру.
Таким чином, з вісьма бітами, ми зазвичай являють собою бінарні.
Таким чином, тут ми маємо цифри нуль, один, два, а потім, як
Нейт зробив у нашому відео в минулу середу, ми можемо продовжувати
рахувати до семи, до восьми.
І потім, якщо ми використовуємо все більше і більше бітів, ми
може рахувати до нескінченності.
Але якщо у вас є тільки кінцеве число цих бітів, як
справа в будь комп'ютерній системі, або навіть ракети
Система, ну, дійсно, у вас є тільки
кінцеве кількість точності.
Тому якщо ви хочете, щоб представити число як 0,1, так,
Комп'ютер повинен вибирати.
І якщо він має тільки кінцеве число чисел воно може
уявляєте, він може наблизитися до 0,1 для вас, але воно не може
обов'язково дасть вам саме те, значення, яке ви хочете.
І це тільки одна з проблем, комп'ютери,
під капотом, на щастя.
>> Оскільки ми рухаємося далі в семестр, ці низькому рівні
Детальніше стали набагато менш цікаво, але, звичайно,
Застосування цих ідей може бути дуже реальним світом
наслідків.
Одним з них є трохи веселощів.
Як багато хто з вас бачили дивовижні Офісна площа фільм?
Якщо у вас немає, це ваше неофіційними
домашнє завдання на тиждень.
Але в офісні приміщення, хлопці в цьому фільмі беруть
Перевага саме цю ідею, але вони насправді вкрали
з іншого фільму, який ви могли б мати
видно, навіть попередніх років.
Отже, дозвольте мені дати вам кілька секунд цей трейлер з
цей дивовижний фільм, і це дуже багато
академічно актуальна.
>> [ГРАЄ ВІДЕО]
Насправді я заохочується.
Я можу запрограмувати вірус, який буде рип, що
місце у великого часу.
Ну, і як це працює?
Кожного разу, коли є угода, при якій банк інтерес
комп'ютерної, є тисячі в день, комп'ютер закінчується
з цими частками відсотка.
Але я не збираюся робити нічого протизаконного.
Незаконні? Самір, це Америка.
Ви повинні поклястися перед Богом.
Якщо ніхто не знає про це, але нас все в порядку? Немає сім'ї, немає
подруг, ніхто.
[Нерозбірливо].
Не хвилюйся, старий, я нікому не скажу теж.
[Фільм закінчується]
>> Гаразд, може бути, я знайшов цей фільм краще, ніж більшість
Люди тут, але в будь-якому випадку, вірус, що вони були
намагаються створити -
і в кіно, в будь-який час вони назвали б щось вірус,
це взагалі насправді не вірус.
Це просто програма, хтось написав щось робити.
І в цьому випадку, хлопці намагалися написати програму
, Які скористалися їх компанію під назвою Innotech в
обчислювальної системи, в якій комп'ютери теж, навіть якщо вона
Що стосується грошей, може не обов'язково
представляють грошей точно.
Тому, навіть якщо вам доведеться $ 0,10 на ваш банківський рахунок,
0.10, а, комп'ютер може насправді думаєте, що у вас є
це багато центів на ваш банківський рахунок.
І те, що ці хлопці прагнуть робити - і вони
вкрали ідею, виявляється, від Superman III, де
Річард Прайор зробив те ж саме - вони були по суті
написання програм, які прагнуть взяти все заднього
номери, всі маленькі, крихітні, крихітні частки
пенні, і сіфонірованія тих, у так, що люди просто
Думка, про, це всього лише $ 0,10 є, але всі ці
задній номер в кінцевому підсумку складаються.
Таким чином, чудова ідея, і вона мала неприємні наслідки весело в тому, що
конкретного фільму.
>> Але в реальному світі теж є набагато більше, що стосуються
Наслідки такого роду речі.
І одна з причин, щоб зануритися в області комп'ютерної
наука, знову ж таки, її застосовні не
інженерні науки в поодинці, але тільки
інших областях.
Так що це менш безтурботний погляд на те, що може піти не так, але
Це також досить очей відкриття, я думаю, коли справа доходить до
розуміння, як саме всюдисуща технологій, таких як
комп'ютерах та програмуванні або в ці дні,
у вигляді програмного забезпечення.
Так що наступний кліп всього лише близько шести хвилин, триває
, Де ми зупинилися минулого разу, але дозволяє нам виглядати трохи
більш докладно на одній з таких ці питання.
Дозвольте мені перейти до де ми зупинилися,
який був прямо тут.
І у нас є друга частина два, протягом приблизно шести хвилин тут.
>> [Дивитися ВІДЕО]
Чумної сучасної ракетної техніки.
У 1991 році, з початком першої війни в Перській затоці, Patriot
випробував ракету подібного роду
Проблема номер перетворення.
І в результаті, 20 осіб, 20 американських солдатів, були вбиті
і близько 100 поранені, коли Patriot, яка повинна була
для захисту від вхідних Скадів,
не змогли стріляти ракетами.
>> Коли Ірак вторгся в Кувейт і Америки почали пустелі
Буря на початку 1991 року, батареї Patriot ракети були
розгорнута для захисту Саудівської Аравії та Ізраїлю від іракських
Напади Скад ракети.
Patriot є американської середньої дальності земля-повітря системи,
виробництва компанії Raytheon.
Розмір перехоплювачів Patriot себе, а про
приблизно 20 метрів в довжину і важить близько 2000 фунтів.
І вона несе боєголовку приблизно - Я думаю, що це грубо
150 фунтів.
І боєголовки найвищою вибухова речовина, яка має
Фрагменти навколо нього.
Корпус боєголовки призначений діяти, як картеч.
Ракет проводяться чотири рази на контейнер і
транспортується напівпричепом.
>> Patriot системи ПРО сходить принаймні до
20 років.
Він був спочатку розроблений як ракети ППО
збивати ворожі літаки, в першій війні в Перській затоці.
При тому, що війна прийшли разом, армія хотіла використати його, щоб стріляти
Скад вниз, а не літаки.
Air іракських сил було не так багато проблем, але армія
турбувався про Скад.
І таким чином вони намагалися оновити Patriot.
Перехоплення ракети ворога подорож на MACH 5 збираюся
бути досить складним завданням.
Але коли Patriot була доставлена ​​в експлуатацію, армія
не було відомо про іракським модифікації, які зробили їх
Бокоплавов майже неможливо потрапити.
>> Справа в тому, Скад, які були
У найближчі була нестійкою.
Вони були биття.
Причиною цього було іракців, для того щоб отримати 600
кілометрів з 300 км дальність польоту ракети, взяв
Вага з передньої бойовою частиною і
зробив боєголовки легше.
Так що тепер Patriot намагається прийти в Scud, і більшість з
Час, в переважній більшості випадків, це було б
просто літають по вітру.
Після того, оператори Patriot Система реалізована Patriot
пропустив свою мету, вони підірвали Patriot боєголовки.
Щоб уникнути можливих жертв, було дозволено
падати на землю.
Це було те, що більшість людей бачили, як великі вогняні кулі в небі,
і не зрозумів, як перехоплення боєголовок Scud.
>> Хоча, в нічному небі, патріоти, здавалося,
успішно знищила Скадів, в Dhahran, не може бути
помилка про свою діяльність.
Там, радіолокаційна система Патріот втратив
входять Scud і ніколи не запущена через
з програмним забезпеченням недолік.
Це були ізраїльтяни, які вперше виявили, що чим довше
Система була, тим більше часу розбіжності стали,
у зв'язку з тактовою вбудований в комп'ютер системи.
Близько двох тижнів до трагедії в Dhahran,
Ізраїльтяни повідомили в міністерстві оборони, що
Система втрачав часу.
Після того, близько восьмої години роботи, вони помітили, що
Система стає помітно менш точним.
Міністерство оборони відповів, сказавши все
Patriot батареї, щоб не залишити систем
протягом довгого часу.
Вони ніколи не говорили, що довгий час було - 8:00, 10
годин, 1000 годин.
Ніхто не знав.
>> Patriot батарей, розміщених у казармах в Dhahran
і її недоліки внутрішні годинники були на більш ніж 100 годин
У ніч на 25 лютого.
Це гусеничні час з точністю близько однієї десятої частки секунди.
Тепер десята частина друга цікава число, тому що
вона не може бути виражена в двійковому, точно, це означає,
воно не може бути виражене саме в будь-яких
сучасний цифровий комп'ютер.
Важко в це повірити.
Але використовувати це як приклад.
>> Давайте кількість одну третину.
Одна третина не можуть бути виражені в десятковому, точно.
Третина 0,333 триває нескінченно.
Там немає способу зробити це з абсолютною точністю в десятковій системі.
Ось точно такі ж завдання, що відбулося в
Patriot.
Чим довше система працювала, тим гірше помилку часу стали.
Після 100 годин роботи, помилки в часі тільки
близько однієї третини секунди.
Але з точки зору орієнтації ракети подорож на MACH 5,
це призвело помилки стеження більше 600 метрів.
Було б фатальною помилкою для солдатів на Dhahran.
>> Справа в тому, запуск Scud був виявлений раннього попередження
супутників, і вони знали, що Скад йшов в їх
загальний напрямок.
Вони не знали, де він йшов.
Це було тепер до радара компонент Patriot
Система, захищаючи Dhahran, щоб знайти і відстежувати
наближається ракети противника.
Радар був дуже розумним.
Ви б насправді відстежувати положення Scud, а потім
передбачити, де він, імовірно, буде в наступний раз
радар направив імпульсний вихід.
Це називається діапазон воріт.
Потім, коли Patriot вирішує, пройшло вже достатньо часу, щоб піти
назад і перевірити наступну локацію для цього виявлених
Об'єкт, воно сходить.
Тому, коли він повернувся в неправильному місці, то не бачить
заперечувати, і він вирішить, що не було ніякого об'єкта.
Це було помилкове виявлення і падає трасі.
>> Вхідний Скад зникла з екрана радара.
І секунди потому, він врізався в казарми. Scud
загинули 28 і був останнім, хто звільнений протягом
час першої війни в Перській затоці.
До нещастя, оновлене програмне забезпечення прибув в Dhahran
на наступний день.
А недолік програмного забезпечення були встановлені, закриваючи одну главу в
неспокійної історії Patriot ракети.
PATRIOT насправді абревіатура від "Поетапне відстеження масиву
Перехоплення мети. "
>> Гаразд, набагато більш сумний результат не зовсім
розуміння цього світу.
І їжа на будинок, дійсно, з фільму в тому, що рішення
було перезавантажити систему протиракетної оборони
кожен раз в той час.
І так знову, одна з цілей цього курсу, звичайно,
на більш скромних масштабах, ніж ці програми, є
дійсно відкриті всі очі, як саме ви йдете з приводу
Машини робити те, що ви від них хочете і як ви йдете
Про робите, що правильно, а по дорозі роблять це
добре, елегантно, і так далі.
І тому сьогодні, давайте поринемо в ще трохи про це, але
так що ми не дуже швидко, особливо для тих, хто менш
зручно, але й так, що ми можемо зберегти інтерес
тим більш зручно, давайте просто швидко почати з невеликої
з резюме деяких з цих ідей.
І знову ж, запитаєте само, як в обличчя або в Інтернеті, якщо у вас є
питання, щоб ми могли тримати все на тій же сторінці.
>> Так CS50 Appliance, швидкий крок назад, є
що, у ваших власних слів?
Це нормально, якщо ви поняття не маєте, що ці слова можуть бути ще.
[Нерозбірливо]
Отже, універсальний інтерфейс для -
що всі ми можемо поділитися.
Абсолютно вірно.
Таким чином, ми могли б, наприклад, сказати вам, щоб піти на деякі
веб-сайт, завантажити програмне забезпечення для Mac OS.
Завантажити це програмне забезпечення для Windows, налаштувати в
і так і сяк.
Але реальність така, то ми стикаємося з незліченними технічними
підтримує питань.
А також в ці дні, багато чого з того, що робиться на стороні сервера,
У світі комп'ютерів, особливо коли справа доходить до
розробка сайтів та веб-додатків, насправді
досить часто робиться на Unix або Linux комп'ютерами, на відміну від
Маках або ПК з Windows.
>> Так серед розквитатися, то, за допомогою цієї речі, званої
CS50 прилад нам усім доведеться тому ж середовищі.
Так що все на тій же сторінці незалежно від того, яке обладнання
приїхали в кампус с, але і буде втручаються в точності
тих же умовах, що ви будете використовувати на
семестру кінця, а також для веб-розробки, а також в
майбутнє для реальних додатків їх.
Таким чином, більш конкретно, CS50 Appliance являє собою безкоштовний шматок
програмне забезпечення, яке дозволяє запускати інший операційної системи,
Linux, в даному випадку, на вашому власному комп'ютері, у вікні.
Тепер ви можете не тільки завантажити приладу.
Вам потрібна програма, з якою грати або працювати прилад.
І це частина програмного забезпечення, як правило, відомі як
гіпервізора.
Гіпервізора приходять у вигляді продуктів, таких як VMware,
Virtual Box, Parallels.
Всі види компаній роблять програмне забезпечення, як безкоштовні, так і
комерційних, так.
Те, що ви побачите в проблемі Set 1 наведені інструкції про те, як
отримати безкоштовне програмне забезпечення, з яким
запустити CS50 Appliance.
І як тільки ви це зробите, ви будете мати, у вікні на вашому Mac або ПК,
оточення робочого столу, яка виглядає зовсім як ця, де
вона має меню Пуск-як річ в
лівому нижньому кутку.
Він має головну папку або домашнього каталогу, в лівому верхньому
там, відро для сміття, і так далі.
Таким чином, ми будемо дражнити один від одного необхідні деталі, як ми йдемо.
>> А тепер давайте почнемо занурюватися в C.
Таким чином, C це мова програмування, близького за духом
Scratch, але набагато менше, графічний, але за іронією долі, далеко
більш потужний, як тільки ви отримаєте здорового глузду з ним.
Таким чином, в C, ми пишемо програми, написання вихідного коду, який є
це англійське-подібний синтаксис, схожий на шкарпетки
демонстрація того, що ми зробили в минулий раз, що дозволяє
виразити себе досить точно, якщо
arcanely, до комп'ютера.
>> Так який програмний продукт ви насправді потрібно
писати програми на мові, як C, на основі наших
Розмова в понеділок?
[Нерозбірливо]
OK, потрібно просто текстовий редактор.
Вам не потрібно ніякого спеціального програмного забезпечення
саме по собі для написання програм.
Вам просто потрібно текстовий редактор, наприклад Блокнот, на Windows,
TextEdit на Mac, або те, що називається Gedit, у світі
Linux, який ми будемо використовувати тут.
І це все, писати програми.
>> Але письмово це тільки половина рівняння.
Потім потрібно запустити їх.
Але для запуску програм -
ви не можете запустити вихідний код.
Ви, а не робити те, що йому в першу чергу?
Так.
David J. Малан: Ви повинні
скомпілювати його.
І хтось ще, компіляція вихідного коду означає -
[Нерозбірливо]
David J. Малан: Абсолютно вірно.
Переводячи його нулів і одиниць.
Тому що всі ми, в ці дні, є комп'ютери, які мають процесори,
майже всі з яких зроблені компанією під назвою Intel, і
Intel Inside, означає, що є цей мозок всередині вашого
комп'ютер, відомий як центральний процесор.
І одна з речей, що мозок робить, він знає,
як зрозуміти моделей з нулів та одиниць.
Він знає, що картина являє біти того, що
шаблон являє віднімання, що структура
біти представляють друку, а також створення чутний звук.
>> Коротше кажучи, процесор, у поєднанні з операційною системою,
, Яка є частиною програмного забезпечення, який працює на верхній частині процесора,
так сказати.
Разом, ці дві частини знають, як управляти програмами, які
ми, люди пишуть.
>> Так що, якщо я йду в CS50 Appliance тут, мені потрібно, щоб відкрити
до текстовий редактор, і я можу отримати доступ до цієї
Через пару способів.
Я можу або піти в меню програмування,
і тоді я можу вибрати -
Ні, не те, що меню.
Я можу піти в Аксесуари / Gedit тут, щоб відкрити
мій маленький текстовий редактор.
Або, простіше кажучи, я можу натиснути цю маленьку іконку в нижньому
лівому кутку.
І тепер я отримую цю середу тут.
Це дуже нагадує простий текстовий редактор, тільки з
один або два відмінності.
У верхній частині, де блимає курсор зараз, це де
Я можу почати писати свій код.
У нижній частині знаходиться те, що називається вікні терміналу.
І які речі я можу зробити в цій
так звані вікна терміналу?
[Нерозбірливо]
>> Гаразд, так що я буду виконувати команди.
І деякі з команд, ми побігли в понеділок були трохи
загадкові на перший, але Ls за список, компакт-диск для зміни каталогу,
RM, для видалення.
Так це ніби старої школи спосіб навігації по
комп'ютер, використовуючи тільки клавіатуру і текстових команд,
і, взагалі, за допомогою миші.
Але ми побачимо, що незабаром, це насправді дає нам
трохи більше потужності і трохи більше точності, з якою в
виразити себе.
І тоді тут, на лівому, ми просто побачимо,
як почати писати програмне забезпечення, трохи резюме
Програма, яку ми написали в лівому верхньому кутку.
Але ми побачимо, що знову скоро.
>> Отже, давайте щось робити досить просто.
Дозвольте мені спочатку йти вперед і перейдіть в меню Файл, Зберегти, і я просто
збираюся натиснути на jharvard тут, на зліва, і
jharvard, знову ж таки, назву для моєї домашньої папці, моя
особисті справи, я, в даний час Джон Гарвард, як всі ви
Скоро Джон Гарвард в цьому середовищі.
Він отримав це домашній каталог, Мої документи і так далі,
що я хочу зберегти, зараз, в цей файл дюйма
Так що я буду називати його hello.c. Тоді я піду
вперед і натисніть кнопку Зберегти, а тепер те, що я тут вкладці
називається hello.c, так як інший тип редактора.
>> Так що тепер дозвольте мені йти вперед і почати писати програму.
Int основних (недійсними).
А потім я просто в минулий раз, Printf, відформатовані для друку,
("Hello, World!"
).
Майже завершена.
Але мені не вистачає пару деталей.
Що відсутня в цій програмі, що мені дійсно потрібно для
це для компіляції?
Так.
[Нерозбірливо]?
>> David J. Малан: Так, так що мені потрібно включати в стандартну
Бібліотека введення / виводу.
Таким чином, це повинно піти вище основного, так що я тільки збираюся
зробити деякі можливості для цього є.
І я збираюся зробити # включити .
І зверніть увагу, кутові дужки там.
І як в сторону, Gedit трохи дружнім до користувача, якщо
Іноді трохи заплутаним, в тому, що вона намагається допомогти своєму
ока помітив, що на одній лінії з чим.
Тому той факт, що мій курсор знаходиться в безпосередній близькості від цієї кутовий
кронштейн, зверніть увагу, як він підкреслює інші кутові
Кронштейн плюс цього.
І це тільки звернути мою увагу на те, що я
є симетрія.
І симетрії в програмуванні, як правило, добре.
Аналогічно, якщо я перенести курсор в кінець, зверніть увагу, як
фігурні дужки лінію, щоб показати, що, так, у мене є відкрита
і закритим, так би мовити.
>> Все в порядку, і я можу зробити ще одну річ.
Це не обов'язково, але хороша практика, якщо не сказати
повертати 0.
І повернення 0 робить те, що для нас тут?
Або означає, що?
[Нерозбірливо]
David J. Малан: Але нічого не сталося.
І, чесно кажучи, це важко багато піти не так в
запрограмувати цю коротку.
Так що я просто супер бути чітко вказано, що все буде добре.
Я, людина, коли я запускаю цю програму, ймовірно, ніколи не
бачити, що 0.
Як правило, ці номери, які повертаються з основних
тільки піднімуть голови до людей, коли
щось іде не так.
І ви отримаєте трохи спливаючих кажучи системна помилка, один,
два, три, або незалежно від числа було те, що
була фактично повернута.
Так що нічого поганого в цьому?
[Нерозбірливо]
>> David J. Малан: Так що це не стільки функціональними помилку
але естетичний.
Я, ймовірно, слід покласти в символ нового рядка там в
Наприкінці цього рядка, так що ми насправді перемістити курсор на
Наступний рядок, і програма виглядає трохи красивішим.
>> Так що тепер дозвольте мені зійти у вікні терміналу
і збільшити масштаб
І ця річ тут, це називається командному рядку.
Він просто нагадав мені, хто я, jharvard @ прилад, де
Прилад ім'я комп'ютера, я на.
У дужках це тильда, тильда символ, який
представляє те, що?
АУДИТОРІЯ: Головна каталогу.
David J. Малан: Головна каталогу.
Так що це просто скорочене позначення для говорю, що ви перебуваєте в
Ваші особисті папки, в якій всі файли йдуть за замовчуванням.
Так що тепер, тут, я можу набрати Ls за список.
І єдине, що я тут бачу на даний момент є hello.c.
І це добре, тому що я тільки що написав.
>> Отже, дозвольте мені йти вперед і робимо привіт.
І зауважте, я не вводити зробити hello.c.
Замість цього, я набравши тільки базове ім'я файлу, привіт.
І зробити, як ми бачили в понеділок, буде просто зробити висновок, що я хочу
. Із файлом.
Так що тепер я набрав зробити привіт.
Тепер я розумію, це досить довгу команду і буде продовжуватися
Побачивши це знову і знову.
Але щоб бути ясно, брязкіт, слово, яке щойно з'явився,
це фактично компілятор.
Зробити це просто Утиліта збирання.
Це просто більш зручним для користувача програма, яка економить мені, в
кінцевому рахунку, від того, щоб вводити неймовірно утомливо довго
команди, як цей.
Таким чином, ви можете запустити Clang вручну.
Ви могли б ввести все це вручну.
Просто стає дуже виснажливим.
І зробити це просто програма, яка спрощує наше життя і
працює більш складних команд для нас.
>> Гаразд, так що тепер, який файл я повинен
У моєму поточному каталозі?
Не тільки hello.c, але і привіт.
Так що, якщо я хочу запустити привіт, нагадаємо, що я кажу, точка слеш,
де точка означає йти в поточній папці, де б ви не
є, а потім запустити програму під назвою привіт, та й взагалі, зараз,
У мене привіт світ.
Гаразд, будь-які питання про робочий процес або синтаксису
те, що ми тільки що зробили?
>> Гаразд, давайте речі на сходинку вище ще раз.
Так що це був захват просто написати програму, яка тільки
ніколи не говорить привіт, світ.
Таким чином, ми змінили його, в понеділок, якщо не сказати, привіт, Девід.
Це трохи більш особистим, але так само жорстко, як
Перша версія.
Так що не все так переконливо.
Але існує і в C, функції, крім, звичайно,
друк, функції, які дозволять вам отримати користувача введення.
І те, як ми зробили це, днями, був наступним.
Перш, ніж я насправді роздрукувати щось, я вперше отримав
щось від користувача.
Отже, дозвольте мені зробити це знову.
>> Струнний с, де с просто довільне ім'я, тут,
Рядок, одно GetString.
Так що GetString?
Це, очевидно, отримує рядок, засновану на його ім'я.
Але що це таке, більш технічно?
Це функція.
Так що це функції, які не поставляються з C такої.
CS50 співробітники написав.
І так, щоб використовувати це, ви не можете просто включити stdio.h,
Крім того, необхідно включити і що?
Так.
Так cs50.h, який знаходиться всього в файл ми писали кілька років тому.
Ми встановили його на пристрій для вас разом з
всі стандартні файли.
І ось в ці перші кілька тижнів класі, ми будемо використовувати
це тільки, щоб спростити процес робить дуже простий
такі речі, як отримання користувачем.
Тому що, як ми побачимо через кілька тижнів, отримати користувача введення в
мову, як C насправді дивно складним,
Особливо тому, що ви не знаєте заздалегідь, як правило, як
багато речей, користувач збирається ввести дюйма
І коли ви не знаєте, як багато даних, щоб очікувати, ви не
дізнатися, скільки пам'яті виділити.
І якщо у вас дійсно є змагальність користувач, який намагається
для злому вашої системи, збій комп'ютера, ну,
як правило, перший метод атаки, так само, як я зробив на
Понеділок, введіть цілу довгу послідовність випадкових символів,
Введіть удар, і подивитися, що ламається.
Бо зазвичай, якщо програма перерви, що натякає на
недолік безпеки, потенційно.
Це, звичайно, натякає на вас, програміст, зробивши
помилкою, але що більш небезпечно, ви могли б зробити
пов'язаних з безпекою помилки, і взагалі, ми побачимо, що
Ось як машини опиняються під загрозою і донині, як
У світі Інтернету і програм на
командного рядка, як це.
>> Добре.
Таким чином, рядок з рівним GetString.
Таким чином, тепер більш конкретно, що ж рядку 6 тут робити?
Таким чином, функція в правій отримує рядок,
бере, скільки аргументів?
Добре.
Таким чином, немає.
Трохи санітарної перевірки.
Аргумент, знову ж таки, це всього лише вхід у функцію для зміни
її поведінку за замовчуванням в деякому роді.
Але в цьому випадку, я не хочу, щоб змінити
Поведінка GetString.
Я просто хотів, щоб отримати рядок.
Тому я ставлю нічого в дужках, а потім я поклав
коми демаркації кінці рядка коду.
Тепер, знак рівності не означає, рівного, як такої.
Це означає, завдання, яке означає, покласти все, що отримує
виводитися на правому всередину все, що знаходиться зліва.
>> Таким чином, на лівій стороні, ми говоримо, що ми оголосили
Рядок називається с.
І більш конкретно, ми виділеної пам'яті всередині
які ми будемо ставити біт, який являє собою послідовність
символи.
Але на сьогоднішній день ми виділили
або оголошені рядок.
Добре.
Так що тепер, як тільки я зробив це, я хочу підключити значення
и, а не значення Давида.
Так що це неправильно, чому?
Так що це просто буквально жорстко с.
Це, щоб сказати "привіт, з", який є не те, що я хочу.
Таким чином, я можу це зробити.
Знак відсотка є прототипом, але зараз мені потрібно
Проходимо в друк другий аргумент.
Нагадаємо, що аргументи функцій відокремлюються
ком, тому наступного коми тут я ставлю після цього листа с.
І в цьому контексті зараз, а є змінною, і Printf,
Після отримання цих двох входів -
Рядок зліва і змінної ім'я праворуч -
вона буде підключити останнього в колишня для нас, і
просто роздрукувати хороша красива рядок, що містить
все це, що ми ввели дюйма
>> Так давайте спробуємо це.
Збираюся йти вперед і зменшення масштабу, спини
у вікні терміналу.
Огляньте в нижній тут.
Повторіть зробити привіт.
Clang, здається, були повторно.
Я збираюся ввести. / Привіт, Enter.
Ніщо, здається, відбувається ще немає, але це в цьому рядку
що я можу ввести щось на зразок Nate, Enter, і тепер ми маємо
Привіт, Нейт.
І я можу зробити це знову з Робом, і так далі.
Так що, сподіваюся, тепер ця програма веде себе, як я маю намір.
>> Тепер, не все, що зручно для користувача.
Я не знаю, що час від мене очікували.
Таким чином, ми, безумовно, може очистити це небагато.
Дозвольте мені повернутися сюди, і замість того, щоб просто занурення в і
задаючи користувачеві для рядка, дозвольте мені явно вказати
Користувач те, що я очікував.
Таким чином, Е ("Введіть рядок:"
);
Так немає змінних тут.
Немає знаки відсотка.
Просто простий англійської фрази.
Дозвольте мені тепер йти на дно тут і повторіть мою програму.
Але нічого, здається, не змінилося.
Чому?
Я повинен перекомпілювати його.
Так легко зробити помилку.
Але ви повинні не тільки зберегти файл, але
перекомпілювати програму.
І тому, якщо я повторно запустити зробити привіт, тепер Clang працює.
Тепер я можу запустити. / Привіт. І тепер я бачу "Введіть рядок:".
Добре.
Тепер це трохи більш зручним.
Nate, введіть, привіт, Нейт.
>> Ну, давайте спробуємо це знову і почати думати
Про кутку випадках.
Так само, як в Scratch, ви закликали або знаходяться в стадії
рекомендується в специфікації до виду думаю про те, що може піти
так, якщо ви не очікуєте все, що користувач може робити.
Помилки, отже, може наступити.
Так введіть рядок -
Що кутку даному випадку?
Що таке сценарій, який я, програміст, не можуть мати
очікується?
Так.
Добре.
Так що, якщо я набираю в ряд, як це?
Добре.
Так що він все ще працює.
Gramatically не має сенсу.
Але принаймні працює програма.
>> Що іншому кутку випадку?
Щось я не очікував.
Так?
Добре.
Так що ми могли б зробити щось подібне дуже, дуже велике число.
Так давайте зробимо це тут.
Дозвольте мені зменшити на секунду, дозвольте мені зупинитися.
Не вдається скопіювати і вставити сюди.
Добре.
Тому я не можу копіювати і вставляти в цьому вікні терміналу, тому ми будемо
тільки його імітації.
Дозвольте мені зменшити масштаб, збирався завернути.
Я не збираюся робити це занадто довго, тому що воно не буде
насправді зламати в цій програмі.
Але це може відбутися.
Enter.
Але це не так.
Добре.
Але це справжній випадок кутку.
І тільки тому, що вели себе коректно, так
говорити, тому, що CS50 функції GetString насправді
розроблений під капотом, як ми побачимо протягом декількох тижнів,
автоматично виділяти все більше і більше пам'яті, більше і більше
пам'ять від операційної системи, коли вона розуміє, нічого собі,
Ви дійсно набрав в чомусь досить довго.
Тепер, це трохи білої брехнею.
Якщо ми дійсно зупинився на деякий час, і я набрав в
щось на зразок 5000000000 символів на клавіатурі
тут, або дійсно потрапив копіювати-вставити зовсім небагато, ми, цілком можливо,
може призвести до аварійного завершення програми.
Просто трохи важче симулювати, що з кінцевою
кількість часу.
>> Що іншому кутку випадку ми могли б спробувати?
Так?
Так.
Так чому б нам не відповісти нічого?
Таким чином, ми насправді потрібно почати деякі дії, тому що інакше
Програма збирається сидіти там блимає протягом всього дня.
Але якщо я просто натисніть Enter -
Добре, тепер, як і раніше виглядає так.
Не крах, але, можливо, є тепер можливість
приступити до реалізації більш суворої програми
що насправді перевіряє.
І якщо рядок, речення, слово, яке Я
набрав в має довжину 0, а, може бути, я повинен кричати на
користувача, або сказати йому або їй ввести рядок ще раз, щоб
ми насправді отримати те, що виглядає як правильна поведінка, а не
просто повний контроль з мого боку.
>> Питання в спині?
Десяткове число.
Таким чином, ми могли б спробувати це.
1,10000005.
Схоже, що збирається просто працювати насправді все гаразд.
І що насправді не очікується.
Хоча ми могли б набрав цей номер там, або
більшого числа раніше, розуміють, що коли ми вводимо користувача
вхідного і ми використовуємо GetString функції, не
справа, якщо те, що я друкую виглядає як число.
Нагадаємо, що відповідно до ASCII, всі на ваш
Клавіатура має числове значення, яке може бути зіставлений з
характеру, символ.
Таким чином, в даному випадку, хоча я б ввести число,
комп'ютер буде думати про це, так би мовити, у вигляді рядка -
те, що виглядає як число, але
насправді не число.
Але що насправді ідеальний перехід, тому що тепер ми можемо
насправді перехід до написання програм, які
використовувати інші типи даних.
>> Таким чином, крім використання символів, або, скоріше, крім використання рядків,
розумію, що у нас є інші типи даних в C, а також в
інші мови.
Символ, як випливає з назви, це всього лише один символ.
Поплавок значення з плаваючою точкою, і це тільки фантазії
спосіб сказати, що дійсне число - те, що має десяткову
точка в ньому з деяким числа зліва і / або праворуч.
Int є цілим числом, яке є просто число, наприклад 123.
А тепер ще цікавіше такі речі, як подвійні.
Що ми говоримо подвійного було в останній раз?
Це 64, праворуч.
Таким чином, у той час як зазвичай обігу знаходиться 32-розрядний -
так що це довго в пам'яті, вона використовує 32 нулів і одиниць в
представляти значення - подвійний буквально в два рази, що
означає, що ви можете представляти великі числа, або
Ви можете уявити більш точні цифри.
Таким чином, ви можете мати більше цифри після десяткової крапки, але
як хлопець сказав у відео, навіть щось просте
Концептуально, як 1/3 не може бути представлено саме
комп'ютер, тому що в кінцевому підсумку ви біжите з бітів, і
Тому ви можете зробити тільки .33333333 так багато разів, в
який момент ви просто повинні сказати, що я з вистави
просторі, я повинен назвати його просто день і представляти її
дещо неточно подобається.
І довго довго -
дурне ім'я, але це тому, що є тип даних, відомий як
довго в С, який випадково часто 32 біт, так само, як
Int становить 32 біта, але довго довго
зазвичай 64 біт.
Так що це просто означає, що ви можете представляти велику
кількості, ніж це.
>> Добре.
Так що, якщо ми дійсно хочемо, щоб почати представляють речі, ми
може знадобитися більш складні типи, і
Ось чому ми маємо рядок.
Таким чином, в бібліотеці CS50, що файл з ім'ям cs50.h, ми
фактично оголошений тип даних, так би мовити, називається рядком,
але рядок не існує.
Це, знову ж таки, один з цих верств ми збираємося чистити
через тиждень або два, і викинути, а насправді
дивитися під капотом на те, що рядок насправді, і
як це представляється.
Ми також будемо дивитися на логічних значень.
>> Так що ж логічне в контексті нуля?
Це правда чи брехня.
Так що це просто значення, правда це чи брехня, або вимкнути, 1 або
0, однак, ви хочете, щоб побачити світ.
Таким чином, в C, завдяки CS50 бібліотека, яка в свою чергу
включає в себе іншу бібліотеку під капотом, у нас є
доступ до даних типу, який називається логічний, який буде
буквально дозволяє нам привласнити значення істина чи брехня в
речі в програмі.
>> Так що давайте йти вперед тут і написати невелику програму, яка
щось робить за участю номери замість.
Отже, дозвольте мені повернутися до CS50 Appliance, дозвольте мені йти вперед і
створити новий файл тут називають -
Давайте просто скажемо, щось просте, як math.c.
Добре.
А тепер підійдіть до верхньої частини моїй програмі, я
збираюся робити звичайні -
# Включити , так що я можу використовувати
Printf, Int основних (недійсними) -
Ми повернемося до, врешті-решт, те, що Int означає,
тут, що порожнеча означає тут, але зараз, просто знаю, що
Ви повинні почати подібні програми.
Тепер я збираюся йти вперед і сказати що-небудь
інша - Е ("Дай мені номер:"
).
Тоді я буду робити Int N = GetInt, тому що вона
виявляється GetInt інша функція в бібліотеці CS50
Крім того GetString.
А зараз я збираюся зробити щось дурне, як "спасибі
для% D ", для десяткове число, а потім кома п,
Потім повертається 0.
Таким чином, знову повертається 0 не має нічого спільного з числом я
запросити у користувача.
Просто означає, врешті, що всі, мабуть, добре.
>> Отже, дозвольте мені зійти у вікні терміналу тут.
Дозвольте мені ввести зробити математику, введіть.
І щось не так.
Зробити математика не працює.
Ось перший з наших повідомлень про помилки.
Чому?
Трохи загадковим, але -
Так.
Так cs50.h.
Отже, ще раз, особливо на ранній стадії, ви будете писати ваш перший
Програма для PSET 1 в секції, в робочий час, і
чесно кажучи, це буде переважною іноді те, що ці речі
насправді говорять.
Але ви зрозумієте, дуже швидко вони починають падати
у відра якої ця означає, що ви залишили від одного
з # включає в верхній частині файлу.
І Clang, компілятор, інформує Вас про це по
говорив, а химерно, неявне оголошення
Функція GetInt є недійсним.
>> Добре.
Так що ж це значить?
Це просто означає, що ви неявно оголошені в GetInt
тому сенсі, що ви явно не оголошена.
Для заявляємо, INT, ви повинні вчити
Clang, що вона існує.
І дуже просте рішення для того, щоб навчити його,
в тому числі це інший файл, cs50.h, в
у верхній частині файлу.
Тому що буквально те, що # включити Чи це говорить Clang
в значній мірі, щоб піти знайти файл з ім'ям cs50.h, копіювати,
вставте його автоматично в верхній частині моєї програмі для мене,
, А потім перетворити вихідний код нулів і одиниць.
Але це, очевидно, буде дуже утомливо, якщо ми, люди, були
йти копіювання і вставки цих великих файлів весь час,
# Включити так просто робить все, що автоматично, без
каламутить мій код з чужою бібліотеки.
А бібліотека це просто ще один файл, що містить функції та
інші речі, які хтось написав, що ми
Використовуючи для нашого власного блага.
>> Добре.
Давайте спробуємо ще раз.
Зробіть математику.
Enter.
Добре.
Так що, схоже, працював.
Отже, дозвольте мені тепер працювати математики; /. Математиці.
Введіть дає мені номер 123.
Спасибі за 123.
Тепер давайте спробуємо інший кут випадок.
Рядок досить щедрий, тому що
Рядок може бути що завгодно.
Може виглядати цифри, виглядати
символи, схожі на слова.
Але це Int Int.
Так що тепер, якщо я важко користувачів, і вона говорить "Дай мені
число, "що, якщо я намагаюся зробити щось подібне 0,1?
Ну, це число, і це узгоджується з
граматику я тут, але під капотом, я з
Звичайно, використовуючи функцію GetInt.
>> Отже, давайте подивимося, що станеться.
Введіть, повторіть спробу.
Добре.
Дозвольте мені бути складно і просто натисніть Enter ще раз.
Enter, Enter.
Так що тепер здається, що GetInt трохи більше
могутніше, ніж GetString.
Ми, співробітники, реалізований таким чином, що якщо ми помічаємо,
Ви не дали нам Int - і Int є десяткове число
містять нулів, одиниць, двійок, трійок, четвірок, п'ятірок, шестірок,
сімок, вісімок або дев'яток.
І це все.
Немає знаків після коми, не символи, не розділові знаки.
Здається, що ми повинні співпрацювати.
Отже, дозвольте мені спробувати чотири, п'ять, шість, і це допомагає мені.
Таким чином, дійсно, бути анальний тут, я, ймовірно, слід сказати: "Дайте мені
число "для того, щоб донести до користувачів
саме те, що я маю намір.
>> Тепер давайте подумаємо, під капотом.
Ми не збираємося подивитися, як cs50.h реалізується сьогодні,
цієї бібліотеки.
Але якщо він продовжує говорити повтор, повтор, повтор, що програмування
Побудуємо я імовірно використання під капотом, щоб
здійснення цього?
Так що просто цикл, чи не так?
Один з найпростіших ідей, які ми бачили на Scratch.
Назавжди побудувати, повтор побудувати.
Імовірно, в цю програму, під капотом, навіть
хоча вона написана на C, а не нуля, він робить
те, що називається еквівалентною назавжди, якщо користувач не має
набрав у ціле число, скажімо, спробувати ще раз, повторити, повторити, повторити, так
Потім, нарешті, коли ми отримаємо ціле, то ви
вирватися з цього циклу.
>> Так що ж інші функції ми можемо використовувати тут, в бібліотеці CS50 в?
Ну, начебто очевидні, принаймні на основі
типи даних, які ми тепер знаємо, існують.
Ми реалізували GetString, GetInt, але і у всьому
Перші тижні терміну, ви також можете використовувати GetFloat і
GetDouble і GetLongLong того, щоб отримати саме
типи даних, які ви хочете.
Оскільки ключовою деталлю є те, що на відміну від деяких мов,
як Python і Ruby, де ви не обов'язково повинні
оголошувати тип даних змінної -
Вам не потрібно говорити комп'ютеру, який матеріал
Ви збираєтеся помістити в змінну -
У C, ви повинні бути дуже точним.
Тому якщо ви хочете змінна п, шматок зберігання
що в цьому випадку відбувається з 32 бітами відповідно до угоди, Ви
повинні повідомити комп'ютера, що ці біти
збираєтеся зберігати номер -
Не характер, а не рядком, а не з плаваючою крапкою.
І це вирішує проблему, ми ефективно
зіткнувся минулого тижня.
Якщо ми використовуємо нулів і одиниць чисел, щоб представити не тільки
числа, але як і сніданок і Cs, як в світі
комп'ютер буде знати, що ця картина біт насправді
являє собою число 65, на відміну від представляє
Лист, який випадково, у відповідності з
ASCII, нагадаємо, була еквівалентна 65?
>> Таким чином, ці типи даних надають контекст для комп'ютера, так
що він знає, що якщо ці біти слід інтерпретувати як
INT або у вигляді рядка.
Будь-які питання, то з цього приводу?
Так?
David J. Малан: Хороше питання.
Якщо ми візьмемо з stdio.h, ми зберігаємо файл -
Дозвольте мені спуститися у вікно терміналу і запустіть зробити математику, масштабу
В і введіть -
Зараз я отримую іншу помилку, тому що я неявно
оголосивши, що працювати тепер?
Printf.
Так що тепер я створив нові проблеми, вирішення яких
по суті те ж саме.
Мені потрібно поставити назад.
АУДИТОРІЯ: [нерозбірливо]
David J. Малан: Так.
Так що, якщо я виймаю -
Добре, да.
Так що, якщо я видалю включення стандартної бібліотеки вводу / виводу в до
тут, а потім ви говорите, якщо я можу позбутися від Printf, отримати
позбутися Printf?
Так.
Це повинно працювати, тому що я більше не використовують будь - вигуки.
Я тільки брехати?
Ну, гаразд.
Це не буде працювати через нову помилки ми тільки що представив.
І це одна трохи більше пояснень.
>> У чому проблема?
Невживані змінні с.
Таким чином, ця помилка є результатом того, наші налаштований
Прилад бути особливо педантичним, щоб дійсно кричати на
Ви для кожної можливої ​​помилки, навіть якщо це частково
не-рокову помилку, як це - чи дійсно це така велика
справа, що я виділив INT, поставив ряд у ньому, а потім
просто нічого не робили з ним?
Таким чином, функціонально, немає.
Це не зламає програму.
Це просто якась дурна, так?
Існує ніякої цінності для попросивши для цього номера, збережені
його в змінну, якщо ви ніколи не збирався робити нічого
з ним, будь то роздрукувати його або зберегти його.
Таким чином, в даному випадку, Clang визнає, стільки ж, а
це говорить невикористаних змінних п.
>> Таким чином, ми можемо виправити це, якщо ми дійсно хочемо.
Але знову ж таки, це не добре програмування зараз.
Так що я просто міг цього зробити -
Спустіться тут, дозвольте мені очистити екран, зробити математику.
Це працює.
Тепер я можу запустити мою програму математику, приймає вхід -
добре, що було погано.
Приймає вхід, і це все, що він робить, і в цьому випадку.
>> Таким чином, насправді, давайте спробуємо ще один випадок кутку, що ми
не думаю раніше.
В даному випадку - тут, давайте повернемося до того, що це
трохи більш зручним.
Дозвольте мені повернутися сюди і зробити математику запустити знову.
Ой, що ж я зробив не так?
Добрався, щоб повернутися в подальшому.
Добре.
Тепер ми повернулися в початковий стан, в якому всі
ми сподіваємося добре.
І тепер, якщо я біжу математиці, 123, здається, працює.
Але це не дуже ефективний докази, щоб просто сказати
Добре, що працює.
789, яка працює.
Час представити.
Тому що є інші випадки кута тут.
Рядок дійсно не дають нам багато неприємностей, ввівши в
багато символів.
Але що, якщо я набираю в цьому?
Удар № 1 багато, багато тут -
Все в порядку, це стає трохи нудно, тому я збираюся
зупиніться тут, і я вдарю Enter.
>> Якого біса це було?
Так що це дійсно може бути пояснено.
Так що ж це взяти його в двійковому вигляді?
Хороша думка, але ні, це не те, що він узяв його
в двійковому вигляді, тому що, дійсно, це була просто якась
збігом.
Ми можемо зробити це знову.
Так що № 2 в двійковій системі, це
ймовірно, досить у будь-якому випадку.
Enter.
Так що це не проблема.
Що ще?
Саме так.
>> Так що думаю до того, що Int насправді.
Це 32 біт, які в сукупності інтерпретується
як число.
Якщо у вас є 32 біт, це означає, що кожен з бітів може бути
0 або 1, 0 або 1.
Значить, є дві можливості для цього небагато,
дві можливості для цього дві можливості для цього
небагато - так що в 2 рази 2 рази -
так що це від 2 до 32 харчування від загального числа
перестановок з нулів і одиниць, якщо у вас є 32
заповнювачів, нулів або одиниць, перед вами.
Так що, якщо у мене є 2 до 32, математично, це що?
Так що це дуже багато.
Це 4 млрд, плюс-мінус.
І 4 млрд не здається, те, що було надруковано тут.
Насправді, це виглядає ближче до 2 млрд. доларів.
Але і це не випадково.
Справа в тому, що комп'ютер неправильно моє величезна кількість,
мій величезний послідовності, а потім і моя величезна послідовність двоє,
як приблизно 2 мільярди, пояснюється як?
Там є кришка на Int.
Там є, звичайно, максимальне значення, яке можна уявити.
Але це, як правило, 4 млрд, чи не так?
Якщо від 2 до 32, приблизно в 4 мільярди доларів, що здається
це найбільше число.
Так що не останні, але гарна думка.
Негативні числа.
Так що якщо у вас є 4 мільярдів можливих речей, які ви можете
представляють ці різні перестановки з 32 0 і
1s, ну, само собою зрозуміло, що ми, люди, можливо, захочете
являють собою не тільки позитивні цілі числа
але негативні цілі числа.
І справді, це припущення, що C робить.
Таким чином, з 32 бітами, можна представити приблизно негативний 2
млрд. весь шлях до позитивного 2 мільярди доларів.
І тому в даному випадку, те, що ми дійсно бачимо, це просто
бахрома здатність нашого цілого, і в нас є, так що
сказати, переповнені ціле.
Ми спробували втиснути більше бітів в ньому, чим може насправді підходить.
Таким чином, кінцевий результат нас по суті є всі 1 біт.
Ми перевернув всі наші біти, ми намагалися представити
Найбільша кількість можливих, але це явно не майже
досить великий, щоб представляти дві речі, які я тільки що ввели дюйма
Так?
АУДИТОРІЯ: [нерозбірливо]
>> David J. Малан: Хороше питання.
Чому ми не можемо просто уявляти, що негативні
підписати, як тільки персонаж?
Таким чином, ми абсолютно міг, і ми могли б зберегти
додаткових біт.
Але ви як і раніше будете мати, щоб уявляти, що тире і
що буде коштувати вам хоч щось,
Імовірно небагато.
Так що, так, ми могли б мати 32 біт, що використовуються для нашого номера, але тепер
нам потрібен ще трохи для наших тире
символ, знак мінус.
Так що тепер у нас 33 бітні значення, які ми могли б зробити, але це
тільки не так, як це робиться.
Ми зробили дзвінок судження років тому, 32 біт є свого роду
Одиницею виміру тут.
Так що ми збираємося використовувати один з цих бітів ефективно
представляють негативу, і 31 біт для представлення числа.
Інші питання?
Добре.
Це дуже багато.
Чому б нам не піти далі і взяти наші п'ятихвилинну перерву тут?
>> Добре.
Отже, ще раз, щоб не переоцінити математичних додатків
програмування, давайте просто обривати цей приклад
перш ніж ми перейдемо до інших конструкцій, тільки тому, що
Проілюструємо кілька загальних каменем точок на деяких з
Основи коли справа доходить до написання програм.
У цьому випадку, робити арифметичні вирази, які мають деякі
цікаве ставлення до синтаксису.
>> Так що це просто формула, з якою ми можемо перетворити
температури за шкалою Фаренгейта в градуси Цельсія.
Якщо ви не пам'ятаєте, це всього лише формула.
Тому, якщо ми підключити за Фаренгейтом значення 32 градусів, що
заморожування, що це буде 32 мінус 32 дорівнює 0, і, дійсно,
0 в Цельсія також заморожування.
Так швидко перевірити осудність є - це відома формула.
Дозвольте мені перейти до приладу, хоч і почати
написання програми під назвою, як, f2c; "Фаренгейта в
Цельсія точка C ".
А нагорі тут, я збираюся почати з # включити
stdio.h, і я збираюся зробити Int основних (недійсними), а
Знову ж таки, ми повернемося в майбутньому до того, що Int означає,
там і що порожнеча означає, що є.
А тепер дозвольте мені піти далі і реалізувати програми, які
по суті робить це перетворення для нас.
>> Так Printf, скажімо, температуру в градусах за Фаренгейтом.
І то дозвольте мені йти вперед і отримати значення від користувача.
Яке значення я повинен отримати від користувача, якщо я хочу
їх дати мені температуру в градусах за Фаренгейтом?
Так?
Що ви могли б запропонувати?
Так.
Таким чином, поплавець відчуває себе досить розумно.
У нас є, знову ж таки, тільки кілька варіантів, які
ми бачили дотепер.
У нас є такі речі, як символ, двомісний, з плаваючою точкою, INT, довго довго,
BOOL, рядок.
Таким чином, ці, плавати відчуває себе досить розумно.
Ми могли б використовувати подвійні, правильно, тому що, якщо ми дійсно хочемо
представляють температурі людського автора -
98,60000 -
ми могли б використати 64 біта, щоб зробити це, але він відчуває, як
надлишкова для температури.
Так що давайте просто піти з плаваючою крапкою.
Тепер мені потрібно змінної.
Просто, щоб не ускладнювати, я буду називати його F, але я
може просто як правильно називати це температура,
але в будь-якому порядку.
Отже плавати F = GetFloat.
Як тільки я тепер вирішили використовувати GetFloat, хоча, я
необхідно зробити одне уточнення.
Так.
Так що ми повинні # включити , в іншому випадку компілятор
збираюся кричати на нас.
Тепер у мене є поплавець, дозвольте мені йти вперед і робити
перетворення.
>> Отже, по-перше, дозвольте мені увійти у звичку тут
Коментуючи свій код.
Отже, ще раз, коментар це просто позначення для людини це
не входить в програму такої, але він один, допоможе вам
розумію, що ви зробили наступний ранок, або на наступний
місяць, це допомагає викладання хлопець зрозумів, що ви зробили
або те, що ви мали намір зробити, так це
як правило, дуже хороша практика.
Кожні кілька рядків коду, написати коментар до
себе або своїх колег.
Так от, я хочу сказати: "Запитайте у користувача температурі".
Не повинно бути повне пропозицію, тільки коротка фраза.
Але ідея коментуючи в C є те, що кожен з ваших
Коментарі повинні дати вам сили - або, скажімо, TF або колега -
ковзати вашою програмою і точно знати, що він робить, не
стільки читанням коду, але, прочитавши коментарі, які
повинні бути короткими і ясними.
Гаразд, тепер дозвольте мені йти вперед і сказати: "Перетворення
Фаренгейта в градуси Цельсія ". Таким чином, я збираюся йти вперед і робити,
скажімо, плавати в.
Ми будемо тримати Цельсія як значення з плаваючою точкою.
>> І дозвольте мені прийняти удар на цьому.
Формула, знову ж таки, тут.
Як 5/9 раз F мінус 32.
Так давайте зробимо це.
Так, 5 ділиться на 9, мінус -
Ой, я зіпсував його вже.
Times.
Таким чином, 5/9 раз F мінус 32.
Таким чином, F мінус 32, крапка з комою.
І тепер, тут, я буду йти вперед
і говорять, роздрукувати результат.
І ця частина просто. Printf.
Як я можу йти про друк цього?
Ну, я міг сказати: "Це число в Цельсія% F \ п",
тільки для деяких естетики.
І потім, яке значення я хочу підключити тут, як у Printf
Другий аргумент?
Добре.
Так що просто с.
Отже, ми почнемо з цього, а потім просто повернути 0.
Знову ж таки, це не має нічого спільного з математикою.
Це просто означає, що все добре.
>> Тепер, це правильно, ця програма?
Добре.
Так що я зробив кілька помилок.
Навіть якщо ви не знаєте, що програмування, ви можете відсортувати
з виводимо назад в початковій школі, що
помилки тут може бути.
Що одним з перших?
АУДИТОРІЯ: [нерозбірливо]
David J. Малан: Так.
Таким чином, ми пропустили дужках.
Це був навмисний, що я зробив дужках в основний
ковзати тут, тому що там насправді це поняття порядку
операцій, або перевага, в результаті чого деякі операції -
множення -
мають більш високу обов'язковими, мають більш високий пріоритет, ніж речі
як додавання або віднімання.
Таким чином, ми зробили це протягом багатьох років тільки, щоб ясно точно,
що математичні операції повинно бути зроблено в першу чергу.
Так що я, ймовірно, слід наслідувати саме це.
В іншому випадку комп'ютер приблизно буде намагатися зробити
щось на зразок розриву 5 на 9, а потім помножити F, а потім відняти
32 з всього цього.
Що насправді не те, що ми хочемо зробити.
Так що давайте дужки.
Давайте додамо мій дужках тут, дужки тут.
Давайте поставимо це тут.
Ось, я тільки що помітив ще одну помилку я зробив на цьому шляху.
Так?
АУДИТОРІЯ: [нерозбірливо]
>> David J. Малан: Ах.
Добре.
Таким чином, ми насправді є і те ж число
поділ питання, ніж раніше.
Я виправити це, давайте подивимося, що симптом.
Але ми збираємося, щоб виправити одну
Інша помилка тут.
Так?
АУДИТОРІЯ: [нерозбірливо]
David J. Малан: Так.
Таким чином, дурні помилки я зробив, але неймовірно важливо.
Комп'ютер не збирається просто закривають очі, і нехай
мені використовувати капітал F, коли я фактично оголосив змінну
як рядкова е тут, у рядку 8.
Так що мені потрібно виправити в рядку 11 капіталізацію мій, який
Хвилину тому був столицею F помилково.
Що тут?
Якщо це рядкові, а?
Вона повинна бути, але це збіг.
Саме% F не має нічого спільного зі змінною.
Так просто, щоб бути супер ясно, дозвольте мені йти вперед і
перейменувати, коротше, "температура". Дозвольте мені перейменувати
ця "температура". Дозвольте мені не перейменувати.
Тому що, знову ж таки,% F глобально означає "значення з плаваючою точкою".
Не має нічого спільного з моїм змінної.
Але «температуру» по всій місце лише трохи багатослівно,
так що я збираюся повернутися до моєї малої літери "F" с.
>> Тепер, дозвольте мені йти вперед до мого вікна тут.
Зробити f2c -
який, знову ж таки, довільне ім'я, яке я
дали цей файл.
Здається, зібрали.
Дозвольте мені виконати f2c.
Enter.
Температура в градусах Фаренгейта - давайте робити легко.
32.
Добре, виправити.
Але, якщо я зараз роблю 212 для кип'ятіння -
блін.
Добре.
Таким чином, очевидно, не виправити, якщо ваш TF намагається
принаймні, два значення.
Так в чому ж тут проблема?
Ну, ви вже поклав палець на те, що проблема є.
Але чому це так?
Тут, нагорі, коли я роблю математику з 5 розділений на 9.
Таким чином, концептуально, це абсолютно правильно.
Повністю відповідно до формули.
Але тільки з комп'ютерами робити саме те, що ви
скажіть їм робити.
І те, що ми фактично говорить комп'ютеру тут
ділити ціле число 5 на цілих 9
і дайте мені результат.
Проблема в тому, однак, коли ви поділом з використанням даних
типу, на виході буде той же тип даних в якості входів.
І тому, якщо два входи є цілими, то вихід буде
бути Int.
І так 5 розділений на 9 є точкою щось.
Але те, що найближче ціле число, щоб вказати щось?
Таким чином, це насправді 0.
Так як ми обговорювали в понеділок, все після десяткової
точка залишається усіченим.
Він просто отримує викинути.
Так що це повна помилка, тому що я міг би з таким же успіхом
всі помножити на 0 тут.
>> Тепер я можу виправити це в кілька способів.
Я міг би це зробити.
5,0 розділений на 9,0.
Технічно, я навіть не потрібно цього робити.
Це робиться досить просто зробити одне з чисел з плаваючою точкою -
або подвійним - поставивши десяткової крапки тут.
Тому що те, що відбувається зараз, коли ви розділите ціле число на
поплавця, або подвійною, комп'ютер збирається реалізувати
ой, один з них є більш точним.
Дозвольте мені помилитися у бік, щоб дати вам більш точно, ніж
Ви призначений.
Так це буде конвертувати результат -
він буде повертати результат як значення з плаваючою точкою, а також.
Так що буде працювати.
Це буде працювати.
І є ще один механізм, який ми побачимо в
Більш докладно на наступному тижні.
Ви можете насправді, як програміст, скажіть комп'ютера
насправді ставитися один до типу даних, як
якби він був іншим.
>> Так що я міг насправді це зробити.
У дужках, що я можу сказати щось подібне (з плаваючою точкою), відкритий
хлопець, поруч хлопець.
І це те, що називається "кастинг". Знову ж таки, більш
на наступному тижні.
Але це тільки програмний спосіб сказати
комп'ютер, та я знаю, 9, цілі чи довго.
Я знаю, що це значення з плаваючою точкою.
Але розглядати його як такої в будь-якому випадку.
Таким чином, щоб кинути типу даних означає для перетворення
від одного до іншого.
Чесно кажучи, це трохи потворні, тому я хотів би запропонувати ми йдемо
повернутися до первинного пропозицією просто перетворення
ці речі з плаваючою комою вручну.
Тому що зараз це просто супер ясно, що відбувається, і
це ще не все, що відволікає.
>> Отже, давайте тепер повернемося в моє вікно терміналу.
Зробити f2c.
Дозвольте мені йти вперед і виконати це.
І, як в стороні, вам набридне вводити ці команди
знову і знову, розумієш, що комп'ютери, як і Linux тут,
як правило, досить розумна.
І якби я вдарив вгору, ми можемо пройти через всю свою історію
Команди, вгору і вниз.
Тому в даному випадку тут, я можу просто піти до запуску зробити f2c.
Мене крикнув, тому що я тільки що зробив, що секунду тому.
Він вже в курсі.
Так що тепер я можу запустити f2c знову.
Давайте спробуємо 32 за Фаренгейтом.
Тепер давайте спробуємо 212 за Фаренгейтом.
>> Уф.
Здається, працює.
Тепер, це добре, але вона відчуває себе трохи довільним, що
Я показую шість цифр після десяткової крапки.
Вірно?
Якщо ви погода людини по телевізору, ти ніби Doofus
якщо ви читаєте температури
ця ступінь точності.
Так давайте спростимо це.
Так що давайте насправді йдуть сюди, до мого Printf.
І так, я хочу, щоб плавати.
Але я хочу, щоб тепер визначити точність.
І я збираюся бути трохи лаконічніше.
Я хочу сказати, дайте мені одну точку після коми.
Так, а чому, скажімо,% F, я збираюся сказати% .1 ф.
І це тільки означає, дайте мені одну позицію
після коми.
Добре.
Давайте спробуємо це знову.
Дозвольте мені знову запустити його після компіляції.
А зараз я набираю в 32, і я повернуся
більш ємкі значення.
І я можу ввести, зараз 212, і отримати назад більш ємним
значення, а також.
І є інші речі, які ви можете зробити з Printf.
Ви дійсно можете вказати, наскільки широкий число повинне бути.
Якщо ви хочете, щоб оббивка на ньому, так що ви можете вирівняти по правому краю або
вирівнювання вліво всі ваші номери або
намагаються центрі речей.
Так розумію, що є маленькі хитрощі, які ви можете зробити там.
Але вони зводяться до того, формат кодів,
як у нас є.
>> Так що в плані це питання пріоритету.
Це дуже нудна таблиця, щоб пройти через методично.
Але розумію, що автори C придумали
правил, що визначають, які оператори мають вищий
пріоритет, більш зобов'язують влади, ніж інші.
Таким чином, у той час як в початковій школі, ми, як правило знав, що це
множення і ділення, потім додавання і віднімання,
Потім деякі інші речі.
У світі програмування, є багато
довгий список речей.
І це не те, що варто запам'ятати зараз.
Ви отримаєте пристосуватися до нього незабаром.
Але, як і в початковій школі, як правило дужках вирішити
питання перевага, зробивши супер ясно,
комп'ютера і людини так, що він призначений.
Так вважають це трохи шпаргалку там.
Але більшість з цих деталей ми не зможемо отримати протягом деякого часу.
>> Добре.
Тепер, давайте будувати і відійти від цих дурних маленьких
математичні приклади.
Тим не менше використовувати ті ж основи, але почати
виразити себе трохи більше як Scratch.
Таким чином, в Scratch, у нас були ці логічні вирази.
І на англійській, логічне вираження, це що?
Правда чи брехня.
Це те, що оцінюється як істинне або помилкове.
1 або 0.
Включений або виключений.
Все, що ви хочете назвати це.
Зараз в Scratch, шматочки головоломки виглядала наступним чином.
І це комбінація, на дні, з трьох
шматочки головоломки.
Один зв'язку -
те, що має порожній і пустий.
А потім два логічних виразів всередині нього.
Таким чином, ви можете вкладати логічні вирази, щоб отримати більше
складні логічні вирази.
Наприклад, якщо це субота, і це добре
погодою, то вийти на вулицю.
Або щось в довільній подібне.
Таким чином, ви можете приєднатися логічні вирази, щоб придумати
Велике значення істинності, відповідь на який базується
на більш дрібні.
>> Тепер, C, на щастя, це відображення
насправді досить проста.
Дужки допомогти внести ясність тут.
&& Те, що означає «та». Так от, як
Ми збираємося перетворити ці блоки з нуля C.
І умови, які ми бачили в Scratch, на лівій руці
стороні, я можу скласти їх так само в С. Якщо х менше
ніж у, то зробити це.
Інакше, якщо х більше у, то зробити це.
Решта логічно вони повинні бути рівні, так би мовити
що вони рівні.
Так що тепер ми можемо почати будувати ці речі.
>> Так давайте зробимо приклад.
Дозвольте мені відкрити файл, який знаходиться на веб-сайт курсу, що
Я написав наперед.
Це називається nonswitch.c.
І ми побачимо, чому в один момент.
Так що в цьому файлі - nonswitch.c--
спочатку зрозуміти, що є ціла купа
Коментарі на самому верху.
От тільки пояснити назву файлу, що це
робить, і так далі.
І він, очевидно, демонструє використання логічне І-ния -
об'єднавши два вирази.
>> Отже, давайте подивимося, як ця програма працює.
Я включив два моїх файлів, cs50.h і stdio.h.
Якщо я прокрутіть униз, тепер, до програми, це трохи більше
що ми вже писали раніше, але досить читається.
Так що я спочатку роздрукувати для користувача, у рядку 18,
"Дайте мені число від 1 до 10". Так
ось прямо там.
Тепер я отримую ціле.
Але розумію, що GetInt - досить простий.
Це просто буде отримати Int.
Це буде гарантувати, що це отримати Int, а не
Рядок або число з плаваючою крапкою.
Але це не збирається робити будь-які кордони перевірки.
Це не збирається фільтрувати номери, щоб бути між
певному діапазоні.
Таким чином, ми повинні реалізувати це самі.
Так само, як в Scratch, де я міг би зробити з'єднання
два вирази, я можу зробити це в C наступним чином.
Якщо п більше або дорівнює 1, а п менше і
або дорівнює 3, я збираюся вельми довільно указ, що
число було невеликим числом.
Тільки заради утвердження.
Інакше, якщо п від 4 до 6, друк "Ви вибрали середній
номер. "Else, якщо п від 7 до 10, друк" Ви вибрали
Велика кількість ". Else Print" Ви вибираєте неправильний номер ».
Тому логічно, що наступним, якщо ми
вичерпали наш асортимент.
>> Так розумію, що це не зовсім так, як ми пишемо більше або
рівними в математичному класі.
Вірно?
Ви зазвичай малюють його як це, з лінією під ним.
Але немає такої клавіші на клавіатурі.
Таким чином, символ C для вираження більше або
одно це два символи, а символ менш
або дорівнює складається з двох символів, а також.
Добре.
Так що, якщо я запускаю цю програму, ви можете здогадатися, що це
збирається робити.
Якби я піти далі і зробити nonswitch, Enter.
А потім запустити nonswitch.
Дайте мені номер від 1 до 10.
Я збираюся дати йому 11.
Я вибрав неправильний номер.
Дозвольте мені спробувати номер 3.
Я взяв невелику кількість.
Таким чином, існує досить простий.
>> Що робити, якщо я хочу змінити поведінку цієї програми і
зробити щось трохи по-іншому, а?
Дозвольте мені йти вперед і говорити про це.
Дозвольте мені позбавитися від всього цього.
І дозвольте мені сказати, якщо (п == 42).
А потім я збираюся йти вперед і сказати друку "Ви вибрали
Правильна відповідь ". Решту ми збираємося йти вперед і сказати,
Е ("Ви вибрали
неправильна відповідь ");. Гаразд.
Просто так.
>> Тепер кілька пунктів ми можемо зробити тут.
Один з них, я не ввести символ, який ви думаєте,
Найбільш розумним.
Коли я хочу, щоб перевірити рівність, виявляється, ви не використовуєте
знак рівності.
Ви замість цього використовувати рівних знак рівності.
І чому б це міг бути, просто інтуїтивно?
Так.
АУДИТОРІЯ: [нерозбірливо]
David J. Малан: Правильно.
Знак рівності вже використовується для завдання.
Хтось дійсно не думаю, що це до кінця.
І ось тепер, коли справа доходить до перевірки рівності, ми повинні
бути більш явним, і говорити рівних з рівними.
Дуже поширеною помилкою є, щоб зробити це.
І, якщо в робочий час або на наступному тижні або в
Наступні два тижні ви робите щось на зразок цього, а потім
Боротися з цим на 10, 20 хвилин, намагаючись з'ясувати,
що проклята помилка є, розумієте, що ви один з тих,
люди, які зробили цю помилку.
Таким чином, супер легко зробити.
Але мета зараз, щоб запобігти цю помилку.
Це може оцінити, тому що це насправді говорив?
Якщо п отримує 42.
Таким чином, дієслово люди використовують, в усній формі, щоб висловити
Поняття призначення "отримує". Так що, якщо п отримує 42.
Таким чином, це означає, що призначити 42 до н.
Тепер у мене є логічне вираження в круглих дужках,
Усередині цієї умови, вартість яких становить 42.
Вірно?
Тому що, якщо оцінювати його зсередини, загальна
Відповідь, в даний час, становить 42.
>> Так що якщо я задав вам питання, "якщо (42)," Що таке
, Що дійсно говорив?
Ну, логічні вираження може бути тільки істинним або хибним.
1 або 0.
Включений або виключений.
Таким чином, ми, здається, є кутку даному випадку, згідно з якою всі
Раптово, я кажу "якщо (42)". Це не логічне значення.
Так що комп'ютери роблять, тим не менш, вона по суті прирівнює
все, що не 0 інтерпретується, щоб бути правдою.
1.
On.
Всі вони функціонально еквівалентні.
Тільки значення 0 або ключове слово помилкове, як ми будемо
в кінцевому рахунку бачити, насправді невірно.
Таким чином, "якщо (42)" буде насправді бути правдою, тому що вона не дорівнює нулю.
Таким чином, щоб бути більш точним тут, логічне значення, насправді не так
багато істинною або помилковою, але для цього
випадку, якщо дорівнює 0 або відмінні від нуля.
Таким чином, помилкова або не помилкова.
І це дозволяє нам охоплювати все більше
можливості в дужках.
Так що нам потрібно, завжди так ретельно, кажуть, що це -
Якщо (п == 42).
Просто тому, що нам потрібно вказати тесту рівності,
Чи не присвоювання значення.
>> Що ще варто відзначити тут?
Ці фігурні дужки насправді не потрібно.
Я роблю їх просто щоб бути ніт-прискіпливі тут.
Але коли у вас є умова, що є тільки один рядок
код, для зручності, програмісти не повинні використовувати
фігурні дужки.
Досить просто відступ, з естетичних міркувань, а
Потім написати рядок коду.
Тільки тоді, коли ви хочете написати два рядки коду - для
Наприклад, ще Е ("Bye!"). Якщо ви хочете зробити
, Що це не працює.
Ви можете відступу все, що ви хочете, а те, що у вас є
ввели два рядки коду без використання фігурних дужок
означає, що ця програма не буде працювати правильно, або може
навіть не збирати правильно.
Таким чином, на даний момент, чесно кажучи, я думаю, що краще просто звичка
використовувати фігурні дужки, і ви побачите, що вони роблять
Супер ясно, що відбувається.
>> Крім того, як в сторону - особливо, якщо ви серед тих, хто використовує
рекомендовані книги або онлайн-ресурсів -
розумію, що є таке поняття стилю в
програмування.
І деякі люди насправді воліють ставити фігурні дужки
тут на лінію.
Деякі люди вважають за краще робити смішні речі,
як їх тут.
Там немає неправильних відповідей, коли справа доходить до
стиль, але це не так.
Але деякі люди роблять це.
[Сміх]
David J. Малан: Так я говорю про це зараз, просто тому, що, як
Ви прочитали про речі в книгах або в Інтернеті, ви збираєтеся отримати
різні повідомлення з різних вчителів і
різних авторів.
І так само, розуміємо, що, функціонально, вони
в цілому еквівалентні, але бути послідовним.
Так що в цьому випадку, ми будемо стандартизувати фігурні
дужки шикуються тут зліва.
>> Добре.
Так що давайте йти вперед тепер і запустити це, і подивимося, що станеться
з цією програмою.
Зробити nonswitch.
Потім запустіть nonswitch.
Дайте мені число від 0 до - так що це не відповідних
більше, але я просто хочу, щоб як завгодно говорити 42.
І я вибрав правильну відповідь.
Ну що ж, давайте насправді взяти це в іншому напрямку.
Виявляється, є деякий інший синтаксис, який ми
Можна використовувати в програмі.
Ось нова частина синтаксису, функціонально те ж саме,
а просто вводить ще один спосіб виразити себе.
Отже, це те, що називається "перемикач заяву". І
Перемикач заяві працює таким чином.
Вона займає в дужках значення, яке ви хочете
"Перемикач" на.
Ви хочете, щоб вести себе по різному в залежності від його значення.
Таким чином, це означає, що перемикач на значення п.
А що це значить?
Ну, а якщо п = 1 або 2 або 3, йти вперед і роздрукувати "Ви
отриманні великої кількості ", а потім розірвати.
Причина розриву в тому, що шлях C працює, як
тільки він знаходить випадок, який відповідає, він починає виконання
весь код нижче.
Так що, якщо у мене є один рядок коду, як я тут, на лінії 27, то
запускається на виконання.
Якщо я додам ще одну лінію тут, він запускається на виконання.
Інша лінія тут, він запускається на виконання.
Програма припиняє виконання тільки те, що нижче
застосовним заявою про випадок, коли я явно
сказати "зламати". Так що не так.
Так, в даному випадку, в якості результату.
Випадок 4 або 5 або 6, аналогічно, буде
роздрукувати повідомлення.
У цьому випадку середні числа.
Перерва.
Випадок 7, 8, 9, 10, це буде роздрукувати "Ви вибрали великий
номер. "Break.
А тут ще буквально ключове слово називається "за замовчуванням"
це ефективно, як "інше" побудувати.
Таким чином, новий синтаксис, але інтелектуально,
нічого нового тут немає.
Це як Scratch.
Якщо, інакше, якщо, інакше, якщо, на зразок блоку.
>> Так от включений версію цієї програми.
Але зверніть увагу, що ми зробили це з номерами тут.
Дозвольте мені відкрити другою версією, просто щоб показати,
щось більш конкретне.
Таким чином, тут ми маємо класи замість цього.
Виявляється, можна використовувати перемикачі не тільки на цілі, але на
символи.
Не у всіх типах даних, але принаймні на символи.
Так от, ми могли б зробити щось подібне, якщо значення С,
Користувач набрали, в рядку 19 за допомогою GetChar функції,
це капітал або нижній регістр, давайте інтерпретувати його як клас,
і говорять, що вони вибрали відмінну оцінку.
І вниз уздовж перемикач заяву, у нас є інші
випадків "B" з і "C" з, і так далі.
Але давайте зараз завершують одну річ.
І знову, начебто пролетів через
Деякі з цих прикладів.
Але це дійсно так, що ми можемо їх застосовувати, то зараз -
або дійсно, просто перевести їх в даний час -
до С.
>> Отже, дозвольте мені йти вперед і робити це.
Я збираюся відкрити новий файл.
І я збираюся зробити, включають .
А потім я збираюся зробити Int основних (недійсними).
Дозвольте мені зберегти цей файл як loop.c.
Просто в якості прикладу.
І я збираюся піти далі і зробити наступне.
Я хочу написати дуже втомлює програми.
Так 10.
Давайте зробимо це.
9.
Добре.
Як тільки ви починаєте робити це в програмуванні, ви
ймовірно, робите щось неправильно.
Але ми почнемо там в будь-якому випадку.
Ой.
Це насправді так.
7.
6.
5.
4.
Нічого не станеться, коли ми доберемося до 0.
3.
2.
1.
Добре.
0.
Видалити.
>> Добре.
Таким чином, повертається 0.
Таким чином, ця програма, очевидно, буде робити те, що він дуже
утомливо говорить, що збирається робити.
Це буде друкувати всі ці
Значення, від верху до низу.
Отже, дозвольте мені роблять петлю.
А потім - вигуки.
Зробіть петлю.
Я був в іншому каталозі.
А тепер дозвольте мені виконати цикл.
Enter.
Woohoo.
Дуже красиво.
Хороший, довгий програми.
>> Гаразд, а тепер давайте зробимо це краще.
Як і в Scratch, коли ви почали використовувати цикл
будувати, а не просто копіювати і вставляти всі
шматочки головоломки, дозвольте мені представити цю річ.
Таким чином, в C, існують різні циклічні конструкції,
одна з яких виглядає наступним чином.
"За" петля має три речі, розділені двома крапками з комою.
І потім, всередині тіла циклу, так би мовити -
матеріал всередині фігурних дужках -
ми можемо зробити щось знову і знову.
Так що у мене тут на екрані, це
Буквально коментар.
/ / Означає, що тут йде коментар.
Це не код.
Це тільки англійський Опис, для мене, людини.
>> Так ініціалізації, умови та поновлення.
Ну, давайте подивимося, як це працює.
Це дозволяє мені переписати цю програму таким чином.
За -
так ось іде мій цикл -
Int я -
Тут приходить змінна називається "я" -
отримує ініціалізований до 10.
Так що мій ініціалізації.
Я хочу зробити цей цикл до тих пір, як "Я" більше або
дорівнює 0.
І на кожній ітерації цього циклу, я хочу,
зробити я -.
Таким чином, ми побачили + + в понеділок.
- Все навпаки.
Це зменшує значення на 1.
Усередині цього циклу, я хочу зробити щось.
Так що я збираюся сказати щось подібне Printf.
Я не хочу сказати, 10 зараз, тому що це, очевидно, тільки
в друк і те ж значення.
Що я хочу надрукувати, а, напевно?
Так.
Таким чином, "я". Таким чином,% D, I.
>> Так що я збираюся вкрасти одну з цих ідей від більш ранніх -
ця заміна формату кодів -
, А потім тут, внизу, я буду повертати 0, всього
для хорошої заходом.
Але тепер у мене є більш ємкі програми.
Це всього лише кілька рядків, а не який-небудь 10 або 11 ліній.
Пустіть мене до моєї рядку сюди.
Рімейк циклу.
Повторіть цикл.
І це, здається, те ж саме.
Тепер програма немає більш цікавою.
Але тепер я можу щось на зразок цього.
Я можу змінити це до 100.
Потім я можу перекомпілювати програму.
І тоді я зможу знову запустити мою програму.
І тепер він йде супер-швидко на сучасних комп'ютерах.
Але є в мене -
а насправді, мій прокрутки буфера не
навіть піти так далеко.
Там ми йдемо.
Так що у нас є всі 100.
Але це легко зробити помилки тут.
Що буде очікуване поведінка, якщо я
випадково це зробити?
Таким чином, він відчуває, як нескінченно.
Отже, давайте подивимося, якщо комп'ютер поводиться.
>> Отже, дозвольте мені піти далі і зробити петлю.
І дозвольте мені виконати цикл.
Так що давайте повернемося до цього через хвилину.
Ми повідомимо, які працюють.
Тому що ми повинні рахувати до, мінімально?
Ймовірно, принаймні, 2 млрд, якщо у нас є, що багато бітів, а
ми використовуємо позитивні значення.
Отже, давайте переходити сюди.
Крім цих видів петель, у нас є те, що називається в той час як
петель. Таким чином, як і в Scratch, ви мали Назавжди
блоки, і у вас повтор блоків.
Крім того, в C, ви просто є інші способи
виразити себе.
Так що у вас є це поняття в той час як цикл, який дозволяє
виразити себе трохи по-іншому.
І тоді у вас є те, що називається зроби той час як цикл,
, Який працює трохи по-іншому, а також.
І ми будемо дражнити один від одного ці з плином часу.
>> Але давайте подивимося на це останнє тут.
Якщо ми йдемо в -
все ще працює.
Це досить нескінченним.
Отже, дозвольте мені перейти в позитивну, і показати, як ми можемо насправді
управляти користувальницького введення небагато більш ефективно.
Це досить короткій програмі.
І тут у нас, в основному, Int N декларації.
Так дайте мені змінну с. Тепер, я буквально говорю
"Робити". А потім я отримав відкриту фігурні
дужки, недалеко фігурною дужкою.
А потім помітили, одразу після цього, він говорить, а п
менше, ніж 1.
Так зауважити, що ці лінії -
Від 19 до 24 -
складати колективно DO-циклу.
І знову ж, новий синтаксис, не нова ідея.
Це просто ще один спосіб циклів, синтаксично.
Так що ж це зробити?
Виконайте наступні дії в той час як п менше 1.
Отже, що ж я хочу зробити?
Я вимагаю, щоб ви дати мені ціле позитивне число.
Тоді я насправді намагаються отримати ціле число від користувача.
Але з точки зору порядку операцій тут, тому що
в той час як умова тут, я тоді збирався перевірити, п
менше ніж 1?
Таким чином, припустимо, що користувач -
після того, як зажадав таким чином -
типу в значення 0.
Ця умова буде істинно або хибно?
Ну, це насправді відбувається, щоб бути правдою.
Тому що п 0, 0 менше 1.
Так що ж це значить?
Зроби це ще раз.
Тільки один раз, що стан БРЕХНЯ.
Якщо я друкую в 42.
Ну ні, 42 не менше, ніж 1.
Тому цей цикл здійснюється виконання.
І ось в той момент, програма буде сказати, спасибі за
42, в цьому випадку.
Тепер у вас є це спосіб виразити себе -
Ми не повинні чекати цього до кінця.
Це займе деякий час.
Далі буде наступного разу, може бути.
>> Але тепер у вас є можливість, ми сподіваємося зрозуміти,
Трохи гумору виродка.
Вибачення.
Це не представник гумору в комп'ютерній науці
світу, але це мило.
[Сміється] Давайте кінця на цій ноті.
І ми будемо бачити Вас в понеділок.
[Оплески]