1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Sezione 3] [meno confortevole] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [Questo è CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Bene, cominciamo. 5 00:00:10,000 --> 00:00:13,000 Benvenuti alla Settimana 4 di CS50. 6 00:00:13,000 --> 00:00:19,000 Se voi ragazzi aprire un browser Web e aprire pset 3, 7 00:00:19,000 --> 00:00:23,000 Scramble con CS50, stiamo per cominciare ad andare 8 00:00:23,000 --> 00:00:26,000 attraverso la sezione di domande. 9 00:00:26,000 --> 00:00:32,000 Proprio come la scorsa settimana, lavoreremo in CS50 spazi, 10 00:00:32,000 --> 00:00:35,000 se ti anche tirare su pure che, 11 00:00:35,000 --> 00:00:43,000 e se si va avanti e visitare questo link che ho qui in alto. 12 00:00:43,000 --> 00:00:45,000 E 'ora di iniziare. 13 00:00:45,000 --> 00:00:51,000 Abbiamo ottenuto il nostro piccolo programma hi qui. Niente di pazzesco. 14 00:00:51,000 --> 00:00:55,000 Una delle prime cose che voglio fare con voi oggi è andare oltre alcune soluzioni 15 00:00:55,000 --> 00:00:58,000 Set di Problema 1, tipo di soluzioni di esempio, 16 00:00:58,000 --> 00:01:03,000 solo così si può avere un'idea di che tipo di personale è la scrittura del codice, 17 00:01:03,000 --> 00:01:07,000 che tipo di studenti di altri codici di scrittura, 18 00:01:07,000 --> 00:01:10,000 e hanno si dà un'occhiata a esso, perché so che è strano 19 00:01:10,000 --> 00:01:14,000 quando si invia una soluzione ad un problema proposto e ricevere commenti 20 00:01:14,000 --> 00:01:18,000 sulla vostra versione, ma a volte è utile per vedere come altre persone lo ha fatto, 21 00:01:18,000 --> 00:01:22,000 in particolare quelli che sono carina. 22 00:01:22,000 --> 00:01:27,000 Per la maggior parte, sono rimasto veramente colpito con le soluzioni che voi ragazzi prodotte. 23 00:01:27,000 --> 00:01:31,000 Non ho ancora iniziato a guardare 2s problemi il set, ma se siete come la prima, 24 00:01:31,000 --> 00:01:34,000 vuol dire solo cose positive. 25 00:01:34,000 --> 00:01:40,000 >> Se guardate le mie revisioni, cominciamo tutta la strada fino a Revisione 1, 26 00:01:40,000 --> 00:01:47,000 e stiamo andando a prendere una rapida occhiata a una soluzione Mario. 27 00:01:47,000 --> 00:01:54,000 Se si tira questo in su, questi programmi che andremo a presentare sono corretti. 28 00:01:54,000 --> 00:01:56,000 Non ci sono stati problemi di correttezza con questi problemi, ma piuttosto, 29 00:01:56,000 --> 00:01:59,000 vogliamo parlare un po 'di problemi di progettazione diverse 30 00:01:59,000 --> 00:02:03,000 , che vengono utilizzate qui. 31 00:02:03,000 --> 00:02:08,000 Una delle cose interessanti che era circa la soluzione 32 00:02:08,000 --> 00:02:11,000 è che ha usato questo costrutto nuovo, chiamato libra definire, 33 00:02:11,000 --> 00:02:15,000 talvolta indicato anche come un hash definire. 34 00:02:15,000 --> 00:02:18,000 Vorrei ingrandire qui. 35 00:02:18,000 --> 00:02:24,000 A # define consente di assegnare un nome a questi numeri nel programma. 36 00:02:24,000 --> 00:02:28,000 In questo caso, l'altezza massima di una piramide in Mario 37 00:02:28,000 --> 00:02:34,000 è stato 23 e piuttosto che mettere 23 in mio codice- 38 00:02:34,000 --> 00:02:37,000 ci riferiamo a quella più forte codifica 23 - 39 00:02:37,000 --> 00:02:43,000 invece questo dà il nome MAX_HEIGHT a quel numero, 40 00:02:43,000 --> 00:02:48,000 in modo che qui nella mia do-while 41 00:02:48,000 --> 00:02:51,000 si può effettivamente fare riferimento a MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 invece di mettere il numero 23 pollici 43 00:02:55,000 --> 00:02:57,000 [Studente] Qual è il vantaggio di fare questo? 44 00:02:57,000 --> 00:02:59,000 Questa è una grande domanda. 45 00:02:59,000 --> 00:03:03,000 Uno è la leggibilità. 46 00:03:03,000 --> 00:03:08,000 Un vantaggio di utilizzare questo # define è la leggibilità. 47 00:03:08,000 --> 00:03:11,000 Quando sto leggendo questo codice, posso vedere quello che sta succedendo. 48 00:03:11,000 --> 00:03:15,000 >> Vedo in questa condizione qui che stiamo testando 49 00:03:15,000 --> 00:03:19,000 per l'altezza essere <0, che potremmo anche definire 50 00:03:19,000 --> 00:03:22,000 essere una altezza minima o un'altezza min. 51 00:03:22,000 --> 00:03:25,000 L'altro vantaggio è che posso leggere il resto della linea per vedere 52 00:03:25,000 --> 00:03:30,000 che stiamo anche il controllo per assicurarsi che l'altezza non è superiore all'altezza massima, 53 00:03:30,000 --> 00:03:35,000 perché abbiamo intenzione di continuare mentre l'altezza è maggiore dell'altezza max. 54 00:03:35,000 --> 00:03:40,000 L'altro vantaggio è che, se diminuire un po 'qui- 55 00:03:40,000 --> 00:03:49,000 se corro questo programma e l'ho eseguito, ad esempio, con 23 in questo momento, 56 00:03:49,000 --> 00:03:52,000 verrà stampata su tutte le 23 righe, proprio come questo. 57 00:03:52,000 --> 00:03:54,000 Ma dire che ho deciso di cambiare l'altezza massima, 58 00:03:54,000 --> 00:03:57,000 e ora voglio limitare l'altezza massima delle piramidi 59 00:03:57,000 --> 00:04:06,000 essere solo dire-l'uomo, che era originale. 60 00:04:06,000 --> 00:04:14,000 # Include, # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 e diciamo che abbiamo voluto impostare uguale a 10. 62 00:04:18,000 --> 00:04:22,000 Ora, a questo punto, tutto quello che dovevo fare era cambiare in questa posizione uno. 63 00:04:22,000 --> 00:04:27,000 Posso ricompilare il codice, e ora se cerco di digitare 12, 64 00:04:27,000 --> 00:04:30,000 che mi chiederà di nuovo. 65 00:04:30,000 --> 00:04:33,000 In questo caso, stiamo solo usando MAX_HEIGHT volta. 66 00:04:33,000 --> 00:04:37,000 Non è quello grande di una seccatura per andare in 67 00:04:37,000 --> 00:04:40,000 e cambiare nel ciclo while se è necessario. 68 00:04:40,000 --> 00:04:44,000 Ma nei programmi dove si sta fanno riferimento lo stesso numero magico 69 00:04:44,000 --> 00:04:47,000 più e più volte, questo meccanismo di # define è davvero a portata di mano 70 00:04:47,000 --> 00:04:52,000 perché basta cambiare una sola volta nella parte superiore del file, è in genere dove li metti- 71 00:04:52,000 --> 00:04:57,000 e la variazione percola attraverso il resto del file. 72 00:04:57,000 --> 00:05:02,000 >> Altre cose che volevo sottolineare in questo compito che ho pensato che sembrava davvero bello, 73 00:05:02,000 --> 00:05:05,000 una era la denominazione delle variabili. 74 00:05:05,000 --> 00:05:14,000 Si vede qui che abbiamo variabili intere chiamate altezza di riga e di chiamata. 75 00:05:14,000 --> 00:05:20,000 Spazi, hash, aiuta a rendere il codice un po 'più leggibile, 76 00:05:20,000 --> 00:05:25,000 rende un po 'più comprensibile quello che sta realmente succedendo. 77 00:05:25,000 --> 00:05:31,000 Questo è in contrasto con l'utilizzo, per esempio, lettere casuali 78 00:05:31,000 --> 00:05:35,000 o semplicemente incomprensibile del tutto. 79 00:05:35,000 --> 00:05:39,000 Un'ultima cosa farò notare è che in cicli for, 80 00:05:39,000 --> 00:05:45,000 spesso queste variabili iteratore, questi contatori che è possibile utilizzare nel vostro cicli for, 81 00:05:45,000 --> 00:05:51,000 è standard e convenzionali per iniziare con i due e poi e poi j k 82 00:05:51,000 --> 00:05:54,000 e andare da lì, se avete bisogno di più variabili, 83 00:05:54,000 --> 00:05:56,000 e questo è solo una convenzione. 84 00:05:56,000 --> 00:05:58,000 Ci sono un sacco di convenzioni. 85 00:05:58,000 --> 00:06:00,000 Dipende dal linguaggio di programmazione che si sta utilizzando. 86 00:06:00,000 --> 00:06:04,000 Ma in C, di solito inizia con i. 87 00:06:04,000 --> 00:06:08,000 Non ha senso utilizzare, ad esempio, a o b 88 00:06:08,000 --> 00:06:13,000 a seconda della situazione. 89 00:06:13,000 --> 00:06:15,000 Questo è tutto per questo. 90 00:06:15,000 --> 00:06:25,000 Se ora tirare su Revisione 2, vedrete un altro Mario, 91 00:06:25,000 --> 00:06:29,000 e questo è simile a un altro che abbiamo visto, 92 00:06:29,000 --> 00:06:32,000 ma fa specie qualcosa di fresco. 93 00:06:32,000 --> 00:06:38,000 Se guardiamo a questa sezione proprio qui all'interno del ciclo for interno, 94 00:06:38,000 --> 00:06:44,000 si sta utilizzando un po 'di sintassi pazzo cercando qui proprio in questa linea. 95 00:06:44,000 --> 00:06:47,000 Questo è chiamato un operatore ternario. 96 00:06:47,000 --> 00:06:53,000 Si tratta di un'istruzione if else condensato in una sola riga. 97 00:06:53,000 --> 00:06:57,000 La condizione è questa parte tra parentesi. 98 00:06:57,000 --> 00:07:05,000 E 'equivalente a dire se j 00:07:10,000 E poi che il contenuto del blocco che se sarebbero sono lo spazio 100 00:07:10,000 --> 00:07:16,000 e poi il contenuto di ciò che il resto sarebbe questo sono #. 101 00:07:16,000 --> 00:07:20,000 E 'in sostanza l'assegnazione di uno spazio per questa variabile. 102 00:07:20,000 --> 00:07:24,000 E 'anteponendo uno spazio contenuto della variabile di blocco, 103 00:07:24,000 --> 00:07:29,000 se questa condizione è soddisfatta, e se la condizione non è soddisfatta, 104 00:07:29,000 --> 00:07:32,000 quindi la variabile di blocco ottiene questo #. 105 00:07:32,000 --> 00:07:37,000 E poi, naturalmente, invece di costruire una stringa intera 106 00:07:37,000 --> 00:07:43,000 e la stampa di tutto ciò che alla fine questa soluzione esso stampa un carattere alla volta. 107 00:07:43,000 --> 00:07:48,000 Abbastanza freddo. 108 00:07:48,000 --> 00:07:53,000 >> Un altro paio di cose da guardare. Ci passare a avido. 109 00:07:53,000 --> 00:07:58,000 Ora, se guardiamo avidi, questa prima soluzione 110 00:07:58,000 --> 00:08:00,000 utilizza questi # definisce un po '. 111 00:08:00,000 --> 00:08:06,000 Abbiamo una costante definita per ciascuno dei numeri diversi in questo programma. 112 00:08:06,000 --> 00:08:12,000 Abbiamo uno per centesimi per dollaro, uno per quarti, dimes, nichel, penny e, 113 00:08:12,000 --> 00:08:15,000 e ora se ci scorrere verso il basso e leggere il codice, 114 00:08:15,000 --> 00:08:22,000 possiamo vedere uno standard do-mentre tutto la stampa fuori ciclo. 115 00:08:22,000 --> 00:08:25,000 Tipo di il punto cruciale di questo problema è stato rendersi conto che 116 00:08:25,000 --> 00:08:29,000 è necessaria per convertire il galleggiante che leggi in da parte dell'utente in un numero intero 117 00:08:29,000 --> 00:08:32,000 a che fare con precisione la matematica, e questo perché 118 00:08:32,000 --> 00:08:36,000 con i numeri in virgola mobile, come abbiamo detto nella lezione brevemente, 119 00:08:36,000 --> 00:08:41,000 non è possibile rappresentare con precisione ogni singolo valore sulla retta numerica 120 00:08:41,000 --> 00:08:47,000 perché ci sono infiniti valori tra 3 e, per esempio, 3.1 anche. 121 00:08:47,000 --> 00:08:54,000 Si può avere 3.01 e 3,001 e 3,0001, e si può andare avanti. 122 00:08:54,000 --> 00:09:00,000 Si scopre ogni volta che si lavora con i soldi, spesso si desidera convertirlo 123 00:09:00,000 --> 00:09:05,000 in formato intero in modo che non stai perdendo soldi e cose del genere. 124 00:09:05,000 --> 00:09:09,000 Fare questo e arrotondamento è stato fondamentale. 125 00:09:09,000 --> 00:09:14,000 Questa soluzione utilizzata perfettamente lineare, algoritmo grande, 126 00:09:14,000 --> 00:09:17,000 che diminuisce il numero di centesimi rimanenti, in primo luogo per trimestri, 127 00:09:17,000 --> 00:09:19,000 poi dimes, poi da monetine, poi da pochi centesimi, 128 00:09:19,000 --> 00:09:24,000 e aggiungendo il numero di monete per volta. 129 00:09:24,000 --> 00:09:31,000 >> Un'altra soluzione che vedremo, come lo zoom indietro e andare a revisione 4, 130 00:09:31,000 --> 00:09:40,000 avuto un inizio molto simile, ma div invece utilizzati e mod 131 00:09:40,000 --> 00:09:44,000 proprio qui per calcolare il numero di centesimi. 132 00:09:44,000 --> 00:09:50,000 Questo, il numero di trimestri è uguale al numero di centesimi diviso per 25, 133 00:09:50,000 --> 00:09:53,000 e la ragione per cui questo funziona è perché stiamo facendo la divisione intera, 134 00:09:53,000 --> 00:09:58,000 quindi è trascurando l'eventuale resto. 135 00:09:58,000 --> 00:10:02,000 [Studente] Dobbiamo commentare la ricerca? 136 00:10:02,000 --> 00:10:05,000 Dipende. 137 00:10:05,000 --> 00:10:08,000 [Studente] Stai commentando più di codice proprio qui. 138 00:10:08,000 --> 00:10:16,000 Si ', e quindi ci sono un sacco di diverse filosofie su questo. 139 00:10:16,000 --> 00:10:21,000 La mia filosofia personale è che il codice è davvero la verità, 140 00:10:21,000 --> 00:10:24,000 come il vostro codice è ciò che è effettivamente in esecuzione sul computer, 141 00:10:24,000 --> 00:10:29,000 e quindi il codice dovrebbe essere il più leggibile possibile da richiedere non come molti commenti. 142 00:10:29,000 --> 00:10:33,000 Detto questo, quando si sta facendo le cose che sono un po 'difficile matematicamente 143 00:10:33,000 --> 00:10:38,000 o algoritmicamente, è bene commentare quelle in modo da poter 144 00:10:38,000 --> 00:10:43,000 aggiungere una dimensione extra, un ulteriore livello a chi sta leggendo il tuo codice. 145 00:10:43,000 --> 00:10:49,000 In queste soluzioni, spesso sono commentati più pesantemente solo perché 146 00:10:49,000 --> 00:10:52,000 vogliamo essere in grado di distribuire loro e la gente li prendere 147 00:10:52,000 --> 00:10:56,000 e leggere abbastanza facilmente. 148 00:10:56,000 --> 00:11:05,000 Ma sicuramente, sono d'accordo che questo è pesante. 149 00:11:05,000 --> 00:11:07,000 [Studente] Ma in caso di dubbio, andare più pesante? 150 00:11:07,000 --> 00:11:10,000 In caso di dubbio, andare più pesante. 151 00:11:10,000 --> 00:11:17,000 Alcune persone a volte dicono 0 return o qualcosa del genere. 152 00:11:17,000 --> 00:11:20,000 Penso che sia un commento ridicolo. 153 00:11:20,000 --> 00:11:22,000 Chiaramente questo è quello che sta succedendo. 154 00:11:22,000 --> 00:11:25,000 Non ho bisogno di inglese a dirmi che. 155 00:11:25,000 --> 00:11:28,000 A volte la gente scrivere cose come "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Questo è il tipo di cute, ma anche non- 157 00:11:32,000 --> 00:11:35,000 che non sta facendo la differenza tra i punti di commenti o meno. 158 00:11:35,000 --> 00:11:41,000 Questo tipo di osservazioni sono solo ah, ah. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> A questo punto, cominciamo a lavorare sul problema Set 3 sezione di domande. 161 00:11:48,000 --> 00:11:52,000 Se voi ragazzi tirare questo di nuovo, 162 00:11:52,000 --> 00:11:55,000 come per la scorsa settimana, non stiamo andando a guardare i pantaloncini in questa sezione. 163 00:11:55,000 --> 00:12:00,000 Lasceremo che voi ragazzi fare nel tuo tempo libero e parlare le domande. 164 00:12:00,000 --> 00:12:05,000 Ma ora, in questa sezione andremo a trascorrere un po 'di più 165 00:12:05,000 --> 00:12:11,000 parlare meno delle nozioni di base di codifica 166 00:12:11,000 --> 00:12:15,000 come abbiamo fatto la scorsa settimana, e invece, stiamo andando a concentrarsi maggiormente sulla 167 00:12:15,000 --> 00:12:22,000 un po 'più della teoria, in modo da parlare di ricerca binaria e poi ordinamento. 168 00:12:22,000 --> 00:12:27,000 Da quelli di voi che hanno seguito con la conferenza, 169 00:12:27,000 --> 00:12:30,000 qualcuno può darmi un riassunto di ciò che la differenza è 170 00:12:30,000 --> 00:12:35,000 tra ricerca binaria e ricerca lineare? 171 00:12:35,000 --> 00:12:37,000 Cosa sta succedendo? Certo. 172 00:12:37,000 --> 00:12:42,000 Ricerche lineari in ogni elemento della lista ordinata 173 00:12:42,000 --> 00:12:45,000 uno ad uno ad uno ad uno ad uno, 174 00:12:45,000 --> 00:12:50,000 e ricerca binaria divide la lista in 2 gruppi, 175 00:12:50,000 --> 00:12:57,000 controlla se il valore di tasti che si sta cercando è superiore o inferiore al valore punto medio 176 00:12:57,000 --> 00:13:00,000 che avete appena trovato, e se è meno, va con la lista più basso 177 00:13:00,000 --> 00:13:03,000 e poi divide che ancora una volta, fa la stessa funzione 178 00:13:03,000 --> 00:13:07,000 completamente verso il basso fino a trovare il punto medio pari al valore stesso. 179 00:13:07,000 --> 00:13:10,000 Giusto. 180 00:13:10,000 --> 00:13:12,000 >> Perché ce ne importa? 181 00:13:12,000 --> 00:13:20,000 Perché si parla di ricerca binaria rispetto a ricerca lineare? 182 00:13:20,000 --> 00:13:22,000 Gia '. 183 00:13:22,000 --> 00:13:24,000 Binaria è molto più veloce, quindi se si raddoppia la dimensione del problema 184 00:13:24,000 --> 00:13:27,000 ci vuole un passo in più, piuttosto che il doppio. 185 00:13:27,000 --> 00:13:29,000 Esattamente. 186 00:13:29,000 --> 00:13:31,000 Questa è una grande risposta. 187 00:13:31,000 --> 00:13:36,000 Ricerca lineare è molto controllando un elemento alla volta, 188 00:13:36,000 --> 00:13:39,000 e come abbiamo visto il primo giorno di lezione 189 00:13:39,000 --> 00:13:42,000 quando David ha attraversato il suo esempio rubrica telefonica 190 00:13:42,000 --> 00:13:45,000 e strappato una pagina del libro di telefono in un momento 191 00:13:45,000 --> 00:13:47,000 e tenuto a farlo più e più e più volte, 192 00:13:47,000 --> 00:13:51,000 sta andando a prendere lui un sacco di tempo per trovare qualcuno nella rubrica telefonica, 193 00:13:51,000 --> 00:13:55,000 a meno che, naturalmente, era alla ricerca di qualcuno che all'inizio dell'alfabeto. 194 00:13:55,000 --> 00:14:00,000 Con la ricerca binaria, si può andare molto più veloce, 195 00:14:00,000 --> 00:14:05,000 e non è solo due volte più veloce o 3 volte più veloce e 4 volte più veloce. 196 00:14:05,000 --> 00:14:13,000 Ma il problema diventa sempre più piccola e più piccola molto più veloce. 197 00:14:13,000 --> 00:14:17,000 Per illustrare questo, inizieremo a parlare di quello che sta succedendo 198 00:14:17,000 --> 00:14:21,000 quando scriviamo la ricerca binaria. 199 00:14:21,000 --> 00:14:27,000 Il problema in questione è che se ho un array di numeri, 200 00:14:27,000 --> 00:14:40,000 esempio, 1, 2, 3, 5, 7, 23, 45, 78, 12.323, 201 00:14:40,000 --> 00:14:47,000 e poi 9 con una tonnellata di 0 dopo di esso, 202 00:14:47,000 --> 00:14:52,000 vogliamo essere in grado di capire molto in fretta ciò che è in 203 00:14:52,000 --> 00:14:57,000 questa matrice di numeri. 204 00:14:57,000 --> 00:15:00,000 So che questo sembra un po 'sciocco e un po' forzato, 205 00:15:00,000 --> 00:15:02,000 perché in questo momento lo è. 206 00:15:02,000 --> 00:15:05,000 Abbiamo una matrice che non ha molti elementi in esso, 207 00:15:05,000 --> 00:15:08,000 e se chiedo uno di voi per capire se 208 00:15:08,000 --> 00:15:11,000 23 è nella matrice, si può fare molto velocemente 209 00:15:11,000 --> 00:15:16,000 semplicemente dando un'occhiata a questo e mi dice sì o no. 210 00:15:16,000 --> 00:15:20,000 L'analogo da considerare è immaginare se questo fosse, per esempio, 211 00:15:20,000 --> 00:15:27,000 un foglio di calcolo Excel con 10.000 righe, 20.000 righe. 212 00:15:27,000 --> 00:15:31,000 Naturalmente, si può fare il comando F o F di controllo e di cercare qualcosa. 213 00:15:31,000 --> 00:15:33,000 È inoltre possibile utilizzare i filtri e la roba di ricerca, 214 00:15:33,000 --> 00:15:37,000 ma se si doveva guardare attraverso quel file riga per riga per riga, 215 00:15:37,000 --> 00:15:40,000 ci vorrebbe molto tempo per trovarlo. 216 00:15:40,000 --> 00:15:42,000 E 'un po' come nell'esempio rubrica, anche, dove 217 00:15:42,000 --> 00:15:44,000 nessuno guarda attraverso una pagina di un telefono libro alla volta. 218 00:15:44,000 --> 00:15:47,000 In genere, essi si aprono a metà, 219 00:15:47,000 --> 00:15:50,000 o, nel caso di un sacco di elenchi telefonici e dizionari dove 220 00:15:50,000 --> 00:15:54,000 in realtà l'hanno digitato la prima lettera, 221 00:15:54,000 --> 00:16:01,000 si flip a quella prima lettera e aprire e cominciare ad andare di lì. 222 00:16:01,000 --> 00:16:03,000 >> Ricordami di nuovo il tuo nome. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Come Sam ha detto, che il processo di ricerca lineare sarà molto lento, 225 00:16:11,000 --> 00:16:15,000 e invece con la ricerca binaria, il modo in cui funziona è questo 226 00:16:15,000 --> 00:16:21,000 ogni volta che passare attraverso una iterazione del nostro algoritmo di ricerca, 227 00:16:21,000 --> 00:16:27,000 stiamo andando a dividere la lista in due, in sostanza, 228 00:16:27,000 --> 00:16:33,000 in due liste più piccole. 229 00:16:33,000 --> 00:16:39,000 E poi sulla prossima iterazione del ciclo, ci si divide di nuovo 230 00:16:39,000 --> 00:16:44,000 in altri elenchi più piccoli. 231 00:16:44,000 --> 00:16:48,000 Come si può vedere, il problema continua a sempre più piccolo 232 00:16:48,000 --> 00:16:55,000 perché osserviamo mezzo scarto della lista ogni volta. 233 00:16:55,000 --> 00:16:59,000 Come funziona questo scarto? 234 00:16:59,000 --> 00:17:05,000 Proprio come un promemoria, quello che stiamo andando a fare se ci fosse un computer 235 00:17:05,000 --> 00:17:11,000 e siamo stati, per esempio, alla ricerca del numero 5 in questa lista 236 00:17:11,000 --> 00:17:15,000 è che ci sarebbe scegliere un numero al centro. 237 00:17:15,000 --> 00:17:26,000 Nel mezzo di questa lista, perché ci sono 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numeri, 238 00:17:26,000 --> 00:17:32,000 ci piacerebbe scegliere il numero sia presso il 4 ° o al 5 ° posto, 239 00:17:32,000 --> 00:17:38,000 e noi chiameremmo che il centro della nostra lista. 240 00:17:38,000 --> 00:17:42,000 Selezionare il numero in mezzo. 241 00:17:42,000 --> 00:17:51,000 Poi, proprio come Sam ha detto, faremo un test per vedere se questo numero è uguale 242 00:17:51,000 --> 00:17:59,000 al numero che si vuole ottenere o il nostro numero desiderato. 243 00:17:59,000 --> 00:18:06,000 Se è uguale, poi l'abbiamo trovato. Abbiamo vinto. 244 00:18:06,000 --> 00:18:12,000 Se non è uguale, poi ci sono un paio di casi. 245 00:18:12,000 --> 00:18:15,000 I due casi sono o il numero deve essere maggiore del numero che stiamo cercando, 246 00:18:15,000 --> 00:18:19,000 o è inferiore. 247 00:18:19,000 --> 00:18:25,000 Se è più grande, ci si sposta a destra. 248 00:18:25,000 --> 00:18:33,000 E se è di meno, ci si sposta a sinistra. 249 00:18:33,000 --> 00:18:41,000 E poi ripetere l'intero processo di nuovo 250 00:18:41,000 --> 00:18:48,000 sia sulla metà destra o la metà sinistra della lista. 251 00:18:48,000 --> 00:18:51,000 >> Il primo problema nella sezione di oggi è di capire 252 00:18:51,000 --> 00:18:55,000 come si può effettivamente iniziare a esprimere questo concetto in codice C. 253 00:18:55,000 --> 00:18:58,000 Abbiamo lo pseudocodice qui. 254 00:18:58,000 --> 00:19:04,000 Quello che inizieremo a fare io è tirare su un nuovo spazio, 255 00:19:04,000 --> 00:19:09,000 salvare questa revisione in modo da avere queste note per la successiva, 256 00:19:09,000 --> 00:19:20,000 dovremo eliminare tutto questo, e quindi copiare e incollare dal set problema 257 00:19:20,000 --> 00:19:26,000 queste informazioni nei nostri spazi, e spero che questo non si rompe. 258 00:19:26,000 --> 00:19:28,000 Perfetto. 259 00:19:28,000 --> 00:19:33,000 Se voi ragazzi tutto fare, copiare e incollare questo codice nel tuo nuovo spazio, 260 00:19:33,000 --> 00:19:43,000 in uno vuoto. 261 00:19:43,000 --> 00:19:47,000 Proviamo Daniel. Se si compilare ed eseguire il programma, funziona? 262 00:19:47,000 --> 00:19:49,000 >> No. Cosa sta dicendo? 263 00:19:49,000 --> 00:19:53,000 Dice il controllo raggiunge il termine della funzione non void. 264 00:19:53,000 --> 00:19:55,000 Si ', per cui vorrei provare a eseguirlo. 265 00:19:55,000 --> 00:19:59,000 Avete visto prima? Sapete cosa significa questo? 266 00:19:59,000 --> 00:20:01,000 Okay, sezionare questo un po '. 267 00:20:01,000 --> 00:20:10,000 Sta dicendo a file.c sulla linea 9, colonna 1 si ha un errore, proprio come hai detto, 268 00:20:10,000 --> 00:20:16,000 e si dice che è derivante da l'avviso di errore e l'avviso tipo restituito. 269 00:20:16,000 --> 00:20:18,000 Sembra che qualcosa sta succedendo con il tipo di ritorno, che ha un senso. 270 00:20:18,000 --> 00:20:21,000 Abbiamo un non-vuoto funzione, il che significa che abbiamo una funzione 271 00:20:21,000 --> 00:20:24,000 che non restituisce nulla. 272 00:20:24,000 --> 00:20:27,000 Una funzione vuoto è uno che assomiglia a questo: 273 00:20:27,000 --> 00:20:35,000 void foo (), ed è nullo in quanto il tipo di ritorno è nullo, 274 00:20:35,000 --> 00:20:38,000 il che significa che se avessimo qualcosa qui 275 00:20:38,000 --> 00:20:45,000 come il ritorno 1, otterremmo un errore di compilazione per questo. 276 00:20:45,000 --> 00:20:49,000 Tuttavia, abbiamo un non-vuoto funzione. 277 00:20:49,000 --> 00:20:51,000 Il nostro non void funzione, in questo caso è la nostra funzione di ricerca 278 00:20:51,000 --> 00:20:56,000 perché ha un tipo di ritorno di bool. 279 00:20:56,000 --> 00:20:59,000 Quando è dire che il controllo raggiunge la fine di una funzione non void, 280 00:20:59,000 --> 00:21:02,000 è perché la ricerca non ha un'istruzione return. 281 00:21:02,000 --> 00:21:04,000 Non è niente di ritorno di tipo bool. 282 00:21:04,000 --> 00:21:09,000 >> Siamo in grado di risolvere questo, e che cosa ne pensate voi ragazzi 283 00:21:09,000 --> 00:21:13,000 ricerca dovrebbe restituire per impostazione predefinita? 284 00:21:13,000 --> 00:21:16,000 Quale dovrebbe essere il valore di ritorno di ricerca? 285 00:21:16,000 --> 00:21:19,000 Perché questo è quello che può mettere alla fine. 286 00:21:19,000 --> 00:21:21,000 Charlotte, hai qualche-? 287 00:21:21,000 --> 00:21:23,000 Vero o falso? >> Vero o falso. 288 00:21:23,000 --> 00:21:26,000 Quale? 289 00:21:26,000 --> 00:21:28,000 False. Non lo so. 290 00:21:28,000 --> 00:21:30,000 Falso? Proviamo. 291 00:21:30,000 --> 00:21:32,000 Perché dici return false? E 'una grande intuizione. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Non lo so. 293 00:21:35,000 --> 00:21:39,000 Stiamo per tornare false in questo caso, perché questo sarà il nostro difetto 294 00:21:39,000 --> 00:21:44,000 se per qualche motivo l'elenco è vuoto o l'ago 295 00:21:44,000 --> 00:21:46,000 che stiamo cercando non esiste. 296 00:21:46,000 --> 00:21:50,000 Poi, alla fine, se non restituire true in precedenza in questa funzione, 297 00:21:50,000 --> 00:21:55,000 noi sappiamo sempre che questa funzione dirà no, non è nella matrice. 298 00:21:55,000 --> 00:21:58,000 Non è nel pagliaio. 299 00:21:58,000 --> 00:22:03,000 Ora, se compilare ed eseguire-fatemi salvare questo modo che possiamo tirare su. 300 00:22:03,000 --> 00:22:08,000 Ora, se compilare ed eseguire il nostro programma, si costruisce. 301 00:22:08,000 --> 00:22:12,000 Otteniamo la nostra richiesta poco. 302 00:22:12,000 --> 00:22:20,000 Se mi ha colpito 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Non ha stampare nulla. Sembra che tutto è finito bene. 304 00:22:25,000 --> 00:22:35,000 Dobbiamo riempire questo trovi 305 00:22:35,000 --> 00:22:39,000 Abbiamo parlato l'algoritmo in pseudocodice un po 'di tempo fa. 306 00:22:39,000 --> 00:22:44,000 Fammi vedere, salvare questo, 307 00:22:44,000 --> 00:22:49,000 e io tirerò tale algoritmo su nuovamente. 308 00:22:49,000 --> 00:22:51,000 Che ha colpito questo ragazzo. Nope. 309 00:22:51,000 --> 00:22:58,000 Eccolo. 310 00:22:58,000 --> 00:23:03,000 Come possiamo fare questo? 311 00:23:03,000 --> 00:23:11,000 Quale potrebbe essere una buona strategia per la partenza di questo codice? 312 00:23:11,000 --> 00:23:16,000 È necessario scegliere un numero in mezzo. 313 00:23:16,000 --> 00:23:23,000 Come si fa a scegliere un numero nel corso di un array? 314 00:23:23,000 --> 00:23:25,000 Qualche suggerimento? 315 00:23:25,000 --> 00:23:27,000 [Studente] strlen diviso per 2. 316 00:23:27,000 --> 00:23:32,000 Strlen diviso 2. Questo è un grande. 317 00:23:32,000 --> 00:23:35,000 Strlen funziona con particolari tipi di matrici. 318 00:23:35,000 --> 00:23:38,000 Che tipo di array? 319 00:23:38,000 --> 00:23:44,000 Array di stringhe, array di caratteri. 320 00:23:44,000 --> 00:23:48,000 E 'quello stesso tipo di concetto che vogliamo applicare, 321 00:23:48,000 --> 00:23:52,000 ma non possiamo usare strlen, perché non abbiamo un array di caratteri. 322 00:23:52,000 --> 00:23:55,000 Abbiamo un array di int. 323 00:23:55,000 --> 00:23:58,000 Ma che cosa strlen ottenere per noi? 324 00:23:58,000 --> 00:24:01,000 Sai cosa si fa per noi? 325 00:24:01,000 --> 00:24:03,000 [Studente] strlen ci ottiene la lunghezza. 326 00:24:03,000 --> 00:24:05,000 Esattamente, ci ottiene la lunghezza. 327 00:24:05,000 --> 00:24:09,000 Strlen ottiene la lunghezza della matrice per noi. 328 00:24:09,000 --> 00:24:14,000 >> Come possiamo ottenere che il nostro programma di ricerca binaria? 329 00:24:14,000 --> 00:24:18,000 Come si ottiene la lunghezza di un array? 330 00:24:18,000 --> 00:24:20,000 [Studente] strlen? 331 00:24:20,000 --> 00:24:25,000 È possibile ottenere la lunghezza di una formattata correttamente matrice di stringhe C con strlen. 332 00:24:25,000 --> 00:24:31,000 Il problema, però, è che non abbiamo una matrice di stringhe. 333 00:24:31,000 --> 00:24:36,000 Se guardiamo a questo codice, abbiamo questa matrice intera. 334 00:24:36,000 --> 00:24:38,000 Come facciamo a sapere quanto è lungo? 335 00:24:38,000 --> 00:24:44,000 [Studente] C'è una equivalente per endpoint, come l int o qualcosa del genere? 336 00:24:44,000 --> 00:24:49,000 Si scopre in realtà non vi è, e così in un certo senso, questo è 337 00:24:49,000 --> 00:24:52,000 una di quelle cose che è solo buono da sapere su C, 338 00:24:52,000 --> 00:24:57,000 che non vi è alcun modo per ottenere la lunghezza di un array 339 00:24:57,000 --> 00:24:59,000 se tutto ti do è la matrice. 340 00:24:59,000 --> 00:25:02,000 Il motivo per cui con le stringhe, la ragione strlen opere, 341 00:25:02,000 --> 00:25:06,000 perché se una stringa sia formattato correttamente, 342 00:25:06,000 --> 00:25:12,000 avrà quel particolare carattere \ 0 alla fine. 343 00:25:12,000 --> 00:25:16,000 >> Si può anche immaginare se si dispone di una stringa formattato in modo errato 344 00:25:16,000 --> 00:25:20,000 e non c'è alcun carattere \ 0 lì, allora la cosa non funziona. 345 00:25:20,000 --> 00:25:22,000 [Studente] Si può aggiungere il \ 0? 346 00:25:22,000 --> 00:25:24,000 Potremmo in questo caso. 347 00:25:24,000 --> 00:25:29,000 Si potrebbe aggiungere una sorta di \ 0 348 00:25:29,000 --> 00:25:33,000 o una sorta di significante carattere e quindi utilizzare tale. 349 00:25:33,000 --> 00:25:36,000 Ma questo non è proprio andare a lavorare 350 00:25:36,000 --> 00:25:40,000 perché il 0 \ è per un tipo char, 351 00:25:40,000 --> 00:25:43,000 e qui abbiamo int. 352 00:25:43,000 --> 00:25:46,000 L'altra cosa è che se dovessimo usare un valore speciale 353 00:25:46,000 --> 00:25:49,000 come -1 per indicare la fine di un array 354 00:25:49,000 --> 00:25:54,000 allora non abbiamo mai potuto conservare un -1 nei nostri array interi. 355 00:25:54,000 --> 00:25:56,000 Ci piacerebbe essere bloccato. 356 00:25:56,000 --> 00:26:00,000 Si scopre che l'unico modo per ottenere la lunghezza 357 00:26:00,000 --> 00:26:03,000 di un array in C è in realtà lo ricordo 358 00:26:03,000 --> 00:26:08,000 quando lo si imposta e poi passare con il contenuto dell'array 359 00:26:08,000 --> 00:26:14,000 in modo che ogni volta che ho una funzione che sta per fare un certo lavoro 360 00:26:14,000 --> 00:26:18,000 su una serie di numeri interi o in virgola mobile o doppie o quello che hai, 361 00:26:18,000 --> 00:26:22,000 Ho anche bisogno di dare la funzione di lunghezza della matrice, 362 00:26:22,000 --> 00:26:26,000 e questo è esattamente quello che abbiamo fatto qui in funzione di ricerca. 363 00:26:26,000 --> 00:26:30,000 Se si guarda, quello che abbiamo fatto quando si passa nella nostra matrice qui, 364 00:26:30,000 --> 00:26:36,000 Passiamo anche nella lunghezza, la dimensione. 365 00:26:36,000 --> 00:26:41,000 Accade solo che abbiamo chiamato questa variabile qui, 366 00:26:41,000 --> 00:26:43,000 questo parametro o argomento. 367 00:26:43,000 --> 00:26:46,000 Questo si chiama lista degli argomenti di una funzione o di un elenco dei parametri, 368 00:26:46,000 --> 00:26:51,000 e questi sono anche chiamati argomenti o parametri. 369 00:26:51,000 --> 00:26:53,000 Le persone usano termini diversi in momenti diversi. 370 00:26:53,000 --> 00:26:55,000 A volte li scambiare me stesso. 371 00:26:55,000 --> 00:27:00,000 Si dà il caso che questa variabile qui si chiama allo stesso modo 372 00:27:00,000 --> 00:27:03,000 a questo # define qui. 373 00:27:03,000 --> 00:27:06,000 Ma non sono la stessa cosa. 374 00:27:06,000 --> 00:27:11,000 La capitalizzazione è importante. 375 00:27:11,000 --> 00:27:14,000 >> Se si guarda a ciò che accade qui, si dichiara 376 00:27:14,000 --> 00:27:18,000 il nostro array di int, che abbiamo chiamato i numeri. 377 00:27:18,000 --> 00:27:23,000 Abbiamo dato la nostra dimensione, che corrisponde alla nostra # define in cima. 378 00:27:23,000 --> 00:27:27,000 E 'intenzione di essere 8. 379 00:27:27,000 --> 00:27:35,000 E poi, quando abbiamo poi chiama la nostra funzione di ricerca in basso, 380 00:27:35,000 --> 00:27:40,000 passiamo il numero che si vuole cercare, che abbiamo richiesto, 381 00:27:40,000 --> 00:27:43,000 ottenuto dall'utente. 382 00:27:43,000 --> 00:27:46,000 Passiamo nella matrice, questi numeri, 383 00:27:46,000 --> 00:27:51,000 e poi abbiamo anche passare nella dimensione della matrice, 384 00:27:51,000 --> 00:27:57,000 e quindi il valore di dimensione 8 viene memorizzato 385 00:27:57,000 --> 00:28:01,000 o passato a questo intero dimensione variabile chiamata. 386 00:28:01,000 --> 00:28:08,000 Abbiamo la dimensione della matrice. 387 00:28:08,000 --> 00:28:11,000 Ora, se torniamo a quello che stavamo parlando prima, 388 00:28:11,000 --> 00:28:14,000 Penso che Missy cresciuto al punto che quello che abbiamo bisogno di fare è ottenere la lunghezza della matrice 389 00:28:14,000 --> 00:28:20,000 e dividere per 2, e che ci darà il punto medio. 390 00:28:20,000 --> 00:28:22,000 Vediamo un po '. 391 00:28:22,000 --> 00:28:25,000 Posso avere qualcuno scrivere questo e salvarlo nel loro spazio? 392 00:28:25,000 --> 00:28:27,000 Che ne dici di Leila? 393 00:28:27,000 --> 00:28:31,000 Posso scrivere questo? 394 00:28:31,000 --> 00:28:35,000 Scrivi la prima linea dove si prende la lunghezza della matrice e ottenere il punto medio 395 00:28:35,000 --> 00:28:41,000 e conservarla in una nuova variabile. 396 00:28:41,000 --> 00:28:44,000 Ti do un paio di secondi. Sei pronto? 397 00:28:44,000 --> 00:28:46,000 [Studente incomprensibile] 398 00:28:46,000 --> 00:28:50,000 Certo, avrei potuto di calcolare il punto medio 399 00:28:50,000 --> 00:28:55,000 della matrice pagliaio all'interno della funzione di ricerca 400 00:28:55,000 --> 00:29:03,000 utilizzando la lunghezza della matrice pagliaio, che è la dimensione variabile? 401 00:29:03,000 --> 00:29:08,000 Niente di difficile qui. 402 00:29:08,000 --> 00:29:12,000 [Leila] Appena dimensioni / 2 e just- 403 00:29:12,000 --> 00:29:17,000 E salvare, e premere il pulsante Salva qui in alto, 404 00:29:17,000 --> 00:29:19,000 e noi lo tira su. 405 00:29:19,000 --> 00:29:22,000 Perfetto. 406 00:29:22,000 --> 00:29:28,000 Ecco fatto. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Come è, sarà questo compilare? 408 00:29:30,000 --> 00:29:32,000 [Leila] No, ha bisogno di essere più alto. 409 00:29:32,000 --> 00:29:34,000 [Nate] Sì, così che cosa dobbiamo fare? 410 00:29:34,000 --> 00:29:36,000 [Leila] Come punto medio int o qualcosa del genere. 411 00:29:36,000 --> 00:29:41,000 Awesome. Si ', facciamolo, int = punto medio formato. 412 00:29:41,000 --> 00:29:44,000 Sarà questo compilare? 413 00:29:44,000 --> 00:29:47,000 Facciamo eliminare questo commento e farlo uscire di strada. 414 00:29:47,000 --> 00:29:50,000 Che cosa non si compila su questo? 415 00:29:50,000 --> 00:29:52,000 Non stiamo facendo nulla con numero intero, 416 00:29:52,000 --> 00:29:55,000 quindi abbiamo bisogno di stamparlo o qualcosa di simile. 417 00:29:55,000 --> 00:29:58,000 Sì, esattamente. 418 00:29:58,000 --> 00:30:00,000 Avremo una variabile non utilizzata. 419 00:30:00,000 --> 00:30:02,000 Che altro non è andare a lavorare su questo? 420 00:30:02,000 --> 00:30:06,000 Penso che hai detto una cosa, Sam. Punto e virgola. 421 00:30:06,000 --> 00:30:08,000 Si ', mi manca quei punti e virgola. 422 00:30:08,000 --> 00:30:14,000 E sarà una cosa costante durante tutto il corso del termine. 423 00:30:14,000 --> 00:30:17,000 L'ultima cosa che farò è metto un po 'di spazio bianco su entrambi i lati 424 00:30:17,000 --> 00:30:23,000 di questo operatore qui, dato che è in genere come lo facciamo 425 00:30:23,000 --> 00:30:26,000 secondo la nostra guida di stile. 426 00:30:26,000 --> 00:30:29,000 Abbiamo il punto centrale della nostra matrice. 427 00:30:29,000 --> 00:30:32,000 Ora, se ci ricordiamo di nuovo al nostro algoritmo, 428 00:30:32,000 --> 00:30:37,000 quello che era il secondo passo che abbiamo dovuto fare una volta che abbiamo il punto medio? 429 00:30:37,000 --> 00:30:42,000 [Studente] Se si tratta di una maggiore [incomprensibile]. 430 00:30:42,000 --> 00:30:48,000 Gia ', quindi dobbiamo fare una sorta di confronto, e che cosa stiamo confrontando qui? 431 00:30:48,000 --> 00:30:53,000 Hai detto che se è superiore. Che cosa è in questa frase riferisce? 432 00:30:53,000 --> 00:30:57,000 Il numero che esce, se questo è superiore al punto centrale, poi salite alla matrice? 433 00:30:57,000 --> 00:31:05,000 Esattamente, quindi il numero che si apre quando si- 434 00:31:05,000 --> 00:31:10,000 L'ago, quindi stiamo confrontando l'ago, 435 00:31:10,000 --> 00:31:12,000 e cosa stiamo confrontando contro l'ago? 436 00:31:12,000 --> 00:31:15,000 Poiché l'ago è quello che stiamo cercando. 437 00:31:15,000 --> 00:31:18,000 Ci stiamo confrontando per arrivare al punto medio. 438 00:31:18,000 --> 00:31:21,000 >> Ma ha senso per verificare 439 00:31:21,000 --> 00:31:27,000 se metà ago =? 440 00:31:27,000 --> 00:31:32,000 Ha senso? 441 00:31:32,000 --> 00:31:35,000 Qualcuno d'accordo? 442 00:31:35,000 --> 00:31:40,000 Facciamo fare un tentativo, se (ago punto medio ==). 443 00:31:40,000 --> 00:31:42,000 [Studente] Non printf l'hai trovato. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("L'abbiamo trovato \ n"); 445 00:31:51,000 --> 00:31:56,000 In caso contrario, sto per iniziare a fare qualcosa di diverso qui. 446 00:31:56,000 --> 00:32:00,000 Ho intenzione di iniziare a mettere le parentesi attorno if tutto il tempo 447 00:32:00,000 --> 00:32:05,000 solo perché se si aggiungono più roba, poi 448 00:32:05,000 --> 00:32:07,000 non otteniamo i compilatori. 449 00:32:07,000 --> 00:32:09,000 Si ', Sam. Tu hai un punto. 450 00:32:09,000 --> 00:32:12,000 Il problema è che il punto medio rappresenta una posizione nella matrice, 451 00:32:12,000 --> 00:32:15,000 ma si può arrivare a rappresentare il valore in quella posizione dell'array. 452 00:32:15,000 --> 00:32:17,000 Questo è un ottimo punto. 453 00:32:17,000 --> 00:32:19,000 Tutti hanno sentito quello che ha detto Sam? 454 00:32:19,000 --> 00:32:22,000 Ha detto che è il punto centrale 455 00:32:22,000 --> 00:32:28,000 rappresenta solo una posizione nella matrice, ma non è l'effettivo elemento nella matrice. 456 00:32:28,000 --> 00:32:30,000 Se ci pensate il codice come scritto in questo momento, 457 00:32:30,000 --> 00:32:35,000 se guardiamo a questo array qui, che ha 8 elementi in esso, 458 00:32:35,000 --> 00:32:39,000 qual è il valore del punto medio sarà in questa funzione? 459 00:32:39,000 --> 00:32:41,000 [Studente] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Se guardiamo il numero 4 - 462 00:32:51,000 --> 00:32:54,000 e possiamo solo eseguire questo codice e mettere un faccino triste qui 463 00:32:54,000 --> 00:32:58,000 perché noi non lo abbiamo trovato, se si esegue questo codice 464 00:32:58,000 --> 00:33:04,000 come è in questo momento, caricarlo, costruzione, fammi scorrere verso il basso, 465 00:33:04,000 --> 00:33:09,000 e se cerchiamo il numero 4, 466 00:33:09,000 --> 00:33:18,000 abbiamo trovato, ma non siamo riusciti ad printf sì. 467 00:33:18,000 --> 00:33:23,000 Una ragione è che non abbiamo fatto ritorno vero, 468 00:33:23,000 --> 00:33:26,000 ma abbiamo davvero trovare il numero 4? 469 00:33:26,000 --> 00:33:28,000 E Sam è dire di no. 470 00:33:28,000 --> 00:33:31,000 Che cosa abbiamo trovato? 471 00:33:31,000 --> 00:33:35,000 Abbiamo trovato il punto medio, che se guardiamo la matrice qui, 472 00:33:35,000 --> 00:33:38,000 che sta per essere l'elemento di indice 4 che stiamo guardando, 473 00:33:38,000 --> 00:33:42,000 che è 23. 474 00:33:42,000 --> 00:33:46,000 >> Come possiamo realmente ottenere tale elemento a metà 475 00:33:46,000 --> 00:33:48,000 e non solo lo stesso punto medio? 476 00:33:48,000 --> 00:33:52,000 [Studente] Ci sarebbe entrato char o qualcosa del genere? 477 00:33:52,000 --> 00:33:55,000 Cosa che lo fanno, solo per curiosità? 478 00:33:55,000 --> 00:33:57,000 Si può elaborare un po 'di più? 479 00:33:57,000 --> 00:34:02,000 È necessario trasformare la posizione nel numero, 480 00:34:02,000 --> 00:34:05,000 quindi hai avuto modo di fare un po 'di connessione penso che sia char, ma non potrebbe essere. 481 00:34:05,000 --> 00:34:07,000 Sì, questo è un buon punto. 482 00:34:07,000 --> 00:34:12,000 Abbiamo fatto un sacco di queste posizioni conversione in caratteri, questi personaggi, 483 00:34:12,000 --> 00:34:14,000 nei primi due insiemi di problemi. 484 00:34:14,000 --> 00:34:18,000 Risulta che qui, questo è quasi simile a 485 00:34:18,000 --> 00:34:24,000 l'accesso il carattere i-esimo all'interno di una stringa, se questo ha un senso. 486 00:34:24,000 --> 00:34:30,000 Qui si vuole accedere all'elemento punto medio. 487 00:34:30,000 --> 00:34:34,000 Come lo facciamo? 488 00:34:34,000 --> 00:34:39,000 Kevin, hai qualche suggerimento su come possiamo farlo? 489 00:34:39,000 --> 00:34:44,000 Si potrebbe fare pagliaio, parentesi aperta, metà, chiusa parentesi. 490 00:34:44,000 --> 00:34:46,000 Si può scrivere che per noi? 491 00:34:46,000 --> 00:34:51,000 Salva in qua, e noi provvederemo a tirare che fino. 492 00:34:51,000 --> 00:34:56,000 Stiamo guardando questa linea 9, 493 00:34:56,000 --> 00:34:59,000 e stiamo rendendo conto che non vogliamo confrontare l'ago al punto medio, 494 00:34:59,000 --> 00:35:03,000 ma invece, vogliamo confrontare l'ago 495 00:35:03,000 --> 00:35:07,000 per l'elemento in posizione punto centrale all'interno della nostra matrice pagliaio. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Ecco fatto. 498 00:35:12,000 --> 00:35:15,000 Si ', sembra piuttosto buono, se (== ago pagliaio [punto medio]). 499 00:35:15,000 --> 00:35:18,000 L'abbiamo trovata. 500 00:35:18,000 --> 00:35:22,000 Ora, se si esegue il codice-we'll il backup di un po '- 501 00:35:22,000 --> 00:35:26,000 si compila, corre, e ora se guardiamo per 4, 502 00:35:26,000 --> 00:35:30,000 noi non lo abbiamo trovato, perché ora stiamo in realtà sempre il numero 23. 503 00:35:30,000 --> 00:35:33,000 Stiamo ottenendo il valore di 23, ed è quello che stiamo confrontando per il nostro ago. 504 00:35:33,000 --> 00:35:35,000 Ma questo è un bene. Questo è un passo nella giusta direzione. 505 00:35:35,000 --> 00:35:37,000 >> E 'quello che stiamo cercando di fare. 506 00:35:37,000 --> 00:35:40,000 Non stiamo cercando di confrontare l'ago contro le posizioni della matrice 507 00:35:40,000 --> 00:35:44,000 ma piuttosto contro gli elementi effettivi della matrice. 508 00:35:44,000 --> 00:35:49,000 Se guardiamo indietro ora il prossimo passo nel nostro algoritmo, 509 00:35:49,000 --> 00:35:51,000 qual è il prossimo passo? 510 00:35:51,000 --> 00:35:57,000 Leila già accennato brevemente. 511 00:35:57,000 --> 00:36:00,000 [Studente] Controllare per vedere se è maggiore o minore e poi decidere da che parte andare. 512 00:36:00,000 --> 00:36:03,000 [Nate] Sì, così come dovremmo farlo? 513 00:36:03,000 --> 00:36:07,000 Puoi mettere in qualche-I'Ll salvare questa revisione, 514 00:36:07,000 --> 00:36:13,000 e poi se si mette in alcune linee che farà questo. 515 00:36:13,000 --> 00:36:15,000 Si ', Charlotte. >> Ho una domanda. 516 00:36:15,000 --> 00:36:19,000 Non dovrebbe essere punto medio - 1 perché la prima cosa è 517 00:36:19,000 --> 00:36:26,000 0 è indicizzato, quindi se mettiamo 4, che non è in realtà il personaggio che stiamo cercando? 518 00:36:26,000 --> 00:36:30,000 Sì, e l'altro problema che è- 519 00:36:30,000 --> 00:36:35,000 questo è un grande pesca, perché quello che sta per finire accadendo forse 520 00:36:35,000 --> 00:36:42,000 se continuare a muoversi e non abbiamo mai regolare inizialmente? 521 00:36:42,000 --> 00:36:46,000 Credo che quello che potrebbe finire per fare sta tentando di accedere 522 00:36:46,000 --> 00:36:49,000 l'elemento alla posizione 8 della matrice, 523 00:36:49,000 --> 00:36:53,000 che in questo caso non esiste. 524 00:36:53,000 --> 00:36:56,000 Noi vogliamo fare una sorta di contabilità per il fatto 525 00:36:56,000 --> 00:36:59,000 che abbiamo un po 'di indicizzazione pari a zero. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Scusa, volevo dire punto medio - 1 tra le parentesi quadre. 527 00:37:05,000 --> 00:37:08,000 Siamo in grado di farlo. 528 00:37:08,000 --> 00:37:10,000 Torneremo su questo punto in appena un po '. 529 00:37:10,000 --> 00:37:13,000 Una volta che si inizia a raggiungere il ciclo vero e proprio, 530 00:37:13,000 --> 00:37:16,000 che quando ci sarà davvero vedere questo entrano in gioco. 531 00:37:16,000 --> 00:37:21,000 Per il momento, siamo in grado di fare questo, ma hai completamente ragione. 532 00:37:21,000 --> 00:37:28,000 Tale indicizzazione zero, avrà un effetto che abbiamo bisogno di spiegare. 533 00:37:28,000 --> 00:37:30,000 Vediamo un po '. 534 00:37:30,000 --> 00:37:34,000 >> Come è il maggiore e minore di-? 535 00:37:34,000 --> 00:37:36,000 [Studente] ho come fare il superiore e inferiore a parte. 536 00:37:36,000 --> 00:37:41,000 Non ero sicuro di quello che la stampa se si scopre che è inferiore al punto medio pagliaio o superiore. 537 00:37:41,000 --> 00:37:43,000 Qui posso salvare ciò che I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Sì, se si salva quello che hai, e noi lo tira su. 539 00:37:47,000 --> 00:37:49,000 Ecco fatto. 540 00:37:49,000 --> 00:37:51,000 [Studente] E ho messo i punti interrogativi per quello che non sapevo. 541 00:37:51,000 --> 00:37:54,000 [Nate] che sembra grande. 542 00:37:54,000 --> 00:37:58,000 Qui abbiamo dei punti interrogativi, perché ancora non si sa 543 00:37:58,000 --> 00:38:06,000 quello che stiamo andando a fare molto ancora. 544 00:38:06,000 --> 00:38:12,000 Che cosa vogliamo fare-ops, abbiamo alcune coppie tutti funky su di noi. 545 00:38:12,000 --> 00:38:15,000 Ci correggere queste parentesi graffe. 546 00:38:15,000 --> 00:38:19,000 Ecco fatto. 547 00:38:19,000 --> 00:38:22,000 E allora cosa vogliamo fare, secondo il nostro algoritmo, 548 00:38:22,000 --> 00:38:27,000 se non troviamo l'ago? 549 00:38:27,000 --> 00:38:32,000 Dire nel caso in cui l'ago è meno di quello che stiamo guardando. Kevin. 550 00:38:32,000 --> 00:38:34,000 Solo guardare la metà sinistra. 551 00:38:34,000 --> 00:38:40,000 Giusto, quindi metteremo un commento qui dentro che dice "guarda metà sinistra." 552 00:38:40,000 --> 00:38:46,000 E se l'ago è superiore al pagliaio a metà, che cosa vogliamo fare? 553 00:38:46,000 --> 00:38:48,000 [Studente] Poi si guarda la metà destra. 554 00:38:48,000 --> 00:38:53,000 Guardate la metà destra, "guarda a metà a destra." 555 00:38:53,000 --> 00:38:58,000 Non c'è male. 556 00:38:58,000 --> 00:39:05,000 Ok, a questo punto, le cose sembrano abbastanza buono. 557 00:39:05,000 --> 00:39:13,000 Il problema con il codice come scritto è che cosa? 558 00:39:13,000 --> 00:39:15,000 [Studente] Non hai punti finali per le due metà. 559 00:39:15,000 --> 00:39:18,000 Giusto, non abbiamo punti finali per le due metà. 560 00:39:18,000 --> 00:39:20,000 Abbiamo anche solo per andare in una volta. 561 00:39:20,000 --> 00:39:23,000 Stiamo solo andando a guardare un punto medio. 562 00:39:23,000 --> 00:39:27,000 In entrambi i casi l'elemento c'è, o non lo è. 563 00:39:27,000 --> 00:39:34,000 Per completare questo, abbiamo bisogno di fare una sorta di ripetizione. 564 00:39:34,000 --> 00:39:39,000 Abbiamo bisogno di continuare a ripetere fino a quando si scopre che 565 00:39:39,000 --> 00:39:43,000 sia l'elemento è in là, perché abbiamo ristretto il campo e finalmente trovato, 566 00:39:43,000 --> 00:39:46,000 o non è lì perché abbiamo guardato attraverso tutte le cose 567 00:39:46,000 --> 00:39:52,000 nelle metà appropriate della matrice e trovato che nulla è lì. 568 00:39:52,000 --> 00:39:56,000 >> Ogni volta che abbiamo ottenuto questa ripetizione in corso, quello che abbiamo intenzione di usare? 569 00:39:56,000 --> 00:39:58,000 [Studente] Un ciclo. 570 00:39:58,000 --> 00:40:00,000 Una specie di loop. Sì. 571 00:40:00,000 --> 00:40:03,000 [Studente] Possiamo fare un ciclo do-while e farlo fare e poi mentre 572 00:40:03,000 --> 00:40:10,000 l'ago non è uguale a non-sono sicuro dove stavo andando con questo. 573 00:40:10,000 --> 00:40:18,000 Ma un po 'come fare questo fino a quando non è uguale al valore che l'input dell'utente. 574 00:40:18,000 --> 00:40:21,000 Sì, così vediamo, come potrebbe questo stesso scrivere? 575 00:40:21,000 --> 00:40:23,000 Hai detto che usiamo un ciclo do-while. 576 00:40:23,000 --> 00:40:26,000 Da dove viene il do di partenza? 577 00:40:26,000 --> 00:40:33,000 [Studente] Subito dopo la dimensione / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Ok, e cosa dobbiamo fare? 579 00:40:42,000 --> 00:40:44,000 Ci riempire il tempo dopo. 580 00:40:44,000 --> 00:40:46,000 Che cosa abbiamo intenzione di fare? 581 00:40:46,000 --> 00:40:49,000 [Studente] Non vogliamo fare tutte le cose che abbiamo in se parte? 582 00:40:49,000 --> 00:40:52,000 [Nate] fare tutta questa roba, grande. 583 00:40:52,000 --> 00:40:55,000 Copia e incolla. 584 00:40:55,000 --> 00:40:59,000 Oh, cavolo. 585 00:40:59,000 --> 00:41:03,000 Vediamo se questo funziona, se possiamo scheda questo oltre. 586 00:41:03,000 --> 00:41:08,000 Bella. 587 00:41:08,000 --> 00:41:16,000 Ok, e salvare questo modo voi ragazzi ce l'hanno. 588 00:41:16,000 --> 00:41:21,000 Va bene, e ci accingiamo a fare questo mentre- 589 00:41:21,000 --> 00:41:25,000 qual è stata la condizione mentre eri dopo? 590 00:41:25,000 --> 00:41:31,000 [Studente] Mentre l'ago non è uguale, così come il punto esclamativo. 591 00:41:31,000 --> 00:41:37,000 Ma io non so esattamente di cosa si tratta ancora. 592 00:41:37,000 --> 00:41:39,000 [Nate] Sì, questo è un modo per farlo. 593 00:41:39,000 --> 00:41:41,000 Sam, hai un commento? 594 00:41:41,000 --> 00:41:43,000 [Sam] mi sono ricordato quando ho guardato i video, 595 00:41:43,000 --> 00:41:48,000 Ho preso uno screenshot di uno dei-come quando abbiamo fatto lo pseudocodice per esso, 596 00:41:48,000 --> 00:41:52,000 ci fosse qualche relazione tra max e min. 597 00:41:52,000 --> 00:41:58,000 Penso che sia stato qualcosa di simile, se max è mai inferiore a min. 598 00:41:58,000 --> 00:42:00,000 Capito. 599 00:42:00,000 --> 00:42:04,000 [Sam] O come se max non è inferiore a quello minimo o qualcosa del genere, 600 00:42:04,000 --> 00:42:06,000 perché vorrebbe dire che hai cercato tutto. 601 00:42:06,000 --> 00:42:13,000 >> Sì, così che cosa suona come max e min sono state riferendo? 602 00:42:13,000 --> 00:42:16,000 [Sam] Vero che i-numeri interi che stanno per cambiare 603 00:42:16,000 --> 00:42:18,000 rispetto al punto in cui abbiamo messo il punto medio. 604 00:42:18,000 --> 00:42:20,000 Esattamente. 605 00:42:20,000 --> 00:42:24,000 [Sam] A questo punto, sta andando a [incomprensibile] calcolare il max e min. 606 00:42:24,000 --> 00:42:29,000 Punto centrale è il max e min idea. 607 00:42:29,000 --> 00:42:35,000 Questo ha un senso per la gente? 608 00:42:35,000 --> 00:42:39,000 Se dovessimo iniziare a guardare come stiamo andando a fare questa iterazione, 609 00:42:39,000 --> 00:42:43,000 hai perfettamente ragione che vogliamo utilizzare una sorta di do-while. 610 00:42:43,000 --> 00:42:49,000 Ma credo che se ci ricordiamo quello che sta succedendo nel punto di questa matrice 611 00:42:49,000 --> 00:42:53,000 e quello che succede-sto per scrivere qui- 612 00:42:53,000 --> 00:42:58,000 alla prima iterazione della ricerca binaria, abbiamo- 613 00:42:58,000 --> 00:43:05,000 Ho intenzione di usare b ed e per indicare l'inizio. 614 00:43:05,000 --> 00:43:10,000 E poi la fine del nostro array. 615 00:43:10,000 --> 00:43:14,000 Sappiamo che l'inizio è alle 4 del proprio qui, 616 00:43:14,000 --> 00:43:18,000 e sappiamo che la fine è a 108. 617 00:43:18,000 --> 00:43:23,000 Dire che stiamo cercando per il numero 15. 618 00:43:23,000 --> 00:43:27,000 La prima volta che lo facciamo, come abbiamo visto in precedenza, 619 00:43:27,000 --> 00:43:30,000 il punto centrale è o sta per essere 16 o 23 620 00:43:30,000 --> 00:43:34,000 a seconda di come si calcolano le cose. 621 00:43:34,000 --> 00:43:37,000 Dal momento che in modo uniforme dividendo in mezzo ci avrebbe dato questo spazio 622 00:43:37,000 --> 00:43:42,000 tra il 16 e il 23, non si può dividerlo in modo uniforme 623 00:43:42,000 --> 00:43:47,000 o dividere e arrivare a un punto medio vero. 624 00:43:47,000 --> 00:43:49,000 Vedremo 16. 625 00:43:49,000 --> 00:43:55,000 Ci rendiamo conto "Ehi, 16> 15 che stiamo cercando." 626 00:43:55,000 --> 00:43:59,000 Per vedere poi la metà sinistra della matrice 627 00:43:59,000 --> 00:44:03,000 quello che finirà per fare è scartare 628 00:44:03,000 --> 00:44:07,000 Questa intera porzione superiore 629 00:44:07,000 --> 00:44:16,000 e dicendo: "Okay, ora il nostro punto finale sta per essere qui." 630 00:44:16,000 --> 00:44:22,000 La prossima iterazione del nostro ciclo, stiamo ora guardando questa matrice, 631 00:44:22,000 --> 00:44:25,000 efficacemente aver scartato questa porzione perché ora 632 00:44:25,000 --> 00:44:30,000 se stiamo prendendo il punto medio di essere la differenza tra l'inizio e la fine, 633 00:44:30,000 --> 00:44:34,000 troviamo il nostro punto centrale per essere 8, 634 00:44:34,000 --> 00:44:40,000 che possiamo quindi verificare 8 per vedere dove è in relazione al numero che stiamo cercando, 635 00:44:40,000 --> 00:44:44,000 15, trova che 15 è maggiore, 636 00:44:44,000 --> 00:44:49,000 quindi dobbiamo passare alla parte destra della lista, 637 00:44:49,000 --> 00:44:51,000 che sappiamo perché siamo esseri umani, e possiamo vedere. 638 00:44:51,000 --> 00:44:54,000 Sappiamo che la parte destra sarà dove la troviamo, 639 00:44:54,000 --> 00:45:01,000 ma il computer non sa che, per ciò che faremo è che troveremo a 640 00:45:01,000 --> 00:45:04,000 hanno questo salire, e ora l'inizio e la fine 641 00:45:04,000 --> 00:45:11,000 sono nello stesso punto, in modo che il punto centrale diventa il numero nell'elenco solo a quel punto, 642 00:45:11,000 --> 00:45:16,000 che è il 15, e l'abbiamo trovato. 643 00:45:16,000 --> 00:45:21,000 Vuol far luce su dove questo max intero e la notazione min sta andando, 644 00:45:21,000 --> 00:45:24,000 tenere traccia dei punti finali della matrice, al fine di capire 645 00:45:24,000 --> 00:45:35,000 come limitare le cose? 646 00:45:35,000 --> 00:45:42,000 >> Che cosa accadrebbe se questo non fosse pari al 15 adesso? 647 00:45:42,000 --> 00:45:52,000 Che cosa succede se stavamo cercando per il 15 e, invece, questo numero erano anche 16? 648 00:45:52,000 --> 00:45:54,000 Ci piacerebbe dire: "Oh, è maggiore. 649 00:45:54,000 --> 00:45:57,000 Vogliamo tornare a sinistra. " 650 00:45:57,000 --> 00:46:01,000 E ci piacerebbe spostare la nostra e verso destra, 651 00:46:01,000 --> 00:46:06,000 a questo punto abbiamo un endpoint che sarebbe in conflitto. 652 00:46:06,000 --> 00:46:09,000 Non sarebbe in grado di cercare elementi più 653 00:46:09,000 --> 00:46:13,000 perché ora abbiamo il nostro punto finale e il nostro punto di partenza, 654 00:46:13,000 --> 00:46:16,000 la nostra massima e la nostra min, ora sono capovolte. 655 00:46:16,000 --> 00:46:23,000 Cerchiamo attraverso l'intero array. Non riusciamo a trovare nulla. 656 00:46:23,000 --> 00:46:27,000 Questo è il punto in cui si vorrebbe dire: "Va bene, andiamo a fermare questo algoritmo. 657 00:46:27,000 --> 00:46:34,000 Non abbiamo trovato nulla. Sappiamo che non e 'qui. " 658 00:46:34,000 --> 00:46:36,000 Come è questo? 659 00:46:36,000 --> 00:46:40,000 [Studente] Come fa esattamente il computer passa alla fine? 660 00:46:40,000 --> 00:46:45,000 In che modo la fine finisce prima dell'inizio? 661 00:46:45,000 --> 00:46:48,000 L'estremità finisce prima dell'inizio 662 00:46:48,000 --> 00:46:54,000 a causa della matematica che stiamo andando a fare ogni volta che lo facciamo. 663 00:46:54,000 --> 00:47:00,000 Il nostro modo di scambiare è se si guarda la prima volta che facciamo questo swap 664 00:47:00,000 --> 00:47:03,000 dove abbiamo l'inizio a 4 e fine 665 00:47:03,000 --> 00:47:13,000 tutta la strada fino a 108 e il nostro punto di mezzo, diciamo, a 16 - 666 00:47:13,000 --> 00:47:20,000 Ho intenzione di ripristinare questo ritorno a 15, se stiamo cercando il 15, 667 00:47:20,000 --> 00:47:25,000 sapevamo che quello che abbiamo fatto quando ci siamo registrati il ​​16 e vide che era più grande 668 00:47:25,000 --> 00:47:28,000 e voleva eliminare tutta la parte destra della lista, 669 00:47:28,000 --> 00:47:36,000 abbiamo visto che quello che volevamo fare è spostare questo e proprio qui. 670 00:47:36,000 --> 00:47:44,000 In effetti, l'e hanno spostati in uno prima il punto medio. 671 00:47:44,000 --> 00:47:48,000 Allo stesso modo, quando abbiamo fatto questa iterazione dell'algoritmo 672 00:47:48,000 --> 00:47:51,000 e il punto medio era a 8, 673 00:47:51,000 --> 00:47:55,000 abbiamo scoperto che 8 <15, quindi abbiamo deciso di spostare il b 674 00:47:55,000 --> 00:48:00,000 un passato il punto medio. 675 00:48:00,000 --> 00:48:07,000 Ora, l'inizio e la fine sono entrambi insieme a questo 15. 676 00:48:07,000 --> 00:48:10,000 >> Se avessimo sta accadendo a cercare qualche altro valore, non 15, 677 00:48:10,000 --> 00:48:14,000 o se questa era stata invece 15 a 16, 678 00:48:14,000 --> 00:48:20,000 avremmo trovato che l'indirizzo che vogliamo spostare uno prima il punto medio. 679 00:48:20,000 --> 00:48:33,000 Ora l'indirizzo e ci sarebbe capovolto inferiore alla b. 680 00:48:33,000 --> 00:48:39,000 Esaminiamo il modo in cui in realtà finiscono per questo algoritmo di codifica. 681 00:48:39,000 --> 00:48:44,000 Sappiamo che vogliamo avere questo calcolo punto medio. 682 00:48:44,000 --> 00:48:48,000 Sappiamo anche che si vuole monitorare l'inizio e la fine della matrice 683 00:48:48,000 --> 00:48:51,000 della nostra matrice corrente in modo da poter capire 684 00:48:51,000 --> 00:48:56,000 dove questa metà sinistra della lista e dove la metà destra della lista è. 685 00:48:56,000 --> 00:49:03,000 Lo facciamo sia con inizio e fine, 686 00:49:03,000 --> 00:49:07,000 o possiamo chiamarli min e max. 687 00:49:07,000 --> 00:49:10,000 Userò iniziare e finire questa volta. 688 00:49:10,000 --> 00:49:15,000 Quando iniziamo, se guardiamo indietro al nostro esempio qui, 689 00:49:15,000 --> 00:49:20,000 il nostro inizio è stato impostato fin dall'inizio della matrice, come naturale. 690 00:49:20,000 --> 00:49:25,000 Che indice è stato questo? Quale dovrebbe essere il nostro inizio? 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] Sì, così potremmo posto uguale a pagliaio [0]. 694 00:49:37,000 --> 00:49:40,000 Il problema, tuttavia, è che questo non ci dà la posizione del primo elemento. 695 00:49:40,000 --> 00:49:45,000 Ci dà l'indice del primo elemento o il valore reale che prima posizione. 696 00:49:45,000 --> 00:49:47,000 [Studente] che converte a 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Quello che voglio fare è, be ', non farà alcuna conversione. 698 00:49:52,000 --> 00:49:56,000 Quello che farà è che memorizza un 4 a iniziare, 699 00:49:56,000 --> 00:49:59,000 e poi sarà difficile fare paragoni contro iniziare 700 00:49:59,000 --> 00:50:03,000 perché begin terrà il valore di 4, 701 00:50:03,000 --> 00:50:06,000 che è l'inizio del nostro array, 702 00:50:06,000 --> 00:50:08,000 ma vogliamo tenere traccia gli indici della matrice 703 00:50:08,000 --> 00:50:11,000 a differenza dei valori. 704 00:50:11,000 --> 00:50:17,000 Ci effettivamente utilizzare uno 0, come quella. 705 00:50:17,000 --> 00:50:20,000 Per il fine della matrice-Charlotte portato questo poco prima. 706 00:50:20,000 --> 00:50:23,000 E 'qui che prenderemo in considerazione l'indicizzazione zero. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, qual è il fine della matrice? 708 00:50:25,000 --> 00:50:28,000 Qual è l'indice della fine? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Size - 1. 710 00:50:30,000 --> 00:50:32,000 Gia ', e che dimensioni dovremmo usare? 711 00:50:32,000 --> 00:50:35,000 Dovremmo usare la dimensione di capitale o di dimensioni minuscole? 712 00:50:35,000 --> 00:50:37,000 Capitale dimensioni. 713 00:50:37,000 --> 00:50:42,000 In questo caso, si potrebbe usare la dimensione di capitale. 714 00:50:42,000 --> 00:50:45,000 Se volessimo questa funzione per essere portatile 715 00:50:45,000 --> 00:50:48,000 e usare questa funzione in altri programmi, 716 00:50:48,000 --> 00:50:50,000 si può effettivamente utilizzare dimensioni minuscole. 717 00:50:50,000 --> 00:50:52,000 Va bene anche. 718 00:50:52,000 --> 00:51:01,000 Ma Charlotte è del tutto giusto che vogliamo avere dimensioni - 1. 719 00:51:01,000 --> 00:51:03,000 A questo punto- 720 00:51:03,000 --> 00:51:05,000 [Studente] Come è possibile che è possibile utilizzare size maiuscolo? 721 00:51:05,000 --> 00:51:07,000 Come è possibile che potremmo usare dimensioni maiuscolo? 722 00:51:07,000 --> 00:51:13,000 Si scopre che questi definisce # sono veramente, 723 00:51:13,000 --> 00:51:19,000 sotto il cofano, un testo come trovare e sostituire, se questo ha un senso. 724 00:51:19,000 --> 00:51:24,000 Quando si compila il codice, la pre-elaborazione di fase 725 00:51:24,000 --> 00:51:27,000 del compilatore passa attraverso il file, 726 00:51:27,000 --> 00:51:31,000 e cerca in tutto il mondo che hai scritto dimensione del capitale, 727 00:51:31,000 --> 00:51:39,000 e sostituisce il testo letteralmente con un 8, proprio così. 728 00:51:39,000 --> 00:51:42,000 In questo senso, questo è molto diverso da una variabile. 729 00:51:42,000 --> 00:51:45,000 Non occupa spazio in memoria. 730 00:51:45,000 --> 00:51:52,000 E 'un trucco semplice sostituzione di testo. 731 00:51:52,000 --> 00:51:57,000 In questo caso, abbiamo intenzione di usare la dimensione. 732 00:51:57,000 --> 00:52:01,000 Da qui ci si vuole fare una sorta di ripetizione, 733 00:52:01,000 --> 00:52:03,000 e siamo sulla strada giusta con il nostro do-while. 734 00:52:03,000 --> 00:52:08,000 Vogliamo fare qualcosa fino a quando una condizione non regge più, 735 00:52:08,000 --> 00:52:12,000 e, come abbiamo visto in precedenza, abbiamo visto che tale condizione 736 00:52:12,000 --> 00:52:19,000 era, infatti, che non vogliamo la fine 737 00:52:19,000 --> 00:52:24,000 essere inferiore inizia. 738 00:52:24,000 --> 00:52:26,000 >> Questa è la nostra condizione di arresto. 739 00:52:26,000 --> 00:52:35,000 In questo caso, si vuole fermare e dichiarare del tipo: "Ehi, non abbiamo trovato nulla." 740 00:52:35,000 --> 00:52:43,000 Per esprimere questo, noi vogliamo utilizzare una sorta di loop. 741 00:52:43,000 --> 00:52:49,000 In questo caso, sarebbe un ciclo do-while, un ciclo for, un ciclo while? 742 00:52:49,000 --> 00:52:51,000 Abbiamo un ciclo do-while qui. 743 00:52:51,000 --> 00:52:53,000 Avete tipi come questo approccio? 744 00:52:53,000 --> 00:52:59,000 Pensi che dovremmo tentare un approccio diverso? 745 00:52:59,000 --> 00:53:01,000 Kevin, qualche idea? 746 00:53:01,000 --> 00:53:06,000 Si potrebbe avere un ciclo while perché sappiamo massimo 747 00:53:06,000 --> 00:53:11,000 sarebbe maggiore di min a centrael inizio. 748 00:53:11,000 --> 00:53:14,000 Gia ', quindi non c'è di inizializzazione che deve accadere. 749 00:53:14,000 --> 00:53:17,000 Questi do-while sono grandi quando si ha qualcosa di inizializzare 750 00:53:17,000 --> 00:53:21,000 prima di effettuare i test, mentre qui 751 00:53:21,000 --> 00:53:26,000 sappiamo che non stiamo andando a tenere reinizializzazione sia iniziare e terminare 752 00:53:26,000 --> 00:53:28,000 ogni giro del ciclo. 753 00:53:28,000 --> 00:53:32,000 Sappiamo che vogliamo inizializzare loro, quindi controllare la nostra condizione. 754 00:53:32,000 --> 00:53:38,000 In questo caso, io in realtà andare con un semplice ciclo while. 755 00:53:38,000 --> 00:53:44,000 Si scopre che do-while vengono utilizzati abbastanza di rado. 756 00:53:44,000 --> 00:53:49,000 Un sacco di posti non hanno nemmeno lo insegnano i cicli while. 757 00:53:49,000 --> 00:53:53,000 Vanno bene per la gestione di input dell'utente, quindi abbiamo visto un sacco di loro finora. 758 00:53:53,000 --> 00:53:59,000 Ma normali cicli for e while sono molto più comune. 759 00:53:59,000 --> 00:54:03,000 Si scopre che questa condizione come scritto 760 00:54:03,000 --> 00:54:09,000 che in realtà non ci fare molto bene, e perché? 761 00:54:09,000 --> 00:54:11,000 Mi dispiace, io non conosco il tuo nome. 762 00:54:11,000 --> 00:54:13,000 Sono Jerry. >> Scusa? 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, va bene. 765 00:54:18,000 --> 00:54:23,000 Io non ti vedo nella mia lista. 766 00:54:23,000 --> 00:54:26,000 Oh, è perché-oh, questo ha un senso. 767 00:54:26,000 --> 00:54:31,000 Avete un idea del perché questo ciclo while potrebbe non funzionare come previsto, 768 00:54:31,000 --> 00:54:38,000 come scritto con la condizione? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Vuoi dire come si desidera che tutte le cose dopo che al-? 770 00:54:43,000 --> 00:54:46,000 Si ', e questo è uno. 771 00:54:46,000 --> 00:54:49,000 Potremmo mettere tutte queste cose nel ciclo while, che è del tutto vero. 772 00:54:49,000 --> 00:54:55,000 L'altra cosa che è un po 'più problematico, però, è che questa condizione non funziona. 773 00:54:55,000 --> 00:54:57,000 [Studente] Hai bisogno di capovolgerla. 774 00:54:57,000 --> 00:55:04,000 Giusto, quindi questa condizione non sarà mai vero inizialmente il modo in cui ne abbiamo parlato. 775 00:55:04,000 --> 00:55:08,000 Vogliamo fare qualcosa fino 00:55:13,000 ma vogliamo fare qualcosa mentre 777 00:55:13,000 --> 00:55:21,000 inizio fine ≤. 778 00:55:21,000 --> 00:55:24,000 >> Non c'è che l'inversione della logica là. 779 00:55:24,000 --> 00:55:27,000 Io sono colpevole di fare quegli errori per tutto il tempo. 780 00:55:27,000 --> 00:55:31,000 [Studente] Perché deve essere inferiore o uguale a? 781 00:55:31,000 --> 00:55:33,000 Perché ti ricordi il caso che abbiamo avuto modo di 782 00:55:33,000 --> 00:55:36,000 dove c'era un solo elemento, e siamo stati giù, 783 00:55:36,000 --> 00:55:43,000 e stavamo guardando solo il 15 nel nostro array? 784 00:55:43,000 --> 00:55:47,000 E il nostro inizio e la nostra fine era lo stesso elemento. 785 00:55:47,000 --> 00:55:50,000 Vogliamo fare in modo che gestiamo questo caso. 786 00:55:50,000 --> 00:55:54,000 Se abbiamo fatto un dritto meno, 787 00:55:54,000 --> 00:55:58,000 ci sarebbe solo in grado di ottenere fino a un 2-elemento di un array. 788 00:55:58,000 --> 00:56:06,000 Una volta che abbiamo ottenuto fino a questo ultimo elemento, se questo fosse il nostro elemento, non avevamo mai trovato. 789 00:56:06,000 --> 00:56:10,000 Ora qui, siamo in grado di fare esattamente come dicevi. 790 00:56:10,000 --> 00:56:15,000 Possiamo iniziare plopping roba proprio nel mezzo del nostro ciclo while. 791 00:56:15,000 --> 00:56:20,000 Siamo in grado di plop nel nostro punto medio. 792 00:56:20,000 --> 00:56:24,000 Siamo in grado di prendere tutte queste istruzioni if, 793 00:56:24,000 --> 00:56:30,000 tirarli fuori da questo ciclo do-while, 794 00:56:30,000 --> 00:56:34,000 plop in, 795 00:56:34,000 --> 00:56:39,000 pulire le cose un po ', 796 00:56:39,000 --> 00:56:48,000 e io vado avanti e salvare questa revisione. 797 00:56:48,000 --> 00:56:53,000 E a questo punto, ci stiamo molto vicino. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Penso che anche avere metà int size = - 1/2. 800 00:56:58,000 --> 00:57:01,000 Capito, taglia - 1/2. 801 00:57:01,000 --> 00:57:05,000 C'è qualcos'altro che abbiamo bisogno di cambiare su quella linea? 802 00:57:05,000 --> 00:57:10,000 E 'stata una buona pesca. 803 00:57:10,000 --> 00:57:14,000 >> Che cosa fa dimensione fare? Siamo in continua evoluzione dimensioni? 804 00:57:14,000 --> 00:57:17,000 Al fine di mantenere la linea in questo, dobbiamo cambiare le dimensioni. 805 00:57:17,000 --> 00:57:21,000 Dobbiamo cambiare le dimensioni ogni volta che andiamo in giro per il ciclo for. 806 00:57:21,000 --> 00:57:25,000 Ma ricordo quando stavamo attraversando il nostro esempio solo un po 'prima, 807 00:57:25,000 --> 00:57:30,000 e abbiamo avuto l'inizio alle 4 808 00:57:30,000 --> 00:57:33,000 e alla fine tutto il percorso oltre a 108? 809 00:57:33,000 --> 00:57:35,000 Come si calcola il punto medio? 810 00:57:35,000 --> 00:57:38,000 Se noi utilizzando la dimensione? 811 00:57:38,000 --> 00:57:40,000 Oppure siamo stati con inizio e fine, invece? 812 00:57:40,000 --> 00:57:42,000 È la differenza tra la fine e l'inizio. 813 00:57:42,000 --> 00:57:50,000 Esattamente, e in che modo dovrei scrivere che, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Solo fine - inizio. 815 00:57:52,000 --> 00:57:55,000 Non avrebbe bisogno di fare il - 1 816 00:57:55,000 --> 00:57:58,000 perché il - 1 è stato inserito alla fine e l'inizio già. 817 00:57:58,000 --> 00:58:00,000 [Nate] Grande, hai assolutamente ragione. 818 00:58:00,000 --> 00:58:03,000 Non abbiamo a che fare il - 1 perché - 1 è stato incluso 819 00:58:03,000 --> 00:58:08,000 e in considerazione quando si inizializza la variabile fine. 820 00:58:08,000 --> 00:58:11,000 >> C'è qualcos'altro che devo fare sintatticamente di avere questa linea ha senso? 821 00:58:11,000 --> 00:58:13,000 [Studente] Plus. iniziare. >> Inoltre cominciare? 822 00:58:13,000 --> 00:58:15,000 [Studente] Alla fine. 823 00:58:15,000 --> 00:58:20,000 Perché è calcolato solo la metà della lunghezza. 824 00:58:20,000 --> 00:58:26,000 È necessario aggiungere l'inizio. 825 00:58:26,000 --> 00:58:31,000 [Nate] Che cosa sarebbe questo il calcolo per noi? 826 00:58:31,000 --> 00:58:35,000 Se pensiamo a finire su questa prima iterazione del ciclo, 827 00:58:35,000 --> 00:58:40,000 fine sta per essere in posizione di indice 7. 828 00:58:40,000 --> 00:58:43,000 Iniziare è in posizione 0. 829 00:58:43,000 --> 00:58:47,000 Ricordate, stiamo cercando sia 830 00:58:47,000 --> 00:58:52,000 posizione 3 o posizione 4. 831 00:58:52,000 --> 00:58:56,000 Se guardiamo a questa matematica, solo per fare un po 'più tangibile, 832 00:58:56,000 --> 00:59:02,000 mettere un po 'i numeri qui, abbiamo 7, 0, 833 00:59:02,000 --> 00:59:10,000 così 7-0, e poi / 2 834 00:59:10,000 --> 00:59:19,000 è 3 a divisione intera, che è. 835 00:59:19,000 --> 00:59:26,000 Poi abbiamo bisogno di aggiungere poi di nuovo il nostro inizio? 836 00:59:26,000 --> 00:59:28,000 Non fare in questo caso. 837 00:59:28,000 --> 00:59:31,000 Nella prima iterazione, sarà bene perché Begin è 0. 838 00:59:31,000 --> 00:59:36,000 Ma, come abbiamo progressi, facciamo davvero tutto solo bisogno di 839 00:59:36,000 --> 00:59:42,000 fine - inizio / 2. 840 00:59:42,000 --> 00:59:46,000 C'è un altro trucco qui, e questo è precisamente uno di precedenza. 841 00:59:46,000 --> 00:59:49,000 [Studente] Abbiamo bisogno di parentesi? 842 00:59:49,000 --> 00:59:53,000 [Nate] Esattamente, e questo perché, se non mettiamo queste parentesi, 843 00:59:53,000 --> 00:59:58,000 allora questa linea sarà interpretata invece 844 00:59:58,000 --> 01:00:09,000 come (fine) - (inizio / 2), che sicuramente non si desidera. 845 01:00:09,000 --> 01:00:11,000 Attenzione per le regole di precedenza. 846 01:00:11,000 --> 01:00:15,000 [Studente] Perché non è fine + inizio? 847 01:00:15,000 --> 01:00:17,000 Perché non è fine + inizio? 848 01:00:17,000 --> 01:00:19,000 [Studente] Perché non è così? 849 01:00:19,000 --> 01:00:24,000 Perché sarebbe +? 850 01:00:24,000 --> 01:00:26,000 Penso che tu abbia ragione. 851 01:00:26,000 --> 01:00:28,000 [Studente] Perche 'e' media? 852 01:00:28,000 --> 01:00:31,000 [Nate] + Fine iniziare, hai assolutamente ragione. 853 01:00:31,000 --> 01:00:34,000 Wow, ho preso una cantonata del tutto. Hai ragione. 854 01:00:34,000 --> 01:00:39,000 Se stavamo facendo il segno meno, vorremmo aggiungere l'inizio interattiva 855 01:00:39,000 --> 01:00:43,000 In questo caso, sei molto giusto che si vuole prendere la media dei due, 856 01:00:43,000 --> 01:00:45,000 così noi vogliamo aggiungerli, al contrario di sottrarre loro. 857 01:00:45,000 --> 01:00:49,000 [Studente] Sarebbe anche funzionare se fatto alla fine - inizio / 2 + iniziare. 858 01:00:49,000 --> 01:00:55,000 Sarebbe se lo facciamo-Credo di sì. 859 01:00:55,000 --> 01:01:00,000 >> Per esempio, se stavamo guardando iniziare, 860 01:01:00,000 --> 01:01:04,000 e lo abbiamo spostato qui 861 01:01:04,000 --> 01:01:08,000 alla 15. 862 01:01:08,000 --> 01:01:12,000 Ora iniziare è in posizione 2. 863 01:01:12,000 --> 01:01:15,000 End è in posizione 7. 864 01:01:15,000 --> 01:01:21,000 Se li sottraiamo, si ottiene 5. 865 01:01:21,000 --> 01:01:24,000 Dividere che per 2, otteniamo 2. 866 01:01:24,000 --> 01:01:27,000 E poi aggiungere 2 indietro, 867 01:01:27,000 --> 01:01:30,000 e che ci porta al 4 ° posto, 868 01:01:30,000 --> 01:01:33,000 che è proprio qui, che è il punto medio. 869 01:01:33,000 --> 01:01:36,000 [Studente] Abbiamo bisogno di prendersi cura di avvolgimento? 870 01:01:36,000 --> 01:01:39,000 In che senso abbiamo bisogno di prendersi cura di avvolgimento? 871 01:01:39,000 --> 01:01:43,000 Se la somma o la differenza tra 872 01:01:43,000 --> 01:01:45,000 a seconda di come lo facciamo non è un numero pari. 873 01:01:45,000 --> 01:01:49,000 Poi il computer si confonde se quando è 2,5; 874 01:01:49,000 --> 01:01:52,000 ci si sposta verso sinistra o verso destra per determinare quale è il punto medio? 875 01:01:52,000 --> 01:01:54,000 Capito. 876 01:01:54,000 --> 01:01:56,000 Si scopre che con la divisione intera, 877 01:01:56,000 --> 01:01:59,000 non abbiamo mai ottenere questi numeri in virgola mobile. 878 01:01:59,000 --> 01:02:01,000 Non abbiamo mai ottenere il decimale. 879 01:02:01,000 --> 01:02:04,000 E 'del tutto scartata. 880 01:02:04,000 --> 01:02:08,000 Se si dispone di un computer dividere due variabili int, 881 01:02:08,000 --> 01:02:11,000 e uno è 7, e l'altro è 2, 882 01:02:11,000 --> 01:02:13,000 non sarà possibile ottenere come risultato 3,5. 883 01:02:13,000 --> 01:02:16,000 Si otterrà 3. 884 01:02:16,000 --> 01:02:19,000 Il resto verrà scartato, quindi è efficace arrotondamento 885 01:02:19,000 --> 01:02:24,000 Non un giro, ma piuttosto un piano, se voi ragazzi sono a conoscenza che in matematica, 886 01:02:24,000 --> 01:02:27,000 dove è completamente scartare il decimale, 887 01:02:27,000 --> 01:02:31,000 e così si sta essenzialmente troncare fino al più vicino 888 01:02:31,000 --> 01:02:33,000 intera posizione, al numero intero più vicino. 889 01:02:33,000 --> 01:02:38,000 [Studente] Ma allora questo è un problema perché se si dispone di una serie di 7 elementi 890 01:02:38,000 --> 01:02:43,000 allora che prende automaticamente l'elemento 3a dal punto medio anziché il quarto. 891 01:02:43,000 --> 01:02:46,000 Come abbiamo a che fare con questo? 892 01:02:46,000 --> 01:02:49,000 E 'un problema, perché se avessimo una serie di 7, 893 01:02:49,000 --> 01:02:54,000 che prendeva il 3 al posto del 4. 894 01:02:54,000 --> 01:02:56,000 Potresti spiegare un po 'di più? 895 01:02:56,000 --> 01:02:59,000 [Studente] Perché se si dispone di 7 elementi quindi il 4 ° elemento 896 01:02:59,000 --> 01:03:04,000 sarebbe il punto centrale, giusto? 897 01:03:04,000 --> 01:03:07,000 Ricordate che il vostro commento di essere indicizzati a zero, però. 898 01:03:07,000 --> 01:03:10,000 [Studente] Si ', quindi in posizione 3. Questo sarebbe il punto medio. 899 01:03:10,000 --> 01:03:12,000 Gia '. 900 01:03:12,000 --> 01:03:16,000 Oh, va bene. Capisco quello che vuoi dire. 901 01:03:16,000 --> 01:03:19,000 E 'un po' strano, come ci abituiamo a questa intera nozione di 902 01:03:19,000 --> 01:03:22,000 sbarazzarsi di decimali. 903 01:03:22,000 --> 01:03:26,000 Questo è un ottimo punto. 904 01:03:26,000 --> 01:03:30,000 Finiamo questo. 905 01:03:30,000 --> 01:03:32,000 Abbiamo calcolato il nostro punto medio. 906 01:03:32,000 --> 01:03:37,000 >> Stiamo testando per vedere se il nostro ago è uguale al valore medio. 907 01:03:37,000 --> 01:03:41,000 Siamo la stampa che abbiamo trovato, ma in realtà, che cosa vogliamo fare in questa situazione? 908 01:03:41,000 --> 01:03:46,000 Lo abbiamo trovato, quindi vogliamo lasciare che il chiamante sa che abbiamo trovato. 909 01:03:46,000 --> 01:03:49,000 Abbiamo una funzione che è una funzione booleana tipizzato. 910 01:03:49,000 --> 01:03:54,000 Il nostro modo di segnalare al chiamante della nostra funzione che siamo pronti a partire 911 01:03:54,000 --> 01:03:58,000 è diciamo: "Ehi, questo è vero." 912 01:03:58,000 --> 01:04:00,000 Come lo facciamo, Kevin? 913 01:04:00,000 --> 01:04:02,000 Stai annuire con la testa. >> [Kevin] Aggiungi un return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Esattamente, restituisce true. 915 01:04:06,000 --> 01:04:12,000 Ora, se non è uguale, come possiamo vedere nella metà di sinistra? 916 01:04:12,000 --> 01:04:16,000 Tutte le idee? 917 01:04:16,000 --> 01:04:18,000 Stella, qualche idea? 918 01:04:18,000 --> 01:04:21,000 È necessario impostare una nuova posizione per la fine. 919 01:04:21,000 --> 01:04:23,000 Gia '. 920 01:04:23,000 --> 01:04:29,000 Quindi dobbiamo fare la posizione del punto medio - fine. 921 01:04:29,000 --> 01:04:33,000 Grande. 922 01:04:33,000 --> 01:04:36,000 Abbiamo bisogno di impostare una nuova posizione per la fine 923 01:04:36,000 --> 01:04:38,000 a guardare la metà sinistra. 924 01:04:38,000 --> 01:04:41,000 Questo era ciò che abbiamo parlato prima, dove 925 01:04:41,000 --> 01:04:44,000 Continuo a tornare in questo esempio. 926 01:04:44,000 --> 01:04:50,000 Ho l'inizio qui, e poi ho la fine fin qui. 927 01:04:50,000 --> 01:04:53,000 >> Anche in questo caso, se siete alla ricerca di 15, e il nostro punto centrale è a 16, 928 01:04:53,000 --> 01:04:56,000 e ci rendiamo conto, "Oops, 16 è più grande. 929 01:04:56,000 --> 01:04:59,000 Vogliamo passare alla metà di sinistra. " 930 01:04:59,000 --> 01:05:02,000 Vorremmo quindi spostare il termine al 15, 931 01:05:02,000 --> 01:05:06,000 e lo facciamo prendendo una distanza dal punto centrale 932 01:05:06,000 --> 01:05:09,000 e l'impostazione che, come la nostra fine nuova. 933 01:05:09,000 --> 01:05:12,000 Allo stesso modo, se si vuole guardare la metà destra, come potremmo farlo? 934 01:05:12,000 --> 01:05:14,000 Avete un idea? 935 01:05:14,000 --> 01:05:22,000 [Studente] Devi solo iniziare a impostare punto medio + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Grande. 937 01:05:24,000 --> 01:05:29,000 E ora nel caso in cui non troviamo nulla, 938 01:05:29,000 --> 01:05:32,000 vuol avere curato per noi? 939 01:05:32,000 --> 01:05:36,000 Daniel, non che vengono curati per noi? 940 01:05:36,000 --> 01:05:38,000 [Daniel] No. 941 01:05:38,000 --> 01:05:40,000 [Nate] Se lo facciamo attraverso l'intero array e non troviamo nulla, 942 01:05:40,000 --> 01:05:42,000 dove sarebbe che essere curato, o dovremmo prendersi cura di essa? 943 01:05:42,000 --> 01:05:44,000 [Daniel] La condizione di tempo. 944 01:05:44,000 --> 01:05:48,000 [Nate] Sì, la condizione mentre, esattamente. 945 01:05:48,000 --> 01:05:51,000 Esso si occuperà di passare attraverso l'intero array, se non troviamo nulla. 946 01:05:51,000 --> 01:05:53,000 Questo ciclo while termina. 947 01:05:53,000 --> 01:05:56,000 Ci sarà mai incontrato questa condizione, 948 01:05:56,000 --> 01:06:03,000 e siamo in grado di restituire false. 949 01:06:03,000 --> 01:06:10,000 Possiamo anche lasciare questo qui come se in questo 950 01:06:10,000 --> 01:06:14,000 perché se questa affermazione è vera se, 951 01:06:14,000 --> 01:06:16,000 e la nostra funzione ritornerà, 952 01:06:16,000 --> 01:06:21,000 e così faremo essenzialmente annullare questa funzione, a questo punto 953 01:06:21,000 --> 01:06:24,000 quando torneremo vero. 954 01:06:24,000 --> 01:06:28,000 Ma cosa succede con questa struttura qui? 955 01:06:28,000 --> 01:06:34,000 Sarà questo lavoro del tutto, o c'è qualche difetto logico in là? 956 01:06:34,000 --> 01:06:37,000 >> C'è qualche difetto logico in là, con il modo in cui è impostato l'alto. 957 01:06:37,000 --> 01:06:40,000 Che cosa potrebbe essere? 958 01:06:40,000 --> 01:06:43,000 [Studente] Perché avete bisogno di - e + 1s? 959 01:06:43,000 --> 01:06:47,000 Questo imposta la nostra matrice fino a essere la nostra nuova metà sinistra e metà a destra. 960 01:06:47,000 --> 01:06:51,000 [Studente] Ma perché non hai potuto fare a meno - e 1s + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Potremmo impostato uguale al punto medio? 962 01:06:53,000 --> 01:07:04,000 Ciò che potrebbe essere problematico di questo? 963 01:07:04,000 --> 01:07:08,000 [Studente] Credo che sia inefficiente perché si sta verificando un valore che è già stato controllato. 964 01:07:08,000 --> 01:07:11,000 [Nate] Esattamente, quindi Sam è totalmente ragione. 965 01:07:11,000 --> 01:07:15,000 Se si imposta la fine e l'inizio pari alla metà 966 01:07:15,000 --> 01:07:18,000 invece di - 1 e + 1 riflessivo, 967 01:07:18,000 --> 01:07:22,000 ad un certo punto in futuro finiremo per il controllo del punto medio di nuovo. 968 01:07:22,000 --> 01:07:26,000 [Studente] ho iniziato il pset, e poi ho avuto qualcosa di simile 969 01:07:26,000 --> 01:07:30,000 dove ho dimenticato il + 1, ed è rimasto bloccato in un ciclo infinito. 970 01:07:30,000 --> 01:07:34,000 Già, perché a un certo punto non si è mai intenzione di iniziare a ottenere e terminare 971 01:07:34,000 --> 01:07:39,000 sovrapporre realtà. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 C'è un difetto più logico, e che è che questo deve assolutamente essere 974 01:07:44,000 --> 01:07:48,000 un else if. 975 01:07:48,000 --> 01:07:55,000 Perché potrebbe essere? 976 01:07:55,000 --> 01:07:59,000 >> La ragione è che se non è un altro se-hai visto che, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Sì, perché si sta cambiando il punto finale. 978 01:08:02,000 --> 01:08:05,000 [Nate] Esattamente. 979 01:08:05,000 --> 01:08:07,000 Stiamo cambiando il punto finale, 980 01:08:07,000 --> 01:08:12,000 e se è scritto in questo modo-we'll rendere gli spazi tra- 981 01:08:12,000 --> 01:08:14,000 si verifica questo caso. 982 01:08:14,000 --> 01:08:18,000 Questo caso, se ha successo, verrà interrotta dalla funzione. 983 01:08:18,000 --> 01:08:21,000 Poi si verifica questo caso successivo, 984 01:08:21,000 --> 01:08:24,000 e in caso di successo, che consente di regolare il punto finale, 985 01:08:24,000 --> 01:08:28,000 e poi continuerà e controllare questo caso. 986 01:08:28,000 --> 01:08:31,000 Ma a questo punto, non vogliamo che continui il controllo. 987 01:08:31,000 --> 01:08:35,000 Fortunatamente, non abbiamo reimpostare il punto centrale qui, 988 01:08:35,000 --> 01:08:39,000 e sappiamo che questo caso non avrà successo. 989 01:08:39,000 --> 01:08:44,000 Ma noi vorremmo mettere l'else if in là 990 01:08:44,000 --> 01:08:48,000 anche se questo potrebbe, in questo caso 991 01:08:48,000 --> 01:08:52,000 dal momento che non è la regolazione del punto medio, si che fanno la differenza? 992 01:08:52,000 --> 01:08:54,000 No, perché questi casi sono tutti esclusivi. 993 01:08:54,000 --> 01:08:58,000 Ancora una volta, il mio male. 994 01:08:58,000 --> 01:09:01,000 Non, credo, bisogno di questo else if. 995 01:09:01,000 --> 01:09:05,000 Siamo in grado di fare un tentativo ed eseguirlo e vedere cosa succede. 996 01:09:05,000 --> 01:09:08,000 Building, un errore si è verificato. 997 01:09:08,000 --> 01:09:12,000 Probabilmente perché ho lasciato questi di b ed e 'qui. 998 01:09:12,000 --> 01:09:14,000 Devo più di quelli in cima? 999 01:09:14,000 --> 01:09:16,000 Non sembra simile. 1000 01:09:16,000 --> 01:09:20,000 Noi lo zoom indietro, costruire, 1001 01:09:20,000 --> 01:09:24,000 lì si va, così ora se cerchiamo per 15, 1002 01:09:24,000 --> 01:09:28,000 Sì. 1003 01:09:28,000 --> 01:09:30,000 Fammi Immagine 1004 01:09:30,000 --> 01:09:33,000 15, sì. Siamo in grado di funzionare ancora. 1005 01:09:33,000 --> 01:09:36,000 Caricamento di codice sorgente, la costruzione, l'esecuzione. 1006 01:09:36,000 --> 01:09:41,000 Siamo in grado di cercare qualcosa di simile a 13, 1007 01:09:41,000 --> 01:09:45,000 e non si ottiene nulla la stampa, quindi non secondo la quale per noi. 1008 01:09:45,000 --> 01:09:51,000 E 'fantastico, perché non è nella nostra lista. 1009 01:09:51,000 --> 01:09:53,000 >> Ora siamo fuori dal tempo. 1010 01:09:53,000 --> 01:09:55,000 Che sta per sia per questa settimana. 1011 01:09:55,000 --> 01:10:00,000 Grazie per essere stati, e ci vediamo dopo. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]