1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Secțiunea 3] [mai puțin confortabilă] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Universitatea Harvard] 3 00:00:05,000 --> 00:00:08,000 >> [Acest lucru este CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> În regulă, să începem. 5 00:00:10,000 --> 00:00:13,000 Bine ati venit la Săptămâna 4 din CS50. 6 00:00:13,000 --> 00:00:19,000 Dacă voi deschide un browser web și deschide PSET 3, 7 00:00:19,000 --> 00:00:23,000 Scramble cu CS50, vom începe să mergi 8 00:00:23,000 --> 00:00:26,000 prin secțiunea de întrebări acolo. 9 00:00:26,000 --> 00:00:32,000 La fel ca săptămâna trecută, vom lucra în CS50 Spatii, 10 00:00:32,000 --> 00:00:35,000 în cazul în care veți trage, de asemenea, că, până la fel de bine, 11 00:00:35,000 --> 00:00:43,000 și dacă te duci mai departe și să vizitați această legătură pe care am aici, la partea de sus. 12 00:00:43,000 --> 00:00:45,000 E timpul pentru a începe. 13 00:00:45,000 --> 00:00:51,000 Avem programul nostru hi mica aici. Nebun nimic. 14 00:00:51,000 --> 00:00:55,000 Unul dintre primele lucruri pe care vreau să le fac cu voi azi e trece peste cateva solutii 15 00:00:55,000 --> 00:00:58,000 Set de la Problema 1, un fel de soluții de exemplu, 16 00:00:58,000 --> 00:01:03,000 doar astfel încât să puteți obține o simt pentru ce tipuri de personal codul este scris, 17 00:01:03,000 --> 00:01:07,000 ce fel de elevi alt cod se scrie, 18 00:01:07,000 --> 00:01:10,000 și au să luați o privire la ea, pentru că știu că e ciudat 19 00:01:10,000 --> 00:01:14,000 Atunci când depune o soluție pentru un set de probleme și de a lua comentarii 20 00:01:14,000 --> 00:01:18,000 pe propria voastră versiune, dar uneori este util pentru a vedea cum alte persoane a făcut-o, 21 00:01:18,000 --> 00:01:22,000 mai ales cele care sunt drăguț. 22 00:01:22,000 --> 00:01:27,000 Pentru cea mai mare parte, am fost foarte impresionat cu soluții care voi produse. 23 00:01:27,000 --> 00:01:31,000 Nu am început încă se uită la 2s dvs. set de probleme, dar dacă ei sunt ceva de genul în primul rând, 24 00:01:31,000 --> 00:01:34,000 înseamnă nimic, dar lucruri bune. 25 00:01:34,000 --> 00:01:40,000 >> Dacă te uiți la revizuirile mele, să începem tot drumul în jos, la Revizia 1, 26 00:01:40,000 --> 00:01:47,000 și am de gând să ia o privire rapidă la o soluție de Mario. 27 00:01:47,000 --> 00:01:54,000 Dacă ați trage asta, aceste programe pe care le vom prezenta sunt corecte. 28 00:01:54,000 --> 00:01:56,000 Nu au fost probleme de corectitudine cu aceste probleme, ci, mai degrabă, 29 00:01:56,000 --> 00:01:59,000 vrem să vorbim un pic despre diferitele probleme de proiectare 30 00:01:59,000 --> 00:02:03,000 care au fost utilizate aici. 31 00:02:03,000 --> 00:02:08,000 Unul dintre lucrurile care a fost interesante despre soluția 32 00:02:08,000 --> 00:02:11,000 este că a utilizat această construcție nouă, numită lire defini, 33 00:02:11,000 --> 00:02:15,000 uneori mentionat ca un hash definesc. 34 00:02:15,000 --> 00:02:18,000 Lasă-mă să zoom in pe ea aici. 35 00:02:18,000 --> 00:02:24,000 Un # define vă permite să dau nume acestor numere în programul tău. 36 00:02:24,000 --> 00:02:28,000 În acest caz, înălțimea maximă a unei piramide în Mario 37 00:02:28,000 --> 00:02:34,000 23 și a fost, mai degrabă decât a pune 23 în codul meu, 38 00:02:34,000 --> 00:02:37,000 ne-ar referi la faptul că la fel de greu de codificare 23 - 39 00:02:37,000 --> 00:02:43,000 în schimb acest lucru dă numele MAX_HEIGHT la acel număr, 40 00:02:43,000 --> 00:02:48,000 astfel că aici, în meu do-while 41 00:02:48,000 --> 00:02:51,000 vă puteți referi de fapt la MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 în loc de a pune numărul 23 inch 43 00:02:55,000 --> 00:02:57,000 [Student] Care este avantajul de a face asta? 44 00:02:57,000 --> 00:02:59,000 Asta este o întrebare mare. 45 00:02:59,000 --> 00:03:03,000 Una dintre ele este lizibilitate. 46 00:03:03,000 --> 00:03:08,000 Un avantaj de a folosi acest # define este de lizibilitate. 47 00:03:08,000 --> 00:03:11,000 Când am citit acest cod, eu pot vedea ce se întâmplă. 48 00:03:11,000 --> 00:03:15,000 >> Eu pot vedea în această condiție aici că testăm 49 00:03:15,000 --> 00:03:19,000 pentru înălțimea fiind <0, ceea ce am fi putut, de asemenea, definite 50 00:03:19,000 --> 00:03:22,000 să fie o înălțime minimă sau o înălțime min. 51 00:03:22,000 --> 00:03:25,000 Un alt avantaj este că eu pot citi apoi restul liniei pentru a vedea 52 00:03:25,000 --> 00:03:30,000 că suntem, de asemenea, de verificare pentru a vă asigura că înălțimea nu este mai mare decât înălțimea maximă, 53 00:03:30,000 --> 00:03:35,000 pentru că am de gând să continue în timp ce înălțimea este mai mare decât înălțimea max. 54 00:03:35,000 --> 00:03:40,000 Un alt avantaj este dacă-mi micșora un pic aici, 55 00:03:40,000 --> 00:03:49,000 dacă am rula acest program și l-am alerga, să zicem, cu 23 chiar acum, 56 00:03:49,000 --> 00:03:52,000 se va tipări toate cele 23 de rânduri la fel ca asta. 57 00:03:52,000 --> 00:03:54,000 Dar spun că am vrut să schimbe înălțimea maximă, 58 00:03:54,000 --> 00:03:57,000 si acum vreau să limiteze înălțimea maximă de piramide 59 00:03:57,000 --> 00:04:06,000 să fie doar spune-om, care a fost înfricoșat. 60 00:04:06,000 --> 00:04:14,000 # Include , # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 și să spunem că am vrut să-l setați egal cu 10. 62 00:04:18,000 --> 00:04:22,000 Acum, în acest moment, tot ce am avut de făcut a fost să îl modificați în această locație unul. 63 00:04:22,000 --> 00:04:27,000 Pot să recompilați codul, și acum, dacă am încerca și introduceți în 12, 64 00:04:27,000 --> 00:04:30,000 se va cere-mi din nou. 65 00:04:30,000 --> 00:04:33,000 În acest caz, suntem folosind doar MAX_HEIGHT dată. 66 00:04:33,000 --> 00:04:37,000 Nu e atât de mare de un hassle pentru a merge în 67 00:04:37,000 --> 00:04:40,000 și-l schimbați, în timp ce bucla, dacă aveți nevoie să. 68 00:04:40,000 --> 00:04:44,000 Dar, în cazul în care programele de ce te fac referire numarul magic același 69 00:04:44,000 --> 00:04:47,000 de peste si peste, din nou, acest mecanism # define este foarte la îndemână, 70 00:04:47,000 --> 00:04:52,000 pentru că vă schimbați doar o singură dată, la partea de sus a fișierului-este de obicei în cazul în care le-a pus- 71 00:04:52,000 --> 00:04:57,000 și schimbarea pătrunde prin restul fișierului. 72 00:04:57,000 --> 00:05:02,000 >> Alte lucruri am vrut să rețineți că în această misiune m-am gândit uitat foarte frumos, 73 00:05:02,000 --> 00:05:05,000 unul a fost numirea a variabilelor. 74 00:05:05,000 --> 00:05:14,000 Veți vedea aici că avem variabilele intregi numite de rând și zisul înălțime. 75 00:05:14,000 --> 00:05:20,000 Spatii, hashes, aceasta ajută codul un pic mai ușor de citit, 76 00:05:20,000 --> 00:05:25,000 face un pic mai ușor de înțeles ce se întâmplă de fapt pe. 77 00:05:25,000 --> 00:05:31,000 Acest lucru este în contrast cu utilizarea, de exemplu, litere aleatorii 78 00:05:31,000 --> 00:05:35,000 sau doar limbaj pretențios cu totul. 79 00:05:35,000 --> 00:05:39,000 Un ultim lucru pe voi subliniez este faptul că în bucle pentru, 80 00:05:39,000 --> 00:05:45,000 de multe ori aceste variabile iterator, aceste contoare pe care le utilizați în ta pentru bucle, 81 00:05:45,000 --> 00:05:51,000 e standard și convențional să le înceapă fie cu i si j, apoi și apoi k 82 00:05:51,000 --> 00:05:54,000 și merge mai departe de acolo, dacă aveți nevoie de mai multe variabile, 83 00:05:54,000 --> 00:05:56,000 și aceasta este doar o convenție. 84 00:05:56,000 --> 00:05:58,000 Există o mulțime de convenții. 85 00:05:58,000 --> 00:06:00,000 Aceasta depinde de limbajul de programare pe care îl utilizați. 86 00:06:00,000 --> 00:06:04,000 Dar în C, am de obicei, începe cu i. 87 00:06:04,000 --> 00:06:08,000 Ea nu are sens să folosească, să zicem, a sau b 88 00:06:08,000 --> 00:06:13,000 în funcție de situație. 89 00:06:13,000 --> 00:06:15,000 Asta e. pentru asta. 90 00:06:15,000 --> 00:06:25,000 Dacă ați trage acum la Revizia 2, veți vedea un alt Mario, 91 00:06:25,000 --> 00:06:29,000 iar aceasta este similară cu cea de altă natură care tocmai l-am văzut, 92 00:06:29,000 --> 00:06:32,000 dar nu ceva de genul mișto. 93 00:06:32,000 --> 00:06:38,000 Dacă ne uităm la această secțiune chiar aici în interiorul interior pentru bucla, 94 00:06:38,000 --> 00:06:44,000 ei folosesc unele sintaxă nebun cautati aici, chiar în această linie. 95 00:06:44,000 --> 00:06:47,000 Aceasta se numește un operator ternar. 96 00:06:47,000 --> 00:06:53,000 Este o declarație, dacă altcineva condensate într-o singură linie. 97 00:06:53,000 --> 00:06:57,000 Condiția este această parte în paranteze. 98 00:06:57,000 --> 00:07:05,000 E echivalent cu a spune dacă j <înălțimea - i - 1. 99 00:07:05,000 --> 00:07:10,000 Și apoi ce conținutul pe care, dacă ar fi blocul sunt spațiul 100 00:07:10,000 --> 00:07:16,000 și apoi conținutul a ceea ce altceva ar fi aceasta sunt #. 101 00:07:16,000 --> 00:07:20,000 Este atribuirea în esență, un spațiu pentru această variabilă. 102 00:07:20,000 --> 00:07:24,000 A pune un spațiu în conținutul variabilei bloc, 103 00:07:24,000 --> 00:07:29,000 în cazul în care această condiție este îndeplinită, iar în cazul în care condiția nu este îndeplinită, 104 00:07:29,000 --> 00:07:32,000 apoi variabila bloc se prezenta #. 105 00:07:32,000 --> 00:07:37,000 Și apoi, desigur, în loc de a construi un șir întreg 106 00:07:37,000 --> 00:07:43,000 și tipărirea totul de la sfârșitul acestei soluții se imprimă un caracter la un moment dat. 107 00:07:43,000 --> 00:07:48,000 Destul de rece. 108 00:07:48,000 --> 00:07:53,000 >> Un alt tânăr de lucruri să se uite la. Vom trece la lacomi. 109 00:07:53,000 --> 00:07:58,000 Acum, dacă ne uităm la lacomi, această primă soluție 110 00:07:58,000 --> 00:08:00,000 utilizează aceste definește # destul de un pic. 111 00:08:00,000 --> 00:08:06,000 Avem o constantă definită pentru fiecare dintre numerele diferite în acest program. 112 00:08:06,000 --> 00:08:12,000 Ne-am luat unul de centi pe dolar, unul pentru trimestre, parale, monezi, și penny, 113 00:08:12,000 --> 00:08:15,000 și acum, dacă ne defilați în jos și a citit codul, 114 00:08:15,000 --> 00:08:22,000 putem vedea un standard de do-in timp ce totul imprimarea bucla afară. 115 00:08:22,000 --> 00:08:25,000 Un fel de esența acestei probleme a fost și dea seama că 116 00:08:25,000 --> 00:08:29,000 ai nevoie pentru a converti float pe care ai citit de la utilizator la un număr întreg 117 00:08:29,000 --> 00:08:32,000 de a face cu precizie matematica, iar acest lucru se datorează faptului că 118 00:08:32,000 --> 00:08:36,000 cu numere în virgulă mobilă, ca și cum am vorbit despre în curs scurt, 119 00:08:36,000 --> 00:08:41,000 nu este posibil să reprezinte cu acuratețe fiecare valoare unică pe linia de numărul de 120 00:08:41,000 --> 00:08:47,000 pentru că există infinit de multe valori cuprinse între 3 și, să zicem, 3,1 chiar. 121 00:08:47,000 --> 00:08:54,000 Puteți avea 3.01 și 3.001 și 3.0001, și puteți să vă păstrați merge. 122 00:08:54,000 --> 00:09:00,000 Se pare că de fiecare dată când lucrați cu bani, de multe ori doriți să-l convertească 123 00:09:00,000 --> 00:09:05,000 în format întreg, astfel încât să nu pierzi mărunțiș și că astfel de lucruri. 124 00:09:05,000 --> 00:09:09,000 Fac asta și rotunjire a fost cheia. 125 00:09:09,000 --> 00:09:14,000 Această soluție a folosit un perfect simplu, algoritmul mare, 126 00:09:14,000 --> 00:09:17,000 care decrementat numărul de cenți rămase, în primul rând pe trimestre, 127 00:09:17,000 --> 00:09:19,000 apoi de Dimes, apoi de monezi, apoi de bănuți, 128 00:09:19,000 --> 00:09:24,000 și adăugarea la numărul de monede de fiecare dată. 129 00:09:24,000 --> 00:09:31,000 >> O altă soluție pe care o vom vedea, după cum am depărta și du-te la Revizia 4, 130 00:09:31,000 --> 00:09:40,000 a avut un început foarte similare, dar în schimb div utilizate și Mod 131 00:09:40,000 --> 00:09:44,000 dreapta peste aici pentru a calcula numărul de cenți. 132 00:09:44,000 --> 00:09:50,000 Acest lucru, numărul de trimestre este egal cu numărul de centi împărțit la 25, 133 00:09:50,000 --> 00:09:53,000 și motivul pentru care acest lucrări este că noi facem diviziunea întreg, 134 00:09:53,000 --> 00:09:58,000 deci e îndepărtând orice rest. 135 00:09:58,000 --> 00:10:02,000 [Student] Nu avem de a comenta căutare? 136 00:10:02,000 --> 00:10:05,000 Este într-adevăr depinde. 137 00:10:05,000 --> 00:10:08,000 [Student] Te comentând mai mult decât codul aici. 138 00:10:08,000 --> 00:10:16,000 Da, și astfel există o grămadă de diferite filosofii în acest sens. 139 00:10:16,000 --> 00:10:21,000 Filozofia mea personală este că codul dvs. este într-adevăr adevărul, 140 00:10:21,000 --> 00:10:24,000 cum ar fi codul tău este ceea ce de fapt de executare pe calculator, 141 00:10:24,000 --> 00:10:29,000 și așa mai departe codul dumneavoastră ar trebui să fie cât mai lizibil pe cât posibil să nu necesite cât mai multe comentarii. 142 00:10:29,000 --> 00:10:33,000 Asta a spus, atunci când faci lucruri care sunt un fel de complicat matematic 143 00:10:33,000 --> 00:10:38,000 sau algoritmic, e bine să comenteze cele, astfel încât să puteți 144 00:10:38,000 --> 00:10:43,000 adăuga o dimensiune suplimentară, un strat suplimentar pentru oricine citește codul. 145 00:10:43,000 --> 00:10:49,000 În aceste soluții, de multe ori acestea sunt comentate mai mult doar pentru că 146 00:10:49,000 --> 00:10:52,000 dorim să fie în măsură să le distribuie și să aibă oameni le ridice 147 00:10:52,000 --> 00:10:56,000 și citiți-le destul de ușor. 148 00:10:56,000 --> 00:11:05,000 Dar cu siguranta, aș fi de acord că acest lucru este greu. 149 00:11:05,000 --> 00:11:07,000 [Student] Dar atunci când în dubiu, du-te mai greu? 150 00:11:07,000 --> 00:11:10,000 Cand ai dubii, du-te mai greu. 151 00:11:10,000 --> 00:11:17,000 Unii oameni vor spune, uneori, 0 retur sau ceva de genul asta. 152 00:11:17,000 --> 00:11:20,000 Cred că e un comentariu ridicol. 153 00:11:20,000 --> 00:11:22,000 În mod clar că e ceea ce se întâmplă. 154 00:11:22,000 --> 00:11:25,000 Nu am nevoie de limba engleză să-mi spui asta. 155 00:11:25,000 --> 00:11:28,000 Uneori, oamenii vor scrie lucruri de genul "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Asta e un fel de dragut, dar de asemenea, nu- 157 00:11:32,000 --> 00:11:35,000 care nu face diferenta dintre punctele de comentare sau nu. 158 00:11:35,000 --> 00:11:41,000 Aceste tipuri de comentariile sunt doar ha, ha. 159 00:11:41,000 --> 00:11:43,000 Mișto. 160 00:11:43,000 --> 00:11:48,000 >> În acest moment, să înceapă lucrul la problema Set 3, secțiunea de întrebări. 161 00:11:48,000 --> 00:11:52,000 Dacă voi trage asta din nou, 162 00:11:52,000 --> 00:11:55,000 Ca și în săptămâna trecută, nu am de gând să ma uit la pantaloni scurți din această secțiune. 163 00:11:55,000 --> 00:12:00,000 Vom lăsa voi face asta în timpul tău propriu și vorbesc despre întrebările. 164 00:12:00,000 --> 00:12:05,000 Dar acum, în această secțiune vom petrece un pic de timp mai mult 165 00:12:05,000 --> 00:12:11,000 vorbesc despre mai putin de bază de codificare 166 00:12:11,000 --> 00:12:15,000 așa cum am făcut-o săptămâna trecută, și în loc, ne vom concentra mai mult pe 167 00:12:15,000 --> 00:12:22,000 un pic mai mult de teorie, deci vorbim despre binar de căutare și sortare, apoi. 168 00:12:22,000 --> 00:12:27,000 De la cei dintre voi care au fost în urma impreuna cu prelegerea, 169 00:12:27,000 --> 00:12:30,000 poate cineva da-mi o recapitulare a ceea ce este diferența 170 00:12:30,000 --> 00:12:35,000 între binar de căutare și de căutare liniară? 171 00:12:35,000 --> 00:12:37,000 Ce se întâmplă? Sigur. 172 00:12:37,000 --> 00:12:42,000 Cautari liniare de căutare, prin fiecare element în lista sortată 173 00:12:42,000 --> 00:12:45,000 unul câte unul câte unul câte unul câte unul, 174 00:12:45,000 --> 00:12:50,000 și căutare binară imparte lista în 2 grupe, 175 00:12:50,000 --> 00:12:57,000 verifică dacă valoarea tastele pe care le căutați este mai mare sau mai mică decât valoarea punctul de mijloc 176 00:12:57,000 --> 00:13:00,000 pe care tocmai l-ați găsit, și, dacă e mai mică, se merge cu lista de mai jos 177 00:13:00,000 --> 00:13:03,000 si apoi imparte din nou, nu aceeași funcție 178 00:13:03,000 --> 00:13:07,000 tot drumul în jos până când se găsește punctul de mijloc să fie egală cu valoarea în sine. 179 00:13:07,000 --> 00:13:10,000 Corect. 180 00:13:10,000 --> 00:13:12,000 >> De ce ne pasă? 181 00:13:12,000 --> 00:13:20,000 De ce vorbim despre binar de căutare liniară față de cautare? 182 00:13:20,000 --> 00:13:22,000 Da. 183 00:13:22,000 --> 00:13:24,000 Binar este mult mai rapid, astfel încât, dacă dubla dimensiunea problemei 184 00:13:24,000 --> 00:13:27,000 este nevoie de un pas mai degrabă decât de două ori cât mai multe. 185 00:13:27,000 --> 00:13:29,000 Exact. 186 00:13:29,000 --> 00:13:31,000 Asta e un răspuns minunat. 187 00:13:31,000 --> 00:13:36,000 Căutarea liniară este foarte mult un element de verificare la un moment dat, 188 00:13:36,000 --> 00:13:39,000 și așa cum am văzut în prima zi de curs 189 00:13:39,000 --> 00:13:42,000 atunci când David a trecut prin exemplul său cartea de telefon 190 00:13:42,000 --> 00:13:45,000 și smuls o pagină din cartea de telefon, la un moment dat 191 00:13:45,000 --> 00:13:47,000 și se păstrează face asta de peste si peste si peste, din nou, 192 00:13:47,000 --> 00:13:51,000 o să ia un timp foarte lung pentru a găsi pe nimeni în cartea de telefon, 193 00:13:51,000 --> 00:13:55,000 cu excepția cazului, desigur, el a fost caută pe cineva de la începutul alfabetului. 194 00:13:55,000 --> 00:14:00,000 Cu binar de căutare, puteți merge mult mai repede, 195 00:14:00,000 --> 00:14:05,000 și nu este vorba doar de două ori la fel de repede sau de 3 ori mai repede sau de 4 ori mai repede. 196 00:14:05,000 --> 00:14:13,000 Dar problema devine mai mici și mai mici și mai mici mult mai rapid. 197 00:14:13,000 --> 00:14:17,000 Pentru a ilustra acest lucru, vom începe să vorbim despre ceea ce se întâmplă 198 00:14:17,000 --> 00:14:21,000 atunci când scriem căutare binară. 199 00:14:21,000 --> 00:14:27,000 Problema la îndemână este că dacă am o serie de numere, 200 00:14:27,000 --> 00:14:40,000 spun, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 și apoi 9, cu o tona de 0s după ce, 202 00:14:47,000 --> 00:14:52,000 dorim să fie în măsură să dau seama foarte repede ceea ce este în 203 00:14:52,000 --> 00:14:57,000 această matrice de numere. 204 00:14:57,000 --> 00:15:00,000 Știu că pare o prostie putin si un pic contrived, 205 00:15:00,000 --> 00:15:02,000 deoarece acum este. 206 00:15:02,000 --> 00:15:05,000 Avem o matrice care nu are foarte multe elemente în ea, 207 00:15:05,000 --> 00:15:08,000 și dacă te întreb unul dintre voi să dau seama dacă este sau nu 208 00:15:08,000 --> 00:15:11,000 23 este în matrice, puteți face acest lucru destul de repede 209 00:15:11,000 --> 00:15:16,000 doar prin uite la asta și-mi spune da sau nu. 210 00:15:16,000 --> 00:15:20,000 Analogic să ia în considerare este dacă acest lucru ar imagina, spune, 211 00:15:20,000 --> 00:15:27,000 o foaie de calcul Excel cu 10.000 de rânduri, 20.000 rânduri. 212 00:15:27,000 --> 00:15:31,000 Desigur, puteți face comandă F sau F de control și să caute ceva. 213 00:15:31,000 --> 00:15:33,000 Puteți utiliza, de asemenea, filtrele si alte chestii de căutare, 214 00:15:33,000 --> 00:15:37,000 dar dacă ar trebui să se uite prin faptul că linia de fișiere prin linie cu linie, 215 00:15:37,000 --> 00:15:40,000 ar fi nevoie de o lungă perioadă de timp să-l găsiți. 216 00:15:40,000 --> 00:15:42,000 E un fel de ca în exemplul cartea de telefon, de asemenea, în cazul în care 217 00:15:42,000 --> 00:15:44,000 nimeni nu se uită printr-o pagină un telefon carte la un moment dat. 218 00:15:44,000 --> 00:15:47,000 De obicei, acestea nu se deschid la mijloc, 219 00:15:47,000 --> 00:15:50,000 sau, în cazul unui lot de cărți de telefon și dicționare în cazul în care 220 00:15:50,000 --> 00:15:54,000 tu de fapt l-au tulburat pe prima scrisoare, 221 00:15:54,000 --> 00:16:01,000 vă sări la această scrisoare prima și a deschide și începe să mergi pe acolo. 222 00:16:01,000 --> 00:16:03,000 >> Amintește-mi de numele tău din nou. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Ca și Sam a spus, că procesul de căutare liniară va fi foarte lent, 225 00:16:11,000 --> 00:16:15,000 și, în schimb, cu binar de căutare, modul în care aceasta este faptul că lucrările 226 00:16:15,000 --> 00:16:21,000 de fiecare data cand trec printr-o repetare a algoritmului nostru căutare, 227 00:16:21,000 --> 00:16:27,000 am de gând să împartă lista în jumătate, în esență, 228 00:16:27,000 --> 00:16:33,000 în două liste mai mici. 229 00:16:33,000 --> 00:16:39,000 Și apoi pe urmatoarea iteratie a buclei, ne vom împărți din nou 230 00:16:39,000 --> 00:16:44,000 în alte liste mai mici. 231 00:16:44,000 --> 00:16:48,000 După cum puteți vedea, problema ce în ce mai mici și mai mici 232 00:16:48,000 --> 00:16:55,000 fiindcă păzim jumătate aruncarea peste bord a listei de fiecare dată singur. 233 00:16:55,000 --> 00:16:59,000 Cum face acest lucru debarasa? 234 00:16:59,000 --> 00:17:05,000 La fel ca un memento, ceea ce am de gând să fac dacă am fost un computer 235 00:17:05,000 --> 00:17:11,000 și am fost, să zicem, căutând numărul 5 în această listă 236 00:17:11,000 --> 00:17:15,000 este că ne-ar alege un număr în mijloc. 237 00:17:15,000 --> 00:17:26,000 În mijlocul acestei liste, pentru că sunt 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numere, 238 00:17:26,000 --> 00:17:32,000 am alege numărul fie la locul 4 sau de la locul 5, 239 00:17:32,000 --> 00:17:38,000 și ne-ar numi că mijlocul listei noastre. 240 00:17:38,000 --> 00:17:42,000 Alege număr în mijloc. 241 00:17:42,000 --> 00:17:51,000 Apoi, la fel ca Sam a spus, vom testa pentru a vedea dacă acest număr este egal cu 242 00:17:51,000 --> 00:17:59,000 la numărul de pe care ne-o dorim pentru a obține sau numărul dorit. 243 00:17:59,000 --> 00:18:06,000 Dacă e egal, atunci l-am găsit. Vom câștiga. 244 00:18:06,000 --> 00:18:12,000 În cazul în care nu este egal, atunci există o serie de cazuri. 245 00:18:12,000 --> 00:18:15,000 Cele două cazuri sunt fie numărul trebuie să fie mai mare decât numărul căutăm la, 246 00:18:15,000 --> 00:18:19,000 sau e mai mică. 247 00:18:19,000 --> 00:18:25,000 Dacă e mai mare, vom trece la dreapta. 248 00:18:25,000 --> 00:18:33,000 Și dacă e mai puțin, vom trece la stânga. 249 00:18:33,000 --> 00:18:41,000 Și apoi vom repeta întregul proces din nou 250 00:18:41,000 --> 00:18:48,000 fie pe jumătatea din dreapta sau jumătatea din stânga a listei. 251 00:18:48,000 --> 00:18:51,000 >> Prima problemă în secțiunea de astăzi este să dau seama 252 00:18:51,000 --> 00:18:55,000 cum putem începe de fapt, pentru a exprima acest lucru în cod C. 253 00:18:55,000 --> 00:18:58,000 Avem pseudocod aici. 254 00:18:58,000 --> 00:19:04,000 Ceea ce vom începe să facem este ca eu voi trage un spațiu nou-nouț, 255 00:19:04,000 --> 00:19:09,000 salva această revizuire, astfel încât să avem aceste note pentru mai târziu, 256 00:19:09,000 --> 00:19:20,000 vom șterge toate astea, și apoi copiați și lipiți de la set de probleme 257 00:19:20,000 --> 00:19:26,000 aceste informații în spațiile noastre, și sperăm că acest lucru nu rupe. 258 00:19:26,000 --> 00:19:28,000 Eveniment. 259 00:19:28,000 --> 00:19:33,000 Dacă voi toți fac asta, copiați și inserați acest cod în spațiu nou, 260 00:19:33,000 --> 00:19:43,000 într-unul gol. 261 00:19:43,000 --> 00:19:47,000 Să încercăm Daniel. Dacă doriți să compilați și executați acest program, nu funcționează? 262 00:19:47,000 --> 00:19:49,000 Nu >> Ce spune? 263 00:19:49,000 --> 00:19:53,000 Se spune de control ajunge la sfârșitul non-nule funcție. 264 00:19:53,000 --> 00:19:55,000 Da, asa ca lasa-ma sa incerc rulează-l. 265 00:19:55,000 --> 00:19:59,000 Ați văzut voi asta înainte? Știi ce înseamnă asta? 266 00:19:59,000 --> 00:20:01,000 Bine, hai să disecăm acest bit un pic. 267 00:20:01,000 --> 00:20:10,000 Se spune la file.c pe linia 9, coloana 1 avem o eroare, la fel cum ai spus, 268 00:20:10,000 --> 00:20:16,000 și se spune că este rezultă din avertisment eroare și de avertizare de tip întoarcere. 269 00:20:16,000 --> 00:20:18,000 Se pare ca ceva se intampla cu tipul de retur, ceea ce face sens. 270 00:20:18,000 --> 00:20:21,000 Avem o functie non-nule, ceea ce înseamnă că avem o funcție 271 00:20:21,000 --> 00:20:24,000 faptul că nu se întoarce nule. 272 00:20:24,000 --> 00:20:27,000 O funcție vid este unul care arata ca acest lucru: 273 00:20:27,000 --> 00:20:35,000 void foo (), si este nulă, deoarece tipul de retur este nulă, 274 00:20:35,000 --> 00:20:38,000 ceea ce înseamnă că, dacă am avut ceva aici 275 00:20:38,000 --> 00:20:45,000 cum ar fi întoarcere 1, am obține o eroare de compilator pentru acest lucru. 276 00:20:45,000 --> 00:20:49,000 Cu toate acestea, avem o funcție non-nule. 277 00:20:49,000 --> 00:20:51,000 Nostru non-nule funcție în acest caz este funcția noastră de căutare 278 00:20:51,000 --> 00:20:56,000 deoarece are un tip de întoarcere bool. 279 00:20:56,000 --> 00:20:59,000 Când se spune că de control ajunge la sfârșitul unei funcții non-nule, 280 00:20:59,000 --> 00:21:02,000 e pentru că căutare nu are o declarație de revenire. 281 00:21:02,000 --> 00:21:04,000 Nu e nimic returnarea de tip bool. 282 00:21:04,000 --> 00:21:09,000 >> Putem rezolva asta, si ce voi cred că 283 00:21:09,000 --> 00:21:13,000 căutare ar trebui să se întoarcă în mod implicit? 284 00:21:13,000 --> 00:21:16,000 Care ar trebui să fie returnarea valoarea implicită de căutare? 285 00:21:16,000 --> 00:21:19,000 Pentru că asta e ceea ce putem pune la capăt. 286 00:21:19,000 --> 00:21:21,000 Charlotte, aveți vreo-? 287 00:21:21,000 --> 00:21:23,000 Adevărat sau fals >> Adevărat sau fals?. 288 00:21:23,000 --> 00:21:26,000 Care? 289 00:21:26,000 --> 00:21:28,000 Fals. Nu știu. 290 00:21:28,000 --> 00:21:30,000 Fals? Hai să încercăm. 291 00:21:30,000 --> 00:21:32,000 De ce spui retur fals? Asta e mare intuiție. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Nu stiu. 293 00:21:35,000 --> 00:21:39,000 Vom reveni fals, în acest caz, deoarece aceasta va fi implicit noastră 294 00:21:39,000 --> 00:21:44,000 în cazul în care pentru un motiv oarecare lista este goală sau acul 295 00:21:44,000 --> 00:21:46,000 pe care-l căutăm nu există. 296 00:21:46,000 --> 00:21:50,000 Apoi, la sfârșitul foarte, dacă nu vom reveni adevărat mai devreme în această funcție, 297 00:21:50,000 --> 00:21:55,000 întotdeauna am știu că această funcție va spune nope, nu e în matrice. 298 00:21:55,000 --> 00:21:58,000 Nu e în carul cu fân. 299 00:21:58,000 --> 00:22:03,000 Acum, dacă am compila și rulați-l lasă-mă să-salveze astfel încât să putem trage în sus. 300 00:22:03,000 --> 00:22:08,000 Acum, dacă am compila și rula programul nostru, el construiește. 301 00:22:08,000 --> 00:22:12,000 Vom ajunge prompt de mica noastră. 302 00:22:12,000 --> 00:22:20,000 Dacă am lovit 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Nu a imprima nimic. Se pare ca totul sa terminat bine. 304 00:22:25,000 --> 00:22:35,000 Ne-am luat pentru a umple această inch 305 00:22:35,000 --> 00:22:39,000 Am vorbit despre algoritmul într-pseudocod un pic în urmă. 306 00:22:39,000 --> 00:22:44,000 Lasă-mă să văd, salvați acest lucru, 307 00:22:44,000 --> 00:22:49,000 și voi trage ca algoritmul înapoi din nou. 308 00:22:49,000 --> 00:22:51,000 Să lovit pe tipul ăsta. Nope. 309 00:22:51,000 --> 00:22:58,000 Acolo este. 310 00:22:58,000 --> 00:23:03,000 Cum facem acest lucru? 311 00:23:03,000 --> 00:23:11,000 Ceea ce ar fi o strategie bună pentru a demara acest cod? 312 00:23:11,000 --> 00:23:16,000 Trebuie sa alegi un număr în mijloc. 313 00:23:16,000 --> 00:23:23,000 Cum alegem un număr în mijlocul unei matrice? 314 00:23:23,000 --> 00:23:25,000 Orice sugestii? 315 00:23:25,000 --> 00:23:27,000 [Student] strlen împărțit la 2. 316 00:23:27,000 --> 00:23:32,000 Strlen împărțit la 2. Asta e un mare unul. 317 00:23:32,000 --> 00:23:35,000 Strlen lucrări cu tipuri speciale de matrice. 318 00:23:35,000 --> 00:23:38,000 Ce tipuri de matrice? 319 00:23:38,000 --> 00:23:44,000 Tablouri șir de caractere, matrice. 320 00:23:44,000 --> 00:23:48,000 E ca acelasi tip de concept pe care dorim să se aplice, 321 00:23:48,000 --> 00:23:52,000 dar nu putem folosi strlen pentru că nu avem o serie de caractere. 322 00:23:52,000 --> 00:23:55,000 Avem o serie de Ints. 323 00:23:55,000 --> 00:23:58,000 Dar ceea ce nu strlen obține pentru noi? 324 00:23:58,000 --> 00:24:01,000 Știi ce devine pentru noi? 325 00:24:01,000 --> 00:24:03,000 [Student] strlen ne devine lungime. 326 00:24:03,000 --> 00:24:05,000 Exact, acesta devine ne-lungime. 327 00:24:05,000 --> 00:24:09,000 Strlen devine lungimea de matrice pentru noi. 328 00:24:09,000 --> 00:24:14,000 >> Cum ajungem ca in programul nostru de cautare binara? 329 00:24:14,000 --> 00:24:18,000 Cum ti-ar obține lungimea unui tablou? 330 00:24:18,000 --> 00:24:20,000 [Student] strlen? 331 00:24:20,000 --> 00:24:25,000 Puteți obține lungimea unui tablou corect formatat șir C cu strlen. 332 00:24:25,000 --> 00:24:31,000 Problema, însă, este că nu avem o matrice șir. 333 00:24:31,000 --> 00:24:36,000 Dacă ne uităm înapoi la acest cod, putem avea această matrice întreg. 334 00:24:36,000 --> 00:24:38,000 Cum știm cât timp mai este? 335 00:24:38,000 --> 00:24:44,000 [Student] Există unul echivalent pentru efect, cum ar fi int sau am ceva? 336 00:24:44,000 --> 00:24:49,000 Se pare că de fapt nu este, și așa într-un fel, acest lucru este 337 00:24:49,000 --> 00:24:52,000 unul din acele lucruri pe care e bine să știți doar despre C, 338 00:24:52,000 --> 00:24:57,000 că nu există nici o modalitate de a obține lungimea unui array 339 00:24:57,000 --> 00:24:59,000 daca tot te-am da este matrice. 340 00:24:59,000 --> 00:25:02,000 Motivul pentru care funcționează cu siruri de caractere, motiv strlen lucrări, 341 00:25:02,000 --> 00:25:06,000 se datorează faptului că în cazul în care un șir este corect formatat, 342 00:25:06,000 --> 00:25:12,000 aceasta va avea ca special \ 0 caracterul de la sfârșitul foarte. 343 00:25:12,000 --> 00:25:16,000 >> Vă puteți imagina, de asemenea, în cazul în care aveți un șir formatat necorespunzător 344 00:25:16,000 --> 00:25:20,000 și nu există nici \ 0 caracter acolo, atunci totul nu funcționează. 345 00:25:20,000 --> 00:25:22,000 [Student] Poți adăuga \ 0? 346 00:25:22,000 --> 00:25:24,000 Am putea, în acest caz. 347 00:25:24,000 --> 00:25:29,000 Am putea adăuga un fel de \ 0 348 00:25:29,000 --> 00:25:33,000 sau un fel de semnificare caracter și apoi folosi asta. 349 00:25:33,000 --> 00:25:36,000 Dar asta nu e destul de gând să lucreze 350 00:25:36,000 --> 00:25:40,000 deoarece 0 \ este pentru un tip char, 351 00:25:40,000 --> 00:25:43,000 și aici avem Ints. 352 00:25:43,000 --> 00:25:46,000 Un alt lucru este, dacă ar fi să utilizați o valoare deosebită 353 00:25:46,000 --> 00:25:49,000 ca -1 pentru a marca sfârșitul unei matrice 354 00:25:49,000 --> 00:25:54,000 atunci nu am putea stoca un -1 în matrice noastre intregi. 355 00:25:54,000 --> 00:25:56,000 Ne-ar fi blocat. 356 00:25:56,000 --> 00:26:00,000 Se pare că singura modalitate de a obține lungimea 357 00:26:00,000 --> 00:26:03,000 a unei matrice în C este să ne amintim de fapt 358 00:26:03,000 --> 00:26:08,000 atunci când îl configurați și apoi să-l dați în jurul valorii de cu matrice 359 00:26:08,000 --> 00:26:14,000 astfel încât ori de câte ori am o funcție care este de gând să facă ceva de lucru 360 00:26:14,000 --> 00:26:18,000 privind o serie de numere intregi sau flotoare sau dublu sau ce ai, 361 00:26:18,000 --> 00:26:22,000 Am, de asemenea, nevoie de a da lungimea funcția de matrice, a 362 00:26:22,000 --> 00:26:26,000 și că este exact ceea ce am făcut aici, în funcția de căutare. 363 00:26:26,000 --> 00:26:30,000 Dacă vă uitați, ce am făcut atunci când vom trece în gama noastră aici, 364 00:26:30,000 --> 00:26:36,000 am trece, de asemenea, în lungime, dimensiune. 365 00:26:36,000 --> 00:26:41,000 Se întâmplă că am chemat această variabilă aici, 366 00:26:41,000 --> 00:26:43,000 acest parametru sau argument. 367 00:26:43,000 --> 00:26:46,000 Aceasta se numește listă o funcție de argument sau lista de parametri, 368 00:26:46,000 --> 00:26:51,000 și acestea sunt, de asemenea, numite argumente sau parametri. 369 00:26:51,000 --> 00:26:53,000 Oamenii folosesc termeni diferiți în momente diferite. 370 00:26:53,000 --> 00:26:55,000 Am schimbați uneori chiar eu. 371 00:26:55,000 --> 00:27:00,000 Pur și simplu așa se întâmplă că această variabilă aici este numit în mod similar 372 00:27:00,000 --> 00:27:03,000 în acest # define aici. 373 00:27:03,000 --> 00:27:06,000 Dar ei nu sunt același lucru. 374 00:27:06,000 --> 00:27:11,000 Capitalizarea contează. 375 00:27:11,000 --> 00:27:14,000 >> Dacă te uiți la ceea ce se intampla aici, ne declarăm 376 00:27:14,000 --> 00:27:18,000 noastră matrice int, pe care le-am numit numere. 377 00:27:18,000 --> 00:27:23,000 Am dat dimensiunea noastră, care corespunde nostru # define sus la partea de sus. 378 00:27:23,000 --> 00:27:27,000 O să fie 8. 379 00:27:27,000 --> 00:27:35,000 Și apoi, când ne numim atunci funcția nostru de cautare jos, 380 00:27:35,000 --> 00:27:40,000 vom trece în numărul vrem să caute, pe care le-am determinat, 381 00:27:40,000 --> 00:27:43,000 ajuns de la utilizator. 382 00:27:43,000 --> 00:27:46,000 Trecem în matrice, aceste cifre, 383 00:27:46,000 --> 00:27:51,000 și apoi ne, de asemenea, trebuie să treacă în dimensiunea matrice, 384 00:27:51,000 --> 00:27:57,000 și apoi valoarea de dimensiune 8 este stocat 385 00:27:57,000 --> 00:28:01,000 sau au trecut la această dimensiune variabila integer sunat. 386 00:28:01,000 --> 00:28:08,000 Avem dimensiunea matrice. 387 00:28:08,000 --> 00:28:11,000 Acum, dacă ne întoarcem la ceea ce am discutat mai devreme, 388 00:28:11,000 --> 00:28:14,000 Cred că Missy adus în punctul în care ceea ce avem nevoie să faceți este să obțineți lungimea de matrice 389 00:28:14,000 --> 00:28:20,000 și-l împartă cu 2, și că ne va da mijloc. 390 00:28:20,000 --> 00:28:22,000 Să vedem. 391 00:28:22,000 --> 00:28:25,000 Pot avea pe cineva scrie acest lucru și salvați-l în spațiul lor? 392 00:28:25,000 --> 00:28:27,000 Cum despre Leila? 393 00:28:27,000 --> 00:28:31,000 Pot avea scrii asta în? 394 00:28:31,000 --> 00:28:35,000 Scrieți prima linie în cazul în care vă luați lungimea de matrice și de a lua punctul de mijloc 395 00:28:35,000 --> 00:28:41,000 și se păstrează într-o nouă variabilă. 396 00:28:41,000 --> 00:28:44,000 Îți dau câteva secunde. Ești gata? 397 00:28:44,000 --> 00:28:46,000 [Student fără sunet] 398 00:28:46,000 --> 00:28:50,000 Sigur, aș fi putut să vă calcula punctul de mijloc 399 00:28:50,000 --> 00:28:55,000 din carul cu fân matrice în interiorul funcția de căutare 400 00:28:55,000 --> 00:29:03,000 folosind lungimea matrice carul cu fân, care este variabila dimensiunea? 401 00:29:03,000 --> 00:29:08,000 Nimic complicat aici. 402 00:29:08,000 --> 00:29:12,000 [Leila] Tocmai dimensiunea / 2 și doar- 403 00:29:12,000 --> 00:29:17,000 Și salvați-l, și a lovit pe butonul Salvați până aici, la partea de sus, 404 00:29:17,000 --> 00:29:19,000 iar noi vom trage în sus. 405 00:29:19,000 --> 00:29:22,000 Eveniment. 406 00:29:22,000 --> 00:29:28,000 Acolo mergem. Minunat. 407 00:29:28,000 --> 00:29:30,000 >> Așa cum este, aceasta va compila? 408 00:29:30,000 --> 00:29:32,000 [Leila] Nu, aceasta trebuie să fie mai mare. 409 00:29:32,000 --> 00:29:34,000 [Nate] Da, deci ce avem nevoie să facem? 410 00:29:34,000 --> 00:29:36,000 [Leila] Ca mijloc int sau ceva de genul. 411 00:29:36,000 --> 00:29:41,000 Minunat. Da, hai să facem asta, int mijloc = dimensiune. 412 00:29:41,000 --> 00:29:44,000 Aceasta va compila? 413 00:29:44,000 --> 00:29:47,000 Să ștergeți acest comentariu si sa-l afară din drum. 414 00:29:47,000 --> 00:29:50,000 Ceea ce nu se va compila despre asta? 415 00:29:50,000 --> 00:29:52,000 Nu facem nimic cu întreg, 416 00:29:52,000 --> 00:29:55,000 așa că trebuie să-l imprimați sau ceva de genul asta. 417 00:29:55,000 --> 00:29:58,000 Da, exact. 418 00:29:58,000 --> 00:30:00,000 Vom obține o variabilă neutilizat. 419 00:30:00,000 --> 00:30:02,000 Ce altceva nu este de gând să lucreze cu privire la acest lucru? 420 00:30:02,000 --> 00:30:06,000 Cred că ai spus ceva, Sam. Punct și virgulă. 421 00:30:06,000 --> 00:30:08,000 Da, eu sunt lipsesc aceste semne punct și virgulă. 422 00:30:08,000 --> 00:30:14,000 O să fie un lucru constantă pe tot parcursul cursul termenului. 423 00:30:14,000 --> 00:30:17,000 Ultimul lucru voi face este ca eu voi pune niște spațiu alb pe ambele părți 424 00:30:17,000 --> 00:30:23,000 de acest operator aici, din moment ce e de obicei cum facem 425 00:30:23,000 --> 00:30:26,000 în conformitate cu ghidul nostru stil. 426 00:30:26,000 --> 00:30:29,000 Avem mijlocul gama noastră. 427 00:30:29,000 --> 00:30:32,000 Acum, dacă ne amintim înapoi la algoritmul nostru, 428 00:30:32,000 --> 00:30:37,000 ceea ce a fost al doilea pas pe care am avut de a face, odată ce vom avea punctul de mijloc? 429 00:30:37,000 --> 00:30:42,000 [Student] Dacă e mai mare [neauzit]. 430 00:30:42,000 --> 00:30:48,000 Da, așa că trebuie să facem un fel de comparație, și ceea ce ne compararea aici? 431 00:30:48,000 --> 00:30:53,000 Ai spus că dacă acesta este mai mare decât. Ce este în această frază se referă la? 432 00:30:53,000 --> 00:30:57,000 Numărul care apare, în cazul în care este mai mare decât punctul de mijloc, atunci du-te până la matrice? 433 00:30:57,000 --> 00:31:05,000 Exact, deci numărul care apare atunci când ne- 434 00:31:05,000 --> 00:31:10,000 Acul, așa că suntem în comparație cu acul, 435 00:31:10,000 --> 00:31:12,000 și ceea ce ne compararea împotriva acul? 436 00:31:12,000 --> 00:31:15,000 Deoarece acul este ceea ce căutăm. 437 00:31:15,000 --> 00:31:18,000 Noi îl față pentru a ajunge la punctul de mijloc. 438 00:31:18,000 --> 00:31:21,000 >> Dar are sens să verificați pentru a vedea 439 00:31:21,000 --> 00:31:27,000 în cazul în care acul punctul de mijloc =? 440 00:31:27,000 --> 00:31:32,000 Are vreun sens? 441 00:31:32,000 --> 00:31:35,000 Are cineva de acord? 442 00:31:35,000 --> 00:31:40,000 Hai să încercăm, în cazul în care (acul mijlocul ==). 443 00:31:40,000 --> 00:31:42,000 [Student] Nu printf l-ai găsit. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Am gasit \ n"); 445 00:31:51,000 --> 00:31:56,000 În caz contrar-Mă duc să începem să facem ceva diferit aici. 446 00:31:56,000 --> 00:32:00,000 Am de gând să înceapă punerea în jurul valorii de bretele, dacă situațiile tot timpul 447 00:32:00,000 --> 00:32:05,000 doar pentru că dacă am adăuga mai multe lucruri, atunci 448 00:32:05,000 --> 00:32:07,000 noi nu obține compilatoare. 449 00:32:07,000 --> 00:32:09,000 Da, Sam. Ai un punct. 450 00:32:09,000 --> 00:32:12,000 Problema este că mijlocul reprezintă o poziție în matrice, 451 00:32:12,000 --> 00:32:15,000 dar puteți să-l reprezinte la valoarea în acea poziție de matrice. 452 00:32:15,000 --> 00:32:17,000 Asta e un punct de mare. 453 00:32:17,000 --> 00:32:19,000 Ai auzit ce toată lumea a spus Sam? 454 00:32:19,000 --> 00:32:22,000 El a spus că punctul de mijloc așa cum este 455 00:32:22,000 --> 00:32:28,000 reprezintă doar o poziție în matrice, dar nu e elementul real în matrice. 456 00:32:28,000 --> 00:32:30,000 Dacă te gândești la codul asa cum este scris chiar acum, 457 00:32:30,000 --> 00:32:35,000 dacă ne uităm la această matrice aici jos, care are 8 elemente în ea, 458 00:32:35,000 --> 00:32:39,000 ceea ce este valoarea punctului de mijloc va fi în această funcție? 459 00:32:39,000 --> 00:32:41,000 [Student] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Dacă ne uităm pentru numărul 4 - 462 00:32:51,000 --> 00:32:54,000 și putem rula doar acest cod si pune o fata cam trist aici 463 00:32:54,000 --> 00:32:58,000 pentru că nu am găsit-l, dacă vom rula acest cod 464 00:32:58,000 --> 00:33:04,000 cum este acum, îl încărcați, cladire, permiteți-mi să defilați în jos, 465 00:33:04,000 --> 00:33:09,000 și dacă ne uităm pentru numarul 4, 466 00:33:09,000 --> 00:33:18,000 l-am găsit, dar nu am primit asta printf da. 467 00:33:18,000 --> 00:33:23,000 Unul dintre motive este faptul că nu ne-am întoarce adevărat, 468 00:33:23,000 --> 00:33:26,000 dar am găsit într-adevăr numărul 4? 469 00:33:26,000 --> 00:33:28,000 Si Sam se spune nu. 470 00:33:28,000 --> 00:33:31,000 Ce am găsit? 471 00:33:31,000 --> 00:33:35,000 Am găsit cu adevărat punctul de mijloc, care, dacă ne uităm la matrice aici, 472 00:33:35,000 --> 00:33:38,000 o să fie element la indicele 4, că ne uitam la, 473 00:33:38,000 --> 00:33:42,000 care este de 23. 474 00:33:42,000 --> 00:33:46,000 >> Cum ajungem de fapt, acest element la punctul de mijloc 475 00:33:46,000 --> 00:33:48,000 și nu doar punctul de mijloc în sine? 476 00:33:48,000 --> 00:33:52,000 [Student] Ne-ar intra char sau ceva? 477 00:33:52,000 --> 00:33:55,000 Ce-ar face asta, doar din curiozitate? 478 00:33:55,000 --> 00:33:57,000 Poți să elaboreze un pic mai mult? 479 00:33:57,000 --> 00:34:02,000 Trebuie să transforme poziția în numărul, 480 00:34:02,000 --> 00:34:05,000 deci ai de a face o legătură-Cred că e char, dar nu s-ar putea să fie. 481 00:34:05,000 --> 00:34:07,000 Da, asta e un punct bun. 482 00:34:07,000 --> 00:34:12,000 Am făcut o mulțime de funcții de conversie a acestor caractere, în aceste caractere, 483 00:34:12,000 --> 00:34:14,000 în primele două seturi problemă. 484 00:34:14,000 --> 00:34:18,000 Se pare că aici, acest lucru este aproape similar cu 485 00:34:18,000 --> 00:34:24,000 accesarea caracterul lea într-un șir, în cazul în care are sens. 486 00:34:24,000 --> 00:34:30,000 Aici dorim să acceseze elementul mijloc. 487 00:34:30,000 --> 00:34:34,000 Cum facem asta? 488 00:34:34,000 --> 00:34:39,000 Kevin, nu aveți sugestii cum putem să facem asta? 489 00:34:39,000 --> 00:34:44,000 Ai putea face carul cu fân, suport deschis, la mijlocul, închis suport. 490 00:34:44,000 --> 00:34:46,000 Poți să scrii asta pentru noi? 491 00:34:46,000 --> 00:34:51,000 Salvați-l aici, și vom trage asta. 492 00:34:51,000 --> 00:34:56,000 Ne uită la acest linia 9, 493 00:34:56,000 --> 00:34:59,000 și suntem realizând că nu vrem să compare acul la mijloc, 494 00:34:59,000 --> 00:35:03,000 dar în schimb, vrem să comparăm acul 495 00:35:03,000 --> 00:35:07,000 la element la punctul de mijloc poziția în termen de matrice carul cu fân nostru. 496 00:35:07,000 --> 00:35:10,000 Mișto. 497 00:35:10,000 --> 00:35:12,000 Acolo mergem. 498 00:35:12,000 --> 00:35:15,000 Da, care arata destul de bine, în cazul în care (acul == carul cu fân [mijloc]). 499 00:35:15,000 --> 00:35:18,000 Am găsit-o. 500 00:35:18,000 --> 00:35:22,000 Acum, dacă vom rula codul de spate, noi vom ridica un pic, 501 00:35:22,000 --> 00:35:26,000 compileaza, ruleaza, iar acum, dacă ne uităm pentru 4, 502 00:35:26,000 --> 00:35:30,000 nu l-am găsit pentru că acum suntem obtinerea de fapt, numărul 23. 503 00:35:30,000 --> 00:35:33,000 Primim valoarea 23, și asta e ceea ce suntem în comparație cu acul nostru. 504 00:35:33,000 --> 00:35:35,000 Dar asta e bine. Acesta este un pas în direcția cea bună. 505 00:35:35,000 --> 00:35:37,000 >> Asta e ceea ce încercăm să facem. 506 00:35:37,000 --> 00:35:40,000 Noi nu încercăm să compare acul împotriva pozițiilor din matrice 507 00:35:40,000 --> 00:35:44,000 ci mai degrabă împotriva elementelor reale din matrice. 508 00:35:44,000 --> 00:35:49,000 Dacă ne uităm înapoi din nou acum la urmatorul pas in algoritmul nostru, 509 00:35:49,000 --> 00:35:51,000 ceea ce este pasul următor? 510 00:35:51,000 --> 00:35:57,000 Leila deja menționat pe scurt. 511 00:35:57,000 --> 00:36:00,000 [Student] Verificați pentru a vedea dacă este mai mare sau mai mică și apoi să decidă ce cale să se mute. 512 00:36:00,000 --> 00:36:03,000 [Nate] Da, asa cum ne-ar face asta? 513 00:36:03,000 --> 00:36:07,000 Vă poate pune în unele Voi salva această revizuire,, 514 00:36:07,000 --> 00:36:13,000 și apoi, dacă ai pus în anumite linii, care va face asta. 515 00:36:13,000 --> 00:36:15,000 Da, Charlotte >> am o întrebare.. 516 00:36:15,000 --> 00:36:19,000 Nu ar trebui să fie punctul de mijloc - 1, deoarece primul lucru este 517 00:36:19,000 --> 00:36:26,000 e 0 indexat, deci, dacă am pus 4, care nu e de fapt personajul ne ce cautati? 518 00:36:26,000 --> 00:36:30,000 Da, și altă problemă cu care se- 519 00:36:30,000 --> 00:36:35,000 E o captură mare, pentru că ceea ce se va termina până se intampla, eventual, 520 00:36:35,000 --> 00:36:42,000 dacă ne mișcăm și noi nu reglați niciodată inițial? 521 00:36:42,000 --> 00:36:46,000 Cred că ceea ce am putea ajunge să faci încearcă să acceseze 522 00:36:46,000 --> 00:36:49,000 element la poziția a 8-a matrice, 523 00:36:49,000 --> 00:36:53,000 care în acest caz nu există. 524 00:36:53,000 --> 00:36:56,000 Vom dori să facă un fel de contabilitate pentru faptul 525 00:36:56,000 --> 00:36:59,000 pe care le au unele indexare zero. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Ne pare rău, am vrut să spun punctul de mijloc - 1 în paranteze pătrate. 527 00:37:05,000 --> 00:37:08,000 Putem face asta. 528 00:37:08,000 --> 00:37:10,000 Vom reveni la această problemă în doar un pic. 529 00:37:10,000 --> 00:37:13,000 Odată ce vom începe să ajungem la looping reale, 530 00:37:13,000 --> 00:37:16,000 atunci vom vedea cu adevărat această intra in joc. 531 00:37:16,000 --> 00:37:21,000 Pentru moment, putem face asta, dar ai dreptate. 532 00:37:21,000 --> 00:37:28,000 Că indexarea zero, va avea un efect de care avem nevoie pentru a explica. 533 00:37:28,000 --> 00:37:30,000 Să vedem. 534 00:37:30,000 --> 00:37:34,000 >> Cum este mai mare decât și mai puțin de-? 535 00:37:34,000 --> 00:37:36,000 [Student] ajung cum se face mai mare decât și mai puțin de o parte. 536 00:37:36,000 --> 00:37:41,000 Eu doar nu era sigur ce să imprimați, dacă veți găsi că aceasta este mai mică decât jumătatea carul cu fân sau mai mare. 537 00:37:41,000 --> 00:37:43,000 Aici pot salva ceea ce I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Da, dacă salvați ceea ce ai, iar noi vom trage în sus. 539 00:37:47,000 --> 00:37:49,000 Acolo mergem. 540 00:37:49,000 --> 00:37:51,000 [Student] Și mi-am pus semne de întrebare pentru ceea ce nu știam. 541 00:37:51,000 --> 00:37:54,000 [Nate] care arata foarte bine. 542 00:37:54,000 --> 00:37:58,000 Aici avem semne de întrebare pentru că noi încă nu știm 543 00:37:58,000 --> 00:38:06,000 ceea ce am de gând să faci destul de încă. 544 00:38:06,000 --> 00:38:12,000 Ceea ce am vrea să facem-Oops, ne-am luat niște bretele toți ciudate pe noi. 545 00:38:12,000 --> 00:38:15,000 Vom corecta aceste acolade. 546 00:38:15,000 --> 00:38:19,000 Acolo mergem. 547 00:38:19,000 --> 00:38:22,000 Și deci ce vrem să facem, în conformitate cu algoritmul nostru, 548 00:38:22,000 --> 00:38:27,000 dacă nu găsim acul? 549 00:38:27,000 --> 00:38:32,000 Cuvânt de spus în cazul în care acul este mai mică decât ceea ce ne uita la. Kevin. 550 00:38:32,000 --> 00:38:34,000 Doar uita-te la jumătatea stângă. 551 00:38:34,000 --> 00:38:40,000 Corect, așa că vom pune un comentariu aici care spune că "uită-te la jumătatea stângă." 552 00:38:40,000 --> 00:38:46,000 Și dacă acul este mai mare decât carul cu fân de la punctul de mijloc, ceea ce vrem sa facem? 553 00:38:46,000 --> 00:38:48,000 [Student] Apoi te uiti la jumătatea din dreapta. 554 00:38:48,000 --> 00:38:53,000 Uită-te la jumătatea dreaptă, "uită-te la jumătatea din dreapta." 555 00:38:53,000 --> 00:38:58,000 Nu prea ponosit. 556 00:38:58,000 --> 00:39:05,000 Ok, deci, în acest moment, lucrurile sunt în căutarea destul de bine. 557 00:39:05,000 --> 00:39:13,000 Problema cu codul asa cum este scris este ceea ce? 558 00:39:13,000 --> 00:39:15,000 [Student] Tu nu ai obiective pentru jumatati. 559 00:39:15,000 --> 00:39:18,000 Corect, nu avem obiective pentru jumatati. 560 00:39:18,000 --> 00:39:20,000 Suntem, de asemenea, sunt doar de gând să treacă prin această dată. 561 00:39:20,000 --> 00:39:23,000 Suntem doar de gând să se uite la un mijloc. 562 00:39:23,000 --> 00:39:27,000 Fie elementul este acolo, sau nu este. 563 00:39:27,000 --> 00:39:34,000 Pentru a finaliza acest lucru, vom avea nevoie pentru a face un fel de repetiție. 564 00:39:34,000 --> 00:39:39,000 Avem nevoie de a păstra repeta până când vom găsi că 565 00:39:39,000 --> 00:39:43,000 fie element este acolo pentru că ne-am redus în jos și în cele din urmă găsit-o, 566 00:39:43,000 --> 00:39:46,000 sau nu e acolo pentru că ne-am uitat prin toate lucrurile 567 00:39:46,000 --> 00:39:52,000 în jumatati corespunzătoare din matrice și a constatat că nimic nu este acolo. 568 00:39:52,000 --> 00:39:56,000 >> Ori de câte ori ne-am luat acest repetiție se întâmplă, ceea ce vom folosi? 569 00:39:56,000 --> 00:39:58,000 [Student] O bucla. 570 00:39:58,000 --> 00:40:00,000 Un fel de buclă. Da. 571 00:40:00,000 --> 00:40:03,000 [Student] Putem face o bucla do-timp și să-l faci asta și apoi în timp ce 572 00:40:03,000 --> 00:40:10,000 acul nu este egal-Sunt sigur unde am fost de gând cu asta. 573 00:40:10,000 --> 00:40:18,000 Dar, un fel de face acest lucru, atâta timp cât aceasta nu este egal valoare pe care introduse de utilizator. 574 00:40:18,000 --> 00:40:21,000 Da, așa că hai să vedem, cum s-ar putea scrie acest sine? 575 00:40:21,000 --> 00:40:23,000 Ai spus că vom folosi o bucla do-timp. 576 00:40:23,000 --> 00:40:26,000 În cazul în care nu face de start? 577 00:40:26,000 --> 00:40:33,000 [Student] Imediat după mărimea / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Ok, și ce-o să facem? 579 00:40:42,000 --> 00:40:44,000 Vom umple în timp ce mai târziu. 580 00:40:44,000 --> 00:40:46,000 Ce am de gând să faci? 581 00:40:46,000 --> 00:40:49,000 [Student] Nu vrem să facem toate lucrurile avem în porțiunea în cazul în care? 582 00:40:49,000 --> 00:40:52,000 [Nate] Fa toate astea, grozav. 583 00:40:52,000 --> 00:40:55,000 Copy si paste. 584 00:40:55,000 --> 00:40:59,000 Oh, omule. 585 00:40:59,000 --> 00:41:03,000 Să vedem dacă funcționează, dacă putem fila peste asta. 586 00:41:03,000 --> 00:41:08,000 Frumos. 587 00:41:08,000 --> 00:41:16,000 Bine, și am salva acest lucru voi avea. 588 00:41:16,000 --> 00:41:21,000 În regulă, și vom face acest lucru în timp ce- 589 00:41:21,000 --> 00:41:25,000 ceea ce a fost starea în timp ce ai fost, după? 590 00:41:25,000 --> 00:41:31,000 [Student] În timp ce acul nu este egal, așa cum ar fi semn de exclamare. 591 00:41:31,000 --> 00:41:37,000 Dar eu nu sunt sigur că exact ceea ce este încă. 592 00:41:37,000 --> 00:41:39,000 [Nate] Da, aceasta este o modalitate de a face acest lucru. 593 00:41:39,000 --> 00:41:41,000 Sam, ai un comentariu? 594 00:41:41,000 --> 00:41:43,000 [Sam] Mi-am amintit atunci când m-am uitat la video, 595 00:41:43,000 --> 00:41:48,000 Mi-am luat o captură de ecran a unuia dintre-ca atunci cand am facut pseudocod pentru ea, 596 00:41:48,000 --> 00:41:52,000 a existat o relație între max și min. 597 00:41:52,000 --> 00:41:58,000 Cred că a fost ceva de genul daca max este niciodată mai mică de min. 598 00:41:58,000 --> 00:42:00,000 Am prins-o. 599 00:42:00,000 --> 00:42:04,000 [Sam] Sau, în cazul în care dorești maxim nu este mai mică de minute sau ceva de genul asta, 600 00:42:04,000 --> 00:42:06,000 pentru că asta ar însemna că ați căutat totul. 601 00:42:06,000 --> 00:42:13,000 >> Da, deci ceea ce nu-l suna ca max și min s-au referit la? 602 00:42:13,000 --> 00:42:16,000 [] Sam valorile pe care-întregi, care vor să se schimbe 603 00:42:16,000 --> 00:42:18,000 relativ la care am pus punctul de mijloc. 604 00:42:18,000 --> 00:42:20,000 Exact. 605 00:42:20,000 --> 00:42:24,000 [Sam] În acel moment, o să [neauzit] calcula max și min. 606 00:42:24,000 --> 00:42:29,000 Punct de mijloc este această idee max și min. 607 00:42:29,000 --> 00:42:35,000 Asta face sens pentru oameni buni? 608 00:42:35,000 --> 00:42:39,000 Dacă ar fi să începi să cauți la modul în care vom face acest lucru iterație, 609 00:42:39,000 --> 00:42:43,000 ai perfecta dreptate pe care ne-o dorim pentru a utiliza un fel de do-while. 610 00:42:43,000 --> 00:42:49,000 Dar cred că dacă ne amintim ceea ce se întâmplă la fața locului a acestei matrice 611 00:42:49,000 --> 00:42:53,000 și ceea ce se intampla de fapt-Mă duc să scrie pe aici- 612 00:42:53,000 --> 00:42:58,000 la prima iterație de căutare binară, avem, 613 00:42:58,000 --> 00:43:05,000 Am de gând să folosească b și e pentru a indica începutul. 614 00:43:05,000 --> 00:43:10,000 Și apoi sfârșitul gama noastră. 615 00:43:10,000 --> 00:43:14,000 Știm că începutul este la 4 chiar aici, 616 00:43:14,000 --> 00:43:18,000 și știm că sfârșitul este la 108. 617 00:43:18,000 --> 00:43:23,000 Spune-ne ce căutați numărul 15. 618 00:43:23,000 --> 00:43:27,000 Prima dată când am face acest lucru, cum am văzut mai devreme, 619 00:43:27,000 --> 00:43:30,000 punctul de mijloc este fie de gând să fie de 16 sau 23 620 00:43:30,000 --> 00:43:34,000 în funcție de modul în care se calculează lucrurile. 621 00:43:34,000 --> 00:43:37,000 Deoarece împărțirea în mod egal în mijlocul ne-ar da acest spațiu 622 00:43:37,000 --> 00:43:42,000 între 16 și 23, nu putem împărți în mod egal l 623 00:43:42,000 --> 00:43:47,000 sau diviza și de a lua de la un punct de mijloc adevărat. 624 00:43:47,000 --> 00:43:49,000 Ne vom uita la 16. 625 00:43:49,000 --> 00:43:55,000 Vom realiza "Hei, 16> 15 că suntem în căutarea pentru." 626 00:43:55,000 --> 00:43:59,000 Să se uite apoi la jumătatea stângă a matrice 627 00:43:59,000 --> 00:44:03,000 ceea ce vom ajunge să faci este aruncând 628 00:44:03,000 --> 00:44:07,000 această porțiune întreg superior 629 00:44:07,000 --> 00:44:16,000 și spunând, "Bine, acum obiectivul nostru va fi aici." 630 00:44:16,000 --> 00:44:22,000 Urmatoarea iteratie a buclei noastre, suntem acum se uită la acest tablou, 631 00:44:22,000 --> 00:44:25,000 efectiv au aruncat această porțiune, deoarece acum 632 00:44:25,000 --> 00:44:30,000 dacă luăm punctul de mijloc pentru a fi diferența dintre începutul și sfârșitul, 633 00:44:30,000 --> 00:44:34,000 vom găsi punctul de mijloc noastră de a fi 8, 634 00:44:34,000 --> 00:44:40,000 pe care le putem testa apoi 8 pentru a vedea unde se află în raport cu numărul căutăm, 635 00:44:40,000 --> 00:44:44,000 15, găsesc că 15 este mai mare, 636 00:44:44,000 --> 00:44:49,000 așa că trebuie să se mute în partea dreaptă a listei, 637 00:44:49,000 --> 00:44:51,000 care știm că suntem oameni, iar noi le putem vedea. 638 00:44:51,000 --> 00:44:54,000 Știm că porțiunea din dreapta va fi în cazul în care vom găsi, 639 00:44:54,000 --> 00:45:01,000 dar calculatorul nu știe că, până ce vom face este de fapt vă vom 640 00:45:01,000 --> 00:45:04,000 au acest du-te în sus, și acum începutul și la sfârșitul 641 00:45:04,000 --> 00:45:11,000 sunt același loc, astfel încât punctul de mijloc devine numărul numai în lista de la acel moment, 642 00:45:11,000 --> 00:45:16,000 care este de 15, și am găsit-o. 643 00:45:16,000 --> 00:45:21,000 Oare faptul că puțină lumină pe care acest ansamblu și notarea max min se întâmplă, 644 00:45:21,000 --> 00:45:24,000 urmărirea de obiective de matrice, în scopul de a da seama 645 00:45:24,000 --> 00:45:35,000 cum pentru a restrânge lucrurile? 646 00:45:35,000 --> 00:45:42,000 >> Ce s-ar întâmpla dacă nu ar fi fost egală cu 15 acum? 647 00:45:42,000 --> 00:45:52,000 Ce se întâmplă dacă am fost în căutarea pentru 15 și, în schimb, acest număr au fost, de asemenea, 16? 648 00:45:52,000 --> 00:45:54,000 Ne-ar spune, "Oh, e mai mare. 649 00:45:54,000 --> 00:45:57,000 Vrem să ne întoarcem la stânga. " 650 00:45:57,000 --> 00:46:01,000 Și ne-am muta la adresa noastra de e dreapta, 651 00:46:01,000 --> 00:46:06,000 moment în care avem un obiectiv care ar fi în conflict. 652 00:46:06,000 --> 00:46:09,000 Aceasta nu ar fi în măsură pentru a căuta orice elemente de mai multe 653 00:46:09,000 --> 00:46:13,000 pentru că acum avem obiectiv noastră și punctul nostru de inceput, 654 00:46:13,000 --> 00:46:16,000 max și min noastră noastră, sunt acum răsturnat. 655 00:46:16,000 --> 00:46:23,000 Am căuta prin întregul tablou. Nu putem găsi nimic. 656 00:46:23,000 --> 00:46:27,000 Asta e punctul în care am vrut să spun, "Bine, vom opri acest algoritm. 657 00:46:27,000 --> 00:46:34,000 Nu am găsit nimic. Noi știm că nu e aici. " 658 00:46:34,000 --> 00:46:36,000 Cum este acest gând? 659 00:46:36,000 --> 00:46:40,000 [Student] Cum anume calculatorul comuta final? 660 00:46:40,000 --> 00:46:45,000 Cum se ajunge la sfârșitul înainte de începutul? 661 00:46:45,000 --> 00:46:48,000 De terminare se termină înainte de începerea 662 00:46:48,000 --> 00:46:54,000 din cauza matematica pe care am de gând să faci de fiecare dată când facem asta. 663 00:46:54,000 --> 00:47:00,000 Modul în care ne schimba este daca te uiti la prima dată facem acest swap 664 00:47:00,000 --> 00:47:03,000 în cazul în care avem început la 4 și la sfârșitul 665 00:47:03,000 --> 00:47:13,000 tot drumul în jos, la 108 și punctul de mijloc noastră, să zicem, la 16 - 666 00:47:13,000 --> 00:47:20,000 Am de gând să resetați asta înapoi la 15-în cazul în care suntem în căutarea de 15, 667 00:47:20,000 --> 00:47:25,000 am știut că ceea ce am făcut atunci când am verificat 16 și a văzut că era mai mare 668 00:47:25,000 --> 00:47:28,000 și a vrut să se debaraseze partea dreaptă a întregii liste, 669 00:47:28,000 --> 00:47:36,000 am văzut că ceea ce am vrut sa faci este sa treci acest e chiar aici. 670 00:47:36,000 --> 00:47:44,000 Efectiv, e sa mutat la unul înainte de punctul de mijloc. 671 00:47:44,000 --> 00:47:48,000 De asemenea, atunci când am făcut această repetare a algoritmului 672 00:47:48,000 --> 00:47:51,000 și punctul de mijloc a fost la 8, 673 00:47:51,000 --> 00:47:55,000 am constatat că 8 <15, asa ca am vrut sa se mute b 674 00:47:55,000 --> 00:48:00,000 un trecut mijloc. 675 00:48:00,000 --> 00:48:07,000 Acum, începutul și sfârșitul sunt atât împreună la acest 15. 676 00:48:07,000 --> 00:48:10,000 >> Dacă am fi fost întâmplă pentru a cauta o alta valoare, nu, 15, 677 00:48:10,000 --> 00:48:14,000 sau în cazul în care aceasta ar fi în locul 15 a fost de 16, 678 00:48:14,000 --> 00:48:20,000 ne-ar fi constatat că e vrem să mutați unul înainte de punctul de mijloc. 679 00:48:20,000 --> 00:48:33,000 Acum e acolo ar fi oglindită mai mică de b. 680 00:48:33,000 --> 00:48:39,000 Să se plimbe prin modul în care vom ajunge de fapt la acest algoritm de codare. 681 00:48:39,000 --> 00:48:44,000 Știm că vrem să avem acest calcul mijlocul. 682 00:48:44,000 --> 00:48:48,000 Știm, de asemenea, că vrem să urmăriți începutul și sfârșitul matrice 683 00:48:48,000 --> 00:48:51,000 din gama noastră curentă astfel încât ne putem da seama 684 00:48:51,000 --> 00:48:56,000 în cazul în care această jumătate din stânga a listei este și în cazul în care jumătatea din dreapta a listei este. 685 00:48:56,000 --> 00:49:03,000 Noi facem asta, fie cu încep și se sfârșesc, 686 00:49:03,000 --> 00:49:07,000 sau putem numi min și max. 687 00:49:07,000 --> 00:49:10,000 Voi folosi încep și se termină de data asta. 688 00:49:10,000 --> 00:49:15,000 Când vom începe, dacă ne uităm înapoi la exemplul nostru aici, 689 00:49:15,000 --> 00:49:20,000 începutul nostru a fost stabilit la începutul matrice, la fel de natural. 690 00:49:20,000 --> 00:49:25,000 Ceea ce indicele a fost asta? Ce ar trebui să înceapă noastră să fie? 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] Da, asa ca am putea stabili egală cu carul cu fân [0]. 694 00:49:37,000 --> 00:49:40,000 Problema, însă, este faptul că acest lucru dă nu ne poziția primului element. 695 00:49:40,000 --> 00:49:45,000 Ea ne dă indicele primului element sau valoarea reală de la acea prima poziție. 696 00:49:45,000 --> 00:49:47,000 [Student] Asta va converti la 0.20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Ce este acest lucru va face este bine-, acesta nu va face nici o conversie. 698 00:49:52,000 --> 00:49:56,000 Ce va face este că va păstra un 4 în incepe, 699 00:49:56,000 --> 00:49:59,000 și apoi va fi greu pentru a face comparații față de a începe 700 00:49:59,000 --> 00:50:03,000 deoarece Begin va organiza valoarea de 4, 701 00:50:03,000 --> 00:50:06,000 care este începutul gama noastră, 702 00:50:06,000 --> 00:50:08,000 dar vrem să urmăriți indicii în matrice 703 00:50:08,000 --> 00:50:11,000 spre deosebire de valorile. 704 00:50:11,000 --> 00:50:17,000 Vom folosi de fapt un 0, la fel ca asta. 705 00:50:17,000 --> 00:50:20,000 Pentru sfârșitul matrice-Charlotte a adus asta un pic mai devreme. 706 00:50:20,000 --> 00:50:23,000 Acest lucru este în cazul în care vom lua în considerare indexarea zero. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, care e sfârșitul matrice? 708 00:50:25,000 --> 00:50:28,000 Care este indicele de la sfârșitul? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Dimensiuni - 1. 710 00:50:30,000 --> 00:50:32,000 Da, și pe care ar trebui să le folosim dimensiunea? 711 00:50:32,000 --> 00:50:35,000 Ar trebui să ne folosim mărimea capitalului sau dimensiunea mici? 712 00:50:35,000 --> 00:50:37,000 Capitalul dimensiune. 713 00:50:37,000 --> 00:50:42,000 În acest caz, am putea folosi dimensiunea de capital. 714 00:50:42,000 --> 00:50:45,000 Dacă am vrut ca aceasta functie sa fie portabil 715 00:50:45,000 --> 00:50:48,000 și de a folosi această funcție în alte programe, 716 00:50:48,000 --> 00:50:50,000 putem folosi de fapt, dimensiunea litere mici. 717 00:50:50,000 --> 00:50:52,000 E prea bine. 718 00:50:52,000 --> 00:51:01,000 Dar Charlotte este total adevărat că ne dorim să avem dimensiunea - 1. 719 00:51:01,000 --> 00:51:03,000 La acest punct de 720 00:51:03,000 --> 00:51:05,000 [Student] Cum se face că puteți utiliza dimensiunea majuscule? 721 00:51:05,000 --> 00:51:07,000 Cum se face că am putea folosi dimensiunea majuscule? 722 00:51:07,000 --> 00:51:13,000 Se pare că acestea sunt într-adevăr # definește, 723 00:51:13,000 --> 00:51:19,000 sub capota, un text ca găsi și înlocui, în cazul în care are sens. 724 00:51:19,000 --> 00:51:24,000 Atunci când compilați codul, preprocesare faza 725 00:51:24,000 --> 00:51:27,000 a compilator trece prin fișierul, 726 00:51:27,000 --> 00:51:31,000 si se pare ca peste tot pe care le-ați scris dimensiunea de capital, 727 00:51:31,000 --> 00:51:39,000 și-l inlocuieste că textul literalmente, cu un 8, la fel ca asta. 728 00:51:39,000 --> 00:51:42,000 În acest sens, acest lucru este foarte diferit de o variabilă. 729 00:51:42,000 --> 00:51:45,000 Ea nu ocupă spațiu în memorie. 730 00:51:45,000 --> 00:51:52,000 E un simplu truc de înlocuire de text. 731 00:51:52,000 --> 00:51:57,000 În acest caz, vom folosi dimensiune. 732 00:51:57,000 --> 00:52:01,000 De aici ne dorim sa facem un fel de repetiție, 733 00:52:01,000 --> 00:52:03,000 si suntem pe drumul cel bun nostru de do-while. 734 00:52:03,000 --> 00:52:08,000 Vrem să facem ceva până când o condiție nu deține mai, 735 00:52:08,000 --> 00:52:12,000 și așa cum am văzut mai devreme, am văzut că această condiție 736 00:52:12,000 --> 00:52:19,000 a fost într-adevăr, că noi nu vrem final 737 00:52:19,000 --> 00:52:24,000 să fie mai mică de a începe. 738 00:52:24,000 --> 00:52:26,000 >> Aceasta este starea noastră oprire. 739 00:52:26,000 --> 00:52:35,000 În cazul în care se întâmplă acest lucru, dorim să oprească și să declare ca, "Hei, nu am găsit nimic." 740 00:52:35,000 --> 00:52:43,000 Pentru a exprima acest lucru, nu doriți să utilizați un fel de buclă. 741 00:52:43,000 --> 00:52:49,000 În acest caz, ar fi o buclă do-timp, o buclă pentru, o buclă în timp ce? 742 00:52:49,000 --> 00:52:51,000 Avem o bucla do-timp aici. 743 00:52:51,000 --> 00:52:53,000 Ai tipi ca această abordare? 744 00:52:53,000 --> 00:52:59,000 Crezi că ar trebui să încercăm o abordare diferită? 745 00:52:59,000 --> 00:53:01,000 Kevin, orice fel de gânduri? 746 00:53:01,000 --> 00:53:06,000 Am putea avea o buclă în timp ce pentru că știm maximă 747 00:53:06,000 --> 00:53:11,000 ar fi mai mare decât min la start oricum. 748 00:53:11,000 --> 00:53:14,000 Da, deci nu e nici o inițializare, care trebuie să se întâmple. 749 00:53:14,000 --> 00:53:17,000 Aceste bucle do-timp sunt mari atunci când aveți pentru a inițializa ceva 750 00:53:17,000 --> 00:53:21,000 înainte, apoi testarea, întrucât aici 751 00:53:21,000 --> 00:53:26,000 știm că nu vom continua să reinitializing atât încep și se termină 752 00:53:26,000 --> 00:53:28,000 fiecare rundă a buclei. 753 00:53:28,000 --> 00:53:32,000 Știm că vrem să le inițializa, apoi verificați starea noastră. 754 00:53:32,000 --> 00:53:38,000 În acest caz, voi merge, de fapt, cu o buclă în timp ce simplu. 755 00:53:38,000 --> 00:53:44,000 Se pare că nu-timp se utilizează bucle destul de rar. 756 00:53:44,000 --> 00:53:49,000 O mulțime de locuri nu învață măcar nu în timp ce buclele. 757 00:53:49,000 --> 00:53:53,000 Sunt bune pentru manipularea introduse de utilizator, astfel că am văzut o mulțime de ei până în prezent. 758 00:53:53,000 --> 00:53:59,000 Dar normală și în timp ce pentru bucle sunt mult mai frecvente. 759 00:53:59,000 --> 00:54:03,000 Se pare că această condiție scris 760 00:54:03,000 --> 00:54:09,000 nu va face într-adevăr ne-mult bine, și de ce este asta? 761 00:54:09,000 --> 00:54:11,000 Îmi pare rău, nu știu numele tău. 762 00:54:11,000 --> 00:54:13,000 Sunt Jerry. >> Ne pare rau? 763 00:54:13,000 --> 00:54:15,000 E B-O-R-U-I. 764 00:54:15,000 --> 00:54:18,000 Oh, bine. 765 00:54:18,000 --> 00:54:23,000 Eu nu te văd pe lista mea. 766 00:54:23,000 --> 00:54:26,000 Oh, e pentru că-oh, care face sens. 767 00:54:26,000 --> 00:54:31,000 Ai o idee de ce această buclă în timp ce ar putea să nu funcționeze așa cum este prevăzut, 768 00:54:31,000 --> 00:54:38,000 ca scris cu condiția? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Vrei sa spui ca vrei toate lucrurile, după o în-? 770 00:54:43,000 --> 00:54:46,000 Da, așa că e unul. 771 00:54:46,000 --> 00:54:49,000 Am putea avea de a pune toate lucrurile astea în timp ce bucla, care este total adevărat. 772 00:54:49,000 --> 00:54:55,000 Un alt lucru care este un pic mai problematic, însă, este faptul că această condiție nu funcționează. 773 00:54:55,000 --> 00:54:57,000 [Student] Trebuie să-l flip. 774 00:54:57,000 --> 00:55:04,000 Corect, deci aceasta conditie nu va fi niciodată adevărat, inițial felul am vorbit despre asta. 775 00:55:04,000 --> 00:55:08,000 Vrem să facem ceva până când apare 00:55:13,000 dar vrem să facem ceva în timp ce 777 00:55:13,000 --> 00:55:21,000 începe ≤ sfârșitul anului. 778 00:55:21,000 --> 00:55:24,000 >> Nu e faptul că inversarea logicii acolo. 779 00:55:24,000 --> 00:55:27,000 Sunt vinovat de a face aceste greșeli tot timpul. 780 00:55:27,000 --> 00:55:31,000 [Student] De ce trebuie să fie mai mică sau egală cu? 781 00:55:31,000 --> 00:55:33,000 Pentru că îți amintești cazul în care am ajuns să 782 00:55:33,000 --> 00:55:36,000 în cazul în care exista doar un singur element, și am fost în jos, 783 00:55:36,000 --> 00:55:43,000 si ne uitam la doar 15 în gama noastră? 784 00:55:43,000 --> 00:55:47,000 Și începutul și sfârșitul nostru nostru au fost același element. 785 00:55:47,000 --> 00:55:50,000 Dorim să ne asigurăm că ne ocupam de acest caz. 786 00:55:50,000 --> 00:55:54,000 Dacă am făcut o chintă mai mică, 787 00:55:54,000 --> 00:55:58,000 ne-ar putea să trecem la o matrice 2-element. 788 00:55:58,000 --> 00:56:06,000 Odată ce am ajuns la acel ultim element, în cazul în care au fost elementul nostru, nu ne-ar găsi. 789 00:56:06,000 --> 00:56:10,000 Acum aici, putem face exact ca tine s-au spus. 790 00:56:10,000 --> 00:56:15,000 Putem începe plopping dreptul de lucruri în mijlocul buclei while noastre. 791 00:56:15,000 --> 00:56:20,000 Putem plop, în mijlocul nostru. 792 00:56:20,000 --> 00:56:24,000 Putem lua toate acestea, dacă declarații, 793 00:56:24,000 --> 00:56:30,000 trageți-le afară din această buclă do-timp, 794 00:56:30,000 --> 00:56:34,000 plop-le în, 795 00:56:34,000 --> 00:56:39,000 curăța lucrurile un pic, 796 00:56:39,000 --> 00:56:48,000 și voi merge mai departe și de a salva această revizuire. 797 00:56:48,000 --> 00:56:53,000 Și la acest punct, suntem obtinerea destul de aproape. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Cred că, de asemenea, trebuie să aveți mijlocul int = dimensiunea - 1/2. 800 00:56:58,000 --> 00:57:01,000 Am prins-o, dimensiunea - 1/2. 801 00:57:01,000 --> 00:57:05,000 Este ceva ce avem nevoie pentru a schimba acea linie despre? 802 00:57:05,000 --> 00:57:10,000 Asta a fost o captură bună. 803 00:57:10,000 --> 00:57:14,000 >> Ce face mărime face? Suntem în continuă schimbare dimensiune? 804 00:57:14,000 --> 00:57:17,000 În scopul de a păstra linia de acest fel, vom avea pentru a modifica dimensiunea. 805 00:57:17,000 --> 00:57:21,000 Avem de a schimba dimensiunea de fiecare dată când mergem în jurul valorii de bucla for. 806 00:57:21,000 --> 00:57:25,000 Dar amintiți-vă atunci când am fost de gând prin exemplul nostru doar un pic mai devreme, 807 00:57:25,000 --> 00:57:30,000 si am avut început la 4 808 00:57:30,000 --> 00:57:33,000 și final tot drumul la peste 108? 809 00:57:33,000 --> 00:57:35,000 Cum am calculează punctul de mijloc? 810 00:57:35,000 --> 00:57:38,000 Am fost folosind dimensiunea? 811 00:57:38,000 --> 00:57:40,000 Sau am fost folosind încep și se încheie în schimb? 812 00:57:40,000 --> 00:57:42,000 E diferența între sfârșitul și începutul. 813 00:57:42,000 --> 00:57:50,000 Exact, exact cum ar trebui să și scriu asta, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Doar termina - începe. 815 00:57:52,000 --> 00:57:55,000 Tu nu ar trebui să facă - 1 816 00:57:55,000 --> 00:57:58,000 deoarece - 1 a fost inclusă în final și începe deja. 817 00:57:58,000 --> 00:58:00,000 [Nate] Mare, ai dreptate. 818 00:58:00,000 --> 00:58:03,000 Noi nu trebuie să facem - 1 pentru că - 1 a fost inclusă 819 00:58:03,000 --> 00:58:08,000 și contabilizat, atunci când am inițializa variabila final. 820 00:58:08,000 --> 00:58:11,000 >> Este ceva ce trebuie să fac pentru a avea sintactică această linie face sens? 821 00:58:11,000 --> 00:58:13,000 [Student] Plus începe >> Plus. Începe? 822 00:58:13,000 --> 00:58:15,000 [Student] La sfârșitul. 823 00:58:15,000 --> 00:58:20,000 Pentru că acesta este calculat doar jumătate lungime. 824 00:58:20,000 --> 00:58:26,000 Ai nevoie să adăugați începe. 825 00:58:26,000 --> 00:58:31,000 [Nate] Ce s-ar calcula aceasta pentru noi? 826 00:58:31,000 --> 00:58:35,000 Dacă ne gândim la sfârșitul de pe acest repetare prima bucla a, 827 00:58:35,000 --> 00:58:40,000 final este de gând să fie în indexul poziția 7. 828 00:58:40,000 --> 00:58:43,000 Inceput este în poziția 0. 829 00:58:43,000 --> 00:58:47,000 Amintiți-vă, suntem în căutarea pentru nici unul dintre 830 00:58:47,000 --> 00:58:52,000 Poziția 3 sau 4 pozitii. 831 00:58:52,000 --> 00:58:56,000 Dacă ne uităm la această matematica, doar pentru a face un pic mai concret, 832 00:58:56,000 --> 00:59:02,000 pune niste numere de aici, avem 7, 0, 833 00:59:02,000 --> 00:59:10,000 așa 7-0, și apoi / 2 834 00:59:10,000 --> 00:59:19,000 este de 3 în diviziunea întreg, care este. 835 00:59:19,000 --> 00:59:26,000 Apoi, avem nevoie pentru a adăuga apoi spatele nostru începe? 836 00:59:26,000 --> 00:59:28,000 Noi nu facem în acest caz. 837 00:59:28,000 --> 00:59:31,000 La prima iterație, va fi bine pentru că Begin este 0. 838 00:59:31,000 --> 00:59:36,000 Dar, așa cum am progres, facem într-adevăr toate nevoie doar de 839 00:59:36,000 --> 00:59:42,000 final - începe / 2. 840 00:59:42,000 --> 00:59:46,000 Nu e un truc alta aici, și că este unul dintre anume prioritate. 841 00:59:46,000 --> 00:59:49,000 [Student] Nu avem nevoie de paranteze? 842 00:59:49,000 --> 00:59:53,000 [Nate] Exact, și asta pentru că, dacă nu punem aceste paranteze, 843 00:59:53,000 --> 00:59:58,000 atunci această linie va fi interpretată în schimb 844 00:59:58,000 --> 01:00:09,000 ca (sfârșit) - (începe / 2), care cu siguranta nu vrei. 845 01:00:09,000 --> 01:00:11,000 Ferește-te de aceste regulilor de precedență. 846 01:00:11,000 --> 01:00:15,000 [Student] De ce nu se termina + începe? 847 01:00:15,000 --> 01:00:17,000 De ce nu se termina + începe? 848 01:00:17,000 --> 01:00:19,000 [Student] De ce nu-l asta? 849 01:00:19,000 --> 01:00:24,000 De ce ar fi +? 850 01:00:24,000 --> 01:00:26,000 Cred că ai dreptate. 851 01:00:26,000 --> 01:00:28,000 [Student] Pentru că e media? 852 01:00:28,000 --> 01:00:31,000 [Nate] End + începe, ai dreptate. 853 01:00:31,000 --> 01:00:34,000 Wow, am gafat în totalitate. Ai dreptate. 854 01:00:34,000 --> 01:00:39,000 Dacă făceam minus, ne-ar dori să adăugați începe înapoi inch 855 01:00:39,000 --> 01:00:43,000 În acest caz, esti foarte corect că vrem să ia în considerare media de două, 856 01:00:43,000 --> 01:00:45,000 așa că nu vreau să-i adăugați, spre deosebire de a le scădea. 857 01:00:45,000 --> 01:00:49,000 [Student] ar lucra, de asemenea, dacă ai făcut-end - începe / 2 + a începe. 858 01:00:49,000 --> 01:00:55,000 Ar fi dacă am face-Cred ca da. 859 01:00:55,000 --> 01:01:00,000 >> De exemplu, daca ne uitam la început, 860 01:01:00,000 --> 01:01:04,000 si l-am mutat aici 861 01:01:04,000 --> 01:01:08,000 la 15. 862 01:01:08,000 --> 01:01:12,000 Acum începe este la poziția 2. 863 01:01:12,000 --> 01:01:15,000 Sfârșitul este în poziția 7. 864 01:01:15,000 --> 01:01:21,000 Dacă le scade, avem 5. 865 01:01:21,000 --> 01:01:24,000 Împărțiți că de 2, obținem 2. 866 01:01:24,000 --> 01:01:27,000 Și apoi vom adăuga 2 înapoi în, 867 01:01:27,000 --> 01:01:30,000 și care ne ajunge la locul 4, 868 01:01:30,000 --> 01:01:33,000 care este chiar aici, care este mijlocul. 869 01:01:33,000 --> 01:01:36,000 [Student] Nu avem nevoie pentru a avea grijă de ambalaje? 870 01:01:36,000 --> 01:01:39,000 În ce sens avem nevoie pentru a avea grijă de ambalare? 871 01:01:39,000 --> 01:01:43,000 În cazul în care suma sau diferența dintre 872 01:01:43,000 --> 01:01:45,000 în funcție de modul în care o facem nu este un număr par. 873 01:01:45,000 --> 01:01:49,000 Apoi calculatorul devine confuz, dacă, atunci când este 2,5; 874 01:01:49,000 --> 01:01:52,000 te deplasa la stânga sau la dreapta pentru a determina care este mijlocul? 875 01:01:52,000 --> 01:01:54,000 Am prins-o. 876 01:01:54,000 --> 01:01:56,000 Se pare că, odată cu diviziunea întreg, 877 01:01:56,000 --> 01:01:59,000 nu vom primi niciodată aceste numere în virgulă mobilă. 878 01:01:59,000 --> 01:02:01,000 Noi nu te mai zecimal. 879 01:02:01,000 --> 01:02:04,000 E complet eliminate. 880 01:02:04,000 --> 01:02:08,000 Dacă aveți un calculator impartiti doua variabile int, 881 01:02:08,000 --> 01:02:11,000 și unul este de 7, iar celălalt este 2, 882 01:02:11,000 --> 01:02:13,000 nu vei primi 3.5, ca rezultat. 883 01:02:13,000 --> 01:02:16,000 Acesta va primi 3. 884 01:02:16,000 --> 01:02:19,000 Restul va fi aruncată, asa ca este eficient rotunjire- 885 01:02:19,000 --> 01:02:24,000 Nu o rundă, ci mai degrabă o podea, dacă voi sunt familiarizați cu faptul că, în matematică, 886 01:02:24,000 --> 01:02:27,000 în cazul în care vă aruncați complet zecimal, 887 01:02:27,000 --> 01:02:31,000 și așa sunteți în esență, că trunchierea în jos la cel mai apropiat 888 01:02:31,000 --> 01:02:33,000 Total pozitii, la cel mai apropiat număr întreg. 889 01:02:33,000 --> 01:02:38,000 [Student] Dar atunci asta e problematică, deoarece în cazul în care aveți o serie de 7 elemente 890 01:02:38,000 --> 01:02:43,000 apoi faptul că ia în mod automat elementul treia din punctul de mijloc in loc de 4. 891 01:02:43,000 --> 01:02:46,000 Cum avem de a face cu asta? 892 01:02:46,000 --> 01:02:49,000 E problematic, deoarece, dacă am avut o serie de 7, 893 01:02:49,000 --> 01:02:54,000 ar alege treilea loc de 4. 894 01:02:54,000 --> 01:02:56,000 Ați putea explica un pic mai mult? 895 01:02:56,000 --> 01:02:59,000 [Student] Pentru că, dacă aveți 7 elemente, atunci elementul patra 896 01:02:59,000 --> 01:03:04,000 ar fi punctul de mijloc, nu? 897 01:03:04,000 --> 01:03:07,000 Amintiți-vă comentariul tau despre a fi indexate la zero, totuși. 898 01:03:07,000 --> 01:03:10,000 [Student] Da, astfel încât în ​​poziția 3. Asta ar fi punctul de mijloc. 899 01:03:10,000 --> 01:03:12,000 Da. 900 01:03:12,000 --> 01:03:16,000 Oh, bine. Înțeleg ce vrei să spui. 901 01:03:16,000 --> 01:03:19,000 E un fel de ciudat, așa cum ne obișnuim cu această noțiune întregii 902 01:03:19,000 --> 01:03:22,000 a scăpa de zecimale. 903 01:03:22,000 --> 01:03:26,000 Asta e un punct de mare. 904 01:03:26,000 --> 01:03:30,000 Să terminăm asta. 905 01:03:30,000 --> 01:03:32,000 Ne-am calculat mijlocul nostru. 906 01:03:32,000 --> 01:03:37,000 >> Testăm pentru a vedea dacă acul nostru este egal cu valoarea de mijloc. 907 01:03:37,000 --> 01:03:41,000 Suntem de imprimare pe care l-am găsit, dar de fapt, ceea ce vrem să facem în această situație? 908 01:03:41,000 --> 01:03:46,000 Am găsit-o, așa că vrem să apelantului știu că l-am găsit. 909 01:03:46,000 --> 01:03:49,000 Avem o funcție care este o functie booleana tastat. 910 01:03:49,000 --> 01:03:54,000 Modul în care ne semnala apelantului funcției noastre pe care suntem gata să mergem 911 01:03:54,000 --> 01:03:58,000 este spunem, "Hei, acest lucru este adevărat." 912 01:03:58,000 --> 01:04:00,000 Cum ne-am face asta, Kevin? 913 01:04:00,000 --> 01:04:02,000 Te cap la cap. >> [Kevin] Adauga return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Exact, return true. 915 01:04:06,000 --> 01:04:12,000 Acum, dacă nu e egal, cum ne-am uita la jumătatea stângă? 916 01:04:12,000 --> 01:04:16,000 Orice idei? 917 01:04:16,000 --> 01:04:18,000 Stella, orice idei? 918 01:04:18,000 --> 01:04:21,000 Aveți nevoie pentru a seta o nouă poziție pentru sfârșitul anului. 919 01:04:21,000 --> 01:04:23,000 Da. 920 01:04:23,000 --> 01:04:29,000 Deci, avem de a face poziția punctului de mijloc - final. 921 01:04:29,000 --> 01:04:33,000 Mare. 922 01:04:33,000 --> 01:04:36,000 Avem nevoie pentru a seta o nouă poziție pentru sfârșitul 923 01:04:36,000 --> 01:04:38,000 să se uite la jumătatea stângă. 924 01:04:38,000 --> 01:04:41,000 Aceasta a fost ceea ce am vorbit despre înainte de a în cazul în care 925 01:04:41,000 --> 01:04:44,000 Mă tot întorc la acest exemplu. 926 01:04:44,000 --> 01:04:50,000 Am începe aici, și apoi am sfârșit tot drumul până aici. 927 01:04:50,000 --> 01:04:53,000 >> Din nou, dacă suntem în căutarea de 15, iar punctul de mijloc nostru este la 16, 928 01:04:53,000 --> 01:04:56,000 și ne dăm seama, "Oops, 16 este mai mare. 929 01:04:56,000 --> 01:04:59,000 Dorim să se mute în jumătatea stângă. " 930 01:04:59,000 --> 01:05:02,000 Ne-ar muta apoi la capăt 15, 931 01:05:02,000 --> 01:05:06,000 și vom face acest lucru luând una departe de punctul de mijloc 932 01:05:06,000 --> 01:05:09,000 și că, în stabilirea scop noul nostru. 933 01:05:09,000 --> 01:05:12,000 De asemenea, în cazul în care vrem să se uite la jumătatea dreaptă, cum ne-ar face asta? 934 01:05:12,000 --> 01:05:14,000 Ai o idee? 935 01:05:14,000 --> 01:05:22,000 [Student] Trebuie doar setat începe să mijlocul + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Mare. 937 01:05:24,000 --> 01:05:29,000 Și acum, în cazul în care nu vom găsi nimic, 938 01:05:29,000 --> 01:05:32,000 nu ca să grijă de pentru noi? 939 01:05:32,000 --> 01:05:36,000 Daniel, nu se considere că grija de pentru noi? 940 01:05:36,000 --> 01:05:38,000 [Daniel] Nr 941 01:05:38,000 --> 01:05:40,000 [Nate] Dacă vom face prin intermediul întregului set și nu găsim nimic, 942 01:05:40,000 --> 01:05:42,000 în cazul în care ar fi faptul că grija de, sau ar trebui să avem grijă de ea? 943 01:05:42,000 --> 01:05:44,000 [Daniel] în timp ce condiție. 944 01:05:44,000 --> 01:05:48,000 [Nate] Da, în timp ce starea, exact. 945 01:05:48,000 --> 01:05:51,000 Acesta va avea grijă de a merge prin matrice întreg dacă nu găsim nimic. 946 01:05:51,000 --> 01:05:53,000 Această buclă în timp ce se va termina. 947 01:05:53,000 --> 01:05:56,000 Noi niciodată nu va fi întâmpinat această condiție, 948 01:05:56,000 --> 01:06:03,000 și ne putem întoarce false. 949 01:06:03,000 --> 01:06:10,000 Putem pleca, de asemenea, în cazul în care această aici ca acest 950 01:06:10,000 --> 01:06:14,000 pentru că, dacă această afirmație este adevărată în cazul în care, 951 01:06:14,000 --> 01:06:16,000 și funcția noastră va reveni, 952 01:06:16,000 --> 01:06:21,000 și astfel vom abandona în esență, această funcție în acest moment 953 01:06:21,000 --> 01:06:24,000 când ne vom întoarce adevărat. 954 01:06:24,000 --> 01:06:28,000 Dar ce se întâmplă cu această structură aici? 955 01:06:28,000 --> 01:06:34,000 Aceasta va funcționa în întregime, sau este vreun defect logic acolo? 956 01:06:34,000 --> 01:06:37,000 >> Există unele defect logic acolo, cu modul în care aceasta este configurat. 957 01:06:37,000 --> 01:06:40,000 Ce ar putea fi? 958 01:06:40,000 --> 01:06:43,000 [Student] De ce ai nevoie - și + 1s? 959 01:06:43,000 --> 01:06:47,000 Care stabilește gama noastră până să fie noul nostru jumătate la stânga și la jumătatea din dreapta. 960 01:06:47,000 --> 01:06:51,000 [Student] Dar de ce nu ai putut să o faci fără - 1s 1s și +? 961 01:06:51,000 --> 01:06:53,000 [Nate] Am putea egală cu punctul de mijloc? 962 01:06:53,000 --> 01:07:04,000 Care ar putea fi problematic în legătură cu asta? 963 01:07:04,000 --> 01:07:08,000 [Student] Cred ca e ineficient pentru ca esti o valoare de verificare care a fost deja verificată. 964 01:07:08,000 --> 01:07:11,000 [Nate] Exact, deci Sam este total dreptate. 965 01:07:11,000 --> 01:07:15,000 Dacă setați final și începe egală cu punctul de mijloc 966 01:07:15,000 --> 01:07:18,000 în loc de - 1 și + 1 reflexiv, 967 01:07:18,000 --> 01:07:22,000 la un moment dat în viitor, vom sfârși prin a verifica punctul de mijloc din nou. 968 01:07:22,000 --> 01:07:26,000 [Student] am început PSET, iar apoi am avut ceva de genul asta 969 01:07:26,000 --> 01:07:30,000 în cazul în care am uitat 1 +, și a ajuns blocat într-o buclă infinită. 970 01:07:30,000 --> 01:07:34,000 Corect, pentru că la un moment dat nu sunteți niciodată de gând să se înceapă și să se încheie 971 01:07:34,000 --> 01:07:39,000 de fapt, să se suprapună. 972 01:07:39,000 --> 01:07:41,000 Mișto. 973 01:07:41,000 --> 01:07:44,000 Nu e un defect mai logic, și anume faptul că aceasta ar trebui să fie cu siguranta 974 01:07:44,000 --> 01:07:48,000 un altfel daca. 975 01:07:48,000 --> 01:07:55,000 De ce s-ar putea fi asta? 976 01:07:55,000 --> 01:07:59,000 >> Motivul este, dacă nu este un altceva, dacă-l-ai vedea, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Da, pentru că vă schimbați punctul final. 978 01:08:02,000 --> 01:08:05,000 [Nate] Exact. 979 01:08:05,000 --> 01:08:07,000 Ne schimbarea final, 980 01:08:07,000 --> 01:08:12,000 și dacă este scris ca acest Vom face-spații între- 981 01:08:12,000 --> 01:08:14,000 se va verifica acest caz. 982 01:08:14,000 --> 01:08:18,000 Acest caz, dacă reușește, va abandona din funcția. 983 01:08:18,000 --> 01:08:21,000 Apoi, acesta va verifica acest caz următoare, 984 01:08:21,000 --> 01:08:24,000 și dacă acest reușește, se va ajusta final, 985 01:08:24,000 --> 01:08:28,000 și apoi va continua pe și să verificați acest caz. 986 01:08:28,000 --> 01:08:31,000 Dar, în acest moment, nu vrem să continue verificarea. 987 01:08:31,000 --> 01:08:35,000 Din fericire, nu am resetat punctul de mijloc aici, 988 01:08:35,000 --> 01:08:39,000 și știm că acest caz nu va reuși. 989 01:08:39,000 --> 01:08:44,000 Dar noi cu siguranta doriți să puneți altceva în cazul în care există în 990 01:08:44,000 --> 01:08:48,000 chiar dacă faptul că ar putea-în acest caz, 991 01:08:48,000 --> 01:08:52,000 deoarece nu suntem de adaptare mijloc, ar face că o diferență? 992 01:08:52,000 --> 01:08:54,000 Nu, pentru că aceste cazuri sunt exclusive. 993 01:08:54,000 --> 01:08:58,000 Din nou, greșeala mea. 994 01:08:58,000 --> 01:09:01,000 Noi nu, cred, nevoie de asta în cazul în care altcineva. 995 01:09:01,000 --> 01:09:05,000 Ne poate da it un try și rulați-l și a vedea ce se întâmplă. 996 01:09:05,000 --> 01:09:08,000 Clădire, a apărut o eroare. 997 01:09:08,000 --> 01:09:12,000 Este, probabil, pentru că am plecat de aceste lui b și e aici. 998 01:09:12,000 --> 01:09:14,000 Nu am nici mai mult de cele de la partea de sus? 999 01:09:14,000 --> 01:09:16,000 Ea nu arata ca ea. 1000 01:09:16,000 --> 01:09:20,000 Noi zoom out, construi, 1001 01:09:20,000 --> 01:09:24,000 acolo se duce, așa că acum, dacă am căuta pentru 15, 1002 01:09:24,000 --> 01:09:28,000 Da. 1003 01:09:28,000 --> 01:09:30,000 Lasă-mă să zoom inch 1004 01:09:30,000 --> 01:09:33,000 15, da. Ne putem rula din nou. 1005 01:09:33,000 --> 01:09:36,000 Încărcarea codul sursă, construirea, care rulează. 1006 01:09:36,000 --> 01:09:41,000 Noi putem căuta ceva de genul 13, 1007 01:09:41,000 --> 01:09:45,000 și nu primim nimic imprimarea, așa că nu e potrivit căreia pentru noi. 1008 01:09:45,000 --> 01:09:51,000 Asta e grozav, pentru că nu este în lista noastră. 1009 01:09:51,000 --> 01:09:53,000 >> Suntem acum în afara timpului. 1010 01:09:53,000 --> 01:09:55,000 Asta o să fie pentru această săptămână. 1011 01:09:55,000 --> 01:10:00,000 Multumesc pentru aderarea, si vezi tu mai tarziu. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]