1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Sadaļā Problēma Set 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Hārvarda Universitāte 3 00:00:04,910 --> 00:00:07,410 Tas ir CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Tātad, es esmu Rob. Es esmu vecākais Kirkland. Šis ir mans trešais gads TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Tā ir pirmā reize, kad mēs esam mainās no tradicionālā lekciju stila sadaļā, 6 00:00:22,220 --> 00:00:25,610 kur mēs tikko veida pārbaudes, kas notika lekciju un tad jūs puiši uzdot jautājumus, 7 00:00:25,610 --> 00:00:32,250 Tagad ir daudz vairāk problēmu bāzes, kur mēs izmantojam Spaces, un - 8 00:00:32,250 --> 00:00:37,410 Ak, tā ideja ir doties uz šo saiti es nosūtīts jums un tad jums būs manā telpā. 9 00:00:37,410 --> 00:00:42,410 Vai kāds nav klēpjdators? Labi. 10 00:00:42,410 --> 00:00:47,050 Tāpēc mēs gribam būt, izmantojot šo, un mēs esam gatavojas darīt problēmas dzīvo sadaļā 11 00:00:47,050 --> 00:00:50,740 un apspriest tos un norādītas, ko es daru nepareizi 12 00:00:50,740 --> 00:00:56,390 un es varētu uzvilkt kādu no jūsu kodu, un es varētu apspriest savas idejas. 13 00:00:56,390 --> 00:01:02,140 Tātad ir kāds bija grūtības? 14 00:01:02,140 --> 00:01:07,000 Jūs varat tērzēt uz pusi, es nezinu, vai mums būs iemesls par to. 15 00:01:07,000 --> 00:01:12,270 Tagad, tāpat kā iepriekšējā supersection, ja jūs šajā klasē, jūs zināt, kas tas ir par. 16 00:01:12,270 --> 00:01:19,200 Par visiem P komplekti tur būs šīs sadaļas. 17 00:01:19,200 --> 00:01:22,550 Tā 2 P-komplekts, specifikāciju, es domāju, jūs redzēju to 1 P-komplektu jau. 18 00:01:22,550 --> 00:01:27,400 Bet mēs varam apskatīt P 2 komplekta par to, ko mēs ejam, lai iet pa šodien. 19 00:01:27,400 --> 00:01:29,460 Un jūs redzēsiet sadaļu jautājumus. 20 00:01:29,460 --> 00:01:37,530 Tātad šī būs visu P komplektu, tur būs sadaļa par jautājumiem. 21 00:01:37,530 --> 00:01:41,340 Līdz šim mēs esam teica: "Uzskatu šo iespēju praktizēt." 22 00:01:41,340 --> 00:01:44,940 Jums netiks lūgts iesniegt šo programmu. 23 00:01:44,940 --> 00:01:48,480 Ideja ir tāda, ka tie ir paredzēts, lai veida palīdzēs jums sākās ar problēmu kopumu. 24 00:01:48,480 --> 00:01:53,220 Es domāju par Hacker izdevumā, daudzi no viņiem ir vajadzētu būt tikai jaunas, interesantas lietas, lai uzzinātu. 25 00:01:53,220 --> 00:01:58,590 Tie nedrīkst būt tieši piemērojami problēmu kopumu. 26 00:01:58,590 --> 00:02:01,810 Un šobrīd mēs neesam kam jūs tos iesniegt, bet teorētiski, 27 00:02:01,810 --> 00:02:07,480 lai vēlāk problēmu kopu, jūs varētu tos iesniegt, un tādējādi jūs varat nākt uz sadaļu 28 00:02:07,480 --> 00:02:10,380 vai skatīties sadaļu, lai saņemtu atbildes, vai arī jūs varat tikai iegūt viņus par savu 29 00:02:10,380 --> 00:02:16,350 ja jums nav justies kā bauda manu klātbūtni. 30 00:02:16,350 --> 00:02:21,010 Tātad - es domāju, ka tas ir pirmais. 31 00:02:21,010 --> 00:02:29,280 Oh. Tāpat saskaņā ar šiem jautājumiem sadaļās mēs arī esam jums uzdot jautājumus par šorti. 32 00:02:29,280 --> 00:02:33,440 Tāpēc es domāju, teorētiski, jūs vajadzēja skatīties šos pirms došanās uz sadaļu, 33 00:02:33,440 --> 00:02:38,550 bet tas ir labi, ja jums nav, mēs iet pār viņiem vienalga. 34 00:02:38,550 --> 00:02:42,590 Lai mēs varētu sākt ar šo: "Kā kamēr cilpa atšķiras no do-kamēr cilpa? 35 00:02:42,590 --> 00:02:46,210 Kad ir pēdējais sevišķi noderīgs? " 36 00:02:46,210 --> 00:02:49,390 Tātad kāds ir jebkurš -? 37 00:02:49,390 --> 00:02:52,730 [Studentu] do-kamēr cilpa būs vienmēr izpildīt vismaz vienu reizi. 38 00:02:52,730 --> 00:03:02,950 Jā. Tāpēc, ka ir atšķirība. Kamēr cilpa - I'll vienkārši darīt to šeit - kamēr cilpa, mums ir stāvoklī 39 00:03:02,950 --> 00:03:19,760 tieši šeit, bet do-kamēr, jums nav nosacījums kamēr mēs noteikti šeit. 40 00:03:19,760 --> 00:03:24,130 Un tā, kad jūsu programma ir izpildes, un tas izpaužas kamēr cilpa, 41 00:03:24,130 --> 00:03:26,380 tas uzreiz pārbauda, ​​vai šis nosacījums ir patiess. 42 00:03:26,380 --> 00:03:30,710 Ja šis nosacījums nav taisnība, tas būs tikai izlaist cilpa pilnībā. 43 00:03:30,710 --> 00:03:34,390 Do-kamēr cilpa, jo programma ir izpildes, tā kļūst par "darīt." 44 00:03:34,390 --> 00:03:37,920 Nekas nenotiek šajā brīdī, tikai turpina izpildes. 45 00:03:37,920 --> 00:03:42,690 Tad, kad tas hits ", bet," ja nosacījums ir patiess, tas būs cilpu atpakaļ un darīt to vēlreiz 46 00:03:42,690 --> 00:03:46,730 un atkal un atkal, līdz stāvoklis nav taisnība, un tad tikai krītas. 47 00:03:46,730 --> 00:03:50,600 Tātad, starpība ir, ka tas var izlaist jau no paša sākuma. 48 00:03:50,600 --> 00:03:56,770 Tas vienmēr izpilda vienreiz un pēc tam var izpildīt vairākas reizes, ja nosacījums joprojām ir taisnība. 49 00:03:56,770 --> 00:04:03,720 Tātad, kamēr cilpa būs tikai darīt to vienu reizi, vai arī - kamēr cilpa - mums nav nepieciešams to darīt visu, 50 00:04:03,720 --> 00:04:07,900 jo tiklīdz mēs uz to, ja nosacījums ir aplams, mēs vienkārši izlaist tiesības pār to. 51 00:04:07,900 --> 00:04:11,770 Tā do-kamēr cilpa, mēs izpildīt to vienu reizi, vienmēr. 52 00:04:11,770 --> 00:04:14,560 Tad, kad mēs ar nosacījumu, mēs pārbaudām, vai tas ir patiess vai nepatiess. 53 00:04:14,560 --> 00:04:19,790 Ja tā ir taisnība, mēs darīsim to vēlreiz, ja tā ir nepatiesa, mēs vienkārši turpināt iet. 54 00:04:19,790 --> 00:04:24,680 Tātad, ja ir pēdējais sevišķi noderīgs? 55 00:04:24,680 --> 00:04:31,190 Tāpēc es varu teikt, ka kopumā par 4 gadiem, 3 gadi, neatkarīgi, 56 00:04:31,190 --> 00:04:38,780 ka es esmu programmēšana, man ir izmantoti šo, piemēram, zem 10 reizes. 57 00:04:38,780 --> 00:04:43,140 Un, iespējams, 5 no tiem ir CS50 kad mēs ieviešot do-kamēr cilpas. 58 00:04:43,140 --> 00:04:47,510 Tātad, ja jūs izmanto do-kamēr cilpas? 59 00:04:47,510 --> 00:04:49,510 Ja ir - jā! 60 00:04:49,510 --> 00:04:53,180 [Studentu] Ja jūs mēģināt iegūt lietotāja ievadi, vai kaut ko vēlaties pārbaudīt - 61 00:04:53,180 --> 00:04:59,700 Yeah. Tā do-kamēr cilpas, lietotājs ievade ir liels vienu. 62 00:04:59,700 --> 00:05:03,160 Tieši tāpēc par pirmajiem pāris problēmu kopas, kad jūs vēlaties, lai jautāt lietotājam, piemēram, 63 00:05:03,160 --> 00:05:08,520 "Dodiet man virkni," jūs nevarat turpināt, līdz jums, ka virkni. 64 00:05:08,520 --> 00:05:12,980 Un tā tu, obligāti, ir nepieciešams lūgt stīgu vismaz vienu reizi. 65 00:05:12,980 --> 00:05:16,950 Bet tad, ja viņi atbildētu kaut ko sliktu, tad jums nepieciešams, lai cilpa atpakaļ un atkal. 66 00:05:16,950 --> 00:05:20,810 Bet, izņemot lietotāja ievadi, tas ir ļoti reti, ka man rodas lietu 67 00:05:20,810 --> 00:05:27,170 kur es gribu cilpa "vismaz vienreiz", bet, iespējams, vairāk. 68 00:05:27,170 --> 00:05:33,370 Jautājumi vai -? Vai kāds izmanto do-kamēr cilpa jebkur citur? 69 00:05:33,370 --> 00:05:36,780 Labi. Tātad nākamais ir, "Ko nedeklarētu identifikators 70 00:05:36,780 --> 00:05:43,310 Parasti norāda, ja izvadīt ar šķindēt? " 71 00:05:43,310 --> 00:05:47,380 Tātad, kāda veida koda es varētu uzrakstīt, lai iegūtu "nedeklarētu identifikators?" 72 00:05:47,380 --> 00:05:49,550 [Studentu], ka x = 2? 73 00:05:49,550 --> 00:05:52,650 Tātad mēs varam tikai mēģināt to šeit, x = 2. 74 00:05:52,650 --> 00:06:04,830 Mēs rādīsim šo - Ak, man nav uz tā. Tātad šeit mēs - visas tiesības. 75 00:06:04,830 --> 00:06:07,100 "Izmantošana nedeklarētu identifikators x." 76 00:06:07,100 --> 00:06:11,610 Tā ka ir nedeklarētu identifikators, mainīga. 77 00:06:11,610 --> 00:06:13,910 Tas bieži zvana mainīgu identifikatoru. 78 00:06:13,910 --> 00:06:17,300 Tātad tas varētu nezināt, tas ir tiešām mainīgs, tas nezina, kas tas ir. 79 00:06:17,300 --> 00:06:19,380 Tātad, tas ir identifikators. 80 00:06:19,380 --> 00:06:26,060 Tātad, kāpēc ir tā nedeklarētu? Yeah. 81 00:06:26,060 --> 00:06:32,190 Tātad, lai būtu skaidrs par terminoloģiju, deklarācija ir mainīgs 82 00:06:32,190 --> 00:06:37,360 ir tad, kad jūs sakāt "int x" vai "stīgu Y," kāds. 83 00:06:37,360 --> 00:06:41,910 Inicializācijas mainīgā, vai mainīgā piešķiršana, 84 00:06:41,910 --> 00:06:44,510 ir, kad tu saki "x = 2." 85 00:06:44,510 --> 00:06:52,950 Tātad, mēs varam izdarīt šos atsevišķos posmos, int x, x = 2, un līdz - mēs varam būt ķekars sīkumi šeit - 86 00:06:52,950 --> 00:07:00,350 bet līdz šī līnija notiek, x ir vēl neinicializēts, bet tas ir pasludināts. 87 00:07:00,350 --> 00:07:06,760 Un tā mēs, protams, var darīt to 1 līnijas, un tagad mēs esam atzīta un inicializēšana. 88 00:07:06,760 --> 00:07:10,730 Jautājumi? 89 00:07:10,730 --> 00:07:18,390 Un visbeidzot, "Kāpēc ir Cēzaru šifra nav ļoti droša?" 90 00:07:18,390 --> 00:07:23,830 Tātad, pirmkārt, vai kāds grib pateikt to, ko Cēzars šifra ir? 91 00:07:23,830 --> 00:07:28,100 [Studentu] Cēzars šifra tieši ir tas, ka jums karte, jūs maiņās katru burtu, 92 00:07:28,100 --> 00:07:34,420 noteiktu skaitu burtu iet pāri, un pārvietot atpakaļ pāri, un tas nav ļoti droša, jo 93 00:07:34,420 --> 00:07:42,260 tur tikai 26 iespējamie varianti, un jums vienkārši ir izmēģināt katru 1 no tiem, līdz jūs saņemsiet. 94 00:07:42,260 --> 00:07:45,470 Oh. Tātad, es atkārtoju? 95 00:07:45,470 --> 00:07:51,600 Caesar Cipher, it's - es domāju, jums būs darīšana ar to uz problēmām, kas jums - 96 00:07:51,600 --> 00:07:56,110 vai es domāju standarta izdevums problēmu kopumu, kas nav par hakeru izdevuma. 97 00:07:56,110 --> 00:08:01,550 Tā par standarta izdevuma uz problēmu kopumu, jūs saņemsiet ziņu, piemēram, "Hello, World" 98 00:08:01,550 --> 00:08:08,410 un jums ir arī vairāki, piemēram, 6, un jūs lietojat šo ziņu, un katra individuālo raksturu, 99 00:08:08,410 --> 00:08:11,310 jūs pagriezt par 6 pozīcijām alfabēta. 100 00:08:11,310 --> 00:08:16,560 Tātad "h", kas sveiki kļūtu h-i-j-k-l-m-N. 101 00:08:16,560 --> 00:08:19,600 Tātad pirmais burts būtu n. Mēs darīt to pašu ar e. 102 00:08:19,600 --> 00:08:23,530 Ja mums ir, piemēram, z vai kaut ko, tad mēs wrap atpakaļ ap "." 103 00:08:23,530 --> 00:08:29,280 Bet katrs raksturs izpaužas iestatīti 6 simboli vēlāk alfabētu, un tas nav ļoti droša 104 00:08:29,280 --> 00:08:35,440 jo tur ir tikai 26 iespējas, cik daudz veidi, jūs varētu pabeigt vienu burtu. 105 00:08:35,440 --> 00:08:42,919 Tātad jūs varat vienkārši izmēģināt visus 26 no tām un, iespējams, pietiekami ilgu ziņu, 106 00:08:42,919 --> 00:08:46,860 tikai 1 no iespējamajiem 26 lietām būs salasāms, 107 00:08:46,860 --> 00:08:50,300 un salasāmiem viens būs sākotnējais ziņojums. 108 00:08:50,300 --> 00:08:56,240 Tāpēc tas nav ļoti labs veids, šifrējot neko. 109 00:08:56,240 --> 00:08:59,070 Saistīti ar šīm šorti, "Kas ir funkcija?" 110 00:08:59,070 --> 00:09:03,370 Tātad, kas ir funkcija? Jā. 111 00:09:03,370 --> 00:09:11,640 [Studentu] Tas ir tāpat kā ar atsevišķu gabals kodu, ka jūs varat zvanīt, lai iet cauri un pēc tam saņemt atgriezto vērtību neatkarīgi. 112 00:09:11,640 --> 00:09:18,160 Yeah. Tāpēc es ņemšu to atbildētu, arī atbildot uz nākamo - vai atkārtot, arī vienkārši atbildot nākamo. 113 00:09:18,160 --> 00:09:22,410 Jūs varat izmantot funkcijas, nevis tikai kopēšanu un ielīmēšanu kodu atkal un atkal. 114 00:09:22,410 --> 00:09:27,200 Just veikt šo kodu, ieliec fuction, un tad jūs varētu tikai izsauktu funkciju 115 00:09:27,200 --> 00:09:29,870 kur jums ir kopējot un ielīmējot. 116 00:09:29,870 --> 00:09:33,350 Tāpēc funkcijas ir noderīgas. 117 00:09:33,350 --> 00:09:35,860 Tāpēc tagad mēs darīsim aktuālās problēmas. 118 00:09:35,860 --> 00:09:46,490 Pirmais. Tāpēc pirmā doma ir, kad iet to stīgu, un neatkarīgi no - 119 00:09:46,490 --> 00:09:52,060 vai tas saka visiem mazajiem? Tas nav teikt, visiem mazajiem. 120 00:09:52,060 --> 00:09:57,730 Tāpēc ziņa var būt jebkas, un - ak nē. Tā dara. 121 00:09:57,730 --> 00:10:01,610 "Vienkāršības, jūs varat pieņemt, ka lietotājs būs tikai ievadi mazos burtus un atstarpes." 122 00:10:01,610 --> 00:10:08,180 Tātad mēs nodot to ziņojumu ar tikai mazajiem burtiem, un tad mēs pārmaiņus 123 00:10:08,180 --> 00:10:15,450 starp kapitālu un mazo - mēs mainām virkne būt kapitāla un mazos, pārmaiņus. 124 00:10:15,450 --> 00:10:22,920 Tātad, pirms mēs jums otrais pat nirt problēmu, 125 00:10:22,920 --> 00:10:32,420 kas ir pirmā lieta, kas mums jādara? 126 00:10:32,420 --> 00:10:36,900 Ak, ko gan es vienkārši noklikšķiniet uz? Ak, es tikai noklikšķinājis uz e-pastu šeit. 127 00:10:36,900 --> 00:10:42,870 Tātad, pirmā lieta, kas mums jādara - es esmu meklē nepareizu vienu? 128 00:10:42,870 --> 00:10:49,320 Vai šī daļa no šo vienu? 129 00:10:49,320 --> 00:10:51,320 Nē, tie joprojām ir tur, lai gan. 130 00:10:51,320 --> 00:10:55,160 Labi, vēl šeit. 131 00:10:55,160 --> 00:11:03,160 Tagad mēs nevaram uzņemties -? Jā. Šeit mēs nevaram pieņemt, ka tas ir tikai mazos un telpas. 132 00:11:03,160 --> 00:11:07,770 Tāpēc tagad mums ir tikt galā ar to, ka vēstules var būt neatkarīgi no mums vēlas tos. 133 00:11:07,770 --> 00:11:11,910 Un tā pirmā lieta, ko mēs vēlamies darīt, ir tikai iegūt ziņu. 134 00:11:11,910 --> 00:11:19,790 Mums ir nepieciešams, lai iegūtu virkni, String s = GetString, labi. 135 00:11:19,790 --> 00:11:24,890 Tagad šī problēma ir pāris veidus, kā darīt to. 136 00:11:24,890 --> 00:11:29,840 Taču mēs vēlamies izmantot Bitu līmeņa operatoriem šeit. 137 00:11:29,840 --> 00:11:35,280 Vai ir cilvēki, kuri vai nu nebija pie supersection, 138 00:11:35,280 --> 00:11:37,480 vai kaut ko, un nezinu, ko Bitu līmeņa operatoriem? 139 00:11:37,480 --> 00:11:41,710 Vai to, kā tie ir saistīti ar ASCII kādā veidā? 140 00:11:41,710 --> 00:11:45,650 [Studentu] man nebija pie supersection, bet es zinu, ko Bitu līmeņa operatoriem. 141 00:11:45,650 --> 00:11:49,560 Labi. Tātad, tad man nav iet pār tiem pamatiem, bet es paskaidrošu 142 00:11:49,560 --> 00:11:51,830 ko mēs esam gatavojas vēlaties izmantot šeit. 143 00:11:51,830 --> 00:11:59,680 Tātad '': Binary pārstāvniecība kapitāla A, skaits ir 65. 144 00:11:59,680 --> 00:12:07,560 Es esmu tikai gatavojas apskatīt - 41 būs 01.000.001. 145 00:12:07,560 --> 00:12:14,170 Lai būtu 65 decimālais, tāpēc šī ir binārs atveidojums no rakstzīmju kapitāla A. 146 00:12:14,170 --> 00:12:19,440 Tagad, bināro pārstāvību rakstura mazo "" 147 00:12:19,440 --> 00:12:33,350 būs tas pats, gandrīz. Ir tā, ka - 6, jā. Tas ir labi. 148 00:12:33,350 --> 00:12:37,670 Tātad binārā kapitāls, binārā mazos "." 149 00:12:37,670 --> 00:12:43,940 Tāpēc ievērosiet, ka atšķirība starp un "" ir tas vienu bitu. 150 00:12:43,940 --> 00:12:49,440 Un tas notiek, ir 32 bitu, mazliet pārstāv numuru 32. 151 00:12:49,440 --> 00:12:53,910 Un tas ir pamatoti, jo ir 65, "" ir 97. 152 00:12:53,910 --> 00:12:56,610 To starpība ir 32. 153 00:12:56,610 --> 00:13:03,770 Tātad tagad mēs zinām, mēs varam pārvērst no A līdz "A", ņemot 154 00:13:03,770 --> 00:13:09,710 un Bitu līmeņa ORing to, ar - kas izskatās kā pēc 1. 155 00:13:09,710 --> 00:13:20,900 Tas ir Bitu līmeņa VAI, ar 00100000, un kas būs dod mums "." 156 00:13:20,900 --> 00:13:26,850 Un mēs varam iegūt no "a" līdz ar Bitu līmeņa anding 157 00:13:26,850 --> 00:13:33,700 ar 11, 0 šajā vietā, 11111. 158 00:13:33,700 --> 00:13:43,840 Tātad tas būs pēc tam sniedz mums tieši to, ko "" bija, bet atcelt šo individuālo mazliet, 159 00:13:43,840 --> 00:13:50,070 tāpēc mums būs 01000001, es nezinu, ja es skaitot labi. 160 00:13:50,070 --> 00:13:56,750 Bet šis Bitu līmeņa ORing paņēmiens, kā iegūt no kapitāla uz mazo 161 00:13:56,750 --> 00:14:02,080 un Bitu līmeņa anding lai saņemtu no mazie kapitālam nav ekskluzīvs A. 162 00:14:02,080 --> 00:14:06,510 Visi burti, K vs K, Z vs Z, 163 00:14:06,510 --> 00:14:10,080 visi no tiem ir tikai gatavojas atšķirties ar šo vienu bitu. 164 00:14:10,080 --> 00:14:16,290 Un lai jūs varētu izmantot, lai mainītu no jebkura mazo burtu uz jebkuru lielo burtu un vice versa. 165 00:14:16,290 --> 00:14:26,670 Labi. Tik vienkāršs veids, kā iegūt no šī - tā vietā, lai 166 00:14:26,670 --> 00:14:32,170 izrakstīt kāds 1011111 ir - viegls veids, kā pārstāvēt šo numuru, un tas nav viens 167 00:14:32,170 --> 00:14:39,710 ka es devos pāri, kas supersection, bet Tilde (~) ir vēl Bitu līmeņa uzņēmējs. 168 00:14:39,710 --> 00:14:42,520 Kas ~ tas ir tas izskatās pēc bitu pārstāvniecībā. 169 00:14:42,520 --> 00:14:45,630 Pieņemsim jebkuru skaitu. 170 00:14:45,630 --> 00:14:53,130 Tas ir tikai daži bināro numuru, un kādi ~ tas ir tas vienkārši flips visiem bitiem. 171 00:14:53,130 --> 00:15:00,630 Tātad šī bija 1, tagad 0, tas ir 0, tagad 1, 010.100. 172 00:15:00,630 --> 00:15:08,320 Tā ka viss ~ dara. Tātad 32 būs skaits - atbrīvoties no tā - 173 00:15:08,320 --> 00:15:23,320 tāpēc 32 būs skaits 00.100.000, un tāpēc ~ šīs būs 174 00:15:23,320 --> 00:15:29,980 šis skaitlis šeit, ka man anded "a" ar. 175 00:15:29,980 --> 00:15:35,600 Vai visi redzētu, ka? Tas ir diezgan bieži, piemēram, kad jūs vēlaties, lai noskaidrotu 176 00:15:35,600 --> 00:15:40,740 lai vēlāk lietas, ko mēs varētu redzēt, ja mēs gribam, lai redzētu, vai - 177 00:15:40,740 --> 00:15:44,710 vai mēs gribam visu, katru bitu komplekts, izņemot 1 178 00:15:44,710 --> 00:15:47,910 jums mēdz darīt ~ no mazliet ka mēs negribam noteikto. 179 00:15:47,910 --> 00:15:53,090 Tāpēc mēs nevēlamies 32 bitu kopu, tāpēc mēs ~ 32. 180 00:15:53,090 --> 00:15:57,790 Labi. Tātad, mēs varam izmantot visus tos šeit. 181 00:15:57,790 --> 00:16:03,000 Labi, tāpēc tas ir labi, ja jūs neesat darīts, mēs lēnām staigāt pa kopā, 182 00:16:03,000 --> 00:16:11,870 vai staigāt pa šo, tāpēc - caur šo. Staigāt pa šo. 183 00:16:11,870 --> 00:16:20,790 Tāpēc mums ir mūsu stīgu, un mēs vēlamies, lai cilpu pār katru rakstzīmi šajā virknē un darīt kaut ko uz to. 184 00:16:20,790 --> 00:16:26,710 Tātad, kā mēs cilpu pār virknes? Ko mums vajadzētu izmantot? 185 00:16:26,710 --> 00:16:30,980 Es neesmu gatavojas darīt to šeit. Yeah. 186 00:16:30,980 --> 00:16:42,940 Tāpēc man ir mana iterator, un viņš teica, bet kā es varu zināt, cik rakstzīmes ir virknē? 187 00:16:42,940 --> 00:16:47,030 Strlen (-iem), tad es + +. 188 00:16:47,030 --> 00:16:49,860 Tātad, ko es esmu darījusi šeit nav labākais veids, kā to lietas. 189 00:16:49,860 --> 00:16:51,860 Vai kāds zina, kāpēc? 190 00:16:51,860 --> 00:16:55,290 Jo jūs pārbaudīt valodu virknes katru reizi. 191 00:16:55,290 --> 00:17:06,859 Tāpēc mēs vēlamies virzīties uz strlen, es varētu teikt šeit, int garums = strlen (-iem), 192 00:17:06,859 --> 00:17:11,900 un tad es varu 00:17:20,410 Es varētu arī darīt int i = 0, garums = strlen (-iem). 194 00:17:20,410 --> 00:17:25,010 Un tā tas ir nedaudz labāka, jo tagad es esmu sašaurinājuši 195 00:17:25,010 --> 00:17:29,150 no dažāda garuma, lai tikai šo "par" cilpa, nevis deklarējot to pirms 196 00:17:29,150 --> 00:17:34,990 un ka tas vienmēr pastāv, un, ja jums nav nozvejas kāpēc tas ir slikti, 197 00:17:34,990 --> 00:17:39,410 vai kāpēc sākotnējais bija slikti, it's - sākas, lai cilpa. 198 00:17:39,410 --> 00:17:43,380 Piereģistrējos stāvokli. Ir i 00:17:46,790 Tāpēc garuma, pieņemsim strādāt ar "Hello" visu laiku. 200 00:17:46,790 --> 00:17:49,670 Tātad garums s, h-e-l-l-o. Garums ir 5. 201 00:17:49,670 --> 00:17:57,580 Tāpēc es = 0, garums ir 5, tāpēc man nav <5, tāpēc cilpa turpinās. 202 00:17:57,580 --> 00:18:02,750 Tad mēs ejam atkal. Mēs pārbaudīt stāvokli. Ir i 00:18:08,390 Tāpēc pieņemsim pārbaudīt garumu sveiki. H-e-l-l-o. Tas ir 5; man nav <5, lai mēs turpinātu atkal. 204 00:18:08,390 --> 00:18:13,330 Tātad mēs aprēķinātu, mēs paļaujamies sveiki, par katru atkārtojuma no cilpas, 205 00:18:13,330 --> 00:18:17,380 pat domāju, ka tas nekad nebūs jāmaina, tas vienmēr būs 5. 206 00:18:17,380 --> 00:18:22,530 Tātad mēs vienkārši atcerēties 5 līdz priekšā, un tagad viss ir labāk. 207 00:18:22,530 --> 00:18:24,990 Tātad atkārtojot visā virknē. 208 00:18:24,990 --> 00:18:31,470 Ko mēs vēlamies darīt par katru rakstzīmi no virknes? 209 00:18:31,470 --> 00:18:38,510 [Studentu runājot, nesaprotami] 210 00:18:38,510 --> 00:18:47,000 Yeah. Tātad, ja raksturs ir ne-burtu, tad mēs vienkārši vēlamies, lai izlaistu pār to. 211 00:18:47,000 --> 00:18:52,300 Jo mēs tikai rūp alfabēta burtiem, mēs nevaram kapitalizēt numuru. 212 00:18:52,300 --> 00:19:10,850 Tātad, kā mēs varam darīt? Tātad mūsu stāvoklī, tāpēc, ja mēs gribam kaut ko - pārbaudīt, vai tā alfabēta. 213 00:19:10,850 --> 00:19:14,060 Tātad, kā mēs to pārbaudītu? 214 00:19:14,060 --> 00:19:18,720 [Studentu] Jūs varat izmantot šo funkciju, ir alfa. 215 00:19:18,720 --> 00:19:23,160 Ir tāds, ka iekļautas kāda no tiem, vai arī, piemēram, char.h vai kaut ko? 216 00:19:23,160 --> 00:19:32,710 Pieņemsim nav izmantot ir alfa funkcija, un izmantojiet nepārprotama - tāpēc mums ir s [i], 217 00:19:32,710 --> 00:19:40,460 ka ir astotais raksturs s, atcerieties, ka virkne ir masīvs rakstzīmju, 218 00:19:40,460 --> 00:19:43,180 tāpēc astotais raksturs s. 219 00:19:43,180 --> 00:19:49,280 Tagad, ja tas ir burts, mēs zinām, tas ir jābūt īpašā diapazonā. 220 00:19:49,280 --> 00:19:54,370 Un kas ir tas diapazons? 221 00:19:54,370 --> 00:20:07,860 Yeah. Tātad, ja ir [i] ir ≥ 65, un s [i] ir ≤ 90, ko man darīt tā vietā? 222 00:20:07,860 --> 00:20:18,470 Yeah. Tātad jums vajadzētu absolūti nekad pat jāzina ASCII vērtības neko jebkad. 223 00:20:18,470 --> 00:20:25,640 Nekad domā par numuriem 65, 90, 97 un 102, vai kāds tas ir. 224 00:20:25,640 --> 00:20:32,470 Jums nav nepieciešams - 112 - Jums nav nepieciešams zināt, kas vispār?. Tas ir nepareizi pārāk. 225 00:20:32,470 --> 00:20:41,940 Izmantot tikai viena citātu rakstzīmes, single quote konstantes. Tāpēc "" un mazāk nekā 90 ir "Z." 226 00:20:41,940 --> 00:20:47,930 Un tas ir ievērojami labāks - es nezinu off augšpusē manu galvu, ka Z ir 90. 227 00:20:47,930 --> 00:20:52,690 Es zinu off augšpusē manu galvu, ka "Z" ir kapitāls Z. 228 00:20:52,690 --> 00:21:02,100 Tik ilgi, kamēr tas ir robežās no kapitāla uz kapitāla Z, vai mēs varam pārbaudīt mazos, 229 00:21:02,100 --> 00:21:17,010 Vai ja tas ir robežās ≥ "" un ≤ z. 230 00:21:17,010 --> 00:21:19,010 Tātad tas ir mūsu nosacījums. 231 00:21:19,010 --> 00:21:22,520 Lai kur likt šīs lietas stils atšķiras. 232 00:21:22,520 --> 00:21:29,520 Es darīšu to, kā šis. 233 00:21:29,520 --> 00:21:31,520 Tagad, ko mēs vēlamies darīt? 234 00:21:31,520 --> 00:21:39,530 Mēs zinām, šī vēstule ir raksturs, alfabēta burtu. 235 00:21:39,530 --> 00:21:46,270 Tāpēc mums ir nepieciešams, lai pārmaiņus vai tas tagad būtu lielais burts vai mazo burtu. 236 00:21:46,270 --> 00:21:48,820 Kā mēs izsekot, no kuriem viens mēs gribam, lai būtu? 237 00:21:48,820 --> 00:21:55,520 [Studentu balsis, nesaprotami] 238 00:21:55,520 --> 00:21:59,150 Tātad, jā, taču ļaujiet man pārbaudīt. 239 00:21:59,150 --> 00:22:04,910 Modulis 0-2 tika minēts, bija ierosinājums izmet ārā, un es piekrītu, ka. 240 00:22:04,910 --> 00:22:11,780 Izņemot paziņojumu, ka, piemēram, - tas gadījums? Yeah. 241 00:22:11,780 --> 00:22:18,270 Tas ir katru otro viens, bet mēs nevaram no I 2 moduli, vai es mod 2, jo 242 00:22:18,270 --> 00:22:22,950 ievērojat, ka E ir kapitāls un "" ir mazie? Bet tur ir telpa atdalot tos? 243 00:22:22,950 --> 00:22:27,150 Tāpēc viņi būs tāda pati mod 2, bet viņi dažādas lietas. 244 00:22:27,150 --> 00:22:29,150 [Studentu jautājums, nesaprotami] 245 00:22:29,150 --> 00:22:34,690 Yeah. Tāpēc mēs esam tikai gatavojas, lai saglabātu skaitu. 246 00:22:34,690 --> 00:22:38,730 Mēs varētu arī darīt, ka šeit, ja mēs vēlējāmies, ka varētu saņemt nedaudz smagnēja 247 00:22:38,730 --> 00:22:41,300 jo, lai cilpa deklarācijām, es nolikšu to šeit. 248 00:22:41,300 --> 00:22:48,840 Tātad int skaits = sākas ar 0. 249 00:22:48,840 --> 00:22:54,070 Un tāpēc tagad, es esmu gatavojas rēķināties, cik daudz alfabēta rakstzīmes mēs esam bija. 250 00:22:54,070 --> 00:22:59,550 Tāpēc mēs neizbēgami gatavojas rēķināties + +, jo mēs atradām citu burtam. 251 00:22:59,550 --> 00:23:09,130 Bet, tāpēc tagad jūs sakāt ja impulsa mod 2. 252 00:23:09,130 --> 00:23:12,590 Tātad, ko tad, ja skaits Mod 2? Oh. Es darīšu == 0 tagad. 253 00:23:12,590 --> 00:23:21,740 Mēs arī iet pa to. Tātad, ja skaits Mod 2 == 0, tad ko? 254 00:23:21,740 --> 00:23:27,830 [Studenti atbilde, nesaprotami] 255 00:23:27,830 --> 00:23:32,750 Tāpēc mēs gribam, lai galu galā lielos. 256 00:23:32,750 --> 00:23:37,520 Ir 2 lietas, lielie un mazie ir 2 lietas. 257 00:23:37,520 --> 00:23:40,990 Tātad, ja mēs esam kā mazie mums ir nepieciešams veikt to lielo burtu. 258 00:23:40,990 --> 00:23:43,710 Ja tas ir lielais mums nav nepieciešams neko darīt. 259 00:23:43,710 --> 00:23:50,760 Bet, vai ir veids, - shouldn't ir Pagriezts - 260 00:23:50,760 --> 00:23:54,800 ka mums nav pat nepieciešams, lai pārbaudītu, vai tas ir lielie vai mazie? 261 00:23:54,800 --> 00:24:02,240 Ko mēs varam darīt, lai vienmēr pārliecinieties, ka mēs vienmēr galu galā pie lielajiem? 262 00:24:02,240 --> 00:24:07,830 Tātad paziņojums, ko mēs izdarījām mazo "A"; ko, ja mēs šo pašu precīzu lieta par lielajiem burtiem? 263 00:24:07,830 --> 00:24:11,900 Vai lielos maiņu, vai arī vērtības pārmaiņas? 264 00:24:11,900 --> 00:24:23,100 Yeah. Tāpēc jebkurš burts Bitu līmeņa anded ar 32 ~ būs tajā pašā lielos burtus 265 00:24:23,100 --> 00:24:29,220 jo par jebkuru lielo raksturu 32. bits nav noteikts. 266 00:24:29,220 --> 00:24:40,920 Tātad, ja mēs gribam, lai raksturu s [i], mēs vēlamies, lai tā kļūtu mazos vai lielos. 267 00:24:40,920 --> 00:24:46,890 Tātad, ja tas bija mazie, tagad ir lielais, ja tas bija lielie, tas joprojām lielos, un tas arī viss. 268 00:24:46,890 --> 00:24:54,290 Es teica tajā supersection: Jūs varat izmantot 32 Ja jūs vēlaties, bet man ir tendence dot priekšroku darot "a" -, 269 00:24:54,290 --> 00:25:01,150 nevis tikai plain 32, jo tas var būt jebkurš cits mazliet. 270 00:25:01,150 --> 00:25:03,610 Pēc 32 bitu, tas var būt jebkurš no šiem, vai mums nebūtu pietiekami 271 00:25:03,610 --> 00:25:05,840 numurus, lai visas rakstzīmes. 272 00:25:05,840 --> 00:25:09,110 Tātad, ja jūs saņemsiet 32 ​​bitu, tas varētu būt 64 bitu, tas varētu būt 128 bitu. 273 00:25:09,110 --> 00:25:13,990 Jebkurš no šiem gabaliņiem varētu būt mazliet ka izšķir lielos un mazos burtus. 274 00:25:13,990 --> 00:25:18,350 Man nav nepieciešams zināt, ka tas ir 32 bitu. 275 00:25:18,350 --> 00:25:27,130 Es varu izmantot šo "a" - lai iegūtu mazliet, kas atšķiras starp diviem 276 00:25:27,130 --> 00:25:33,000 bez nepieciešamības paļauties uz burvju numuru, kas ir 32. 277 00:25:33,000 --> 00:25:38,770 Un tāpēc tagad, cits skaits bija dīvaini, un lai ko es gribu darīt? 278 00:25:38,770 --> 00:25:43,920 [Studentu atbildes, nesaprotami] 279 00:25:43,920 --> 00:25:45,920 [Studentu] Kas tas ir? 280 00:25:45,920 --> 00:25:49,850 Es darīšu to 1 sekundi. 281 00:25:49,850 --> 00:25:55,690 Tāpēc tagad, ja es gribu - es gribu, lai pārliecinātos, raksturs ir tagad mazie, 282 00:25:55,690 --> 00:26:04,140 un tāpēc es varu vai ar 32, un 32 nozīmē "" - A. 283 00:26:04,140 --> 00:26:06,510 Bet paziņojums, ar to pašu argumentāciju kā iepriekšējā, ka, ja 284 00:26:06,510 --> 00:26:11,670 šī vēstule bija jau mazie, tad ORing ar 32 vienkārši tur tā mazie. 285 00:26:11,670 --> 00:26:16,220 Tā nav mainījusies sākotnējo raksturu. 286 00:26:16,220 --> 00:26:19,910 Bet tagad man nav, lai izvairītos sakot, "Ja tas ir mazie, vienkārši aizmirst par to, 287 00:26:19,910 --> 00:26:23,650 ja tas ir lielos, tad to mainīt. " 288 00:26:23,650 --> 00:26:26,900 Tas ir daudz ērtāk to darīt. 289 00:26:26,900 --> 00:26:33,190 [Studentu] Vai, ka atņemot lielos no mazo darbu, ja tas nav 32 stratēģija? 290 00:26:33,190 --> 00:26:35,330 Ja tas bija, piemēram, 34 vai kaut ko? 291 00:26:35,330 --> 00:26:41,840 Tātad, jums ir jāzina, ka starp 2 atšķirība ir -? >> 1 bit. 292 00:26:41,840 --> 00:26:49,840 Tas varētu būt vairāk nekā 1 bitu, kamēr visi zem šīs pozīcijas biti ir vienādi. 293 00:26:49,840 --> 00:26:58,500 Tāpēc mums ir nepieciešams vismaz 26 rakstzīmes - vai, ir 26 rakstzīmes. 294 00:26:58,500 --> 00:27:04,590 Tāpēc mums ir nepieciešams vismaz 26 numuri, lai veido atšķirību - 295 00:27:04,590 --> 00:27:07,650 Atšķirība starp un "" ir jābūt vismaz 26, 296 00:27:07,650 --> 00:27:10,760 vai arī mēs nebūtu pārstāvēti visi kapitāla numurus. 297 00:27:10,760 --> 00:27:18,630 Tas nozīmē, ka, ja mēs sākam ar 1, tas notiek, lai izmantotu visus šos bitiem, 298 00:27:18,630 --> 00:27:23,900 visi šie pirmos 5 bitiem, lai pārstāvētu viss caur Z. 299 00:27:23,900 --> 00:27:32,170 Tieši tāpēc nākamais mazliet, vai tas mazliet, nākamais bits ir viens, ka ir izvēlēta, lai atšķirtu un "." 300 00:27:32,170 --> 00:27:40,930 Tas ir arī iemesls, kāpēc, ASCII tabulā, ir 5 simboli atdala lielos burtus no mazajiem burtiem. 301 00:27:40,930 --> 00:27:49,050 Jo tie ir simboli, papildus 5 kas parādīs ir 32 ir atšķirība starp tiem. 302 00:27:49,050 --> 00:27:51,840 [Studentu] Lai mēs varētu darīt, jo ASCII ir izstrādāta tādā veidā. 303 00:27:51,840 --> 00:27:57,280 Jā. Bet ASCII - atšķirība varētu būt arī abi šie biti. 304 00:27:57,280 --> 00:28:12,040 Piemēram, ja ir 10000001, un "" bija 11100001 - es neaizmirsīšu, neatkarīgi. 305 00:28:12,040 --> 00:28:18,100 Bet ja tā būtu tas, tad mēs joprojām varētu izmantot "A" - A. 306 00:28:18,100 --> 00:28:22,650 Tas ir tikai tagad atšķirība starp un "" joprojām šie 2 biti. 307 00:28:22,650 --> 00:28:32,240 Es domāju, ka tas ir rakstīts 48. Vai tas 32 + 64? Es domāju, ka tas ir? 308 00:28:32,240 --> 00:28:40,160 Tas vēl būtu 2 biti; katru raksturs, piemēram, Z un Z, K un K, 309 00:28:40,160 --> 00:28:45,160 tie joprojām ir tādas pašas precīzu biti, kas, izņemot šīm 2 bitiem. 310 00:28:45,160 --> 00:28:48,870 Tik ilgi, kamēr tas ir vienmēr taisnība, neatkarīgi no tā, ja mēs esam izmantojot ASCII vai kādu citu sistēmu, 311 00:28:48,870 --> 00:28:53,050 kamēr tur ir tikai kopa bitu skaits, kuri atšķiras katram raksturs, 312 00:28:53,050 --> 00:28:55,050 tad kas darbojas naudas sodu. 313 00:28:55,050 --> 00:29:06,110 Tas ir tikai, ka 32 tika izveidota, jo tas ir pirmais, mēs, iespējams, varētu izmantot. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Man ir tendence dot priekšroku, ja jūs neesat redzējuši, ja bloks ir tikai viena rinda, 315 00:29:14,520 --> 00:29:24,280 Jūs varat atbrīvoties no cirtaini lencēm, tāpēc man ir tendence dot priekšroku darot. 316 00:29:24,280 --> 00:29:34,010 Arī jūs zināt, kā mēs varam darīt lietas, piemēram, s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Jūs varat arī izdarīt s [i] Bitu līmeņa un = 32. 318 00:29:41,090 --> 00:29:46,400 Un Bitu līmeņa VAI = 32. 319 00:29:46,400 --> 00:29:51,490 Arī saskaitīt mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Tāpēc atcerieties, ka - es ne rakstīt - no jebkuras nulles vērtība ir patiesa, un 0 ir nepatiess. 321 00:30:00,900 --> 00:30:07,880 Tāpēc "ja skaits Mod 2 == 0" ir tas pats, kā saka, "ja neskaita mod 2." 322 00:30:07,880 --> 00:30:11,580 Es droši vien būtu tikai pretēja līnijas un teica, "ja skaits mod 2, 323 00:30:11,580 --> 00:30:15,350 do vai 1, cits do UN 1 ", tāpēc, ka man nav nepieciešams" nav. " 324 00:30:15,350 --> 00:30:18,650 Bet tas darbojas tikpat labi. 325 00:30:18,650 --> 00:30:25,660 Un ko vēl es varu darīt šeit? 326 00:30:25,660 --> 00:30:29,060 Jūs varētu apvienot tos ar trīskāršu, ja jūs vēlaties, bet tad ka gribētu vienkārši darīt lietas Messier 327 00:30:29,060 --> 00:30:33,770 un, iespējams, grūtāk lasīt, tāpēc mēs ne darīt. 328 00:30:33,770 --> 00:30:37,330 Kāds ir kādi citi ieteikumi? 329 00:30:37,330 --> 00:30:41,580 Vai tas viss problēma lūdza? Ak jā. 330 00:30:41,580 --> 00:30:51,070 Tāpēc atbrīvoties no šo tukšo līniju, tagad mēs drukāt f,% s ir viens stīgas, 331 00:30:51,070 --> 00:30:56,620 Mēs drukāt F, S. 332 00:30:56,620 --> 00:30:59,330 Tagad palaist to. Es daru kaut ko nepareizi? 333 00:30:59,330 --> 00:31:03,200 Tas ir \ ", es gribu n. 334 00:31:03,200 --> 00:31:07,840 Labi. Tagad mēs to. Tas būs iespējams kliegt uz mani. 335 00:31:07,840 --> 00:31:11,250 Strlen ir string.h. 336 00:31:11,250 --> 00:31:14,290 Tātad šī ir jauka lieta par šķindēt ir tā stāsta jums to, ko tas ir, 337 00:31:14,290 --> 00:31:19,140 instead GCC kas vienkārši saka: "Hei, tu aizmirsi kaut ko, es nezinu, kas tas bija." 338 00:31:19,140 --> 00:31:29,220 Bet tas man pateikt, "Tu, ietver string.h." 339 00:31:29,220 --> 00:31:32,130 Tāpēc es nemudināja par kaut ko, tāpēc tas nav saprotams neko. 340 00:31:32,130 --> 00:31:42,540 Bet mēs darīsim viņu piemēram, "Thanks 4 Pievienot". 341 00:31:42,540 --> 00:31:47,880 Tas izskatās labi. Urā. 342 00:31:47,880 --> 00:31:52,370 Lai atgriežas jūsu galvenais, es gandrīz nekad to darīt. 343 00:31:52,370 --> 00:31:57,110 Tas ir obligāts. Un galvenais ir vienīgā funkcija, par kuru tā ir obligāta. 344 00:31:57,110 --> 00:32:07,140 Ja jums nav atgriezties kaut ko no galvenā, tas ir pieņemts, ka jums nozīmē atgriezties 0. 345 00:32:07,140 --> 00:32:13,070 Jautājumi? 346 00:32:13,070 --> 00:32:20,980 Labi. Tāpēc tagad otra problēma. 347 00:32:20,980 --> 00:32:24,810 "Atsaukt no nedēļa 2 otrā lekcija ka swapping 2 Mainīgo lielumu vērtības, izejot 348 00:32:24,810 --> 00:32:30,780 šīm 2 mainīgie uz funkciju (pat ja tā būtu swap) nav īsti strādāt, vismaz ne bez "šautru." 349 00:32:30,780 --> 00:32:37,020 Un ignorēt norādes kamēr mēs viņiem. 350 00:32:37,020 --> 00:32:40,070 Mēs vēlamies, lai mijmaiņas 2 mainīgos, mēs neesam izmantojot funkciju, lai to izdarītu. 351 00:32:40,070 --> 00:32:43,410 Mēs joprojām esam gatavojas darīt to galvenais kā tas teikts. 352 00:32:43,410 --> 00:32:48,360 Bet izmantot tās 2 mainīgos, mēs negribam, lai izmantotu pagaidu mainīgo. 353 00:32:48,360 --> 00:32:50,770 Ir 2 veidi, kā to izdarīt. 354 00:32:50,770 --> 00:32:56,310 Jūs varat darīt to, izmantojot savu tradicionālo bināro operatoriem. 355 00:32:56,310 --> 00:33:00,180 Lai vai kāds zina ātru un netīrās veids, kā darīt, ka? 356 00:33:00,180 --> 00:33:07,650 Tas tiešām var ņemt minūti domāšanu. Ja man ir - 357 00:33:07,650 --> 00:33:12,130 Es noteikti šo problēmu pat kā viņi lūdz. Tātad, ja man ir 2 mainīgie,, kas ir tikai skaitlis 358 00:33:12,130 --> 00:33:17,800 ka viņi dod man, un summa ar B, kas ir cita skaitlis, ka es esmu dota. 359 00:33:17,800 --> 00:33:22,700 Tātad, ja man ir šos 2 mainīgie, tagad es gribu, lai mijmaiņas tiem. 360 00:33:22,700 --> 00:33:31,550 Tradicionālā, izmantojot savu regulāri binārā uzņēmējus, es domāju, piemēram, +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ne Bitu līmeņa operatoriem, kas darbojas uz bināro. 362 00:33:36,630 --> 00:33:39,600 Tātad, izmantojot -, +, ÷, un visiem tiem. 363 00:33:39,600 --> 00:33:52,980 Mēs varētu mijmaiņas darot kaut ko līdzīgu = + b, b = - b, = - b. 364 00:33:52,980 --> 00:34:04,260 Tātad, veselība pārbaudītu, un tad mēs redzēsim, kāpēc tas darbojas. 365 00:34:04,260 --> 00:34:13,320 Pieņemsim, ka = 7, b = 3, tad + b būs 10. 366 00:34:13,320 --> 00:34:18,820 Tātad mēs tagad nosakot = 10, un tad mēs darām, b = - b. 367 00:34:18,820 --> 00:34:30,250 Tāpēc mēs darām b = - b, kas būs 7, un b = - b atkal, 368 00:34:30,250 --> 00:34:38,650 vai = - b. Kura būs 10-7 kas ir 3. 369 00:34:38,650 --> 00:34:44,850 Tāpēc tagad, pareizi, "" bija 7, b bija 3, un tagad b ir 7 un "" ir 3. 370 00:34:44,850 --> 00:34:48,679 Tātad šāda veida jēga, "" ir kombinācija no 2 numuriem. 371 00:34:48,679 --> 00:34:53,000 Šajā brīdī, "" ir kombinācija, un tad mēs atņemot veic sākotnējo b, 372 00:34:53,000 --> 00:34:56,860 un tad mēs atņemot to, kas bija oriģināls "." 373 00:34:56,860 --> 00:35:01,150 Bet tas nav darbs visiem numuriem. 374 00:35:01,150 --> 00:35:08,880 Lai redzētu šo, pieņemsim apsvērt sistēmu, tāpēc mēs parasti domājam par integers kā 32 bitiem. 375 00:35:08,880 --> 00:35:13,050 Pieņemsim strādāt par kaut ko, kas ir tikai, piemēram, 4 bitiem. 376 00:35:13,050 --> 00:35:15,450 Cerams, ka man jānāk klajā ar labu piemēru tiesības tagad. 377 00:35:15,450 --> 00:35:18,680 Tātad, es zinu, tas būs viegli. 378 00:35:18,680 --> 00:35:26,720 Teiksim mūsu 2 numuri ir 1111, 1111 un, tāpēc mēs esam binārā tiesības tagad. 379 00:35:26,720 --> 00:35:34,630 Faktiskās decimāldaļām, ja jūs vēlaties, lai padomātu par to, ka veids, = 15 un b = 15. 380 00:35:34,630 --> 00:35:37,630 Un tā mēs sagaidām, kad mēs mijmaiņas tiem - tie nav pat jābūt paši skaitļi, 381 00:35:37,630 --> 00:35:41,140 bet es tomēr to šādā veidā. 382 00:35:41,140 --> 00:35:47,100 Pieņemsim viņus ne paši numuri. Darīsim 1111 un 0001. 383 00:35:47,100 --> 00:35:51,860 Tāpēc = 15 un b = 1. 384 00:35:51,860 --> 00:35:57,670 Kad mēs mijmaiņas tiem, mēs sagaidām "" būt 1 un B ir 15. 385 00:35:57,670 --> 00:36:01,780 Tātad mūsu pirmais solis ir = + b. 386 00:36:01,780 --> 00:36:08,770 Mūsu numuri ir tikai 4 biti plašs, tāpēc "", kas ir 1111, + B, kas ir 0001, 387 00:36:08,770 --> 00:36:16,780 gatavojas galu galā ir 10000, bet mums ir tikai 4 biti. 388 00:36:16,780 --> 00:36:22,540 Tāpēc tagad = 0. 389 00:36:22,540 --> 00:36:34,080 Un tagad mēs vēlamies noteikt b = - b - patiesībā, tas joprojām darbojas perfekti. 390 00:36:34,080 --> 00:36:39,630 = - b - pieņemsim redzēt, ja tas darbojas perfekti. 391 00:36:39,630 --> 00:36:53,720 Tātad tad b = 0 - 1, kas joprojām būtu 15, un tad = - b, kas būtu 1. 392 00:36:53,720 --> 00:36:56,210 Varbūt tas strādā. 393 00:36:56,210 --> 00:36:59,020 Es jūtos kā tur iemesls, tas nedarbojas, izmantojot regulāri. 394 00:36:59,020 --> 00:37:06,400 Labi, tā strādā uz pieņēmumu, ka tas nedarbojas ar regulāriem bināro operāciju, 395 00:37:06,400 --> 00:37:15,040 un es meklēt - es Google, lai redzētu, vai tā ir taisnība. 396 00:37:15,040 --> 00:37:23,490 Tāpēc mēs vēlamies to darīt, izmantojot Bitu līmeņa operatoriem, un pavediens šeit ir XOR. 397 00:37:23,490 --> 00:37:28,780 Tātad, ieviešot XOR (^), ja neesat to redzējuši vēl. 398 00:37:28,780 --> 00:37:34,610 Tas ir, atkal, Bitu līmeņa uzņēmējs tāpēc tā rīkojas pamazām, un it's - 399 00:37:34,610 --> 00:37:39,910 Ja jums ir bitiem 0 un 1, tad tas būs 1. 400 00:37:39,910 --> 00:37:45,230 Ja jums ir biti 1 un 0, tas būs 1, jums ir bitiem 0 un 0 tas būs 0, 401 00:37:45,230 --> 00:37:47,640 un, ja jums ir biti 1 un 1 tas būs 0. 402 00:37:47,640 --> 00:37:56,180 Tātad tas ir tāpat VAI. Ja kāds no biti ir taisnība, tas ir 1, bet atšķirībā VAI, tas nevar būt abi biti, kas ir taisnība. 403 00:37:56,180 --> 00:37:59,320 VAI būtu tas būs 1, XOR būtu tas ir 0. 404 00:37:59,320 --> 00:38:02,250 Tāpēc mēs esam gatavojas vēlaties izmantot XOR šeit. 405 00:38:02,250 --> 00:38:09,960 Padomā par to minūti, es esmu dodas uz Google. 406 00:38:09,960 --> 00:38:16,230 Nu, jūs nevarat lasīt, ka, es esmu šobrīd par XOR mijmaiņas algoritmu lapā. 407 00:38:16,230 --> 00:38:21,340 Cerams, ka tas izskaidro, kāpēc es cant - 408 00:38:21,340 --> 00:38:34,190 Tas ir tieši algoritms ka mēs tikko izdarījām. 409 00:38:34,190 --> 00:38:37,330 Es joprojām nesaprotu, kāpēc - man ir tikko palielinājies sliktu piemēru, 410 00:38:37,330 --> 00:38:44,940 bet tas gadījums, kad "" notika kļūt 0, pēc tam kļūst par 5 bitu, tāpēc tagad "" ir 0, 411 00:38:44,940 --> 00:38:48,730 tas ir tas, ko sauc par "skaitlim pārpildes." 412 00:38:48,730 --> 00:38:54,370 Saskaņā ar Wikipedia, "Atšķirībā no XOR mijmaiņas, šī variācija paredz, ka tā izmanto dažas metodes 413 00:38:54,370 --> 00:38:59,780 garantēt, ka x + y neizraisa skaitlim pārpildes. " 414 00:38:59,780 --> 00:39:08,350 Tātad tas tiešām ir problēmas, tas bija vesels pārplūdes, bet es tomēr kaut ko nepareizi. 415 00:39:08,350 --> 00:39:10,520 Es neesmu pārliecināts. Es mēģināšu nākt klajā ar vienu citu. 416 00:39:10,520 --> 00:39:13,640 [Studentu] Nu, nav skaitlis pārpildīts, kad jūs mēģināt likt numuru tur 417 00:39:13,640 --> 00:39:16,640 lielāks nekā summa bitu esat piešķirts? 418 00:39:16,640 --> 00:39:23,730 Yeah. Mums ir 4 biti. That - mums bija 4 biti, mēs pēc tam mēģināt pievienot 1 līdz tam, lai mēs galu galā ar 5 bitiem. 419 00:39:23,730 --> 00:39:26,690 Bet piektais mazliet vienkārši kļūst nogriezts, jā. 420 00:39:26,690 --> 00:39:28,970 Tas tiešām - 421 00:39:28,970 --> 00:39:33,010 [Studentu] Vai tas mest jums kļūda, vai tas, ka - tas, ka mest kļūdu? 422 00:39:33,010 --> 00:39:40,720 Nē. Tāpēc nav kļūda. Kad jūs nokļūt uz pulcēšanās līmenī, īpašu mazliet 423 00:39:40,720 --> 00:39:47,020 kaut kur ir noteikts, ka teica, ka bija pārplūdes, bet C jūs veida vienkārši nav galā ar to. 424 00:39:47,020 --> 00:39:55,160 Jūs tiešām nevar tikt galā ar to, ja vien jūs izmantot īpašus montāžas instrukcijas C. 425 00:39:55,160 --> 00:39:58,110 Padomāsim par XOR swap. 426 00:39:58,110 --> 00:40:02,220 Un es domāju, ka Vikipēdijas raksts varētu būt arī saprotams, ka - 427 00:40:02,220 --> 00:40:07,310 Tātad tas arī audzināta modular aritmētika, tāpēc es domāju, man bija, teorētiski, darot modulāru aritmētika 428 00:40:07,310 --> 00:40:11,160 kad es teicu, ka 0 - 1 ir 15 atkal. 429 00:40:11,160 --> 00:40:15,410 Lai varētu faktiski - par regulāru procesoru, kas dara 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Jo mēs galu galā ar 0, mēs atņemt 1, tā tad tas tikai wraps atpakaļ ap 1111. 431 00:40:20,430 --> 00:40:28,930 Tāpēc šis algoritms varētu faktiski strādā, tad + B, - b, b -, kas varētu būt labi. 432 00:40:28,930 --> 00:40:34,030 Bet tur ir daži pārstrādātāji, kas nav darīt, ka, un tāpēc nebūtu naudas sodu šajās konkrētajās ones. 433 00:40:34,030 --> 00:40:39,880 XOR mijmaiņas strādās uz jebkura procesoru. Labi. 434 00:40:39,880 --> 00:40:42,280 Ideja ir tāda, ka tas ir vajadzēja būt vienādi, lai gan. 435 00:40:42,280 --> 00:40:50,120 Kur mēs izmantojam XOR lai kaut saņemt informāciju par abus 1 no mainīgajiem, 436 00:40:50,120 --> 00:40:54,120 un izvelciet informāciju par atsevišķu faktoru vēlreiz. 437 00:40:54,120 --> 00:41:04,330 Tātad vai kāds ir idejas / atbilde? 438 00:41:04,330 --> 00:41:14,540 [Studentu atbilde, nesaprotami] 439 00:41:14,540 --> 00:41:22,220 Tāpēc tas ir darbs, un arī, XOR ir commutative. 440 00:41:22,220 --> 00:41:27,620 Neatkarīgi no tā, lai šie 2 skaitļi gadās būt šeit, 441 00:41:27,620 --> 00:41:30,100 šis rezultāts būs tāds pats. 442 00:41:30,100 --> 00:41:35,800 Tātad ^ b ir b ^. 443 00:41:35,800 --> 00:41:51,860 Jūs varētu arī redzēt šo uzrakstu ^ = b, b ^ =, ^ = b vēlreiz. 444 00:41:51,860 --> 00:42:00,200 Tātad tas ir labi, un redzēt, kāpēc tas darbojas, domā par bitiem. 445 00:42:00,200 --> 00:42:10,400 Izmantojot maziņiem numuru, teiksim 11.001, 01.100 un. 446 00:42:10,400 --> 00:42:12,790 Tātad tas ir "", tas ir b. 447 00:42:12,790 --> 00:42:15,540 Tātad ^ = b. 448 00:42:15,540 --> 00:42:22,380 Mēs ejam, lai būtu noteikt "A" = ar XOR no šīm 2 lietām. 449 00:42:22,380 --> 00:42:32,920 Lai 1 ^ 0 1, 1 ^ 1 ir 0; 0 ^ 1 ir 1, un 0 ^ 0 ir 0, 1 ^ 0 1. 450 00:42:32,920 --> 00:42:37,380 Tātad "," ja paskatās decimālskaitlis, tas būs - 451 00:42:37,380 --> 00:42:41,160 Jūs neesat gatavojas redzēt daudz attiecībām starp sākotnējo "A" un jaunais "," 452 00:42:41,160 --> 00:42:45,600 bet meklē biti, "" tagad kā acs informācijas 453 00:42:45,600 --> 00:42:49,970 Gan sākotnējā "A" un sākotnējā b. 454 00:42:49,970 --> 00:42:57,930 Tātad, ja mēs ņemtu b ^, mēs redzam, ka mēs galu galā pie sākotnējā "." 455 00:42:57,930 --> 00:43:08,910 Un, ja mēs ņemtu sākotnējais "" ^ Jaunais "," mēs redzam, mēs galu galā pie sākotnējā b. 456 00:43:08,910 --> 00:43:18,380 Tātad (^ b) ^ b = oriģināls "." 457 00:43:18,380 --> 00:43:27,910 Un (^ b) ^ = oriģināls b. 458 00:43:27,910 --> 00:43:37,010 Ir - cits redzēt tas ir kaut XOR pats ceļš vienmēr ir 0. 459 00:43:37,010 --> 00:43:45,020 Tātad 1101 ^ 1101, visi biti ir būs tāds pats. 460 00:43:45,020 --> 00:43:47,920 Tāpēc tur nekad būs gadījums, kad 1 ir 0 un otrs ir 1. 461 00:43:47,920 --> 00:43:51,080 Tātad tas ir 0000. 462 00:43:51,080 --> 00:43:57,240 Pats ar to. (^ B) ^ b ir līdzīgs ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) būs 0; ^ 0 ir tikai būs "," jo visi biti ir 0. 464 00:44:03,680 --> 00:44:08,050 Tātad vienīgie, kas ir būs, ja "" sākotnēji bija 1 - bija ones. 465 00:44:08,050 --> 00:44:12,070 Un pati ideja šeit, es esmu diezgan pārliecināts, ka tas ir arī commutative. 466 00:44:12,070 --> 00:44:17,590 Yeah. Es to saku, pirms tas bija commutative. 467 00:44:17,590 --> 00:44:24,680 The ^ "," un tas ir asociatīva, tāpēc tagad (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 Un mēs varam darīt b ^ (^). 469 00:44:28,970 --> 00:44:31,540 Un tā atkal, mēs iegūtu sākotnējo b. 470 00:44:31,540 --> 00:44:37,120 Tāpēc "" tagad kombinācija "A" un B kopā. 471 00:44:37,120 --> 00:44:49,660 Izmantojot mūsu jauno Combo "" mēs sakām, b = Combo "" ^ oriģināls b, mēs iegūtu sākotnējo "." 472 00:44:49,660 --> 00:45:05,170 Un tagad = Combo "" ^ jaunais b, kas bija oriģināls - vai kas ir tagad, ko bija "" vai b. 473 00:45:05,170 --> 00:45:13,620 Tas ir tas gadījums noteikti šeit. Tas ir = b, vecā b. 474 00:45:13,620 --> 00:45:16,550 Tāpēc tagad viss ir atpakaļ mijmaina kārtībā. 475 00:45:16,550 --> 00:45:22,960 Ja mēs tiešām paskatījās biti, b = ^ b, gatavojas XOR šos 2, 476 00:45:22,960 --> 00:45:33,920 un atbilde būs, un tad = ^ b tiek XORing šos 2 un atbilde ir šī. 477 00:45:33,920 --> 00:45:41,090 Jautājumi? Labi. Tātad pēdējais ir nedaudz ievērojami grūtāk. 478 00:45:41,090 --> 00:45:43,180 [Studentu] Es domāju, ka viņš ir jautājums par to. >> Ak, piedodiet. 479 00:45:43,180 --> 00:45:49,380 [Studentu] Kas patiesībā ātrāk? Ja jūs izmantot šo XOR, vai tas ir, ja jūs atzīt jaunu mainīgo? 480 00:45:49,380 --> 00:45:55,190 Tātad, kas ir faktiski ātrāk, deklarējot jaunu mainīgo vai izmantojot XOR swap? 481 00:45:55,190 --> 00:45:59,600 Atbilde ir, visticamāk, īslaicīgs mainīgs. 482 00:45:59,600 --> 00:46:05,780 Un tas ir tāpēc, kad tā ir apkopoti uz leju - tāpēc pie montāžas līmenī, 483 00:46:05,780 --> 00:46:12,320 tur nav tādas lietas kā vietējās mainīgie vai jebkuru pagaidu mainīgos vai kādu no šo stuff. 484 00:46:12,320 --> 00:46:16,060 Viņi vienkārši patīk - tur ir atmiņas, un ir reģistri. 485 00:46:16,060 --> 00:46:20,920 Reģistri ir, ja lietas tiek aktīvi notiek. 486 00:46:20,920 --> 00:46:24,750 Jums nav pievienot 2 lietas atmiņā, jums pievienot 2 lietas reģistros. 487 00:46:24,750 --> 00:46:28,160 Un jūs lai lietas no atmiņas stāšanās reģistru tad pievienot tos, 488 00:46:28,160 --> 00:46:33,180 un tad jūs varētu nodot tos atpakaļ atmiņā, bet visas darbības notiek reģistros. 489 00:46:33,180 --> 00:46:38,750 Tātad, ja jūs izmantojat pagaidu mainīgo pieeju, parasti kas notiek, ir 490 00:46:38,750 --> 00:46:42,810 šie 2 numuri jau reģistros. 491 00:46:42,810 --> 00:46:46,570 Un tad no tā brīža, kad esat nomainīju tos, 492 00:46:46,570 --> 00:46:51,540 tas būs tikai sākums izmantojot citu reģistru. 493 00:46:51,540 --> 00:46:56,510 Jebkur jums bija, izmantojot B, tas būs tikai izmantot reģistru, kas bija jau glabāšanu "." 494 00:46:56,510 --> 00:47:02,180 Tāpēc nav nepieciešams neko darīt, lai faktiski darīt swap. Yeah? 495 00:47:02,180 --> 00:47:05,690 [Studentu] Bet tas arī aizņem vairāk atmiņas, vai ne? 496 00:47:05,690 --> 00:47:10,280 Tas tikai vairāk atmiņas, ja tas nepieciešams, lai saglabātu šo pagaidu mainīgo. 497 00:47:10,280 --> 00:47:14,830 Tāpat, ja jūs vēlāk izmantot šo pagaidu mainīgo atkal kaut kur, 498 00:47:14,830 --> 00:47:18,920 tad - vai jūs piešķirat kaut kas šajā pagaidu mainīgo. 499 00:47:18,920 --> 00:47:24,630 Tātad, ja kādā brīdī laiks "," B temp ir atšķirīgas vērtības vai kaut ko, 500 00:47:24,630 --> 00:47:30,680 tad tas notiek, lai ir atšķirīgas vietas atmiņā, bet tā ir taisnība, ka 501 00:47:30,680 --> 00:47:34,800 Ir daudzas vietējās mainīgie, kas eksistē tikai reģistros. 502 00:47:34,800 --> 00:47:44,370 Tādā gadījumā, tas nekad likts atmiņā, un tāpēc jūs nekad izšķērdēt atmiņu. 503 00:47:44,370 --> 00:47:58,620 Labi. Pēdējais jautājums ir mazliet vairāk. 504 00:47:58,620 --> 00:48:04,850 Tātad šeit, šajā CS50 ierīces, ir vārdnīca. 505 00:48:04,850 --> 00:48:12,390 Un iemesls tam ir tāpēc, ka [? B66?] Ir pareizrakstības pārbaudītājs, kur jums tiks rakstiski 506 00:48:12,390 --> 00:48:15,780 izmantojot hash tabulas vai mēģina vai kādu datu struktūra. 507 00:48:15,780 --> 00:48:22,660 Jūs esat būs rakstot pareizrakstības pārbaudītājs, un jūs būs izmantojot šo vārdnīcu, lai to izdarītu. 508 00:48:22,660 --> 00:48:28,280 Bet par šo problēmu, mēs esam tikai gatavojas skatīties, lai redzētu, vai viens vārds ir norādīts vārdnīcā. 509 00:48:28,280 --> 00:48:31,250 Tā vietā, lai uzglabātu visu vārdnīcu kādā datu struktūra 510 00:48:31,250 --> 00:48:35,180 un tad meklē pa visu dokumentu, lai redzētu, ja kaut kas ir nepareizi, 511 00:48:35,180 --> 00:48:38,490 Mēs vienkārši vēlamies, lai atrastu 1 vārdu. Tātad mēs varam vienkārši skenēt visu vārdnīcu 512 00:48:38,490 --> 00:48:44,300 un, ja mēs nekad atrast vārdu visā vārdnīcā, tad tas nav tur. 513 00:48:44,300 --> 00:48:52,150 Ja mēs skenēšanu visā vārdnīcā un redzu vārdu, tad mēs esam labi, mēs atradām. 514 00:48:52,150 --> 00:48:56,580 Tajā teikts, ka mēs vēlamies, lai sāktu meklē C s failu apstrādes funkcija, 515 00:48:56,580 --> 00:48:59,930 jo mēs vēlamies lasīt vārdnīcu, 516 00:48:59,930 --> 00:49:07,680 bet es dos mājienu šeit par to, kuras funkcijas jums vajadzētu domāt par. 517 00:49:07,680 --> 00:49:11,510 Es uzrakstīšu tos Spaces. 518 00:49:11,510 --> 00:49:20,490 Tātad galvenie jūs vēlaties apskatīt ir f atvērti un tad, neizbēgami, f slēgta, 519 00:49:20,490 --> 00:49:26,540 kas iet beigās savu programmu, un f skenēšanas f. 520 00:49:26,540 --> 00:49:31,060 Jūs varētu izmantot arī f lasīt, bet jūs, iespējams, nevēlaties, lai 521 00:49:31,060 --> 00:49:34,200 tāpēc, ka - jums nav galu galā nepieciešams to. 522 00:49:34,200 --> 00:49:41,880 F skenēšanas f ir tas, ko jūs būs izmantojot skenēt pa vārdnīcu. 523 00:49:41,880 --> 00:49:46,370 Un tāpēc jums nav nepieciešams kods up risinājumu, vienkārši izmēģināt un patīk pseido-kodu savu ceļu 524 00:49:46,370 --> 00:50:05,200 risinājums, un tad mēs apspriest to. 525 00:50:05,200 --> 00:50:14,110 Un patiesībā, jo es jau deva jums šo, ja jums iet uz jebkuru terminālī vai jūsu ierīce ir apvalks, 526 00:50:14,110 --> 00:50:18,250 Es - es parasti - ja neesat redzējuši vēl, es nezinu, ja jūs klasē, 527 00:50:18,250 --> 00:50:23,490 bet cilvēks, tāpēc cilvēks lapas, ir diezgan noderīgi meklē diezgan daudz jebkuras funkcijas. 528 00:50:23,490 --> 00:50:27,330 Lai es varētu darīt, piemēram, MAN F, skenēšanas f. 529 00:50:27,330 --> 00:50:32,300 Tas šobrīd ir informācija par skenēšanas f ģimenes funkcijas. 530 00:50:32,300 --> 00:50:37,070 Es varētu arī darīt MAN F, atvērtas, un ka būs man informāciju par to. 531 00:50:37,070 --> 00:50:40,750 Tātad, ja jūs zināt, ko funkcijas jūs izmantojat, vai jūs lasāt kodu 532 00:50:40,750 --> 00:50:43,000 un jūs redzat kādu funkciju un jūs, piemēram, "Ko tas dara?" 533 00:50:43,000 --> 00:50:45,280 Tikai cilvēks, kas funkcijas nosaukums. 534 00:50:45,280 --> 00:50:47,340 Ir dīvaini pāris piemēri, kur jūs varētu teikt 535 00:50:47,340 --> 00:50:51,620 patīk. ka funkcijas nosaukums, vai cilvēks 3, kas funkcijas nosaukums, 2 cilvēks 536 00:50:51,620 --> 00:50:58,230 bet jums ir tikai to darīt, ja cilvēks funkcijas nosaukums nenotiek strādāt pirmo reizi. 537 00:50:58,230 --> 00:51:03,010 [Studentu] Tāpēc es esmu lasījums cilvēks lapu atvērt, bet es esmu joprojām sajaukt par to, kā to izmantot un programma. 538 00:51:03,010 --> 00:51:06,170 Labi. No cilvēks lapas daudz ir mazāk nekā noderīga. 539 00:51:06,170 --> 00:51:08,470 Viņi vairāk noderīgi, ja jūs jau zināt, ko viņi dara 540 00:51:08,470 --> 00:51:12,670 un tad jūs vienkārši nepieciešams atcerēties secību argumentiem vai kaut ko. 541 00:51:12,670 --> 00:51:17,640 Vai tie var sniegt jums vispārīgu pārskatu, taču dažas no tām ir ļoti pārliecinošs. 542 00:51:17,640 --> 00:51:22,220 Tāpat f skenēšanas F, arī. Tas dod jums informāciju par visām šīm funkcijām, 543 00:51:22,220 --> 00:51:28,120 un 1 līnijas noteikti šeit notiek teikt, "F skenēšanas f skan no virknes punkta vai plūsmā." 544 00:51:28,120 --> 00:51:32,360 Bet f atvērt. Tātad, kā būtu mēs izmantojam f atvērti? 545 00:51:32,360 --> 00:51:38,470 Gada programmai, kas ir jādara ar failu doma I / O ir, ka 546 00:51:38,470 --> 00:51:45,070 jums vispirms ir nepieciešams, lai atvērtu failu, kuru vēlaties darīt lietas ar, un neizbēgami, 547 00:51:45,070 --> 00:51:51,220 lasīt lietām no šīs lietas un darīt stuff ar tiem. 548 00:51:51,220 --> 00:51:55,350 F atvērts ir tas, ko mēs izmantojam, lai atvērtu failu. 549 00:51:55,350 --> 00:52:04,190 Lieta mēs saņemam atpakaļ, lai to, ko fails mēs vēlamies atvērt, tas dod mums - 550 00:52:04,190 --> 00:52:11,970 šeit tā saka "/ lietotājs / share / dict / vārdi." 551 00:52:11,970 --> 00:52:16,740 Tas ir fails, ko mēs vēlamies atvērt, un mēs vēlamies, lai to atvērtu - 552 00:52:16,740 --> 00:52:21,440 mums ir skaidri jānorāda, vai mēs vēlamies, lai to atvērtu, lai lasītu vai ja mēs gribam, lai atvērtu to rakstīt. 553 00:52:21,440 --> 00:52:26,490 Tur kombinācijas un sīkumi pāris, bet mēs vēlamies, lai atvērtu šo par lasījumā. 554 00:52:26,490 --> 00:52:29,380 Mēs vēlamies, lai nolasa no faila. 555 00:52:29,380 --> 00:52:34,290 Tātad, ko tas atgriešanās? Tā atgriež failu zvaigznītes (*), 556 00:52:34,290 --> 00:52:37,260 un es ņemšu tikai parādīt visu, kas mainīgā F, lai *, 557 00:52:37,260 --> 00:52:40,840 atkal, tas ir rādītājs, bet mēs negribam, lai risinātu ar norādes. 558 00:52:40,840 --> 00:52:46,470 Jūs varat domāt par F AS, f ir tagad mainīgais jūs gatavojas izmantot, lai pārstāvētu failu. 559 00:52:46,470 --> 00:52:49,850 Tātad, ja jūs vēlaties, lai nolasa no faila, jūs lasīt no f. 560 00:52:49,850 --> 00:52:54,820 Ja jūs vēlaties slēgt lietu, aizverot f. 561 00:52:54,820 --> 00:53:00,350 Tāpēc pie programmas beigām, kad mēs neizbēgami vēlaties slēgt lietu, ko mums vajadzētu darīt? 562 00:53:00,350 --> 00:53:06,750 Mēs vēlamies, lai aizvērtu f. 563 00:53:06,750 --> 00:53:12,600 Tāpēc tagad pēdējā faila funkcija, kas mēs esam gatavojas vēlaties izmantot, ir skenēšanas f, f skenēšanas f. 564 00:53:12,600 --> 00:53:20,930 Un ko tas dara, ir tas skenē pār failu meklē modeli, lai atbilstu. 565 00:53:20,930 --> 00:53:39,100 Aplūkojot cilvēks lapā šeit mēs redzam, int f skenēšanas f, ignorēt atgriešanās vērtību tagad. 566 00:53:39,100 --> 00:53:45,230 Pirmais arguments ir failu * plūsma, tāpēc pirmais arguments mēs spēsim pabraukt garām, ir f. 567 00:53:45,230 --> 00:53:47,900 Mēs esam skenēšanas pār f. 568 00:53:47,900 --> 00:53:53,680 Otrs arguments ir formāta virkne. 569 00:53:53,680 --> 00:53:58,310 Es sniegs jums formāta virknes tiesības tagad. 570 00:53:58,310 --> 00:54:05,180 Es domāju, ka mums gadās teikt, 127S \ n, partijas, kas ir nevajadzīgs. 571 00:54:05,180 --> 00:54:12,490 Par to, kas tas formāta virkne ir ideja, ir varat iedomāties skenēšanas f kā pretstatu drukas f. 572 00:54:12,490 --> 00:54:17,160 Tātad drukas f, drukas f mēs arī izmanto šāda veida formātā parametru, 573 00:54:17,160 --> 00:54:25,000 bet drukas f ko mēs darām, ir - aplūkosim līdzvērtīgu. 574 00:54:25,000 --> 00:54:32,550 Tātad drukāt f, un tur tiešām arī f drukas f, ja pirmais arguments būs f. 575 00:54:32,550 --> 00:54:40,980 Drukājot f, mēs varētu teikt kaut ko līdzīgu, "Drukas 127S \ n", un tad, ja mēs iet tā kādu stīgu, 576 00:54:40,980 --> 00:54:44,050 tas notiek, lai izdrukātu šo stīgu un tad jaunu līniju. 577 00:54:44,050 --> 00:54:49,690 Kas 127 nozīmē, es esmu diezgan pārliecināts, bet es nekad neesmu tikai sevi uz to, 578 00:54:49,690 --> 00:54:52,470 Jūs pat nepieciešams pateikt '127 ", kas drukas f, 579 00:54:52,470 --> 00:54:57,090 bet ko tas nozīmē, drukāt pirmās 127 rakstzīmes. 580 00:54:57,090 --> 00:54:59,350 Tāpēc es esmu diezgan pārliecināts, ka tas gadījums. Jūs varat Google par to. 581 00:54:59,350 --> 00:55:03,000 Bet nākamo es esmu gandrīz pozitīvs tas nozīmē, ka. 582 00:55:03,000 --> 00:55:08,880 Tātad tas ir drukāt pirmās 127 rakstzīmes, kam seko jaunu līniju. 583 00:55:08,880 --> 00:55:14,680 F skenēšanas f tagad, nevis meklē mainīgo un drukāšana, 584 00:55:14,680 --> 00:55:22,620 tas notiek, lai apskatīt kādu stīgu, un uzglabāt modelis vērā mainīgā. 585 00:55:22,620 --> 00:55:26,360 Pieņemsim faktiski izmantot skenēšanas f citā piemērs. 586 00:55:26,360 --> 00:55:31,670 Tāpēc pieņemsim, ka mums bija dažas int x = 4, 587 00:55:31,670 --> 00:55:41,110 un mēs vēlējāmies radīt virkni izgatavots no - vēlējāmies radīt virkni 588 00:55:41,110 --> 00:55:44,250 ka bija, piemēram, tas būs jānāk klajā daudz vēlāk, 589 00:55:44,250 --> 00:55:49,020 kaut kas ir tāpat kā 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Tātad tas varētu būt programma, kur jums būs summa skaitītājs, 591 00:55:51,870 --> 00:55:56,420 Rezumējot cīnītos es, un jūs vēlaties, lai saglabātu ķekars attēlu. 592 00:55:56,420 --> 00:56:02,430 Tātad jūs vēlaties, lai saglabātu i.jpg, kur i ir dažas iterācijas no jūsu cilpa. 593 00:56:02,430 --> 00:56:05,500 Tātad, kā mēs šo virkni par šo JPEG? 594 00:56:05,500 --> 00:56:11,720 Ja jūs vēlētos, lai drukātu 4.jpg, mēs varētu tikai teikt drukas f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 un tad tas varētu drukāt uz šo JPEG. 596 00:56:14,410 --> 00:56:20,050 Bet, ja mēs gribam saglabāt stīgu 4.jpg, mēs izmantojam skenēšanas f. 597 00:56:20,050 --> 00:56:30,860 Tāpēc virkne s - patiesībā mēs cant - raksturs, palija s, iesim 100. 598 00:56:30,860 --> 00:56:35,400 Tāpēc es tikko paziņoja dažas masīvs 100 rakstzīmes, 599 00:56:35,400 --> 00:56:39,830 un tas, ko mēs neizbēgami būs uzglabājot ka JPEG iekšā 600 00:56:39,830 --> 00:56:47,920 Tāpēc mēs esam gatavojas izmantot skenēšanas f, un formāts, kā mēs teiktu% d.jpg 601 00:56:47,920 --> 00:56:54,980 lai drukātu 4.jpg, ka šis formāts būs% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Tātad formāts ir% d.jpg, ko mēs gribam, lai aizstātu% d ar ir x, 603 00:57:04,020 --> 00:57:06,590 un tagad mums ir saglabāt šo stīgu kaut kur. 604 00:57:06,590 --> 00:57:12,500 Un kur mēs ejam, lai saglabātu šo virkni ir masīvs s. 605 00:57:12,500 --> 00:57:21,640 Tātad pēc šī līnija kodu, s, ja mēs drukāt f,% s mainīgo s, 606 00:57:21,640 --> 00:57:26,280 tas notiek, lai drukātu 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Tik f skenēšanas f ir tāds pats kā skenēšanas f, izņemot tagad tas meklē pār šo failu 608 00:57:38,930 --> 00:57:43,600 par to, ko glabāt s. 609 00:57:43,600 --> 00:57:46,160 Tas ko pēdējais arguments būs. 610 00:57:46,160 --> 00:57:54,170 Mēs vēlamies, lai uzglabātu - "Scan f ģimenes funkciju skenē gan saskaņā ar formātu, kā mēģināja tālāk. 611 00:57:54,170 --> 00:58:02,450 Ja kāds tiek uzglabāti atrašanās vietās jūs varētu atgriezties - " 612 00:58:02,450 --> 00:58:12,910 Nē, mēs varētu būt labs. Ļaujiet man domāt par sekundi. 613 00:58:12,910 --> 00:58:26,350 Tāpēc skenēšanas f nav - kāda heck ir funkcija, kas dara, ka? 614 00:58:26,350 --> 00:58:31,650 Tāpēc skenēšanas f nav gatavojas pieņemt skaitlim un darīt dot JPG. 615 00:58:31,650 --> 00:58:43,490 Tas notiek, lai [Mumbles]. 616 00:58:43,490 --> 00:58:49,360 Saglabāt int mainīgo virknes int C. 617 00:58:49,360 --> 00:58:55,940 Kas tas ir mainīgs, vai kāda ir šī funkcija sauc? 618 00:58:55,940 --> 00:59:04,950 Jā. That - jā. Tātad, ko es definējot jums pirms bija s drukas f, 619 00:59:04,950 --> 00:59:09,820 kas - tas padara daudz nozīmē, tāpēc es teicu, tas bija daudz vairāk kā drukas f. 620 00:59:09,820 --> 00:59:14,700 Skenēšanas f ir vēl veids kā drukas f, bet s drukas f gatavojas skenēt to vairāk 621 00:59:14,700 --> 00:59:17,510 un aizstāt mainīgos un tagad uzglabāt to virknē. 622 00:59:17,510 --> 00:59:19,620 Vietā drukāšana, to uzglabā virknē. 623 00:59:19,620 --> 00:59:25,070 Tāpēc ignorēt to, ka pilnībā. Jūs joprojām varat domāt par formāta noteicēju kā, piemēram, ka drukas f. 624 00:59:25,070 --> 00:59:34,510 Tāpēc tagad, ja mēs vēlējāmies darīt 4.jpg lieta, mēs varētu darīt s drukas f, X šis. 625 00:59:34,510 --> 00:59:38,520 Tātad, ko skenēšanas f dara - kāda bija jūsu jautājums būs? 626 00:59:38,520 --> 00:59:40,820 [Studentu] Es esmu tikai sajaukt par to, ko mēs cenšamies darīt tieši šeit 627 00:59:40,820 --> 00:59:43,450 ar šo JPEG. Vai jūs varat paskaidrot, ka 1 vairāk laika? 628 00:59:43,450 --> 00:59:52,710 Tā tas bija - tas ir mazāk relevent līdz f skenēšanas f tagad, cerams, tas būs tie atkal kādu veidā. 629 00:59:52,710 --> 01:00:02,240 Bet ko es sākotnēji bija paredzējusi parādīt bija - tas ir faktiski tieši saistīti ar šiem [? F5] 630 01:00:02,240 --> 01:00:08,520 Jūs esat būs izmantojot s drukas f, kur, teiksim mums ir 100 attēli, 631 01:00:08,520 --> 01:00:13,630 un jūs vēlaties lasīt attēlu 1.jpg, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Tāpēc, lai to izdarītu, jums ir nepieciešams f atvērt, un tad jums ir iet virknē, kuru vēlaties atvērt. 633 01:00:21,520 --> 01:00:30,020 Tāpēc mēs vēlamies atvērt 1.jpg, lai radītu virkni, kas ir 1.jpg, 634 01:00:30,020 --> 01:00:37,660 mēs s drukas f no% d.jpg--mums nav jādara, lai int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Tāpēc s drukas f% d.jpg no i. 637 01:00:51,130 --> 01:00:56,320 Tātad, pēc šīs līnijas, tagad mainīgā vai masīvs s gatavojas 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Vai, 0.jpg, 1.jpg, 2.jpg. Un tā mēs varam atvērt, savukārt, katru attēlu lasījumā. 639 01:01:10,610 --> 01:01:19,550 Tātad tas ir tas, ko ir drukāt f dara. Vai jūs redzat, ko s drukāt f tagad dara? 640 01:01:19,550 --> 01:01:25,720 [Studentu] Labi, tā tas ir ņemot - tas rada virkni, something.jpg, un tad saglabā to. 641 01:01:25,720 --> 01:01:30,360 Jā. Tas rada - tas ir vēl viens formāta virkne, tāpat kā skenēšanas f un drukas f, 642 01:01:30,360 --> 01:01:37,530 kur tas ieliktņi visi no mainīgajiem, uz otro argumentu, varētu būt s pretstatā i. 643 01:01:37,530 --> 01:01:42,280 Varbūt - es domāju, ka tas gadījums. Bet neatkarīgi no argumentiem pasūtījuma. 644 01:01:42,280 --> 01:01:45,440 Tas notiek, lai ievietotu visus mainīgos lielumus formāta virknes 645 01:01:45,440 --> 01:01:52,250 un pēc tam uzglabāt mūsu bufera, mēs saucam par buferi, tas ir, ja mēs uzglabāšanu virkni. 646 01:01:52,250 --> 01:02:00,750 Tātad mēs uzglabāšanai iekšpusē s pareizi formatēta virkne,% d ir aizstāti ar 4. 647 01:02:00,750 --> 01:02:08,080 [Studentu] Tātad, ja mēs to darījām, ir mainīgs f tikai gatavojas no jauna? 648 01:02:08,080 --> 01:02:18,110 Jā. Tāpēc mums vajadzētu slēgt sākotnējo f pirms to darīt. 649 01:02:18,110 --> 01:02:22,810 Bet - un tad arī, ja tur nebija f atvērt šeit, tad mums būtu nepieciešams teikt - 650 01:02:22,810 --> 01:02:29,280 Yeah. Bet tas pavērtu simts dažādus failus. 651 01:02:29,280 --> 01:02:37,360 [Studentu] Bet mēs nevarētu piekļūt vai - labi. 652 01:02:37,360 --> 01:02:44,230 Labi. Tātad skenēšanas f, f skenēšanas f, ir sava veida pašu ideju, 653 01:02:44,230 --> 01:02:53,610 bet tā vietā, nevis uzglabāt to string, tas ir vairāk kā jūs tagad 654 01:02:53,610 --> 01:03:02,420 iet pa dzelt un modelis saskaņošanas pret šo stīgu un uzglabāšanu rezultātus uz mainīgajiem. 655 01:03:02,420 --> 01:03:11,290 Jūs varat izmantot skenēšanas f parsēt nekā kaut ko līdzīgu 4.jpg, un glabāt veselu 4 savos kopsummas int x. 656 01:03:11,290 --> 01:03:13,430 Tas, ko mēs varam izmantot skenēšanas F. 657 01:03:13,430 --> 01:03:16,300 F skenēšanas f gatavojas to darīt pie komandrindas. 658 01:03:16,300 --> 01:03:19,200 Es esmu tiešām diezgan pārliecināts, ka tas ir tas, ko CS50 bibliotēka dara. 659 01:03:19,200 --> 01:03:29,050 Tātad, ja jūs sakāt, "get int", tas ir skenēšanas f-ing pār - skenēšanas f ir veids, kā jūs saņemsiet lietotāja ievadi. 660 01:03:29,050 --> 01:03:34,670 F skenēšanas f gatavojas darīt to pašu, bet, izmantojot failu skenēšanas pār. 661 01:03:34,670 --> 01:03:41,090 Tātad šeit mēs skenēšanas pār šo failu. 662 01:03:41,090 --> 01:03:45,460 Modelis mēs cenšamies saskaņot, ir daži virkne, kas ir 127 rakstzīmes 663 01:03:45,460 --> 01:03:48,100 seko jaunas līnijas 664 01:03:48,100 --> 01:03:54,770 Tāpēc es esmu diezgan pārliecināts, ka mēs pat varētu vienkārši pateikt "spēles s," jo vārdnīcā 665 01:03:54,770 --> 01:03:57,770 Mums gadās būt, mēs esam garantēta ne vārda nav tik ilgi, 666 01:03:57,770 --> 01:04:03,310 un arī f skenēšanas f, es domāju, apstāsies pie jaunās līnijas vienalga ko. 667 01:04:03,310 --> 01:04:06,970 Bet mēs arī jaunu līniju mača, un - 668 01:04:06,970 --> 01:04:13,960 [Studentu] Ja mēs neietvēra jaunu līniju, nebūtu tas atrast daļas vārdu? 669 01:04:13,960 --> 01:04:22,900 Tas - katram - meklē vārdnīcu - 670 01:04:22,900 --> 01:04:26,200 Tātad vārdnīcā, tie visi ir mūsu vārdiem. 671 01:04:26,200 --> 01:04:30,500 Katra no tām ir par jaunu līniju. 672 01:04:30,500 --> 01:04:32,510 Skenēšanas f gatavojas uzņemt šo vārdu. 673 01:04:32,510 --> 01:04:38,750 Ja mums nav iekļauts jaunu līniju, tad tas ir iespējams, ka nākamais skenēšanas f būs tikai lasīt jaunu līniju. 674 01:04:38,750 --> 01:04:44,180 Bet ieskaitot jaunu līniju, tad būs vienkārši ignorēt jauno līniju. 675 01:04:44,180 --> 01:04:49,440 Bet mēs nekad iegūt daļa no vārda, jo mēs vienmēr lasījumā līdz jaunu līniju, vienalga ko. 676 01:04:49,440 --> 01:04:54,530 [Studentu] Bet ko tad, ja jūs meklēt vārdu "cissa", tāpat cissa. 677 01:04:54,530 --> 01:04:57,380 Vai tā uzskata, ka, un saka, ka tas ir spēles? 678 01:04:57,380 --> 01:05:05,110 Tātad šeit mēs - tas būs lasāms - tas ir faktiski labs punkts. 679 01:05:05,110 --> 01:05:10,660 Mēs nekad, izmantojot pašreizējo - vārdu mēs meklējam ir pirmais komandrindas arguments. 680 01:05:10,660 --> 01:05:16,460 Tātad virkne, vārds = argv 1. 681 01:05:16,460 --> 01:05:20,020 Tāpēc virkne mēs meklējam, ir argv 1. 682 01:05:20,020 --> 01:05:23,290 Mēs nemeklējam vārdu vispār mūsu skenēšanas f. 683 01:05:23,290 --> 01:05:28,030 Ko mēs darām ar skenēšanas f kļūst katru vārdu vārdnīcā, 684 01:05:28,030 --> 01:05:34,320 un tad, kad mums ir, ka vārdu mēs ejam, lai izmantotu strcmp lai salīdzinātu tos. 685 01:05:34,320 --> 01:05:39,210 Mēs ejam, lai salīdzinātu mūsu vārdu un ko mēs tikai lasīt collas 686 01:05:39,210 --> 01:05:45,110 Tātad neizbēgami, mēs ejam, lai galu galā dara ķekars skenēšanas fs 687 01:05:45,110 --> 01:05:52,130 līdz tas vienkārši tā notiek, ka skenēšanas f atgriezīsies - 688 01:05:52,130 --> 01:05:54,800 tā atgriezīsies vienu, kamēr tā ir saskaņota ar jaunu vārdu, 689 01:05:54,800 --> 01:06:01,360 un tas atgriezīsies kaut kas cits, tiklīdz tas ir izdevies saskaņot vārdu. 690 01:06:01,360 --> 01:06:08,440 Mēs lasām visā vārdnīcu, uzglabāšanai pozīcijai katrs vārds vērā mainīgo s. 691 01:06:08,440 --> 01:06:17,240 Tad mēs salīdzinātu vārdu ar s, un ja salīdzinājums == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp notiek, lai 0, ja spēle bija veikts. 693 01:06:21,650 --> 01:06:31,510 Tātad, ja tas bija 0, tad mēs varam izdrukāt f, saskaņota, 694 01:06:31,510 --> 01:06:35,370 vai vārds ir vārdnīcā, vai neatkarīgi vēlaties drukāt f. 695 01:06:35,370 --> 01:06:41,450 Un tad - mēs negribam, lai f slēgt atkal un atkal. 696 01:06:41,450 --> 01:06:50,410 Tas ir tāda veida lieta, mēs vēlamies darīt, un mēs ne tikai meklē vārdu vārdnīcā. 697 01:06:50,410 --> 01:06:56,660 Lai mēs varētu darīt, ja mēs vēlējāmies, lai meklētu savu modeli, cissa, kā jūs teica pirms, 698 01:06:56,660 --> 01:07:00,260 ja mēs vēlējāmies, lai meklētu šo modeli, tad tas varētu neizdoties gadījumā 699 01:07:00,260 --> 01:07:08,010 jo tas nav reāli vārdu, bet viens no šajā vārdnīcā vārdus notiek, ir, ka tā. 700 01:07:08,010 --> 01:07:13,560 Lai tā varētu saskaņot šo vārdu, bet šī vārda apakškopa nav pašu vārdu. 701 01:07:13,560 --> 01:07:17,250 Bet tas nav kā mēs to izmantot, mēs esam lasīt katru vārdu 702 01:07:17,250 --> 01:07:19,740 un tad salīdzinot vārdu mēs ar šo vārdu. 703 01:07:19,740 --> 01:07:25,780 Tātad mēs vienmēr Salīdzinot Full vārdus. 704 01:07:25,780 --> 01:07:29,620 Es varu izsūtīt pabeigti risinājumus vēlāk. 705 01:07:29,620 --> 01:07:32,050 Tas ir sava veida gandrīz pareizo atbildi, es domāju. 706 01:07:32,050 --> 01:07:34,720 [Studentu komentārs, nesaprotami] 707 01:07:34,720 --> 01:07:40,870 Ak, es varu atbrīvoties no ka pirms? Char s, es domāju, mēs teicām 127 - Es aizmirst, ko lielākā ir. 708 01:07:40,870 --> 01:07:44,100 Mēs vienkārši darīt 128 tāpēc tagad s ir pietiekami ilgi. 709 01:07:44,100 --> 01:07:46,570 Mums nav nepieciešams drukāt neko. 710 01:07:46,570 --> 01:07:56,440 Mēs arī gatavojas vēlaties, lai ir tuvu mūsu failu, un tas būtu par pareizo atbildi. 711 01:07:56,440 --> 01:07:59,440 CS50.TV