1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Bölmə Problem 2 seçin: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Harvard Universiteti 3 00:00:04,910 --> 00:00:07,410 Bu CS50 edir. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Belə ki, mən Rob edirəm. Mən Kirkland baş deyiləm. Bu CS50 TFing mənim üçüncü ildir. 5 00:00:15,770 --> 00:00:22,220 Bu, biz ənənəvi-mühazirə stil bölümünde dəyişir ki, ilk dəfə 6 00:00:22,220 --> 00:00:25,610 burada uşaqlar sual nə mühazirə baş və sonra nəzərdən biz yalnız növ 7 00:00:25,610 --> 00:00:32,250 indi biz məkanı istifadə harada, bir çox problem əsaslı olan və - 8 00:00:32,250 --> 00:00:37,410 Oh, belə fikir Mən sizə göndərdiyi link getmək və sonra mənim Space olacaq. 9 00:00:37,410 --> 00:00:42,410 Hər bir laptop mövcut deyil? Okay. 10 00:00:42,410 --> 00:00:47,050 Beləliklə, biz bu istifadə olacaq və biz problemlərin məşğul olacaq bölmə yaşayır 11 00:00:47,050 --> 00:00:50,740 və onların müzakirəsi və yanlış nə həyata figuring 12 00:00:50,740 --> 00:00:56,390 və mən sizin kodu bəzi qoparmaq bilər, və mən sizin fikir müzakirə edə bilər. 13 00:00:56,390 --> 00:01:02,140 Belə ki, hər kəs çətinlik var? 14 00:01:02,140 --> 00:01:07,000 Siz tərəfdən sohbet edə bilərsiniz, biz səbəb olacaq əgər mən bilmirəm. 15 00:01:07,000 --> 00:01:12,270 Ki, sinif, əgər İndi, əvvəlki supersection kimi, siz bu barədə nə bilirik. 16 00:01:12,270 --> 00:01:19,200 P dəstləri bütün bu bölmələr olmalıdır olacaq. 17 00:01:19,200 --> 00:01:22,550 P-set 2 Beləliklə, spesifikasiyalar, mən artıq P-set 1 gördüyünü yalan danışarlar. 18 00:01:22,550 --> 00:01:27,400 Amma biz bu gün üzərində gedən olacaq ne üçün P-set 2 baxmaq olar. 19 00:01:27,400 --> 00:01:29,460 Və sual bölüm görəcəksiniz. 20 00:01:29,460 --> 00:01:37,530 Belə ki, bu P-dəstləri bütün olacaq; sual bölməsi var olacaq. 21 00:01:37,530 --> 00:01:41,340 İndiyə qədər biz "Bu təcrübə imkan düşünün.", Deyib sonra 22 00:01:41,340 --> 00:01:44,940 Siz bu proqram təqdim etmək xahiş ediləcək. 23 00:01:44,940 --> 00:01:48,480 Bu fikir bu sizə problem dəsti ilə başlamaq kömək cür ehtimal olunur. 24 00:01:48,480 --> 00:01:53,220 Mən Hacker nəşr tapmaq, onların bir çox yalnız öyrənmək üçün yeni, maraqlı şeylər nəzərdə tutulur. 25 00:01:53,220 --> 00:01:58,590 Onlar problem set birbaşa tətbiq oluna bilər. 26 00:01:58,590 --> 00:02:01,810 Və indi biz onlara təqdim olan, ancaq nəzəri deyilik 27 00:02:01,810 --> 00:02:07,480 sonra problem dəstləri, siz onlara təqdim edə bilər və beləliklə, ya bölmə gələ bilər 28 00:02:07,480 --> 00:02:10,380 və ya cavab almaq üçün bölmə izləmək, və ya sadəcə öz onları əldə edə bilərsiniz 29 00:02:10,380 --> 00:02:16,350 Mənim iştirakı zövq kimi hiss yoxsa. 30 00:02:16,350 --> 00:02:21,010 Belə - Bu ilk biridir. 31 00:02:21,010 --> 00:02:29,280 Oh. Həmçinin, sual bu bölmələr altında biz də sizə şort haqqında sual var. 32 00:02:29,280 --> 00:02:33,440 Mən tapmaq, nəzəriyyəsi, siz, bölmə gəlməzdən əvvəl bu saat ehtimal edirik 33 00:02:33,440 --> 00:02:38,550 Əgər deyilsə, lakin bu gözəl var, biz hər halda onlara gedəcəyəm. 34 00:02:38,550 --> 00:02:42,590 Beləliklə, biz bu başlaya bilərsiniz: "Necə bir müddət loop bir do-isə loop fərqlənir? 35 00:02:42,590 --> 00:02:46,210 Zaman xüsusilə faydalıdır? " 36 00:02:46,210 --> 00:02:49,390 Belə ki, hər hansı bir var -? 37 00:02:49,390 --> 00:02:52,730 [Tələbə] The do-isə loop həmişə ən azı bir dəfə həyata keçiriləcək. 38 00:02:52,730 --> 00:03:02,950 Bəli. Belə ki fərqdir. Bir müddət loop - I'll yalnız burada bunu - loop isə, biz vəziyyət 39 00:03:02,950 --> 00:03:19,760 burada, halbuki bir do-isə biz burada almaq qədər, bir şərt yoxdur. 40 00:03:19,760 --> 00:03:24,130 Və beləcə, proqram icra edir və bu isə loop olur zaman 41 00:03:24,130 --> 00:03:26,380 bu şərt doğru olduqda dərhal yoxlayır. 42 00:03:26,380 --> 00:03:30,710 Bu şərtlə ki, doğru deyil, bu, yalnız tamamilə loop üzərində atlayacak. 43 00:03:30,710 --> 00:03:34,390 Do-isə loop proqram həyata kimi, bu "yoxdur." Olur 44 00:03:34,390 --> 00:03:37,920 Heç bir şey bu anda olur, yalnız həyata davam edir. 45 00:03:37,920 --> 00:03:42,690 Sonra şərt doğru olduqda onu "isə," xit o, loop geri olacaq və yenidən bunu 46 00:03:42,690 --> 00:03:46,730 və təkrar vəziyyəti yalnız vasitəsilə düşür, sonra doğru deyil və qədər. 47 00:03:46,730 --> 00:03:50,600 Belə ki, fərq bu çox start sağ keçmək olar ki, olan. 48 00:03:50,600 --> 00:03:56,770 Bu mütləq bir dəfə həyata və vəziyyəti hələ doğru əgər daha çox dəfə icra edə bilər. 49 00:03:56,770 --> 00:04:03,720 Belə isə loop yalnız bir dəfə bunu, və ya olacaq - isə loop - biz bütün bu nə etmək lazımdır bilər, 50 00:04:03,720 --> 00:04:07,900 vəziyyəti yalan kimi tezliklə biz bunu almaq kimi ildən, biz yalnız üzərində sağ keçmək lazımdır. 51 00:04:07,900 --> 00:04:11,770 Halbuki nə-isə loop, biz mütləq bir dəfə həyata keçiriləcək. 52 00:04:11,770 --> 00:04:14,560 Doğru və ya yalan varsa, sonra biz vəziyyəti almaq zaman, biz yoxlayın. 53 00:04:14,560 --> 00:04:19,790 Doğru, biz yenə bunu edəcəyik, o yalan varsa, biz yalnız davam davam edəcəyik. 54 00:04:19,790 --> 00:04:24,680 Belə ki, zaman xüsusilə faydalıdır? 55 00:04:24,680 --> 00:04:31,190 Mən, 4 il bütövlükdə, 3 il, nə demək olar ki, 56 00:04:31,190 --> 00:04:38,780 Mən proqramlaşdırma etdik ki, mən 10 dəfə altında kimi, bu istifadə. 57 00:04:38,780 --> 00:04:43,140 Biz-isə loops təqdim etdiyiniz zaman yəqin ki, onlardan 5-CS50 var. 58 00:04:43,140 --> 00:04:47,510 Belə ki, loops do-zamanı istifadə zaman? 59 00:04:47,510 --> 00:04:49,510 Zaman deyil - yeah? 60 00:04:49,510 --> 00:04:53,180 [Tələbə] zaman sizi yoxlamaq üçün istədiyiniz istifadəçi giriş, və ya bir şey almaq üçün çalışdığınız - 61 00:04:53,180 --> 00:04:59,700 Bəli. Belə ki, do-isə istifadəçi daxil böyük bir loops. 62 00:04:59,700 --> 00:05:03,160 Niyə ilk bir neçə problem dəstləri ki, sizin kimi, istifadəçi soruşmaq istəyirəm zaman var 63 00:05:03,160 --> 00:05:08,520 Əgər string almaq qədər "Mənə bir string verir," Siz davam edə bilməz. 64 00:05:08,520 --> 00:05:12,980 Və belə ki, mütləq ən azı bir dəfə string üçün müraciət etmək lazımdır. 65 00:05:12,980 --> 00:05:16,950 Lakin onlar pis bir şey cavab əgər, sonra geri loop lazımdır və yenə soruşurlar. 66 00:05:16,950 --> 00:05:20,810 Lakin istifadəçi daxil başqa, mən bir halda qarşılaşa çox nadir var 67 00:05:20,810 --> 00:05:27,170 Mən "ən azı bir dəfə" loop istəyirəm amma bəlkə daha yerləşir. 68 00:05:27,170 --> 00:05:33,370 Suallar və ya - Hər kəs bir do-isə loop başqa yerdə istifadə etmişdirmi? 69 00:05:33,370 --> 00:05:36,780 Okay. Növbəti bir Beləliklə, "Nə identifikatoru bəyan etmir 70 00:05:36,780 --> 00:05:43,310 cingilti ilə outputted əgər adətən göstərir? " 71 00:05:43,310 --> 00:05:47,380 Belə ki, nə cür kodu Mən almaq üçün yazmaq bilər "elan olunmamış identifikatoru? 72 00:05:47,380 --> 00:05:49,550 [Tələbə] Bu x = 2? 73 00:05:49,550 --> 00:05:52,650 Beləliklə, biz burada yalnız bu cəhd edə bilərsiniz, x = 2. 74 00:05:52,650 --> 00:06:04,830 Biz bu run olacaq - oh, mən bunu basın etməyib. Belə ki, burada biz almaq - bütün hüququ. 75 00:06:04,830 --> 00:06:07,100 "Bəyan identifikator x istifadə edin." 76 00:06:07,100 --> 00:06:11,610 Belə ki, bəyan tanıdan bir dəyişən var. 77 00:06:11,610 --> 00:06:13,910 Bu tez-tez dəyişən bir identifikator zəng edəcək. 78 00:06:13,910 --> 00:06:17,300 Belə ki, bu, həqiqətən bir dəyişən olduğunu bilirik bilər, bu nə bilmir. 79 00:06:17,300 --> 00:06:19,380 Belə ki, bir identifikator var. 80 00:06:19,380 --> 00:06:26,060 Belə ki, niyə o bəyan edir? Bəli. 81 00:06:26,060 --> 00:06:32,190 Belə ki, terminologiya, bir dəyişən elan edilməsi haqqında aydın olmaq 82 00:06:32,190 --> 00:06:37,360 siz "int x," və ya "simli y" nə demək zaman. 83 00:06:37,360 --> 00:06:41,910 Dəyişən Bu başlatma və ya dəyişən təyin, 84 00:06:41,910 --> 00:06:44,510 deyə zaman "x = 2" dir. 85 00:06:44,510 --> 00:06:52,950 Belə ki, ayrı-ayrı addımlar bu edə bilərsiniz, int x, x = 2, və qədər - biz burada məhsullarının bir dəstə ola bilər - 86 00:06:52,950 --> 00:07:00,350 Bu xətt olur qədər, lakin x hələ uninitialized, ancaq elan edilmişdir. 87 00:07:00,350 --> 00:07:06,760 Və biz açıq-aydın 1 xətt bunu edə bilərsiniz, indi biz elan və başlatılıyor edir. 88 00:07:06,760 --> 00:07:10,730 Suallar? 89 00:07:10,730 --> 00:07:18,390 Və nəhayət, "Nə Caesar Şifreleme çox təhlükəsiz deyil?" 90 00:07:18,390 --> 00:07:23,830 Belə ki, birinci, hər kəs Caesar Şifreleme nə demək istəyir? 91 00:07:23,830 --> 00:07:28,100 [Tələbə] Caesar Şifreleme yalnız xəritəyə ki, siz hər məktub keçmək 92 00:07:28,100 --> 00:07:34,420 məktubları müəyyən sayda üzərində getmək və artıq geri hərəkət və çox təhlükəsiz deyil, çünki 93 00:07:34,420 --> 00:07:42,260 orada yalnız 26 mümkün variantları və siz onu almaq qədər yalnız o hər 1 cəhd var. 94 00:07:42,260 --> 00:07:45,470 Oh. Belə ki, təkrar edirəm lazımdır? 95 00:07:45,470 --> 00:07:51,600 Bu Caesar Şifreleme, it's - Mən demək, siz ki, siz problemləri ilə məşğul olacaq - 96 00:07:51,600 --> 00:07:56,110 və ya hacker nəşr deyil ki, problem set standart nəşr danışarlar. 97 00:07:56,110 --> 00:08:01,550 Yəni problem set standart nəşr, siz "Salam, dünya", kimi bir mesaj almaq 98 00:08:01,550 --> 00:08:08,410 və siz də 6 kimi bir sıra var, və bu mesajı almaq və hər bir fərdi xarakteri, 99 00:08:08,410 --> 00:08:11,310 Siz əlifba 6 mövqeləri ilə dönüşümlü. 100 00:08:11,310 --> 00:08:16,560 Belə ki, "h" salam-ci h-i-j-k-l-m-n olacaqdır. 101 00:08:16,560 --> 00:08:19,600 Belə ki, ilk məktubu n olacaq. Biz e ilə eyni şey. 102 00:08:19,600 --> 00:08:23,530 Biz varsa, kimi, z və ya bir şey, sonra ətrafında geri paketi 'bir. 103 00:08:23,530 --> 00:08:29,280 Lakin hər bir xarakter əlifbası 6 simvol sonra cycled olur və çox təhlükəsiz deyil 104 00:08:29,280 --> 00:08:35,440 bir məktub kesmek necə çox yollar yalnız 26 imkanlar var-ci ildən. 105 00:08:35,440 --> 00:08:42,919 Belə ki, yalnız uzun kifayət qədər mesaj üçün, güman, hamısı 26 cəhd edə bilərsiniz 106 00:08:42,919 --> 00:08:46,860 bu mümkün 26 şeylər yalnız 1, aydın olacaq 107 00:08:46,860 --> 00:08:50,300 və aydın bir orijinal mesajı olacaq. 108 00:08:50,300 --> 00:08:56,240 Belə ki, bütün bir şey Şifreleme çox yaxşı bir yol deyil. 109 00:08:56,240 --> 00:08:59,070 Bu şort olmayan "bir funksiyası nədir?" 110 00:08:59,070 --> 00:09:03,370 Belə bir funksiyası nədir? Bəli. 111 00:09:03,370 --> 00:09:11,640 [Tələbə] Bu keçir və sonra nə qaytarılması dəyər almaq üçün zəng edə bilərsiniz ki, kodu ayrı bir parça kimi. 112 00:09:11,640 --> 00:09:18,160 Bəli. Də yalnız növbəti bir cavab və ya təkrar - Mən də növbəti cavab cavab olacaq. 113 00:09:18,160 --> 00:09:22,410 Siz daha çox yalnız kodu çıxarmaq ve yapıştırma əvəzinə funksiyaları üzərində istifadə edə bilərsiniz. 114 00:09:22,410 --> 00:09:27,200 Sadəcə, kod almaq bir fuction onu qoymaq və sonra yalnız funksiyası zəng edə 115 00:09:27,200 --> 00:09:29,870 yerdə siz çıxarmaq ve yapıştırma edilmişdir. 116 00:09:29,870 --> 00:09:33,350 Belə funksiyaları faydalıdır. 117 00:09:33,350 --> 00:09:35,860 Belə ki, indi biz aktual problemləri edəcəyik. 118 00:09:35,860 --> 00:09:46,490 İlk. Ilk bir fikir Belə ki, asılı olmayaraq ki simli keçmək və - 119 00:09:46,490 --> 00:09:52,060 və ya bütün kiçik deyir? Bu, bütün kiçik demək deyil. 120 00:09:52,060 --> 00:09:57,730 Belə ki, mesaj bir şey ola bilər - heç bir oh. Bu edir. 121 00:09:57,730 --> 00:10:01,610 "Sadəlik üçün, güman bilər istifadəçi daxil kiçik hərflər və boşluq yalnız olacaq ki,." 122 00:10:01,610 --> 00:10:08,180 Belə ki, yalnız kiçik hərflərlə mesaj ötürmək və sonra biz alternativ 123 00:10:08,180 --> 00:10:15,450 Böyük və kiçik arasında - biz string dəyişən, Böyük və kiçik olması dəyişir. 124 00:10:15,450 --> 00:10:22,920 Belə ki, əvvəl, hətta problem dalış ikinci vermək 125 00:10:22,920 --> 00:10:32,420 biz nə etmək lazımdır ki, ilk şey nədir? 126 00:10:32,420 --> 00:10:36,900 Oh, nə yalnız basın idi? Oh, mən yalnız burada bir e-poçt tıklayan. 127 00:10:36,900 --> 00:10:42,870 Beləliklə, biz nə etmək lazımdır ilk şey - Mən yanlış bir baxaraq edirəm? 128 00:10:42,870 --> 00:10:49,320 Bu bir hissəsi mı? 129 00:10:49,320 --> 00:10:51,320 Xeyr, o da, orada hələ də. 130 00:10:51,320 --> 00:10:55,160 OK, hələ burada. 131 00:10:55,160 --> 00:11:03,160 İndi biz qəbul edə bilər - Bəli. Burada yalnız kiçik və boşluq olduğunu güman edə bilməz. 132 00:11:03,160 --> 00:11:07,770 Belə ki, indi biz məktubları biz onları olmaq istədiyiniz hər hansı ola bilər ki, məşğul olmalıdır. 133 00:11:07,770 --> 00:11:11,910 Və biz istəyirik ilk şey yalnız mesaj əldə edilir. 134 00:11:11,910 --> 00:11:19,790 Biz yalnız tamam, bir string almaq string s = GetString lazımdır. 135 00:11:19,790 --> 00:11:24,890 İndi bu problem, bunu yolları bir neçə var. 136 00:11:24,890 --> 00:11:29,840 Amma biz burada bitwise operatorları istifadə etmək istədiyiniz gedir. 137 00:11:29,840 --> 00:11:35,280 Orada ya supersection da olmayan insanlar, 138 00:11:35,280 --> 00:11:37,480 və ya bir şey, və bitwise operatorları nə bilmirəm? 139 00:11:37,480 --> 00:11:41,710 Yoxsa onlar heç bir şəkildə ASCII aiddir necə? 140 00:11:41,710 --> 00:11:45,650 [Tələbə] Mən supersection deyil, lakin mən bitwise operatoru bilirik. 141 00:11:45,650 --> 00:11:49,560 Okay. Beləliklə, mən onlara əsasları üzərində getmək üçün yoxdur, amma mən izah edəcəyik 142 00:11:49,560 --> 00:11:51,830 Burada istifadə etmək istədiyiniz olacaq nə. 143 00:11:51,830 --> 00:11:59,680 Belə ki, "A": kapital A Binary nümayəndəliyi sayı 65-dir. 144 00:11:59,680 --> 00:12:07,560 Mən sadəcə baxmaq üçün gedirəm - 41 01000001 olacaq. 145 00:12:07,560 --> 00:12:14,170 Belə ki decimal 65 olmalıdır; bu karakter kapital A. ikili təmsil edir 146 00:12:14,170 --> 00:12:19,440 İndi xarakterli ikili təmsil bir "kiçik 147 00:12:19,440 --> 00:12:33,350 demək olar ki, eyni şey olacaq. 6 Bəli, - ki. Bu doğru deyil. 148 00:12:33,350 --> 00:12:37,670 Belə ikili kapital A, ikili kiçik 'a'. 149 00:12:37,670 --> 00:12:43,940 Belə ki, qeyd edən və "bu bir az. Arasındakı fərq 150 00:12:43,940 --> 00:12:49,440 Və bu 32 bit, sayı 32 təmsil bit olur. 151 00:12:49,440 --> 00:12:53,910 A 65 ildən Və mənada edir; 'bir' 97 edir. 152 00:12:53,910 --> 00:12:56,610 Onların arasında fərq 32-dir. 153 00:12:56,610 --> 00:13:03,770 Belə ki, indi biz A alaraq A 'a' dan çevirmək bilirik 154 00:13:03,770 --> 00:13:09,710 və bitwise ilə, ORing - 1 kimi görünür. 155 00:13:09,710 --> 00:13:20,900 Bu 00100000 ilə bitwise OR, və bizə verəcəyik 'a. 156 00:13:20,900 --> 00:13:26,850 Və biz bitwise ANDing ilə A 'a' dan əldə edə bilərsiniz 157 00:13:26,850 --> 00:13:33,700 ki, yer, 11111, 11, 0 ilə. 158 00:13:33,700 --> 00:13:43,840 , Lakin bu fərdi bit həyata ləğv; bu sonra 'bir' idi dəqiq nə bizə 159 00:13:43,840 --> 00:13:50,070 biz 01000001 lazımdır, mən doğru sayılır əgər mən bilmirəm. 160 00:13:50,070 --> 00:13:56,750 Amma bitwise ORing bu texnika, kiçik kapital almaq 161 00:13:56,750 --> 00:14:02,080 və bitwise kiçik kapitalın almaq ANDing A. müstəsna deyil 162 00:14:02,080 --> 00:14:06,510 Məktubları Bütün vs k K, Z vs z, 163 00:14:06,510 --> 00:14:10,080 onların hamısı yalnız bu tək bit ilə fərqlənir edir. 164 00:14:10,080 --> 00:14:16,290 Və hər hansı kapital məktub və əksinə hər hansı bir kiçik məktubu dəyişməyə istifadə edə bilərsiniz. 165 00:14:16,290 --> 00:14:26,670 Okay. Bu əldə Belə bir asan yol - belə əvəzinə olan 166 00:14:26,670 --> 00:14:32,170 nə 1011111 yazmaq - bu sayı təmsil asan bir yoldur və bu bir deyil 167 00:14:32,170 --> 00:14:39,710 ki, mən supersection artıq getdi, lakin tilde (~) başqa bitwise operatorudur. 168 00:14:39,710 --> 00:14:42,520 Nə ~ bu bit təmsil baxır edir. 169 00:14:42,520 --> 00:14:45,630 Nin bir sıra edək. 170 00:14:45,630 --> 00:14:53,130 Bu yalnız bir ikili sayı, və ~ edir nə yalnız bit bütün flips. 171 00:14:53,130 --> 00:15:00,630 Belə ki, bu indi 0, bu, indi 010100 bir 1 0, bir 1 idi. 172 00:15:00,630 --> 00:15:08,320 Belə ki, bütün ~ edir. Ki canini qurtar - Beləliklə, 32 sayı olacaq - 173 00:15:08,320 --> 00:15:23,320 belə 32 sayı 00100000 olacaq, və bu ~ olacaq 174 00:15:23,320 --> 00:15:29,980 Mən bir "ANDed ki, burada bu sayı. 175 00:15:29,980 --> 00:15:35,600 Hər kəs ki varmı? Bu anlamaq üçün istədiyiniz zaman kimi, olduqca ümumi 176 00:15:35,600 --> 00:15:40,740 biz görmek üçün istədiyiniz zaman biz görən bilər sonra şeylər üçün - 177 00:15:40,740 --> 00:15:44,710 və ya biz 1 istisna olmaqla, hər şey, hər bir bit set istəyirəm 178 00:15:44,710 --> 00:15:47,910 biz müəyyən istədiyiniz olmayan bit ~ yoxdur edirlər. 179 00:15:47,910 --> 00:15:53,090 Belə ki, biz 32 bit set istəmirik, biz 32 ~ belə. 180 00:15:53,090 --> 00:15:57,790 Okay. Belə ki, burada o, bütün istifadə edə bilərsiniz. 181 00:15:57,790 --> 00:16:03,000 Bütün hüquqlar, belə ki, siz həyata deyilik, biz yavaş-yavaş, birlikdə üzərində gəzmək edilir Gözəl 182 00:16:03,000 --> 00:16:11,870 və ya belə ki, bu artıq gəzmək - bu yolu. Bu tamamlayın. 183 00:16:11,870 --> 00:16:20,790 Belə ki, biz simli var və biz buna bir şey string hər xarakter üzərində loop istəyirəm və bunu. 184 00:16:20,790 --> 00:16:26,710 Belə ki, necə biz simli üzərində loop nə? Biz nə istifadə etməlidir? 185 00:16:26,710 --> 00:16:30,980 Mən burada bu barədə nə deyiləm. Bəli. 186 00:16:30,980 --> 00:16:42,940 Mən mənim iterator var və o, lakin necə simli nə qədər çox simvol bilirik? 187 00:16:42,940 --> 00:16:47,030 Strlen (s), sonra i + +. 188 00:16:47,030 --> 00:16:49,860 Belə ki, nə mən burada etdik şeyler ən yaxşı yol deyil. 189 00:16:49,860 --> 00:16:51,860 Niyə hər kəs bilir? 190 00:16:51,860 --> 00:16:55,290 Siz simli hər bir vaxt dil kontrol edirik, çünki. 191 00:16:55,290 --> 00:17:06,859 Biz strlen hərəkət etmək istəyirəm edir, belə ki, mən burada demək olar, int uzunluq = strlen (s), 192 00:17:06,859 --> 00:17:11,900 və sonra i 00:17:20,410 Mən də edə int i = 0, uzunluğu = strlen (s). 194 00:17:20,410 --> 00:17:25,010 Və bu artıq ildən daxilində məhdudlaşdırıla sonra, bir qədər üstünlük 195 00:17:25,010 --> 00:17:29,150 dəyişən uzunluğu əvəzinə loop 'üçün' yalnız bu, əvvəl elan edilməsi 196 00:17:29,150 --> 00:17:34,990 və həmişə var, və pis nə halda tutmaq deyil ki, 197 00:17:34,990 --> 00:17:39,410 və ya niyə orijinal it's, pis idi - loop üçün da başlanır. 198 00:17:39,410 --> 00:17:43,380 Mən vəziyyəti yoxlanılır. I s uzunluğu 00:17:46,790 Beləliklə s uzunluğu nin bütün vaxt "salam" ilə iş imkan verir. 200 00:17:46,790 --> 00:17:49,670 S Belə uzunluğu, f-e-l-l-o. Length 5. 201 00:17:49,670 --> 00:17:57,580 Belə ki i = 0, uzunluğu 5, belə ki, i <5 deyil, loop davam elə. 202 00:17:57,580 --> 00:18:02,750 Sonra yenidən gedin. Biz vəziyyəti yoxlamaq. I salam müddəti 00:18:08,390 Belə nin salam müddəti yoxlamaq edək. H-e-l-l-o. I <5 deyil, belə ki, biz yenidən davam etdirilməsi; 5 var. 204 00:18:08,390 --> 00:18:13,330 Belə ki, biz, loop hər iteration, biz salam sayılması, hesablanması olunur 205 00:18:13,330 --> 00:18:17,380 həmişə 5 olacaq; belə dəyişə gedən heç düşündüm. 206 00:18:17,380 --> 00:18:22,530 Beləliklə, biz yalnız ön 5 xatırlayıram, indi hər şey yaxşıdır. 207 00:18:22,530 --> 00:18:24,990 Belə ki, bütün simli üzərində iterating. 208 00:18:24,990 --> 00:18:31,470 Biz simli hər bir xarakter üçün nə etmək istəyirsiniz? 209 00:18:31,470 --> 00:18:38,510 [Tələbə danışan anlaşılmaz] 210 00:18:38,510 --> 00:18:47,000 Bəli. Karakter qeyri-əlifba əgər ki, biz yalnız üzərində keçmək istəyirəm. 211 00:18:47,000 --> 00:18:52,300 Biz yalnız əlifbası hərflərinin qayğı Çünki, biz bir sıra kapitallaşdırmaq bilməz. 212 00:18:52,300 --> 00:19:10,850 Belə ki, necə biz bunu edə bilər? Biz bir şey istəyirsinizsə, bizim vəziyyət Belə ki, belə - bu əlifba varsa edin. 213 00:19:10,850 --> 00:19:14,060 Belə ki, necə biz bu kontrol olsun? 214 00:19:14,060 --> 00:19:18,720 [Tələbə] Siz funksiyası istifadə edə bilərsiniz alfa edir. 215 00:19:18,720 --> 00:19:23,160 Bu və ya, və ya daxil olan kimi, char.h və ya bir şey daxildir? 216 00:19:23,160 --> 00:19:32,710 Biz s [i] var, - alfa funksiyası, və aydın istifadə istifadə edək 217 00:19:32,710 --> 00:19:40,460 edən səkkizinci xarakter, simli simvol bir sıra olduğunu unutmayın 218 00:19:40,460 --> 00:19:43,180 s səkkizinci xarakterli belə. 219 00:19:43,180 --> 00:19:49,280 Bir kapital məktub varsa, biz müəyyən bir intervalında olmalıdır bilirik. 220 00:19:49,280 --> 00:19:54,370 Və sıra nədir? 221 00:19:54,370 --> 00:20:07,860 Bəli. Belə ki, əgər s [i] ≥ 65, və s [i] ≤ 90, mən əvəzinə nə etməliyəm? 222 00:20:07,860 --> 00:20:18,470 Bəli. Beləliklə, siz tamamilə hətta heç bir şey ASCII dəyərləri bilmək lazımdır heç vaxt. 223 00:20:18,470 --> 00:20:25,640 Nömrələri 65, 90, 97 və 102, və ya hər hansı ki, hesab etməyin. 224 00:20:25,640 --> 00:20:32,470 Siz ehtiyac yoxdur - 112 - Bütün həmin bilmək lazım deyil. Bu çox yanlış. 225 00:20:32,470 --> 00:20:41,940 Yalnız tək quote simvol bir quote sabitləri istifadə edin. Belə ki, "A" və daha az və 90 'Z.' deyil 226 00:20:41,940 --> 00:20:47,930 Bu əhəmiyyətli dərəcədə daha yaxşı - I Z 90 ki, mənim baş üst off bilmək olmaz. 227 00:20:47,930 --> 00:20:52,690 Mən 'Z' kapitalının Z. ki, mənim baş üst off bilmirəm 228 00:20:52,690 --> 00:21:02,100 Belə ki, uzun bu kapital Z, və ya biz kapital intervalında kimi, kiçik kontrol edə bilərsiniz 229 00:21:02,100 --> 00:21:17,010 Yoxsa intervalında varsa ≥ 'a və ≤ z. 230 00:21:17,010 --> 00:21:19,010 Belə ki, bizim vəziyyət var. 231 00:21:19,010 --> 00:21:22,520 Bu şeylər qoymaq harada stil dəyişir. 232 00:21:22,520 --> 00:21:29,520 Mən bu kimi edəcəyik. 233 00:21:29,520 --> 00:21:31,520 İndi biz nə istəyirik? 234 00:21:31,520 --> 00:21:39,530 Biz bu məktubu bir əlifba xarakterli bir xarakter bilirik. 235 00:21:39,530 --> 00:21:46,270 Belə ki, bu artıq bir böyük hərf və ya bir kiçik məktubu olması arasında alternativ lazımdır. 236 00:21:46,270 --> 00:21:48,820 Necə biz bu istədiyiniz bir takip edirsiniz? 237 00:21:48,820 --> 00:21:55,520 [Tələbə səsləri, anlaşılmaz] 238 00:21:55,520 --> 00:21:59,150 Belə ki, bəli, amma məni yoxlamaq edək. 239 00:21:59,150 --> 00:22:04,910 Modul 0-2 bildirib, atılan bir təklif idi və mən ki, razıyam. 240 00:22:04,910 --> 00:22:11,780 Bildiriş başqa kimi ki, - bu halda? Bəli. 241 00:22:11,780 --> 00:22:18,270 Bu, hər biri, ancaq biz i modul 2 bilməz, və ya ildən i mod 2, 242 00:22:18,270 --> 00:22:22,950 E paytaxtı və 'bir' kiçik olduğunu qeyd? Lakin onların ayıran bir yer var? 243 00:22:22,950 --> 00:22:27,150 Onlar eyni mod 2 olmaq olacaq, lakin onlar müxtəlif hallarda istəyirik. 244 00:22:27,150 --> 00:22:29,150 [Tələbə sual, anlaşılmaz] 245 00:22:29,150 --> 00:22:34,690 Bəli. Belə ki, yalnız bir sayı saxlamaq olacaq. 246 00:22:34,690 --> 00:22:38,730 Biz istəyirdik, biz də burada bunu bilər; bir az yöndəmsiz almaq bilər 247 00:22:38,730 --> 00:22:41,300 loop bəyannamələrin də, mən burada onu qoymaq lazımdır. 248 00:22:41,300 --> 00:22:48,840 Belə ki, int sayı = 0 başlayır. 249 00:22:48,840 --> 00:22:54,070 Və indi, biz etdik neçə əlifba simvol saymaq gedirəm. 250 00:22:54,070 --> 00:22:59,550 Yəni biz istər-istəməz başqa bir əlifba xarakter aşkar + + ildən saymaq olacaq. 251 00:22:59,550 --> 00:23:09,130 Amma, indi əgər sayı mod 2 deyərək edirik. 252 00:23:09,130 --> 00:23:12,590 Yaxşı sayı mod 2 əgər? Oh. Mən indi == 0 edəcəyik. 253 00:23:12,590 --> 00:23:21,740 Biz də artıq getmək lazımdır. Yaxşı, sonra sayı mod 2 == 0 əgər? 254 00:23:21,740 --> 00:23:27,830 [Tələbələr cavab anlaşılmaz] 255 00:23:27,830 --> 00:23:32,750 Beləliklə, biz bu böyük bitirmək istəyirəm. 256 00:23:32,750 --> 00:23:37,520 2 hallarda var böyük və kiçik 2-halları. 257 00:23:37,520 --> 00:23:40,990 Biz kiçik istəyirik Belə ki, biz bu böyük etmək lazımdır. 258 00:23:40,990 --> 00:23:43,710 Bu böyük varsa, biz bir şey etmək lazım deyil. 259 00:23:43,710 --> 00:23:50,760 Ancaq bir yol var - shouldn't Çevrilmiş var - 260 00:23:50,760 --> 00:23:54,800 biz belə böyük və ya kiçik olsun yoxlamaq lazım deyil ki? 261 00:23:54,800 --> 00:24:02,240 Biz həmişə biz həmişə böyük at qədər əmin olun ki, nə edə bilər? 262 00:24:02,240 --> 00:24:07,830 Beləliklə, biz kiçik bir 'üçün nə bildiriş; biz bir böyük bu eyni dəqiq şey nə olur? 263 00:24:07,830 --> 00:24:11,900 Dəyişiklik böyük mu və ya dəyəri dəyişiklik edir? 264 00:24:11,900 --> 00:24:23,100 Bəli. Belə ~ 32 ANDed hər hansı kapital məktub bitwise həmin böyük karakter olacaq 265 00:24:23,100 --> 00:24:29,220 çünki heç bir böyük xarakter üçün 32 bit müəyyən deyil. 266 00:24:29,220 --> 00:24:40,920 Biz s [i], biz kiçik və ya böyük olmaq xarakteri çatdırmaq istəyirəm əgər. 267 00:24:40,920 --> 00:24:46,890 Bu kiçik idi əgər, o, böyük idi, o, hələ də böyük deyil ki, bu, indi böyük deyil. 268 00:24:46,890 --> 00:24:54,290 Mən supersection bu dedi: siz istəyirsinizsə 32 istifadə edə bilərsiniz, amma bir "bunu tercih edirlər - A, 269 00:24:54,290 --> 00:25:01,150 yerine düz 32, çünki hər hansı digər bit ola bilər. 270 00:25:01,150 --> 00:25:03,610 32 bit sonra, bu hər hansı ola bilər, ya da kifayət qədər deyil 271 00:25:03,610 --> 00:25:05,840 simvol bütün təmsil nömrələri. 272 00:25:05,840 --> 00:25:09,110 Siz 32 bit almaq Belə ki, bu 64 bit ola bilər, bu, 128 bit ola bilər. 273 00:25:09,110 --> 00:25:13,990 O bit hər hansı böyük və kiçik arasında fərqləndirir ki, az ola bilər. 274 00:25:13,990 --> 00:25:18,350 Mən bu 32 bit olduğunu bilmək lazımdır deyil. 275 00:25:18,350 --> 00:25:27,130 Mən bu 'bir' istifadə edə bilərsiniz - A arasında fərqli bit almaq 276 00:25:27,130 --> 00:25:33,000 32 ki, sehrli sayı etibar ehtiyac olmadan. 277 00:25:33,000 --> 00:25:38,770 Və indi, başqa tək idi saymaq, və mən nə istəyirəm? 278 00:25:38,770 --> 00:25:43,920 [Tələbə cavab anlaşılmaz] 279 00:25:43,920 --> 00:25:45,920 [Tələbə] Nə olub? 280 00:25:45,920 --> 00:25:49,850 Mən 1 saniyə bunu edəcək. 281 00:25:49,850 --> 00:25:55,690 Belə ki, indi mən istəyirsinizsə - Mən, karakter indi kiçik əmin etmək istəyirəm 282 00:25:55,690 --> 00:26:04,140 və mən və ya 32, 32 mənasını 'a - A. 283 00:26:04,140 --> 00:26:06,510 Lakin əvvəlki kimi eyni əsaslandırıcı tərəfindən bildiriş ki, əgər 284 00:26:06,510 --> 00:26:11,670 Məktubda daha sonra 32-yalnız kiçik saxlayır ORing artıq kiçik idi. 285 00:26:11,670 --> 00:26:16,220 Bu orijinal xarakteri dəyişmədi. 286 00:26:16,220 --> 00:26:19,910 Amma indi ki, kiçik deyil, yalnız bu barədə unutmaq "deyərək qaçmaq yoxdur 287 00:26:19,910 --> 00:26:23,650 bu böyük varsa, o dəyişir. " 288 00:26:23,650 --> 00:26:26,900 Bu çox daha rahat bunu edir. 289 00:26:26,900 --> 00:26:33,190 [Tələbə] 32 deyil, əgər kiçik iş olan böyük subtracting ki, strategiya Kaş? 290 00:26:33,190 --> 00:26:35,330 Bu idi,, 34 və ya bir şey istəyirsiniz? 291 00:26:35,330 --> 00:26:41,840 Belə ki, siz 2 arasında fərq olduğunu bilmək lazımdır - >> 1 bit. 292 00:26:41,840 --> 00:26:49,840 Bu uzun bu mövqeyi aşağıdakı bit eyni kimi, daha 1 bit ola bilər. 293 00:26:49,840 --> 00:26:58,500 26 simvol var, və ya - Beləliklə, biz ən azı 26 simvol lazımdır. 294 00:26:58,500 --> 00:27:04,590 Biz fərq təmsil ən azı 26 ədəd lazımdır - 295 00:27:04,590 --> 00:27:07,650 A və 'bir' ən azı 26 olmalıdır arasında fərq 296 00:27:07,650 --> 00:27:10,760 və ya başqa bütün kapital nömrələri təmsil olmazdı. 297 00:27:10,760 --> 00:27:18,630 Yəni, A, biz 1-də başlayacaq əgər, bu bit bütün istifadə olacaq o deməkdir ki, 298 00:27:18,630 --> 00:27:23,900 Z. vasitəsilə hər şeyi təmsil Bu ilk 5 bit, bütün 299 00:27:23,900 --> 00:27:32,170 Ona görə növbəti bit, və ya bu bit var, növbəti bit A və ayırmaq üçün seçilmiş olan bir bir. 300 00:27:32,170 --> 00:27:40,930 Də ona görə ki, ASCII masa, kiçik məktublar hərflərlə ayıran 5 simvol var. 301 00:27:40,930 --> 00:27:49,050 O rəmzləri, onların arasında fərq olan 32 qədər gətirən əlavə 5 ildən. 302 00:27:49,050 --> 00:27:51,840 [Tələbə] Belə ASCII yol nəzərdə tutulmuşdur, çünki biz bunu edə bilər. 303 00:27:51,840 --> 00:27:57,280 Bəli. Amma ASCII - fərqi də bu bit, həm də ola bilər. 304 00:27:57,280 --> 00:28:12,040 A 10000001 idi və 'bir' 11100001 idi, kimi - Mən nə olursa olsun, unutmayın. 305 00:28:12,040 --> 00:28:18,100 A. - bu halda Lakin, biz hələ bir "istifadə edə bilər 306 00:28:18,100 --> 00:28:22,650 Bu, sadəcə indi A və 'bir' hələ də bu 2 bit arasında fərq var. 307 00:28:22,650 --> 00:28:32,240 Mən bunu 48 yazılı edirəm. 32 + 64 varmı? Mən bunu hesab edirəm? 308 00:28:32,240 --> 00:28:40,160 Hər bir xarakter kimi, Z və z, K və k; hələ 2 bit olacaq 309 00:28:40,160 --> 00:28:45,160 onlar hələ də bu 2 bit dışında eyni dəqiq bit olardı. 310 00:28:45,160 --> 00:28:48,870 Belə ki, uzun biz ASCII və ya digər sistemindən istifadə edirsinizsə ki, asılı olmayaraq, həmişə doğru olaraq, 311 00:28:48,870 --> 00:28:53,050 uzun hər bir xarakter üçün müxtəlif olan bit bir sıra sayı yalnız var kimi, 312 00:28:53,050 --> 00:28:55,050 o gözəl işləyir. 313 00:28:55,050 --> 00:29:06,110 Bu biz bəlkə istifadə edə birinci çünki 32 yaradılmışdır ki, yalnız var. Cool >>. 314 00:29:06,110 --> 00:29:14,520 Mən, blok yalnız bir xətt əgər görməmişik halda, üstünlük meyli 315 00:29:14,520 --> 00:29:24,280 Siz qıvrım aşırma xilas edə bilər; mən bunu üstünlük verirlər. 316 00:29:24,280 --> 00:29:34,010 Ayrıca, biz s [i] + = 1 kimi şeylər necə bilirik? 317 00:29:34,010 --> 00:29:41,090 Siz də edə s [i] bitwise VƏ = 32. 318 00:29:41,090 --> 00:29:46,400 Və bitwise OR = 32. 319 00:29:46,400 --> 00:29:51,490 Həmçinin, mod 2 == 0 saymaq. 320 00:29:51,490 --> 00:30:00,900 Belə ki, unutmayın ki, - mən bunu yazmaq deyil - hər hansı qeyri-sıfır dəyəri doğru və 0 yalan. 321 00:30:00,900 --> 00:30:07,880 Belə ki, "count mod 2 əgər == 0" deyərək eyni "mod 2 sayılmaz əgər". 322 00:30:07,880 --> 00:30:11,580 Yəqin ki, yalnız xətləri bərpa və əgər sayı mod 2 ", deyib ki, 323 00:30:11,580 --> 00:30:15,350 OR 1, başqa VƏ 1 deyil ki, "mən lazım deyildi" nə yoxdur. " 324 00:30:15,350 --> 00:30:18,650 Amma bu kimi yaxşı işləyir. 325 00:30:18,650 --> 00:30:25,660 Mən burada başqa nə edə bilər? 326 00:30:25,660 --> 00:30:29,060 Siz istəyirdi ternary ilə birləşdirmək bilər, lakin sonra yalnız şeyi Messier etmək istədiyiniz 327 00:30:29,060 --> 00:30:33,770 və oxumaq yəqin ki, daha çətin, belə ki, biz bunu deyil. 328 00:30:33,770 --> 00:30:37,330 Hər kəs hər hansı digər təkliflər var? 329 00:30:37,330 --> 00:30:41,580 Bütün problem istədi ki? Bəli Oh. 330 00:30:41,580 --> 00:30:51,070 Belə ki, bu boş xətləri qurtarmaq, indi biz f,% s çap lazımdır strings üçün biri olmaqla, 331 00:30:51,070 --> 00:30:56,620 Biz, s f çap olunacaqdır. 332 00:30:56,620 --> 00:30:59,330 İndi run bildirin. Mən yanlış bir şey mi? 333 00:30:59,330 --> 00:31:03,200 Bu "bir \ var, mən bir n istəyirəm. 334 00:31:03,200 --> 00:31:07,840 Okay. İndi run lazımdır. Bu yəqin ki, mənə fəğan lazımdır. 335 00:31:07,840 --> 00:31:11,250 Strlen string.h edir. 336 00:31:11,250 --> 00:31:14,290 Bu cingilti haqqında gözəl şey deyil Belə ki, bu nə deyir 337 00:31:14,290 --> 00:31:19,140 yerine, deyir ki, GCC-nin "Hey, siz bir şey unuttum, mən nə bilmirəm." 338 00:31:19,140 --> 00:31:29,220 Amma bu mənə ki, "Siz string.h daxil idi." 339 00:31:29,220 --> 00:31:32,130 Mən bir şey təklif etməyib, belə ki, bir şey söyləyərək deyil. 340 00:31:32,130 --> 00:31:42,540 Amma biz onların Məsələn edəcəyik ", 4 əlavə Thanks". 341 00:31:42,540 --> 00:31:47,880 Bu doğru görünür. Yaşasın. 342 00:31:47,880 --> 00:31:52,370 Belə ki, əsas qaytarılması, demək olar ki, bunu heç vaxt. 343 00:31:52,370 --> 00:31:57,110 Bu isteğe var. Və əsas bu isteğe olan yeganə funksiyası var. 344 00:31:57,110 --> 00:32:07,140 Siz əsas bir şey qayıtmaq deyilsə, bu 0 qayıtmaq üçün nəzərdə güman edir. 345 00:32:07,140 --> 00:32:13,070 Suallar? 346 00:32:13,070 --> 00:32:20,980 Okay. Belə ki, indi ikinci problem. 347 00:32:20,980 --> 00:32:24,810 "Keçərək 2 dəyişənlər" dəyərlər dəyişdirmə həftə 2 ikinci mühazirə dən Xatırladaq 348 00:32:24,810 --> 00:32:30,780 bir funksiyası (svop adlanan belə) həmin 2 dəyişənlər dəqiq ən azı olmadan işləmir 'göstəricilərinə ". 349 00:32:30,780 --> 00:32:37,020 Biz onları almaq qədər göstəricilərinə bilməz. 350 00:32:37,020 --> 00:32:40,070 Biz 2 dəyişənlərin dəyişdirmək istəyirik, biz bunu bir funksiyası istifadə edirik. 351 00:32:40,070 --> 00:32:43,410 Biz hələ o deyir kimi əsas bunu olacaq. 352 00:32:43,410 --> 00:32:48,360 Lakin həmin 2 dəyişənlər istifadə etmək üçün, biz bir müvəqqəti dəyişən istifadə etmək istəmirik. 353 00:32:48,360 --> 00:32:50,770 Bunu etmək üçün 2 yol var. 354 00:32:50,770 --> 00:32:56,310 Siz ənənəvi binar operatorların istifadə edə bilər. 355 00:32:56,310 --> 00:33:00,180 Belə ki, hər kəs bunu bir sürətli və çirkli yol bilir? 356 00:33:00,180 --> 00:33:07,650 Bu, faktiki düşüncə bir dəqiqəlik bilər. I varsa - 357 00:33:07,650 --> 00:33:12,130 Onlar xahiş kimi mən problem qurmaq lazımdır. I 2 dəyişənlər varsa, A, olan yalnız bir tam deyil 358 00:33:12,130 --> 00:33:17,800 onlar mənə ver, mən verilən edirəm ki, bir tam olan məbləğ dəyişən B etdi. 359 00:33:17,800 --> 00:33:22,700 Mən bu 2 dəyişənlər varsa, indi mən onları dəyişdirmək istəyirik. 360 00:33:22,700 --> 00:33:31,550 Ənənəvi, sizin müntəzəm ikili operatorları istifadə edərək, demək, + kimi, - ÷. 361 00:33:31,550 --> 00:33:36,630 Ikili hərəkət edən bitwise operatorları deyil. 362 00:33:36,630 --> 00:33:39,600 , +, ÷ və bütün bu - Beləliklə, istifadə edir. 363 00:33:39,600 --> 00:33:52,980 Biz kimi bir şey etməklə dəyişdirmək olar = a + b, b = a - b, a = a - b. 364 00:33:52,980 --> 00:34:04,260 Belə ki, ağlı başında olma kontrol, sonra biz niyə işlər görürsünüz. 365 00:34:04,260 --> 00:34:13,320 Gəlin demək a = 7, b = 3, sonra b 10 olacaq bir +. 366 00:34:13,320 --> 00:34:18,820 Beləliklə, biz indi = 10 müəyyən edirik, sonra biz b = a edirik - b. 367 00:34:18,820 --> 00:34:30,250 Beləliklə, biz edirik b = a - b, 7 olacaq olan və b = a - b yenidən, 368 00:34:30,250 --> 00:34:38,650 və ya a = a - b. 7 3 olan - 10 olacaq edir. 369 00:34:38,650 --> 00:34:44,850 Beləliklə, düzgün, 'bir' b 3, 7 idi və indi b 7 və 'bir' 3. 370 00:34:44,850 --> 00:34:48,679 Belə ki cür mənada edir; 'bir' 2 nömrələri birləşməsidir. 371 00:34:48,679 --> 00:34:53,000 Bu nöqtədə, 'bir' birləşməsi, sonra biz orijinal b həyata subtracting edirik 372 00:34:53,000 --> 00:34:56,860 və biz orijinal idi nə subtracting edirik 'a. 373 00:34:56,860 --> 00:35:01,150 Amma bu bütün nömrələri üçün iş deyil. 374 00:35:01,150 --> 00:35:08,880 Bu görmək üçün bir-bir sistem hesab olsun ki, biz adətən 32 bit kimi integers düşünürəm. 375 00:35:08,880 --> 00:35:13,050 Yalnız 4 bit kimi bir şey haqqında iş edək. 376 00:35:13,050 --> 00:35:15,450 İnşallah mən indi yaxşı bir nümunə ilə gəlib. 377 00:35:15,450 --> 00:35:18,680 Belə ki, mən bilirəm, bu asan olacaq. 378 00:35:18,680 --> 00:35:26,720 Gəlin bizim 2 ədəd 1111 və 1111 deyə, biz indi ikili etdiyiniz belə. 379 00:35:26,720 --> 00:35:34,630 Faktiki ondalık olaraq, bu şəkildə düşünmək istəyirsinizsə, a = 15 və b = 15. 380 00:35:34,630 --> 00:35:37,630 Və biz onları dəyişdirmək sonra biz gözləyirik - onlar hətta eyni nömrələr olmaq yoxdur 381 00:35:37,630 --> 00:35:41,140 ancaq bu şəkildə idi. 382 00:35:41,140 --> 00:35:47,100 Gəlin eyni nömrələr onları etmək. 1111 və 0001 gələni edək. 383 00:35:47,100 --> 00:35:51,860 Belə ki, a = 15 və b = 1. 384 00:35:51,860 --> 00:35:57,670 Biz onları dəyişdirmək sonra, biz bir '1 olmaq və b 15 olmaq gözləyirik. 385 00:35:57,670 --> 00:36:01,780 Belə ki, ilk addım a = a + b. 386 00:36:01,780 --> 00:36:08,770 0001 olan nömrələri yalnız 4 bits geniş, belə bir "1111 olan + b, 387 00:36:08,770 --> 00:36:16,780 10000 olan qədər başa gedir, amma biz yalnız 4 bit var. 388 00:36:16,780 --> 00:36:22,540 Belə ki, indi a = 0. 389 00:36:22,540 --> 00:36:34,080 B - - əslində, hələ də mükəmməl işləyir və indi b = a təyin etmək istəyirik. 390 00:36:34,080 --> 00:36:39,630 a = a - b - bu mükəmməl həyata işləri nin görək. 391 00:36:39,630 --> 00:36:53,720 Beləliklə b = 0 - sonra hələ 15 olacaq, 1 və a = a - b,, 1 olardı. 392 00:36:53,720 --> 00:36:56,210 Bəlkə bu çalışır. 393 00:36:56,210 --> 00:36:59,020 O müntəzəm istifadə işləmir səbəb var kimi hiss edirəm. 394 00:36:59,020 --> 00:37:06,400 OK, belə ki, müntəzəm ikili əməliyyatları ilə iş deyil ki, ehtimal üzrə iş, 395 00:37:06,400 --> 00:37:15,040 və mən baxmaq - Mən doğru olub olmadığını görmek üçün Google olacaq. 396 00:37:15,040 --> 00:37:23,490 Beləliklə, biz bitwise operatorları istifadə edərək bunu istəyirik və burada ipucu XOR edir. 397 00:37:23,490 --> 00:37:28,780 Belə ki, hələ görməmişik əgər XOR (^) tətbiqi. 398 00:37:28,780 --> 00:37:34,610 Bu təkrar deyil, bir bitwise operator o bit, və it's ilə qədər fəaliyyət belə - 399 00:37:34,610 --> 00:37:39,910 Siz bit 0 və 1 varsa, bu 1 olacaq. 400 00:37:39,910 --> 00:37:45,230 Siz bit 1 və 0 varsa, 1 olacaq, bu, 0 olacaq bit 0 0 mövcut 401 00:37:45,230 --> 00:37:47,640 və bit 1 və 1 varsa, bu 0 olacaq. 402 00:37:47,640 --> 00:37:56,180 Belə ki, kimi və ya. Olan bit və ya doğru, bu, 1, lakin ya fərqli olaraq, bu doğru iki bit ola bilməz. 403 00:37:56,180 --> 00:37:59,320 Və ya bu 1 ola bilərdi, XOR bu 0 ola bilər. 404 00:37:59,320 --> 00:38:02,250 Beləliklə, biz burada XOR istifadə etmək istədiyiniz olacaq. 405 00:38:02,250 --> 00:38:09,960 Bir dəqiqə üçün düşünün; Google gedirəm. 406 00:38:09,960 --> 00:38:16,230 Yaxşı, siz oxuya bilməz, mən XOR svop alqoritm səhifə hazırda edirəm. 407 00:38:16,230 --> 00:38:21,340 I can't niyə İnşallah bu izah edəcək - 408 00:38:21,340 --> 00:38:34,190 Bu, məhz biz yalnız ki alqoritmi belədir. 409 00:38:34,190 --> 00:38:37,330 Mən hələ niyə görmürəm - Mən yalnız bir pis nümunə seçilmiş olmalıdır, 410 00:38:37,330 --> 00:38:44,940 ancaq 'bir' indi 'bir' 0 deyil, 5 bit əldə sonra, 0 olmaq nə bu halda, 411 00:38:44,940 --> 00:38:48,730 o adlanır nə "tam daşqın". 412 00:38:48,730 --> 00:38:54,370 Wikipedia görə, "XOR svop fərqli olaraq, bu variasiya bəzi üsullarından istifadə edir ki, tələb 413 00:38:54,370 --> 00:38:59,780 x + y bir tam daşqın səbəb deyil ki, təmin etmək. " 414 00:38:59,780 --> 00:39:08,350 Bu tam daşqın idi, amma səhv etdilər Belə ki, bu problemlər var. 415 00:39:08,350 --> 00:39:10,520 Mən əmin deyiləm. Mən başqa bir ilə gəlmək üçün çalışacağıq. 416 00:39:10,520 --> 00:39:13,640 Orada bir sayı qoymaq üçün çalışdığınız zaman [Tələbə] Bəli, tam daşqın deyil 417 00:39:13,640 --> 00:39:16,640 siz ayrılmışdır bit məbləği daha böyük? 418 00:39:16,640 --> 00:39:23,730 Bəli. Biz 4 bit var. That's - biz 4 bit idi, biz onda 1 əlavə etmək üçün cəhd edin, biz 5 bit ilə son. 419 00:39:23,730 --> 00:39:26,690 Amma beşinci bit yalnız Bəli, kəsilmiş olur. 420 00:39:26,690 --> 00:39:28,970 Bu, faktiki güc - 421 00:39:28,970 --> 00:39:33,010 [Tələbə] ki, bir səhv atmaq və ya nə yoxdur - bir səhv atmaq olar? 422 00:39:33,010 --> 00:39:40,720 No Belə ki heç bir səhv yoxdur. Siz toplaşmaq səviyyəsinə almaq zaman, xüsusi bir bit 423 00:39:40,720 --> 00:39:47,020 haradasa bir daşqın var idi, lakin C sizin cür yalnız ilə məşğul olmayan müəyyən edilir. 424 00:39:47,020 --> 00:39:55,160 Siz C. xüsusi toplaşmaq talimatları istifadə əgər Siz, həqiqətən ilə məşğul ola bilər 425 00:39:55,160 --> 00:39:58,110 Nin XOR svop düşünmək edək. 426 00:39:58,110 --> 00:40:02,220 Mən Vikipediya da ki, ola bilər edirəm - 427 00:40:02,220 --> 00:40:07,310 Belə ki, bu da modul hesab gətirdi, mən modul hesab edir, nəzəriyyəsi, mən tapmaq 428 00:40:07,310 --> 00:40:11,160 1 yenidən 15 - Mən 0 bildirib ki, zaman. 429 00:40:11,160 --> 00:40:15,410 Belə ki, həqiqətən bilər - 1 = 15 - 0 ki, müntəzəm prosessoru. 430 00:40:15,410 --> 00:40:20,430 Biz 0 başa yana, 1 çıxmaq, belə ki, o, yalnız ətrafında 1111 geri wraps. 431 00:40:20,430 --> 00:40:28,930 Beləliklə, bu alqoritm əslində iş, bir + b, bir bilər - b, b - bir; gözəl ola bilər ki. 432 00:40:28,930 --> 00:40:34,030 Amma bunu olmayan bəzi prosessorlar, və buna xüsusi olanları gözəl olmazdı. 433 00:40:34,030 --> 00:40:39,880 XOR svop heç bir prosessor işləyəcək. Okay. 434 00:40:39,880 --> 00:40:42,280 Ideyası baxmayaraq, eyni olması ehtimal var ki. 435 00:40:42,280 --> 00:40:50,120 Harada ki, biz birtəhər dəyişənlərin 1 içinə həm də məlumat almaq XOR istifadə 436 00:40:50,120 --> 00:40:54,120 və sonra fərdi dəyişənlərin məlumat çıxarmaq. 437 00:40:54,120 --> 00:41:04,330 Belə ki, hər kəs fikir / cavab var? 438 00:41:04,330 --> 00:41:14,540 [Tələbə cavab anlaşılmaz] 439 00:41:14,540 --> 00:41:22,220 Belə ki, bu iş, həmçinin, XOR kommutativ edir. 440 00:41:22,220 --> 00:41:27,620 Asılı olan üçün bu 2 ədəd qədər burada olmaq üçün nə 441 00:41:27,620 --> 00:41:30,100 Bu nəticə eyni olacaq. 442 00:41:30,100 --> 00:41:35,800 Belə ^ b b ^ a. 443 00:41:35,800 --> 00:41:51,860 Siz həmçinin bu kimi yazılı görə bilərsiniz bir ^ = b, b ^ = a, bir ^ = b yenidən. 444 00:41:51,860 --> 00:42:00,200 Belə ki, bu hüququ, bu işləri, bit düşünmək niyə görmək. 445 00:42:00,200 --> 00:42:10,400 Bir smallish sayı istifadə edərək, 11001 və 01100 deyək. 446 00:42:10,400 --> 00:42:12,790 Belə ki, bu 'bir', bu b edir. 447 00:42:12,790 --> 00:42:15,540 Belə ^ = b. 448 00:42:15,540 --> 00:42:22,380 Biz bu 2 şeyi XOR üçün 'bir' = yaradılması üçün olacaq. 449 00:42:22,380 --> 00:42:32,920 1 Beləliklə ^ 0 1, 1 ^ 1 0 deyil; 0 ^ 1 1 və 0 ^ 0 0 deyil; 1 ^ 0 1. 450 00:42:32,920 --> 00:42:37,380 Siz decimal sıra baxmaq Belə bir 'o olacaq - 451 00:42:37,380 --> 00:42:41,160 Siz, bir 'çox orijinal' bir 'və yeni arasında münasibətlərin görmək fikrində deyilik 452 00:42:41,160 --> 00:42:45,600 lakin bit baxaraq, 'bir' məlumatların bir mesh kimi indi 453 00:42:45,600 --> 00:42:49,970 orijinal "bir" və orijinal b həm də. 454 00:42:49,970 --> 00:42:57,930 Biz b ^ a, biz orijinal da çıxacağıq ki 'bir. Almaq əgər 455 00:42:57,930 --> 00:43:08,910 Və biz əgər orijinal 'bir' ^ yeni bir ',' biz orijinal b qədər baxın. 456 00:43:08,910 --> 00:43:18,380 Belə ki, (a ^ b) ^ b = orijinal bir. 457 00:43:18,380 --> 00:43:27,910 Və (a ^ b) ^ a = orijinal b. 458 00:43:27,910 --> 00:43:37,010 Var - bu bir şey XOR özü görən başqa bir yol həmişə 0-dir. 459 00:43:37,010 --> 00:43:45,020 1101 Belə ^ 1101, bütün bit eyni olacaq. 460 00:43:45,020 --> 00:43:47,920 Belə ki, 1-0 və digər 1 olduğu halda orada gedən heç oldu. 461 00:43:47,920 --> 00:43:51,080 Belə ki, bu 0000. 462 00:43:51,080 --> 00:43:57,240 Bu eyni. (A ^ b) ^ b kimi bir ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) 0 olacaq; bütün bit 0 çünki bir ^ 0 yalnız 'bir' olacaq. 464 00:44:03,680 --> 00:44:08,050 Belə ki, "bir" ilk 1 olduğu üçün gedir ki, yalnız olanları - olanlar idi. 465 00:44:08,050 --> 00:44:12,070 Burada eyni fikir, mən bunu da kommutativ var olduqca əminəm. 466 00:44:12,070 --> 00:44:17,590 Bəli. Mən bunu kommutativ idi ki, əvvəl demək idi. 467 00:44:17,590 --> 00:44:24,680 Bu ^ 'a' və assosiativ, buna görə indi (b ^ a) ^ a. 468 00:44:24,680 --> 00:44:28,970 Və biz nə edə b ^ (a ^ a). 469 00:44:28,970 --> 00:44:31,540 Və yenə, biz orijinal b almaq. 470 00:44:31,540 --> 00:44:37,120 Belə ki, bir 'artıq birlikdə bir "və b birləşməsidir. 471 00:44:37,120 --> 00:44:49,660 Yeni Combo istifadə 'bir' deyə b = Combo 'bir' ^ orijinal b, biz orijinal olsun 'bir. 472 00:44:49,660 --> 00:45:05,170 İndi bir = Combo 'bir' ^ yeni b, orijinal olan - və ya "A" və ya b nə indi. 473 00:45:05,170 --> 00:45:13,620 Bu halda burada aşağı deyil. Bu = b, köhnə b edir. 474 00:45:13,620 --> 00:45:16,550 Belə ki, indi hər şey değiştirilecek üçün geri edir. 475 00:45:16,550 --> 00:45:22,960 Biz əslində bit baxdı varsa, b = a ^ b, bu 2 XOR gedir 476 00:45:22,960 --> 00:45:33,920 və cavab bu olacaq, sonra = a ^ b bu 2 XORing və cavab bu deyil olunur. 477 00:45:33,920 --> 00:45:41,090 Suallar? Okay. Belə ki, son bir qədər əhəmiyyətli dərəcədə daha çətindir. 478 00:45:41,090 --> 00:45:43,180 [Tələbə] Mən o barədə bir sual var. >> Oh, sorry. 479 00:45:43,180 --> 00:45:49,380 [Tələbə] əslində nə sürətli var? Bu XOR istifadə yeni bir dəyişən elan varsa, bu? 480 00:45:49,380 --> 00:45:55,190 Belə ki, yeni bir dəyişən elan və ya dəyişdirmək üçün XOR istifadə edərək, həqiqətən sürətli nədir? 481 00:45:55,190 --> 00:45:59,600 Cavab, bütün ehtimalı bir müvəqqəti dəyişir. 482 00:45:59,600 --> 00:46:05,780 Belə akt səviyyəsində, - onu tərtib sonra, çünki ki, 483 00:46:05,780 --> 00:46:12,320 yerli dəyişənlərin və ya hər hansı müvəqqəti dəyişənlərin və ya bu məhsulları hər hansı kimi şey var yoxdur. 484 00:46:12,320 --> 00:46:16,060 Onlar yalnız istəyirəm edirik - yaddaş var, və qeydiyyat var. 485 00:46:16,060 --> 00:46:20,920 Şeyi fəal olur yerləşir qeydiyyat var. 486 00:46:20,920 --> 00:46:24,750 Siz yaddaş 2 şeylər əlavə etmir; siz qeydə 2 şeylər əlavə edin. 487 00:46:24,750 --> 00:46:28,160 Və siz, sonra onlara əlavə etmək üçün qeydiyyat daxil yaddaş şey gətirmək 488 00:46:28,160 --> 00:46:33,180 və sonra yaddaş onları geri qoymaq bilər, lakin bütün hərəkət qeydə olur. 489 00:46:33,180 --> 00:46:38,750 Beləliklə, siz müvəqqəti dəyişən yanaşma istifadə etdiyiniz zaman, adətən, nə olar ki, 490 00:46:38,750 --> 00:46:42,810 Bu 2 ədəd qeydiyyat artıq. 491 00:46:42,810 --> 00:46:46,570 Və sonra point onlara değiştirilecek sonra, sonra, 492 00:46:46,570 --> 00:46:51,540 yalnız başqa reyestrindən istifadə edəcəyik. 493 00:46:51,540 --> 00:46:56,510 Siz b istifadə edirdi Yerdə, yalnız artıq saxlanılması ki, reyestrdən istifadə edəcəyik 'a. 494 00:46:56,510 --> 00:47:02,180 Belə ki, həqiqətən mübadilə etmək bir şey etmək lazım deyil. Evet? 495 00:47:02,180 --> 00:47:05,690 [Tələbə] Amma bu da doğru, daha çox yaddaş tutur? 496 00:47:05,690 --> 00:47:10,280 Ki, müvəqqəti dəyişən saxlamaq lazımdır, əgər daha çox yaddaş yalnız olacaq. 497 00:47:10,280 --> 00:47:14,830 Daha sonra bir yerdə yenidən müvəqqəti dəyişən istifadə kimi, 498 00:47:14,830 --> 00:47:18,920 sonra - və ya müvəqqəti dəyişən bir şey tapşırılsın. 499 00:47:18,920 --> 00:47:24,630 Belə ki, zaman temp ildə "a, 'b hər hansı bir anda, əgər fərqli dəyərlər və ya bir şey var 500 00:47:24,630 --> 00:47:30,680 sonra yaddaş fərqli yerlərdə var olacaq, lakin bu həqiqətdir ki, 501 00:47:30,680 --> 00:47:34,800 yalnız qeydə mövcud olan bir çox yerli dəyişənlər var. 502 00:47:34,800 --> 00:47:44,370 Olan halda, yaddaş istismara heç, və yaddaş israf heç edirik. 503 00:47:44,370 --> 00:47:58,620 Okay. Son sual bir az çoxdur. 504 00:47:58,620 --> 00:48:04,850 Belə ki, burada, bu CS50 cihaz, bir lüğət var. 505 00:48:04,850 --> 00:48:12,390 Və bunun səbəbi çünki [? B66] Siz yazılı olacaq bir spell checker edir 506 00:48:12,390 --> 00:48:15,780 hash masalar və ya çalışır və ya bəzi data strukturu istifadə edərək. 507 00:48:15,780 --> 00:48:22,660 Siz spell checker yazı üçün olacaq və siz bunu bu lüğət istifadə olacaq. 508 00:48:22,660 --> 00:48:28,280 Amma bu problem üçün, yalnız bir söz lüğətdə olub olmadığını görmek üçün yuxarı baxmaq edir. 509 00:48:28,280 --> 00:48:31,250 Belə ki, əvəzinə bəzi data structure bütün lüğət saxlanılması 510 00:48:31,250 --> 00:48:35,180 və sonra bir şey yanlış yazılan olub olmadığını görmek üçün bir bütün sənəd üzərində axtarır 511 00:48:35,180 --> 00:48:38,490 biz yalnız 1 söz tapmaq istəyirəm. Beləliklə, biz yalnız bütün lüğət üzərində tarayabilir 512 00:48:38,490 --> 00:48:44,300 biz bütün lüğət söz tapmaq heç vaxt, əgər, o, var idi. 513 00:48:44,300 --> 00:48:52,150 Biz bütün lüğət üzərində tarar və sözü görürsünüz, onda biz yaxşı istəyirik, biz bu tapılmadı. 514 00:48:52,150 --> 00:48:56,580 Bu, biz C fayl-user funksiyası baxaraq başlamaq istəyirəm ki, burada deyir 515 00:48:56,580 --> 00:48:59,930 biz lüğət oxuya ildən 516 00:48:59,930 --> 00:49:07,680 amma siz hesab etməlidir funksiyaları kimi burada ipucu verəcək. 517 00:49:07,680 --> 00:49:11,510 Mən məkanı onları yazmaq lazımdır. 518 00:49:11,510 --> 00:49:20,490 Belə ki, əsas olanları siz, sonra açıq və f, qaçılmaz, f bağlıdır baxmaq lazımdır 519 00:49:20,490 --> 00:49:26,540 olan proqramın sonunda getmək, və f scan f olacaq. 520 00:49:26,540 --> 00:49:31,060 Siz həmçinin f oxumaq istifadə edə bilər, amma yəqin ki, istəmirəm 521 00:49:31,060 --> 00:49:34,200 ki, - ki, siz ehtiyacı başa yoxdur. 522 00:49:34,200 --> 00:49:41,880 F scan f siz lüğət üzərində scan istifadə olacaq nə. 523 00:49:41,880 --> 00:49:46,370 Və yalnız yol cəhd və yalançı kodu istəyirəm, həll qədər kod ehtiyac yoxdur 524 00:49:46,370 --> 00:50:05,200 həll, sonra biz bunu müzakirə edəcəyik. 525 00:50:05,200 --> 00:50:14,110 Mən artıq bu ildən verdi və əslində, heç bir terminal və ya cihaz nin shell getmək əgər 526 00:50:14,110 --> 00:50:18,250 Mən ki, - mən adətən - Siz hələ görməmişik Əgər sinif idi, mən bilmirəm, 527 00:50:18,250 --> 00:50:23,490 lakin insan, belə ki, insan pages, olduqca çox hər hansı bir funksiyası baxaraq üçün olduqca faydalıdır. 528 00:50:23,490 --> 00:50:27,330 Mən, kimi scan f man f edə bilərsiniz. 529 00:50:27,330 --> 00:50:32,300 İndi bu funksiyaları scan f ailə haqqında informasiya edir. 530 00:50:32,300 --> 00:50:37,070 Mən də açıq man f, ola bilər ki, mənə haqqında məlumat verəcəyik. 531 00:50:37,070 --> 00:50:40,750 Siz istifadə və ya kodu oxu ne funksiyası bilirik əgər 532 00:50:40,750 --> 00:50:43,000 və bir funksiyası görmək və kimi istəyirik "Bu nə edir?" 533 00:50:43,000 --> 00:50:45,280 Yalnız insan ki funksiyası adı. 534 00:50:45,280 --> 00:50:47,340 Demək ola bilər Ü qəribə nümunələrindən bir neçə var 535 00:50:47,340 --> 00:50:51,620 kimi. ki funksiyası adı, ya adam 3 funksiyası adı, adam 2 536 00:50:51,620 --> 00:50:58,230 lakin yalnız əgər insan funksiyası adı ilk dəfə iş olmaz ki, var. 537 00:50:58,230 --> 00:51:03,010 [Tələbə] Mən açıq adam səhifə oxu deyiləm, lakin mən hələ də və proqramı istifadə etmək necə səhv edirəm. 538 00:51:03,010 --> 00:51:06,170 Okay. Adam pages bir çox faydalı çox azdır. 539 00:51:06,170 --> 00:51:08,470 Əgər siz artıq onların nə bilirsinizsə Onlar daha faydalı edirik 540 00:51:08,470 --> 00:51:12,670 və sonra dəlilləri və ya bir şey üçün xatırlamaq kifayətdir. 541 00:51:12,670 --> 00:51:17,640 Və ya onlar bir ümumi icmal verə bilər, lakin onların çox böyük var. 542 00:51:17,640 --> 00:51:22,220 F scan f kimi, həmçinin. O, bu funksiyaları bütün məlumat verir 543 00:51:22,220 --> 00:51:28,120 və 1 xətt aşağı burada, demək olar, "F scan f string nöqtə və ya axın olan deyilir." 544 00:51:28,120 --> 00:51:32,360 Lakin f açın. Belə ki, necə biz f açıq istifadə edir? 545 00:51:32,360 --> 00:51:38,470 Fayl etmək ehtiyacı olan bir proqram ideyası I / O ki, 546 00:51:38,470 --> 00:51:45,070 siz ilk siz şeyə istədiyiniz faylı açmaq lazımdır, və qaçılmaz, 547 00:51:45,070 --> 00:51:51,220 ki, faylı şeyi oxumaq və onların məhsulları yoxdur. 548 00:51:51,220 --> 00:51:55,350 F açıq biz faylı açmaq üçün istifadə edir. 549 00:51:55,350 --> 00:52:04,190 Biz açmaq üçün nə fayl istəyirəm ki, biz geri almaq şey, bu, bizə verir - 550 00:52:04,190 --> 00:52:11,970 Burada o, "/ user / share / dict / söz." deyir 551 00:52:11,970 --> 00:52:16,740 Bu açmaq istədiyiniz fayl və biz onu açmaq istəyirəm - 552 00:52:16,740 --> 00:52:21,440 biz aydın şəkildə biz oxumaq və ya açmaq istəyirsinizsə yazmaq üçün açmaq istəyirəm müəyyən etmək lazımdır. 553 00:52:21,440 --> 00:52:26,490 Yoxdur birləşməsi və stuff bir neçə, lakin biz oxumaq üçün bu açmaq istəyirəm. 554 00:52:26,490 --> 00:52:29,380 Biz faylı oxumaq istəyirəm. 555 00:52:29,380 --> 00:52:34,290 Belə ki, bu qayıdışı nə edir? Bu fayl ulduz (*), qaytarır 556 00:52:34,290 --> 00:52:37,260 və yalnız dəyişən f hər şey, belə ki, *, göstərmək lazımdır 557 00:52:37,260 --> 00:52:40,840 yenidən, bu göstərici, lakin biz göstəricilər ilə məşğul istəmirəm. 558 00:52:40,840 --> 00:52:46,470 Siz kimi, f indi fayl təmsil etmək üçün istifadə olacaq dəyişən deyil f hesab edə bilər. 559 00:52:46,470 --> 00:52:49,850 Siz faylı oxumaq istəyirəm, əgər f oxu. 560 00:52:49,850 --> 00:52:54,820 Dosyayı bağlamaq istəyirsinizsə, f bağlayın. 561 00:52:54,820 --> 00:53:00,350 Belə ki, proqramın sonunda biz qaçılmaz faylı bağlamaq üçün istədiyiniz zaman, biz nə etməliyəm? 562 00:53:00,350 --> 00:53:06,750 Biz f bağlamaq istəyirik. 563 00:53:06,750 --> 00:53:12,600 Biz istifadə etmək istədiyiniz olacaq ki, artıq son fayl funksiyası scan f, f scan f edir. 564 00:53:12,600 --> 00:53:20,930 Və nə yoxdur uyğun bir model axtarır fayl üzərində tarar edir. 565 00:53:20,930 --> 00:53:39,100 Burada adam səhifə baxanda biz int f scan f bax, indi geri dəyər bilməz. 566 00:53:39,100 --> 00:53:45,230 Ilk arqument file * sel, biz keçmək istəyirəm olacaq ilk dəlil f belə. 567 00:53:45,230 --> 00:53:47,900 Biz f üzərində skaner edirik. 568 00:53:47,900 --> 00:53:53,680 İkinci arqument bir format string edir. 569 00:53:53,680 --> 00:53:58,310 İndi bir format string verəcək. 570 00:53:58,310 --> 00:54:05,180 Mən ki, 127s \ n, lazımsız olduğunu bir çox demək nə düşünürəm. 571 00:54:05,180 --> 00:54:12,490 Ki, format string nə fikri, siz çap f qarşı kimi scan f hesab bilər. 572 00:54:12,490 --> 00:54:17,160 Belə ki, çap f, biz də format parametri bu növü istifadə çap f, 573 00:54:17,160 --> 00:54:25,000 lakin çap f biz işle edir - nin bir ekvivalent baxaq. 574 00:54:25,000 --> 00:54:32,550 Belə f çap və ilk dəlil f olacaq yerləşir f çap f da həqiqətən var. 575 00:54:32,550 --> 00:54:40,980 Siz f çap zaman, biz bəzi simli keçmək əgər bir şey kimi "çap 127s \ n" deyə bilər 576 00:54:40,980 --> 00:54:44,050 Bu simli və sonra yeni bir xətt çap olacaq. 577 00:54:44,050 --> 00:54:49,690 Nə 127 vasitə, Mən olduqca əminəm, ancaq özümü məhdudlaşdırıla heç etdik 578 00:54:49,690 --> 00:54:52,470 Siz hətta çap f '127 'demək lazım deyil ki, 579 00:54:52,470 --> 00:54:57,090 lakin nə deməkdir ilk 127 simvol çap edir. 580 00:54:57,090 --> 00:54:59,350 Mən halda ki, olduqca əminəm. Siz ki, Google bilərsiniz. 581 00:54:59,350 --> 00:55:03,000 Lakin sonrakı bir mən bu o deməkdir ki, demək olar ki, müsbət deyiləm. 582 00:55:03,000 --> 00:55:08,880 Belə ki, bu yeni xətt izlədi ilk 127 simvol çap edir. 583 00:55:08,880 --> 00:55:14,680 F scan f indi əvəzinə dəyişən baxaraq və çap, 584 00:55:14,680 --> 00:55:22,620 bəzi simli baxmaq və dəyişən daxil model saxlamaq olacaq. 585 00:55:22,620 --> 00:55:26,360 Nin həqiqətən fərqli bir nümunə scan f istifadə edək. 586 00:55:26,360 --> 00:55:31,670 Belə ki, qoy biz bir int idi ki, x = 4, 587 00:55:31,670 --> 00:55:41,110 və biz bir string yaratmaq istəyirdi - simli yaratmaq istəyirdi 588 00:55:41,110 --> 00:55:44,250 bu qədər sonra gələcək, kimi ki, idi 589 00:55:44,250 --> 00:55:49,020 yalnız 4.jpg kimi bir şey. 590 00:55:49,020 --> 00:55:51,870 Belə ki, bu, sizin məbləğ counter olacaq bir proqram ola bilər 591 00:55:51,870 --> 00:55:56,420 i qarşı yekunlaşdırmaq, və images bir dəstə saxlamaq istəyirik. 592 00:55:56,420 --> 00:56:02,430 Beləliklə, siz i öz loop bəzi iteration olduğu i.jpg, saxlamaq istəyirik. 593 00:56:02,430 --> 00:56:05,500 Belə ki, necə ki, JPEG, bu simli edə bilərəm? 594 00:56:05,500 --> 00:56:11,720 Siz 4.jpg çap etmək istədi, biz yalnız çap f% d.jpg, demək olar 595 00:56:11,720 --> 00:56:14,410 və sonra bu JPEG üçün çap olardı. 596 00:56:14,410 --> 00:56:20,050 Biz simli 4.jpg qazanmaq istəyirsinizsə Lakin, biz scan f istifadə edin. 597 00:56:20,050 --> 00:56:30,860 String s Beləliklə - həqiqətən biz can't - xarakteri, char s, 100 gedək. 598 00:56:30,860 --> 00:56:35,400 Mən yalnız 100 simvol bəzi array elan 599 00:56:35,400 --> 00:56:39,830 və biz istər-istəməz ki JPEG daxil saxlanılması olacaq ne var 600 00:56:39,830 --> 00:56:47,920 Beləliklə, biz scan f istifadə etmək niyyətindədir və biz% d.jpg deyərdim necə formatında edirik 601 00:56:47,920 --> 00:56:54,980 4.jpg çap üçün, bu format% d.jpg olacaq. 602 00:56:54,980 --> 00:57:04,020 Belə ki, format% d.jpg, nə biz% d əvəz etmək istəyirəm x edir 603 00:57:04,020 --> 00:57:06,590 və indi biz bir yerdə ki, simli saxlamaq lazımdır. 604 00:57:06,590 --> 00:57:12,500 Və biz bu simli saxlamaq niyyətində olduğunuz array s edir. 605 00:57:12,500 --> 00:57:21,640 Belə ki, kodu, s bu xətt sonra biz dəyişən s f,% s çap əgər, 606 00:57:21,640 --> 00:57:26,280 bu 4.jpg çap olacaq. 607 00:57:26,280 --> 00:57:38,930 Belə f scan f indi bu fayl üzərində axtarır istisna olmaqla, scan f eyni 608 00:57:38,930 --> 00:57:43,600 s saxlamaq üçün nə üçün. 609 00:57:43,600 --> 00:57:46,160 Yəni son arqument olacaq nə. 610 00:57:46,160 --> 00:57:54,170 Funksiyaları tarar və "Scan f ailə aşağıda cəhd kimi həm format görə - Biz saxlamaq istəyirik. 611 00:57:54,170 --> 00:58:02,450 Heç bir yeri bal saxlanılır Əgər dönmək bilər - " 612 00:58:02,450 --> 00:58:12,910 Xeyr, biz yaxşı ola bilər. Mənə bir ikinci hesab edək. 613 00:58:12,910 --> 00:58:26,350 Belə scan f deyil - the heck ki etdiyi funksiyası nədir? 614 00:58:26,350 --> 00:58:31,650 Belə scan f bir tam almaq və dot jpg etmək niyyətində deyil. 615 00:58:31,650 --> 00:58:43,490 Bu [Mumbles] olacaq. 616 00:58:43,490 --> 00:58:49,360 String int C. int dəyişən edin 617 00:58:49,360 --> 00:58:55,940 Bu dəyişən və ya bu funksiya nə adlanır? 618 00:58:55,940 --> 00:59:04,950 Bəli. That's - bəli. Belə ki, nə sizə müəyyən əvvəl, s çap f idi 619 00:59:04,950 --> 00:59:09,820 olan - mən onu çap f kimi daha çox olduğunu söylədi niyə daha çox mənada edir. 620 00:59:09,820 --> 00:59:14,700 Scan f çap f kimi hələ cür, lakin s çap f üzərində scan edir 621 00:59:14,700 --> 00:59:17,510 və dəyişənlərin əvəz və indi bir string onu saxlamaq. 622 00:59:17,510 --> 00:59:19,620 Bunun əvəzinə çap, bir string bu saklar. 623 00:59:19,620 --> 00:59:25,070 Belə ki, tamamilə bilməz. Siz hələ çap f ki kimi formatı belirteci hesab edə bilər. 624 00:59:25,070 --> 00:59:34,510 Biz 4.jpg şey etmək istəyirdi əgər Beləliklə, biz bu x s ​​çap f etmək olar. 625 00:59:34,510 --> 00:59:38,520 Sual olacaq nə oldu - nə scan f edir? 626 00:59:38,520 --> 00:59:40,820 [Tələbə] Mən yalnız biz burada nə çalışdığınız nə qarışıq alıram 627 00:59:40,820 --> 00:59:43,450 ki, JPEG ilə. Əgər 1 dəfə daha izah edə bilər? 628 00:59:43,450 --> 00:59:52,710 Belə ki, bu idi - bu f scan f indi az relevent var; ümid edirəm ki, bu yol bir növ geri bağlamaq olacaq. 629 00:59:52,710 --> 01:00:02,240 Amma nə ilkin göstərmək niyyətində idi - bu, həqiqətən, bu [birbaşa müvafiq? F5] 630 01:00:02,240 --> 01:00:08,520 Siz s çap f istifadə olacaq, biz 100 images olduğu demək 631 01:00:08,520 --> 01:00:13,630 və image 1.jpg, 2.jpg, 3.jpg oxumaq istəyirəm. 632 01:00:13,630 --> 01:00:21,520 Belə ki, nə üçün siz f açıq lazımdır, və sonra siz açmaq istədiyiniz string keçmək lazımdır. 633 01:00:21,520 --> 01:00:30,020 Beləliklə, biz 1.jpg açmaq istəyir; 1.jpg ki string yaratmaq üçün, 634 01:00:30,020 --> 01:00:37,660 % biz s nə çap f d.jpg-biz int i = 0 etmədi. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Beləliklə s çap f% i d.jpg. 637 01:00:51,130 --> 01:00:56,320 Belə ki, bu xətt sonra, indi dəyişən və ya array s 1.jpg gedir. 638 01:00:56,320 --> 01:01:10,610 Və ya, 0.jpg, 1.jpg, 2.jpg. Və biz, öz növbəsində, oxumaq üçün hər image aça bilər. 639 01:01:10,610 --> 01:01:19,550 Belə ki, s f edir çap edir. Siz s f indi bunu çap nə görürsünüz? 640 01:01:19,550 --> 01:01:25,720 [Tələbə] Okay, bunu qəbul edir - bir string yaradır, something.jpg, sonra saklar. 641 01:01:25,720 --> 01:01:30,360 Bəli. Bu yaradır - bu yalnız scan f və çap f kimi, başqa bir format string ki, 642 01:01:30,360 --> 01:01:37,530 burada ikinci dəlil onu edər dəyişənlərin bütün, s kimi i fərqli ola bilər. 643 01:01:37,530 --> 01:01:42,280 Yəqin - I halda ki, deməkdir. Lakin hər hansı arqumentlər sifarişi edir. 644 01:01:42,280 --> 01:01:45,440 Bu format string daxil dəyişənlərin bütün daxil olacaq 645 01:01:45,440 --> 01:01:52,250 və sonra bufer daxil saxlamaq; biz simli saxlanılması olduğunuz bufer, bu ki çağırırıq. 646 01:01:52,250 --> 01:02:00,750 Belə ki, biz düzgün biçimli simli,% d 4 ilə əvəz edilmiş daxili s saxlanılması olunur. 647 01:02:00,750 --> 01:02:08,080 [Tələbə] Biz bunu əgər, yalnız atanır olacaq dəyişən f edir? 648 01:02:08,080 --> 01:02:18,110 Bəli. Belə ki, biz bunu əvvəlki f yaxın olmalıdır. 649 01:02:18,110 --> 01:02:22,810 Amma - bir f burada açmaq yox idi əgər, sonra da, biz demək lazımdır - 650 01:02:22,810 --> 01:02:29,280 Bəli. Amma yüz müxtəlif faylları açmaq olardı. 651 01:02:29,280 --> 01:02:37,360 Tamam - [Tələbə] Lakin biz daxil olmaq və ya ola bilər. 652 01:02:37,360 --> 01:02:44,230 Okay. Belə scan f, f scan f, eyni fikri növü 653 01:02:44,230 --> 01:02:53,610 lakin əvəzinə əvəzinə bir simli daxil saxlanılması, daha indi kimi 654 01:02:53,610 --> 01:03:02,420 ki, simli qarşı uyğun bir sting və model üzərində gedən və dəyişənlərin daxil nəticələri saxlanılması. 655 01:03:02,420 --> 01:03:11,290 Siz 4.jpg kimi bir şey üzərində analiz və məbləğ int x daxil tam 4 saxlamaq üçün scan f istifadə edə bilərsiniz. 656 01:03:11,290 --> 01:03:13,430 Yəni biz scan f istifadə edə bilərsiniz nə. 657 01:03:13,430 --> 01:03:16,300 F scan f command line ki, nə gedir. 658 01:03:16,300 --> 01:03:19,200 Mən, həqiqətən, bu CS50 kitabxana nə olduğunu olduqca əminəm. 659 01:03:19,200 --> 01:03:29,050 Beləliklə, siz deyəndə, "int almaq," bu scan f-ing üzərində var - scan f istifadəçi daxil olmaq yoludur. 660 01:03:29,050 --> 01:03:34,670 F scan f eyni şey gedir amma artıq scan bir fayl istifadə edir. 661 01:03:34,670 --> 01:03:41,090 Odur ki, biz bu fayl üzərində skaner olunur. 662 01:03:41,090 --> 01:03:45,460 Biz uyğun çalışırıq model 127 simvol uzunluğunda olan bir string edir 663 01:03:45,460 --> 01:03:48,100 yeni xətt izlədi 664 01:03:48,100 --> 01:03:54,770 Mən lüğət, çünki ", s uyğun" Biz hətta yalnız demək olar olduqca əminəm 665 01:03:54,770 --> 01:03:57,770 biz nə, heç bir sözü uzun təmin edirik, 666 01:03:57,770 --> 01:04:03,310 və həmçinin f scan f, mən hesab edirəm ki, yeni xətt heç nə duracaq. 667 01:04:03,310 --> 01:04:06,970 Amma matçın yeni xətt daxildir, və lazımdır - 668 01:04:06,970 --> 01:04:13,960 [Tələbə] yeni xətt daxildir olmasaydı, bu söz hissələri tapmaq deyil? 669 01:04:13,960 --> 01:04:22,900 Bu - hər - lüğət baxaraq - 670 01:04:22,900 --> 01:04:26,200 Belə ki, lüğət, bu bizim söz bütün var. 671 01:04:26,200 --> 01:04:30,500 Hər bir yeni xətt edir. 672 01:04:30,500 --> 01:04:32,510 Tarama f bu söz almaq üçün gedir. 673 01:04:32,510 --> 01:04:38,750 Yeni xətt daxil deyil, onda növbəti scan f yalnız yeni xətt oxumaq ki, mümkündür. 674 01:04:38,750 --> 01:04:44,180 Amma yeni, o cümlədən sonra yalnız yeni xətt ignore edəcək. 675 01:04:44,180 --> 01:04:49,440 Biz həmişə bir yeni heç nə qədər oxuyur Lakin biz bir söz hissəsi almaq olmaz. 676 01:04:49,440 --> 01:04:54,530 [Tələbə] Amma nə cissa kimi sözü "cissa" üçün axtarış edin. 677 01:04:54,530 --> 01:04:57,380 Ki, tapmaq və bu, bir matç demək olacaq? 678 01:04:57,380 --> 01:05:05,110 Belə ki, burada biz - bu oxumaq - bu, həqiqətən, yaxşı bir nöqtəsidir. 679 01:05:05,110 --> 01:05:10,660 Biz cari istifadə heç vaxt edirik - biz aradığınız söz ilk command line dəlildir. 680 01:05:10,660 --> 01:05:16,460 Belə ki, simli, söz = argv 1. 681 01:05:16,460 --> 01:05:20,020 Beləliklə, biz aradığınız string argv 1-dir. 682 01:05:20,020 --> 01:05:23,290 Biz scan f bütün bir söz axtarır deyil. 683 01:05:23,290 --> 01:05:28,030 Biz scan f edir ki, lüğət hər söz alır 684 01:05:28,030 --> 01:05:34,320 və sonra bir dəfə biz onları müqayisə etmək strcmp istifadə etmək olacaq ki, söz var. 685 01:05:34,320 --> 01:05:39,210 Biz söz müqayisə olacaq və biz yalnız daxil oxumaq 686 01:05:39,210 --> 01:05:45,110 Belə ki, istər-istəməz, biz scan fs bir dəstə bunu başa olacaq 687 01:05:45,110 --> 01:05:52,130 yalnız belə scan f qaytarır olur qədər - 688 01:05:52,130 --> 01:05:54,800 bu kimi uzun bir yeni söz eşlemeli kimi, bir qayıdacaq 689 01:05:54,800 --> 01:06:01,360 və tezliklə bu söz uyğun uğursuz kimi başqa bir şey qayıdacaqlar. 690 01:06:01,360 --> 01:06:08,440 Biz dəyişən s daxil hər sözü xətti ilə line saxlanılması, bütün lüğət üzərində oxuyur. 691 01:06:08,440 --> 01:06:17,240 Sonra, s ilə söz müqayisə və müqayisə == 0 əgər olunur 692 01:06:17,240 --> 01:06:21,650 strcmp matç yaptıysanız 0 gətirmək olur. 693 01:06:21,650 --> 01:06:31,510 O 0 idi Odur ki, əgər biz uyğunlaşdı, f çap edə bilərsiniz 694 01:06:31,510 --> 01:06:35,370 və ya söz lüğətdə və ya siz f çap etmək istəyirəm nə. 695 01:06:35,370 --> 01:06:41,450 Və sonra - biz f daha artıq yaxın və istəmirəm. 696 01:06:41,450 --> 01:06:50,410 Bu etmək istəyirəm şey cür və biz yalnız lüğət söz axtarır deyil. 697 01:06:50,410 --> 01:06:56,660 Belə ki, əvvəl bildirib kimi, biz onların model, cissa axtarmaq istəyirdi, əgər bunu edə bilər 698 01:06:56,660 --> 01:07:00,260 ki, model axtarmaq istəyirdi, onda bu halda uğursuz olacaq 699 01:07:00,260 --> 01:07:08,010 əslində bir söz deyil, amma lüğət sözləri biri ki, var olur ki. çünki 700 01:07:08,010 --> 01:07:13,560 Belə ki, bu söz uyğun, lakin sözü bu alt bir söz özü deyil. 701 01:07:13,560 --> 01:07:17,250 Lakin biz onu istifadə etdiyiniz deyil, biz hər sözü oxu edirik 702 01:07:17,250 --> 01:07:19,740 və sonra biz sözü ilə var söz müqayisə. 703 01:07:19,740 --> 01:07:25,780 Beləliklə, biz həmişə tam sözləri müqayisə edirik. 704 01:07:25,780 --> 01:07:29,620 Mən sonradan başa həllər həyata göndərə bilərsiniz. 705 01:07:29,620 --> 01:07:32,050 Bu təxminən düzgün cavab növ, mən hesab edirəm. 706 01:07:32,050 --> 01:07:34,720 [Tələbə comment, anlaşılmaz] 707 01:07:34,720 --> 01:07:40,870 Əvvəl Oh, mən xilas etdi? Char s, biz 127 bildirib tapmaq - Mən böyük nə unutmayın. 708 01:07:40,870 --> 01:07:44,100 Biz yalnız 128 edərik; indi uzun kifayətdir. 709 01:07:44,100 --> 01:07:46,570 Biz bir şey çap ehtiyac yoxdur. 710 01:07:46,570 --> 01:07:56,440 Biz fayl yaxın olsun olacaq ki, doğru cavab olmalıdır. 711 01:07:56,440 --> 01:07:59,440 CS50.TV