1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Раздзел праблеме Set 2: Hacker выданне 2 00:00:02,670 --> 00:00:04,910 Роб Боуден, Гарвардскі універсітэт 3 00:00:04,910 --> 00:00:07,410 Гэта CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Дык вось, я Роб. Я старэйшы ў Kirkland. Гэта мой трэці год TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Гэта першы раз, калі мы мяняем ад традыцыйных лекцый стыль падзелу, 6 00:00:22,220 --> 00:00:25,610 дзе мы толькі часткова водгук, што адбылося ў лекцыю, а затым вы, хлопцы, задаваць пытанні, 7 00:00:25,610 --> 00:00:32,250 Цяпер, каб быць нашмат больш праблем на аснове, дзе мы выкарыстоўваем прасторы, і - 8 00:00:32,250 --> 00:00:37,410 О, так ідэя пайсці ў ссылку, што Я паслаў цябе, і тады вы будзеце ў маім прасторы. 9 00:00:37,410 --> 00:00:42,410 Хто-небудзь няма ноўтбука? Добра. 10 00:00:42,410 --> 00:00:47,050 Такім чынам, мы будзем выкарыстоўваць гэта, і мы збіраемся рабіць праблемамі жывуць у раздзеле 11 00:00:47,050 --> 00:00:50,740 і абмяркоўваць іх і высветліць, што здарылася 12 00:00:50,740 --> 00:00:56,390 і я мог бы падцягнуць некаторыя з вашага кода, і я мог бы абмеркаваць вашыя ідэі. 13 00:00:56,390 --> 00:01:02,140 Так хто-небудзь з працай? 14 00:01:02,140 --> 00:01:07,000 Вы можаце мець зносіны на бок, я не ведаю, калі мы будзем мець падставы для гэтага. 15 00:01:07,000 --> 00:01:12,270 Цяпер, як і ў папярэднім supersection, калі вы былі ў гэтым класе, вы ведаеце, што гэта а. 16 00:01:12,270 --> 00:01:19,200 На ўсіх мностваў P там будзе ў гэтых раздзелах. 17 00:01:19,200 --> 00:01:22,550 Такім чынам, P-набор 2, спецыфікацыі, я думаю, вы бачылі гэта на P-1 ужо мноства. 18 00:01:22,550 --> 00:01:27,400 Але мы можам паглядзець на P-камплект 2 за тое, што мы збіраемся ісці на сёння. 19 00:01:27,400 --> 00:01:29,460 І вы ўбачыце профіль пытанняў. 20 00:01:29,460 --> 00:01:37,530 Такім чынам, гэта будзе ва ўсіх P-мностваў, там будзе профіль пытанняў. 21 00:01:37,530 --> 00:01:41,340 Да гэтага часу мы казалі, "Разгледзім гэтую магчымасць на практыцы". 22 00:01:41,340 --> 00:01:44,940 Вы не будзе прапанавана прадставіць гэтую праграму. 23 00:01:44,940 --> 00:01:48,480 Ідэя складаецца ў тым, што гэта, як мяркуецца, выгляд дапамагчы вам пачаць з праблемай набору. 24 00:01:48,480 --> 00:01:53,220 Я думаю, на Hacker выданне, многія з іх павінны быць проста новыя, цікавыя рэчы, каб вучыцца. 25 00:01:53,220 --> 00:01:58,590 Яны не могуць быць непасрэдна дастасавальныя да праблемы набор. 26 00:01:58,590 --> 00:02:01,810 І зараз мы не маюць вы прадставіць іх, але ў тэорыі, 27 00:02:01,810 --> 00:02:07,480 для наступнага мноства праблем, вы можаце прадставіць іх, і такім чынам, вы можаце прыйсці да падзелу 28 00:02:07,480 --> 00:02:10,380 або паглядзець профіль, каб атрымаць адказы на пытанні, ці вы можаце проста атрымаць іх па сваім меркаванні 29 00:02:10,380 --> 00:02:16,350 Калі вы не адчуваеце, як атрымліваць асалоду ад сваёй прысутнасцю. 30 00:02:16,350 --> 00:02:21,010 Так што - я думаю, гэта першае. 31 00:02:21,010 --> 00:02:29,280 Ох. Акрамя таго, у гэтых раздзелах пытанні мы і вы будзеце задаваць пытанні аб шортах. 32 00:02:29,280 --> 00:02:33,440 Так што я думаю, у тэорыі, вы павінны глядзець на гэтых да прыезду ў раздзеле 33 00:02:33,440 --> 00:02:38,550 але гэта выдатна, калі вы гэтага не зробіце, мы пойдзем на іх у любым выпадку. 34 00:02:38,550 --> 00:02:42,590 Такім чынам, мы можам пачаць з гэтым: «Як у той час як цыкл адрозніваецца ад зрабі той час як цыкл? 35 00:02:42,590 --> 00:02:46,210 Калі апошняя асабліва карысна? " 36 00:02:46,210 --> 00:02:49,390 Такім чынам, у каго-небудзь - 37 00:02:49,390 --> 00:02:52,730 [Студэнт] зрабі той час як цыкл будзе заўсёды выконваць па крайняй меры, адзін раз. 38 00:02:52,730 --> 00:03:02,950 Так. Так што ёсць розніца. Час цыкла - I'll проста зрабіць гэта тут - у той час як пятля, маем ўмова 39 00:03:02,950 --> 00:03:19,760 прама тут, у той час як зрабі той час як, у вас няма ўмоў пакуль мы не атрымаем тут. 40 00:03:19,760 --> 00:03:24,130 І таму, калі вашы праграмы выконваецца, і ён трапляе ў той час як цыкл, 41 00:03:24,130 --> 00:03:26,380 ён адразу правярае, калі гэта ўмова праўдзіва. 42 00:03:26,380 --> 00:03:30,710 Калі гэта ўмова не выконваецца, гэта будзе проста прапусціць цыкл цалкам. 43 00:03:30,710 --> 00:03:34,390 Зрабі той час як цыкл, так як праграма выконваецца, ён дабіраецца да "рабіць". 44 00:03:34,390 --> 00:03:37,920 Нічога не адбываецца ў гэты момант, проста працягвае выконвацца. 45 00:03:37,920 --> 00:03:42,690 Потым, калі яна трапляе на ", а", калі ўмова праўдзіва, гэта будзе цыкл вярнуцца і зрабіць гэта зноў 46 00:03:42,690 --> 00:03:46,730 і зноў, і зноў, пакуль ўмова не выконваецца, а затым проста правальваецца. 47 00:03:46,730 --> 00:03:50,600 Такім чынам, розніца ў тым, што гэта можа прапусціць з самага пачатку. 48 00:03:50,600 --> 00:03:56,770 Гэта абавязкова выконваецца адзін раз і затым можа выканаць больш раз, калі ўмова застаецца ў сіле. 49 00:03:56,770 --> 00:04:03,720 Такім чынам, у той час як цыкл будзе рабіць гэта толькі адзін раз, або - у той час як завесы - мы не павінны рабіць гэта на ўсіх, 50 00:04:03,720 --> 00:04:07,900 паколькі, як толькі мы дабяромся да яго, калі ўмова ілжыва, мы проста адразу перайсці на яго. 51 00:04:07,900 --> 00:04:11,770 Прымаючы пад увагу, зрабі той час як цыкл, мы будзем выконваць яго адзін раз, абавязкова. 52 00:04:11,770 --> 00:04:14,560 Потым, калі мы дойдзем да стану, мы правяраем, калі гэта праўда ці хлусня. 53 00:04:14,560 --> 00:04:19,790 Калі гэта праўда, мы зробім гэта зноў, калі яно ілжыва, мы проста працягваем ісці. 54 00:04:19,790 --> 00:04:24,680 Так, калі апошні асабліва карысна? 55 00:04:24,680 --> 00:04:31,190 Таму я магу сказаць, што ў сукупнасці 4 гады, 3 гады, што заўгодна, 56 00:04:31,190 --> 00:04:38,780 што я займаўся праграмаваннем, я выкарыстаў гэта, як, па 10 разоў. 57 00:04:38,780 --> 00:04:43,140 І, напэўна, 5 з іх знаходзяцца ў CS50, калі мы ўяўляем рабіць, у той час як завесы. 58 00:04:43,140 --> 00:04:47,510 Таму, калі вы выкарыстоўвалі рабіць-то час завесы? 59 00:04:47,510 --> 00:04:49,510 Калі - так? 60 00:04:49,510 --> 00:04:53,180 [Студэнт] Калі вы спрабуеце атрымаць карыстацкі ўвод, або тое, што вы хочаце праверыць - 61 00:04:53,180 --> 00:04:59,700 Так. Так што, у той час як завесы, што ўводзіць карыстальнік, вялікі. 62 00:04:59,700 --> 00:05:03,160 Вось чаму на першых набораў праблема пары, калі вы хочаце спытаць у карыстальніка, як, 63 00:05:03,160 --> 00:05:08,520 "Дайце мне радок," вы не можаце працягваць, пакуль вы не атрымаеце гэтую радок. 64 00:05:08,520 --> 00:05:12,980 І таму вы, абавязкова, неабходна звярнуцца за радком па крайняй меры, адзін раз. 65 00:05:12,980 --> 00:05:16,950 Але тады, калі яны адказваюць нешта дрэннае, то вы павінны цыклу назад і спытаць яшчэ раз. 66 00:05:16,950 --> 00:05:20,810 Але акрамя ўводу дадзеных карыстачом, гэта вельмі рэдкае, што я сутыкаемся з выпадкам 67 00:05:20,810 --> 00:05:27,170 , Дзе я хачу, каб пятля "па крайняй меры адзін раз", але, магчыма, больш. 68 00:05:27,170 --> 00:05:33,370 Пытанні або -? Хто-небудзь выкарыстаў зрабі той час як цыкл дзе-небудзь яшчэ? 69 00:05:33,370 --> 00:05:36,780 Добра. Такім чынам, наступны: "Што ж неаб'яўленай ідэнтыфікатар 70 00:05:36,780 --> 00:05:43,310 звычайна паказваюць, калі выдаюцца звон? " 71 00:05:43,310 --> 00:05:47,380 Дык які код я магу напісаць, каб атрымаць «Неабвешчаная ідэнтыфікатар? 72 00:05:47,380 --> 00:05:49,550 [Студэнт], што х = 2? 73 00:05:49,550 --> 00:05:52,650 Так што мы можам толькі паспрабаваць яго тут, х = 2. 74 00:05:52,650 --> 00:06:04,830 Мы будзем працаваць гэта - ой, я не пстрыкніце па ім. І вось мы атрымліваем - усё ў парадку. 75 00:06:04,830 --> 00:06:07,100 "Выкарыстанне неаб'яўленых х ідэнтыфікатар". 76 00:06:07,100 --> 00:06:11,610 Дык вось неаб'яўленай ідэнтыфікатар, зменная. 77 00:06:11,610 --> 00:06:13,910 Гэта часта называюць зменнай ідэнтыфікатар. 78 00:06:13,910 --> 00:06:17,300 Такім чынам, яна можа не ведаць, што гэта на самай справе зменная, яна не ведае, што гэта такое. 79 00:06:17,300 --> 00:06:19,380 Так што гэта ідэнтыфікатар. 80 00:06:19,380 --> 00:06:26,060 Дык чаму ж гэта неабвешчаная? Так. 81 00:06:26,060 --> 00:06:32,190 Такім чынам, каб унесці яснасць у тэрміналогію, аб'ява зменнай 82 00:06:32,190 --> 00:06:37,360 гэта калі вы кажаце "Int х", або "у радкі," што заўгодна. 83 00:06:37,360 --> 00:06:41,910 Ініцыялізацыі зменнай ці прызначэнне зменнай, 84 00:06:41,910 --> 00:06:44,510 гэта кожны раз, калі вы кажаце "х = 2". 85 00:06:44,510 --> 00:06:52,950 Такім чынам, мы можам зрабіць гэта ў асобных крокаў, Int х, х = 2, а пакуль - мы можам мець кучу рэчаў тут - 86 00:06:52,950 --> 00:07:00,350 але да гэтай лініі адбываецца, х яшчэ не ініцыялізаваны, але яна была абвешчаная. 87 00:07:00,350 --> 00:07:06,760 І таму, відавочна, можна зрабіць гэта ў 1 лінію, і зараз мы аб'яўляем і ініцыялізацыі. 88 00:07:06,760 --> 00:07:10,730 Пытанні? 89 00:07:10,730 --> 00:07:18,390 І, нарэшце, "Чаму шыфр Цэзара не вельмі бяспечна?" 90 00:07:18,390 --> 00:07:23,830 Такім чынам, па-першае, хто-небудзь хачу сказаць, што шыфр Цэзара? 91 00:07:23,830 --> 00:07:28,100 [Студэнт] Caesar Cipher толькі тое, што Вы карце, вы перакласці кожную літару, 92 00:07:28,100 --> 00:07:34,420 пэўную колькасць літар перайсці і вярнуцца за, і гэта не вельмі бяспечна, таму што 93 00:07:34,420 --> 00:07:42,260 ёсць толькі 26 магчымых варыянтаў, і вы проста павінны паспрабаваць кожнае 1 з тых, пакуль вы не атрымаеце яго. 94 00:07:42,260 --> 00:07:45,470 Ох. Так што, я павінна паўтараць? 95 00:07:45,470 --> 00:07:51,600 Шыфр Цэзара, it's - я маю на ўвазе, вы будзеце мець справу з яго праблемамі, што вы - 96 00:07:51,600 --> 00:07:56,110 ці я думаю, што і стандартная рэдакцыя пастаўленай задачы гэта не на хакерскай выданне. 97 00:07:56,110 --> 00:08:01,550 Такім чынам, на стандартным выданні пастаўленай задачы, вы атрымаеце паведамленне тыпу: "Прывітанне, свет" 98 00:08:01,550 --> 00:08:08,410 і ў вас таксама ёсць шэраг як 6, і вы прымаеце гэта паведамленне, і кожны індывідуальны характар, 99 00:08:08,410 --> 00:08:11,310 Вы павярніце яго на 6 пазіцый у алфавіце. 100 00:08:11,310 --> 00:08:16,560 Такім чынам, 'H' у Прывітанне стане ч-і-т-к-л-м-н. 101 00:08:16,560 --> 00:08:19,600 Такім чынам, першы ліст будзе п. Мы робім тое ж самае з электроннай. 102 00:08:19,600 --> 00:08:23,530 Калі ў нас ёсць, быццам бы, г або нешта, то мы скончым назад да '. 103 00:08:23,530 --> 00:08:29,280 Але кожны персанаж атрымлівае цыклічнае 6 знакаў пазней у алфавіце, а гэта не вельмі бяспечна 104 00:08:29,280 --> 00:08:35,440 так як ёсць толькі 26 магчымасцяў для колькімі спосабамі можна абгарнуць адну літару. 105 00:08:35,440 --> 00:08:42,919 Такім чынам, вы можаце проста паспрабаваць усе 26 з іх, і, па-відаць, на працягу досыць доўгага паведамленне 106 00:08:42,919 --> 00:08:46,860 толькі 1 з магчымых 26 рэчаў будзе разборліва, 107 00:08:46,860 --> 00:08:50,300 і разборліва, ніхто не збіраецца быць зыходнае паведамленне. 108 00:08:50,300 --> 00:08:56,240 Так што гэта не вельмі добры спосаб шыфравання наогул нічога. 109 00:08:56,240 --> 00:08:59,070 Па-за усякай сувязі з тым, шорты, "Што такое функцыя?" 110 00:08:59,070 --> 00:09:03,370 Так што ж такое функцыя? Так. 111 00:09:03,370 --> 00:09:11,640 [Студэнт] Гэта як асобны кавалак кода, які вы можаце патэлефанаваць, каб прайсці, а затым атрымаць вяртаецца значэнне заўгодна. 112 00:09:11,640 --> 00:09:18,160 Так. Так я адкажу на яго таксама адказаць на наступны - або паўтор ад таксама проста адказаўшы на наступны. 113 00:09:18,160 --> 00:09:22,410 Вы можаце выкарыстоўваць функцыі, а не проста скапіяваць і ўставіць код зноў і зноў. 114 00:09:22,410 --> 00:09:27,200 Проста вазьміце гэты код, паклаў яго ў Fuction, а затым вы можаце проста выклікаць функцыю 115 00:09:27,200 --> 00:09:29,870 дзе б вы ні былі капіявання і ўстаўкі. 116 00:09:29,870 --> 00:09:33,350 Такім чынам, функцыі карысныя. 117 00:09:33,350 --> 00:09:35,860 Так што цяпер мы будзем рабіць актуальных праблем. 118 00:09:35,860 --> 00:09:46,490 Першы. Так што ідэя першага, вы перадаеце яго радка, і незалежна ад таго, - 119 00:09:46,490 --> 00:09:52,060 ці ж яна сказаць, што ўсе малыя? Не сказаць, што ўсё ў ніжнім рэгістры. 120 00:09:52,060 --> 00:09:57,730 Такім чынам, паведамленне можа быць што заўгодна, і - о, няма. Гэта робіць. 121 00:09:57,730 --> 00:10:01,610 "Для прастаты можна лічыць, што карыстач будзе толькі ўваход малой літары і прабелы". 122 00:10:01,610 --> 00:10:08,180 Такім чынам, мы перадаем яму паведамленне з толькі малыя літары, а затым мы чаргаваць 123 00:10:08,180 --> 00:10:15,450 паміж капіталам і малыя - мы зменім радок у загалоўныя і малыя, чаргуючы. 124 00:10:15,450 --> 00:10:22,920 Таму, перш чым даць вам другіх нават пагрузіцца ў праблему, 125 00:10:22,920 --> 00:10:32,420 што першае, што мы павінны зрабіць? 126 00:10:32,420 --> 00:10:36,900 Ах, які ж я проста націсніце на? О, я проста націснуў на электронную тут. 127 00:10:36,900 --> 00:10:42,870 Таму першае, што мы павінны зрабіць, - я гляджу не той? 128 00:10:42,870 --> 00:10:49,320 Ці з'яўляецца гэта часткай гэтага? 129 00:10:49,320 --> 00:10:51,320 Не, гэта ўсё яшчэ там, хоць. 130 00:10:51,320 --> 00:10:55,160 Добра, усё яшчэ тут. 131 00:10:55,160 --> 00:11:03,160 Цяпер мы не можам выказаць здагадку - Так. Тут мы не можам выказаць здагадку, што гэта толькі малыя і прабелы. 132 00:11:03,160 --> 00:11:07,770 Так што цяпер мы маем справу з тым, што лісты могуць быць якімі мы хочам іх бачыць. 133 00:11:07,770 --> 00:11:11,910 І таму першае, што мы хочам зрабіць, гэта проста атрымаеце паведамленне. 134 00:11:11,910 --> 00:11:19,790 Нам проста трэба, каб атрымаць String, String S = GetString, добра. 135 00:11:19,790 --> 00:11:24,890 Зараз гэтая праблема, ёсць некалькі спосабаў зрабіць гэта. 136 00:11:24,890 --> 00:11:29,840 Але мы збіраемся хочаце выкарыстоўваць бітаў аператары тут. 137 00:11:29,840 --> 00:11:35,280 Ёсць людзі, якія альбо не былі ў supersection, 138 00:11:35,280 --> 00:11:37,480 ці нешта, і не ведаю, што пабітавае аператараў? 139 00:11:37,480 --> 00:11:41,710 Або, як яны ставяцца да ASCII ў любым выпадку? 140 00:11:41,710 --> 00:11:45,650 [Студэнт] Я не быў на supersection, але я ведаю, што пабітавае аператараў. 141 00:11:45,650 --> 00:11:49,560 Добра. Тады я не павінен ісці па асновах з іх, але я растлумачу 142 00:11:49,560 --> 00:11:51,830 тое, што мы збіраемся хочаце выкарыстоўваць тут. 143 00:11:51,830 --> 00:11:59,680 Такім чынам, 'A': двайковага ўяўленне капітал, лік 65. 144 00:11:59,680 --> 00:12:07,560 Я проста буду глядзець на - 41 будзе 01000001. 145 00:12:07,560 --> 00:12:14,170 Так што павінна быць 65 у дзесятковай, так што гэта Двайковыя ўяўленне сімвала сталіцы A. 146 00:12:14,170 --> 00:12:19,440 Цяпер, двайковым прадстаўленнем знакаў ніжняга рэгістра 'а' 147 00:12:19,440 --> 00:12:33,350 будзе тое ж самае, амаль. Гэта - 6, так. Гэта правільна. 148 00:12:33,350 --> 00:12:37,670 Такім чынам, двайковы капіталу, двайковыя маленькая '. 149 00:12:37,670 --> 00:12:43,940 Так заўважыць, што розніца паміж А і 'а' гэта адзін біт. 150 00:12:43,940 --> 00:12:49,440 І гэта здараецца, 32 біт, біт, які ўяўляе лік 32. 151 00:12:49,440 --> 00:12:53,910 І гэта мае сэнс, паколькі з'яўляецца 65; 'а' 97. 152 00:12:53,910 --> 00:12:56,610 Розніца паміж імі 32. 153 00:12:56,610 --> 00:13:03,770 Такім чынам, цяпер мы ведаем, што можам пераўтварыць ад А да 'а', беручы 154 00:13:03,770 --> 00:13:09,710 і бітаў ORing гэта, з - якая выглядае як 1. 155 00:13:09,710 --> 00:13:20,900 Гэта пабітавае АБО, з 00100000, і што дасць нам ". 156 00:13:20,900 --> 00:13:26,850 І мы можам атрымаць ад 'А' да лагічнага множання на пабітава 157 00:13:26,850 --> 00:13:33,700 з 11, 0 у тым месцы, 11111. 158 00:13:33,700 --> 00:13:43,840 Такім чынам, гэта дасць нам менавіта тое, што 'а' было, але адмяніць гэтую асобнага біта, 159 00:13:43,840 --> 00:13:50,070 так што нам прыйдзецца 01000001, я не ведаю, калі я налічыў права. 160 00:13:50,070 --> 00:13:56,750 Але гэтая тэхніка пабітава ORing, каб атрымаць ад сталіцы ў ніжні рэгістр, 161 00:13:56,750 --> 00:14:02,080 і бітаў аперацыі AND, каб атрымаць з ніжняга рэгістра ў сталіцу не толькі для А. 162 00:14:02,080 --> 00:14:06,510 Усе лісты, K супраць K, Z супраць г, 163 00:14:06,510 --> 00:14:10,080 усе яны толькі збіраюцца адрозніваюцца гэтым адзін біт. 164 00:14:10,080 --> 00:14:16,290 І таму вы можаце выкарыстоўваць гэта, каб змяніць любой малой літары любой літары, і наадварот. 165 00:14:16,290 --> 00:14:26,670 Добра. Так просты спосаб атрымаць з гэтага - так замест таго, каб 166 00:14:26,670 --> 00:14:32,170 напісаць усё, што ёсць 1011111 - лёгкі спосаб прадстаўлення гэтага ліку, а гэта не адзін 167 00:14:32,170 --> 00:14:39,710 што я пайшоў у supersection, але тыльды (~) з'яўляецца яшчэ адным пабітава аператара. 168 00:14:39,710 --> 00:14:42,520 Што ~ робіць гэта глядзіць на бітнае ўяўленне. 169 00:14:42,520 --> 00:14:45,630 Давайце возьмем любы лік. 170 00:14:45,630 --> 00:14:53,130 Гэта толькі некаторыя двайковыя ліку, і тое, што робіць ~ гэта проста перагортвае ўсе біты. 171 00:14:53,130 --> 00:15:00,630 Так што гэта было 1, зараз 0, то гэта 0, цяпер 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Так што гэта ўсё ~ робіць. Такім чынам, 32 будзе нумар - пазбавіцца ад гэтага - 173 00:15:08,320 --> 00:15:23,320 32 так будзе нумар 00100000, і так ~ гэтага будзе 174 00:15:23,320 --> 00:15:29,980 гэты нумар тут, што я аперацыя AND'' с. 175 00:15:29,980 --> 00:15:35,600 Ці ўсё бачылі? Гэта даволі распаўсюджаная, як і калі вы хочаце, каб высветліць 176 00:15:35,600 --> 00:15:40,740 для наступнага рэчы, якія мы маглі б бачыць, калі мы хочам убачыць, калі - 177 00:15:40,740 --> 00:15:44,710 ці мы хочам, каб усе, кожны набор біт за выключэннем 1 178 00:15:44,710 --> 00:15:47,910 Вы схільныя рабіць ~ з трохі, што мы не хочам ўсталяваць. 179 00:15:47,910 --> 00:15:53,090 Такім чынам, мы не хочам ў 32 біт, таму мы ~ 32. 180 00:15:53,090 --> 00:15:57,790 Добра. Так што мы можам выкарыстоўваць усе тут. 181 00:15:57,790 --> 00:16:03,000 Добра, гэта выдатна, калі вы не зрабілі, мы павінны павольна хадзіць па сукупнасці 182 00:16:03,000 --> 00:16:11,870 ці хадзіць па гэтай нагоды, так - праз гэта. Прайдзіце праз гэта. 183 00:16:11,870 --> 00:16:20,790 Такім чынам, у нас ёсць радок, і мы хочам, каб цыкл па кожнаму знаку ў радку, што і рабіць нешта для гэтага. 184 00:16:20,790 --> 00:16:26,710 Так як жа мы цыкл па радку? Што мы павінны выкарыстоўваць? 185 00:16:26,710 --> 00:16:30,980 Я не збіраюся рабіць гэта тут. Так. 186 00:16:30,980 --> 00:16:42,940 Так што ў мяне ёсць итератор, і ён сказаў, што гэта, але як я магу ведаць, колькі знакаў у радку? 187 00:16:42,940 --> 00:16:47,030 STRLEN (ы), то я + +. 188 00:16:47,030 --> 00:16:49,860 Так што я тут зрабіў, гэта не лепшы спосаб рабіць рэчы. 189 00:16:49,860 --> 00:16:51,860 Хто-небудзь ведае, чаму? 190 00:16:51,860 --> 00:16:55,290 Таму што вы правяраеце на мове радок кожны раз. 191 00:16:55,290 --> 00:17:06,859 Такім чынам, мы збіраемся жадаеце перамясціць StrLen, я мог бы сказаць тут, унутр даўжыня = StrLen (ы), 192 00:17:06,859 --> 00:17:11,900 і тады я <даўжыня, а ў выпадку, калі вы не бачылі гэта раней, 193 00:17:11,900 --> 00:17:20,410 Я мог бы таксама зрабіць Int = 0, даўжыня = StrLen (ы). 194 00:17:20,410 --> 00:17:25,010 І так гэта некалькі пераважней, так як цяпер я абмежавала сферу 195 00:17:25,010 --> 00:17:29,150 зменнай даўжыні ўсяго гэтага 'для' цыкл, замест таго, каб абвясціць яго да 196 00:17:29,150 --> 00:17:34,990 і што яно заўсёды існуе, і ў выпадку, калі вы не заўважылі, чаму гэта дрэнна, 197 00:17:34,990 --> 00:17:39,410 ці чаму арыгінальная было дрэнна, it's - пачаць з цыклу. 198 00:17:39,410 --> 00:17:43,380 Я праверыў стан. Гэта я <даўжыня з? 199 00:17:43,380 --> 00:17:46,790 Такім чынам, даўжыня з, давайце папрацуем з "прывітанне" ўвесь час. 200 00:17:46,790 --> 00:17:49,670 Такім чынам, даўжыня S, Н-е-л-л-о. Даўжыня 5. 201 00:17:49,670 --> 00:17:57,580 Так што я = 0, даўжыня 5, так што я не <5, так што цыкл працягваецца. 202 00:17:57,580 --> 00:18:02,750 Тады мы ідзем зноў. Мы правяраем стан. Гэта я <даўжыня Прывітанне? 203 00:18:02,750 --> 00:18:08,390 Так давайце праверым даўжыню прывітанне. Н-е-л-л-о. Гэта 5, я не <5, таму мы працягваем зноў. 204 00:18:08,390 --> 00:18:13,330 Такім чынам, мы разлічваем, мы разлічваем прывітанне, для кожнай ітэрацыі, 205 00:18:13,330 --> 00:18:17,380 нават не думаў, што гэта ніколі не зменіцца, ён заўсёды будзе 5. 206 00:18:17,380 --> 00:18:22,530 Так што мы проста памятаем 5 да пярэдняй, і цяпер усё лепш. 207 00:18:22,530 --> 00:18:24,990 Такім чынам, ітэрацыі па ўсёй радку. 208 00:18:24,990 --> 00:18:31,470 Што мы хочам зрабіць для кожнага знака радкі? 209 00:18:31,470 --> 00:18:38,510 [Студэнт кажучы, неразборліва] 210 00:18:38,510 --> 00:18:47,000 Так. Такім чынам, калі персанаж знаходзіцца неалфавітныя, то мы проста хочам, каб прапусціць яго. 211 00:18:47,000 --> 00:18:52,300 Таму што мы клапоцімся толькі пра літар алфавіту, мы не можам скарыстацца нумарам. 212 00:18:52,300 --> 00:19:10,850 Так як мы можам гэта зрабіць? Такім чынам, нашы ўмовы, таму калі мы хочам нешта - праверыць, калі ён алфавітным парадку. 213 00:19:10,850 --> 00:19:14,060 Так як жа нам праверыць гэта? 214 00:19:14,060 --> 00:19:18,720 [Студэнт] Вы можаце проста выкарыстоўваць функцыю альфа. 215 00:19:18,720 --> 00:19:23,160 Гэта ўключана ў любы з гэтых ці любых ўключаюць як, char.h, ці што? 216 00:19:23,160 --> 00:19:32,710 Давайце не будзем выкарыстоўваць гэта альфа функцыі, і выкарыстоўваць відавочнае - так у нас з [я], 217 00:19:32,710 --> 00:19:40,460 , Што з'яўляецца восьмым характару з, памятаеце, што радок ўяўляе сабой масіў сімвалаў, 218 00:19:40,460 --> 00:19:43,180 так восьмым характару з. 219 00:19:43,180 --> 00:19:49,280 Цяпер, калі гэта літара, мы ведаем, што павінна быць у пэўным дыяпазоне. 220 00:19:49,280 --> 00:19:54,370 І што гэта за дзеянні? 221 00:19:54,370 --> 00:20:07,860 Так. Такім чынам, калі з [я] складае ≥ 65 гадоў, і з [я] складае ≤ 90, што я павінен рабіць замест гэтага? 222 00:20:07,860 --> 00:20:18,470 Так. Такім чынам, вы павінны быць абсалютна нават не трэба ведаць ASCII значэння ні пра што ніколі. 223 00:20:18,470 --> 00:20:25,640 Ніколі не думайце з лікаў 65, 90, 97 і 102, ці што гэта такое. 224 00:20:25,640 --> 00:20:32,470 Вам не трэба - 112 - вы не павінны ведаць тых, хто наогул. Гэта няправільна таксама. 225 00:20:32,470 --> 00:20:41,940 Выкарыстоўвайце толькі адзінарныя двукоссі знакаў, адным канстанты цытаты. Такім чынам, 'A' і менш за 90 з'яўляецца "З." 226 00:20:41,940 --> 00:20:47,930 І гэта значна лепш - я не ведаю, з верхняй частцы маёй галавы, што Z = 90. 227 00:20:47,930 --> 00:20:52,690 Я ведаю, з верхняй частцы маёй галавы, што 'Z' з'яўляецца сталіцай Z. 228 00:20:52,690 --> 00:21:02,100 Так што, пакуль гэта знаходзіцца ў дыяпазоне капіталу да капіталу Z, ці мы можам праверыць ніжнім рэгістры, 229 00:21:02,100 --> 00:21:17,010 Ці, калі яна знаходзіцца ў дыяпазоне ≥ 'а' і ≤ г. 230 00:21:17,010 --> 00:21:19,010 Так што гэта наша ўмова. 231 00:21:19,010 --> 00:21:22,520 Стыль, дзе паставіць гэтыя рэчы мяняецца. 232 00:21:22,520 --> 00:21:29,520 Я зраблю гэта, як гэта. 233 00:21:29,520 --> 00:21:31,520 Такім чынам, што ж мы хочам зрабіць? 234 00:21:31,520 --> 00:21:39,530 Мы ведаем, што гэты ліст характар, алфавіту. 235 00:21:39,530 --> 00:21:46,270 Так што мы павінны чаргавацца ці гэта цяпер павінна быць літары або малой літары. 236 00:21:46,270 --> 00:21:48,820 Як мы адсочваем, адзін з якіх мы хочам быць? 237 00:21:48,820 --> 00:21:55,520 [Студэнт галасы, неразборліва] 238 00:21:55,520 --> 00:21:59,150 Так што, так, але дазвольце мне праверыць. 239 00:21:59,150 --> 00:22:04,910 Модуль 0-2 было сказана, была прапанова выкінутыя, і я з гэтым згодны. 240 00:22:04,910 --> 00:22:11,780 Акрамя заўважыць, што, напрыклад, - гэта выпадак? Так. 241 00:22:11,780 --> 00:22:18,270 Гэта кожны другі, але мы не можам модуль 2 я, ці я модулю 2, так як 242 00:22:18,270 --> 00:22:22,950 заўважыць, што E з'яўляецца сталіцай і 'а' у ніжнім рэгістры? Але ёсць прастора, што раздзяляе іх? 243 00:22:22,950 --> 00:22:27,150 Такім чынам, яны будуць такімі ж, па модулі 2, але яны розныя выпадкі. 244 00:22:27,150 --> 00:22:29,150 [Студэнт пытанне, неразборліва] 245 00:22:29,150 --> 00:22:34,690 Так. Так што мы проста будзем трымаць рахунку. 246 00:22:34,690 --> 00:22:38,730 Мы маглі б таксама зрабіць гэта тут, калі мы хацелі, то маглі б атрымаць трохі грувасткім 247 00:22:38,730 --> 00:22:41,300 у цыкле заявы, я пакладу яго тут. 248 00:22:41,300 --> 00:22:48,840 Так соипЬ = пачынаецца з 0. 249 00:22:48,840 --> 00:22:54,070 І вось цяпер, я буду лічыць, колькі літарныя сімвалы, якія мы мелі. 250 00:22:54,070 --> 00:22:59,550 Такім чынам, мы непазбежна будзем разлічваць + +, так як мы знайшлі іншага алфавіту. 251 00:22:59,550 --> 00:23:09,130 Але, так што цяпер вы кажаце, калі колькасць модулю 2. 252 00:23:09,130 --> 00:23:12,590 Так што, калі колькасць модулю 2? Ох. Я зраблю == 0 на дадзены момант. 253 00:23:12,590 --> 00:23:21,740 Мы таксама будзем ісці па гэтай нагоды. Такім чынам, калі колькасць мод 2 == 0, то што? 254 00:23:21,740 --> 00:23:27,830 [Студэнты адказ, неразборліва] 255 00:23:27,830 --> 00:23:32,750 Такім чынам, мы хочам, каб ён у канчатковым выніку ў верхнім рэгістры. 256 00:23:32,750 --> 00:23:37,520 Ёсць 2 выпадках; вялікіх і малых з'яўляюцца 2-х выпадках. 257 00:23:37,520 --> 00:23:40,990 Так што, калі мы ў ніжнім рэгістры, мы павінны зрабіць гэта верхні рэгістр. 258 00:23:40,990 --> 00:23:43,710 Калі гэта вялікія нам не трэба нічога рабіць. 259 00:23:43,710 --> 00:23:50,760 Але ёсць спосаб - shouldn't было перавернута - 260 00:23:50,760 --> 00:23:54,800 што мы нават не трэба праверыць, ці з'яўляецца гэта Вялікая або маленькая? 261 00:23:54,800 --> 00:24:02,240 Што мы можам зрабіць, каб заўсёды пераканацца, што мы заўсёды ў канчатковым выніку ў верхнім рэгістры? 262 00:24:02,240 --> 00:24:07,830 Так заўважыць, што мы зрабілі ў ніжнім рэгістры ";, што калі б мы зрабілі гэта сапраўды такі жа рэчы ў верхні рэгістр? 263 00:24:07,830 --> 00:24:11,900 Ці ёсць верхні рэгістр змены, ці ж змена значэння? 264 00:24:11,900 --> 00:24:23,100 Так. Такім чынам, любая літара пабітава аперацыі AND з ~ 32 будзе той жа знак верхняга рэгістра 265 00:24:23,100 --> 00:24:29,220 таму што для любога знака ў верхнім рэгістры 32-й біт не ўстаноўлены. 266 00:24:29,220 --> 00:24:40,920 Такім чынам, калі мы хочам прынесці характару з [я], мы хочам, каб ён стаў маленькіх або вялікіх літар. 267 00:24:40,920 --> 00:24:46,890 Так што, калі гэта было ў ніжнім рэгістры, то зараз вялікімі літарамі, калі б гэта быў верхні рэгістр, ён па-ранейшаму вялікімі літарамі, вось і ўсё. 268 00:24:46,890 --> 00:24:54,290 Я сказаў пра гэта ў supersection: Вы можаце выкарыстоўваць 32, калі вы хочаце, але я аддаю перавагу рабіць "а" -, 269 00:24:54,290 --> 00:25:01,150 замест таго, каб проста 32, таму што гэта можа быць любая іншая няшмат. 270 00:25:01,150 --> 00:25:03,610 Пасля таго, як 32-разрадныя, гэта можа быць любы з іх, ці ў нас не будзе дастаткова 271 00:25:03,610 --> 00:25:05,840 Нумары для прадстаўлення ўсіх знакаў. 272 00:25:05,840 --> 00:25:09,110 Так што, калі вы атрымліваеце 32 біт, гэта можа быць 64 біт, гэта можа быць 128 біт. 273 00:25:09,110 --> 00:25:13,990 Любы з гэтых бітаў можа быць трохі, што адрозненне паміж вялікімі і малымі літарамі. 274 00:25:13,990 --> 00:25:18,350 Я не павінен ведаць, што гэта 32 біт. 275 00:25:18,350 --> 00:25:27,130 Я магу выкарыстоўваць гэтую "а" - каб атрымаць крыху адрозніваецца, што паміж двума 276 00:25:27,130 --> 00:25:33,000 без неабходнасці спадзявацца на магічнае лік, якое роўна 32. 277 00:25:33,000 --> 00:25:38,770 І вось цяпер, інакш разлічваць было дзіўна, так што я хачу рабіць? 278 00:25:38,770 --> 00:25:43,920 [Адказы студэнтаў, неразборліва] 279 00:25:43,920 --> 00:25:45,920 [Студэнт] Што гэта? 280 00:25:45,920 --> 00:25:49,850 Я зраблю гэта за 1 секунду. 281 00:25:49,850 --> 00:25:55,690 Так што цяпер, калі я хачу - я хачу, каб пераканацца, што персанаж знаходзіцца цяпер у ніжнім рэгістры, 282 00:25:55,690 --> 00:26:04,140 і так я магу або на 32, і "'32 сэнс - A. 283 00:26:04,140 --> 00:26:06,510 Але заўважце, па тым жа меркаваннях, што і папярэдні, што калі 284 00:26:06,510 --> 00:26:11,670 Ліст было ўжо ніжнім рэгістры, а затым на 32 ORing проста трымае яго ніжні рэгістр. 285 00:26:11,670 --> 00:26:16,220 Ён не змяніў першапачатковы характар. 286 00:26:16,220 --> 00:26:19,910 Але зараз у мяне няма, каб не сказаць: "Калі ў ніжнім рэгістры, проста забыцца пра яго, 287 00:26:19,910 --> 00:26:23,650 калі гэта вялікія, а затым змяніць яго ». 288 00:26:23,650 --> 00:26:26,900 Гэта значна зручней рабіць гэта. 289 00:26:26,900 --> 00:26:33,190 [Студэнт] Ці будзе гэтая стратэгія аднімання з вялікіх маленькіх працу, калі б не 32? 290 00:26:33,190 --> 00:26:35,330 Калі б гэта было, накшталт, 34 ці нешта? 291 00:26:35,330 --> 00:26:41,840 Такім чынам, вы павінны ведаць, што розніца паміж 2 з'яўляецца -? >> 1 біт. 292 00:26:41,840 --> 00:26:49,840 Гэта можа быць больш, чым 1 біт, пакуль усё біты ніжэй гэтай пазіцыі супадаюць. 293 00:26:49,840 --> 00:26:58,500 Так што нам трэба па крайняй меры 26 сімвалаў - ці, існуе 26 знакаў. 294 00:26:58,500 --> 00:27:04,590 Так што нам трэба па крайняй меры 26 нумароў ўяўляюць сабой розніцу - 295 00:27:04,590 --> 00:27:07,650 Розніца паміж і'' павінен быць не менш 26, 296 00:27:07,650 --> 00:27:10,760 інакш мы б не былі прадстаўлены ўсе нумары капіталу. 297 00:27:10,760 --> 00:27:18,630 Гэта азначае, што, калі мы пачнем з 1, ён збіраецца выкарыстоўваць усе гэтыя біты, 298 00:27:18,630 --> 00:27:23,900 Усе гэтыя першыя 5 біт, прадстаўляюць усе праз Z. 299 00:27:23,900 --> 00:27:32,170 Вось чаму наступны біт, ці гэты біт, наступны біт з'яўляецца той, які абраны, каб адрозніваць і '.' 300 00:27:32,170 --> 00:27:40,930 Гэта таксама, чаму ў ASCII табліцы, існуе 5 знакаў падзелу загалоўнымі літарамі ад маленькіх літар. 301 00:27:40,930 --> 00:27:49,050 З тых часоў з'яўляюцца сімваламі, што дадатковыя 5 выхоўвае 32-быцця розніца паміж імі. 302 00:27:49,050 --> 00:27:51,840 [Студэнт] Такім чынам, мы можам гэта зрабіць, таму што ASCII распрацавана такім чынам. 303 00:27:51,840 --> 00:27:57,280 Так. Але ASCII - розніца можа быць таксама абодва гэтых біта. 304 00:27:57,280 --> 00:28:12,040 Маўляў, калі былі 10000001 і 'а' быў 11100001 - я забыўся, што заўгодна. 305 00:28:12,040 --> 00:28:18,100 Але калі б гэта было, то мы ўсё яшчэ можам выкарыстоўваць'' - A. 306 00:28:18,100 --> 00:28:22,650 Гэта проста цяпер розніца паміж А і 'а' па-ранейшаму гэтыя 2 біта. 307 00:28:22,650 --> 00:28:32,240 Я думаю, што гэта напісана 48. Гэта 32 + 64? Я думаю, што гэта? 308 00:28:32,240 --> 00:28:40,160 Ён усё роўна будзе 2 біта, кожны асобны знак, быццам бы, Z і Z, K і K, 309 00:28:40,160 --> 00:28:45,160 яны да гэтага часу дакладна такі ж біты, за выключэннем тых 2 біта. 310 00:28:45,160 --> 00:28:48,870 Так што, пакуль што гэта заўсёды так, незалежна ад таго, калі мы выкарыстоўваем ASCII або іншыя сістэмы, 311 00:28:48,870 --> 00:28:53,050 пакуль ёсць толькі пэўную колькасць бітаў, якія розныя для кожнага персанажа, 312 00:28:53,050 --> 00:28:55,050 тое, што добра працуе. 313 00:28:55,050 --> 00:29:06,110 Гэта проста, што 32 была створана таму, што гэта першы, які мы маглі б выкарыстоўваць. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Я аддаю перавагу, у выпадку, калі вы не бачылі, калі блок з'яўляецца толькі аднаго радка, 315 00:29:14,520 --> 00:29:24,280 Вы можаце пазбавіцца ад фігурныя дужкі, так што я аддаю перавагу рабіць гэта. 316 00:29:24,280 --> 00:29:34,010 Акрамя таго, вы ведаеце, як мы можам рабіць такія рэчы з [я] + = 1? 317 00:29:34,010 --> 00:29:41,090 Вы таксама можаце зрабіць з [я] пабітавае І = 32. 318 00:29:41,090 --> 00:29:46,400 І пабітавае OR = 32. 319 00:29:46,400 --> 00:29:51,490 Акрамя таго, разлічваць мод 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Таму памятайце, што - я не буду пісаць гэта - любое выдатнае ад нуля значэнне праўдзіва, і 0 няправільна. 321 00:30:00,900 --> 00:30:07,880 Такім чынам, "калі колькасць Модуль 2 == 0" такі ж, як кажуць, "калі не лічыць той 2". 322 00:30:07,880 --> 00:30:11,580 Я б, напэўна, проста адмяніў ліній і сказаў: "калі колькасць модулю 2, 323 00:30:11,580 --> 00:30:15,350 у OR 1, яшчэ ў AND 1 ", так што мне не трэба" не ". 324 00:30:15,350 --> 00:30:18,650 Але гэта працуе так жа добра. 325 00:30:18,650 --> 00:30:25,660 А што яшчэ я магу тут рабіць? 326 00:30:25,660 --> 00:30:29,060 Вы можаце спалучаць іх з трайной, калі вы хацелі, але потым, што б проста зрабіць усё брудней 327 00:30:29,060 --> 00:30:33,770 і, верагодна, больш цяжкім для чытання, таму мы не будзем гэтага рабіць. 328 00:30:33,770 --> 00:30:37,330 Любы, ёсць якія-небудзь іншыя прапановы? 329 00:30:37,330 --> 00:30:41,580 Гэта ўсё, што праблема прасіў? Ах так. 330 00:30:41,580 --> 00:30:51,070 Так што пазбавіцца ад гэтых пустых радкоў, зараз мы будзем друкаваць F,% ы быць адзін для радкі, 331 00:30:51,070 --> 00:30:56,620 Мы будзем друкаваць F, S. 332 00:30:56,620 --> 00:30:59,330 Зараз давайце запусцім яго. Я зрабіў нешта не так? 333 00:30:59,330 --> 00:31:03,200 Гэта \ ", я хачу н. 334 00:31:03,200 --> 00:31:07,840 Добра. Цяпер мы будзем запускаць яго. Гэта, напэўна, крычаць на мяне. 335 00:31:07,840 --> 00:31:11,250 STRLEN ў string.h. 336 00:31:11,250 --> 00:31:14,290 Так што гэта добрая рэч аб Clang гэта кажа вам, што ён знаходзіцца ў, 337 00:31:14,290 --> 00:31:19,140 замест GCC, які проста кажа: "Гэй, ты забыўся нешта, я не ведаю, што гэта было". 338 00:31:19,140 --> 00:31:29,220 Але гэта скажа мне: "Ты павінна ўключаць string.h". 339 00:31:29,220 --> 00:31:32,130 Так што я не падкажуць ні на што, так што гэта нічога не кажу. 340 00:31:32,130 --> 00:31:42,540 Але мы будзем рабіць іх, напрыклад, "Дзякуй 4 Дадаць". 341 00:31:42,540 --> 00:31:47,880 Гэта выглядае правільна. Ура. 342 00:31:47,880 --> 00:31:52,370 Такім чынам, вяртаючыся да вашай асноўнай, я амаль ніколі не робяць гэтага. 343 00:31:52,370 --> 00:31:57,110 Гэта неабавязкова. А галоўнае гэта адзіная функцыя, для якіх ён не з'яўляецца абавязковым. 344 00:31:57,110 --> 00:32:07,140 Калі вы нічога не вяртаюць ад галоўнага, то мяркуецца, што вы хацелі вяртаць 0. 345 00:32:07,140 --> 00:32:13,070 Пытанні? 346 00:32:13,070 --> 00:32:20,980 Добра. Так што цяпер другая праблема. 347 00:32:20,980 --> 00:32:24,810 "Успомніце з другой лекцыі тыдзень 2 аб тым, што замена значэння 2 зменных, перадаючы 348 00:32:24,810 --> 00:32:30,780 гэтыя 2 зменныя функцыі (нават калі называюць своп) дакладна не працуе, па меншай меры, не без «паказальнікі». 349 00:32:30,780 --> 00:32:37,020 І ігнараваць паказальнікі, пакуль мы не атрымаем на іх. 350 00:32:37,020 --> 00:32:40,070 Мы хочам, каб памяняць 2 зменныя, мы не выкарыстоўваем функцыю зрабіць гэта. 351 00:32:40,070 --> 00:32:43,410 Мы ўсё яшчэ збіраемся зрабіць гэта ў галоўным, як ён кажа. 352 00:32:43,410 --> 00:32:48,360 Але выкарыстоўваць гэтыя 2 зменныя, мы не хочам выкарыстоўваць часовую зменную. 353 00:32:48,360 --> 00:32:50,770 Ёсць 2 спосабу зрабіць гэта. 354 00:32:50,770 --> 00:32:56,310 Вы можаце зрабіць гэта з дапамогай традыцыйных бінарных аператараў. 355 00:32:56,310 --> 00:33:00,180 Так хто-небудзь ведае хуткі і брудны спосаб зрабіць гэта? 356 00:33:00,180 --> 00:33:07,650 Гэта сапраўды можа заняць хвіліну мыслення. Калі ў мяне ёсць - 357 00:33:07,650 --> 00:33:12,130 Я паставіў задачу ўверх, як яны просяць. Так што, калі ў мяне ёсць 2 зменныя, A, які знаходзіцца ўсяго ў цэлае 358 00:33:12,130 --> 00:33:17,800 што яны даюць мне, і сумай зменных B, якая з'яўляецца яшчэ адным цэлым, што мне даюць. 359 00:33:17,800 --> 00:33:22,700 Так што, калі ў мяне ёсць гэтыя 2 зменныя, цяпер я хачу, каб памяняць іх месцамі. 360 00:33:22,700 --> 00:33:31,550 Традыцыйна, з дапамогай рэгулярных бінарных аператараў, я маю на ўвазе, напрыклад, +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ня бітаў аператары, якія дзейнічаюць на двайковы. 362 00:33:36,630 --> 00:33:39,600 Такім чынам, выкарыстанне -, +, ÷, і ўсіх тых. 363 00:33:39,600 --> 00:33:52,980 Мы маглі б памяняцца, робячы нешта накшталт = A + B, і B = A - B, A = A - B. 364 00:33:52,980 --> 00:34:04,260 Такім чынам, праверка спраўнасці, і тады мы ўбачым, чаму гэта працуе. 365 00:34:04,260 --> 00:34:13,320 Скажам = 7, бы = 3, то A + B будзе 10. 366 00:34:13,320 --> 00:34:18,820 Так што мы зараз мяркуючы а = 10, а затым мы робім B = A - B. 367 00:34:18,820 --> 00:34:30,250 Такім чынам, мы робім B = A - B, які будзе 7, а B = A - B зноў, 368 00:34:30,250 --> 00:34:38,650 ці = A - B. Які будзе 10 - 7, якая з'яўляецца 3. 369 00:34:38,650 --> 00:34:44,850 Так што цяпер, правільна, "а" было 7, б было 3 гады, і ў цяперашні час знаходзіцца ў 7 б і 'а' 3. 370 00:34:44,850 --> 00:34:48,679 Так што выгляд мае сэнс; «а» з'яўляецца спалучэнне 2-х нумароў. 371 00:34:48,679 --> 00:34:53,000 На дадзены момант, 'а' гэта спалучэнне, а затым мы аднімання з арыгінальных б, 372 00:34:53,000 --> 00:34:56,860 а потым мы адніманнем, што было першапачатковым ". 373 00:34:56,860 --> 00:35:01,150 Але гэта не працуе для ўсіх нумароў. 374 00:35:01,150 --> 00:35:08,880 Каб пераканацца ў гэтым, давайце разгледзім сістэму, таму мы звычайна думаем пра цэлых лікаў у выглядзе 32 біт. 375 00:35:08,880 --> 00:35:13,050 Давайце працаваць на тое, што, як толькі 4 біта. 376 00:35:13,050 --> 00:35:15,450 Спадзяюся, я прыдумаў добры прыклад прама цяпер. 377 00:35:15,450 --> 00:35:18,680 Дык вось, я ведаю, гэта будзе нялёгка. 378 00:35:18,680 --> 00:35:26,720 Скажам, нашы 2 нумары 1111, і 1111, так што мы ў двайковай прама цяпер. 379 00:35:26,720 --> 00:35:34,630 На самай знакаў пасля коскі, калі вы хочаце думаць пра яго, такім чынам, = 15 і B = 15. 380 00:35:34,630 --> 00:35:37,630 І таму мы чакаем, пасля таго як мы абмяняць іх - яны нават не павінны быць аднолькавымі нумарамі, 381 00:35:37,630 --> 00:35:41,140 але я зрабіў гэта такім чынам. 382 00:35:41,140 --> 00:35:47,100 Давайце зробім іх не аднолькавымі нумарамі. Давайце зробім 1111 і 0001. 383 00:35:47,100 --> 00:35:51,860 Такім чынам, = 15 і B = 1. 384 00:35:51,860 --> 00:35:57,670 Пасля таго як мы памяняць іх месцамі, мы чакаем "а" роўна 1 і B на 15. 385 00:35:57,670 --> 00:36:01,780 Такім чынам, наш першы крок = а + б. 386 00:36:01,780 --> 00:36:08,770 Нашы нумара толькі 4 біта, так што "", які з'яўляецца 1111, + Ь, 0001, 387 00:36:08,770 --> 00:36:16,780 будзе ў канчатковым выніку 10000, але ў нас ёсць толькі 4 біта. 388 00:36:16,780 --> 00:36:22,540 Так што цяпер = 0. 389 00:36:22,540 --> 00:36:34,080 А зараз мы хочам ўсталяваць B = A - B - на самай справе, гэта ўсё яшчэ працуе выдатна. 390 00:36:34,080 --> 00:36:39,630 = A - B - давайце паглядзім, калі гэта працуе выдатна. 391 00:36:39,630 --> 00:36:53,720 Тады B = 0 - 1, якое ўсё роўна будзе 15, а затым = A - B, які быў бы 1. 392 00:36:53,720 --> 00:36:56,210 Можа быць, гэта сапраўды працуе. 393 00:36:56,210 --> 00:36:59,020 Я адчуваю, што ёсць прычына, яна не працуе з выкарыстаннем рэгулярных. 394 00:36:59,020 --> 00:37:06,400 Такім чынам, які працуе на здагадцы, што яна не працуе з звычайнымі бінарнымі аперацыямі, 395 00:37:06,400 --> 00:37:15,040 і я буду шукаць - я Google, каб пераканацца, што гэта праўда. 396 00:37:15,040 --> 00:37:23,490 Такім чынам, мы хочам зрабіць гэта з дапамогай бітавых аператараў, і ключ тут XOR. 397 00:37:23,490 --> 00:37:28,780 Такім чынам, увядзенне XOR (^), калі вы яго яшчэ не бачыла. 398 00:37:28,780 --> 00:37:34,610 Гэта, зноў жа, аператар пабітава так ён дзейнічае па макулінках, і it's - 399 00:37:34,610 --> 00:37:39,910 Калі ў вас ёсць біты 0 і 1, то гэта будзе 1. 400 00:37:39,910 --> 00:37:45,230 Калі ў вас ёсць біты 1 і 0, то гэта будзе 1, у вас ёсць біты 0 і 0, гэта будзе 0, 401 00:37:45,230 --> 00:37:47,640 і калі ў вас ёсць біты 1 і 1 гэта будзе 0. 402 00:37:47,640 --> 00:37:56,180 Так што гэта як OR. Калі адзін з бітаў праўда, гэта 1, але ў адрозненне ад OR, яно не можа быць і бітамі, якія з'яўляюцца праўдзівымі. 403 00:37:56,180 --> 00:37:59,320 Ці б гэта быць 1, XOR б гэта быць 0. 404 00:37:59,320 --> 00:38:02,250 Такім чынам, мы збіраемся хочаце выкарыстоўваць XOR тут. 405 00:38:02,250 --> 00:38:09,960 Задумайцеся аб гэтым на хвіліну, я збіраюся Google. 406 00:38:09,960 --> 00:38:16,230 Ну, вы не можаце прачытаць, што, я ў цяперашні час знаходжуся на алгарытм падпампоўкі старонак XOR. 407 00:38:16,230 --> 00:38:21,340 Спадзяюся, гэта будзе растлумачыць, чаму Я не магу - 408 00:38:21,340 --> 00:38:34,190 Гэта менавіта алгарытм, які мы толькі што зрабілі. 409 00:38:34,190 --> 00:38:37,330 Я ўсё яшчэ не разумею, чаму - я, павінна быць, проста выбраў дрэнны прыклад, 410 00:38:37,330 --> 00:38:44,940 але гэта выпадак, калі «а» адбылося стаць 0, пасля атрымання да 5 біт, так што цяпер "а" роўна 0, 411 00:38:44,940 --> 00:38:48,730 гэта тое, што завецца "цэлалікавых перапаўненне". 412 00:38:48,730 --> 00:38:54,370 Згодна з Вікіпедыі, "у адрозненне ад XOR падпампоўкі, гэты варыянт патрабуе, што яна выкарыстоўвае некалькі метадаў 413 00:38:54,370 --> 00:38:59,780 каб гарантаваць, што х + у не выклікае перапаўненне цэлага ". 414 00:38:59,780 --> 00:39:08,350 Так што гэта сапраўды ёсць праблемы, гэта было цэлалікавага перапаўнення, але я зрабіў нешта не так. 415 00:39:08,350 --> 00:39:10,520 Я не ўпэўнены. Я паспрабую прыдумаць іншы. 416 00:39:10,520 --> 00:39:13,640 [Студэнт] Ну, не цэлалікавых перапаўненне, калі вы спрабуеце паставіць побач там 417 00:39:13,640 --> 00:39:16,640 больш, чым колькасць біт вы вылучылі? 418 00:39:16,640 --> 00:39:23,730 Так. У нас ёсць 4 біта. That's - у нас было 4 біта, тады паспрабуйце дадаць да яго 1, так што мы ў канчатковым выніку з 5 біт. 419 00:39:23,730 --> 00:39:26,690 Але 5. біт проста атрымлівае адрэзаць, так. 420 00:39:26,690 --> 00:39:28,970 Гэта магло б на самой справе - 421 00:39:28,970 --> 00:39:33,010 [Студэнт] Ці значыць гэта, кінуць вас пра памылку, ці ж, што - бы, што выдасць памылку? 422 00:39:33,010 --> 00:39:40,720 Нумар Таму няма памылкі. Калі вы дойдзеце да ўзроўню зборкі, спецыяльны біт 423 00:39:40,720 --> 00:39:47,020 дзесьці ўстаноўлена, што сказаў, што перапаўненне, але ў C вы, здаецца, проста не справіцца з гэтым. 424 00:39:47,020 --> 00:39:55,160 На самай справе вы не можаце справіцца з гэтым, калі вы выкарыстоўваеце спецыяльныя інструкцыі па зборцы ў C. 425 00:39:55,160 --> 00:39:58,110 Давайце падумаем аб XOR падпампоўкі. 426 00:39:58,110 --> 00:40:02,220 І я думаю, што артыкулы Вікіпедыі, магчыма, таксама казалі, што - 427 00:40:02,220 --> 00:40:07,310 Так ён і выхоўваўся модульнай арыфметыцы, так што я думаю, я быў, па ідэі, рабіць модулярный арыфметыкі 428 00:40:07,310 --> 00:40:11,160 Калі я сказаў, што 0 - 1 у 15 разоў. 429 00:40:11,160 --> 00:40:15,410 Так што можа на самой справе - на рэгулярнай працэсара, што робіць 0 - 1 = 15. 430 00:40:15,410 --> 00:40:20,430 Так як мы ў канчатковым выніку на 0, мы адымаем 1, так то проста азірайцеся назад да 1111. 431 00:40:20,430 --> 00:40:28,930 Такім чынам, гэты алгарытм можа на самай справе працуюць, A + B, A - B, B -, то можа быць штраф. 432 00:40:28,930 --> 00:40:34,030 Але ёсць некаторыя працэсары, якія не робяць гэтага, і таму ён не будзе добра ў гэтыя спецыфічныя. 433 00:40:34,030 --> 00:40:39,880 XOR своп будзе працаваць на любым працэсары. Добра. 434 00:40:39,880 --> 00:40:42,280 Ідэя складаецца ў тым, што ён павінен быць такім жа, усё ж. 435 00:40:42,280 --> 00:40:50,120 Дзе мы выкарыстоўваем XOR нейкім чынам атрымаць інфармацыю як у 1 зменных, 436 00:40:50,120 --> 00:40:54,120 , А затым выцягнуць інфармацыю з асобных зменных зноў. 437 00:40:54,120 --> 00:41:04,330 Так хто-небудзь ёсць ідэі / адказ? 438 00:41:04,330 --> 00:41:14,540 [Студэнт адказ, неразборліва] 439 00:41:14,540 --> 00:41:22,220 Так гэта павінна працаваць, а таксама, XOR з'яўляецца коммутативной. 440 00:41:22,220 --> 00:41:27,620 Незалежна ад таго, у якім парадку гэтыя 2 нумары здарыцца быць у тут, 441 00:41:27,620 --> 00:41:30,100 Гэты вынік будзе той жа. 442 00:41:30,100 --> 00:41:35,800 Так ^ Ь Ь. 443 00:41:35,800 --> 00:41:51,860 Вы таксама можаце ўбачыць гэта ў выглядзе = B, B =, = б зноў. 444 00:41:51,860 --> 00:42:00,200 Такім чынам, гэта права, і зразумець, чаму гэта працуе, думаюць пра бітах. 445 00:42:00,200 --> 00:42:10,400 З дапамогай невялікага ліку, скажам, 11001, 01100 і. 446 00:42:10,400 --> 00:42:12,790 Так што гэта 'а', гэта б. 447 00:42:12,790 --> 00:42:15,540 Такім чынам, ^ = Ь. 448 00:42:15,540 --> 00:42:22,380 Мы збіраемся быць усталяваны ў 'а' = да XOR гэтыя 2 рэчы. 449 00:42:22,380 --> 00:42:32,920 Такім чынам, 1 ^ 0, 1, 1 ^ 1 = 0, 0 ^ 1 = 1, і 0 ^ 0 = 0, 1 = 0 = 1. 450 00:42:32,920 --> 00:42:37,380 Такім чынам, ',', калі вы паглядзіце на дзесятковы лік, яно будзе - 451 00:42:37,380 --> 00:42:41,160 Вы не ўбачыце вялікую частку адносін паміж арыгіналам "а" і новага "," 452 00:42:41,160 --> 00:42:45,600 але, гледзячы на ​​біт "," цяпер, як сетка інфармацыі 453 00:42:45,600 --> 00:42:49,970 як арыгінал "і арыгінальныя б. 454 00:42:49,970 --> 00:42:57,930 Такім чынам, калі мы возьмем Ь, мы бачым, што мы ў канчатковым выніку на арыгінал ". 455 00:42:57,930 --> 00:43:08,910 А калі ўзяць арыгінал "'^ новыя", "мы бачым, мы ў канчатковым выніку на арыгінальныя б. 456 00:43:08,910 --> 00:43:18,380 Такім чынам, (Ь) ^ B = арыгінал ". 457 00:43:18,380 --> 00:43:27,910 І (Ь) ^ = арыгінальныя б. 458 00:43:27,910 --> 00:43:37,010 Існуе - яшчэ адзін спосаб убачыць гэта нічога XOR сам заўсёды роўны 0. 459 00:43:37,010 --> 00:43:45,020 Такім чынам, 1101 * 1101, усе біты будзе тое ж самае. 460 00:43:45,020 --> 00:43:47,920 Так што там ніколі не будзе выпадак, калі 1 з'яўляецца 0, а іншы роўны 1. 461 00:43:47,920 --> 00:43:51,080 Такім чынам, гэта 0000. 462 00:43:51,080 --> 00:43:57,240 Тое ж і з гэтым. (Ь) ^ б, як ^ (Ь б). 463 00:43:57,240 --> 00:44:03,680 (Б ^ б) будзе 0, а Ф 0 толькі збіраецца быць "," так як усе біты роўныя 0. 464 00:44:03,680 --> 00:44:08,050 Такім чынам, толькі тыя, якія збіраюцца быць там, дзе "а" першапачаткова быў 1 - было з іх. 465 00:44:08,050 --> 00:44:12,070 І тая ж ідэя тут, я ўпэўнены, што гэта таксама коммутативна. 466 00:44:12,070 --> 00:44:17,590 Так. Я ж кажу, да гэтага яна была коммутативной. 467 00:44:17,590 --> 00:44:24,680 ^ ',' І гэта асацыятыўныя, так што цяпер (Ь) ^. 468 00:44:24,680 --> 00:44:28,970 І мы можам зрабіць, Ь (^). 469 00:44:28,970 --> 00:44:31,540 І вось зноў, мы атрымаем арыгінальны б. 470 00:44:31,540 --> 00:44:37,120 Такім чынам,'' цяпер спалучэнне 'а' і б разам. 471 00:44:37,120 --> 00:44:49,660 Выкарыстоўваючы наш новы комба "а" мы кажам, B = комба'' ^ арыгінальных б, атрымліваем арыгінальны '. 472 00:44:49,660 --> 00:45:05,170 А цяпер комба = 'а' ^ новы б, які быў арыгінальным - і які цяпер, што было "а" ці б. 473 00:45:05,170 --> 00:45:13,620 Вось гэты выпадак тут. Гэта = б, старая б. 474 00:45:13,620 --> 00:45:16,550 Так што цяпер усё зноў у парадку памяняліся месцамі. 475 00:45:16,550 --> 00:45:22,960 Калі б мы паглядзелі на біты, B = ^ B, будзе XOR гэтых 2, 476 00:45:22,960 --> 00:45:33,920 і адказ будзе гэтага, а затым = ^ Коммерсанта XORing гэтыя 2 і адказ заключаецца ў наступным. 477 00:45:33,920 --> 00:45:41,090 Пытанні? Добра. Такім чынам, апошні некалькі значна больш цяжкім. 478 00:45:41,090 --> 00:45:43,180 [Студэнт] Я думаю, што ў яго ёсць сумневы. >> Ой, прабачце. 479 00:45:43,180 --> 00:45:49,380 [Студэнт] Што на самай справе хутчэй? Калі вы выкарыстоўваеце гэты XOR, ці гэта, калі вы аб'явіце новую зменную? 480 00:45:49,380 --> 00:45:55,190 Так што ж такое на самай справе хутчэй, абвясціўшы новую зменную або з дапамогай XOR, каб памяняць? 481 00:45:55,190 --> 00:45:59,600 Адказ, па ўсёй верагоднасці, часовай зменнай. 482 00:45:59,600 --> 00:46:05,780 І гэта таму, што як толькі ён складзены ўніз - так, на ўзроўні зборкі, 483 00:46:05,780 --> 00:46:12,320 няма такой рэчы, як лакальныя зменныя або часовыя пераменныя або любое з гэтага матэрыялу. 484 00:46:12,320 --> 00:46:16,060 Яны проста хацелі - ёсць памяць, і ёсць рэгістры. 485 00:46:16,060 --> 00:46:20,920 Рэгістры, дзе ўсё актыўна адбываецца. 486 00:46:20,920 --> 00:46:24,750 Вы не дадаюць 2 рэчы ў памяці, вы дадаюць 2 рэчы ў рэгістрах. 487 00:46:24,750 --> 00:46:28,160 І вы прыносіце рэчы з памяці ў рэгістры затым дадаць іх, 488 00:46:28,160 --> 00:46:33,180 а затым вы можаце пакласці іх назад у памяць, але ўсё дзеянне адбываецца ў рэгістрах. 489 00:46:33,180 --> 00:46:38,750 Такім чынам, калі вы з дапамогай часовай зменнай падыход, як правіла, адбываецца тое, 490 00:46:38,750 --> 00:46:42,810 гэтыя 2 нумары ўжо знаходзяцца ў рэгістрах. 491 00:46:42,810 --> 00:46:46,570 А потым з гэтага моманту, пасля таго як вы іх месцамі, 492 00:46:46,570 --> 00:46:51,540 гэта будзе проста пачаць выкарыстаць іншы рэгістр. 493 00:46:51,540 --> 00:46:56,510 Дзе б вы ні былі выкарыстаннем Коммерсанта, гэта будзе проста выкарыстоўваць рэгістр, які быў ужо захоўванні ". 494 00:46:56,510 --> 00:47:02,180 Так што не трэба нічога рабіць на самай справе рабіць замены. Да? 495 00:47:02,180 --> 00:47:05,690 [Студэнт] Але гэта таксама патрабуе больш памяці, правільна? 496 00:47:05,690 --> 00:47:10,280 Гэта зойме больш памяці, калі гэта неабходна для захоўвання, што часовая зменная. 497 00:47:10,280 --> 00:47:14,830 Напрыклад, калі вы пазней выкарыстоўваць гэтую часовую зменную зноў дзесьці, 498 00:47:14,830 --> 00:47:18,920 Затым - ці вы прызначаеце нешта, што часовая зменная. 499 00:47:18,920 --> 00:47:24,630 Так, калі ў любы момант часу ',' б ў тэмпературы маюць розныя значэнні або нешта, 500 00:47:24,630 --> 00:47:30,680 то гэта будзе мець розныя месцы ў памяці, але гэта праўда, што 501 00:47:30,680 --> 00:47:34,800 Ёсць шмат лакальных зменных, якія існуюць толькі ў рэгістрах. 502 00:47:34,800 --> 00:47:44,370 У такім выпадку, ён ніколі не ставіў у памяць, і таму вы ніколі не марнуючы памяці. 503 00:47:44,370 --> 00:47:58,620 Добра. Апошні пытанне крыху больш. 504 00:47:58,620 --> 00:48:04,850 Дык вось, у гэтым CS50 прыбор, ёсць слоўнік. 505 00:48:04,850 --> 00:48:12,390 І прычына гэтага ў тым, што [? B66] з'яўляецца праверка арфаграфіі, дзе вы будзеце пісаць 506 00:48:12,390 --> 00:48:15,780 з выкарыстаннем хэш-табліц або спроб ці некаторыя структуры дадзеных. 507 00:48:15,780 --> 00:48:22,660 Вы збіраецеся пісаць праверкі арфаграфіі, і вы збіраецеся выкарыстаць гэты слоўнік, каб зрабіць гэта. 508 00:48:22,660 --> 00:48:28,280 Але для гэтай задачы, мы проста будзем глядзець уверх, каб убачыць, калі адно слова ёсць у слоўніку. 509 00:48:28,280 --> 00:48:31,250 Такім чынам, замест таго, каб захоўваць увесь слоўнік ў некаторай структуры дадзеных 510 00:48:31,250 --> 00:48:35,180 , А затым, азіраючыся на ўвесь дакумент, каб убачыць, калі нічога гэта няправільна, 511 00:48:35,180 --> 00:48:38,490 Мы проста хочам, каб знайсці 1 слова. Такім чынам, мы можам проста сканаваць па ўсёй слоўнік 512 00:48:38,490 --> 00:48:44,300 і калі мы ніколі не знойдзем слова ва ўсім слоўніку, то ён не быў там. 513 00:48:44,300 --> 00:48:52,150 Калі мы праглядаем па ўсёй слоўнік і бачу слова, тое, што мы добрыя, мы знайшлі яго. 514 00:48:52,150 --> 00:48:56,580 Тут гаворыцца, што мы хочам, каб пачаць глядзець на файл-функцыі апрацоўкі C, у 515 00:48:56,580 --> 00:48:59,930 так як мы хочам, каб прачытаць слоўнік, 516 00:48:59,930 --> 00:49:07,680 але я дам падказку тут пра тое, якія функцыі вы павінны думаць. 517 00:49:07,680 --> 00:49:11,510 Я напішу іх на прасторах. 518 00:49:11,510 --> 00:49:20,490 Такім чынам, асноўнымі з якіх вы хочаце, каб глядзець на гэта адкрытая F, а затым, непазбежна, F замкнёна, 519 00:49:20,490 --> 00:49:26,540 , Якія пойдуць у канцы вашай праграмы, і е е сканавання. 520 00:49:26,540 --> 00:49:31,060 Вы таксама можаце выкарыстоўваць F чытаць, але вы, верагодна, не хочуць 521 00:49:31,060 --> 00:49:34,200 таму што - вы не ў канчатковым выніку трэба гэта. 522 00:49:34,200 --> 00:49:41,880 F сканавання F з'яўляецца тое, што вы збіраецеся выкарыстоўваць для сканавання па слоўніку. 523 00:49:41,880 --> 00:49:46,370 І таму вам не трэба, каб закадаваць да рашэння, проста паспрабуйце і, як псеўда-код свой шлях 524 00:49:46,370 --> 00:50:05,200 Да раствору, а затым мы абмяркуем гэта. 525 00:50:05,200 --> 00:50:14,110 А на самай справе, паколькі я ўжо даў вам гэта, калі вы ідзяце ў любым тэрмінале або абалонкі прыбора, у 526 00:50:14,110 --> 00:50:18,250 Я хацеў бы - я звычайна - калі вы яшчэ не бачылі, я не ведаю, калі б вы зрабілі ў класе, 527 00:50:18,250 --> 00:50:23,490 але чалавек, таму старонках мужчына, даволі карысна для гледзячы на ​​амаль любой функцыі. 528 00:50:23,490 --> 00:50:27,330 Так што я магу зрабіць, быццам бы, MAN F, сканаванне ф. 529 00:50:27,330 --> 00:50:32,300 Гэта цяпер Інфармацыя пра сям'ю сканавання F функцый. 530 00:50:32,300 --> 00:50:37,070 Я мог бы таксама зрабіць MAN F, адкрытай, і што дасць мне інфармацыю пра гэта. 531 00:50:37,070 --> 00:50:40,750 Так што, калі вы ведаеце, якія функцыі вы выкарыстоўваеце, або вы праглядаеце код 532 00:50:40,750 --> 00:50:43,000 , І вы ўбачыце некаторыя функцыі, і вы накшталт: "Што ж гэта рабіць?" 533 00:50:43,000 --> 00:50:45,280 Проста чалавек, што імя функцыі. 534 00:50:45,280 --> 00:50:47,340 Ёсць некалькі дзіўных прыкладаў, дзе вы маглі б сказаць, 535 00:50:47,340 --> 00:50:51,620 падабаецца. Чалавек 2, што імя функцыі, або чалавека 3, што імя функцыі, 536 00:50:51,620 --> 00:50:58,230 але Вы толькі павінны зрабіць, што калі чалавек імя функцыі не бывае, каб працаваць у першы раз. 537 00:50:58,230 --> 00:51:03,010 [Студэнт] Так што я чытаў даведачную старонку для адкрытага, але я да гэтага часу блытаюць аб тым, як яго выкарыстоўваць і праграмы. 538 00:51:03,010 --> 00:51:06,170 Добра. Многія мужчыны старонак менш, чым карысным. 539 00:51:06,170 --> 00:51:08,470 Яны больш карысныя, калі вы ўжо ведаеце, што яны робяць 540 00:51:08,470 --> 00:51:12,670 а затым вы проста павінны памятаць, парадак аргументаў ці чамусьці. 541 00:51:12,670 --> 00:51:17,640 Ці яны могуць даць вам агульнае ўяўленне, але некаторыя з іх вельмі пераважнай. 542 00:51:17,640 --> 00:51:22,220 Як і F сканавання F, а таксама. Гэта дае вам інфармацыю для ўсіх гэтых функцый, 543 00:51:22,220 --> 00:51:28,120 і 1 радок тут адбываецца, сказаць: "F F сканавання счытвае з пункту радок або паток". 544 00:51:28,120 --> 00:51:32,360 Але F адкрыць. Такім чынам, як мы выкарыстоўваем F адкрыта? 545 00:51:32,360 --> 00:51:38,470 Ідэя праграмы, якія неабходна зрабіць файл уводу / высновы з'яўляецца тое, што 546 00:51:38,470 --> 00:51:45,070 Вы спачатку трэба адкрыць файл, які вы хочаце зрабіць нешта з, і непазбежна, 547 00:51:45,070 --> 00:51:51,220 чытаць рэчы з гэтага файла і рабіць рэчы з імі. 548 00:51:51,220 --> 00:51:55,350 F адкрытых тое, што мы выкарыстоўваем, каб адкрыць файл. 549 00:51:55,350 --> 00:52:04,190 Тое, што мы вернемся, так што файл мы хочам адкрыць, яна дае нам - 550 00:52:04,190 --> 00:52:11,970 Тут ён кажа: "/ карыстальніка / долі / Dict / слова». 551 00:52:11,970 --> 00:52:16,740 Гэта файл, які мы хочам адкрыць, і мы хочам, каб адкрыць яго - 552 00:52:16,740 --> 00:52:21,440 мы павінны відавочна паказаць, ці жадаем мы, каб адкрыць яго для чытання або, калі мы хочам, каб адкрыць яго пісаць. 553 00:52:21,440 --> 00:52:26,490 Там у пару камбінацый і іншае, але мы хочам, каб адкрыць гэта для чытання. 554 00:52:26,490 --> 00:52:29,380 Мы хочам, каб чытанне з файла. 555 00:52:29,380 --> 00:52:34,290 Такім чынам, што ж гэта вяртанне? Яна вяртае файл зорачкай (*), 556 00:52:34,290 --> 00:52:37,260 і я проста пакажу ўсё, што ў зменнай F, так *, 557 00:52:37,260 --> 00:52:40,840 зноў жа, гэта паказальнік, але мы не хочам мець справу з паказальнікамі. 558 00:52:40,840 --> 00:52:46,470 Вы можаце думаць, як F, F цяпер пераменная вы збіраецеся выкарыстоўваць для прадстаўлення файла. 559 00:52:46,470 --> 00:52:49,850 Так што, калі вы хочаце прачытаць з файла, вы чытаеце з ф. 560 00:52:49,850 --> 00:52:54,820 Калі вы хочаце, каб закрыць файл, вы зачыняеце ф. 561 00:52:54,820 --> 00:53:00,350 Так, у канцы праграмы, калі мы непазбежна хочуць зачыніць файл, тое, што мы павінны рабіць? 562 00:53:00,350 --> 00:53:06,750 Мы хочам, каб закрыць ф. 563 00:53:06,750 --> 00:53:12,600 Так што зараз апошняя функцыя файл, які мы збіраемся хочаце выкарыстоўваць сканаванне F, F сканавання ф. 564 00:53:12,600 --> 00:53:20,930 І што, што робіць гэта яна скануе на файл шукае шаблонам. 565 00:53:20,930 --> 00:53:39,100 Гледзячы на ​​мужчыну старонцы тут, мы бачым Int F сканавання F, ігнараваць вяртаецца значэнне на дадзены момант. 566 00:53:39,100 --> 00:53:45,230 Першым аргументам з'яўляецца файл патоку *, так што першы аргумент мы збіраемся хочаце перадаць IS-F. 567 00:53:45,230 --> 00:53:47,900 Мы сканавання па ф. 568 00:53:47,900 --> 00:53:53,680 Другі аргумент з'яўляецца радком фармату. 569 00:53:53,680 --> 00:53:58,310 Я дам вам фармат радкі прама цяпер. 570 00:53:58,310 --> 00:54:05,180 Я думаю, што мы, здараецца, кажуць, 127s \ п, шмат гэта непатрэбным. 571 00:54:05,180 --> 00:54:12,490 Ідэя пра тое, што гэты фармат радкі, што вы можаце думаць аб е сканаванне як супрацьлегласць друку ф. 572 00:54:12,490 --> 00:54:17,160 Такім чынам, друк F, F друку, мы таксама выкарыстоўваем гэты тып фармату параметру, 573 00:54:17,160 --> 00:54:25,000 але ў друку F тое, што мы робім, - давайце паглядзім на эквіваленту. 574 00:54:25,000 --> 00:54:32,550 Такім чынам, друк е, і ёсць на самай справе таксама F друк F, дзе першы аргумент будзе ф. 575 00:54:32,550 --> 00:54:40,980 Калі вы друкуеце F, мы маглі б сказаць нешта накшталт: "друк 127s \ п", а затым, калі мы перададзім яму некаторыя радкі, 576 00:54:40,980 --> 00:54:44,050 ён збіраецца надрукаваць гэты радок, а затым з новага радка. 577 00:54:44,050 --> 00:54:49,690 Якія сродкі 127, я ўпэўнены, але я ніколі не абмяжоўваў сябе да яго, 578 00:54:49,690 --> 00:54:52,470 Вы нават не трэба казаць '127 'у друкаваных F, 579 00:54:52,470 --> 00:54:57,090 Але што гэта азначае, раздрукуйце 1. 127 знакаў. 580 00:54:57,090 --> 00:54:59,350 Так што я ўпэўнены, што гэта так. Вы можаце Google за гэта. 581 00:54:59,350 --> 00:55:03,000 Але ў наступны я амаль упэўнены, гэта азначае, што. 582 00:55:03,000 --> 00:55:08,880 Так што гэта надрукавана першая 127 знакаў, а затым з новага радка. 583 00:55:08,880 --> 00:55:14,680 F сканавання F цяпер, замест таго, каб, гледзячы на ​​зменную і друк, 584 00:55:14,680 --> 00:55:22,620 гэта будзем глядзець на некаторыя радкі і захаваць шаблон ў зменную. 585 00:55:22,620 --> 00:55:26,360 Давайце рэальна выкарыстоўваць сканаванне е ў іншы прыклад. 586 00:55:26,360 --> 00:55:31,670 Так скажам, у нас былі некаторыя INT, х = 4, 587 00:55:31,670 --> 00:55:41,110 і мы хацелі стварыць радок зроблены з - хацелі стварыць радок 588 00:55:41,110 --> 00:55:44,250 , Што было падобна, гэта прыйдзе значна пазней, 589 00:55:44,250 --> 00:55:49,020 тое, што сапраўды гэтак жа як 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Такім чынам, гэта можа быць праграма, дзе вы будзеце мець суму лічыльніка, 591 00:55:51,870 --> 00:55:56,420 Падводзячы супрацьдзеянні я, і вы хочаце зэканоміць кучу фатаграфій. 592 00:55:56,420 --> 00:56:02,430 Такім чынам, вы хочаце захаваць i.jpg, дзе я некаторы ітэрацыі цыкле. 593 00:56:02,430 --> 00:56:05,500 Так як жа нам зрабіць гэты радок, што JPEG? 594 00:56:05,500 --> 00:56:11,720 Калі вы хочаце раздрукаваць 4.jpg, мы маглі б проста сказаць, друк F,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 , А затым яна будзе друкаваць для гэтага JPEG. 596 00:56:14,410 --> 00:56:20,050 Але калі мы хочам захаваць радок 4.jpg, мы выкарыстоўваем сканаванне ф. 597 00:56:20,050 --> 00:56:30,860 Такім чынам, радок S - на самай справе мы не можаш - сімвал, сімвал S, давай 100. 598 00:56:30,860 --> 00:56:35,400 Так што я проста заявілі некаторыя масіў з 100 сімвалаў, 599 00:56:35,400 --> 00:56:39,830 і вось што мы непазбежна будзем захоўваць, што JPEG цалі 600 00:56:39,830 --> 00:56:47,920 Так што мы збіраемся выкарыстаць сканаванне е, і фармат, як мы б сказалі,% d.jpg 601 00:56:47,920 --> 00:56:54,980 для таго, каб раздрукаваць 4.jpg, фармат гэтага будзе d.jpg%. 602 00:56:54,980 --> 00:57:04,020 Такім чынам, фармат% d.jpg, што мы хочам замяніць% D, з'яўляецца х, 603 00:57:04,020 --> 00:57:06,590 і зараз мы павінны захоўваць гэты радок недзе. 604 00:57:06,590 --> 00:57:12,500 А дзе мы будзем захоўваць гэтую радок у масіве с. 605 00:57:12,500 --> 00:57:21,640 Такім чынам, пасля гэтага радка кода, а, калі мы друкуем F,% з зменнай с, 606 00:57:21,640 --> 00:57:26,280 ён збіраецца друкаваць 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Такім чынам, F сканавання F такая ж, як сканіраванне F, толькі зараз яна глядзіць на гэты файл 608 00:57:38,930 --> 00:57:43,600 за тое, што захоўваць у с. 609 00:57:43,600 --> 00:57:46,160 Гэта тое, што апошні аргумент будзе. 610 00:57:46,160 --> 00:57:54,170 Мы хочам, каб захоўваць - "Scan е сямейства функцый сканавання і ў адпаведнасці з фарматам, як спрабаваў ніжэй. 611 00:57:54,170 --> 00:58:02,450 Калі захоўваецца ў размяшчэнні пунктаў вы маглі б вярнуцца - " 612 00:58:02,450 --> 00:58:12,910 Не, мы маглі б быць добрымі. Дазвольце мне думаць ні на секунду. 613 00:58:12,910 --> 00:58:26,350 Такім чынам, сканаванне F - не, якога чорта гэта функцыя, якая робіць гэта? 614 00:58:26,350 --> 00:58:31,650 Такім чынам, сканаванне F не збіраецца прымаць цэлае і зрабіць кропку JPG. 615 00:58:31,650 --> 00:58:43,490 Гэта будзе [мармыча]. 616 00:58:43,490 --> 00:58:49,360 Захаваць Int зменнай у радок Int C. 617 00:58:49,360 --> 00:58:55,940 Што гэта зменная, або тое, што гэтая функцыя называецца? 618 00:58:55,940 --> 00:59:04,950 Так. That's - так. Так што я быў вызначальным для вас да гэтага быў з друку F, 619 00:59:04,950 --> 00:59:09,820 які - што нашмат больш сэнсу, таму я сказаў, што гэта значна больш падобна друку ф. 620 00:59:09,820 --> 00:59:14,700 Сканіраванне F-ранейшаму накшталт як друк F, але з друку F будзе праверыць яго на 621 00:59:14,700 --> 00:59:17,510 і замяніць зменныя і цяпер захоўваць яго ў радок. 622 00:59:17,510 --> 00:59:19,620 Замест друку, яно захоўвае яго ў радок. 623 00:59:19,620 --> 00:59:25,070 Так што ігнараваць цалкам. Вы ўсё яшчэ можаце думаць фармату, як такія друку ф. 624 00:59:25,070 --> 00:59:34,510 Так што цяпер, калі мы хацелі зрабіць 4.jpg рэч, мы будзем рабіць з друку F, X аб гэтым. 625 00:59:34,510 --> 00:59:38,520 Так што сканаванне F робіць - тое, што ваша пытанне будзе? 626 00:59:38,520 --> 00:59:40,820 [Студэнт] Я проста заблытаўся ў тое, што мы спрабуем зрабіць прама тут 627 00:59:40,820 --> 00:59:43,450 з JPEG. Ці можаце вы растлумачыць, што 1 больш часу? 628 00:59:43,450 --> 00:59:52,710 Так што гэта было - гэта менш за relevent для сканавання F F цяпер, спадзяюся, ён будзе звязваць яшчэ ў нейкі шлях. 629 00:59:52,710 --> 01:00:02,240 Але тое, што я першапачаткова збіраўся паказаць было - гэта на самай справе непасрэднае дачыненне да гэтых [? F5] 630 01:00:02,240 --> 01:00:08,520 Вы збіраецеся выкарыстоўваць друк з F, дзе ў нас ёсць 100 малюнкаў, 631 01:00:08,520 --> 01:00:13,630 і вы хочаце чытаць 1.jpg малюнка, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Таму для таго, каб зрабіць гэта, вам трэба е адкрытае, а затым вы павінны перадаць у радок, якую вы хочаце адкрыць. 633 01:00:21,520 --> 01:00:30,020 Такім чынам, мы хацелі б адкрыць 1.jpg, для таго, каб стварыць радок, якая 1.jpg, 634 01:00:30,020 --> 01:00:37,660 Мы робім пячатку з Р% d.jpg--мы не рабілі для Int = 0. 635 01:00:37,660 --> 01:00:46,580 я <40, я + +. 636 01:00:46,580 --> 01:00:51,130 Такім чынам, з друк F% d.jpg ўводу. 637 01:00:51,130 --> 01:00:56,320 Такім чынам, пасля гэтай лініі, цяпер пераменная або масіў, а збіраецца 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Ці, 0.jpg, 1.jpg, 2.jpg. І такім чынам мы можам адкрыць, у сваю чаргу, кожнае малюнак для чытання. 639 01:01:10,610 --> 01:01:19,550 Так што тое, што з друку F робіць. Вы бачыце, што з друку F цяпер рабіць? 640 01:01:19,550 --> 01:01:25,720 [Студэнт] Такім чынам, ён прымае - ён стварае радок, something.jpg, а затым захоўвае яго. 641 01:01:25,720 --> 01:01:30,360 Так. Гэта стварае - гэта яшчэ адзін радок фармату, як сканіраванне і друк F F, 642 01:01:30,360 --> 01:01:37,530 , Дзе ён устаўляе ўсе зменныя ў другім аргуменце, можа быць ёй, у адрозненне ад мяне. 643 01:01:37,530 --> 01:01:42,280 Можа быць - я маю на ўвазе, што гэта так. Але ў любым парадку аргументаў. 644 01:01:42,280 --> 01:01:45,440 Гэта будзе ўставіць ўсе зменныя ў радок фармату 645 01:01:45,440 --> 01:01:52,250 , А затым захаваць у нашым буферы; мы называем гэта буфер, дзе мы захоўвання радка. 646 01:01:52,250 --> 01:02:00,750 Такім чынам, мы захоўваем ўнутры з правільнай радкі ў фармаце,% D быўшы заменены 4. 647 01:02:00,750 --> 01:02:08,080 [Студэнт] Такім чынам, калі б мы зрабілі гэта, з'яўляецца зменнай F толькі збіраецца быць пераназначаны? 648 01:02:08,080 --> 01:02:18,110 Так. Такім чынам, мы павінны зачыніць арыгінальную е, перш чым рабіць гэта. 649 01:02:18,110 --> 01:02:22,810 Але - і тут жа, калі б не было F адкрываюць тут, то мы павінны былі б сказаць - 650 01:02:22,810 --> 01:02:29,280 Так. Але было б адкрыць сотні розных файлаў. 651 01:02:29,280 --> 01:02:37,360 [Студэнт] Але мы не былі б у стане атрымаць доступ або - нармальна. 652 01:02:37,360 --> 01:02:44,230 Добра. Такім чынам, сканаванне F, F сканавання F, гэта свайго роду тая ж ідэя, 653 01:02:44,230 --> 01:02:53,610 але замест таго, замест таго, каб захоўваць яго ў радок, гэта больш падобна вы зараз 654 01:02:53,610 --> 01:03:02,420 пераходзячы джала і супастаўлення з гэтай радком і захоўванне вынікаў у зменныя. 655 01:03:02,420 --> 01:03:11,290 Вы можаце выкарыстоўваць сканаванне F разабраць на нешта накшталт 4.jpg, і захоўваць цэлы лік 4 у суме х Int. 656 01:03:11,290 --> 01:03:13,430 Гэта тое, што мы можам выкарыстоўваць для сканавання е. 657 01:03:13,430 --> 01:03:16,300 F F сканавання збіраецца зрабіць гэта ў камандным радку. 658 01:03:16,300 --> 01:03:19,200 Я на самой справе упэўнены, што гэта тое, што бібліятэка CS50 робіць. 659 01:03:19,200 --> 01:03:29,050 Таму, калі вы кажаце: "атрымаць Int", гэта сканаванне F-ня больш - сканаванне F з'яўляецца спосаб атрымання карыстацкага ўводу. 660 01:03:29,050 --> 01:03:34,670 F сканавання F будзе рабіць тое ж самае, але з выкарыстаннем файлаў для сканавання па. 661 01:03:34,670 --> 01:03:41,090 Дык вось, мы сканаванні над гэтым файлам. 662 01:03:41,090 --> 01:03:45,460 Ўзор, які мы спрабуем адпавядаць некаторая радок, якая складае 127 сімвалаў 663 01:03:45,460 --> 01:03:48,100 рушыла ўслед новая лінія 664 01:03:48,100 --> 01:03:54,770 Так што я ўпэўнены, што мы маглі б нават проста сказаць: "адпавядае ы", так як у слоўніку 665 01:03:54,770 --> 01:03:57,770 Мы, аказваецца, ёсць, мы гарантавана няма слоў з'яўляецца тое, што доўгая, 666 01:03:57,770 --> 01:04:03,310 а таксама F сканавання е, я думаю, будзе спыняцца на новай лініі ні на што. 667 01:04:03,310 --> 01:04:06,970 Але мы будзем ўключаць новыя радкі ў матчы, і - 668 01:04:06,970 --> 01:04:13,960 [Студэнт] Калі мы не будзем ўключаць новыя лініі, не было б знайсці часткі слова? 669 01:04:13,960 --> 01:04:22,900 Гэта - кожнаму - гледзячы на ​​слоўнік - 670 01:04:22,900 --> 01:04:26,200 Так, у слоўніку, усе гэтыя нашы словы. 671 01:04:26,200 --> 01:04:30,500 Кожны з іх з новага радка. 672 01:04:30,500 --> 01:04:32,510 F сканавання збіраецца забраць гэтае слова. 673 01:04:32,510 --> 01:04:38,750 Калі мы не будзем ўключаць новыя лініі, то цалкам магчыма, што наступны F сканаванне будзе проста прачытаць новую радок. 674 01:04:38,750 --> 01:04:44,180 Але ў тым ліку новыя лініі, то будзе проста ігнараваць новую радок. 675 01:04:44,180 --> 01:04:49,440 Але мы ніколі не атрымаем частка слова, так як мы заўсёды чытаў да новай лініі, нягледзячы ні на што. 676 01:04:49,440 --> 01:04:54,530 [Студэнт] Але што, калі вы шукаеце слова "перакручаны апетыт", як перакручаны апетыт. 677 01:04:54,530 --> 01:04:57,380 Ці будзе гэта, што і казаць, што гэта матч? 678 01:04:57,380 --> 01:05:05,110 І вось мы - ён будзе чытаць - гэта на самай справе добры момант. 679 01:05:05,110 --> 01:05:10,660 Мы ніколі з выкарыстаннем бягучага - слова, якое мы шукаем першы аргумент каманднага радка. 680 01:05:10,660 --> 01:05:16,460 Такім чынам, радок, слова = ARGV 1. 681 01:05:16,460 --> 01:05:20,020 Такім чынам, радок мы шукаем з'яўляецца ARGV 1. 682 01:05:20,020 --> 01:05:23,290 Мы не шукаем слова наогул у нашым сканавання ф. 683 01:05:23,290 --> 01:05:28,030 Тое, што мы рабілі з сканаванні F становіцца кожнае слова ў слоўніку, 684 01:05:28,030 --> 01:05:34,320 , А затым, калі ў нас, што слова, якое мы збіраемся выкарыстаць STRCMP каб параўнаць іх. 685 01:05:34,320 --> 01:05:39,210 Мы збіраемся параўнаць нашы словы і тое, што мы толькі што прачыталі цалі 686 01:05:39,210 --> 01:05:45,110 Такім чынам, непазбежна, мы збіраемся ў канчатковым выніку робіць кучу сканаванне ФС 687 01:05:45,110 --> 01:05:52,130 пакуль не так ужо здарылася, што сканаванне F вернецца - 688 01:05:52,130 --> 01:05:54,800 ён будзе вяртаць адзін, пакуль яна адпавядае новым словам, 689 01:05:54,800 --> 01:06:01,360 і ён будзе вяртаць нешта іншае, як толькі яно не адпавядае слова. 690 01:06:01,360 --> 01:06:08,440 Мы чытаем па ўсім слоўніку, захоўванне радок за радком кожнае слова ў зменную с. 691 01:06:08,440 --> 01:06:17,240 Затым мы параўноўваем слова з, а калі параўнанне == 0, 692 01:06:17,240 --> 01:06:21,650 STRCMP адбываецца давесці 0, калі матч быў зроблены. 693 01:06:21,650 --> 01:06:31,510 Так што, калі гэта быў 0, то мы можам надрукаваць F, супадаюць, 694 01:06:31,510 --> 01:06:35,370 або слова ў слоўніку, або што вы хочаце надрукаваць ф. 695 01:06:35,370 --> 01:06:41,450 І потым - мы не хочам, каб F закрыць зноў і зноў. 696 01:06:41,450 --> 01:06:50,410 Гэта такая рэч, што мы хочам зрабіць, і мы не проста шукаеце слова ў слоўніку. 697 01:06:50,410 --> 01:06:56,660 Такім чынам, мы маглі б зрабіць гэта, калі б мы хацелі паглядзець на іх карціны, перакручаны апетыт, як вы казалі, 698 01:06:56,660 --> 01:07:00,260 калі мы хочам, каб шукаць гэтую схему, то яно не будзе ў тым выпадку, 699 01:07:00,260 --> 01:07:08,010 таму што гэта на самай справе не словы, а адно з слоў у слоўніку, здараецца, што ў ім. 700 01:07:08,010 --> 01:07:13,560 Так што гэта будзе адпавядаць гэтым словам, але гэта падмноства слова не само слова. 701 01:07:13,560 --> 01:07:17,250 Але гэта не тое, як мы выкарыстоўваем яе, мы чытаем у кожным слове 702 01:07:17,250 --> 01:07:19,740 , А затым параўноўваючы слова ў нас з гэтым словам. 703 01:07:19,740 --> 01:07:25,780 Такім чынам, мы заўсёды параўнанні поўным слоў. 704 01:07:25,780 --> 01:07:29,620 Я магу адправіць завершана рашэнне пазней. 705 01:07:29,620 --> 01:07:32,050 Гэта свайго роду амаль правільны адказ, я думаю. 706 01:07:32,050 --> 01:07:34,720 [Студэнт каментар, неразборліва] 707 01:07:34,720 --> 01:07:40,870 О, я пазбавіцца ад гэтага раней? Char з, я думаю, мы сказалі 127 - я забыўся, што найбуйнейшы ёсць. 708 01:07:40,870 --> 01:07:44,100 Мы проста робім 128; так што цяпер ёй досыць доўга. 709 01:07:44,100 --> 01:07:46,570 Мы не трэба нічога друкаваць. 710 01:07:46,570 --> 01:07:56,440 Мы таксама збіраемся хочаце, каб закрыць файл, і што павінна быць прыкладна правільны адказ. 711 01:07:56,440 --> 01:07:59,440 CS50.TV