>> ROB: Добре.
Ласкаво просимо в першій секції.
Я Роб.
>> ЙОСИП: Я Йосип.
>> Роб: Так ми будемо пірнати право дюйм
Перше, що потрібно говорити про є Appliance.
Так що, сподіваюся, більшість з вас є скачав його вже.
Але ви можете бачити інструкціям в cs50.net/appliance.
О, Боже, тепер я сором'язливим.
Я все ще чую його.
>> ЙОСИП: Нічого собі, це звучить як це дезорієнтований.
>> Роб: Таким чином, деякі люди були з проблеми з нею, так що не чекайте, поки
остання хвилина проблеми встановлений в спробувати вирішити Appliance і
дізнавшись, що вона не працює.
>> ЙОСИП: І якщо щось не працює і вам потрібна допомога, ви можете піти в
cs50.net/discussion де ми є форум, де ви
може поставити свої запитання.
І ми повернемося до них в кінці кінців.
>> ROB: Добре.
Так що це те, що прилад виглядає.
Знову ж, це просто зовсім окрема операційна система, що працює в рамках
що операційна система встановлена ​​на працюють на вашому ноутбуці.
І основні речі, які ви будете використовувати в Gedit.
Так ми сподіваємося, це вже стати знайомий сайт.
Термінал.
>> І ви також можете запустити Chrome в Appliance.
Там було кілька людей які повідомили Інтернет
не працює в Appliance.
І деякі з них просто припустив, що там не повинно бути
Інтернет в Appliance.
Але так, там, як передбачається бути інтернет.
>> Я скажу це прямо зараз, але це не так дійсно означають.
Якщо Інтернет не працює, це те, що ви, як правило, потрібно
для запуску, щоб виправити це.
Якщо у вас виникли питання, Інтернету, не пам'ятаю, просто розмістити його на
Обговорити, і ми будемо говорити, працювати, що.
Але Інтернет повинен працювати.
>> не так єдине, що - так, нічого інше справді актуальні.
Але я просто хотів би відзначити, що -
см. в цьому нижньому правому куті.
Таким чином, кожен з ваших прилади повинні є IP-адресу.
А пізніше в семестр, це IP- адреса стане більш актуальним, коли
ви працюєте на веб-р-набір, тому що ви зможете отримати доступ до
сайт ви працюєте на від вашого місцевий Chrome за допомогою цього IP-адреси.
>> Але що мені подобається використовувати IP-адресу для - і ви не повинні робити це, я
просто хочу вказати на це -
тут.
Так що це вікно терміналу на мій Mac, це не в
Appliance взагалі.
І ви можете подивитися, що ця команда робить.
Але я збираюся SSH безпосередньо до мого Appliance.
Я не знаю, що IP є.
>> ЙОСИП: 168 -
>> 168.224.1.0.
>> Роб: Тому, як тільки я зробив з цим, увійдіть
Тепер, в основному, це ідентично вікно терміналу в моїй Appliance.
Так що я в значній мірі ніколи не працював з самого Appliance.
Я просто завжди це працює у фоновому режимі згорнутого
і SSHed в неї.
>> Питання з це ви не збираєтеся , Щоб мати можливість використовувати Gedit легко
безпосередньо від цього.
Але якщо ви хочете бути справжнім круто хакер, то ви повинні звикнути до
командного рядка текстовий редактор в будь-якому випадку.
Так Вім і Emacs і нано, всі ці різні альтернативи.
Нано, як правило, найпростіший.
І я думаю, що це не має собі підсвічування синтаксису.
О, ні, це повністю робить.
Таким чином, ви можете використовувати Nano, тому що що один досить легко.
>> Ви бачите всі ці команди в нижній частині.
Цей маленький символ моркву.
Якщо ви ще не бачили його раніше, ви будете , Ймовірно, побачити його багато зараз.
Це зазвичай означає, управління морква, як знизу зліва від клавіатури
керуючий символ.
Так ось він каже мені, сюди -
О, це не відрізали, якщо я збільшення масштабу
Таким чином, управління, X, як Я збираюся вийти.
І це говорить, що я можу вдарити Y для Так, для економії, N для Ні.
Так от Nano.
>> Вім і Emacs мають тенденцію бути трохи більш складним і переважною.
Але ви можете звикнути до нього, і тоді ви будете любити його.
Так ось, що.
>> ЙОСИП: Немає необхідності робити це.
>> Роб: Так.
Ви можете вільно використовувати Gedit для Інша частина семестру.
Таким чином, будь-який прилад, пов'язаних запитання?
Або у вас є які-небудь думки на те, що ще необхідно говорити про те, про
прилад?
Так.
>> Виступаючий 1: Коли ви SSHed в ваше річ, був пароль Багряний?
>> Роб: Так.
Пароль для майже все, в Appliance збирається
бути Багряний.
>> СПІКЕР 2: Установка як справжній IDE на приладі, чи буде він працювати?
>> Роб: Я уявляю собі Затемнення має Fedora версія, і в цьому випадку, так,
Ви можете зробити це.
Це, ймовірно, насправді не варто.
>> СПІКЕР 2: ОК.
Так що, напевно, простіше, якби я хотів використовувати Eclipse, просто використовувати рідну і
потім завантажити на -
>> Роб: О, це також, ймовірно, простіше.
Але ви можете змусити його працювати в Appliance.
>> ЙОСИП: І для камери, питання було, ви можете встановити інший
IDE всередині Appliance?
>> ROB: Затемнення бути Прикладом IDE.
Будь-які інші питання побутової?
Добре.
>> Таким чином, ми тепер перейдемо до командного рядка інтерфейс, пов'язаних речей, так CLI.
І знову ж, я просто хочу працювати в тут, тому що це ідентично
працює в термінальному вікні в Appliance.
Як це шрифт дивлячись?
Це досить великий?
Добре.
>> Таким чином, є багато команд, які ви повинні отримати досить використовуватися для
протягом семестру.
Велика два для навігації є лс, список файли в цьому каталозі, а також
кд, тому змінити каталог.
Так що я можу змінити, щоб робочий стіл, а потім дуже поширена картина перейдіть в
каталог і відразу Ls Що в каталозі.
>> Люди також іноді не розуміють, що завершення Tab є річчю.
Так як CD, VH, а потім я вдарив Tab.
Я майже ніколи не вдрукувати вся річ.
І потім, якщо я тримати удар Tab знову, воно буде автоматично
почати лістинг для мене.
Так що я можу кд віртуальних доменів, локальний хост.
І це тільки збирається -
у разі, якщо ви ще не чули термін раніше, каталог просто інше слово
для папки.
Так що тепер, якщо ви бачите -
наведемо, що на самому верху.
>> Так що тепер, якщо ви бачите в дужках, ви побачити маленький тильди, слеш, віртуальний хост,
слеш, локальний хост.
Так тильди, що називається в моєму домашньому каталозі.
Це каталог ви коли ви SSH дюйма
Це каталог, який ви знаходитесь в, коли Ви відкрийте термінал.
Це місце, де ви починаєте.
І тому я всередині моєї домашньої директорії, і я всередині віртуальний хост
каталог всередині моєї домашньої директорії.
А потім я всередині місцевий пройде каталог всередині цього.
>> Таким чином, деякі інші корисні речі з CD -
або ну загалом, так точка завжди відноситься до поточної директорії.
Cd, точка є досить марною команда.
Але все змінюється в поточний каталог.
Більш корисним, з точки зору кд є точка, точка, яка є
просто піти на один каталог вгору.
>> І зауважте, що це -
Я хочу сказати, псевдоніми, але вони символи, точка, і крапка, крапка, ці роботи
для майже будь-якої команди ви знаходитесь думатиме працювати.
Так як кд, ймовірно, де ви будете з використанням самих, але вони не
речі, які просто кд розуміє.
Це в значній мірі те, що ваш весь командного рядка розуміє.
Багато програм розумію точка і точка, точка.
>> Так що інші корисні з них - CD, тире.
Так що збирається принести мене Останній каталог, що я був усередині
Так що іноді я буду робити щось подібне, ой, я працюю тут.
І я бачу деякі помилки з чимось, і Я піду досліджувати його, перейшовши в
деякі випадкові каталог десь.
І я не знаю, якщо це буде нехай мене туди.
Це буде.
Так само роблю все, що хочу в цьому каталозі.
Бла, бла, бла, бла, бла.
І я подумала: все в порядку, я хочу щоб повернутися туди, де я був.
кд, тире, і це приносить мені назад.
>> Так що я збираюся кинути багато з них на вас сьогодні.
Я не очікую, що ви запам'ятаєте всі з них.
Це свого роду просто знаю, що вони існують.
А потім, коли ви, як, хм, я хочу повернутися до
каталог, який я був просто в, о, почекайте, щось на зразок цього існує.
Ви не повинні просто введіть весь каталог знову.
>> ЙОСИП: І в кінці кінців ви будете просто використовувати їх знову і знову, і
це стане м'язова пам'ять.
>> Роб: Так.
Отже, як я вже говорив, що Тільда Ваш домашній каталог.
Так що я можу CD, тильди.
Але я навіть не доведеться зробити це, якщо я просто -
Я повернуся в каталог так це не безглуздо приклад.
Але якщо я просто роблю кд, це також само, як і перейдіть моєму домашньому каталозі.
Я роблю Command, К.
>> ЙОСИП: Можна також ввести ясно, слово, і він повинен очистити його.
>> Роб: І я думаю, також управління, L також робить це.
Так багато різних способів.
Я думаю, що є деякі відмінності, де ясно і управління, L буде просто
дійсно підштовхнути його до вершини і Я все ще можу прокрутити назад.
Команда, К буквально знищує все, і ви
не може прокрутити назад.
Принаймні, це як це працює в iTerm2.
Я не знаю, як інші речі -
о.
>> З SSHing, так що якщо ви знаходитесь на Windows, ви будете мати, щоб завантажити PuTTY
для того, щоб ЗОШ с Windows не робить є як вбудований SSH інструменту.
З Mac, ви можете просто SSH безпосередньо з вікна терміналу.
ОК.
Питання?
>> З Л. С., так щось, щоб звикнути до з більшістю з цих команд -
ну, я просто виконайте одну.
Ls, тире, л.
Так тире, л те, що ми збираємося викликати прапор Ls.
І багато хто з цих команд є прапори що ви можете передати їм.
Таким чином, в цьому випадку, тире, л це прапор що говорить його дати мені повний
перелік всієї інформації з цих файлів.
>> Таким чином, ми бачимо, що робочий стіл був зміна 30 липня в 12:54.
Завантаження була змінена на 6 вересня.
Це поточний розмір і байт цих каталогів.
Ви не повинні розуміти, все це.
>> Цей матеріал ліворуч, ці drwx х, що стане набагато більш актуальні
пізніше, коли вам доводиться мати справу з -
, Що пов'язано з тим, хто має дозволу дивитися на ці файли.
І тому, якщо ви не були єдиним користувачем на цей комп'ютер, ви були б в змозі
скажімо, добре, я повинен бути тільки один дозволили дивитися на цей файл або я
збирається дозволить кожному подивитися на цей файл.
Так хтось на моєму комп'ютері можете подивитися на цьому файлі.
Я навіть не знаю, що це - що ж це зробити?
>> ЙОСИП: Я не зовсім впевнений, насправді.
>> Роб: Не знаю.
>> ЙОСИП: Але якщо ви не знаєте, є корисними команда, яку можна використовувати
щоб сказати вам, що засіб виведення.
І якщо ви введете в людині перед командою -
так М-А-Н. Роб: Людина.
Так людина є ще одним що є дуже корисним.
І людина, к.с.
Таким чином, чоловік сторінки, вони обидва команди, які ви збираєтеся використовувати
в командному рядку, і вони також мають функцій, які будуть мати відношення
з С. Таким чином, ви можете людині -
і я проігнорував 3.
Але людина 3 Е збирається принести до версії C з Printf.
Але якщо я просто роблю чоловік Printf, це збирається вивести на екран командний Printf
що відбувається в командному рядку.
>> Так людина, к.с.
Людина сторінки може бути досить переважною.
Тут, однак, ви побачите це перерахування всіх цих прапорів, які Ls
розуміє.
Так що, якщо ми йдемо в тире, л, і -
Я просто хочу, щоб кинути це на вас.
Але з метою пошуку, ви хочете першим дотиком питання
знак або кнопку слеш.
Так слеш.
>> І тоді я можу шукати для все, що захочу.
Так що я збираюся скоротити для панелі, л.
І там це було.
Так використовувати довгий формат лістингу.
Це не допоможе мені зрозуміти, що що конкретний стовпець мав на увазі, але я
Припустимо, десь тут було б пояснити, що.
Так що використовуйте довідкові сторінки для будь-якої команди що ви не відразу зрозумів.
>> Я цілком впевнений, ви можете навіть чоловік, людина.
Інтерфейс до онлайн довідники.
О, одна остання той, який, може бути, трохи актуальним є лс, тире,.
Так помітити, якщо я просто роблю Ls, Я отримую ці п'ять файлів.
Якщо я це зроблю Ls, тире, я отримати набагато більше файлів.
Таким чином, загальна риса між усіма цими нові файли є точка заздалегідь.
>> Таким чином, конвенція є те, що файл, який починається з точки прихований.
Таким чином, ви не хочете, щоб подивитися файл, ви не хочете, щоб він возитися з
позицією в каталозі каталог.
І тільки коли ви явно задати, Все в порядку, Ls, тире, покажи мені.
Варто для всіх файлів, в тому числі приховані.
Таким чином, деякі інші команди.
О, питання в цій точці?
Так.
>> СПІКЕР 3: Коли ви робите Ls, , Що точка, точка?
>> ROB: Ох.
Так що це те, що я мав на увазі.
Це те ж саме, де Я можу, наприклад, компакт, точки, точки.
Технічно, точка і точка, точка є файли, які існують в кожен
каталог, де знаходиться файл точка відноситься в поточному каталозі.
Так що якщо я кд, точка, я просто хочу, залишитися в каталозі.
І крапка, крапка завжди відноситься до попередня каталог на один рівень вище.
Так що, якщо я йду в журналах і Ls, тире, ін, Побачимося точка, точка. кд розставити всі крапки, точка
приносить мені в попередній каталог.
Так.
ОК.
>> Так ще один досить важливий команда РМ.
Так ось що ми збираємося використовувати для видалення.
І дозвольте мені насправді роблять інше Команда в першу чергу.
Так MkDir.
Mkdir, як ви можете створювати каталоги.
І я створю тимчасовий каталог і увійти в цю тимчасову директорію.
І, як і слід було очікувати, вона порожня.
Але якщо я Ls, тире, а, я до сих пір точка і крапка, крапка, тому що точка належить до
поточний каталог.
І крапка, крапка ставиться до попередня каталог.
А ті, завжди буде існувати незалежно від того, каталог ви всередині
>> І це абсолютно не потрібно Команда, але сенсорний.
Я просто використовувати його, тому що це простий спосіб для створення файлів.
Так торкнутися, доторкнутися б, доторкнутися з просто збирається створити три файли звані,
б, в, що абсолютно порожні.
Таким чином, точка мені створюючи ті, в перше місце займає саме так, що гт
як ми можемо видалити їх.
Так гт,.
Це збирається запитати мене, зніміть регулярне порожній файл?
А потім я скажу Так.
>> Так що якщо я точно знаю, що я хочу стерти файл без необхідності
запропоновано, видалити регулярну порожній файл?, то гт, тире, е буде
Прапор, який говорить, змусити видалити без навіть спонукало мене, о, ти
впевнені, що хочете видалити файл?
Так, я впевнений.
Так RM, тире, FB буде просто зробити це, не питаючи.
>> То давайте зробимо ще кілька каталогів.
MkDir, tmp2, CD, tmp2, торкнутися, сенсорний б.
ОК.
Так що тепер я хочу, щоб видалити tmp2 як каталог.
Так гт tmp2.
Ви не можете видалити TMP2, це каталог.
Так що питання в тому, що РМ НЕ відразу працювати з каталогами.
Він використовується лише для для файлів, таких як файли, які не є каталог.
>> І так, що ми можемо зробити ось гт, тире, м.
Це означає рекурсивно, які могли б нічого не означає для вас ще.
Але коли ви отримуєте на рекурсії, це означатиме більше.
Так RM, тире, г, tmp2 збирається рекурсивно перейти в цей каталог.
Так спуститися в каталозі TMP2?
Так, підемо на це.
Чи хочемо ми, щоб видалити TMP2 /?
Так.
Чи хочемо ми, щоб видалити TMP2 / B?
Так.
Тепер ми хочемо, щоб видалити tmp2 каталог?
Так.
І ось тепер каталог і все, що всередині
з вона була вилучена.
>> Існує технічно команда видалити каталог що ви можете використовувати для видалення
каталоги, але це працює тільки на порожніх каталогів в будь-якому випадку.
І бачити, що, давайте просто зробити MkDir, TMP2 знову.
TMP2 торкніться.
ОК.
Так що, якщо я намагаюся видалити dirtmp2, воно буде кажуть, каталог не порожній.
Так що я не в значній мірі не використовуйте видалити Команда реж будь-якому випадку, тому RM, тире,
г працюватиме на порожніх каталогів і не-порожні папки.
>> А також, якщо я не хочу, щоб пройти через це всього процесу
убування в каталог і видалення кожного окремого файлу, RM,
тире, ВЧ, tmp2.
А тепер його немає.
>> Щось бути обережним про те, RM, тире, ВЧ.
І це лякає мене навіть ввести його, тому що, якщо я випадково
натисніть Введення або щось.
Так RM, тире, ВЧ, Тільда ​​б, без спонукало мене, е не просить
мене, він автоматично видалить вся моя домашня директорія і
все в ньому.
Таким чином, ви можете думати, що це дурний вчинок.
І добре, що це.
>> Але це може відбутися дуже легко аварії, якщо, скажімо, я хотів, щоб видалити
моя риса, каталог віртуальний хост.
І тільки у швидкій набору тексту, Я випадково це зробити.
Це зніме рекурсивно як мій домашній каталог і каталог віртуальний хост
в даному конкретному каталозі, просто трапляється не існує зараз.
Але це було б ще видалити вся моя домашня директорія.
Принаймні, не маючи е, це викликало б мене в першу чергу.
І я був би як, о, ні, я не хочу цього робити.
Але люди, слеш, в тому числі мені, як правило, потрапляють в
Звичка завжди ВЧ-ня.
Навіть звичайні файли, які я можу просто RM, с, я, як правило, просто гт, тире, ВЧ, с.
Тільки будьте обережні, коли ви ВЧ-Ing.
>> СПІКЕР 4: Що C робити?
>> Роб: З Я кажу про те, що C-файлу в цьому каталозі, що гт, с.
>> ЙОСИП: І що більш небезпечно, якщо ви використовуєте зіркою, це відноситься до всього в
каталог.
Так що я зазвичай, як правило, зробити, це я буду перейти в каталог, і я хочу
видалити всі файли там.
Так RM, тире, ВЧ, зірка.
>> Роб: Так.
Кт, тире, ВЧ, зірка.
>> ЙОСИП: І якщо ви не будете обережні якій директорії ви знаходитесь в -
Я не був у темп, але я був випадково в моєму домашньому каталозі,
то я видалю всі в моєму домашньому каталозі.
І я насправді зробили це раніше, і Я думаю, що ви зробили це до чи
Джей перед зробив це.
>> Роб: Я випадково видалив -
так що ігнорувати цю команду на деякий час.
>> ЙОСИП: Чи не весело.
>> Роб: Так в каталозі бен слеш є купа бінарних файлів, де будете
бути знайомі них, як брязкотом.
Ну, брязкіт і в основному всі вони речі, які я біжу по команді
лінія в цій косою бен каталог.
>> ЙОСИП: Як Ls знаходиться тут.
>> Роб: Так точка, слеш, лс б список цей каталог.
>> ЙОСИП: Rm також у цьому каталозі.
>> Роб: Я випадково RM, RF-е вид бен, які віддалені будь-яку команду, що міг
можливо тільки мріяти.
Які тоді я просто перевстановити Нова техніка в цій точці.
>> ЙОСИП: Так що будьте дуже обережні, коли Ви використовуєте цю команду.
>> АУДИТОРІЯ: [нерозбірливо]?
>> Роб: Так.
Це також погана звичка потрапити.
Якщо ви помітили, я тепер -
добре, ви не можете помітити, але мій зум-в, може бути, може.
Так що я тепер корінь @ прилад.
Так jharvard є користувач ми хочемо Вам завжди використовувати.
Коренева є користувач, який має дозвіл зробити абсолютно нічого.
>> Так помітити, коли я jharvard, якщо я намагаюся кд -
що каталог, який?
О, корінь є гарним прикладом.
Так кд, корінь.
Доступ заборонений.
Тому що, якщо ми подивимося на цей список -
і знову ж, ви не повинні повністю зрозуміти це.
Але ці три риси говорять що не дозволяйте будь-який інший
Користувач в цей каталог.
І каталог трапляється належати кореню користувача.
>> Тому той факт, що я jharvard і немає той, хто не корінь допускається в
цей каталог, що означає, що я збирається отримати доступ заборонений, коли я
спробувати кд в неї.
Тому, коли я корінь, у мене є дозвіл на робити абсолютно все, в тому числі
видалити важливих файлів до і Appliance
знищити всю річ.
>> Так що це погана звичка, щоб потрапити в просто бродив навколо
Операційна система як корінь.
Я роблю це в будь-якому випадку.
Питання?
І я буду вийти корінь, залишитися, як jharvard.
ОК.
>> Більш відповідні команди.
Так повертаючись в наш темп, Команда мв виступає за хід.
Ви можете переміщати.
Тепер ми хочемо назвати це б, так що тепер це називається б.
Або, може бути ми хочемо рухатися б на один каталог вгору.
Так що тепер порожній каталогу файлів.
Я повернуся в моєму домашньому каталозі, і ми бачимо, що б це тут, тому що
домашній каталог був один каталог вгору від каталог, б був дюйма
>> Там також СР
Так ср копіювання супер розділ, точка, текст.
Я можу назвати це з, точка, текст.
Тепер у нас є і супер розділ, точка, текст, і з, точка, текст.
Це також працює з каталогами.
Я RF-ED один файл.
Так ср -
Ну, по-перше давайте спробуємо CP, ТМР, TMP2.
Так опускаючи каталогу TMP.
Так схоже на RM, поведінка за умовчанням , Щоб не працювати з каталогами.
>> І знову, як і РМ, за замовчуванням поведінка - ну, змусити його працювати
з каталогами є, тире-р від готелю.
Так скопіювати рекурсивно темп Каталог, в TMP2.
І ось тепер у нас є і TMP і TMP2, і це не те, що корисно, так як TMP
був порожнім в першу чергу.
TMP2.
>> Тепер давайте копіювати TMP в TMP2.
І ми бачимо, що tmp2 також має файл , Оскільки каталог і
все всередині, що Каталог був скопійований.
І це може бути дещо корисно якщо, скажімо, ви працюєте
з проблеми встановити один -
або насправді, пізніші домашніх завдань є ще більш важливо, тому що
буде ціла купа файлів і речей.
>> Але ви просто хочете, на частку по-друге, ви, як, все в порядку, я
збирається спробувати щось інше.
Дозвольте мені просто скопіювати всю свою pset1 Каталог, в pset1 резервного копіювання, так що якщо
Я в кінцевому підсумку загвинчування речі, я можу повернутися в мою каталозі резервних копій.
Є більш підходящі способи версіями резервне копіювання коду, але
це завжди швидкий спосіб просто зробити що у вас є копія чогось
що ви збираєтеся змінити.
>> Так луна також команда одноразовим, що вид sillily просто друкувати на
командного рядка, що саме ви хотіли б повторити.
Так луна привіт.
Ми просто надрукувати привет.
Ехо привіт світ.
Ми надрукуємо привіт світ.
Це входить у вживання, коли ви почати об'єднання команд.
>> І знову ж, не очікують, що ви повністю зрозуміти цього, але це
що подивитися.
І потім, якщо ви погуглити приклади або ви розумієте що ви хочете зробити
щось, це може бути корисно.
Так що давайте, як приклад, так лс, тире, л.
Так от я бачу вихід Л., тире, л.
І я кажу, добре, я хочу, щоб зберігати, що у файл.
Все це вихід тут, я хочу покласти в окремий файл.
>> Так що це трохи більше, ніж символ це те, що ми збираємося, щоб дзвонити.
Ми перенаправлення вихід в файл.
Давайте назвемо файл бла, тому що це те, що я, як правило, завжди називають його.
Так що тепер ми бачимо, у нас є подати бла прямо тут.
І якщо я відкрити його, я буду бачити, що це точно так виведення команди
що я просто втік.
І точно так само, можна -
якщо це вихід в файл, цей буде отримати дані з файлу.
Що таке команда, що я -
>> ЙОСИП: Я думаю, що ви можете використовувати менше або більше, напевно.
>> Роб: А як щодо просто менш бла?
Я не знаю.
Якщо ви приїхали в цей сценарій, як і є psets, що це корисно для.
>> ЙОСИП: Можна передати його в луна.
Труба файл в луна, щоб побачити його.
>> Роб: Це труба.
>> ЙОСИП: Вибачте.
>> ROB: Добре.
Таким чином, це вихід в файл.
Це отримати текст з файлу і передати його в програму.
І ви також побачите цього хлопця.
Так що це свого роду те і інше відразу.
А насправді, я познайомлю два нових команди просто використовувати його.
>> Історія являє собою зручний команда, яка просто збирається роздрукувати список
все, що я коли-небудь в командному рядку.
Отже, ми бачимо тут все, що у мене є управляє цим весь час.
Багато Ls років.
>> І ще один корисний команда Grep, що його мета полягає в пошуку більш
текст шукаєте моделей, ну, шукаю все, що ви
хочу його шукати.
І так зручно використання тут, скажімо ми хочемо, щоб захопити історію.
І я хочу, щоб шукати команд де я - те, що
корисний шукати?
>> ЙОСИП: [нерозбірливо]?
>> Роб: Або давайте просто подивіться на все стосується, з якої причини.
Так що це, що це буде виглядати.
І ви не повинні повністю зрозуміти, що.
Але ідея тут, історія дає той же висновок, що зробив тут
де це роздруківка всій Історія всього, що я коли-небудь працювати.
Ми тоді, до речі, що -
так що замість того, щоб друкувати його на екрані, ми хочемо передати, що до
Команда Grep який шукає усі примірники слова дотик.
>> І це, використовуючи цю комбінацію Історія інструменти та Grep, я бачу, в порядку,
ось всі команди я коли-небудь бігти, і ось кілька поширеним.
Ми на дні.
І це також дає мені команду Я просто побіг, що було
Слово сенсорний в ньому.
Але труба є досить корисна річ для об'єднання декількох програм.
А насправді, це ярлик для оренди мені вихід Історія подати бла, і
дозвольте мені вичленувати використанням файлової бла як те, що я хочу, щоб переглянути.
Так труба просто ярлик для цих двох команд.
Так.
>> СПІКЕР 4: [нерозбірливо]?
>> Роб: Так.
Що таке -
О.
Давайте перевіримо.
Так кішки, собаки, риби.
Тому я хочу, щоб вичленувати.
Даш, г, знову ж таки, буде рекурсивно, тому я хочу, щоб спуститися вниз
всі каталоги.
Я хочу рекурсивно вичленувати інформацію про всіх - і дозвольте мені тимчасово отримати
це з шляху.
Ігнорувати мене.
ОК.
>> Тому я хочу, щоб тимчасово вичленувати інформацію про усі примірники слова риби.
І ось, що я роблю це змісту рекурсивно для слова риби.
І зірка означає по всім з них файли в цьому каталозі.
І так він дав мені доступ заборонений, тому що це не дозволено читати, що
конкретний файл.
Але він знайшов рибу у файлі, випробування.
>> Я міг би також сказати, зокрема, тільки я хочу подивитися у файлі бла, в
цьому випадку він нічого не знайдете.
Я тільки хочу подивитися у файлі, випробування.
Він знайде рибу.
Це досить корисна команда знати в цілому.
Є кілька альтернатив для Grep , Які повинні бути більш
програміст доброзичливий, але я, як правило, як і раніше падати назад на Grep.
Питання?
ОК.
>> Чи є інші команди?
О.
Просто одноразовим той, який я завжди знайти буде весело буде кал.
Так помічають, коли я перебуваю в цей прекрасний повноекранний режим, у мене немає, як верх
Панель інструментів або що-небудь.
Так кал просто дає мені миленький календар, правильно
тепер відрізані, я вважаю.
Але миленький команда.
>> ЙОСИП: Це [нерозбірливо].
Інші команди, які ви, можливо, бачив включають брязкіт і зробити.
Ми підемо на них в більш докладно пізніше.
Але якщо ви працюєте на PSET, ви повинні бути
знайомі з тех.
>> ROB: Добре.
Питання по командного рядка речей?
Добре.
Так давайте перейдемо до деяких С-пов'язані речі.
Змінні математика.
ОК.
Так само, як ми повинні були математику в порожньому, Ви можете також використовувати математику в С.
>> Перш ніж ми перейдемо до того, що повністю, так змінні.
Пам'ятайте, що всякий раз, коли ви розкажете змінна, наприклад ціле х або флоат у, вас
повинні дати це ввести до ім'я змінної.
Так типи, які ми бачили дотепер, внутр, поплавок, двічі, довго довго, що я
насправді не знаю, якщо ми в Видно, що до цих пір.
>> Є деякі інші.
Ми бачимо символ.
Там в короткий, яка, як це протилежністю довго довго, де це
менше, ніж ціле.
Ми також бачили, рядок.
Так що особливого в рядок?
Чому я кажу, що це не зовсім, як межд?
>> СПІКЕР 4: Це дійсно не існує.
>> Роб: Так.
Таким чином, єдина причина, у нас є рядок пояснюється тим, що, коли ви робите
хеш, включають cs50.h.
І ми побачимо приклади цього пізніше - о, що не впоратися з цим добре -
де cs50.h робить щось уздовж ліній типу
визначення, символ зірки, рядок.
>> І так це говорить, що ми навіть не знаю, що символ зірки ще.
Але це говорить ми хочемо рядок.
Будь-яке місце, ви використовуєте рядок, ви можна було б за допомогою сЬаг зірку,
який насправді є одним з видів, що існує в мові Сі.
Але ми повернемося до цього.
Так, і це йде назад.
Акуратні.
>> Так само і з BOOL де справжні і несправжні.
Це дійсно не вбудований тип в С. Замість цього, це просто, це має
нульове значення?
Тоді ми просто розглянути це помилковими.
Чи має це значення -
ну, це має будь значення, яке не дорівнює нулю?
Тоді ми будемо враховувати, що це правда.
Так одна правда, два, правда, нічого нуля вірно.
Отже, це ті,.
Питання про оголошення змінних і типи змінних і все, що?
Так.
>> СПІКЕР 4: Для довго довго, в книзі, він сказав, що мав бути довгий довгий внутр.
Але просто довго довго працювати?
>> Роб: Таким чином, ці модифікатори типів.
Так внутр х.
Таким чином, ми можемо також сказати, без знака Int х.
Ми можемо сказати, коротка внутр х.
Ми можемо сказати, довго довго внутр х.
Але значною мірою будь-який з цих речей, які я тільки що сказав, без знака Int, короткий інтервал,
довго довго внутр, ви можете позбутися від внутр і він просто буде вважати,
що ви мали на увазі Int.
Так непідписаних х, які просто означає -
Ви знаєте, як правило, з міжнар, Ви можете сказати х дорівнює негативний 3?
С без знака Int, ви не можете.
>> ЙОСИП: І знову, для камери, Питання було, в чому різниця
між довгого довгого міжнар і просто довго довго?
>> Роб: Так.
Так що я майже ніколи не написати довгий довгий Int.
Я напишу довго довго.
>> ЙОСИП: Є запитання?
>> Роб: ОК.
Так нерозумно трохи нагадуванням про те, що, як ми оголошуємо змінну і ініціалізувати
змінна і оголосити ще один змінної і ініціалізації
все в одному кроці.
Таким чином, оголошення змінної і змінна ініціалізації немає
до, але може бути на тому ж рядку.
>> Тому у нас є стандартні математичні оператори що ви звикли до -
плюс, мінус, поділ, раз.
Там також модулю, який ми будемо бачити.
Існує немає, принаймні, З вбудований блок
зведення в ступінь вставки оператор.
Ну, є оператор вставки, але це не влада.
>> ЙОСИП: Але це не зведення в ступінь, Так.
>> Роб: Не використовуйте каретку припустити, що це означає
як квадрат або будь-який інший.
Таким чином, деякі речі, щоб мати на проти про розділення.
Я буду стояти.
Так заявив ініціалізації відповідь.
Так ми говоримо, поплавок відповідь дорівнює 1, поділеній на 10.
Роздрукувати відповідь до двох десяткових знаків.
>> І це та річ, що я б людині Printf щоб з'ясувати, що
якого біса робить%, точка, 2f означає?
І це просто означає,, ну, ігноруючи 0,2.
І%, е те, що ми використовуємо друкувати плавати.
0.2 говорить, друку, плавати до двох десяткових знаків.
Так ця програма має помилку, і ви, можливо, бачив це раніше в деяких
до CS Звичайно.
Але що це за помилка?
>> СПІКЕР 5: Нуль.
>> Роб: Так.
Тому, коли ми говоримо, відповідь дорівнює 1 ділиться на 10, ми хочемо, щоб
відповісти рівним 0,1.
Але 1 ділиться на 10, 1 Ціле число, 10 є цілим числом.
І тому, коли ми робимо ціле розділене на ціле число, ми збираємося повернутися
цілим числом.
Так 1 ділиться на 10 становить 0,1.
>> Оскільки вона повинна дати нам ціле, це просто збираєтеся викинути, що
коми і сказати, що відповідь 0.
І тому, коли ми друкуємо відповісти тут, він збирається надрукувати 0,00.
>> ЙОСИП: І як примітка, це насправді відкидає те, що після того, як
десяткового дробу.
Так що якщо ви замість цього повинні були 6 ділиться на 10, можна подумати, що це дасть вам
0.6, а потім ви б округлити до 1.
Але насправді, що відбувається, коли вона введіть Завдання так, що вона падає, що є
після коми.
Так 0,6 дійсно стає 0.
>> Роб: Так.
І ми будемо говорити TRUNCATE для цього.
Тому, коли ви приведений до міжнар, десяткова обрізане.
Таким чином, виправлення, що - є насправді два.
І я збираюся зробити, що другий, тому що це одне набагато легше виправити.
>> Так що виправлення використовувати поплавці в дивізіоні.
І справді, у вас є тільки зробити один з них з плаваючою крапкою.
Але це дещо ясніше всього зробити обидва плаває.
Так 1,0 поділене на 10,0 є ділення двох поплавців.
Таким чином, відповідь буде в кінцевому підсумку поплавок, і так ви будете
Правильна друк 0,10 тут.
>> Те, що не працює так добре Про те, що, ну, звичайно, це було легко
достатньо, щоб перетворити 1 до плавати, зробивши його 1.0.
Але що, якщо замість того, щоб у нас було два цілих числа як Int х дорівнює 1 і INT у
дорівнює 10, а потім ми хотіли щоб у х, поділене на у?
Так що це не легко просто зробити X.0 або щось.
>> Таким чином, виправити, щоб, що кидає.
Так лиття є способом в C для перетворення від одного типу змінної до іншого.
Таким чином, тут, 1 є цілим числом.
І, поставивши цей поплавець перед це, ми лиття 1 до поплавця.
І таким чином, це буде конвертувати 1 до 1,0.
І це буде конвертувати 10 до 10,0.
>> І тоді всі ведуть себе подібно попередня версія, яку ми тільки що показали
де, як і очікувалося, ми отримуємо 0,10 і він буде друкувати, що.
І ми можемо зробити це з змінні, теж.
Так що можна сказати, поплавок х поділене на число з плаваючою точкою у.
>> ЙОСИП: Є запитання?
>> Роб: Так само, як у звичайній математики, у нас є пріоритет операцій.
Таким чином, в математичному класі, ви, швидше за все називати його порядок операцій.
Тут, офіційний термін пріоритет операторів.
Але пріоритет операторів, або найбільш оператори, є, як ви очікуєте.
>> Так само, як у математиці, 2 рази 10 збирається бути згруповані більш тісно, ​​ніж
це 10 розділити на 2, а потім 2.
Порядок операцій, він буде робити 2 раз 10, 10 ділиться на 2, а потім
він буде робити 20 плюс 5 плюс 2.
Так що це, як і очікувалося, і ви можете використовувати дужки для групування виразів.
Ви не можете використовувати квадратні дужки для групування виразів.
Так?
>> СПІКЕР 5: Не могли б ви насправді просто повернутися одну секунду?
Чи можете ви кинути Int в рядок?
>> Роб: Так що в C, можна привести нічого Ви хочете все, що завгодно.
Це не означає, що це хороша річ, щоб зробити.
Тому, коли ви граєте Int щоб рядок, що означає -
і ми отримаємо цього набагато ретельніше -
>> ЙОСИП: Багато пізніше.
>> Роб: Я не хочу сказати, багато пізніше, тому я спробував змінити свій вирок.
Ми увійдемо в нього набагато ретельніше пізніше, де дійсно, коли у вас є
Мінлива рядок -
тому рядок може бути як завгодно довго, чи не так?
І ми говорили, що внутр є чотири байти і довго довго вісім
байт і поплавець на чотири байти.
Так рядком, так само, як Int, має тільки певну кількість байтів до нього.
І це буде чотири байти.
>> Але рядок може бути досить необмежено довго, чи не так?
Так привіт світ вже, якщо це 10 символів або будь-який інший, що вже
буде протягом 4 байта Я може поміститися в рядок.
І так, як струни дійсно працює в тому, що вони знаходяться там, де в пам'яті, що рядок
в даний час зберігається.
>> І так тут, коли я кажу, рядок х одно привіт світ, всередині х є
просто кажу, про, привіт зберігається світ саме в це місце в пам'яті.
Так що, якщо ми намагаємося кинути ціле число рядок, то ми намагаємося інтерпретувати
деякі випадкові частина пам'яті у вигляді рядка.
І це майже завжди ламає речі.
>> ЙОСИП: Але якщо це бентежить Ви, ми будемо покривати його
більш докладно пізніше.
>> Роб: Так.
Це де ви збираєтеся щоб потрапити в покажчики.
І, що є значним шматок два тижні цього курсу.
>> СПІКЕР 6: Чи працює це як об'єкти на інших мовах чи ні насправді?
>> Роб: Так на інших мовах, об'єктів будуть представлені за допомогою покажчиків.
Це не одне і те ж, все ж.
Будь-які думки?
>> ЙОСИП: Ні.
Ніяких думок.
>> Роб: ОК.
>> ЙОСИП: Наступна.
>> Роб: Просто йти з цим.
Добре.
Так по модулю.
Так само, як у нас є плюс, мінус, розділити і помножити.
Так по модулю є одним ви можете не бачили раніше.
І це якраз говорить, дають мені залишок.
Так 55% 10.
Інша частина робить 55 ділиться на 10 буде 5.
Так 55% 10 травня.
І 3% 5 буде 3.
8% 8 буде 0.
16% 15 буде 1.
>> ЙОСИП: Одна річ, з цим відзначити, теж може не працювати, як очікувалося
якщо ви використовуєте негативне число.
Так негативна 5% 4, деякі люди Можна подумати, що це -
що б ви подумали негативний 5% 4 буде?
>> СПІКЕР 5: Один.
>> ЙОСИП: Таким чином, деякі люди кажуть, що один, деякі люди кажуть, негативну.
Але те, що -
>> Роб: Я б навіть не мають сказав один з них.
>> ЙОСИП: Два, вибачте.
Деякі люди кажуть, -
>> Роб: Три.
>> ЙОСИП: Три?
>> Роб: Негативний -
те, що було - негативний п'ять -
>> ЙОСИП: Три, три, три.
Вибачте.
Тому що по модулю, взагалі кажучи, коли ви бачили його в іншому місці, це зазвичай означає,
повернутися позитивне число, чи не так?
>> Роб: Так що, коли ми говоримо в математиці,% 10 х, вони, як правило, хочуть, щоб дати вам -
якщо ми мод на 10, то ми очікуємо, що отримати номер від 0 до 9.
У тут, що це не так, що ви отримаєте повернувся від'ємні числа.
>> ЙОСИП: Так негативна 5% 4 буде негативним 1.
>> Роб: Але це рідко, що ви мо-Ing негативні числа з самого початку.
Пропустіть це.
>> ЙОСИП: Так.
>> Роб: Мех.
ОК.
Отже останнє, що потрібно відзначити, про поплавці є це небезпечну поведінку,
але поплавці не точна уявлення.
Так повертаючись до байт знову, пам'ятайте що внутр завжди чотири байти і
Поплавок завжди чотири байти.
Так приклад Лукаса досить добре.
>> Так що думайте з 1 розділений на 3.
Так 0,3333333.
Якщо у мене є тільки 32 біта, як може Я зберігаю 0,33333 саме?
І, може бути, з якоїсь причини, ви говорите, Все в порядку, добре, давайте просто скажемо,
що саме цей 1011001, давайте просто сказати, що повинно бути 0,333333.
Ну, у вас є тільки кінцеве число ці біти, так що це неможливо
представляють кожен з плаваючою точкою цінність, дана всього 32 біт.
>> Ну, це неможливо уявити будь-який з плаваючою точкою цінність, дана нескінченна -
добре, враховуючи будь-яке кінцеве число бітів.
Так що питання тут, ну, коли ми використовували друкувати до двох десяткових знаків,
ми правильно отримати відповідь 0,10.
Але під капотом, це дійсно зберігатися як можна ближче до
0.10 як тих бітів може представляти.
Чи є це на наступному слайді?
Або чи не так?
>> ЙОСИП: Так, це те, що.
>> Роб: Blegh, blegh.
>> ЙОСИП: Так, ви можете просто тягнути ноти небагато.
>> Роб: Я просто збираюся для збільшення в на останньому на що.
О, чорт візьми, це [нерозбірливо].
Так що число.
Це те, що буде надруковано якщо ми запустимо цю програму.
І зауважте, що насправді не має великого значення якщо ми тільки піклуючись про як
2:58 знаків після коми.
Як ми тільки спочатку надруковані 0,10, і саме тому ми не бачили нічого поганого.
Але як тільки ми починаємо отримувати в точніше, точне число, що це
уявляючи, ми бачимо, що вона не може точно представляють 0,1.
>> І частина проблеми тут, як, Все в порядку, все гаразд, але, добре,
по-перше, що, якщо ми спробували зробити, Відповідь дорівнює дорівнює 0,1?
Хіба що збирається повернутися вірно чи невірно?
І тому важко сказати.
Я думаю, що це насправді може повернутися вірно.
Чи буде перша -
Я не знаю.
Відповідь як тільки ви починаєте справу зі значеннями з плаваючою комою, ви в значній
багато не повинні використовувати рівність через це неточності.
>> І всі ви знаєте, що це сота після коми, що
з плаваючою точкою не зміг правильно обробляти.
І так рівність тільки не увінчаються успіхом, навіть хоча число - якби Ти був
використовуючи точні цифри, цифри повинні були точно такими ж.
Це протягом як 50 розрахунки з використанням цих плаваючих
значення точки, помилка може побудувати все вище і вище і вище, і
речі просто помилитися.
>> ЙОСИП: І були дійсно відомі приклади цього випадку.
Як інженери НАСА отримали це невірно, що призведе ракети вибухнути в
повітря після того як вони були розпочаті.
І багато таких питань, як, що.
Так що так.
>> СПІКЕР 6: Коли ви говорите, 0,3 п, це усічення решта?
Чи це округлити вгору або вниз?
>> Роб: Буде Printf навколо нього?
>> ЙОСИП: Я думаю, що Е буде скорочуватися.
>> Роб: ОК.
Так що ми можемо так само йдуть в протилежному Напрям цього, де в цьому випадку
найближчий вона може представляти 0.1 була з цим номером.
Найближчий він міг би представляють 0,2 знаходиться у протилежному
напрямок, +0,199999996356 або щось.
Так що, якщо ми пішли в цьому напрямку речі, то Е 0.3 е повернеться
1.99 замість 2.00.
>> ЙОСИП: І я не зовсім впевнений на що.
Можливо, ви захочете написати невеликий, трохи Програма просто перевірити, що.
>> Роб: Хоча, те, що ми впевнені в тому, що якби ви спробували кинути, що в
внутр, і лиття до міжнар збирається привести до його усічення десяткові, якщо
спробі привести 1.9999999 до міжнар, ви отримаєте 1.
І тому потрібно використовувати круглий функція в математичній бібліотеки.
Питання?
ОК.
>> ЙОСИП: Так як перейти до умов і логічних виразів.
Таким чином, ви бачили їх раніше.
А насправді, дозвольте мені переконатися, що мої Комп'ютер у потрібному форматі тут.
Простір.
На жаль, ми збираємося мати справу трохи з обрізанням по краях.
>> Але так, ви, хлопці, бачили це перш в порожньому.
Так що це прямо тут є вираженням , Який використовується в
умовний оператор.
Так відповісти більше нуля волі сказати вам, істинним або хибним.
І це дійсно важливо, тому що вони дозволяють нам представити
Логіка в наш код.
>> Так, наприклад, ця програма написано в порожньому, який просить користувача
для цілого числа і каже їм Чи ціле число, яке вони дали вам було
позитивне чи негативне число.
І перетворення сюди, щоб побачити це Ви спочатку роздрукувати заяву,
дайте мені ціле.
А потім ви просите у них ціле число.
>> І тоді ви використовувати умовну логіку над тут, щоб перевірити, чи є це число
насправді більше нуля чи ні.
Так от у нас є логічне вираження всередині умовного Якщо заяву.
Чи є якісь запитання?
Чи є питання про те, що?
ОК.
>> Таким чином, є більше, ніж просто більше, ніж, звичайно.
Ви можете побудувати логічні вирази використовуючи більшість видів речей, які ви
буде думати про в математиці.
Так більше.
Це повинно бути менше.
Вибачте.
І відстань.
>> Роб: не дай Бог ви залишите його.
>> ЙОСИП: Добре.
Так більше ніж, менше ніж, більше ніж, або дорівнює, менше
ніж, або дорівнює.
Ми використовуємо подвійні рівних для перевірки рівність, тому що один дорівнює кошти
Призначення, вірно?
Так.
І тоді ми зможемо також не дорівнює по використовуючи знак оклику, на рівних.
>> І цей символ знак оклику може також бути продовжений так, щоб, якщо ви хочете
інвертувати небудь Boolean вираз, ви можете зробити це.
Так що це буде оцінити в вірно тільки якщо відповідь менш
або дорівнює нулю.
Є питання з цього приводу?
ОК.
>> Таким чином, ви можете також комбінувати їх вираження, використовуючи логічні І і
Логічне АБО.
Так що це просто символ А, який повинен бути зрушення, 7.
І це символ труба, яка НЕ рядкова Л. Це один
ось прямо над вхідними ключ.
Таким чином, ви використовуєте два з них, щоб символізувати логічно І логічно Або.
>> Так що це буде повертати тільки вірно, якщо відповідь є один, два, три або чотири.
І це буде повертати тільки вірно, якщо відповідь виходить, що з обох сторін.
Так що це не один, два, три або чотири.
І те, як ви будете використовувати що в виразі -
>> Роб: Або нуль чи п'ять.
>> ЙОСИП: Нуль або п'ять.
Вибачте.
Так, так, так.
ОК.
І тут зараз, так само, як буде використовувати цей вираз, менше
вираз сторона Якщо умовно заяву, ви б також використовувати його в
Точно так же просто покласти його всередину дужки із заяви If.
Так що це Е тільки стріляти, якщо відповідь є один, два, три або чотири.
Будь-які питання по поєднуючи вирази?
>> Так що є ще один умовний конструкт ми називаємо If / Else.
Так в основному, це тепер означає, ОК, якщо те, що я хотів перевірити, чи не був
правда, потім перейти до іншої, і виконати цю іншу дію.
Таким чином, в даному конкретному випадку, я запитав користувач для цілого числа.
Чи є ціле число, більше нуля?
Так?
Ну, тоді вони вибрали позитивне число.
Якщо ні, то він повинен мати був негативним або нульовим.
Таким чином, ви вибрали негативне число або нуль в цьому випадку.
Так.
Або нулю.
>> А потім у нас також є If / Else, Якщо і інше.
Так що це дозволяє нам виконати послідовність речі тільки тоді, коли першими невдачу.
Таким чином, в цьому випадку, в даний час ми робимо останній ви обираєте нулю.
Так що, якщо вони не вибрали позитивної, ні негативне число, то вони повинні
вибрали нулю.
Так що просто йде вниз ланцюга, як це.
>> Так приклад того, як Якщо відрізняється від -
If / Else відрізняється від просто послідовність Іф.
І це загальне питання, який люди запитують, ну, якщо ви отримуєте, як
95 в CS50, що це буде Програма сказати вам?
>> СПІКЕР 5: Ви отримали А.
>> ЙОСИП: Так.
У тебе кожен один з тих, правильно.
Ви отримали А, у тебе є B, ви отримав рахунок і D, чи не так?
Так все це отримати оцінку для того.
Таким чином, у той час як 95 більше, ніж 90, це також більше 80, це також
більше, ніж 70, і це також більше, ніж 60.
Таким чином, ви отримали всі ці сорти.
І я припускаю, що ви б тільки хочу А.
>> Спосіб виправити це, щоб замінити ті, з решта / Якщо 'и.
Таким чином, у цьому сценарії, він бачить, що 95 є більше, ніж 90, і потім він робить
не оцінити залишок з тверджень.
Будь-які питання про те, що?
>> Так що є ще один умовний вид структура, яку ми маємо тут, який ми
викликати перемикач заяву.
Так що це дозволяє в принципі перевірити що значення ряду ви поклали
в розподільному заяві є.
Таким чином, у цьому сценарії, ми переводимо від п і ми говоримо, про, якщо п
один, а потім роздрукувати цю заяву.
І потім перерва, а це означає, вихід з перемикача заяві.
>> Якщо це не був один, то, ну просто зрештою перевірити всі ці випадки.
І так він перевіряє, якщо це один або два або три, і він друкує відповідно.
І те, що це ключове слово за замовчуванням тут кошти, якщо вони не ввести будь
з тих, то говорять Невірний.
Так скажімо, я прошу п і користувач дає мені чотири.
Ну, це не відповідає жодній з тих випадків, так що це буде роздрукувати те, що в
розділ за замовчуванням.
Так, питання?
>> СПІКЕР 5: Чи можна використовувати Boolean вираження замість
один, два, чи три?
>> ЙОСИП: Таким чином, питання ви можете використовувати Логічні вирази замість одного,
два, і три?
А в С, я вважаю, вам не можу цього зробити.
Але на інших мовах, які ви, можливо, зіткнутися в кінці
семестр, як JavaScript, ви можете.
Ну, вам доведеться обчислити перший що значення, а потім використовувати його в
перемикання заяву.
Так?
>> Роб: Так що частина на користь комутатора заяви буде думати про якщо ви зробили це
як If / Else, так як, якщо п одно дорівнює одиниці або будь-який інший.
Останнє / Якщо п одно дорівнює два, що завгодно.
Останнє / Якщо п одно дорівнює трьом.
Так чином програма буде працювати це буде послідовно знижуватися, що список
і перевірити, є н один?
Нє-а.
Є н два?
Нє-а.
Є н три?
Так.
Зробіть це.
>> У той час як з вимикачем заяв, це насправді в змозі зібрати, щоб це було
дуже швидко.
І як тільки він говорить перемикач, це каже, все в порядку, п два, я
негайно збирається стрибнути туди, де Я повинен почати виконання.
Я не збираюся спочатку перевірити, є п один, п два?
Він може відразу почати робити що він повинен робити.
>> І з цієї причини, він не може прийняти логічні умови.
Або ж вона повинна була б зробити послідовне, начебто, все в порядку, це н
більше нуля?
Останнє п більше 10 або будь-який інший.
>> ЙОСИП: У цьому випадку, якщо ви використовували Якщо / інакше, якщо, то перемикач буде
запустити приблизно в три рази швидше, ніж якщо / інакше, якщо.
Ми можемо організувати перемикач в таких чином, що ми не ламаються
після кожного з випадків.
Так що в цьому випадку, я розбиття Номери, які ми вибираємо в один і
дві з яких не високі цифри і три з яких велика кількість.
>> Таким чином, в цьому випадку, якщо п одно одному або двом, це вийде на випадок, а потім він буде
провалитися, бо немає перерви.
І це буде в кінцевому підсумку тут.
Так що, якщо ми вибираємо один, він буде робити Printf а потім розбити так що жоден з
це виконується.
І, звичайно, якщо вони входять в трьох або щось ще, то це буде пропускати
ті, а не піти туди, і це буде виконувати замість
відповідні лінії.
Чи є питання про те, що?
Так?
>> СПІКЕР 4: Не могли б ви отримаєте помилку, якщо вам була перерва після випадку, якщо один, але це
не їсти щось для нього зробити?
>> ЙОСИП: Таким чином, питання б ви отримуєте помилка, якщо у вас є перерва після
випадку, якщо один, але немає нічого, щоб зробити?
І відповідь буде негативною.
Ви не будете насправді отримаєте помилку.
Так, мм хм.
>> Так як свого роду невеликі зміни тут, Я збираюся поставити Printf тут.
Упс.
Отже, що б це надрукувати, якщо Я поклав одну в якості вхідних даних?
Так.
Це скаже вам, це не займе багато велика кількість в два рази, чи не так?
Тому що це буде хіт, що перший випадок, вона не буде ламатися, і вона впаде
через до другого випадку.
Будь-які питання про те, що?
>> Роб: Чи було у вас ще одне питання?
>> ЙОСИП: Добре, охолодити.
Добре.
Так що є щось ще ми називаємо потрійний оператор, який в основному
альтернативний синтаксис робити Якщо і тоді інше.
І це дозволяє робити все це в одному рядку.
Таким чином, в цій конкретній програмі, Я прошу у користувача п.
І якщо п більше 100, я говорю їх вони вибрали велику кількість.
Останнє я скажу їм, що вони взяв невелике число.
>> Так що ми можемо використовувати цю дуже довго синтаксис, Рядок, S, а потім перевірити, якщо п
більше 100 і призначити це відповідним чином.
Але ми можемо зробити це набагато більш коротким За допомогою цієї потрійний синтаксис оператора
який включає в себе питання Торгова марка і двокрапка.
Таким чином, знак питання по суті задати питання, чи не так?
>> Роб: Може бути, збільшити на що.
>> ЙОСИП: Так.
Хороше питання.
Так що це потрійний оператор.
Я спочатку поставити запитання, п більше, ніж 100?
Якщо це так, то я виконаю перший частину перед двокрапкою.
Якщо це не так, то я виконаю Друга частина після двокрапки.
Так, якщо п більше 100, Потім він вибирає високу і ставить
що в рядок с.
Якщо п менше 100, він вибирає низький а потім поміщає це в рядки с.
Так що буде конденсуватися цей великий шматок вниз, в тій єдиній рядка.
>> СПІКЕР 5: Це популярні?
>> ЙОСИП: Так, це є досить популярним для речі, де, по суті, які ви хочете
у завдання на основі свого роду стані.
І в цьому випадку, ми намагалися щоб привласнити значення рядка с.
Це не так -
Я думаю, я насправді не воліють це в інших випадках.
Але це особливо корисно для цього завдання.
>> Роб: Це досить поширена схема де у вас є змінна, яка
ви збираєтеся сказати, якщо щось, встановіть ця змінна одному значенню; інакше покласти
ця змінна на інше значення.
І це сценарій де використовувати потрійний.
>> ЙОСИП: І ви економите багато ліній, вірно?
І це тільки робить ваш код, можливо, трохи більш читабельним.
Так, питання?
>> СПІКЕР 6: Для потрійних, могли б ви піти, одно рядок з сек, знак питання?
І тоді ви могли б, скажімо, п'ять різних варіантів.
І залежно від того, що кількість п був, що б ви вибрали один з тих?
>> ЙОСИП: Так питання в тому, чи є роду синтаксису де ви можете зробити рядок
з одно п, а потім більше двох опції після цього знак питання?
І проста відповідь: ні, ні дійсно хороший спосіб зробити це, якщо тільки
Ви хочете гніздо багаторазового потрійних оператори всередині один одного.
>> Ви могли б зробити, як п більше 100, знак питання, а потім ще
потрійний оператор, п більше 50, знак питання, і гніздо його таким чином.
Але в цьому сценарії, ваш код це отримувати вид нечитабельним, і брудний,
і було б краще просто піти в If / Else заяву в цій точці.
>> Роб: А також, як примітка боку, PHP неправильно реалізує потрійний
оператор, що вкладені Тернар навіть не працюють так, як повинні.
>> ЙОСИП: Так.
Так що стає трохи заплутаним, особливо, коли ви йдете
на різні мови.
>> Роб: Це помилка досить, що мови неправі про це.
>> ЙОСИП: Так насправді, просто щоб уточнити, чи всі знають, що це
% С робить тут?
Будь-які питання про те, що?
Я думаю, тільки для камери,% з в основному дозволяє нам поставити заглушку
на рядок.
А потім в кінці, ми вказуємо, що Мінлива ми хочемо поставити в це
місце тримач с.
Так що в основному приймає сек і це ставить його в тут.
І тоді це буде роздрукувати, ви вибрали висока або ви вибрали менше число.
ОК.
>> Так петлі дозволяють виконувати речі круговими рухами, чи не так?
Ви, можливо, зіткнувся з цим в Подряпини у вигляді Назавжди петлі
або Повторюйте До або Повторити зокрема кількість разів.
Так чому це добре для нас?
Ну, в С,, у нас є це пісня реалізовані в порожньому, що
співає, це пісня який ніколи не закінчується.
Це просто йде вперед і вперед і на віки віків.
Ну, ви не можете дійсно зробити програму що має нескінченне число Printf
заяви в це, правильно?
>> Таким чином, в даному конкретному випадку, в одну сторону що ви могли б зробити цю роботу і
для того щоб висновок назавжди є замість цього використовувати той час як цикл.
Так Хоча цикл буде виконуватися що в тілі двох фігурних дужок, що
належить йому на підставі того, що умова.
Таким чином, в цьому конкретному прикладі вище, якщо ми хочемо надрукувати це назавжди, що
ми могли б зробити?
Ну, звичайно, не так?
>> Так що це свого роду поєднує в собі ідею деякого логічного виразу
разом з петлею.
І ми дізналися про булевих вираження раніше.
Тому, коли умова всередині що то час залишається вірним, цей цикл
буде виконувати далі і далі і далі.
І в цьому випадку, якщо ми просто поставити його з правдою, це викликає нескінченне
петля, яка друкує пісню і на і на як ми бажали, перш ніж без
що має програму, яка має нескінченну кількість Printf звітності, яка є
неможливо.
>> Так переконливіше, хоча, Ви можете використовувати це з
змінної і стан.
Так скажімо, ми хочемо повторити Фраза, абсолютно неосудним, 10 разів.
Так що ви можете зробити з While петлі Ви можете ініціалізувати лічильник
змінна за межами У той час як цикл до 10.
І то переважно, кожного разу ви йдете через час циклу, ви роздрукувати
заяву, а потім ви зменшуєте змінна-лічильник до наприкінці,
в якийсь момент, як тільки ми віднімаємо I досить раз, 1 з I достатню кількість разів -
і просто уточнити, я мінус мінус означає, що я дорівнює I мінус 1.
>> Це буде в основному приносять I до Точка, в якій, як тільки я потрапив нулю, це
не стан вже не так і так що виходить з петлі.
Так абсолютно неосудним друкує тільки 10 разів.
Будь-які питання про деякий час циклу?
ОК.
>> Так що є спосіб, яким ми можемо робити те, що ми просто зробив в більш стислій формі з
що ми називаємо Для циклу.
Так петля Для складається з ініціалізація, умова, і
оновлення, так само, як у нас було раніше в цей час циклу.
Так що давайте поглянемо.
У цьому час циклу, у нас були ініціалізації, тоді ми повинні були
стан, що ми перевірили.
І тоді ми повинні були поновлення крок на самому верху.
>> З петлею для, це в основному бере ці три речі і конденсується
вниз, в одному рядку.
Таким чином, перше, що він робить у Для циклу є ініціалізація.
А потім ви з комою, а потім Ви робите умова, яку я
більше нуля йде туди, і потім крок оновлення.
Так що це отримує здійснюється на самого кінця тіла циклу.
Таким чином, ці дві програми по суті, еквівалентні.
>> Є питання?
Так що одна відмінність між цими двома?
Може хто-небудь вказати на це?
Це може бути трохи тонше.
Це просто дуже невелика різниця.
Так?
>> СПІКЕР 5: Ви не могли б використовувати змінна Я межами цикл
[Нерозбірливості]?
>> ЙОСИП: Абсолютно вірно.
Так що це те, що ми доберемося до пізніше назвав мінлива область.
Але по суті, це десяткового I життя за межами цього час циклу.
Тому, як тільки це Хоча петля робиться виконання, я буду в змозі використати я пізніше
на в програмі.
>> У той час як з цим Для циклу, це внутр Я задається область всередині цього циклу.
І оскільки він знаходиться всередині цієї частини петлі для, який починається
в дужках і закінчується фігурна дужка там.
Все, що оголошується всередині тут не може бути використана поза.
Так що, якщо я намагаюся використовувати I межами, воно буде скажіть, неоголошену символ.
І по суті, я б не став бути в змозі використати його.
>> Роб: І добре, 10 років тому, в буквально всі випадки, фігурні дужки є
що ви використовували, щоб визначити, видимості змінної.
Так там, Int я дорівнює 10 оголошений всередині цього
набір фігурні дужки.
І так то до тих пір, як ви намагаєтеся використовувати I до цього фігурної дужки, це прекрасно.
Ви можете побачити, коли ви набираєте зробити, вам см. тире, тире, STD, одно, C99.
>> Так що це більш пізня версія C, що GCC реалізував, що також дає
цей ярлик.
Так що це використовується для не пустять в С. А Ви можете зрозуміти, чому, тому що це внутр
Я знаходиться за межами цього фігурної дужки, але він як і раніше вважається в
Масштаби цих фігурні дужки.
Але це дуже зручна річ, і тому він є хорошим продовженням.
>> ЙОСИП: Є запитання?
ОК.
Так в чому ж корисніше, що іноді Ви хочете роду динамізму в
ваш цикл, чи не так?
Ви ж не хочете, щоб просто обов'язково друкувати повністю неосудним весь час, ви
хочете відраховувати від 10 або щось.
І тому ви можете використовувати змінну лічильник Усередині цього циклу, а також.
І в цьому випадку, ця програма просто відлік від 10 до упору.
І що це не друкувати?
Це не друкує нулю, Добре, тому що, коли -
Так, це також не друкує 11.
>> Так що не друкує нулю, тому що, коли Я дорівнює нулю, пам'ятайте, він оцінює
умова перш ніж він йде на виконати тіло циклу.
І коли я дорівнює нулю, це невірно, тому він не роздруковувати відлік
нулю, він просто друкує рахунки вниз 10 все, аж до 1.
Якщо ми насправді хотіли, щоб роздрукувати нулю, то ми б поставити знак рівності
після цього більше, ніж знак.
ОК.
>> Так один із способів зробити перевірку вхідних даних, які коли ви попросите користувача робити
щось, ви хочете переконатися, що вони слідувати вашим вказівкам, полягає у використанні
У той час як цикл, чи не так?
Таким чином, в даному конкретному випадку, я прошу для позитивного числа, а потім я
очікує введення.
>> А потім я перевірив Хоча вхід менше нуля, продовжують запитувати їх.
Так що, поки вони дають мені номер що не є позитивним, запитують,
продовжувати запитувати, продовжують запитувати.
Але те, що є свого роду дивно про це?
Або те, що, здається, не оптимальна про ця структура прямо тут?
Будь?
Так?
>> СПІКЕР 6: Ви повторюючи інструкція двічі.
>> ЙОСИП: Вірно.
Тому у нас є два Printf заяви тут, чи не так?
Так що є спосіб, яким ми могли б отримати це просто до одного, що б зробити наш
Код легше читати і трохи більш чистою.
І тоді ми не мали б вже Отримати в два рази, а також.
І один із способів ви можете зробити це за допомогою Зроби While Loop.
>> І Зроби Хоча цикл в основному інша форма якийсь час циклу, де
все, що всередині фігурних дужок запускається на виконання принаймні, один раз.
Так тут, я заявляю, внутр вхід, поза першою.
А потім я просто сказати, зробити це Інструкція тоді як вхід
менше нуля.
Так він потрапляє в робити в першу чергу.
Він завжди буде виконувати це принаймні один раз, так буде завжди попросити користувача
для введення хоча б раз.
А потім він оцінює цей вхід, і це продовжується по колу.
Так, питання?
>> СПІКЕР 6: Чи є спосіб зробити це [Нерозбірливості] типи, як, якщо ви говорите,
GetString, і хтось [нерозбірливо]
чи є спосіб, щоб [нерозбірливо]
>> ЙОСИП: Так питання в тому, чи є спосіб зробити перевірку вхідних даних, якщо користувач
не ставить в праві тип змінної?
Так що, якщо ми просимо для міжнар і вони дати нам рядок замість.
І у функціях, які ми реалізуємо для вас, GetInt, GetString у всіх
ті функції, вони насправді вже робити такого роду базової системи введення типу
перевірка під капотом.
Так що якщо ви використовуєте функції, які ми дав вам, ви дійсно не повинні.
>> Але якщо ви хочете, щоб виглядати більш про те, як ви реально можете зробити це, ви можете подивитися
під капотом на файл I/O--
неподавання, стандартні функції вводу / виводу як читання зі стандартного вводу і
стандартний висновок.
І ви можете отримати краще уявлення про те, як ви могли б зробити це.
>> Роб: Одне з питань, тим не менш, саме на прикладі ви
сказав, ви очікуєте рядок і я ввести Int.
Як би ви сказати, різниця між навмисно бажаючи
Рядок 123 проти бажаючи десяткового 123?
не так рядок, це в значній мірі немає ніякого перевірка, це просто те, що вони
вступив ви інтерпретувати у вигляді рядка.
>> Int легше, тому що незалежно від того, вхід ви берете від користувача, ви
завжди приймаючи рядок.
І так, що рядок, яку ви можете потім перевірити, всі з них
фактично цифрам?
>> ЙОСИП: ОК.
Будь-які питання про зроби той час як цикл?
>> Роб: Так, і це теж -
повертаючись до області, кілька загальних помилка намагається використовувати деякі місцеві
змінна зсередини цієї Do-While петля всередині цього умови.
А насправді, якщо ми просто позбулися це і сказав, внутр вхід дорівнює
GetInt, то компілятор буде кричати на нам, тому що вхід не існує
за межами рамки ці фігурні дужки.
>> ЙОСИП: І саме тому ми потрібен цей модельний ряд тут.
ОК.
Таким чином, ви можете також вийти з цикл рано, якщо ви хочете.
Так що це інший спосіб реалізації, що ми просто реалізується.
І замість того, використовуючи умову в дужках, ми використовуємо
Якщо заява всередині тіла з Зроби той час як цикл.
>> А в принципі, коли вхід нарешті більше нуля, то ми будемо
вирватися з петлі.
І тому ми будемо з усіх аж тут.
І ви можете бачити, що це буде ймовірно бути кращим у цьому
сценарій, тому що це трохи трохи чистішим і трохи
біт легше читати.
У той час як це, ви як би є зайві рядки в ньому.
Це просто трохи потворніше, Я думаю, в деякому сенсі.
Так, питання?
>> СПІКЕР 4: ламається тільки отримати Ви з одного набору дужок?
>> ЙОСИП: Вірно.
Таким чином, питання зламає тільки щоб ви з однієї петлі?
І відповідь буде позитивною.
Так що якщо у вас є вкладені цикли, для Наприклад, якщо у мене є Для внутр я дорівнює 0
до 10, а потім Для Int J НЕ дорівнює 0 до 10, якщо я вирватися з внутрішньої
цикл, я все одно буду йти до зовнішньої петлі.
Так що буду продовжувати виступати операції на вулицю.
Будь-які питання про те, що?
Так?
>> СПІКЕР 5: Але зламати тільки функції для фігурних дужках, не для інших
заяви?
[Нерозбірливості]
>> ЙОСИП: Таким чином, питання буде перерва тільки функція для петель на відміну від
інші заяви, якби?
І так, це так, тому що ви порушуєте з циклу, праворуч,
в деякому сенсі.
>> Роб: У переважній більшості випадків, це це свого роду, якщо щось,
потім перерва.
Так що вам не доведеться ламати звернутися в Якщо це обертає навколо нього.
А також, це не так багато з петлі, але пам'ятайте, що перемикачі також
вирвався з перервами.
Ми бачили перерви використовуються з перемикачами раніше.
>> ЙОСИП: І ви також можете використовувати їх в той час як петлі і для петель.
Є питання?
ОК.
Так що наступного до є функції.
Таким чином, ви, можливо, використовував один з цих BYOB блоки у вашій подряпин проекту.
І це в основному дозволяє визначити набір
інструкції, яким необхідно слідувати.
>> І те, що я маю на увазі, що це давайте подумаємо повернутися до математики, право, алгебра.
У вас є те, що ми називаємо функцією х, деяка змінна, і скажемо, це
функція е х одно х плюс 5.
Таким чином, ви можете думати про е х а ця чорна вікно, в якому візьмуть 15 в, а потім
виробляє 20.
>> Так більш загально, функція те, що займає кілька входів і
потім виробляє деякі виходи.
І чому функції добре?
Вони хороші для цілого ряду причин.
Чи означає хтось хоче прийняти удар на те, що організація означає?
З точки зору того, чому функцій корисним?
Так?
>> СПІКЕР 4: Це робить ваш код більш читабельним.
>> ЙОСИП: Вірно.
Таким чином, одна з речей, це робить Ваш код більш читабельним, чи не так?
Замість того, як Int х одно х раз х раз х, у мене може бути куб х,
який є більш зручним для читання і більше зрозумілою для читача.
>> Організація також з точки зору розділивши свій код у керованій
частини, так що замість того, щоб реалізувати це все в одному довгий відрізок
в основному, ви можете роду розділити його в, як, в порядку, давайте напишемо функцію
в куб щось, давайте напишемо функціонувати в квадрат щось.
Таким чином, ви можете розбити його на крихітні, маленькі деталі, які ви можете вирішувати
на відміну від намагається боротися велика проблема все відразу.
>> Роб: Або навіть крихітні, маленькі деталі, які Ви і партнер може вирішувати.
>> ЙОСИП: Так.
>> Роб: Таким чином, замість обох Ви намагаєтеся впровадити один
функціонувати одночасно.
>> ЙОСИП: Спрощення.
Хто-небудь хоче зробити припущення?
Так?
>> СПІКЕР 5: Більше повторення.
>> ЙОСИП: Вірно.
Таким чином, одна річ, яку ви можете зробити з спрощення в тому, що це свого роду на
тією ж схемою, повторного використання в тому, що як тільки я написати функцію куба, я можу
просто використовувати, що знову і знову і знову знову в моїй програмі, а не вводити
х раз х раз х більш і знову і знову.
І спрощення тут також просто означає, що вона робить ваш код роду
простіше налагоджувати, як тільки ви розділити це до по функціях.
Бо тоді ви можете локалізувати WHERE Ваші проблеми роду є.
Є питання?
>> Так ще одна ідея є абстракцією, чи не так?
Це чорний ящик.
Як ви знаєте, що GetInt робить отримувати введення від користувача?
Ми ще не сказав вам, чи не так?
Все, що ми сказали вам, GetInt робить саме те, що він говорить, що робить.
Таким чином, навіть якщо ми не розповімо вам, як це працює, ви будете знати.
>> Таким чином, в даному випадку, це четвірка функція, яка робить
різні речі для входу для отримання висновку.
І ви можете в чотири рази ряд шляхом множення його на чотири.
Або ви можете, що ми називаємо трохи зрушити його на два.
І ми поговоримо про це трохи пізніше.
І немає ніякої необхідності знати, як це Функція насправді працює, поки його
працює як заявлено.
>> Так під капотом, я міг би бути як, повернутися вхідні раз
вісім ділиться на два.
І ви не знаєте, чи не так?
Все, що вам потрібно знати, це те, що він говорить.
Так ось корисна річ про абстракції.
>> І ось ще що є свого роду ця ідея локалізувати свій код до одного
Окремий розділ.
Так що якщо у вас є проблеми, ви не повинні піти на всьому протязі Вашого коду намагається
виправити, де проблема була.
Таким чином, в цьому випадку, я реалізував куб неправильно.
Я думав, куб був множення на три.
>> Таким чином, в даному випадку, це одна програма що просто вже множення на три
скрізь.
І є ще одна програма, яка має факторізовать куб з в функцію.
І ось тепер, якщо я хочу, щоб виправити свою помилку тут, я повинен виправити кожну лінію
коду в цій програмі.
У той час як, з іншого боку, якщо я використовую Функція, мені потрібно тільки змінити
що було не так в одному місці.
>> Таким чином, в галузі інформатики, ми подзвонити входи і виходи.
Входи називаються параметри або аргументи, і виходи називаються
повертати значення.
І ми побачимо, як це допомагає нам розібратися з визначення функції в секунду.
Так що це визначення функції для Cubing.
Таким чином, він приймає вхідний сигнал, а потім він повертає, що число раз
Сам три рази.
Так що давайте розірвати цей вниз.
>> Тому у нас є заголовок функції, яка в основному складається з трьох речей.
Тому у нас є параметри, які , Як я вже говорив,
Входи в цій функції.
А потім ми даємо функції ім'я.
У цьому випадку він називається куб.
А потім ми визначаємо, які типу з повертається значення.
>> Таким чином, в цьому випадку, моя функція куб бере у вигляді цілого числа, і це також
повертає ціле.
Так що, якщо я проходжу в два, два є цілим числом, вона повертає вісім мені, що
є цілим числом.
Так повертати параметри ім'я типу.
Питання про те, що?
>> А потім повертається значення насправді вказано наприкінці, кажучи повернення
, А потім повертаються всі містить повертається значення.
Таким чином, в цьому випадку, якщо ми поставити все це разом, функція приймає в
параметри, це називається і те, і вона повертає щось, що тип
що ми говоримо, що це збиралося бути.
Є питання?
>> Так як же нам використовувати функцію?
Ну, ми напишемо функцію, а потім ми використовуємо його в нашій програмі, чи не так?
Так що я назвав його куб, і то я можу використовувати куб.
>> Але, що важливо відзначити, є те, що порядок важливий.
Якщо у мене є куб нижче основної, це збираєтеся працювати в кубі.
І в цей момент, немає нічого називається куб в програмі, і це
просто буде схоже, у мене є ніяка ідея, що куб ні.
>> Так він розповість вам, неявна декларація функції.
Це помилка, що з'являється.
І тому в даному випадку, куб нижче Основний, так що не збирається
знати про це.
>> СПІКЕР 5: Так головний, як правило, остання функція визначена?
>> ЙОСИП: Так питання в тому, є основним зазвичай останній
річ, яку ви б визначити?
І немає.
Це тому, що ми зазвичай подобається головний щоб бути на вершині, чи не так?
Тому що це перше, що ви хочу відкрити програміст
Програма бачити.
І так як ми вирішити цю проблему ми хочете основний, щоб бути на вершині, але
функції, які ми хочемо, ми хочемо їх бути нижче основної ще бути в змозі використати
їх всередині основної?
>> Ну, ми використовуємо те, що ми називаємо прототип функції.
Так що прототип функції істотно чи є це першим бере те, що
підпис або заголовок функції з того, що ми хочемо реалізувати вниз
тут, і ми розмістили його на верхня частина програми.
>> Так що в цьому випадку говорять, що, мовляв, пізніше в нашій програмі, ми збираємося
давати обіцянку реалізувати це Функція називається внутр куб, який приймає
ціле вхід.
Так що тепер, тому що це вище основної, Головний, він збирається сказати, ой, ну,
пізніше в програмі, що буде там, щоб я міг звертатися до нього, так що я буду
просто дайте їй пройти через на даний момент.
>> А потім на дні, ми реалізуємо куб.
А потім головний просто скажу, добре, він буде свого роду сполучною ланкою
ці два символи разом.
І ми розповімо, що це означає надалі.
І так будете знати, що це Функція куб, який він повинен використовувати.
>> Роб: [нерозбірливо] про бажання Основний внизу або
кращих, я бачив й інше.
Є речі, які так само, як поставити основний внизу.
Але як тільки проект отримує особливо великий, зазвичай основний знаходиться в
подати всі свої власні.
І в цей момент, як внутр куб лінія буде -
всередині stdio.h купа ліній просто так міжнар
куб внутр лінійний вхід.
>> І тому ці прототипи речей, які ви як правило, покласти у файли заголовків, в
чого, це не має значення.
Ну, це не має значення.
Ті, завжди йдуть у верхній частині.
І якщо основний не є файлом всі свої власні, Ви не повинні хвилюватися про приміщення
Окремі прототипи функцій у файлі.
>> ЙОСИП: І ми повернемося до цього трохи Трохи пізніше, коли Роб починає говорити
про компіляції.
І таким чином, є також різниця між параметром і аргументу.
І параметр саме те, що ми називаємо ці входи, коли
визначимо функцію.
І ми називаємо це аргумент, коли ми насправді передати його в функцію.
>> Таким чином, в даному випадку, це параметр, як ми вже говорили раніше.
І коли ми насправді використовувати його там, куб х, то х саме по собі є
що ми називаємо аргумент до функції куба.
>> Роб: Так аргументи параметра є -
є це розходження, дуже плутати взаємозамінні.
На даний момент, для мене, це як один з ці слова, що, коли я бачу його в
дикий, я не можу допомогти, але відразу Питання про те, що вони використовують його в
правильний контекст, тому що Різниця в тому, досить тонкі, що просто
всі схильні -
Я майже завжди говорю аргумент незалежно від того, що я маю на увазі.
>> Йосип: і функції також корисні за те, що ми називаємо побічні ефекти.
Так функція не може приймати ніяких входів, і він не може також призвести жодного виходу.
Таким чином, в даному випадку, я визначення підпрограму, яка має ще
повертати значення.
А для того, щоб вказати, що ми використовуємо що ми називаємо порожнечу тут.
І так побічний ефект цієї функції є те, що він просто друкує матеріал
до цієї сторінки.
Це насправді не приймати будь входи, і це не робить
насправді виробляють ніяких виходів.
>> Але це може бути корисним у тому сенсі якщо ви хочете, наприклад, налагодження
щось у вашій програмі, якщо ви хочете написати невеликий підпрограму, яка
друкує, скажімо, зміст пам'яті або щось.
І так ці побічні ефекти іноді корисно поза контекстом
просто подобається входи і виходи.
Є питання?
>> І в кінець даний конкретний ділянку, що ж це програма?
Я дам вам, хлопці пару секунд, щоб прочитати його.
На самому базовому рівні, що ми хочемо сказати, що це міняє х і у, чи не так?
>> Так як багато хто з вас насправді думаю, це буде обміняти х і у?
Підніміть руку.
Ніхто.
ОК.
Хто думає, що він буде не змінити х і у?
І сума, яка була не вся кімната.
Таким чином, деякі люди не впевнені.
ОК.
Це розумно.
>> Так що давайте йти через те, що відбувається, коли ви насправді викликати функції спочатку в
для того, щоб відповісти на це питання.
Так що це те, що пам'ять роду виглядає.
Це ніби як спрощеної моделі про те, що пам'ять виглядає, коли
ви запускаєте програму.
Так що те, що називається стек сюди і
те, що називається купу.
І ці ростуть назустріч середина пам'яті.
>> Таким чином, в даному конкретному випадку, коли Ви викликаєте функцію, це
отримує покласти в стек.
І тоді все, що міститься в тому, що Функція залишається в тому, що ми називаємо, що
кадр стека функції.
І так, щоб отримати хороший візуалізацію це, let's - наприклад, у нас було
Програма основний раніше.
І всередині основної, ми назвали куб.
Так головний б спочатку піти в стеку кадр, тому що це перша функція
це називається.
>> А потім, коли куб називається всередині Головний, він отримує поставити на вершині головної
всередині пам'яті.
Так що ви помітите у тому, що куб є свої власні параметри і її
власні місцеві жителі.
Тому, коли ви насправді щось передати функція, параметри, які він
отримує копії того, що було передається з основною.
>> І начебто пояснити це, давайте пройти через програми.
Тому у нас є стек, це тільки частина стека.
І те, що ми робимо, ми спочатку ініціалізувати х і у в один і два.
Тому у нас є ці маленькі коробочки.
Вони сидять в стеку Головна автора кадр в стек.
Вони містять один і два.
>> Зараз ми називаємо підкачки.
Що відбувається, є проходимо х і у в своп і своп створює свої копії
з тих змінні для використання всередині її кадру стека.
Так що тепер там, у нас є, які містить значення, х мав, і б,
який містить значення, яке у мали.
Так один, два.
>> І ви помітите, що це окремий від х і у, всередині основної.
Таким чином, ми тепер створити тимчасовий змінна містить.
Покладемо а одно б, так що зміни від одного до двох.
І те покладемо б рівну до темп, який є одним.
>> І то зараз ми виходимо з з цієї функції.
При виході з функції, кадр стека отримує з стека.
Ми називаємо це натиснути.
Ви натискаєте кадру стека в стек і ви поп, якщо з стека.
І так, що відбувається це все, що був у цьому кадрі стека роду просто
йде у вогні.
НЕ І так, що більше не існує.
>> Але що ми помітили?
Ми ніколи фактично змінив значення х і у, вірно?
Так що ті, залишився локальним для основної.
І, передавши речі в своп, ми насправді ніколи не міняв ці цінності.
І що ж ми називаємо це?
Ми називаємо це проходження за значенням.
>> Таким чином, в C, коли ви проходите речі в Функції, він передає їх за значенням і
робить копію них функція у використанні.
А ми будемо знати про щось під назвою передача за посиланням пізніше, але це
як ви можете вирішити цю проблему.
Але ми не будемо турбуватися про що до пізніше.
>> Роб: А насправді, цей термін, проходження за посиланням, і С не має навіть
проходячи повз посилання.
З виключно має передача за значенням.
Незалежно від того, що ви робите, ви не завжди проходячи копію чогось.
Це просто, що, як і я, звичайно, згадав що раніше з покажчиками
і що рядок насправді просто чотири байт вказуючи куди-небудь в пам'яті.
>> Ну, якщо у мене є цей рядок, і це говорив мені, що те, де рядок -
добре, якщо у мене є цей покажчик, щоб це розмістити в пам'яті, то я можу передати
Копія цього покажчика на функцію, і що функція все ще знає, де в
пам'яті це.
Так як з цих покажчиків повинні бути звернені на те ж місце в пам'яті і
ось як ми збираємося бути в змозі змінити речі поза
поточний кадр стека.
>> ЙОСИП: Ви хочете зробити компіляції?
>> Роб: Ні, це 5:30.
>> ЙОСИП: ОК.
Це 5:30.
ОК.
Так ми покриємо компіляції Я думаю, в Наступний розділ, або ваш розділ
лідер буде в цій точці.
І -
>> Роб: Є запитання?
>> ЙОСИП: Є запитання?
Так?
>> СПІКЕР 5: Використання рядків з CS50, будь-яка функції, які ми хочемо використовувати для
ті, що буде, як функцій C.
CS50 не пішов в і зробив будь-які додаткові.
>> ROB: Правильно.
Будь-який з С, як ви [нерозбірливо] буде використовувати ті на наших струн.
>> ЙОСИП: І останнє, що я хочу Згадка в тому, що у нас є керівництво по стилю
для цього класу.
>> Роб: О, так.
>> ЙОСИП: Так що, якщо ви приїхали з програмування фон і раніше, ви
можуть мати певні угоди, коли ви пишете код, як покласти
дужки на одному рядку або зокрема способи відступів
або іменування змінних.
У цьому класі ми хочемо слідувати конкретних стиль керівництва тільки тому, що,
добре, якщо ви виходите і працювати в промисловість, ви збираєтеся очікувати
слідувати керівництву стилю Компанія, з якою ви йдете в.
>> Як, наприклад, Facebook, я думаю, має особливе роду іменування
Конвенція.
І є відмінності між верблюда обсадні змінні і так само, як
розділяючи їх підкреслення.
А також, я думаю, найголовніше, як наприклад, відступи, чи не так?
>> Ми фігурні дужки почати, де умова, і вони
є на наступному рядку.
І ми також покласти фігурні дужки в навіть якщо це тільки одна лінія.
І багато разів, є способи зробити це де ви можете залишити ці дужки
, Якби це тільки одна лінія за твердженням If.
Але в цьому класі, ми хочемо слідувати конкретних стиль керівництва тільки так ви отримаєте
використовується для такого роду речі.
>> Роб: Так, і стиль 50 збирається життя це керівництво по стилю, і ми
збираєтеся використовувати стиль 50 до ступеня коді.
Так що робить речі простіше для нас, і сподіваюсь, не повинні робити речі, які
набагато гірше для вас, враховуючи стандартизований стиль не повинно бути,
нереально.
>> ЙОСИП: І, нарешті, знайти свій стиль гід, перейдіть до manual.cs50.net/style.
І так.
>> СПІКЕР 4: Ви збираєтеся провести в життя будь-які символи в рядку?
>> Роб: Так.
>> ЙОСИП: Вибачте, хлопці.
>> Роб: Це як один з єдиних.
На даний момент, я в порядку з 120.
Я в порядку з висловлюванням 120 символів в рядку.
Я розумію, що бути якийсь межа.
Я думаю, що 80 настільки мала, але ми в життя його.
>> ЙОСИП: Особисто я думаю, з З 80 символів більше ОК.
Як тільки ви почнете одержувати в іншому Мови, як JavaScript і PHP, а не
так розумно просто обмежити це до 80 символів.
ОК.
Ну, це було супер розділі.
Хто-небудь хоче цукерку?
>> СПІКЕР 4: Так.