1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Sekcio 3] [Less Komfortaj] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Universitato Harvard] 3 00:00:05,000 --> 00:00:08,000 >> [Jen CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Bone, ni komenci. 5 00:00:10,000 --> 00:00:13,000 Bonvenon Semajno 4 de CS50. 6 00:00:13,000 --> 00:00:19,000 Se vi infanoj malfermi per foliumilo kaj malfermi pset 3, 7 00:00:19,000 --> 00:00:23,000 Scramble kun CS50, ni tuj komencos tuj 8 00:00:23,000 --> 00:00:26,000 tra la sekcio de demandoj tie. 9 00:00:26,000 --> 00:00:32,000 Nur kiel lasta semajno, ni laboros en CS50 Spacoj, 10 00:00:32,000 --> 00:00:35,000 se vi ankaŭ tiri ke ĝis tiel, 11 00:00:35,000 --> 00:00:43,000 kaj se vi iras antaŭen kaj viziti ĉi ligilon, kiun mi devas tien je la supro. 12 00:00:43,000 --> 00:00:45,000 Estas tempo por komenci. 13 00:00:45,000 --> 00:00:51,000 Ni havas nian iom hi programo tie. Nenio freneza. 14 00:00:51,000 --> 00:00:55,000 Unu el la unuaj aferoj kiujn mi volas fari kun vi infanoj hodiaŭ estas iri super kelkaj solvoj 15 00:00:55,000 --> 00:00:58,000 al Problemo Serio 1, speco de ekzemplo solvojn, 16 00:00:58,000 --> 00:01:03,000 nur tiel vi povas akiri senton por kio specoj de kodo bastonon skribas, 17 00:01:03,000 --> 00:01:07,000 kio specoj de kodo aliaj studentoj skribas, 18 00:01:07,000 --> 00:01:10,000 kaj vi rigardu ĝin ĉar mi scias ke estas stranga 19 00:01:10,000 --> 00:01:14,000 kiam vi prezenti solvon al problemo aro kaj ricevis komenton 20 00:01:14,000 --> 00:01:18,000 en via propra versio, sed foje ĝi estas utila por vidi kiel aliaj personoj faris tion, 21 00:01:18,000 --> 00:01:22,000 speciale tiuj kiuj estas bela rigardante. 22 00:01:22,000 --> 00:01:27,000 Por la plimulto, mi estis vere impresita kun la solvojn kiujn vi infanoj produktita. 23 00:01:27,000 --> 00:01:31,000 Mi ankoraux ne komencis rigardi vian Problemo Ara 2s, sed se ili estas io kiel la unua, 24 00:01:31,000 --> 00:01:34,000 ĝi signifas nenion sed bonaĵojn. 25 00:01:34,000 --> 00:01:40,000 >> Se vi rigardas mian revizioj, ni komencu la tuta vojo antaux Revizio 1, 26 00:01:40,000 --> 00:01:47,000 kaj ni iras preni rapidajn rigardu al Mario solvo. 27 00:01:47,000 --> 00:01:54,000 Se vi tiri ĉi supre, tiuj programoj kiuj nin tuj prezenti are correct. 28 00:01:54,000 --> 00:01:56,000 Esas ne praveco aferoj kun tiuj problemoj, sed prefere, 29 00:01:56,000 --> 00:01:59,000 ni volas paroli iomete pri la diversaj dezajno demandoj 30 00:01:59,000 --> 00:02:03,000 kiu estis uzitaj tie. 31 00:02:03,000 --> 00:02:08,000 Unu el la aĵoj kiuj estis interesa pri la solvo 32 00:02:08,000 --> 00:02:11,000 estas ke ĝi uzas tiun novan konstruo nomata funto difini, 33 00:02:11,000 --> 00:02:15,000 kelkfoje ankaŭ nomita kiel hash difini. 34 00:02:15,000 --> 00:02:18,000 Lasu min zomi ĝin ĉi tie. 35 00:02:18,000 --> 00:02:24,000 A # difini permesas doni nomojn al tiuj nombroj en via programo. 36 00:02:24,000 --> 00:02:28,000 En ĉi tiu kazo, la maksimuma alteco de piramido en Mario 37 00:02:28,000 --> 00:02:34,000 estis 23 kaj anstataŭ meti 23 en mia kodo- 38 00:02:34,000 --> 00:02:37,000 ni devus raporti al tiu tiel malmola kodigo 23 - 39 00:02:37,000 --> 00:02:43,000 anstataŭ ĉi donas la nomon MAX_HEIGHT al tiu numero, 40 00:02:43,000 --> 00:02:48,000 por ke cxi tie en mia do-dum buklo 41 00:02:48,000 --> 00:02:51,000 vi povas fakte rilatas al MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 anstataŭ meti la numero 23 in 43 00:02:55,000 --> 00:02:57,000 [Studenta] Kio estas la avantaĝo de fari tion? 44 00:02:57,000 --> 00:02:59,000 Tio estas granda demando. 45 00:02:59,000 --> 00:03:03,000 Unu estas legibilidad. 46 00:03:03,000 --> 00:03:08,000 Avantaĝon de uzi ĉi # difini estas legibilidad. 47 00:03:08,000 --> 00:03:11,000 Kiam mi legas ĉi tiun kodon, mi vidas kio okazas. 48 00:03:11,000 --> 00:03:15,000 >> Mi povas vidi en ĉi tiu kondiĉo tie ni provi 49 00:03:15,000 --> 00:03:19,000 por la alteco esti <0, kiun ni povus havi ankaŭ difinis 50 00:03:19,000 --> 00:03:22,000 esti minimuma alteco aŭ min alteco. 51 00:03:22,000 --> 00:03:25,000 La alia avantaĝo estas, ke mi povas tiam legis la reston de la linio por vidi 52 00:03:25,000 --> 00:03:30,000 ke ni ankaŭ kontroli por certiĝi ke alteco ne estas pli granda ol la max alteco, 53 00:03:30,000 --> 00:03:35,000 ĉar ni tuj daŭrigi dum la alto estas pli granda ol la max alteco. 54 00:03:35,000 --> 00:03:40,000 La alia avantaĝo estas-se mi malzomi iom tie- 55 00:03:40,000 --> 00:03:49,000 se mi kuros ĉi programo kaj mi kuras ĝi, ni diru, kun 23 nun, 56 00:03:49,000 --> 00:03:52,000 ĝi presi ĉiujn 23 vicoj ĝuste tiel. 57 00:03:52,000 --> 00:03:54,000 Sed diru mi volis ŝanĝi la max alteco, 58 00:03:54,000 --> 00:03:57,000 kaj nun mi volas limigi la maksimuma alteco de piramidoj 59 00:03:57,000 --> 00:04:06,000 esti nur diras-viro, kiu estis funky. 60 00:04:06,000 --> 00:04:14,000 # Include , # difini MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 kaj ni diras, ke ni volis agordi ĝin egala al 10. 62 00:04:18,000 --> 00:04:22,000 Nun en ĉi tiu punkto, ĉiuj mi devis fari estis ŝanĝi ĝin en ĉi tiu loko. 63 00:04:22,000 --> 00:04:27,000 Mi povas recompilar la kodon, kaj nun, se mi provas kaj tajpu en 12, 64 00:04:27,000 --> 00:04:30,000 ĝi instigas min denove. 65 00:04:30,000 --> 00:04:33,000 En ĉi tiu kazo, ni nur uzas MAX_HEIGHT unufoje. 66 00:04:33,000 --> 00:04:37,000 Ne tiu granda de hassle iri 67 00:04:37,000 --> 00:04:40,000 kaj ŝanĝi ĝin en la dum buklo se vi bezonas. 68 00:04:40,000 --> 00:04:44,000 Sed en programoj kie vi referenco sama magia nombro 69 00:04:44,000 --> 00:04:47,000 denove kaj denove, ĉi # difini mekanismo estas vere utila 70 00:04:47,000 --> 00:04:52,000 ĉar vi ĵus ŝanĝi ĝin iam en la pinto de la dosiero-estas tipe kie vi metis ilin- 71 00:04:52,000 --> 00:04:57,000 kaj la ŝanĝo percolates tra la resto de la dosiero. 72 00:04:57,000 --> 00:05:02,000 >> Aliaj aferoj mi volis rimarki en ĉi tiu farita, ke mi pensis aspektis vere bela, 73 00:05:02,000 --> 00:05:05,000 unu estis la nomoj de la variabloj. 74 00:05:05,000 --> 00:05:14,000 Vi vidas tie ke ni havas entjeran variabloj nomas vico kaj nomita alteco. 75 00:05:14,000 --> 00:05:20,000 Spacoj, hashes, ĝi helpas fari la kodon iom pli legebla, 76 00:05:20,000 --> 00:05:25,000 faras iom pli komprenebla kio reale okazas. 77 00:05:25,000 --> 00:05:31,000 Ĉi tiu estas en kontrasto kun uzante, ekzemple, hazarda literoj 78 00:05:31,000 --> 00:05:35,000 aŭ nur gobbledygook aro. 79 00:05:35,000 --> 00:05:39,000 Lasta afero mi atentigi estas kiu en por cikloj, 80 00:05:39,000 --> 00:05:45,000 ofte tiuj iterator variabloj, tiuj counters ke vi uzas en via por cikloj, 81 00:05:45,000 --> 00:05:51,000 ĝi estas normo kaj convencionales komenci ilin kun ĉu mi kaj tiam j kaj tiam k 82 00:05:51,000 --> 00:05:54,000 kaj irante de tie, se vi bezonas pli variabloj, 83 00:05:54,000 --> 00:05:56,000 kaj ĉi tiu estas nur konvencio. 84 00:05:56,000 --> 00:05:58,000 Ekzistas multaj konvencioj. 85 00:05:58,000 --> 00:06:00,000 Ĝi dependas de la programlingvo vi uzas. 86 00:06:00,000 --> 00:06:04,000 Sed en C, oni tipe starti kun mi. 87 00:06:04,000 --> 00:06:08,000 Ĝi ne havas sencon uzi, ekzemple, aŭ b 88 00:06:08,000 --> 00:06:13,000 dependante de la situacio. 89 00:06:13,000 --> 00:06:15,000 Estas tio por ĉi tiu. 90 00:06:15,000 --> 00:06:25,000 Se vi nun elsxiros redaktoj 2, vi vidos alian Mario, 91 00:06:25,000 --> 00:06:29,000 kaj ĉi tiu estas simila al la alia, ke ni nur rigardis, 92 00:06:29,000 --> 00:06:32,000 sed ĝi faras ion ia genia. 93 00:06:32,000 --> 00:06:38,000 Se ni rigardas tiun sekcion ĉi tie interne la interna por ciklo, 94 00:06:38,000 --> 00:06:44,000 ili estas uzanta kelkajn freneza rigardas sintakson ĉi tie dekstre en ĉi tiu linio. 95 00:06:44,000 --> 00:06:47,000 Tiu nomiĝas triargumenta operatoro. 96 00:06:47,000 --> 00:06:53,000 Estas kvazaŭ alia aserto kondensita en unu linio. 97 00:06:53,000 --> 00:06:57,000 La kondiĉo estas tiu parto ene krampoj. 98 00:06:57,000 --> 00:07:05,000 Estas ekvivalenta al diri se j 00:07:10,000 Kaj tiam kion la enhavon de tiu se bloko estus estas la spaco 100 00:07:10,000 --> 00:07:16,000 kaj tiam la enhavon de tio, kion la alia estus ĉi estas #. 101 00:07:16,000 --> 00:07:20,000 Ĝi estas esence atribuante spaco al tiu variablo. 102 00:07:20,000 --> 00:07:24,000 Oni metas spacon en la enhavo de la bloko variablo, 103 00:07:24,000 --> 00:07:29,000 se ĉi tiu kondiĉo estas konita, kaj se la kondiĉo estas ne konis, 104 00:07:29,000 --> 00:07:32,000 tiam la bloko variablo ricevas ĉi #. 105 00:07:32,000 --> 00:07:37,000 Kaj tiam, kompreneble, anstataŭ konstrui supren tutan ĉenon 106 00:07:37,000 --> 00:07:43,000 kaj presi ĉio ekster fine tiu solvo presas gxin unu signo samtempe. 107 00:07:43,000 --> 00:07:48,000 Bela cool. 108 00:07:48,000 --> 00:07:53,000 >> Alia paro de aĵoj por rigardi. Ni movi antaŭen al avidaj. 109 00:07:53,000 --> 00:07:58,000 Nun se ni rigardas avida, tiu unua solvo 110 00:07:58,000 --> 00:08:00,000 uzas tiujn # difinu sufiĉe. 111 00:08:00,000 --> 00:08:06,000 Ni havas unu konstanto difinita por ĉiu el la diversaj nombroj en ĉi tiu programo. 112 00:08:06,000 --> 00:08:12,000 Ni havas unu por cendojn po dolaro, unu por kazernoj, dimes, Nickels, kaj centonoj, 113 00:08:12,000 --> 00:08:15,000 kaj nun, se ni rulumu malsupren kaj legi la kodon, 114 00:08:15,000 --> 00:08:22,000 ni povas vidi normo do-dum buklo impreso ĉio eksteren. 115 00:08:22,000 --> 00:08:25,000 Speco de la Crux de ĉi tiu problemo estis rimarki ke 116 00:08:25,000 --> 00:08:29,000 vi bezonas por igi la kaleŝego, ke vi legis en de la uzanto entjero 117 00:08:29,000 --> 00:08:32,000 por precize fari la matematikon, kaj ĉi tio estas ĉar 118 00:08:32,000 --> 00:08:36,000 kun flosantaj punktaj nombroj, kiel ni raportis en prelego koncize, 119 00:08:36,000 --> 00:08:41,000 ĝi ne eblas precize prezenti ĉiu unuopa valoro sur la nombra linio 120 00:08:41,000 --> 00:08:47,000 ĉar estas malfinie multaj valoroj inter 3 kaj, ni diru, 3,1 vespero. 121 00:08:47,000 --> 00:08:54,000 Vi povas havi 3,01 kaj 3,001 kaj 3,0001, kaj vi povas plu iri. 122 00:08:54,000 --> 00:09:00,000 Ĝi rezultas kiam vi laboras per mono, vi ofte volas igi ĝin 123 00:09:00,000 --> 00:09:05,000 en entjera formato por ke vi ne perdi cendoj kaj tiu klaso de aĵoj. 124 00:09:05,000 --> 00:09:09,000 Farante tion kaj rondigas estis ŝlosilo. 125 00:09:09,000 --> 00:09:14,000 Tiu solvo uzis perfekte rekta, granda algoritmo, 126 00:09:14,000 --> 00:09:17,000 kiu decremented la nombro de centonoj ceteraj, unue por kazernoj, 127 00:09:17,000 --> 00:09:19,000 tiam per dimes, tiam per Nickels, tiam per peniques, 128 00:09:19,000 --> 00:09:24,000 kaj aldonante al la nombro de moneroj ĉiufoje. 129 00:09:24,000 --> 00:09:31,000 >> Alia solvo, ke ni vidos, kiel mi malzomi iru redaktoj 4, 130 00:09:31,000 --> 00:09:40,000 havis tre simila komenco sed anstataŭ uzi div kaj mod 131 00:09:40,000 --> 00:09:44,000 rajton super tie por kalkuli la nombron de cendoj. 132 00:09:44,000 --> 00:09:50,000 Ĉi tio, la nombro de kvaraj estas egala al la nombro de centonoj dividita per 25, 133 00:09:50,000 --> 00:09:53,000 kaj la motivo ĉi funkcias estas ĉar ni faras entjera divido, 134 00:09:53,000 --> 00:09:58,000 tuj kiam forĵetante ajna resto. 135 00:09:58,000 --> 00:10:02,000 [Studenta] Do ni devas diri la serĉo? 136 00:10:02,000 --> 00:10:05,000 Vere dependas. 137 00:10:05,000 --> 00:10:08,000 [Studenta] Vi diras pli ol kodo tie ĉi. 138 00:10:08,000 --> 00:10:16,000 Yeah, kaj tiel estas fasko de varianta filozofioj pri tiu. 139 00:10:16,000 --> 00:10:21,000 Mia persona filozofio estas, ke via kodo estas vere la vero, 140 00:10:21,000 --> 00:10:24,000 kiel viaj kodo estas kio vere ekzekuti sur la komputilo, 141 00:10:24,000 --> 00:10:29,000 kaj tiel via kodo devus esti kiel legebla kiel eblas ne necessitate tiom da komentoj. 142 00:10:29,000 --> 00:10:33,000 Kiu diris, kiam vi faras tion, kio estas speco de malfacila matematike 143 00:10:33,000 --> 00:10:38,000 aŭ Algoritma, estas bona por diri tiujn tiel ke vi povas 144 00:10:38,000 --> 00:10:43,000 aldoni kroman dimension, ekstra tavolo al kiu ajn legas vian kodon. 145 00:10:43,000 --> 00:10:49,000 En ĉi tiuj solvoj, ofte ili diris pli peze nur ĉar 146 00:10:49,000 --> 00:10:52,000 ni volas por povi disdoni ilin kaj ke homoj repreni ilin 147 00:10:52,000 --> 00:10:56,000 kaj legis ilin belaj facile. 148 00:10:56,000 --> 00:11:05,000 Sed definitive, mi konsentus ke tiu estas peza. 149 00:11:05,000 --> 00:11:07,000 [Studenta] Sed kiam en dubo, iru pli peza? 150 00:11:07,000 --> 00:11:10,000 Kiam en dubo, iru pli pezaj. 151 00:11:10,000 --> 00:11:17,000 Kelkaj homoj foje diras reveno 0 aŭ io kiel tio. 152 00:11:17,000 --> 00:11:20,000 Mi kredas ke estas ridinda komento. 153 00:11:20,000 --> 00:11:22,000 Klare tio kio okazas. 154 00:11:22,000 --> 00:11:25,000 Mi ne bezonas Esperanto por diri al mi, ke. 155 00:11:25,000 --> 00:11:28,000 Kelkfoje homoj skribos stuff kiel "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Tio estas speco de belaj sed ankaŭ ne- 157 00:11:32,000 --> 00:11:35,000 ke tio ne faras la diferencon inter dirante punktoj aŭ ne. 158 00:11:35,000 --> 00:11:41,000 Tiuj specoj de komentoj estas nur ha, ha. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> Je ĉi tiu punkto, ni komencu labori pri la problemo Ŝanĝu 3 sekcio de demandoj. 161 00:11:48,000 --> 00:11:52,000 Se vi infanoj tiri ĉi denove, 162 00:11:52,000 --> 00:11:55,000 kiel kun lasta semajno, ni ne tuj rigardi la mallongaj en ĉi tiu sekcio. 163 00:11:55,000 --> 00:12:00,000 Ni lasu vin infanoj fari tion en via propra tempo kaj paroli pri la demandoj. 164 00:12:00,000 --> 00:12:05,000 Sed nun en ĉi tiu sekcio ni pasigos iom pli da tempo 165 00:12:05,000 --> 00:12:11,000 parolas malpli de la kodigo fundamentojn 166 00:12:11,000 --> 00:12:15,000 kiel ni faris pasintsemajne, kaj anstataŭe, ni tuj enfokusigi pli en 167 00:12:15,000 --> 00:12:22,000 iom pli de la teorio, do paroli pri duuma serĉo por poste ordigi. 168 00:12:22,000 --> 00:12:27,000 De tiuj el vi, kiuj estis sekvante kune kun la prelego, 169 00:12:27,000 --> 00:12:30,000 povas iu donas al mi recap de kio la diferenco estas 170 00:12:30,000 --> 00:12:35,000 inter duuma serĉo kaj lineara serĉo? 171 00:12:35,000 --> 00:12:37,000 Kio okazas? Certe. 172 00:12:37,000 --> 00:12:42,000 Lineara serĉo serĉoj tra ĉiu ero en la ordo listo 173 00:12:42,000 --> 00:12:45,000 unu post la alia per unu post unu post alia, 174 00:12:45,000 --> 00:12:50,000 kaj duuma serĉo dividas la listo en 2 grupoj, 175 00:12:50,000 --> 00:12:57,000 ĉekojn se la klavoj valoro kiun vi sercxas, estas pli granda ol aŭ malpli ol la mezpunkto valoro 176 00:12:57,000 --> 00:13:00,000 ke vi ĵus trovita, kaj se ĝi estas malpli ol, ĝi iras kun la suba listo 177 00:13:00,000 --> 00:13:03,000 kaj tiam dividu tion denove, ĉu la sama funkcio 178 00:13:03,000 --> 00:13:07,000 tuta vojo malsupren ĝis ĝi trovas la mezpunkto esti egala al la valoro mem. 179 00:13:07,000 --> 00:13:10,000 Ĝuste. 180 00:13:10,000 --> 00:13:12,000 >> Kial ni zorgas? 181 00:13:12,000 --> 00:13:20,000 Kial ni parolas pri duuma serĉo kontre lineara serĉo? 182 00:13:20,000 --> 00:13:22,000 Yeah. 183 00:13:22,000 --> 00:13:24,000 Duuma estas multe pli rapida, do se vi duoble la grandeco de la problemo 184 00:13:24,000 --> 00:13:27,000 prenas pli paŝo anstataŭ duobla. 185 00:13:27,000 --> 00:13:29,000 Ekzakte. 186 00:13:29,000 --> 00:13:31,000 Tio estas granda respondo. 187 00:13:31,000 --> 00:13:36,000 Lineara serĉo tre kontrolanta unu ero en tempo, 188 00:13:36,000 --> 00:13:39,000 kaj kiel ni vidis en la unua tago de prelego 189 00:13:39,000 --> 00:13:42,000 Kiam David iris tra lian telefonon libro Ekzemplo 190 00:13:42,000 --> 00:13:45,000 kaj ŝirita el unu paĝo de la telefono libro samtempe 191 00:13:45,000 --> 00:13:47,000 Kaj gardis fari tion denove kaj denove kaj denove, 192 00:13:47,000 --> 00:13:51,000 ĝi tuj konduki lin vere longa tempo por trovi iun en la telefono libro, 193 00:13:51,000 --> 00:13:55,000 krom se, kompreneble, li serĉis iun je la komenco de la alfabeto. 194 00:13:55,000 --> 00:14:00,000 Kun duuma serĉo, vi povas iri multe pli rapida, 195 00:14:00,000 --> 00:14:05,000 kaj ne nur duoble pli rapida aŭ 3 fojoj tiom rapide aŭ 4 fojojn tiel rapide. 196 00:14:05,000 --> 00:14:13,000 Sed la problemo ricevas pli kaj pli kaj pli malgrandaj multe pli rapida. 197 00:14:13,000 --> 00:14:17,000 Por ilustri tion, ni devos komenci paroli pri tio, kio okazas 198 00:14:17,000 --> 00:14:21,000 kiam ni skribas duuma serĉo. 199 00:14:21,000 --> 00:14:27,000 La problemo je mano estas ke se mi havas aron de nombroj, 200 00:14:27,000 --> 00:14:40,000 diri, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 kaj poste 9 kun ton de _0s_ post ĝi, 202 00:14:47,000 --> 00:14:52,000 ni volas povi deĉifri vere rapide kio estas en 203 00:14:52,000 --> 00:14:57,000 ĉi tabelo de nombroj. 204 00:14:57,000 --> 00:15:00,000 Mi konas ĉi ŝajnas iom stulta kaj iom elpensita, 205 00:15:00,000 --> 00:15:02,000 ĉar nun estas. 206 00:15:02,000 --> 00:15:05,000 Ni havas tabelo kiu ne havas tre multajn elementojn en ĝi, 207 00:15:05,000 --> 00:15:08,000 kaj se mi demandos de vi elŝeligi ĉu aŭ ne 208 00:15:08,000 --> 00:15:11,000 23 estas en la tabelo, vi povas fari tion sufiĉe rapide 209 00:15:11,000 --> 00:15:16,000 nur rigardante ĉe tio kaj diras al mi jes aŭ ne. 210 00:15:16,000 --> 00:15:20,000 La analoga al konsideri estas imagi se ĉi estis, diru, 211 00:15:20,000 --> 00:15:27,000 an Excel kun 10.000 vicoj, 20.000 vicoj. 212 00:15:27,000 --> 00:15:31,000 Kompreneble, vi povas fari la komandon F aŭ la kontrolo F kaj rigardu ion supren. 213 00:15:31,000 --> 00:15:33,000 Vi povas ankaŭ uzi la filtriloj kaj la serĉo stuff, 214 00:15:33,000 --> 00:15:37,000 sed se vi devis rigardi tra tiu dosiero linio por linio por linio, 215 00:15:37,000 --> 00:15:40,000 ĝi prenus vin longan tempon por trovi ĝin. 216 00:15:40,000 --> 00:15:42,000 Estas ia kiel en la telefono libro ekzemplo, ankaŭ, kie 217 00:15:42,000 --> 00:15:44,000 neniu rigardas tra telefono libro unu paĝo samtempe. 218 00:15:44,000 --> 00:15:47,000 Tipe, ili malfermu ĝin al la mezo, 219 00:15:47,000 --> 00:15:50,000 aŭ en la kazo de multaj telefono libroj kaj vortaroj, kie 220 00:15:50,000 --> 00:15:54,000 vi fakte havas ĝin tajpas sur la unua litero, 221 00:15:54,000 --> 00:16:01,000 vi klaki al tiu unua litero kaj malfermi kaj komenci tuj tra tie. 222 00:16:01,000 --> 00:16:03,000 >> Memorigas al mi vian nomon denove. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Kiel Sam diris, ke lineara serĉo procezo tuj estos vere malrapida, 225 00:16:11,000 --> 00:16:15,000 kaj anstataŭ kun duuma serĉo, la maniero ĉi verkoj estas ke 226 00:16:15,000 --> 00:16:21,000 ĉiufoje ni iru tra ripeto de nia serĉado algoritmo, 227 00:16:21,000 --> 00:16:27,000 ni iras al dividi la liston en la duono, esence, 228 00:16:27,000 --> 00:16:33,000 en du malgrandaj listoj. 229 00:16:33,000 --> 00:16:39,000 Kaj poste la sekvantan ripeto de la ciklo, ni dividu denove 230 00:16:39,000 --> 00:16:44,000 en aliajn pli malgrandaj listoj. 231 00:16:44,000 --> 00:16:48,000 Kiel vi povas vidi, la problemo daŭre pli kaj pli malgrandiĝas 232 00:16:48,000 --> 00:16:55,000 ĉar ni plenumas forĵetante duono de la listo ĉiun solan fojon. 233 00:16:55,000 --> 00:16:59,000 Kiel funkcias tiu forĵetas laboro? 234 00:16:59,000 --> 00:17:05,000 Ĝuste kiel memorigilo, kion ni faros, se ni komputilo 235 00:17:05,000 --> 00:17:11,000 kaj ni estis, diru, serĉante la nombro 5 en tiu ĉi listo 236 00:17:11,000 --> 00:17:15,000 estas ke ni devus elekti numeron en la mezo. 237 00:17:15,000 --> 00:17:26,000 En la mezo de tiu listo, ĉar estas 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numerojn, 238 00:17:26,000 --> 00:17:32,000 ni volas repreni la numeron aŭ ĉe la 4a pozicio aŭ ĉe la 5a pozicio, 239 00:17:32,000 --> 00:17:38,000 kaj ni volonte nomas, ke la duono de nia listo. 240 00:17:38,000 --> 00:17:42,000 Pick nombro en mezo. 241 00:17:42,000 --> 00:17:51,000 Tiam, ĝuste kiel Sam diris, ni testi por vidi se tiu nombro estas egalaj 242 00:17:51,000 --> 00:17:59,000 al la numero kiun ni volas aŭ nia dezirata nombro. 243 00:17:59,000 --> 00:18:06,000 Se estas egalaj, tiam ni trovis ĝin. Ni gajnos. 244 00:18:06,000 --> 00:18:12,000 Se ĝi ne estas egalaj, tiam estas paro de kazoj. 245 00:18:12,000 --> 00:18:15,000 La du kazoj estas ĉu la nombro devas esti pli granda ol la nombro ni rigardas, 246 00:18:15,000 --> 00:18:19,000 aŭ estas malpli ol. 247 00:18:19,000 --> 00:18:25,000 Se estas pli granda, ni movos al dekstre. 248 00:18:25,000 --> 00:18:33,000 Kaj se ĝi estas malpli, ni movi al la maldekstra. 249 00:18:33,000 --> 00:18:41,000 Kaj tiam ni ripetu la tuta procezo denove 250 00:18:41,000 --> 00:18:48,000 sur ĉu la dekstra duono aŭ la maldekstra duono de la listo. 251 00:18:48,000 --> 00:18:51,000 >> La unua problemo en la hodiaŭa sekcio estas elŝeligi 252 00:18:51,000 --> 00:18:55,000 kiel ni povas vere komenci por esprimi tion en C-kodo. 253 00:18:55,000 --> 00:18:58,000 Ni havas la _pseudocode_ tie. 254 00:18:58,000 --> 00:19:04,000 Kion ni komencos fari estas mi elsxiros tute nova spaco, 255 00:19:04,000 --> 00:19:09,000 krom cxi tiu revizio por ke ni havas ĉi tiujn notojn por poste, 256 00:19:09,000 --> 00:19:20,000 ni forviŝi ĉion ĉi, kaj poste kopii kaj alglui el la problemon aro 257 00:19:20,000 --> 00:19:26,000 ĉi tiun informon en niajn spacojn, kaj espereble tio ne rompos. 258 00:19:26,000 --> 00:19:28,000 Perfekta. 259 00:19:28,000 --> 00:19:33,000 Se vi infanoj ĉiuj faras tion, kopiu kaj algluu tiun kodon en vian novan spacon, 260 00:19:33,000 --> 00:19:43,000 en malplenan unu. 261 00:19:43,000 --> 00:19:47,000 Ni provu Daniel. Se vi tradukigi kaj ruli tiun programon, ĝi funkcias? 262 00:19:47,000 --> 00:19:49,000 Ne >> Kio ĝi diras? 263 00:19:49,000 --> 00:19:53,000 Ĝi diras la kontrolo atingas fine de ne-nula funkcio. 264 00:19:53,000 --> 00:19:55,000 Yeah, do lasu min provi kurante ĝin. 265 00:19:55,000 --> 00:19:59,000 Ĉu vi infanoj vidis ĉi tion antaŭe? Ĉu vi scias kion tio signifas? 266 00:19:59,000 --> 00:20:01,000 Konsentite, ni elsekigi ĉi iom. 267 00:20:01,000 --> 00:20:10,000 Oni diras en file.c on line 9, kolumno 1 ni havas eraron, kiel vi diris, 268 00:20:10,000 --> 00:20:16,000 kaj ĝi diras ke ĝi estas devenaj el la eraro averto kaj la reveno tipo averto. 269 00:20:16,000 --> 00:20:18,000 Ĝi aspektas kiel io okazas kun la reveno tipo, kiu havas sencon. 270 00:20:18,000 --> 00:20:21,000 Ni havas ne-malplena funkcio, kio signifas, ke ni havas funkcio 271 00:20:21,000 --> 00:20:24,000 ke ne revenas malplena. 272 00:20:24,000 --> 00:20:27,000 Al malplena funkcio estas tiu kiu aspektas jene: 273 00:20:27,000 --> 00:20:35,000 void foo (), kaj ĝi estas dezerta pro la reveno tipo estas malplena, 274 00:20:35,000 --> 00:20:38,000 kiu signifas ke se ni havis ion ĉi tie 275 00:20:38,000 --> 00:20:45,000 kiel reveno 1, ni volas havi tradukilon eraro por ĉi tio. 276 00:20:45,000 --> 00:20:49,000 Tamen, ni havi ne-nula funkcio. 277 00:20:49,000 --> 00:20:51,000 Nia ne-malplena funkcio en ĉi tiu kazo estas nia serĉo funkcio 278 00:20:51,000 --> 00:20:56,000 ĉar ĝi havas reveno tipo de bool. 279 00:20:56,000 --> 00:20:59,000 Kiam ĝi estas diri ke la kontrolo atingas la finon de ne-malplena funkcio, 280 00:20:59,000 --> 00:21:02,000 estas ĉar serĉo ne havas return. 281 00:21:02,000 --> 00:21:04,000 Oni ne reveni nenion de tipo bool. 282 00:21:04,000 --> 00:21:09,000 >> Ni povas ripari tion, kaj kion vi opinias infanoj 283 00:21:09,000 --> 00:21:13,000 serĉo devus reveni defaŭlte? 284 00:21:13,000 --> 00:21:16,000 Kio estu la defaŭlta reveno valoro de serĉo? 285 00:21:16,000 --> 00:21:19,000 Ĉar tio kion ni povas meti je la fino. 286 00:21:19,000 --> 00:21:21,000 Charlotte, ĉu vi havas iun-? 287 00:21:21,000 --> 00:21:23,000 Vera aŭ falsa? >> Vera aŭ malvera. 288 00:21:23,000 --> 00:21:26,000 Kiun? 289 00:21:26,000 --> 00:21:28,000 Falsaj. Mi ne scias. 290 00:21:28,000 --> 00:21:30,000 Falsa? Ni provu ĝin. 291 00:21:30,000 --> 00:21:32,000 Kial vi diras reveno falsa? Tio estas granda intuicio. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Mi ne scias. 293 00:21:35,000 --> 00:21:39,000 Ni tuj revenos malvera en ĉi tiu kazo ĉar ĉi estos nia default 294 00:21:39,000 --> 00:21:44,000 se ial la listo estas malplena aŭ la nadlo 295 00:21:44,000 --> 00:21:46,000 ke ni serĉas ne ekzistas. 296 00:21:46,000 --> 00:21:50,000 Tiam ĉe la fino, se ni ne revenas vera antaŭe en ĉi tiu funkcio, 297 00:21:50,000 --> 00:21:55,000 ni ĉiam scias, ke ĉi tiu funkcio diros nope, ne en la tabelo. 298 00:21:55,000 --> 00:21:58,000 Ne en la fojnamaso. 299 00:21:58,000 --> 00:22:03,000 Nun se ni tradukigi kaj ruli ĝin-mi savos tiun do ni povas tiri gxin. 300 00:22:03,000 --> 00:22:08,000 Nun se ni tradukigi kaj ruli nia programo, verko. 301 00:22:08,000 --> 00:22:12,000 Nia sola iom prompto. 302 00:22:12,000 --> 00:22:20,000 Se mi batis 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Ĝi ne presi ion. Ĝi aspektas kiel ĉiu finiĝis bone. 304 00:22:25,000 --> 00:22:35,000 Ni devas plenigi tiun in 305 00:22:35,000 --> 00:22:39,000 Ni parolis pri la algoritmo en _pseudocode_ iom antaŭe. 306 00:22:39,000 --> 00:22:44,000 Mi vidu, krom cxi tiu, 307 00:22:44,000 --> 00:22:49,000 kaj mi tiri ke algoritmo reen denove. 308 00:22:49,000 --> 00:22:51,000 Ni batis this guy. Nope. 309 00:22:51,000 --> 00:22:58,000 Tie ĝi estas. 310 00:22:58,000 --> 00:23:03,000 Kiel ni faru tion? 311 00:23:03,000 --> 00:23:11,000 Kio estus bona strategio por dividi ĉi tiun kodon? 312 00:23:11,000 --> 00:23:16,000 Vi devas elekti numeron en la mezo. 313 00:23:16,000 --> 00:23:23,000 Kiel oni prenas numeron en la mezo de tabelo? 314 00:23:23,000 --> 00:23:25,000 Ajna sugestojn? 315 00:23:25,000 --> 00:23:27,000 [Studenta] Strlen dividita per 2. 316 00:23:27,000 --> 00:23:32,000 Strlen dividita per 2. Tio estas granda. 317 00:23:32,000 --> 00:23:35,000 Strlen verkoj kun specialaj specoj de tabeloj. 318 00:23:35,000 --> 00:23:38,000 Kio specoj de tabeloj? 319 00:23:38,000 --> 00:23:44,000 String arrays, karaktero tabeloj. 320 00:23:44,000 --> 00:23:48,000 Estas tiu sama speco de koncepto ke ni volas apliki, 321 00:23:48,000 --> 00:23:52,000 sed ni ne povas uzi strlen ĉar ni ne havas aron de signoj. 322 00:23:52,000 --> 00:23:55,000 Ni havas aron da ints. 323 00:23:55,000 --> 00:23:58,000 Sed kion signifas strlen akiri por ni? 324 00:23:58,000 --> 00:24:01,000 Ĉu vi scias kio alvenas por ni? 325 00:24:01,000 --> 00:24:03,000 [Studenta] Strlen gets ni la longa. 326 00:24:03,000 --> 00:24:05,000 Ekzakte, alvenas ni la longa. 327 00:24:05,000 --> 00:24:09,000 Strlen ricevas la longo de la tabelo por ni. 328 00:24:09,000 --> 00:24:14,000 >> Kiel ni atingas ke en nia duuma serĉo programo? 329 00:24:14,000 --> 00:24:18,000 Kiel vi atingas la longecon de tabelo? 330 00:24:18,000 --> 00:24:20,000 [Studenta] Strlen? 331 00:24:20,000 --> 00:24:25,000 Vi povas ricevi la longo de adekvate formatita C string array kun strlen. 332 00:24:25,000 --> 00:24:31,000 La problemo, tamen, estas ke ni ne havas ĉenon tabelo. 333 00:24:31,000 --> 00:24:36,000 Se ni retrorigardas al tiu kodo, ni havas ĉi entjero tabelo. 334 00:24:36,000 --> 00:24:38,000 Kiel ni scias, kiel longe estas? 335 00:24:38,000 --> 00:24:44,000 [Studenta] Ĉu estas ekvivalenta por fina punkto, kiel int l aŭ ion? 336 00:24:44,000 --> 00:24:49,000 Ĝi rezultas tie fakte ne estas, kaj tial en maniero, tio estas 337 00:24:49,000 --> 00:24:52,000 unu el tiuj aĵoj kiuj estas nur bona scii pri C, 338 00:24:52,000 --> 00:24:57,000 ke ne ekzistas maniero por ricevi la longo de tabelo 339 00:24:57,000 --> 00:24:59,000 se ĉio, kion mi donos al vi estas la tabelo. 340 00:24:59,000 --> 00:25:02,000 La kialo funkcias kun kordoj, la kialo strlen verkoj, 341 00:25:02,000 --> 00:25:06,000 estas ĉar se cxeno estas taŭge formatita, 342 00:25:06,000 --> 00:25:12,000 ĝi havos tiu speciala \ 0 karakteron al la fino. 343 00:25:12,000 --> 00:25:16,000 >> Vi povas ankaŭ imagi, se vi havas netaŭge formatan kordoj 344 00:25:16,000 --> 00:25:20,000 kaj ne estas \ 0 karaktero tie, tiam la tuta afero ne funkcias. 345 00:25:20,000 --> 00:25:22,000 [Studenta] Ĉu vi povas aldoni la \ 0? 346 00:25:22,000 --> 00:25:24,000 Ni povis en ĉi tiu kazo. 347 00:25:24,000 --> 00:25:29,000 Ni povus aldoni ian \ 0 348 00:25:29,000 --> 00:25:33,000 aŭ ia signifante karaktero kaj tiam uzas tiun. 349 00:25:33,000 --> 00:25:36,000 Sed tio ne estas sufiĉe tuj labori 350 00:25:36,000 --> 00:25:40,000 ĉar la \ 0 estas por char tipo, 351 00:25:40,000 --> 00:25:43,000 kaj tie ni havas ints. 352 00:25:43,000 --> 00:25:46,000 La alia afero estas, se ni devis uzi specialan valoron 353 00:25:46,000 --> 00:25:49,000 kiel -1 por marki la finon de tabelo 354 00:25:49,000 --> 00:25:54,000 tiam ni neniam povus stoki -1 en nia entjero tabeloj. 355 00:25:54,000 --> 00:25:56,000 Ni ŝatus meti ilin. 356 00:25:56,000 --> 00:26:00,000 Rezultas ke la sola maniero por ricevi la longo 357 00:26:00,000 --> 00:26:03,000 de tabelo en C estas vere memoras 358 00:26:03,000 --> 00:26:08,000 kiam vi starigis ĝin kaj poste pasi ĝin tie kun la tabelo 359 00:26:08,000 --> 00:26:14,000 por ke kiam ajn mi havas funkcion kiu tuj fari iun laboron 360 00:26:14,000 --> 00:26:18,000 sur tabelo de entjeroj aŭ kaleŝegoj aŭ duoblajn aŭ kion vi havas, 361 00:26:18,000 --> 00:26:22,000 Mi ankaŭ devas doni la funkcio la tabelo de longo, 362 00:26:22,000 --> 00:26:26,000 kaj tio estas ĝuste kion ni faris ĉi tie en la serĉo funkcio. 363 00:26:26,000 --> 00:26:30,000 Se vi rigardas, kion ni faris kiam ni pasas en nia tabelo tie, 364 00:26:30,000 --> 00:26:36,000 ni ankaŭ pasas en la longitudo, la grandeco. 365 00:26:36,000 --> 00:26:41,000 Simple okazas ke ni nomas tiun variablon tie, 366 00:26:41,000 --> 00:26:43,000 ĉi parametro aŭ argumento. 367 00:26:43,000 --> 00:26:46,000 Ĉi tio estas nomita funkcio de argumento listo aŭ parametro listo, 368 00:26:46,000 --> 00:26:51,000 kaj ĉi tiuj estas ankaŭ nomita argumentoj aŭ parametroj. 369 00:26:51,000 --> 00:26:53,000 Homoj uzas malsamajn terminojn en malsamaj epokoj. 370 00:26:53,000 --> 00:26:55,000 Mi kelkfoje interŝanĝi ilin mi mem. 371 00:26:55,000 --> 00:27:00,000 Simple tiel okazas ke ĉi variablo tie nomata simile 372 00:27:00,000 --> 00:27:03,000 al ĉi # difini ĝis ĉi tie. 373 00:27:03,000 --> 00:27:06,000 Sed ili ne estas la sama aĵo. 374 00:27:06,000 --> 00:27:11,000 La majuskloj gravas. 375 00:27:11,000 --> 00:27:14,000 >> Se vi rigardas kio okazas cxi tie, ni deklaras 376 00:27:14,000 --> 00:27:18,000 nia int tabelo, kiu ni nomis nombroj. 377 00:27:18,000 --> 00:27:23,000 Ni donis ĝin nia grandeco, kiu korespondas al nia # difini ĉe la supro. 378 00:27:23,000 --> 00:27:27,000 Ĝi tuj estos 8. 379 00:27:27,000 --> 00:27:35,000 Kaj poste kiam ni tiam nomita nia serĉo funkcion sube, 380 00:27:35,000 --> 00:27:40,000 ni pasas en la numero ni volas serĉi, kiun ni instigis, 381 00:27:40,000 --> 00:27:43,000 alveninta de la uzanto. 382 00:27:43,000 --> 00:27:46,000 Ni pasas en la tabelo, ĉi nombroj, 383 00:27:46,000 --> 00:27:51,000 kaj poste ni ankaŭ devas pasi en la grandeco de la tabelo, 384 00:27:51,000 --> 00:27:57,000 kaj tiam la valoro de grandeco 8 gets stokita 385 00:27:57,000 --> 00:28:01,000 aŭ pasis al ĉi entjera variablo nomas grandecon. 386 00:28:01,000 --> 00:28:08,000 Ni havas la grandecon de la tabelo. 387 00:28:08,000 --> 00:28:11,000 Nun se ni reiru al kio ni parolas pri antaŭe, 388 00:28:11,000 --> 00:28:14,000 Mi kredas Missy enportis la punkto ke kion ni bezonas por fari estas atingi la longo de la tabelo 389 00:28:14,000 --> 00:28:20,000 kaj dividu per 2, kaj kiu donos al ni la mezpunkto. 390 00:28:20,000 --> 00:28:22,000 Ni vidu. 391 00:28:22,000 --> 00:28:25,000 Ĉu mi povas havi iu skribos ĉi tion kaj savos ĝin en lian spacon? 392 00:28:25,000 --> 00:28:27,000 Kion pri Leila? 393 00:28:27,000 --> 00:28:31,000 Ĉu mi povas havi vin skribi tion en? 394 00:28:31,000 --> 00:28:35,000 Skribu la unuan linion, kie vi prenas la longo de la tabelo kaj akiri la mezpunkto 395 00:28:35,000 --> 00:28:41,000 kaj stoki ĝin en nova variablo. 396 00:28:41,000 --> 00:28:44,000 Mi donos al vi paro sekundoj. Ĉu vi pretas? 397 00:28:44,000 --> 00:28:46,000 [Studenta inaudible] 398 00:28:46,000 --> 00:28:50,000 Certe, mi povus esti vi kalkuli la mezpunkto 399 00:28:50,000 --> 00:28:55,000 de la fojnamaso tabelo interne de la serĉo funkcio 400 00:28:55,000 --> 00:29:03,000 uzante la longo de la fojnamaso tabelo, kiu estas la grandeco variablo? 401 00:29:03,000 --> 00:29:08,000 Nenio malfacila tie. 402 00:29:08,000 --> 00:29:12,000 [Leila] Just grandeco / 2 kaj nur- 403 00:29:12,000 --> 00:29:17,000 Per ĝi, kaj batis la klako sur la butono tien je la supro, 404 00:29:17,000 --> 00:29:19,000 kaj ni treni ĝin. 405 00:29:19,000 --> 00:29:22,000 Perfekta. 406 00:29:22,000 --> 00:29:28,000 Tie ni iru. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Kiel estas, estos ĉi kompili? 408 00:29:30,000 --> 00:29:32,000 [Leila] Ne, ĝi bezonas esti pli alta. 409 00:29:32,000 --> 00:29:34,000 [Nate] Yeah, do kion ni bezonas por fari? 410 00:29:34,000 --> 00:29:36,000 [Leila] Kiel int mezpunkto aŭ iu. 411 00:29:36,000 --> 00:29:41,000 Awesome. Yeah, ni faru tion, int mezpunkto = grandeco. 412 00:29:41,000 --> 00:29:44,000 Ĉu ĉi kompili? 413 00:29:44,000 --> 00:29:47,000 Ni forigu ĉi tiun komenton kaj akiri ĝin de la vojo. 414 00:29:47,000 --> 00:29:50,000 Kio ne kompili pri tio? 415 00:29:50,000 --> 00:29:52,000 Ni ne faras ion per entjero, 416 00:29:52,000 --> 00:29:55,000 do ni bezonas por presi ĝin aŭ io kiel tio. 417 00:29:55,000 --> 00:29:58,000 Yeah, precize. 418 00:29:58,000 --> 00:30:00,000 Ni ricevas neuzitaj variablo. 419 00:30:00,000 --> 00:30:02,000 Kion alian ne tuj funkcias pri tio? 420 00:30:02,000 --> 00:30:06,000 Mi opinias, ke vi diris ion, Sam. Punktokomojn. 421 00:30:06,000 --> 00:30:08,000 Yeah, mi mankas tiuj punktokomojn. 422 00:30:08,000 --> 00:30:14,000 Ĝi tuj estos konstanta afero dum la fluo de la termino. 423 00:30:14,000 --> 00:30:17,000 La fina afero mi faras estas mi metos kelkajn blanka spaco ambauxflanke 424 00:30:17,000 --> 00:30:23,000 de ĉi tiu operatoro tie, ĉar tio estas tipe kiel ni faros ĝin 425 00:30:23,000 --> 00:30:26,000 laŭ nia stilo gvidas. 426 00:30:26,000 --> 00:30:29,000 Ni havas la mezpunkto de nia tabelo. 427 00:30:29,000 --> 00:30:32,000 Nun se ni memoras reen al nia algoritmo, 428 00:30:32,000 --> 00:30:37,000 kio estis la dua ŝtupo, ke ni devis fari iam ni havos la mezpunkto? 429 00:30:37,000 --> 00:30:42,000 [Studenta] Se estas granda [inaudible]. 430 00:30:42,000 --> 00:30:48,000 Yeah, do ni devas fari ian komparon, kaj kion ni komparas tie? 431 00:30:48,000 --> 00:30:53,000 Vi diris se ĝi estas pli granda ol. Kio estas en tiu frazo raportante al? 432 00:30:53,000 --> 00:30:57,000 La nombro kiu venas supren, se tio estas pli granda ol la mezpunkto, do iru al la tabelo? 433 00:30:57,000 --> 00:31:05,000 Precize, do la nombro kiu venas supren, kiam ni- 434 00:31:05,000 --> 00:31:10,000 La nadlo, do ni komparas al la nadlo, 435 00:31:10,000 --> 00:31:12,000 kaj kion ni komparas kontraŭ la nadlo? 436 00:31:12,000 --> 00:31:15,000 Ĉar la kudrilo estas kion ni serĉas. 437 00:31:15,000 --> 00:31:18,000 Ni kompari ĝin por atingi la mezpunkto. 438 00:31:18,000 --> 00:31:21,000 >> Sed ne havas sencon por kontroli por vidi 439 00:31:21,000 --> 00:31:27,000 se nadlo = mezpunkto? 440 00:31:27,000 --> 00:31:32,000 Ĉu tio havas sencon? 441 00:31:32,000 --> 00:31:35,000 Ĉu neniu malkonsentas? 442 00:31:35,000 --> 00:31:40,000 Ni provu, se (nadlo == mezpunkto). 443 00:31:40,000 --> 00:31:42,000 [Studenta] Do printf vi trovis ĝin. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Ni trovis! \ N"); 445 00:31:51,000 --> 00:31:56,000 Alie-I'm tuj komenci fari ion malsaman tie. 446 00:31:56,000 --> 00:32:00,000 Mi tuj komenci metante krampoj ĉirkaŭ se deklaroj tutan tempon 447 00:32:00,000 --> 00:32:05,000 nur ĉar se ni adicias pli aĵoj, tiam 448 00:32:05,000 --> 00:32:07,000 ni ne atingas la tradukiloj. 449 00:32:07,000 --> 00:32:09,000 Yeah, Sam. Vi havas punkton. 450 00:32:09,000 --> 00:32:12,000 La problemo estas ke mezpunkto reprezentas pozicion en la tabelo, 451 00:32:12,000 --> 00:32:15,000 sed vi povas akiri ĝin por reprezenti la valoron en tiu pozicio de la tabelo. 452 00:32:15,000 --> 00:32:17,000 Tio estas granda punkto. 453 00:32:17,000 --> 00:32:19,000 Ĉu ĉiuj auxskultu, kion Sam diris? 454 00:32:19,000 --> 00:32:22,000 Li diris ke mezpunkto kiel estas 455 00:32:22,000 --> 00:32:28,000 reprezentas nur pozicion en la tabelo, sed ĝi ne estas la efektiva elemento en la tabelo. 456 00:32:28,000 --> 00:32:30,000 Se vi pensas pri la kodo kiel skribita ĝuste nun, 457 00:32:30,000 --> 00:32:35,000 se ni rigardas tiun tabelo cxi tie, kiu havas 8 elementoj en ĝi, 458 00:32:35,000 --> 00:32:39,000 kio estas la valoro de mezpunkto tuj estos en tiu funkcio? 459 00:32:39,000 --> 00:32:41,000 [Studenta] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Se ni serĉas la numero 4 - 462 00:32:51,000 --> 00:32:54,000 kaj ni povas nur funkcii ĉi kodo kaj metis iom malĝoja vizaĝo ĉi tien 463 00:32:54,000 --> 00:32:58,000 ĉar ni ne trovis ĝin-se ni kuras ĉi kodo 464 00:32:58,000 --> 00:33:04,000 kiel estas nun, alŝuti ĝin, konstruaĵo, lasu min rulumi malsupren, 465 00:33:04,000 --> 00:33:09,000 kaj se ni serĉas la numero 4, 466 00:33:09,000 --> 00:33:18,000 ni trovis ĝin, sed ni ne ricevis ĉi tion al printf jes. 467 00:33:18,000 --> 00:33:23,000 Unu kialo estas ke ni ne revenis vera, 468 00:33:23,000 --> 00:33:26,000 sed ni vere trovos la numero 4? 469 00:33:26,000 --> 00:33:28,000 Kaj Sam diras ne. 470 00:33:28,000 --> 00:33:31,000 Kion ni trovos? 471 00:33:31,000 --> 00:33:35,000 Ni vere trovis la mezpunkto, kiu se ni rigardas la tabelo cxi tie, 472 00:33:35,000 --> 00:33:38,000 ĝi tuj estos la elemento en indekso 4 kiu ni rigardas, 473 00:33:38,000 --> 00:33:42,000 kiu estas 23. 474 00:33:42,000 --> 00:33:46,000 >> Kiel ni fakte havas tiun elementon en la mezpunkto 475 00:33:46,000 --> 00:33:48,000 kaj ne nur la mezpunkto mem? 476 00:33:48,000 --> 00:33:52,000 [Studenta] Ni enirus char ia? 477 00:33:52,000 --> 00:33:55,000 Kion tio do, ĝuste pro scivolemo? 478 00:33:55,000 --> 00:33:57,000 Ĉu vi povas ellabori iom pli? 479 00:33:57,000 --> 00:34:02,000 Vi devas transformi la pozicio en la kalkulon, 480 00:34:02,000 --> 00:34:05,000 tiel vi devas fari iun rilaton-Mi kredas ke estas char, sed eble ne. 481 00:34:05,000 --> 00:34:07,000 Yeah, tio estas bona punkto. 482 00:34:07,000 --> 00:34:12,000 Ni estis farante multe da ĉi konvertanta pozicioj en signoj, tiuj gravuloj, 483 00:34:12,000 --> 00:34:14,000 en la unuaj du problemo aroj. 484 00:34:14,000 --> 00:34:18,000 Rezultas, ke ĉi tie, ĉi tiu estas preskaŭ simila al 485 00:34:18,000 --> 00:34:24,000 aliru la th,-a karaktero ene de kordoj, se tiu havas sencon. 486 00:34:24,000 --> 00:34:30,000 Ĉi tie ni volas aliri la mezpunkto elemento. 487 00:34:30,000 --> 00:34:34,000 Kiel ni faru tion? 488 00:34:34,000 --> 00:34:39,000 Kevin, ĉu vi havas sugeston kiel ni povus fari tion? 489 00:34:39,000 --> 00:34:44,000 Vi povus fari fojnamaso, malferma krampo, meze, fermita krampo. 490 00:34:44,000 --> 00:34:46,000 Ĉu vi povas skribi ke por ni? 491 00:34:46,000 --> 00:34:51,000 Konservu ĝin en ĉi tie, kaj ni tiri ke ĝis. 492 00:34:51,000 --> 00:34:56,000 Ni rigardis tiun linion 9, 493 00:34:56,000 --> 00:34:59,000 kaj ni rimarki ke ni ne volas kompari la nadlo al la mezpunkto, 494 00:34:59,000 --> 00:35:03,000 sed anstataŭe, ni volas kompari la nadlo 495 00:35:03,000 --> 00:35:07,000 al la elemento en la pozicio mezpunkto ene niaj fojnamaso tabelo. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Tie ni iru. 498 00:35:12,000 --> 00:35:15,000 Yeah, kiu similas sufiĉe bona, se (nadlo == fojnamaso [mezpunkto]). 499 00:35:15,000 --> 00:35:18,000 Ni trovis ŝin. 500 00:35:18,000 --> 00:35:22,000 Nun se ni kuras la kodo-we'll back up iom- 501 00:35:22,000 --> 00:35:26,000 kompilas, ĝi kuras, kaj nun se ni serĉas 4, 502 00:35:26,000 --> 00:35:30,000 ni ne trovis ĝin ĉar nun ni vere ricevas la numeron 23. 503 00:35:30,000 --> 00:35:33,000 Ni nun estas la valoro 23, kaj tio estas kion ni komparas al nia nadlo. 504 00:35:33,000 --> 00:35:35,000 Sed tio estas bona. Tio estas paŝo en la ĝustan direkton. 505 00:35:35,000 --> 00:35:37,000 >> Tion ni provas fari. 506 00:35:37,000 --> 00:35:40,000 Ni ne provas kompari la nadlo kontraŭ pozicioj en la tabelo 507 00:35:40,000 --> 00:35:44,000 sed prefere kontraŭ la efektiva elementoj en la tabelo. 508 00:35:44,000 --> 00:35:49,000 Se ni retrorigardas denove nun dum la venonta paŝo en nia algoritmo, 509 00:35:49,000 --> 00:35:51,000 kio estas la sekva paŝo? 510 00:35:51,000 --> 00:35:57,000 Leila jam menciis mallonge. 511 00:35:57,000 --> 00:36:00,000 [Studenta] Kontrolu por vidi se ĝi estas pli granda ol aŭ malpli ol kaj poste decidu kiun vojon movi. 512 00:36:00,000 --> 00:36:03,000 [Nate] Jes, do kiel tio ni faras tion? 513 00:36:03,000 --> 00:36:07,000 Ĉu vi povas meti en iu-I'll savi ĉi revizio, 514 00:36:07,000 --> 00:36:13,000 kaj poste, se vi metas en iuj linioj kiuj faros tion. 515 00:36:13,000 --> 00:36:15,000 Yeah, Charlotte. >> Mi havas demandon. 516 00:36:15,000 --> 00:36:19,000 Devus ne estus mezpunkto - 1 ĉar la unua afero estas 517 00:36:19,000 --> 00:36:26,000 ĝi estas 0 indeksita, do se ni metas 4, kiu estas ne reale la karaktero ni serĉas? 518 00:36:26,000 --> 00:36:30,000 Jes, kaj la alia problemo kun tio estas- 519 00:36:30,000 --> 00:36:35,000 ke estas granda kaptaĵo, ĉar kio tuj finos okazas eble 520 00:36:35,000 --> 00:36:42,000 se ni plenumas movante kaj ni ne cxiam ĝustigi komence? 521 00:36:42,000 --> 00:36:46,000 Mi supozas, kion ni povus fini faras provas aliri 522 00:36:46,000 --> 00:36:49,000 la elemento en la 8a pozicio de la tabelo, 523 00:36:49,000 --> 00:36:53,000 kiu en ĉi tiu kazo ne ekzistas. 524 00:36:53,000 --> 00:36:56,000 Ni volas fari ian librotenado por la fakto 525 00:36:56,000 --> 00:36:59,000 ke ni havas kelkajn nulo indeksado. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Pardonu, mi volis diri mezpunkto - 1 en rektaj krampoj. 527 00:37:05,000 --> 00:37:08,000 Ni povas fari tion. 528 00:37:08,000 --> 00:37:10,000 Ni revenos al tiu demando en nur iom. 529 00:37:10,000 --> 00:37:13,000 Iam ni komencas atingi la realan looping, 530 00:37:13,000 --> 00:37:16,000 jen kiam ni vere vidas ĉi venos en ludo. 531 00:37:16,000 --> 00:37:21,000 Por la momento, ni povas fari tion, sed vi estas tute prava. 532 00:37:21,000 --> 00:37:28,000 Ke nulo indeksado havos efikon, ke ni bezonas klarigi. 533 00:37:28,000 --> 00:37:30,000 Ni vidu. 534 00:37:30,000 --> 00:37:34,000 >> Kiom estas la pli granda ol kaj malpli ol-? 535 00:37:34,000 --> 00:37:36,000 [Studenta] I get kiel fari la plej grandan ol kaj malpli ol parto. 536 00:37:36,000 --> 00:37:41,000 Mi nur ne estis certa kio presi se vi trovas ke estas malpli ol la fojnamaso mezpunkto aŭ pli granda ol. 537 00:37:41,000 --> 00:37:43,000 Ĉi tie mi povas savi kion I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Jes, se vi konservos kion vi havas, kaj ni treni ĝin. 539 00:37:47,000 --> 00:37:49,000 Tie ni iru. 540 00:37:49,000 --> 00:37:51,000 [Studenta] Kaj mi metis demandon markojn por kio mi ne scias. 541 00:37:51,000 --> 00:37:54,000 [Nate] Tio aspektas granda. 542 00:37:54,000 --> 00:37:58,000 Jen ni havas demandon markoj ĉar ni ankoraŭ ne scias 543 00:37:58,000 --> 00:38:06,000 kion ni tuj sufiĉe fari ankoraŭ. 544 00:38:06,000 --> 00:38:12,000 Kion ni volas fari-oops, ni havas kelkajn krampoj ĉiuj funky nin. 545 00:38:12,000 --> 00:38:15,000 Ni korekti tiujn krampoj. 546 00:38:15,000 --> 00:38:19,000 Tie ni iru. 547 00:38:19,000 --> 00:38:22,000 Kaj tiel kion ni volas fari, laŭ nia algoritmo, 548 00:38:22,000 --> 00:38:27,000 se ni ne trovos la nadlo? 549 00:38:27,000 --> 00:38:32,000 Diru en la kazo ke la kudrilo estas malpli ol tio, kion ni rigardis. Kevin. 550 00:38:32,000 --> 00:38:34,000 Nur rigardu la maldekstra duono. 551 00:38:34,000 --> 00:38:40,000 Bone, do ni metos komenton ĉi tie kiu diras "rigardu maldekstra duono." 552 00:38:40,000 --> 00:38:46,000 Kaj se la kudrilo estas pli granda ol la fojnamaso en la mezpunkto, kion ni volas fari? 553 00:38:46,000 --> 00:38:48,000 [Studenta] Tiam vi rigardas la dekstra duono. 554 00:38:48,000 --> 00:38:53,000 Rigardu la dekstran duonon, "rigardi dekstren duono." 555 00:38:53,000 --> 00:38:58,000 Ne tro deshilachado. 556 00:38:58,000 --> 00:39:05,000 Konsentite, do ĉe ĉi tiu punkto, aĵoj serĉas sufiĉe bone. 557 00:39:05,000 --> 00:39:13,000 La problemo kun la kodo kiel skribita estas kio? 558 00:39:13,000 --> 00:39:15,000 [Studenta] Vi ne finpunktoj por la duonoj. 559 00:39:15,000 --> 00:39:18,000 Bone, ni ne havas finpunktoj por la duonoj. 560 00:39:18,000 --> 00:39:20,000 Ni ankaŭ estas nur tuj iros tra ĉi fojon. 561 00:39:20,000 --> 00:39:23,000 Ni nur tuj rigardi unu mezpunkto. 562 00:39:23,000 --> 00:39:27,000 Ĉu la ero estas tie, aŭ ĝi ne estas. 563 00:39:27,000 --> 00:39:34,000 Por kompletigi tion, ni devos fari ian ripeto. 564 00:39:34,000 --> 00:39:39,000 Ni devas subteni ripetante ĝis ni trovos ke 565 00:39:39,000 --> 00:39:43,000 ĉu la ero estas en tie ĉar ni striktas malsupren kaj fine trovis ĝin, 566 00:39:43,000 --> 00:39:46,000 aŭ ĝi ne tien ĉar ni rigardis tra ĉiuj aĵoj 567 00:39:46,000 --> 00:39:52,000 en la taŭgan duonoj de la tabelo, kaj trovis, ke nenio estas tie. 568 00:39:52,000 --> 00:39:56,000 >> Kiam ajn ni got ĉi ripetado okazas, kion ni tuj uzos? 569 00:39:56,000 --> 00:39:58,000 [Studenta] A ciklo. 570 00:39:58,000 --> 00:40:00,000 Ia buklo. Jes. 571 00:40:00,000 --> 00:40:03,000 [Studenta] Povas fari do-dum loop kaj havas ĝin faru tion kaj poste dum 572 00:40:03,000 --> 00:40:10,000 la nadlo ne egala-I'm not sure kie mi iras kun tio. 573 00:40:10,000 --> 00:40:18,000 Sed ia kiel fari tion dum ĝin ne egala la valoro ke la eniro de la uzanto. 574 00:40:18,000 --> 00:40:21,000 Yeah, do ni vidu, kiel povus tiu skribi mem? 575 00:40:21,000 --> 00:40:23,000 Vi diris ni uzu do-dum ciklo. 576 00:40:23,000 --> 00:40:26,000 Kie la fari komenco? 577 00:40:26,000 --> 00:40:33,000 [Studenta] Ĝuste post la grandecon / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Okay, kaj kion ni tuj fari? 579 00:40:42,000 --> 00:40:44,000 Ni plenigu la posta momento. 580 00:40:44,000 --> 00:40:46,000 Kion ni faru? 581 00:40:46,000 --> 00:40:49,000 [Studenta] Do ni ne volas fari la tuton ni havas en la se parto? 582 00:40:49,000 --> 00:40:52,000 [Nate] Do ĉio ĉi stuff, granda. 583 00:40:52,000 --> 00:40:55,000 Kopiu kaj pasto. 584 00:40:55,000 --> 00:40:59,000 Ho, viro. 585 00:40:59,000 --> 00:41:03,000 Ni vidu se tio funkcias, se ni povas langeto tion. 586 00:41:03,000 --> 00:41:08,000 Bela. 587 00:41:08,000 --> 00:41:16,000 Okay, kaj ni savos ĉi tiel vi infanoj havas ĝin. 588 00:41:16,000 --> 00:41:21,000 Bone, kaj ni tuj faros ĉi tion dum- 589 00:41:21,000 --> 00:41:25,000 kio estis la dum kondiĉo vi estis post? 590 00:41:25,000 --> 00:41:31,000 [Studenta] Dum la nadlo ne egala, do kiel la ekkrio punkto. 591 00:41:31,000 --> 00:41:37,000 Sed mi ne certas precize kion tio estas ankoraŭ. 592 00:41:37,000 --> 00:41:39,000 [Nate] Jes, tio estas unu maniero por fari ĝin. 593 00:41:39,000 --> 00:41:41,000 Sam, ĉu vi havas komenton? 594 00:41:41,000 --> 00:41:43,000 [Sam] Mi memoris kiam mi rigardis la filmetoj, 595 00:41:43,000 --> 00:41:48,000 Mi prenis ekrankopio de unu el la-kiel kiam ni faris la _pseudocode_ por tio, 596 00:41:48,000 --> 00:41:52,000 estis iu rilato inter max kaj min. 597 00:41:52,000 --> 00:41:58,000 Mi kredas ke estis io kiel se max estas cxiam malpli ol min. 598 00:41:58,000 --> 00:42:00,000 Got it. 599 00:42:00,000 --> 00:42:04,000 [Sam] Aŭ kiel se max estas ne malpli ol min aŭ io simila, 600 00:42:04,000 --> 00:42:06,000 ĉar tio signifus, ke vi esplorrigardis ĉion. 601 00:42:06,000 --> 00:42:13,000 >> Yeah, do kion faras ĝi sonas kiel max kaj min estis en referenco al? 602 00:42:13,000 --> 00:42:16,000 [Sam] Valoroj ke-entjeroj kiuj tuj ŝanĝos 603 00:42:16,000 --> 00:42:18,000 relativa al kie ni metas la mezpunkto. 604 00:42:18,000 --> 00:42:20,000 Ekzakte. 605 00:42:20,000 --> 00:42:24,000 [Sam] Je tiu punkto, ĝi tuj [inaudible] kalkuli la max kaj min. 606 00:42:24,000 --> 00:42:29,000 Mezpunkto estas ĉi max kaj min ideo. 607 00:42:29,000 --> 00:42:35,000 Ĉu tio havas sencon al homoj? 608 00:42:35,000 --> 00:42:39,000 Se ni devis komenci rigardi kiel ni tuj faros ĉi ripeto, 609 00:42:39,000 --> 00:42:43,000 vi estas tute pravas ke ni volas uzi ian do-dum ciklo. 610 00:42:43,000 --> 00:42:49,000 Sed mi supozas, se ni memoras kio okazas en la loko de tiu tabelo 611 00:42:49,000 --> 00:42:53,000 kaj kio fakte okazas-I'm tuj skribos ĉi tien- 612 00:42:53,000 --> 00:42:58,000 je la unua ripeto de duuma serĉo, ni havas- 613 00:42:58,000 --> 00:43:05,000 Mi tuj uzos b kaj e al signifi la komenco. 614 00:43:05,000 --> 00:43:10,000 Kaj poste la fino de nia tabelo. 615 00:43:10,000 --> 00:43:14,000 Ni scias ke la komenco estas je 4 rajton super ĉi tie, 616 00:43:14,000 --> 00:43:18,000 kaj ni scias, ke la fino estas ĉe 108. 617 00:43:18,000 --> 00:43:23,000 Diru ni sercxas la numero 15. 618 00:43:23,000 --> 00:43:27,000 La unua fojo ni faru tion, kiel ni vidis antaŭe, 619 00:43:27,000 --> 00:43:30,000 la mezpunkto estas ĉu tuj estos 16 aŭ 23 620 00:43:30,000 --> 00:43:34,000 dependanta sur kiel ni kalkuli aferojn. 621 00:43:34,000 --> 00:43:37,000 Ekde egale dividi en la mezo donus al ni ĉi tiu spaco 622 00:43:37,000 --> 00:43:42,000 inter 16 kaj 23, ni ne povas ekvilibre dividi ĝin 623 00:43:42,000 --> 00:43:47,000 aŭ dividi ĝin kaj atingi veran mezpunkto. 624 00:43:47,000 --> 00:43:49,000 Ni rigardu 16. 625 00:43:49,000 --> 00:43:55,000 Ni rimarkas "Hej, 16> 15 kiu ni serĉas." 626 00:43:55,000 --> 00:43:59,000 Por tiam rigardi la maldekstra duono de la tabelo 627 00:43:59,000 --> 00:44:03,000 kion ni finos faras estas forĵetante 628 00:44:03,000 --> 00:44:07,000 ĉi tiu tuta supra parto 629 00:44:07,000 --> 00:44:16,000 kaj dirante, "Okay, nun nia fina punkto tuj estos ĉi tie." 630 00:44:16,000 --> 00:44:22,000 La sekva ripeto de nia ciklo, ni nun rigardas ĉi tabelo, 631 00:44:22,000 --> 00:44:25,000 efektive esti forĵetita ĉi parto ĉar nun 632 00:44:25,000 --> 00:44:30,000 se ni prenas la mezpunkto esti la diferenco inter la komenco kaj la fino, 633 00:44:30,000 --> 00:44:34,000 ni trovos nian mezpunkto esti 8, 634 00:44:34,000 --> 00:44:40,000 kiuj ni povas tiam provi 8 por vidi kie estas en rilato al la nombro ni serĉas, 635 00:44:40,000 --> 00:44:44,000 15, trovi ke 15 estas pli granda, 636 00:44:44,000 --> 00:44:49,000 do ni devas movi al la dekstra parto de la listo, 637 00:44:49,000 --> 00:44:51,000 kion ni scias ĉar ni estas homoj, kaj ni povas vidi ĝin. 638 00:44:51,000 --> 00:44:54,000 Ni scias, ke la dekstra parto tuj estos kie ni trovos ĝin, 639 00:44:54,000 --> 00:45:01,000 sed la komputilo ne scias tion, do kion ni faros estas ni reale 640 00:45:01,000 --> 00:45:04,000 esti ĉi iru, kaj nun la komenco kaj la fino 641 00:45:04,000 --> 00:45:11,000 estas la sama loko, do la mezpunkto iĝas la sola nombro en la listo en tiu punkto, 642 00:45:11,000 --> 00:45:16,000 kiu estas 15, kaj ni trovis ĝin. 643 00:45:16,000 --> 00:45:21,000 Ĉu kiu versxis iom lumigi kie ĉi tiu tuta max kaj min skribmaniero tuj, 644 00:45:21,000 --> 00:45:24,000 konservanta trako de la finpunktoj de la tabelo por elkompreni 645 00:45:24,000 --> 00:45:35,000 kiel mallarĝigi aĵoj malsupren? 646 00:45:35,000 --> 00:45:42,000 >> Kio okazus se ĉi tio ne egalan al 15 nun? 647 00:45:42,000 --> 00:45:52,000 Kio se ni serĉis 15 kaj, anstataŭe, ĉi tiu nombro estis ankaŭ 16? 648 00:45:52,000 --> 00:45:54,000 Ni ŝatus diri: "Ho, ĝi estas pli granda. 649 00:45:54,000 --> 00:45:57,000 Ni volas reiri al la maldekstra. " 650 00:45:57,000 --> 00:46:01,000 Kaj ni volas movi nian e al la dekstra, 651 00:46:01,000 --> 00:46:06,000 je kiu punkto ni havas fina punkto kiu estus konflikto. 652 00:46:06,000 --> 00:46:09,000 Ĝi ne povos serĉi plu elementoj 653 00:46:09,000 --> 00:46:13,000 ĉar nun ni havas niajn fina punkto kaj nia komenco punkto, 654 00:46:13,000 --> 00:46:16,000 nia max kaj nia min, nun spegulita. 655 00:46:16,000 --> 00:46:23,000 Ni serĉi tra la tuta tabelo. Ni ne povas trovi ion. 656 00:46:23,000 --> 00:46:27,000 Tio estas la punkto je kiu ni volas volas diri, "Konsentite, ni tuj haltos ĉi tiu algoritmo. 657 00:46:27,000 --> 00:46:34,000 Ni ne trovis nenion. Ni scias ke estas ne en ĉi tie. " 658 00:46:34,000 --> 00:46:36,000 Kiel tiu iras? 659 00:46:36,000 --> 00:46:40,000 [Studenta] Kiel ĝuste faras la komputilo ŝanĝi la fino? 660 00:46:40,000 --> 00:46:45,000 Kiel la fino finos antaŭ la komenco? 661 00:46:45,000 --> 00:46:48,000 La fino finas antaŭ la komenco 662 00:46:48,000 --> 00:46:54,000 pro la math ke ni tuj faros ĉiu tempo ni faras tion. 663 00:46:54,000 --> 00:47:00,000 La vojo ni interŝanĝi estas se vi rigardas la tre unua fojo ni faros ĉi interŝanĝo 664 00:47:00,000 --> 00:47:03,000 kie ni havas la komenco en 4 kaj la fino 665 00:47:03,000 --> 00:47:13,000 tuta vojo antaux 108 kaj nia mezpunkto, diru al la 16 - 666 00:47:13,000 --> 00:47:20,000 Mi tuj nuligi ĉi reen al 15-se ni serĉas la 15, 667 00:47:20,000 --> 00:47:25,000 ni sciis ke kion ni faris kiam ni kontrolis la 16 kaj vidis, ke gxi estis pli granda 668 00:47:25,000 --> 00:47:28,000 kaj volis forĵeti la tutan dekstran parton de la listo, 669 00:47:28,000 --> 00:47:36,000 ni vidis ke tio, kion ni volis fari estas movi ĉi TTT ĉi tie. 670 00:47:36,000 --> 00:47:44,000 Efektive, la TTT got movita al unu antaŭ la mezpunkto. 671 00:47:44,000 --> 00:47:48,000 Simile, kiam ni faris ĉi ripeto de la algoritmo 672 00:47:48,000 --> 00:47:51,000 kaj la mezpunkto estis en 8, 673 00:47:51,000 --> 00:47:55,000 ni trovis, ke 8 <15, do ni volis movi la b 674 00:47:55,000 --> 00:48:00,000 unu preter la mezpunkto. 675 00:48:00,000 --> 00:48:07,000 Nun, la komenco kaj la fino estas ambaŭ kune en ĉi 15. 676 00:48:07,000 --> 00:48:10,000 >> Se ni volas estis okazante serĉi iun alian valoron, ne 15, 677 00:48:10,000 --> 00:48:14,000 aŭ se tiu 15 estis anstataŭe estis 16, 678 00:48:14,000 --> 00:48:20,000 ni trovis ke la kaj ni volas movi unu antaŭ la mezpunkto. 679 00:48:20,000 --> 00:48:33,000 Nun la TTT estus tie spegulita malpli ol la b. 680 00:48:33,000 --> 00:48:39,000 Ni marŝas tra kiel ni vere finu kodigo ĉi tiu algoritmo. 681 00:48:39,000 --> 00:48:44,000 Ni scias, ke ni volas havi ĉi mezpunkto kalkulo. 682 00:48:44,000 --> 00:48:48,000 Ni scias ankaŭ, ke ni volas spuri la komenco kaj la fino de la tabelo 683 00:48:48,000 --> 00:48:51,000 de nia nuna tabelo do ni povas kalkuli 684 00:48:51,000 --> 00:48:56,000 kie ĉi maldekstra duono de la listo estas kaj kie la dekstra duono de la listo estas. 685 00:48:56,000 --> 00:49:03,000 Ni faras tion kun ĉu komencos kaj finos, 686 00:49:03,000 --> 00:49:07,000 aŭ ni povas nomi ilin min kaj max. 687 00:49:07,000 --> 00:49:10,000 Mi uzas komenci kaj fini ĉi tiun fojon. 688 00:49:10,000 --> 00:49:15,000 Kiam ni komencos, se ni retrorigardas al nia ekzemplo cxi tie, 689 00:49:15,000 --> 00:49:20,000 nia komenco estis fiksita al la komenco de la tabelo, kiel natura. 690 00:49:20,000 --> 00:49:25,000 Kio indekso estis tio? Kion nia komencos esti? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Jes, tiel ni povus agordi ĝin egala al fojnamaso [0]. 694 00:49:37,000 --> 00:49:40,000 La problemo, tamen, estas ke tio donas al ni ne la pozicio de la unua ero. 695 00:49:40,000 --> 00:49:45,000 Ĝi donas al ni la indekso de la unua elemento aux la efektiva valoro je tiu unua pozicio. 696 00:49:45,000 --> 00:49:47,000 [Studenta] Tio igos al .20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Kio ĉi faros estas-nu, ne faros Konvertado. 698 00:49:52,000 --> 00:49:56,000 Kio faros estas ĝi stoki 4 en komenci, 699 00:49:56,000 --> 00:49:59,000 kaj tiam estos malfacile fari komparojn kontraŭ komenci 700 00:49:59,000 --> 00:50:03,000 ĉar begin estos tenante la valoro de 4, 701 00:50:03,000 --> 00:50:06,000 kiu estas la komenco de nia tabelo, 702 00:50:06,000 --> 00:50:08,000 sed ni volas spuri la indeksoj en la tabelo 703 00:50:08,000 --> 00:50:11,000 kontraste al la valoroj. 704 00:50:11,000 --> 00:50:17,000 Ni efektive uzi 0, tiel. 705 00:50:17,000 --> 00:50:20,000 Por la fino de la tabelo-Charlotte alportis tiun supren iom antaŭe. 706 00:50:20,000 --> 00:50:23,000 Tie estas kie ni prenos en konsideron la nulo indeksado. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, kio estas la fino de la tabelo? 708 00:50:25,000 --> 00:50:28,000 Kio estas la indekso de la fino? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Grandeco - 1. 710 00:50:30,000 --> 00:50:32,000 Yeah, kaj kiun grandecon devus ni uzi? 711 00:50:32,000 --> 00:50:35,000 Ĉu necesas uzi ĉefurbo grandeco aŭ minuskla grandeco? 712 00:50:35,000 --> 00:50:37,000 Ĉefurbo grandeco. 713 00:50:37,000 --> 00:50:42,000 En ĉi tiu kazo, ni povus uzi ĉefurbo grandeco. 714 00:50:42,000 --> 00:50:45,000 Se ni volis tiun funkcion por esti portebla 715 00:50:45,000 --> 00:50:48,000 kaj uzi ĉi tiun funkcion en aliaj programoj, 716 00:50:48,000 --> 00:50:50,000 ni povas reale uzi minuskla grandeco. 717 00:50:50,000 --> 00:50:52,000 Ĝi estas bone ankaŭ. 718 00:50:52,000 --> 00:51:01,000 Sed Charlotte estas tute pravas ke ni volas havi grandecon - 1. 719 00:51:01,000 --> 00:51:03,000 Je ĉi tiu punkto- 720 00:51:03,000 --> 00:51:05,000 [Studenta] Kial vi povas uzi majusklajn grandeco? 721 00:51:05,000 --> 00:51:07,000 Kial ni povus uzi majusklajn grandeco? 722 00:51:07,000 --> 00:51:13,000 Ĝi rezultas ke tiuj # difinu estas vere, 723 00:51:13,000 --> 00:51:19,000 sub la kapuĉo, teksto kiel trovi kaj anstataŭigi, se tiu havas sencon. 724 00:51:19,000 --> 00:51:24,000 Kiam vi kompili vian kodon, la preprocesamiento fazon 725 00:51:24,000 --> 00:51:27,000 de la tradukilo iras tra la dosiero, 726 00:51:27,000 --> 00:51:31,000 kaj serĉas ĉie, ke vi skribis ĉefurbo grandeco, 727 00:51:31,000 --> 00:51:39,000 kaj ĝi anstataŭas tiu teksto laŭvorte kun 8, ĝuste tiel. 728 00:51:39,000 --> 00:51:42,000 En tiu senco, estas tre malsama de variablo. 729 00:51:42,000 --> 00:51:45,000 Ne levu neniun spacon en memoro. 730 00:51:45,000 --> 00:51:52,000 Ĝi estas simpla teksto anstataŭigo artifiko. 731 00:51:52,000 --> 00:51:57,000 En ĉi tiu kazo, ni tuj uzos grandeco. 732 00:51:57,000 --> 00:52:01,000 De tie ni volas fari ian ripeto, 733 00:52:01,000 --> 00:52:03,000 kaj ni estas sur la ĝusta vojo kun niaj do-dum ciklo. 734 00:52:03,000 --> 00:52:08,000 Ni volas fari ion ĝis kondiĉo ne teni plu, 735 00:52:08,000 --> 00:52:12,000 kaj kiel ni vidis antaŭe, ni vidis, ke tiu kondiĉo 736 00:52:12,000 --> 00:52:19,000 ja estis, ke ni ne volas la fino 737 00:52:19,000 --> 00:52:24,000 esti malpli ol la komenci. 738 00:52:24,000 --> 00:52:26,000 >> Ĉi tiu estas nia haltante kondiĉo. 739 00:52:26,000 --> 00:52:35,000 Se tio okazas, ni volas halti kaj deklari kiel, "Hej, ni ne trovis ion." 740 00:52:35,000 --> 00:52:43,000 Por esprimi tion, ni volas uzi ian buklo. 741 00:52:43,000 --> 00:52:49,000 En ĉi tiu kazo, ĉu estos do-dum ciklo, a por ciklo, tempo buklo? 742 00:52:49,000 --> 00:52:51,000 Ni havas do-dum buklo tie. 743 00:52:51,000 --> 00:52:53,000 Ĉu vi infanoj kiel tiu alproksimiĝo? 744 00:52:53,000 --> 00:52:59,000 Ĉu vi kredas ke ni devus provi malsaman alproksimiĝon? 745 00:52:59,000 --> 00:53:01,000 Kevin, ajna pensoj? 746 00:53:01,000 --> 00:53:06,000 Ni povus havi dum buklo ĉar ni scias maksimuma 747 00:53:06,000 --> 00:53:11,000 estus pli granda ol min en la komenco anyways. 748 00:53:11,000 --> 00:53:14,000 Yeah, do ne estas inicialización kiu bezonas okazi. 749 00:53:14,000 --> 00:53:17,000 Tiuj do-dum cikloj estas grandaj kiam vi devas pravalorizi ion 750 00:53:17,000 --> 00:53:21,000 antaux tiam provi, dum ĉi tie 751 00:53:21,000 --> 00:53:26,000 ni scias ke ni ne tuj observu reinitializing ambaŭ komencas kaj finas 752 00:53:26,000 --> 00:53:28,000 ĉiu ĉirkaŭvojo de la ciklo. 753 00:53:28,000 --> 00:53:32,000 Ni scias, ke ni volas pravalorizi ili, tiam kontrolu nian kondiĉo. 754 00:53:32,000 --> 00:53:38,000 En ĉi tiu kazo, mi efektive iru kun simpla dum ciklo. 755 00:53:38,000 --> 00:53:44,000 Ĝi rezultas ke do-dum cikloj estas uzataj sufiĉe malofte. 756 00:53:44,000 --> 00:53:49,000 Multaj lokoj eĉ ne instruas fari dum cikloj. 757 00:53:49,000 --> 00:53:53,000 Ili estas bona por uzado uzanto enigo, do ni vidis multajn el ili ĝis nun. 758 00:53:53,000 --> 00:53:59,000 Sed normala kaj dum cikloj estas multe pli komuna. 759 00:53:59,000 --> 00:54:03,000 Ĝi rezultas ke tiu kondiĉo kiel skribita 760 00:54:03,000 --> 00:54:09,000 ne vere nin tre bone, kaj kial estas tiel? 761 00:54:09,000 --> 00:54:11,000 Mi bedauxras, mi ne konas vian nomon. 762 00:54:11,000 --> 00:54:13,000 Mi Jerry. >> Pardonu? 763 00:54:13,000 --> 00:54:15,000 Estas B-ho-R-U-mi. 764 00:54:15,000 --> 00:54:18,000 Ho, bone. 765 00:54:18,000 --> 00:54:23,000 Mi ne vidas vin en mia listo. 766 00:54:23,000 --> 00:54:26,000 Ho, ĝi estas ĉar-oh, tio havas sencon. 767 00:54:26,000 --> 00:54:31,000 Ĉu vi havas ideon pri tio, kial tiu dum buklo eble ne funkcios kiel intencita, 768 00:54:31,000 --> 00:54:38,000 kiel skribita kun la kondiĉo? 769 00:54:38,000 --> 00:54:43,000 [Jerry] You mean kiel vi volas la tuton post gxin en la-? 770 00:54:43,000 --> 00:54:46,000 Yeah, tiel ke estas unu. 771 00:54:46,000 --> 00:54:49,000 Ni eble devus meti ĉiuj ĉi aĵoj en la dum buklo, plene vera. 772 00:54:49,000 --> 00:54:55,000 La alia afero ke estas iom pli problema, kvankam, estas ke tiu kondiĉo ne funkcias. 773 00:54:55,000 --> 00:54:57,000 [Studenta] Vi devas klaki ĝin. 774 00:54:57,000 --> 00:55:04,000 Bone, do ĉi tiu kondiĉo ne cxiam veras komence la maniero ni parolis pri ĝi. 775 00:55:04,000 --> 00:55:08,000 Ni volas fari ion ĝis fino 00:55:13,000 sed ni volas fari ion dum 777 00:55:13,000 --> 00:55:21,000 komenci ≤ fino. 778 00:55:21,000 --> 00:55:24,000 >> Jen tiu inversio de la logiko tie. 779 00:55:24,000 --> 00:55:27,000 Mi estas kulpa de fari tiujn erarojn la tutan tempon. 780 00:55:27,000 --> 00:55:31,000 [Studenta] Kial ĝi devas esti malpli ol aŭ egala al? 781 00:55:31,000 --> 00:55:33,000 Ĉar vi memoras la kazo ke ni alvenis al 782 00:55:33,000 --> 00:55:36,000 kie estis nur unu elemento, kaj ni estis sube, 783 00:55:36,000 --> 00:55:43,000 kaj ni rigardas nur la 15 en nia tabelo? 784 00:55:43,000 --> 00:55:47,000 Kaj nia komenco kaj nia fino estis la sama elemento. 785 00:55:47,000 --> 00:55:50,000 Ni volas certigi ke ni manipuli tiu kazo. 786 00:55:50,000 --> 00:55:54,000 Se ni faris rektan malpli ol, 787 00:55:54,000 --> 00:55:58,000 ni nur povos akiri suben al 2-elemento tabelo. 788 00:55:58,000 --> 00:56:06,000 Iam ni deiris al tiu lasta elemento, se tiu estis nia ero, ni dirus neniam trovos. 789 00:56:06,000 --> 00:56:10,000 Nun ĉi tie, ni povas fari precize kiel vi diras. 790 00:56:10,000 --> 00:56:15,000 Ni povas komenci plopping stuff rekte en la mezo de nia tempo buklo. 791 00:56:15,000 --> 00:56:20,000 Ni povas plop en nia mezpunkto. 792 00:56:20,000 --> 00:56:24,000 Ni povas preni ĉiujn el tiuj se deklaroj, 793 00:56:24,000 --> 00:56:30,000 tiri ilin el tiu do-dum ciklo, 794 00:56:30,000 --> 00:56:34,000 plop ilin, 795 00:56:34,000 --> 00:56:39,000 purigi aĵojn iom, 796 00:56:39,000 --> 00:56:48,000 kaj mi iros antaŭen kaj savi ĉi revizio. 797 00:56:48,000 --> 00:56:53,000 Kaj je tiu punkto, ni ricevas belajn proksima. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Mi kredas ke vi ankaŭ devas havi int mezpunkto = grandeco - 1/2. 800 00:56:58,000 --> 00:57:01,000 Havas ĝin, grandeco - 1/2. 801 00:57:01,000 --> 00:57:05,000 Ĉu estas io alia necesas ŝanĝi pri tiu linio? 802 00:57:05,000 --> 00:57:10,000 Tio estis bona kaptaĵo. 803 00:57:10,000 --> 00:57:14,000 >> Kion grandeco fari? Ĉu ni iam ŝanĝi grandeco? 804 00:57:14,000 --> 00:57:17,000 Por subteni la linion kiel ĉi tiu, ni devas ŝanĝi la grandecon. 805 00:57:17,000 --> 00:57:21,000 Ni devas ŝanĝi la grandecon ĉiufoje ni iru ĉirkaŭ la por buklo. 806 00:57:21,000 --> 00:57:25,000 Sed memoru, kiam ni iris tra nia ekzemplo malmulta antaŭe, 807 00:57:25,000 --> 00:57:30,000 kaj ni havis la komenco al 4 808 00:57:30,000 --> 00:57:33,000 kaj la fino la tutan vojon tra ĉe 108? 809 00:57:33,000 --> 00:57:35,000 Kiel ni kalkuli la mezpunkto? 810 00:57:35,000 --> 00:57:38,000 Se ni uzi la grandeco? 811 00:57:38,000 --> 00:57:40,000 Aŭ ni uzis komenci kaj fini anstataŭe? 812 00:57:40,000 --> 00:57:42,000 Ĝi estas la diferenco inter la fino kaj komenco. 813 00:57:42,000 --> 00:57:50,000 Precize, kaj kiom precize mi skribos tion, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Nur fini - komenci. 815 00:57:52,000 --> 00:57:55,000 Vi ne bezonas fari la - 1 816 00:57:55,000 --> 00:57:58,000 ĉar la - 1 estis inkludita en la fino kaj la komencos jam. 817 00:57:58,000 --> 00:58:00,000 [Nate] Granda, vi estas tute prava. 818 00:58:00,000 --> 00:58:03,000 Ni ne devas fari la - 1 ĉar tio - 1 estis inkludita 819 00:58:03,000 --> 00:58:08,000 kaj konsistigis kiam ni pravalorizi la fino variablo. 820 00:58:08,000 --> 00:58:11,000 >> Ĉu estas io alia mi bezonas fari sintakse havi tiun linion sencon? 821 00:58:11,000 --> 00:58:13,000 [Studenta] Plus komenci. >> Plus komenci? 822 00:58:13,000 --> 00:58:15,000 [Studenta] Je la fino. 823 00:58:15,000 --> 00:58:20,000 Ĉar ĝi estas nur kalkulita duono la longo. 824 00:58:20,000 --> 00:58:26,000 Vi devas aldoni la komenci. 825 00:58:26,000 --> 00:58:31,000 [Nate] Kion tio kalkuli por ni? 826 00:58:31,000 --> 00:58:35,000 Se ni pensas pri fino de la nuna unua ripeto de la ciklo, 827 00:58:35,000 --> 00:58:40,000 fino tuj estos en pozicio indekso 7. 828 00:58:40,000 --> 00:58:43,000 Begin estas en pozicio 0. 829 00:58:43,000 --> 00:58:47,000 Memoru, ni serĉas ĉu 830 00:58:47,000 --> 00:58:52,000 pozicio 3 aŭ pozicio 4. 831 00:58:52,000 --> 00:58:56,000 Se ni rigardas tiun matematikon, nur por igi ĝin iom pli palpebla, 832 00:58:56,000 --> 00:59:02,000 meti iujn numerojn tie, ni havas 7, 0, 833 00:59:02,000 --> 00:59:10,000 tiom 7 - 0, kaj tiam / 2 834 00:59:10,000 --> 00:59:19,000 Estas 3 en entjera divido, kiu estas. 835 00:59:19,000 --> 00:59:26,000 Do ni bezonas tiam aldoni reen nia komenci? 836 00:59:26,000 --> 00:59:28,000 Ni ne en ĉi tiu kazo. 837 00:59:28,000 --> 00:59:31,000 En la unua ripeto, estos bone ĉar begin estas 0. 838 00:59:31,000 --> 00:59:36,000 Sed kiel ni progresas, ni faru vere ĉiuj devas nur 839 00:59:36,000 --> 00:59:42,000 fino - komenci / 2. 840 00:59:42,000 --> 00:59:46,000 Estas unu alia lertaĵo tie, kaj tiu estas nome unu el prioritaton. 841 00:59:46,000 --> 00:59:49,000 [Studenta] Do ni bezonas krampojn? 842 00:59:49,000 --> 00:59:53,000 [Nate] Ĝuste, kaj tio estas ĉar se ni ne metas tiujn krampojn, 843 00:59:53,000 --> 00:59:58,000 tiam ĉi tiu linio estos interpretita anstataŭ 844 00:59:58,000 --> 01:00:09,000 kiel (fino) - (komenci / 2), kiun ni certe ne volas. 845 01:00:09,000 --> 01:00:11,000 Atentu por tiuj prioritaton reguloj. 846 01:00:11,000 --> 01:00:15,000 [Studenta] Kial ne fini + komenci? 847 01:00:15,000 --> 01:00:17,000 Kial ne fini + komenci? 848 01:00:17,000 --> 01:00:19,000 [Studenta] Kial ne tio? 849 01:00:19,000 --> 01:00:24,000 Kial ĝi estas +? 850 01:00:24,000 --> 01:00:26,000 Mi kredas ke vi pravas. 851 01:00:26,000 --> 01:00:28,000 [Studenta] Ĉar estas averaĝa? 852 01:00:28,000 --> 01:00:31,000 [Nate] Fino + komenci, vi estas tute prava. 853 01:00:31,000 --> 01:00:34,000 Wow, mi tute goofed. Vi pravas. 854 01:00:34,000 --> 01:00:39,000 Se ni faris la minus, ni volus aldoni la komenci reen in 855 01:00:39,000 --> 01:00:43,000 En ĉi tiu kazo, vi estas tre dezirinde, ke ni volas preni la mezumo de la du, 856 01:00:43,000 --> 01:00:45,000 tial ni volas aldoni ilin, kontraste subtrahi ilin. 857 01:00:45,000 --> 01:00:49,000 [Studenta] Estus ankaŭ funkcios se vi faris finon - komenci / 2 + komenci. 858 01:00:49,000 --> 01:00:55,000 Ĝi farus se ni do-mi kredas tion. 859 01:00:55,000 --> 01:01:00,000 >> Ekzemple, se ni rigardas komenci, 860 01:01:00,000 --> 01:01:04,000 kaj ni ŝanĝis ĝin ĉi tie 861 01:01:04,000 --> 01:01:08,000 al la 15. 862 01:01:08,000 --> 01:01:12,000 Nun komencu estas en la pozicio 2. 863 01:01:12,000 --> 01:01:15,000 Fino estas en la pozicio 7. 864 01:01:15,000 --> 01:01:21,000 Se ni subtrahi ilin, ni preni 5. 865 01:01:21,000 --> 01:01:24,000 Dividu ke per 2, ni ricevas 2. 866 01:01:24,000 --> 01:01:27,000 Kaj poste ni aldonu 2 reen en, 867 01:01:27,000 --> 01:01:30,000 kaj kiu alvenas al ni la 4a pozicio, 868 01:01:30,000 --> 01:01:33,000 kio estas ĉi tie, kiu estas la mezpunkto. 869 01:01:33,000 --> 01:01:36,000 [Studenta] Do necesas prizorgi envolviendo? 870 01:01:36,000 --> 01:01:39,000 En kiu senco Kion ni bezonas prizorgi envolviendo? 871 01:01:39,000 --> 01:01:43,000 Se la sumo aŭ la diferenco inter 872 01:01:43,000 --> 01:01:45,000 dependanta sur kiel ni faras ne estas para nombro. 873 01:01:45,000 --> 01:01:49,000 Tiam la komputilo prenas konfuzita ĉu kiam estas 2,5; 874 01:01:49,000 --> 01:01:52,000 vi movas al la maldekstra aŭ la dekstra por determini kiu estas la mezpunkto? 875 01:01:52,000 --> 01:01:54,000 Got it. 876 01:01:54,000 --> 01:01:56,000 Rezultas ke kun entjera divido, 877 01:01:56,000 --> 01:01:59,000 ni ne akiros tiujn glitpunktaj nombroj. 878 01:01:59,000 --> 01:02:01,000 Ni neniam akiris la decimala. 879 01:02:01,000 --> 01:02:04,000 Ĝi estas tute forĵetita. 880 01:02:04,000 --> 01:02:08,000 Se vi havas komputilon dividi du int variabloj, 881 01:02:08,000 --> 01:02:11,000 kaj unu estas 7, kaj la alia estas 2, 882 01:02:11,000 --> 01:02:13,000 vi ne ricevos 3,5 kiel rezulto. 883 01:02:13,000 --> 01:02:16,000 Ĝi havos 3. 884 01:02:16,000 --> 01:02:19,000 La resto estos forĵetitaj, do ĝi estas efektive rondigas- 885 01:02:19,000 --> 01:02:24,000 ne ronda sed prefere etaĝon, se vi infanoj bone konas ke en Y, 886 01:02:24,000 --> 01:02:27,000 kie vi tute forĵeti la dekuma, 887 01:02:27,000 --> 01:02:31,000 kaj tiel vi esence detranĉante ĝin al la plej proksima 888 01:02:31,000 --> 01:02:33,000 tuta pozicio, al la plej proksima tuta nombro. 889 01:02:33,000 --> 01:02:38,000 [Studenta] Sed tiam tio estas problema ĉar se vi havas tabelo de 7 elementoj 890 01:02:38,000 --> 01:02:43,000 tiam kiu aŭtomate prenas la 3a ero el la mezpunkto anstataŭ la 4a. 891 01:02:43,000 --> 01:02:46,000 Kiel ni trakti tion? 892 01:02:46,000 --> 01:02:49,000 Estas problema ĉar se ni havis tabelo de 7, 893 01:02:49,000 --> 01:02:54,000 estus elekti la 3a anstataŭ la 4a. 894 01:02:54,000 --> 01:02:56,000 Ĉu vi povas klarigi iom pli? 895 01:02:56,000 --> 01:02:59,000 [Studenta] Ĉar se vi havas 7 elementoj tiam la 4a ero 896 01:02:59,000 --> 01:03:04,000 estus la mezpunkto, ĉu ne? 897 01:03:04,000 --> 01:03:07,000 Memoru vian komenton pri esti nulo indeksita, though. 898 01:03:07,000 --> 01:03:10,000 [Studenta] Jes, tiel en pozicio 3. Kiu estus la mezpunkto. 899 01:03:10,000 --> 01:03:12,000 Yeah. 900 01:03:12,000 --> 01:03:16,000 Ho, bone. Mi vidas tion, kion vi volas diri. 901 01:03:16,000 --> 01:03:19,000 Estas ia stranga, kiel ni kutimiĝas al ĉi tiu tuta nocio de 902 01:03:19,000 --> 01:03:22,000 liverante el glitpunktaj nombroj. 903 01:03:22,000 --> 01:03:26,000 Tio estas granda punkto. 904 01:03:26,000 --> 01:03:30,000 Ni finos ĉi supre. 905 01:03:30,000 --> 01:03:32,000 Ni kalkulas niajn mezpunkto. 906 01:03:32,000 --> 01:03:37,000 >> Ni provante vidi se nia nadlo estas egala al la meza valoro. 907 01:03:37,000 --> 01:03:41,000 Ni presi ke ni trovis ĝin, sed vere, kion ni volas fari en ĉi tiu situacio? 908 01:03:41,000 --> 01:03:46,000 Ni trovis ĝin, do ni volas lasi la telefonanto scias, ke ni trovis ĝin. 909 01:03:46,000 --> 01:03:49,000 Ni havas funkcion kiu estas bulea tajpitaj funkcio. 910 01:03:49,000 --> 01:03:54,000 La vojo ni signali al la telefonanto de nia funkcio kiu ni pretas iri 911 01:03:54,000 --> 01:03:58,000 estas ni diras, "Hej, ĉi tiu estas vera." 912 01:03:58,000 --> 01:04:00,000 Kiel ni faru tion, Kevin? 913 01:04:00,000 --> 01:04:02,000 Vi kapjesante via kapo. >> [Kevin] Add reveno vera. 914 01:04:02,000 --> 01:04:06,000 [Nate] Ekzakte, revenu vera. 915 01:04:06,000 --> 01:04:12,000 Nun, se ĝi ne estas egalaj, kiel estus ni rigardas la maldekstran duonon? 916 01:04:12,000 --> 01:04:16,000 Ajna ideoj? 917 01:04:16,000 --> 01:04:18,000 Stella, ajna ideoj? 918 01:04:18,000 --> 01:04:21,000 Vi devas agordi novan pozicion por fino. 919 01:04:21,000 --> 01:04:23,000 Yeah. 920 01:04:23,000 --> 01:04:29,000 Do ni devas fari pozicio de mezpunkto - la fino. 921 01:04:29,000 --> 01:04:33,000 Granda. 922 01:04:33,000 --> 01:04:36,000 Ni bezonas establis novan pozicion por la fino 923 01:04:36,000 --> 01:04:38,000 rigardi la maldekstra duono. 924 01:04:38,000 --> 01:04:41,000 Ĉi tio estis kio ni parolis pri antaux kie 925 01:04:41,000 --> 01:04:44,000 Mi plu iri reen al ĉi tiu ekzemplo. 926 01:04:44,000 --> 01:04:50,000 Mi la komenci ĉi tie, kaj tiam mi havas la fino la tutan vojon tra tie. 927 01:04:50,000 --> 01:04:53,000 >> Denove, se ni serĉas 15, kaj nia mezpunkto estas je 16, 928 01:04:53,000 --> 01:04:56,000 kaj ni rimarkas, "Oops, 16 estas pli granda. 929 01:04:56,000 --> 01:04:59,000 Ni volas movi al la maldekstra duono. " 930 01:04:59,000 --> 01:05:02,000 Ni devus tiam movi la fino al la 15, 931 01:05:02,000 --> 01:05:06,000 kaj ni faru tion per prenante unu for de la mezpunkto 932 01:05:06,000 --> 01:05:09,000 kaj opcio ke nia nova fino. 933 01:05:09,000 --> 01:05:12,000 Same, se ni volas rigardi la dekstra duono, kiel estus ni faru tion? 934 01:05:12,000 --> 01:05:14,000 Ĉu vi havas ideon? 935 01:05:14,000 --> 01:05:22,000 [Studenta] Vi nur starigis komencas mezpunkto + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Granda. 937 01:05:24,000 --> 01:05:29,000 Kaj nun en la kazo, ke ni ne trovis nenion, 938 01:05:29,000 --> 01:05:32,000 ĉu tio akiri zorgo por ni? 939 01:05:32,000 --> 01:05:36,000 Daniel, ĉu tio get zorgo por ni? 940 01:05:36,000 --> 01:05:38,000 [Daniel] No 941 01:05:38,000 --> 01:05:40,000 [Nate] Se ni faras ĝin tra la tuta tabelo kaj ni ne trovos nenion, 942 01:05:40,000 --> 01:05:42,000 kie estus ke atenti, aŭ ni atentas pri ĝi? 943 01:05:42,000 --> 01:05:44,000 [Daniel] La dum kondiĉo. 944 01:05:44,000 --> 01:05:48,000 [Nate] Jes, la dum kondiĉo, precize. 945 01:05:48,000 --> 01:05:51,000 Ĝi prizorgos iranta tra la tuta tabelo se ni ne trovos ion. 946 01:05:51,000 --> 01:05:53,000 Tiu dum buklo finos. 947 01:05:53,000 --> 01:05:56,000 Ni neniam renkontis tiun kondiĉo, 948 01:05:56,000 --> 01:06:03,000 kaj ni povas reveni falsaj. 949 01:06:03,000 --> 01:06:10,000 Ni povas ankaŭ lasi ĉi se en tie kiel ĉi 950 01:06:10,000 --> 01:06:14,000 ĉar se ĉi se aserto estas vera, 951 01:06:14,000 --> 01:06:16,000 kaj nia funkcio revenos, 952 01:06:16,000 --> 01:06:21,000 kaj tiel ni esence aborti ĉi funkcio je ĉi tiu punkto 953 01:06:21,000 --> 01:06:24,000 kiam ni revenas vera. 954 01:06:24,000 --> 01:06:28,000 Sed kio okazas kun ĉi tiu strukturo tie? 955 01:06:28,000 --> 01:06:34,000 Ĉu ĉi tiu funkcias tute, aŭ ĉu estas iu logika difekto en tie? 956 01:06:34,000 --> 01:06:37,000 >> Ekzistas iu logika difekto en tie, kun la maniero ĝi estas kreita. 957 01:06:37,000 --> 01:06:40,000 Kio povus esti? 958 01:06:40,000 --> 01:06:43,000 [Studenta] Kial vi bezonas la - kaj + 1s? 959 01:06:43,000 --> 01:06:47,000 Kiu elmontras nian tabelo por esti nia nova maldekstra duono kaj dekstra duono. 960 01:06:47,000 --> 01:06:51,000 [Studenta] Sed kial ne vi tion sen la - 1s kaj + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Ni povus agordi ĝin egala al la mezpunkto? 962 01:06:53,000 --> 01:07:04,000 Kio povus esti problema pri tio? 963 01:07:04,000 --> 01:07:08,000 [Studenta] mi supozas ke estas senutilaj, ĉar vi kontrolanta valoro ke tio jam estas kontrolata. 964 01:07:08,000 --> 01:07:11,000 [Nate] Ekzakte, do Sam estas tute prava. 965 01:07:11,000 --> 01:07:15,000 Se vi turnos la fino kaj la komenci egala al la mezpunkto 966 01:07:15,000 --> 01:07:18,000 anstataŭ - 1 kaj +1 mediteme, 967 01:07:18,000 --> 01:07:22,000 en iu punkto en la estonteco ni finos kontrolanta la mezpunkto denove. 968 01:07:22,000 --> 01:07:26,000 [Studenta] mi komencis la pset, kaj tiam mi havis ion tian 969 01:07:26,000 --> 01:07:30,000 kie mi forgesis la + 1, kaj ĝi got ŝtopita en senfina ciklo. 970 01:07:30,000 --> 01:07:34,000 Ĝuste, ĉar je iu punkto vi neniam iras al get komenci kaj fini 971 01:07:34,000 --> 01:07:39,000 por fakte koincidas. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Estas unu pli logike difekton, kaj tio estas ke tiu devus esti definitive 974 01:07:44,000 --> 01:07:48,000 oni alie se. 975 01:07:48,000 --> 01:07:55,000 Kial povus tiu esti? 976 01:07:55,000 --> 01:07:59,000 >> La kialo estas, se ĝi estas ne alie se-vi vidas, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Jes, ĉar vi ŝanĝi la ekstrema punkto. 978 01:08:02,000 --> 01:08:05,000 [Nate] Ekzakte. 979 01:08:05,000 --> 01:08:07,000 Ni ŝanĝi la fina punkto, 980 01:08:07,000 --> 01:08:12,000 kaj se ĝi estas skribita kiel ĉi-we'll fari spacoj inter- 981 01:08:12,000 --> 01:08:14,000 ĝi kontrolu ĉi tiu kazo. 982 01:08:14,000 --> 01:08:18,000 Ĉi tiu kazo, se ĝi sukcesos, ĉu aborti el la funkcio. 983 01:08:18,000 --> 01:08:21,000 Tiam kontrolos ĉi sekva kazo, 984 01:08:21,000 --> 01:08:24,000 kaj se ĉi okazas, ĝi ĝustigos la fina punkto, 985 01:08:24,000 --> 01:08:28,000 kaj tiam sekvos en kaj kontrolu ĉi tiu kazo. 986 01:08:28,000 --> 01:08:31,000 Sed en ĉi tiu punkto, ni ne volas daŭrigi kontroladon. 987 01:08:31,000 --> 01:08:35,000 Feliĉe, ni ne retrovu la mezpunkto tie, 988 01:08:35,000 --> 01:08:39,000 kaj ni scias, ke ĉi tiu kazo ne sukcesos. 989 01:08:39,000 --> 01:08:44,000 Sed ni certe volas meti la alian se tien 990 01:08:44,000 --> 01:08:48,000 kvankam ke eble-en ĉi tiu kazo 991 01:08:48,000 --> 01:08:52,000 ekde ni ne modifu la mezpunkto, estus ke fari diferencon? 992 01:08:52,000 --> 01:08:54,000 Ne, ĉar ĉi tiuj kazoj estas ĉiuj ekskluziva. 993 01:08:54,000 --> 01:08:58,000 Denove, mia malbona. 994 01:08:58,000 --> 01:09:01,000 Ni ne, mi kredas, bezonas tiun alian se. 995 01:09:01,000 --> 01:09:05,000 Ni povas doni provi kaj ruli ĝin kaj vidos kio okazas. 996 01:09:05,000 --> 01:09:08,000 Konstruaĵo, eraro okazis. 997 01:09:08,000 --> 01:09:12,000 Verŝajne ĉar mi forlasis tiujn b aj kaj e la en ĉi tie. 998 01:09:12,000 --> 01:09:14,000 Ĉu mi devas plu el tiuj ĉe la supro? 999 01:09:14,000 --> 01:09:16,000 Ĝi ne aspektas ĝi. 1000 01:09:16,000 --> 01:09:20,000 Ni malzomi, konstrui, 1001 01:09:20,000 --> 01:09:24,000 tie ĝi iras, tiel nun se ni serĉi 15, 1002 01:09:24,000 --> 01:09:28,000 jes. 1003 01:09:28,000 --> 01:09:30,000 Lasu min zoom in 1004 01:09:30,000 --> 01:09:33,000 15, jes. Ni povas ruli ĝin denove. 1005 01:09:33,000 --> 01:09:36,000 Alŝuti fontkodo, konstruante, kurante. 1006 01:09:36,000 --> 01:09:41,000 Ni povas serĉi ion kiel 13, 1007 01:09:41,000 --> 01:09:45,000 kaj ni ne ricevas ion presi, do ĝi ne trovante ke por ni. 1008 01:09:45,000 --> 01:09:51,000 Tio estas granda, ĉar ĝi ne estas en nia listo. 1009 01:09:51,000 --> 01:09:53,000 >> Ni estas nun ekster tempo. 1010 01:09:53,000 --> 01:09:55,000 Tio tuj estu por ĉi tiu semajno. 1011 01:09:55,000 --> 01:10:00,000 Dankon pro via aliĝo, kaj vin vidos poste. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]