1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Walkthrough] [Problemă Set 3] 2 00:00:03,000 --> 00:00:05,000 [Zamyla Chan] [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ă, bine ai venit tuturor să Walkthrough 3. 5 00:00:10,000 --> 00:00:12,000 PSET 3 este unul foarte distractiv. 6 00:00:12,000 --> 00:00:14,000 E unul nou pentru a CS50 numit Scramble, 7 00:00:14,000 --> 00:00:18,000 așa că, dacă v-ați jucat vreodată Scramble sau similară joc Boggle de bord 8 00:00:18,000 --> 00:00:20,000 în esență, este un joc în cazul în care aveți o grilă de scrisori, 9 00:00:20,000 --> 00:00:24,000 și în timpul alocat aveți nevoie pentru a găsi cât mai multe 10 00:00:24,000 --> 00:00:28,000 2-scrisoare sau cuvinte mai lungi, care exista pe bord, 11 00:00:28,000 --> 00:00:32,000 și așa, există anumite reguli, cum ar fi puteți folosi o singură literă 12 00:00:32,000 --> 00:00:37,000 în grila, un bloc în rețea dată, și nu puteți merge înapoi la el. 13 00:00:37,000 --> 00:00:42,000 Puteți construi doar litere prin legarea împreună litere învecinate, 14 00:00:42,000 --> 00:00:50,000 astfel încât aceasta va fi o PSET foarte distractiv, așa că hai să ne uităm la caseta de instrumente. 15 00:00:50,000 --> 00:00:53,000 >> Din nou, aparatul este încă în curs de actualizare, deci asigurați-vă 16 00:00:53,000 --> 00:00:56,000 de fiecare dată când introduceți aparatul dreapta pentru a deschide fereastra terminalului 17 00:00:56,000 --> 00:01:02,000 și în terminalele face comanda sudo yum-y update. 18 00:01:02,000 --> 00:01:04,000 Acest lucru este important, de asemenea, dacă doriți să fie în măsură să 19 00:01:04,000 --> 00:01:06,000  executați soluțiile de personal, pe care le recomanda cu siguranta. 20 00:01:06,000 --> 00:01:09,000 Uneori e bine după ce ați terminat de codul 21 00:01:09,000 --> 00:01:12,000 pentru a testa împotriva soluției de personal, asigurați-vă că totul 22 00:01:12,000 --> 00:01:15,000 intri în soluția de personal, indiferent iese acolo, 23 00:01:15,000 --> 00:01:18,000 Același lucru se întâmplă cu codul tau. 24 00:01:18,000 --> 00:01:20,000 În regulă, deci asigurați-vă pentru a actualiza aparatul. 25 00:01:20,000 --> 00:01:23,000 Acum, de asemenea, din moment ce avem de-a face cu o grilă în acest caz, 26 00:01:23,000 --> 00:01:26,000 ne de fapt, o să fie cercetând 2-dimensionale matrice. 27 00:01:26,000 --> 00:01:28,000 Ne-am ocupat cu 1-dimensionale matrice, 28 00:01:28,000 --> 00:01:31,000 dar acum suntem de gând să le extindă, astfel că au 29 00:01:31,000 --> 00:01:35,000 mai multe rânduri, precum și mai multe coloane. 30 00:01:35,000 --> 00:01:38,000 Apoi, vom folosi cu siguranta funcții în acest PSET, 31 00:01:38,000 --> 00:01:43,000 apelarea practic o funcție, trimiterea unor parametri din 32 00:01:43,000 --> 00:01:46,000 și obținerea apoi o valoare de întoarcere înapoi. 33 00:01:46,000 --> 00:01:50,000 Și în Scramble noi nu te cer pentru a face de fapt, totul de la zero, 34 00:01:50,000 --> 00:01:53,000 ci, mai degrabă, suntem, de fapt, oferindu-vă ceva numit cod de distribuție, 35 00:01:53,000 --> 00:01:56,000 astfel funcțiile de cod pe care le-am scris deja acest tip de stabilește 36 00:01:56,000 --> 00:02:00,000 scheletul PSET, precum și pune în aplicare unele dintre cele mai dure lucruri 37 00:02:00,000 --> 00:02:04,000 că vei fi cu siguranta capabil să citească și să înțeleagă de peste 38 00:02:04,000 --> 00:02:10,000 dar nu trebuie să-l facă destul de încă. 39 00:02:10,000 --> 00:02:15,000 >> Pentru a rehash rapid de-a lungul tablouri 1-dimensionale. 40 00:02:15,000 --> 00:02:18,000 Matricile sunt structuri de date care dețin mai multe valori de același tip, 41 00:02:18,000 --> 00:02:21,000 și ca un memento, aceste matrice sunt zero indexate, 42 00:02:21,000 --> 00:02:26,000 astfel încât cele mai multe dintre voi sunt, probabil, familiarizat cu o matrice, cum ar fi acest lucru. 43 00:02:26,000 --> 00:02:29,000 Dacă ne-am dorit-o matrice int cu lungimea de 3, 44 00:02:29,000 --> 00:02:32,000 atunci am putea initializa prin având valori int 45 00:02:32,000 --> 00:02:35,000 și apoi parantezele pătrate indică lungimea de ea, 46 00:02:35,000 --> 00:02:39,000 și apoi ne-ar atribui valori la elementele specifice din acea matrice. 47 00:02:39,000 --> 00:02:44,000 Aici avem un tablou int cu primul indice la indice 0, 2, 48 00:02:44,000 --> 00:02:47,000 indice 1 este de 4, indicele 2 este 6. 49 00:02:47,000 --> 00:02:52,000 Spune-ne-am dorit-o gamă mai largă și să organizeze mai multe valori. 50 00:02:52,000 --> 00:02:55,000 Apoi ne-am putea avea o matrice 2D. 51 00:02:55,000 --> 00:02:58,000 Acum, acest lucru este foarte similar cu nostru 1-dimensional matrice. 52 00:02:58,000 --> 00:03:02,000 E 0 indexat, astfel încât înseamnă că prima coloană 53 00:03:02,000 --> 00:03:04,000 este indexată la 0. 54 00:03:04,000 --> 00:03:07,000 Următorul este la 1, iar apoi urmatorul este la 2, 55 00:03:07,000 --> 00:03:11,000 și apoi în mod similar avem rânduri, și astfel veți vedea că atunci când ne 56 00:03:11,000 --> 00:03:15,000 declarăm gama noastră avem, de asemenea, la fel ca înainte de a-am arătat dimensiunea matrice. 57 00:03:15,000 --> 00:03:18,000 Am, de asemenea, în mod similar indică dimensiunea în cazul în care suportul prima 58 00:03:18,000 --> 00:03:21,000 arată cât de multe rânduri aveți, iar cea de a doua indică 59 00:03:21,000 --> 00:03:25,000 cât de multe coloane. 60 00:03:25,000 --> 00:03:30,000 >> În regulă, în această PSET veți dori să fie în măsură să 61 00:03:30,000 --> 00:03:35,000 itera peste matrice 2D, putea accesa fiecărui element 62 00:03:35,000 --> 00:03:39,000 în această matrice 2D, deci, în esență doriți să ajungeți 63 00:03:39,000 --> 00:03:42,000 toate combinațiile posibile de rând și de coloană valori. 64 00:03:42,000 --> 00:03:47,000 Dorim să ajungă la rând 0 la coloana 1, 2, și 3. 65 00:03:47,000 --> 00:03:54,000 Dorim să ajungă la rândul 1 la coloana 0, 1 și 2. 66 00:03:54,000 --> 00:03:58,000 Trebuie să avem un fel de structură, care ne permite să 67 00:03:58,000 --> 00:04:02,000 itera peste toate rândurile și toate combinațiile 68 00:04:02,000 --> 00:04:08,000 de coloane în cadrul asta. 69 00:04:08,000 --> 00:04:10,000 Aici am o matrice 2D int. 70 00:04:10,000 --> 00:04:14,000 Acesta are 3 rânduri și 3 coloane, 71 00:04:14,000 --> 00:04:19,000 și astfel aceasta este modalitate rapidă de a 72 00:04:19,000 --> 00:04:22,000 găsi întreaga gamă 2D. 73 00:04:22,000 --> 00:04:25,000 Spun primul rând va avea 2, 4, și 6, 74 00:04:25,000 --> 00:04:30,000 un fel de similar cu exemplul anterior, în acest diapozitiv. 75 00:04:30,000 --> 00:04:35,000 Apoi am de gând să aibă rândul două fie de 3, 6, 9, 76 00:04:35,000 --> 00:04:39,000 și apoi 3-lea rând este de 4, 8, 12. 77 00:04:39,000 --> 00:04:43,000 Avem gama noastră 2D, 78 00:04:43,000 --> 00:04:46,000 și știm că se pare ca asta. 79 00:04:46,000 --> 00:04:52,000 Avem 2, 4, 6, 80 00:04:52,000 --> 00:04:55,000 3, 6, 9, 81 00:04:55,000 --> 00:05:02,000 4, 8, 12. 82 00:05:02,000 --> 00:05:05,000 Acum, dacă am adăuga în indicilor, 83 00:05:05,000 --> 00:05:08,000 acest lucru ar fi rând 0. 84 00:05:08,000 --> 00:05:11,000 Acest lucru ar fi rândul 1. 85 00:05:11,000 --> 00:05:13,000 Acest lucru ar fi rândul 2. 86 00:05:13,000 --> 00:05:19,000 În mod similar, avem coloana 0, 87 00:05:19,000 --> 00:05:23,000 coloana 1, și coloana 2. 88 00:05:23,000 --> 00:05:25,000 Da. 89 00:05:25,000 --> 00:05:28,000 [Barbat] care trei sunt coloana, si care unul este rândul? 90 00:05:28,000 --> 00:05:31,000 Coloanele sunt acestea, 91 00:05:31,000 --> 00:05:34,000 astfel încât coloanele sunt acestea. 92 00:05:34,000 --> 00:05:37,000 Această coloană este 0, iar acest lucru este coloana 1. 93 00:05:37,000 --> 00:05:39,000 Acest lucru este coloana 2. 94 00:05:39,000 --> 00:05:44,000 [Barbat] Cati în declarația de int cu tabelul [3] [3]? 95 00:05:44,000 --> 00:05:50,000 Când sunteți de declarare matrice 2D, apoi primul număr în paranteze pătrate 96 00:05:50,000 --> 00:05:53,000 va fi cât de multe rânduri aveți, 97 00:05:53,000 --> 00:05:57,000 și apoi cea de a doua va fi câte coloane. 98 00:05:57,000 --> 00:06:01,000 >> Mare, așa că am dori un fel de structură, 99 00:06:01,000 --> 00:06:06,000 un fel de buclă, care va să ne dea toate combinațiile posibile. 100 00:06:06,000 --> 00:06:13,000 Spune-ne încep prin a spune-bine, pentru a accesa nimic în acest rând, 101 00:06:13,000 --> 00:06:18,000 hai să uităm la acest rând pentru acum. 102 00:06:18,000 --> 00:06:20,000 Acestea sunt rânduri aici. 103 00:06:20,000 --> 00:06:23,000 Noi știm că indexul nostru rând va fi 0, 104 00:06:23,000 --> 00:06:27,000 dar pentru a accesa acest element este la rândul 0th și coloana 0th, 105 00:06:27,000 --> 00:06:34,000 astfel încât, atunci ne-ar accesa prin indicele de [0] [0]. 106 00:06:34,000 --> 00:06:38,000 Apoi, aceasta, în mod similar, este încă în primul rând, 107 00:06:38,000 --> 00:06:43,000 dar e pe coloana a doua, asa ca am acces ca, prin [0] [1]. 108 00:06:43,000 --> 00:06:48,000 Apoi, ultima ar fi [0] [2]. 109 00:06:48,000 --> 00:06:52,000 Ori de câte ori suntem la un anumit rând am de gând să doriți să 110 00:06:52,000 --> 00:07:00,000 itera peste toate valorile de coloană posibile. 111 00:07:00,000 --> 00:07:06,000 Să începem cu o buclă de 112 00:07:06,000 --> 00:07:15,000 care începe de la 0, și se duce la lungimea de cât de multe rânduri avem. 113 00:07:15,000 --> 00:07:26,000 Acest lucru este cu bicicleta prin fiecare rand. 114 00:07:26,000 --> 00:07:29,000 Atunci, ce vrem să facem este în faptul că, 115 00:07:29,000 --> 00:07:33,000 ori de câte ori suntem la un anumit rând vrem să parcurge toate coloanele disponibile, 116 00:07:33,000 --> 00:07:36,000 astfel încât, atunci vom avea o altă buclă. 117 00:07:36,000 --> 00:07:38,000 Să-i spunem j. 118 00:07:38,000 --> 00:07:42,000 I, J și K sunt foarte frecvente indexare variabile bucla de rând, 119 00:07:42,000 --> 00:07:48,000 astfel încât să puteți utiliza aceste, dacă doriți. 120 00:07:48,000 --> 00:07:52,000 De asemenea, încercați să evitați atunci în cazul în care aceste variabile sunt utilizate în mod obișnuit în bucle 121 00:07:52,000 --> 00:07:56,000 încercați să evitați folosirea ei ca ar fi nume de variabile pentru alte lucruri din codul dvs. 122 00:07:56,000 --> 00:08:04,000 doar pentru ca e convenție comună de a utiliza i, j, și k în cadrul buclei sau indici. 123 00:08:04,000 --> 00:08:11,000 Bine, atunci aici avem o buclă pentru care iterează peste toate rândurile. 124 00:08:11,000 --> 00:08:14,000 Apoi, de fiecare dată că este la un rând diferit 125 00:08:14,000 --> 00:08:17,000 vom repeta peste toate coloanele diferite. 126 00:08:17,000 --> 00:08:23,000 În acest fel putem obține de fapt, la fiecare combinație posibilă 127 00:08:23,000 --> 00:08:27,000 de la 0, 1 și 2 cu 0, 1 și 2. 128 00:08:27,000 --> 00:08:29,000 Asta face sens? 129 00:08:29,000 --> 00:08:32,000 În acest fel suntem capabili de a accesa peste fiecare valoare. 130 00:08:32,000 --> 00:08:36,000 Acum, am fi putut alege să facă coloane primul an, precum. 131 00:08:36,000 --> 00:08:39,000 Este într-adevăr nu contează, atâta timp cât vă itera prin 132 00:08:39,000 --> 00:08:41,000 toate coloanele și toate rândurile. 133 00:08:41,000 --> 00:08:44,000 >> Acum, hai sa facem ceva cu aceste valori. 134 00:08:44,000 --> 00:08:48,000 Să spunem de imprimare. 135 00:08:48,000 --> 00:08:55,000 Acum, haideți să imprimați numere întregi lor 136 00:08:55,000 --> 00:09:02,000 si apoi variabila de la acest loc este-o să fie o valoare n tabel. 137 00:09:02,000 --> 00:09:07,000 Acum, indicele anumit rând pentru că ar fi i că am folosit pentru a itera prin rândurile noastre, 138 00:09:07,000 --> 00:09:14,000 și apoi j pentru a itera prin coloanele noastre. 139 00:09:14,000 --> 00:09:24,000 Acum, hai să facem 2D. 140 00:09:24,000 --> 00:09:29,000 Acum, când vom rula 2D se imprimă toate valorile 141 00:09:29,000 --> 00:09:32,000 în ordinea în care am specificat mai sus, 142 00:09:32,000 --> 00:09:35,000 astfel încât să vezi că merge prin toate rândurile în primul rând, 143 00:09:35,000 --> 00:09:38,000 asa e la rând 0, și apoi imprimă toate valorile în acel rând 144 00:09:38,000 --> 00:09:40,000 și apoi continuă. 145 00:09:40,000 --> 00:09:43,000 Asta e un exemplu de modul în care v-ați putea repeta peste 146 00:09:43,000 --> 00:09:52,000 și să desfășoare acțiuni de valori în termen de o matrice 2D. 147 00:09:52,000 --> 00:09:59,000 Minunat, acum, ceea ce vom vedea în codul de distribuție sunt multe funcții, 148 00:09:59,000 --> 00:10:01,000 și astfel unele dintre aceste funcții vor fi funcții booleene 149 00:10:01,000 --> 00:10:03,000 în cazul în care se întorc o boolean pentru tine. 150 00:10:03,000 --> 00:10:07,000 >> Unii vor fi întregi, de exemplu, și așa în esență, să 151 00:10:07,000 --> 00:10:10,000 recenzie funcționează un pic practic funcții au 152 00:10:10,000 --> 00:10:15,000 o valoare întoarcere, un nume, cu care le utilizați pentru a apela programul, 153 00:10:15,000 --> 00:10:21,000 și atunci ei pot avea orice număr de parametri. 154 00:10:21,000 --> 00:10:25,000 În esență, atunci când apelați funcția în cadrul funcției următoare, 155 00:10:25,000 --> 00:10:27,000 practic ca și cum ai spune acum vreau să execute această funcție, 156 00:10:27,000 --> 00:10:31,000 va trebui să treci în anumite valori, astfel încât în ​​acest caz, functia foo nostru 157 00:10:31,000 --> 00:10:36,000 ar trebui să ia 2 numere întregi, și în această funcție, atunci 158 00:10:36,000 --> 00:10:40,000 ar fi în măsură să le acceseze, se referă la ele ca x si y. 159 00:10:40,000 --> 00:10:44,000 Un exemplu similar este funcții inferioare 160 00:10:44,000 --> 00:10:48,000 care este posibil să fi folosit în programul dumneavoastră cripto, 161 00:10:48,000 --> 00:10:51,000 și astfel, în esență aceste funcții au fost deja scrise pentru tine, 162 00:10:51,000 --> 00:10:57,000 dar în funcție de tipul lor de întoarcere le-ai putea folosi în cadrul funcțiilor. 163 00:10:57,000 --> 00:11:00,000 Să presupunem că aveți o funcție boolean numit foo. 164 00:11:00,000 --> 00:11:04,000 Atunci ai putea folosi asta pentru că știi că acesta va reprezenta un boolean. 165 00:11:04,000 --> 00:11:06,000 În esență, atunci când îl numesc, se va întoarce înapoi un boolean, 166 00:11:06,000 --> 00:11:11,000 astfel încât să puteți trata ca, aceasta va reprezenta un boolean. 167 00:11:11,000 --> 00:11:13,000 În termen de starea dumneavoastră vă poate spune pur și simplu 168 00:11:13,000 --> 00:11:17,000 daca foo, iar apoi treci la parametrii necesari sale, 169 00:11:17,000 --> 00:11:20,000 5 și 9, de exemplu, 2 numere întregi, 170 00:11:20,000 --> 00:11:22,000 atunci știi că se va întoarce fie adevărate sau false, 171 00:11:22,000 --> 00:11:26,000 și astfel le puteti folosi ca starea dumneavoastră în sine. 172 00:11:26,000 --> 00:11:30,000 În mod similar se poate spune, de asemenea, foo (5, 9) == true 173 00:11:30,000 --> 00:11:33,000 sau == fals sau ceva de genul asta, 174 00:11:33,000 --> 00:11:38,000 dar faptul că este ușor inutil ca funcția în sine 175 00:11:38,000 --> 00:11:41,000 deja valori fie adevărat sau fals. 176 00:11:41,000 --> 00:11:47,000 Vom păstra acest lucru în minte atunci când vom vedea câteva exemple în codul de distribuție. 177 00:11:47,000 --> 00:11:50,000 >> Ok, înapoi la Scramble după ce au matrici 2D 178 00:11:50,000 --> 00:11:53,000 și înțelegerea funcțiilor sub centurile noastre. 179 00:11:53,000 --> 00:11:59,000 În esență, Scramble ai de gând să aibă o grilă de scrisori, 180 00:11:59,000 --> 00:12:02,000 si apoi ai de gând să contribui la punerea în aplicare a unui program de 181 00:12:02,000 --> 00:12:06,000 prin care utilizatorul poate introduce litere diferite, pe care le vezi pe grila de start, 182 00:12:06,000 --> 00:12:10,000 astfel încât, de asemenea, înseamnă că sunteți de asemenea, va trebui să elaboreze tabla de joc. 183 00:12:10,000 --> 00:12:13,000 Apoi, utilizatorul va fi introducerea anumite cuvinte, 184 00:12:13,000 --> 00:12:17,000 dar va trebui să verifice, A, dacă aceste cuvinte sunt valabile în dicționar, 185 00:12:17,000 --> 00:12:23,000 sau B, dacă acestea există, de fapt, în bord, pot fi găsite în bord. 186 00:12:23,000 --> 00:12:28,000 Apoi, în codul de distribuție, vom trece peste faptul că într-o secundă. 187 00:12:28,000 --> 00:12:31,000 Veți vedea ce se deja făcut pentru tine, 188 00:12:31,000 --> 00:12:35,000 și apoi în cadrul structurii dat de Codul de distribuție a adăuga funcții. 189 00:12:35,000 --> 00:12:37,000 Există anumite funcții, care sunt lăsate goale. 190 00:12:37,000 --> 00:12:40,000 Există anumite funcții pe care tocmai l-ați trebuie să adăugați. 191 00:12:40,000 --> 00:12:43,000 O anumită funcție pe care ai de gând să fie de lucru cu este remiză, 192 00:12:43,000 --> 00:12:45,000 deci va trebui să pună în aplicare funcția remiză, 193 00:12:45,000 --> 00:12:47,000 elaborarea de fapt, toate literele de pe bord. 194 00:12:47,000 --> 00:12:51,000 Ai de gând să aibă de a pune în aplicare funcția de căutare, prin care va trebui să verificați 195 00:12:51,000 --> 00:12:55,000 dacă șirul pe care utilizatorul introduse este un cuvânt valid, 196 00:12:55,000 --> 00:12:59,000 și așa, apoi așa cum am menționat mai înainte, care include fie că e în dicționarul sau nu 197 00:12:59,000 --> 00:13:03,000 precum și dacă este o mișcare valabil de joc. 198 00:13:03,000 --> 00:13:06,000 Atunci ai de gând să pună în aplicare Scramble 199 00:13:06,000 --> 00:13:11,000 în cazul în care în joc în cazul în care utilizatorul este, de exemplu, având probleme în a găsi orice cuvânt 200 00:13:11,000 --> 00:13:16,000 apoi în cazul în care tastați în "scramble" în promptul 201 00:13:16,000 --> 00:13:19,000 apoi tabla de joc se rotește de fapt 90 °, 202 00:13:19,000 --> 00:13:24,000 păstrând aceleași litere, ci doar de rotație 90 ° sensul acelor de ceasornic. 203 00:13:24,000 --> 00:13:27,000 Și apoi în cele din urmă ne vom ocupa de cazul și sensibilitate, 204 00:13:27,000 --> 00:13:35,000 în esență, atunci când toate cuvintele din dicționarul incluse în codul de distribuție 205 00:13:35,000 --> 00:13:38,000 sunt toate stocate ca majuscule, dar vrem să permită utilizatorului, de exemplu, 206 00:13:38,000 --> 00:13:41,000 în cazul în care intră într-un amestec de litere mici și majuscule 207 00:13:41,000 --> 00:13:45,000 sau litere mici doar litere, apoi în cazul în care cuvântul este valabil 208 00:13:45,000 --> 00:13:50,000 atunci acestea ar trebui să fie în măsură pentru a obține puncte pentru asta la fel de bine. 209 00:13:50,000 --> 00:13:56,000 >> Ok, deci codul de distribuție, ar putea fi un pic greu pentru a obține prin intermediul la început. 210 00:13:56,000 --> 00:13:59,000 Tu nu ar dori să citească totul și chiar a lua direct la 211 00:13:59,000 --> 00:14:03,000 scris programul, dar vă rugăm să-l citiți o dată, 212 00:14:03,000 --> 00:14:06,000 citit-o de două ori, de trei ori citit, citit-o de peste si peste din nou 213 00:14:06,000 --> 00:14:09,000 astfel încât să aveți un bun simț și poate simti cu adevarat confortabil 214 00:14:09,000 --> 00:14:13,000 cu cod, chiar daca nu am scris aceste funcții tine, 215 00:14:13,000 --> 00:14:17,000 că tu știi fel de ceea ce fac și vă puteți aștepta 216 00:14:17,000 --> 00:14:22,000 modul în care acestea ar putea interacționa cu funcțiile pe care le vor implementa. 217 00:14:22,000 --> 00:14:25,000 Fără alte formalități, să trecem de fapt, în acest cod de distribuție, 218 00:14:25,000 --> 00:14:32,000 și eu voi ajuta voi face sens din ea. 219 00:14:32,000 --> 00:14:36,000 Am descarcat deja codul de distribuție. 220 00:14:36,000 --> 00:14:38,000 Puteți face acest lucru. 221 00:14:38,000 --> 00:14:41,000 E instrucțiunile din spec. în cazul în care aveți pentru a face directorul dvs. propria PSET 3, 222 00:14:41,000 --> 00:14:46,000 și apoi, dacă executați o comandă care a găsit în spec. 223 00:14:46,000 --> 00:14:49,000 atunci vei fi capabil de a descărca fișierul cuvinte, 224 00:14:49,000 --> 00:14:56,000 care conține practic fișierul dicționar, dacă ne uităm doar la asta repede. 225 00:14:56,000 --> 00:15:03,000 Aceasta conține în esență, o listă întreagă de cuvinte care urmează să fie dicționarul nostru. 226 00:15:03,000 --> 00:15:05,000 >> Bine, hai să încep de la partea de sus. 227 00:15:05,000 --> 00:15:11,000 De asemenea, aici veți observa că stilul bună a acestui cod de distribuție 228 00:15:11,000 --> 00:15:14,000 este în beneficiul nostru, deoarece putem vedea comentariile 229 00:15:14,000 --> 00:15:20,000 care explică modul în care codul este utilizat. 230 00:15:20,000 --> 00:15:22,000 Avem acest lucru, inclusiv bibliotecile noastre. 231 00:15:22,000 --> 00:15:25,000 Observați că aici ne-am # include , 232 00:15:25,000 --> 00:15:29,000 și astfel încât biblioteca ne permite să urmăriți de timp, deoarece 233 00:15:29,000 --> 00:15:33,000 în Scramble va trebui să introduceți în esență, în cât mai multe cuvinte posibil 234 00:15:33,000 --> 00:15:36,000 într-un interval de timp dat. 235 00:15:36,000 --> 00:15:38,000 Aici avem câteva variabile. 236 00:15:38,000 --> 00:15:42,000 Durata de joc l-am setat sa fie 30 de secunde. 237 00:15:42,000 --> 00:15:45,000 Noi spunem că dimensiunea grilei-e un patrat grilă- 238 00:15:45,000 --> 00:15:47,000 va fi 4 x 4. 239 00:15:47,000 --> 00:15:54,000 Noi spunem că există cuvinte, un număr de cuvinte în dicționar, 240 00:15:54,000 --> 00:16:01,000 că oriunde poate avea doar un maxim de 29 de litere. 241 00:16:01,000 --> 00:16:03,000 Atunci aici e un fișier numit jurnal. 242 00:16:03,000 --> 00:16:07,000 În esență, vom fi automatizarea unor rezultate din codul dvs., 243 00:16:07,000 --> 00:16:11,000 astfel încât să nu încercați să modifice nimic de a face cu jurnalul pentru că vom fi de-a face cu asta. 244 00:16:11,000 --> 00:16:14,000 Nu trebuie să înțelegem destul de faptul că încă, 245 00:16:14,000 --> 00:16:19,000 dar pur si simplu nu încercați să modifice nimic de a face cu jurnalul. 246 00:16:19,000 --> 00:16:25,000 Observați că aici, în această grilă variabilă, care este o matrice 2D de caractere, 247 00:16:25,000 --> 00:16:27,000 este declarat în afara funcției nostru principal, 248 00:16:27,000 --> 00:16:29,000 Deci, asta este ceea ce noi numim o variabila globala. 249 00:16:29,000 --> 00:16:31,000 Pentru că avem de a face cu un joc aici, 250 00:16:31,000 --> 00:16:34,000 dacă vă amintiți tot drumul înapoi la zero 251 00:16:34,000 --> 00:16:36,000 când am avut ceva de genul un scor, de exemplu, 252 00:16:36,000 --> 00:16:39,000 atunci când am fost de-a face cu un joc, care a trebuit să fie accesibile 253 00:16:39,000 --> 00:16:43,000 o mulțime de scenarii diferite, astfel în mod similar, avem această variabilă 254 00:16:43,000 --> 00:16:48,000 care trebuie să fie accesibile la o mulțime de funcții în programul nostru, 255 00:16:48,000 --> 00:16:52,000 astfel încât grila de aici este o matrice 2-dimensional, care va stoca 256 00:16:52,000 --> 00:16:55,000 literele din jocul Scramble. 257 00:16:55,000 --> 00:16:59,000 Mai târziu vom vedea utilizarea de asta mai târziu, 258 00:16:59,000 --> 00:17:03,000 dar atunci avem, de asemenea, o gamă 2D de Booleans numite mărci, 259 00:17:03,000 --> 00:17:07,000 și astfel, în esență atunci când vom merge într-un cuvânt a verifica dacă 260 00:17:07,000 --> 00:17:12,000 este valabil sau nu, avem nevoie să știm dacă am fost vizitate de un anumit bloc, 261 00:17:12,000 --> 00:17:15,000 a vizitat o anumita litera, și așa mai apoi mărcile practic este de gând să 262 00:17:15,000 --> 00:17:20,000 conțin fie adevărat sau fals la un anumit indice, 263 00:17:20,000 --> 00:17:23,000 așa că ne va lăsa să știu dacă am fost acolo înainte, 264 00:17:23,000 --> 00:17:26,000 dacă ne-am vizitat această scrisoare în timpul verificării nostru sigur, 265 00:17:26,000 --> 00:17:30,000 și așa mărci, după cum veți vedea mai târziu, 266 00:17:30,000 --> 00:17:41,000 în esență, se va reflecta exact grila. 267 00:17:41,000 --> 00:17:46,000 >> Aici am decis că vrem propriul nostru tip de date. 268 00:17:46,000 --> 00:17:48,000 Noi nu am fost fericit cu doar șir. 269 00:17:48,000 --> 00:17:51,000 Am vrut, de fapt ceva numit un cuvânt, 270 00:17:51,000 --> 00:17:55,000 deci avem această typedef struct aici, 271 00:17:55,000 --> 00:17:58,000 și apoi în cadrul acesteia are un boolean numit găsit, 272 00:17:58,000 --> 00:18:01,000 Deci, dacă acest cuvânt a fost găsit sau nu. 273 00:18:01,000 --> 00:18:04,000 Apoi, are o serie de caractere, 274 00:18:04,000 --> 00:18:10,000 în esență, cuvântul reală că este. 275 00:18:10,000 --> 00:18:14,000 Acum, cuvântul este o reală nou tip de date pe care le-am făcut, 276 00:18:14,000 --> 00:18:17,000 astfel încât să putem avea o serie de cuvinte, de exemplu, 277 00:18:17,000 --> 00:18:23,000 sau putem face un cuvânt nou și au mai multe instanțe ale acestora. 278 00:18:23,000 --> 00:18:26,000 Dar avem un singur dicționar, și deci de aceea avem doar o 279 00:18:26,000 --> 00:18:29,000 struct apela un dicționar spre deosebire de un typedef struct. 280 00:18:29,000 --> 00:18:34,000 Struct are un număr întreg, cu dimensiunea dicționarului 281 00:18:34,000 --> 00:18:37,000 precum și o serie de cuvinte, și, din nou, 282 00:18:37,000 --> 00:18:41,000 vom folosi aceste cuvinte globale variabile, care este definit mai sus, 283 00:18:41,000 --> 00:18:46,000 pentru a fi numărul de cuvinte care este, de fapt, în dicționarul nostru. 284 00:18:46,000 --> 00:18:49,000 Aici avem o listă întreagă de prototipuri, prototipuri funcționale, 285 00:18:49,000 --> 00:18:52,000 în esență, spunând, bine, acum vă puteți aștepta să aveți 286 00:18:52,000 --> 00:18:55,000 toate aceste funcții mai târziu în program. 287 00:18:55,000 --> 00:18:57,000 Am de gând să aibă o funcție de vid numit clare, 288 00:18:57,000 --> 00:19:00,000 o functie boolean numit de accesare cu crawlere, care să ia în 289 00:19:00,000 --> 00:19:05,000 un șir de numere întregi și apoi 2, et cetera, astfel încât veți vedea aceste aici. 290 00:19:05,000 --> 00:19:09,000 De asemenea, o caracteristică frumos în gedit este faptul că de-a lungul partea de aici 291 00:19:09,000 --> 00:19:14,000 dacă vă asigurați-vă că ați selectat această filă funcțiile aici, 292 00:19:14,000 --> 00:19:18,000 codul sursă fila, apoi se va arăta de fapt, vă toate funcțiile 293 00:19:18,000 --> 00:19:20,000 pe care le au în programul dumneavoastră. 294 00:19:20,000 --> 00:19:24,000 Acesta vă va arăta mai multe lucruri pe care le puteți utiliza. 295 00:19:24,000 --> 00:19:29,000 De exemplu, aici se are că ați definit un nou tip de date numit cuvânt 296 00:19:29,000 --> 00:19:33,000 și apoi anumite variabile globale pe care le au. 297 00:19:33,000 --> 00:19:37,000 Dar această filă funcții este destul de util, deoarece aveți posibilitatea să faceți clic pe înapoi și înainte 298 00:19:37,000 --> 00:19:42,000 și sari la punctele specifice din programul dumneavoastră. 299 00:19:42,000 --> 00:19:48,000 >> În regulă, suntem la funcția principală acum. 300 00:19:48,000 --> 00:19:52,000 Atunci când utilizatorul intră în comandă, 301 00:19:52,000 --> 00:19:55,000 practic ei pot spune, fie / scramble., 302 00:19:55,000 --> 00:19:59,000 sau se pot introduce, de asemenea, într-un număr de după care să indice în principal 303 00:19:59,000 --> 00:20:02,000 care consiliul doresc să se joace cu. 304 00:20:02,000 --> 00:20:05,000 De obicei, ori de câte ori introduceți numai într-un singur argument de linie de comandă 305 00:20:05,000 --> 00:20:09,000 Apoi, este doar de gând să vă dau un consiliu aleatoare, dar spun pentru scopuri de depanare 306 00:20:09,000 --> 00:20:12,000 doriți să vă asigurați că vă verificați doar placa de același de peste si peste din nou 307 00:20:12,000 --> 00:20:15,000 atunci ce poti sa faci este doar ./scramble1 spune, de exemplu, 308 00:20:15,000 --> 00:20:19,000 și va oferi întotdeauna același bord. 309 00:20:19,000 --> 00:20:21,000 Aici se asigure utilizarea corectă, 310 00:20:21,000 --> 00:20:26,000 așa că, dacă utilizatorul introduce în mai mult de 2 argumente de linie de comandă, 311 00:20:26,000 --> 00:20:29,000 apoi le va instrui cu privire la modul de a utiliza corect programul 312 00:20:29,000 --> 00:20:34,000 și apoi ieșiți. 313 00:20:34,000 --> 00:20:38,000 Aici daca argc este de 2, înseamnă că în cazul în care utilizatorul a introduse un număr de 314 00:20:38,000 --> 00:20:42,000 a cuvântului specifice pe care le doriți să o utilizați, apoi 315 00:20:42,000 --> 00:20:47,000 în esență, atunci când programul mai târziu, de la bord face o întâmplare 316 00:20:47,000 --> 00:20:51,000 atunci în esență, oferă o sămânță, un fel de fortandu-l 317 00:20:51,000 --> 00:20:57,000 de a utiliza o anumită valoare. 318 00:20:57,000 --> 00:21:02,000 Atunci aici ne încărca fișierul nostru de cuvinte. 319 00:21:02,000 --> 00:21:06,000 Practic, dacă nu se poate deschide dicționarul, în cazul în care ceva nu merge bine, 320 00:21:06,000 --> 00:21:08,000 atunci acesta va reveni 1. 321 00:21:08,000 --> 00:21:11,000 Am inițializa grila. Ne vom uita în această funcție mai târziu. 322 00:21:11,000 --> 00:21:13,000 Ne-am propus scorul la 0. 323 00:21:13,000 --> 00:21:18,000 Se calculează atunci când jocul se va termina, 324 00:21:18,000 --> 00:21:20,000 asa ca asta e 30 de secunde, așa cum am stabilit. 325 00:21:20,000 --> 00:21:27,000 Atunci aici, din nou, este fișierul jurnal, care nu trebuie să-și modifice. 326 00:21:27,000 --> 00:21:33,000 >> Iată carne de program unde avem o vreme (adevărat) buclă, 327 00:21:33,000 --> 00:21:36,000 astfel observa că, dacă aveți doar o vreme (adevărat) bucla de la sine 328 00:21:36,000 --> 00:21:39,000 atunci se va păstra doar pe de executare tot ceea ce este în corpul său, 329 00:21:39,000 --> 00:21:42,000 dar după cum veți vedea mai târziu, avem de fapt o pauză 330 00:21:42,000 --> 00:21:46,000 asa ca am de fapt, permite-avem un mod de a-l efectiv de rupere afară 331 00:21:46,000 --> 00:21:50,000 a funcției, și nu de executare pentru totdeauna. 332 00:21:50,000 --> 00:21:52,000 În primul rând ceea ce se întâmplă este ecranul va șterge 333 00:21:52,000 --> 00:21:59,000 astfel încât să puteți trage un nou consiliu, și apoi va avea funcția numită remiză. 334 00:21:59,000 --> 00:22:03,000 Din nou, aceasta va log, deci în esență, de fiecare dată că aceasta trece prin această buclă 335 00:22:03,000 --> 00:22:06,000 se va raporta la tine scorul. 336 00:22:06,000 --> 00:22:09,000 Verificați dacă jocul ar trebui să fie încheiată, 337 00:22:09,000 --> 00:22:12,000 dacă sunteți în afara timpului sau nu, iar apoi sa raporteze cat de mult timp le-ați lăsat 338 00:22:12,000 --> 00:22:15,000 în cazul în care jocul este încă în joc. 339 00:22:15,000 --> 00:22:19,000 Atunci aici avem o solicitare pentru un cuvânt, 340 00:22:19,000 --> 00:22:21,000 si apoi ne-am functia getString, 341 00:22:21,000 --> 00:22:26,000 asa ca asta e în cazul în care utilizatorul introduce de fapt un sugerate pentru tine. 342 00:22:26,000 --> 00:22:31,000 Apoi, în esență, în cazul în care am intrat de fapt un cuvânt, dacă nu e nul, 343 00:22:31,000 --> 00:22:38,000 atunci programul va logati. 344 00:22:38,000 --> 00:22:41,000 Apoi, doriți să verificați dacă aveți nevoie pentru a se lupta rețea, 345 00:22:41,000 --> 00:22:44,000 Deci, practic, dacă acestea intră în scramble comanda, scramble cuvânt, 346 00:22:44,000 --> 00:22:48,000 apoi se va roti 90 °. 347 00:22:48,000 --> 00:22:51,000 Apoi, în caz contrar, dacă nu e scramble cuvânt 348 00:22:51,000 --> 00:22:57,000 atunci ceea ce vrei sa faci este veți dori să caute cuvântul. 349 00:22:57,000 --> 00:22:59,000 (Găsiți (cuvânt) este adevărată. Vom merge în această funcție mai târziu. 350 00:22:59,000 --> 00:23:02,000 Și atunci veți dori să-l căutați, deci practic este pe grila, 351 00:23:02,000 --> 00:23:04,000 și este în dicționar? 352 00:23:04,000 --> 00:23:08,000 Și dacă acesta este cazul, atunci acesta va crește scorul dvs. de numărul de litere 353 00:23:08,000 --> 00:23:12,000 că acest cuvânt este. 354 00:23:12,000 --> 00:23:16,000 Asta e funcția nostru principal acolo. 355 00:23:16,000 --> 00:23:19,000 >> Aceasta este aici ca esență, un cod de evadare, 356 00:23:19,000 --> 00:23:21,000 astfel încât nu aveți nevoie să vă faceți griji cu privire la faptul că destul de atât de mult, 357 00:23:21,000 --> 00:23:25,000 dar, în esență ori de câte ori suna clar că va șterge terminalul 358 00:23:25,000 --> 00:23:32,000 și pentru a muta cursorul înapoi și tipul de stergere orice ar fi scris înainte. 359 00:23:32,000 --> 00:23:40,000 Să nu mergem să se târască destul de încă. 360 00:23:40,000 --> 00:23:43,000 În schimb vom defilați în jos și a vedea funcția remiză aici, 361 00:23:43,000 --> 00:23:45,000 care este TODO treaba ta. 362 00:23:45,000 --> 00:23:48,000 În esență, trebuie să imprimați rețea în starea sa actuală, 363 00:23:48,000 --> 00:23:52,000 asa ne-am ocupat deja de inițializare, de fapt grila, 364 00:23:52,000 --> 00:23:56,000 și așa nu aveți nevoie să vă faceți griji cu privire la care literele pentru a pune în grila de 365 00:23:56,000 --> 00:24:01,000 sau ceva de genul asta, dar în funcție de remiză ai de gând să doriți să 366 00:24:01,000 --> 00:24:04,000 imprima tot ce este în grila. 367 00:24:04,000 --> 00:24:07,000 Atunci aici avem o functie boolean numit găsi, 368 00:24:07,000 --> 00:24:10,000 pe care am văzut mai sus, în funcția de principal. 369 00:24:10,000 --> 00:24:17,000 Dacă cuvântul a fost găsit și, de asemenea, a fost căutat în dicționar, 370 00:24:17,000 --> 00:24:21,000 în cazul în care atât a celor returnate adevărat, atunci ar crește scorul. 371 00:24:21,000 --> 00:24:26,000 Aici este funcția găsi în cazul în care este nevoie de în cuvântul ca un șir de caractere, 372 00:24:26,000 --> 00:24:32,000 și trebuie să fie de 2 sau mai multe caractere, 373 00:24:32,000 --> 00:24:36,000 și apoi ce face asta este caută grila pentru acel cuvânt. 374 00:24:36,000 --> 00:24:41,000 Aici vom vedea un exemplu de iterarea peste fiecare element din grila 375 00:24:41,000 --> 00:24:47,000 în cazul în care acestea itera peste rânduri și apoi, în cadrul că itera peste coloanele. 376 00:24:47,000 --> 00:24:50,000 Amintim aici matrice 2D mărcile care practic stochează fie adevărat sau fals 377 00:24:50,000 --> 00:24:52,000 dacă am fost la această scrisoare deja. 378 00:24:52,000 --> 00:24:58,000 În esență, această resetează toate mărcile, deoarece avem de-a face numai cu mărcile 379 00:24:58,000 --> 00:25:01,000 de fiecare dată că suntem verificarea unui anumit cuvânt. 380 00:25:01,000 --> 00:25:04,000 Atunci aici după ce vom reseta toate mărcile 381 00:25:04,000 --> 00:25:08,000 de fapt caută cuvântul, și astfel pentru a căuta cuvântul 382 00:25:08,000 --> 00:25:13,000 asta e în cazul în care vom folosi funcția de crawl, așa că hai să mergem înapoi să se târască 383 00:25:13,000 --> 00:25:16,000 și să ia o privire la ea. 384 00:25:16,000 --> 00:25:20,000 Ce face crawl este nevoie într-un șir numit scrisori 385 00:25:20,000 --> 00:25:27,000 precum și practic x și y, care este indicele de pornire 386 00:25:27,000 --> 00:25:33,000 de unde utilizatorul a spus cuvântul este. 387 00:25:33,000 --> 00:25:38,000 În esență, aceasta verifică dacă x este <0 sau> dimensiune 388 00:25:38,000 --> 00:25:41,000 în esență ceea ce înseamnă că indicele de fapt, nu există în jocul nostru, 389 00:25:41,000 --> 00:25:43,000 astfel încât atunci returneaza false. 390 00:25:43,000 --> 00:25:47,000 Dacă ați vizitat deja anumită literă 391 00:25:47,000 --> 00:26:02,000 apoi că o să se întoarcă fals, precum și pentru că de regulă în Scramble 392 00:26:02,000 --> 00:26:11,000 este că, atunci când aveți 393 00:26:11,000 --> 00:26:14,000 o scrisoare de aici, de exemplu, 394 00:26:14,000 --> 00:26:20,000 vă puteți alătura o scrisoare de a merge în sus sau în diagonală în acest fel, 395 00:26:20,000 --> 00:26:24,000 Deci, practic scrisoarea dumneavoastră următoarea poate fi la oricare din aceste blocuri adiacente, 396 00:26:24,000 --> 00:26:31,000 dar ceea ce nu se poate face, de exemplu, se merge la prezenta scrisoare 397 00:26:31,000 --> 00:26:37,000 și du-te înapoi la A, astfel încât să puteți utiliza numai fiecare literă o dată. 398 00:26:37,000 --> 00:26:42,000 Apoi, faptul că are sens faptul că aici sunt mărci că, dacă am fost acolo înainte, 399 00:26:42,000 --> 00:26:47,000 dacă marcajele este setat la true, atunci nu e un cuvânt valabil. 400 00:26:47,000 --> 00:26:49,000 >> Atunci ceea ce face este verifică. 401 00:26:49,000 --> 00:26:53,000 Se spune că de gând să verifice dacă, la această locație specifică 402 00:26:53,000 --> 00:26:55,000 scrisoarea pe care ne-o dorim este acolo. 403 00:26:55,000 --> 00:26:57,000 Dacă nu e, returnează false. 404 00:26:57,000 --> 00:27:02,000 Din moment ce este verificat deja acel bloc, atunci o să setați marca 405 00:27:02,000 --> 00:27:06,000 în acel moment specific adevărat. 406 00:27:06,000 --> 00:27:09,000 Acum, verifică dacă aceasta practic, dacă suntem în continuare 407 00:27:09,000 --> 00:27:13,000 ceea ce înseamnă că vom căuta următoarea literă 408 00:27:13,000 --> 00:27:18,000 în cuvântul pe care utilizatorul încearcă să-și prezinte. 409 00:27:18,000 --> 00:27:20,000 Aici amintesc înapoi la regulile. 410 00:27:20,000 --> 00:27:24,000 Tu încerci să verifice toate valorile adiacente, 411 00:27:24,000 --> 00:27:28,000 cele de mai sus, mai jos, la stânga și la dreapta, precum și diagonale, 412 00:27:28,000 --> 00:27:32,000 și astfel în mod similar atunci când ne-am gândit iterarea peste matrice 2D 413 00:27:32,000 --> 00:27:35,000 în cazul în care am vrut să itera peste fiecare posibil și să verificați 414 00:27:35,000 --> 00:27:41,000 fiecare permutare posibil între indicii de rând și indicii coloană 415 00:27:41,000 --> 00:27:43,000 aici vrem să verifice fiecare combinație posibilă, 416 00:27:43,000 --> 00:27:49,000 dacă e în partea stângă a scrisorii, în mod direct de mai sus, sau la dreapta. 417 00:27:49,000 --> 00:27:56,000 Aici vom vedea că această buclă verifică la stânga 418 00:27:56,000 --> 00:27:58,000 atunci când i este -1. 419 00:27:58,000 --> 00:28:04,000 Cand e la 0 verifică în aceeași coloană ca scrisoarea este de la, 420 00:28:04,000 --> 00:28:08,000 și apoi, dacă i este 1, care este valoarea sa finală, apoi se verifică la dreapta, 421 00:28:08,000 --> 00:28:10,000 si apoi asta nu e suficient, nu? 422 00:28:10,000 --> 00:28:13,000 Avem nevoie pentru a verifica toate valorile verticale, 423 00:28:13,000 --> 00:28:19,000 astfel încât atunci aici avem o buclă care se verifică dacă este vorba de mai jos 424 00:28:19,000 --> 00:28:22,000 la același nivel sau mai sus, astfel încât atunci combinația de care 425 00:28:22,000 --> 00:28:28,000 va accesa fiecare singur bloc adiacent A. 426 00:28:28,000 --> 00:28:38,000 Cu toate acestea, verifică, de asemenea, aici, la blocul A, 427 00:28:38,000 --> 00:28:44,000 da, atunci vrem să ne asigurăm că nu vom verifica asta. 428 00:28:44,000 --> 00:28:51,000 Acum, pentru a verifica dacă, de fapt, cuvintele precedente sunt valabile sau nu 429 00:28:51,000 --> 00:28:56,000 Apoi vrem să facem același proces pentru restul cuvântului 430 00:28:56,000 --> 00:29:00,000 restricționare una pe care am făcut deja, deci atunci aici este o funcție precursor. 431 00:29:00,000 --> 00:29:03,000 Se cheamă, și vom intra în faptul că un pic mai târziu, 432 00:29:03,000 --> 00:29:13,000 dar acesta le exercită același proces pentru toate siruri de caractere ulterioare. 433 00:29:13,000 --> 00:29:16,000 Am vorbit despre funcția find. 434 00:29:16,000 --> 00:29:18,000 Noi înțelegem ce face. 435 00:29:18,000 --> 00:29:23,000 Este practic verificarea dacă acest cuvânt pe care utilizatorul a dat 436 00:29:23,000 --> 00:29:27,000 de fapt, există pe bord și, dacă este o mișcare de prim rang. 437 00:29:27,000 --> 00:29:29,000 Aici avem o funcție de initializare. 438 00:29:29,000 --> 00:29:33,000 Observați că vidul e, așa că nu o să fie returnarea noi nimic, 439 00:29:33,000 --> 00:29:36,000 dar este doar de gând să faci ceva pentru noi. 440 00:29:36,000 --> 00:29:39,000 >> Aici off de pe Wikipedia există o frecvență 441 00:29:39,000 --> 00:29:42,000 pentru fiecare literă a alfabetului pe baza de cât de des 442 00:29:42,000 --> 00:29:45,000 este utilizat în limba engleză. 443 00:29:45,000 --> 00:29:50,000 Veți vedea că e este, de exemplu, una dintre cele mai populare folosite litere. 444 00:29:50,000 --> 00:29:52,000 Dorim să populeze grila. 445 00:29:52,000 --> 00:29:55,000 Ce face această funcție este popula grila cu litere 446 00:29:55,000 --> 00:30:06,000 un fel de raport cu frecvența lor în această matrice. 447 00:30:06,000 --> 00:30:11,000 Acum, acest lucru este folosind acest limbaj aici 448 00:30:11,000 --> 00:30:14,000 Dimensiunea spunând de frecvențe, 449 00:30:14,000 --> 00:30:16,000 E un fel de numai caz specific. 450 00:30:16,000 --> 00:30:21,000 Putem folosi, de fapt dimensiunea a frecvențelor, așa că atunci când tu de fapt vrei să 451 00:30:21,000 --> 00:30:26,000 găsi lungimea unei matrice probabil că nu se vor folosi mărimea 452 00:30:26,000 --> 00:30:29,000 ci, mai degrabă folosind doar lungimea matrice. 453 00:30:29,000 --> 00:30:33,000 Puteți cere TFS dvs. să vorbesc cu tine un pic mai mult despre asta, 454 00:30:33,000 --> 00:30:40,000 dar știu doar că această sintaxă aici este mai mult de un caz special. 455 00:30:40,000 --> 00:30:49,000 Acum, pentru fiecare element în grila de 456 00:30:49,000 --> 00:30:53,000 vrem să facem o scrisoare, iar acest lucru va fi pseudoaleatoare, 457 00:30:53,000 --> 00:30:55,000 astfel aleatoare, dar nu destul. 458 00:30:55,000 --> 00:30:58,000 În esență, ceea ce face aceasta este am stabilit o nouă dublă 459 00:30:58,000 --> 00:31:01,000 cu o valoare aleatoare între 0 și 1. 460 00:31:01,000 --> 00:31:03,000 Bazat pe faptul că vom harta faptul că, 461 00:31:03,000 --> 00:31:08,000 astfel spune că d este setat la 0,6, de exemplu. 462 00:31:08,000 --> 00:31:13,000 Apoi, în cazul în care d este de 60% în 463 00:31:13,000 --> 00:31:16,000 apoi ne vom uita la toate literele și de a găsi 464 00:31:16,000 --> 00:31:19,000 relativ la cât de des acestea sunt utilizate 465 00:31:19,000 --> 00:31:21,000 ceea ce este de 60% inch 466 00:31:21,000 --> 00:31:24,000 Aceasta nu este doar de 60% din alfabet, ci mai degrabă 467 00:31:24,000 --> 00:31:28,000 o ocupă acest spațiu mult, și apoi b ocupă atât de mult, 468 00:31:28,000 --> 00:31:31,000 si apoi e, de exemplu, va prelua atât de mult. 469 00:31:31,000 --> 00:31:35,000 Bazat pe lungimi relative sau frecvențele 470 00:31:35,000 --> 00:31:39,000 dintre aceste scrisori vom harta această valoare aleatoare 471 00:31:39,000 --> 00:31:43,000 între 0 și 1 într-o anumită literă. 472 00:31:43,000 --> 00:31:45,000 Asta e ceea ce acest cod face aici, 473 00:31:45,000 --> 00:31:52,000 si apoi aici k este ca trecerea de unde de-a lungul 474 00:31:52,000 --> 00:31:59,000 în scrisoarea vrem să fim, și astfel ne-am stabilit caracterul în grila de 475 00:31:59,000 --> 00:32:04,000 Pentru a fi un K +. 476 00:32:04,000 --> 00:32:07,000 >> Observați că înapoi la gândire lacomi 477 00:32:07,000 --> 00:32:11,000 am avut de a utiliza funcția de runda a face cu virgulă mobilă imprecizie aici, 478 00:32:11,000 --> 00:32:14,000 deci în mod similar a trebuit să luăm în considerare faptul că, uneori, 479 00:32:14,000 --> 00:32:18,000 flotoare nu sunt exact ceea ce ne propunem ca acestea să fie, 480 00:32:18,000 --> 00:32:27,000 așa că am dori să fac o captură pentru asta. 481 00:32:27,000 --> 00:32:32,000 Atunci aici vom merge într-un fișier I / O, practic citirea și scrierea în fișiere, 482 00:32:32,000 --> 00:32:34,000 care va intra în mai tarziu, dar nu destul de încă, 483 00:32:34,000 --> 00:32:39,000 deci în esență, acest deschide un fișier dicționar, citește ceea ce e în ea, 484 00:32:39,000 --> 00:32:42,000 și apoi stabilește într-o matrice. 485 00:32:42,000 --> 00:32:46,000 Observați că l-am pus în struct pe care le-am declarat, struct dicționarul, 486 00:32:46,000 --> 00:32:53,000 și așa dicționarul are o matrice numita cuvinte asociate cu aceasta, 487 00:32:53,000 --> 00:33:00,000 deci ceea ce face se spune dicționarul, cuvintele de la acest indice special, 488 00:33:00,000 --> 00:33:04,000 sunt de așa natură și valoare, cum ar. 489 00:33:04,000 --> 00:33:10,000 Apoi, aproape am terminat cu codul de distribuție. 490 00:33:10,000 --> 00:33:13,000 Avem în sfârșit funcția de căutare în cazul în care aveți comentarii 491 00:33:13,000 --> 00:33:18,000 instrucțiuni privind ce ar trebui să facă cod. 492 00:33:18,000 --> 00:33:21,000 Căutare va căuta un cuvânt în dicționar 493 00:33:21,000 --> 00:33:24,000 și atâta timp cât acel cuvânt nu a fost gasit deja 494 00:33:24,000 --> 00:33:29,000 apoi steaguri ca găsite în astfel utilizatorul poate folosi din nou 495 00:33:29,000 --> 00:33:33,000 dar, de asemenea, gândirea se întoarce înapoi la adevărata funcția principală din nou, 496 00:33:33,000 --> 00:33:37,000 returnează true, așa spune că acest cuvânt poate fi înscrise. 497 00:33:37,000 --> 00:33:39,000 >> Și apoi în cele din urmă aveți funcția scramble, 498 00:33:39,000 --> 00:33:42,000 care este o altă funcție nule, pentru că face ceva 499 00:33:42,000 --> 00:33:45,000 dar nu se întoarce nimic, deci ce funcția scramble va face 500 00:33:45,000 --> 00:33:51,000 este rotiți grila de 90 ° sensul acelor de ceasornic. 501 00:33:51,000 --> 00:33:55,000 Știu că ar fi putut fi un pic cam dur, dar e important să faci. 502 00:33:55,000 --> 00:33:57,000 Uita-te la mine trece prin codul de distribuție, 503 00:33:57,000 --> 00:33:59,000 dar la fel de bine, încercați să mergeți prin ea singur. 504 00:33:59,000 --> 00:34:04,000 Ceea ce îmi place să fac este hartă pentru a înțelege 505 00:34:04,000 --> 00:34:15,000 Ce înseamnă acest program cu toate aceste funcții de fapt, nu? 506 00:34:15,000 --> 00:34:18,000 Dacă ar fi să trec prin codul de distribuție din nou, 507 00:34:18,000 --> 00:34:21,000 acum că am un fel de au un sentiment de ceea ce se întâmplă atunci aș spune 508 00:34:21,000 --> 00:34:28,000 vom începe cu funcție nostru principal, 509 00:34:28,000 --> 00:34:36,000 și atunci cred că primul lucru pe care îl face este o numește sarcină, 510 00:34:36,000 --> 00:34:40,000 astfel principal solicită sarcină, dar sarcina este o funcție nulă, 511 00:34:40,000 --> 00:34:45,000 deci atunci ce să fac pentru a indica faptul că este de a pune doar o singură săgeată 512 00:34:45,000 --> 00:34:48,000 arătând că pentru a încărca principal se solicită. 513 00:34:48,000 --> 00:34:56,000 Următorul lucru este inițializat. 514 00:34:56,000 --> 00:34:59,000 Solicită Principalele inițializa, 515 00:34:59,000 --> 00:35:02,000 și apoi, dacă ne uităm înapoi în funcție de principalul nostru 516 00:35:02,000 --> 00:35:06,000 Cred că acest lucru următoare, care o face, 517 00:35:06,000 --> 00:35:09,000 aici sunt de tone de lucruri diferite, care este principala de asteptare, 518 00:35:09,000 --> 00:35:13,000 dar acum eu sunt doar concentrându-se pe cele mai importante 519 00:35:13,000 --> 00:35:18,000 relevante pentru cod, asa ca nu am inclusiv un. la I sau chestii de genul asta 520 00:35:18,000 --> 00:35:25,000 Apoi, următorul lucru pe care îl face este îl curăță, 521 00:35:25,000 --> 00:35:29,000 și apoi le-a trage, 522 00:35:29,000 --> 00:35:36,000 și așa știu că remiza este ceva ce vom face. 523 00:35:36,000 --> 00:35:38,000 Asta e funcția remiză. 524 00:35:38,000 --> 00:35:44,000 Mai târziu vom vedea că următoarea este un pic- 525 00:35:44,000 --> 00:35:57,000 astfel încât, atunci avem scramble. 526 00:35:57,000 --> 00:36:02,000 Și atunci ne-am găsi, așa că este o altă funcție. 527 00:36:02,000 --> 00:36:07,000 Vedem că găsim este-dacă vă amintiți înapoi este o funcție booleană, 528 00:36:07,000 --> 00:36:09,000 Deci, asta e de fapt de gând să se întoarcă înapoi la noi ceva. 529 00:36:09,000 --> 00:36:18,000 Atunci aici am indică faptul că avem de găsit, 530 00:36:18,000 --> 00:36:29,000 și apoi ne-am, de asemenea, de căutare. 531 00:36:29,000 --> 00:36:32,000 Dar amintiți-vă apoi că există, de asemenea, această funcție de accesare cu crawlere 532 00:36:32,000 --> 00:36:35,030 care nu pare să fi fost chemat în principal, 533 00:36:35,030 --> 00:36:39,000 Asta înseamnă că o alta functie este de asteptare de accesare cu crawlere, 534 00:36:39,000 --> 00:36:41,000 și dacă veți căuta înapoi prin codul de distribuție 535 00:36:41,000 --> 00:36:46,000 vedeți că găsiți aici este una care utilizează crawl, 536 00:36:46,000 --> 00:36:52,000 așa că, apoi, de asemenea, link-uri sa se tarasca, 537 00:36:52,000 --> 00:36:55,090 care este o valoare boolean, care returnează ceva, 538 00:36:55,090 --> 00:36:58,000 așa că eu sunt adăugarea de un alt lucru, și apoi deoarece crawl este recursiv 539 00:36:58,000 --> 00:37:03,000 este, de asemenea, bucle înapoi pe ea însăși. 540 00:37:03,000 --> 00:37:07,000 >> Apoi, dacă te văd aici, am desenat o imagine a ceea ce programul nostru arata ca, 541 00:37:07,000 --> 00:37:10,000 astfel înțelegerea relațiilor dintre anumite funcții, 542 00:37:10,000 --> 00:37:14,000 și merge înapoi la voi vedea, de asemenea, ordinea de joc 543 00:37:14,000 --> 00:37:24,000 și a modului în logica programului jocul se va continua. 544 00:37:24,000 --> 00:37:27,000 Am citit codul de distribuție. 545 00:37:27,000 --> 00:37:29,000 Prima funcție pe care ai de gând să doriți să pună în aplicare, 546 00:37:29,000 --> 00:37:32,000 sau una dintre funcțiile pe care doriți să le pună în aplicare este egal, 547 00:37:32,000 --> 00:37:37,000 și așa mai departe aici, aveți de fapt, un pic de libertate cu asta. 548 00:37:37,000 --> 00:37:43,000 Dacă ne uităm la personalul soluția- 549 00:37:43,000 --> 00:37:54,000 Mă duc pentru a deschide fereastra de terminal, de fapt, 550 00:37:54,000 --> 00:38:05,000 pset3/scramble. 551 00:38:05,000 --> 00:38:09,000 Scratch asta. Cred că am nevoie pentru a actualiza aparatul meu. 552 00:38:09,000 --> 00:38:12,000 Dacă te joci cu soluție de personalul de scramble- 553 00:38:12,000 --> 00:38:14,000 Instrucțiunile sunt în spec. pentru că- 554 00:38:14,000 --> 00:38:20,000 le puteti vedea cum le-am imprimat tabla de joc, 555 00:38:20,000 --> 00:38:23,000 dar, în esență ceea ce fac ei este că ei pun spații între fiecare caracter, 556 00:38:23,000 --> 00:38:27,000 dar ai un pic de libertate cu acest lucru, așa că dacă doriți să imprimați linii, de exemplu, 557 00:38:27,000 --> 00:38:31,000 între ele, atunci poti sa faci asta. 558 00:38:31,000 --> 00:38:38,000 Vrei să gândesc la modul în care ne itera peste toate elementele unei matrice 2D, 559 00:38:38,000 --> 00:38:41,000 și veți dori să imprimați pe cei, asigurați-vă că aveți bucla dvs. 560 00:38:41,000 --> 00:38:49,000 și au funcții de imprimare astfel încât sunteți de imprimare în ordinea corectă. 561 00:38:49,000 --> 00:38:54,000 Dacă doriți ca bucla ta repetare a-atunci când itera peste el 562 00:38:54,000 --> 00:39:03,000 și să utilizați indicii asigurați-vă că sunteți de imprimare în ordinea corectă. 563 00:39:03,000 --> 00:39:06,000 >> Confruntarea cu matrice 2D la început poate fi un pic confuz, 564 00:39:06,000 --> 00:39:12,000 Deci, aici pe acest diapozitiv am făcut un tabel care vă arată 565 00:39:12,000 --> 00:39:16,000 pentru fiecare loc dat în matrice 2D care indicii sunt, 566 00:39:16,000 --> 00:39:19,000 așa că, dacă doriți să se refere la aceasta pentru o verificare rapidă 567 00:39:19,000 --> 00:39:22,000 sau pentru o referință sau ceva de genul asta, atunci puteți folosi acest. 568 00:39:22,000 --> 00:39:30,000 Coloanele sunt în albastru, iar rândurile sunt în roșu. 569 00:39:30,000 --> 00:39:34,000 Funcția de căutare este dublu. 570 00:39:34,000 --> 00:39:37,000 Căutare și este un boolean funcție-ne va spune 571 00:39:37,000 --> 00:39:43,000 adevărat sau fals dacă cuvântul de utilizator-a prezentat 572 00:39:43,000 --> 00:39:46,000 poate fi acceptată ca o valoare validă, 573 00:39:46,000 --> 00:39:51,000 și astfel un cuvânt în goana este valabilă numai 574 00:39:51,000 --> 00:39:56,000 în cazul în care este găsit în dicționar și, dacă este de fapt găsit în bord, 575 00:39:56,000 --> 00:40:02,000 și amintiți-vă astfel încât de căutare va trebui să pună în aplicare acest lucru prin tine, 576 00:40:02,000 --> 00:40:10,000 așa că vă doriți să verificați ambele lucruri, 577 00:40:10,000 --> 00:40:16,000 dacă cuvântul este, de fapt, în dicționarul și dacă aceasta a fost deja găsit. 578 00:40:16,000 --> 00:40:18,940 Amintiți-înapoi la dicționarul variabila globala, 579 00:40:18,940 --> 00:40:24,160 care este un struct care le-am făcut, care are practic o dimensiune int numit 580 00:40:24,160 --> 00:40:27,290 asociate cu acesta, precum și o serie de cuvinte, 581 00:40:27,290 --> 00:40:32,030 în cazul în care cuvântul este un nou tip de date. 582 00:40:32,030 --> 00:40:36,910 Deci, pentru a accesa, de exemplu, dimensiunea de dicționar sau matrice cuvinte, 583 00:40:36,910 --> 00:40:39,840 atunci ce poti sa faci este doar scrie "dictionary.size," 584 00:40:39,840 --> 00:40:42,580 similar cu modul în care ar trebui să utilizați orice fel de alte variabile. 585 00:40:42,580 --> 00:40:48,550 Deci, dacă dictionary.size reprezintă dimensiunea dicționarului, 586 00:40:48,550 --> 00:40:51,450 În mod similar, dictionary.words reprezinta matrice. 587 00:40:51,450 --> 00:40:54,690 Deci, dacă ai vrut să accesați un anumit cuvânt în cadrul dicționarul, 588 00:40:54,690 --> 00:40:59,020 atunci va trebui să adăugați un index 589 00:40:59,020 --> 00:41:03,130 pentru că ar trebui să spun "dictionary.words la indicele i" 590 00:41:03,130 --> 00:41:06,050 și de a face apoi ceva bazat pe asta. 591 00:41:06,050 --> 00:41:09,950 Deci, știind că dicționarul are o anumită dimensiune asociate cu aceasta, 592 00:41:09,950 --> 00:41:13,720 precum și o serie de cuvinte, pentru a verifica dacă ceva e în dicționar, 593 00:41:13,720 --> 00:41:16,870 atunci ar trebui să interate peste dicționarul 594 00:41:16,870 --> 00:41:20,610 pentru a verifica dacă acest cuvânt se găsește. 595 00:41:20,610 --> 00:41:25,720 >> Acum, dacă credeți înapoi la prelegere, atunci când am vorbit despre moduri diferite de a căuta lucruri, 596 00:41:25,720 --> 00:41:30,690 apoi amintiți-vă că, probabil, căutarea liniară nu este întotdeauna cel mai bun mod de a merge. 597 00:41:30,690 --> 00:41:36,600 Dar cu siguranta este o modalitate de a căuta ceva. 598 00:41:36,600 --> 00:41:39,540 Uneori s-ar putea găsi pe care le pune în aplicare funcția găsi cu 599 00:41:39,540 --> 00:41:42,650 căutarea liniară la început și apoi ajunge restul de programul tău merge. 600 00:41:42,650 --> 00:41:47,480 Și apoi mai târziu puteți să mergeți înapoi și să modifice modul în care să căutați prin intermediul pentru un cuvânt. 601 00:41:47,480 --> 00:41:52,010 Așa că abordează - practic știind că - a ști cum să acceseze 602 00:41:52,010 --> 00:41:55,650 matrice cuvinte de dictionar, care abordează în căutarea pentru a vedea 603 00:41:55,650 --> 00:41:58,190 dacă acest cuvânt este, de fapt, în dicționarul sau nu. 604 00:41:58,190 --> 00:42:06,540 Dar apoi am nevoie pentru a aborda, de asemenea, dacă acest cuvânt este pe bord. 605 00:42:06,540 --> 00:42:08,540 Și dacă această a fost găsit deja. 606 00:42:08,540 --> 00:42:12,670 Deci, avem deja la funcția de găsire, amintiți-vă. 607 00:42:12,670 --> 00:42:18,310 Acesta prezinta su, dar ceea ce este un cuvânt? 608 00:42:18,310 --> 00:42:22,330 Aceasta nu este o întrebare filozofică, ci, mai degrabă, uita-te la definițiile de tip. 609 00:42:22,330 --> 00:42:27,250 Avem un boolean numit "găsit", precum și matrice de caractere 610 00:42:27,250 --> 00:42:29,570 care reprezintă acel cuvânt. 611 00:42:29,570 --> 00:42:35,940 Deci, atunci când vă întoarceți de căutare, veți dori să verificați dacă acest cuvânt a fost găsit sau nu. 612 00:42:35,940 --> 00:42:43,040 Acum, știind că boolean găsit - găsit este numele boolean 613 00:42:43,040 --> 00:42:49,660 care este asociat cu fiecare cuvânt - atunci cum ar putea să vă accesați că variabila, 614 00:42:49,660 --> 00:43:01,590 gândire înapoi la modul în care am accesat variabile în cadrul dicționar? 615 00:43:01,590 --> 00:43:05,120 Deci, aici am avut dicționarul, iar apoi am spus dimensiune de punct, nu? 616 00:43:05,120 --> 00:43:08,170 În mod similar, atunci când avem un cuvânt și, în acest caz, să fie atenți, pentru că 617 00:43:08,170 --> 00:43:13,340 Cuvântul este orice fel de tip de date altul, la fel ca un int sau un șir de caractere. 618 00:43:13,340 --> 00:43:19,640 Deci, nu se poate spune doar "cuvânt", cu excepția cazului în care este numele de ea. 619 00:43:19,640 --> 00:43:24,540 Ai de gând să trebuie să aibă o variabilă cu un nume, și apoi o dată ce ați că, 620 00:43:24,540 --> 00:43:29,980 spun că se numește foo, de exemplu, atunci vă pot spune "foo.found," 621 00:43:29,980 --> 00:43:39,560 și că va veți reveni valoarea Boolean dacă acest cuvânt a fost găsit sau nu. 622 00:43:39,560 --> 00:43:46,960 >> Deci, atunci următoarea parte a PSET este de a pune în aplicare scramble, 623 00:43:46,960 --> 00:43:51,630 prin care ori de câte ori utilizatorul introduce încăierare - și care a fost deja tratate cu 624 00:43:51,630 --> 00:43:54,280 aici, în codul de distribuție - trebuie doar să pună în aplicare 625 00:43:54,280 --> 00:44:03,170 scramble funcția pe care a fost deja instruit să vă rotiți bord 90 ° sensul acelor de ceasornic. 626 00:44:03,170 --> 00:44:07,380 Ca pe spec., instrucțiunile spun că placa se rotește la 90 ° sensul acelor de ceasornic 627 00:44:07,380 --> 00:44:16,180 astfel încât valoarea la grila [0] [0], apoi se mută la rețea [0] [dimensiune -1.] 628 00:44:16,180 --> 00:44:38,240 În acest caz, pentru goana, dimensiunea noastră este de 4, deci ar mapa 0-0, apoi la 0-3. 629 00:44:38,240 --> 00:44:41,210 Să trage asta pentru a vedea ce s-ar putea arata. 630 00:44:41,210 --> 00:44:49,620 Eu nu am de gând să fac un 4 x 4 grilă, ci mai degrabă o x 3 3 una. 631 00:44:49,620 --> 00:44:52,470 Să spunem acest lucru este o matrice 2D inch. 632 00:44:52,470 --> 00:45:02,040 Sunt doar de gând să aibă doar - în regulă. 633 00:45:02,040 --> 00:45:12,110 Deci, spune că vrem să coate în acest sens; vrem să-l rotiți 90 ° sensul acelor de ceasornic. 634 00:45:12,110 --> 00:45:22,320 Știm că, ca punct de plecare, valoarea la 0-0, care în acest caz este de 0 număr, 635 00:45:22,320 --> 00:45:28,950 este de gând să se mapeze la rând 0, apoi dimensiune coloana -1. 636 00:45:28,950 --> 00:45:31,570 Și așa că, în acest caz, dimensiunea este de 3. 637 00:45:31,570 --> 00:45:37,400 Deci, apoi 0 s-ar muta la rând 0, coloana 2. 638 00:45:37,400 --> 00:45:41,910 Deci, avem 0 Numărul acolo. 639 00:45:41,910 --> 00:45:45,970 În esență, ceea ce facem este că luăm acest lucru, 640 00:45:45,970 --> 00:45:52,840 fizic o mișcare de rotație, astfel, atunci 2 va merge la acest colț, 641 00:45:52,840 --> 00:45:57,620 8 ar merge apoi la acest colț, 6 la aceasta. 642 00:45:57,620 --> 00:46:07,840 Și apoi restul va arăta - 643 00:46:07,840 --> 00:46:15,180 Deci, asta e ceea ce pare a fi o grilă de când v-ați-l amestecate. 644 00:46:15,180 --> 00:46:17,410 Când sunteți de punere în aplicare funcția scramble, ceea ce veți dori să facă 645 00:46:17,410 --> 00:46:22,520 este a se vedea, de asemenea, cum pot înlocui aceste valori? 646 00:46:22,520 --> 00:46:26,090 Există un fel de tipar sau un fel de formulă pentru a determina 647 00:46:26,090 --> 00:46:29,900 în cazul în care un anumit indice merge? 648 00:46:29,900 --> 00:46:42,470 De exemplu, s-ar putea să vedem că aici este 3-4-5 un rând. 649 00:46:42,470 --> 00:46:44,650 Unde altundeva văd 3-4-5? 650 00:46:44,650 --> 00:46:49,410 Ei bine, eu o văd aici. 651 00:46:49,410 --> 00:47:02,360 În mod similar, văd ca un rând 6-7-8, dar apoi este de fapt o coloană aici. 652 00:47:02,360 --> 00:47:07,830 Asta e modelul pe care văd chiar acum, dar există, probabil, cele cateva altele. 653 00:47:07,830 --> 00:47:11,980 Bazat pe faptul că, cred că de un fel de model, un fel de drum. 654 00:47:11,980 --> 00:47:20,290 Odată ce ați identificat pe unul, atunci ai de gând să doriți să resetați valorile din grila. 655 00:47:20,290 --> 00:47:25,480 Deci, grila va deveni 0-0 6, 0-1 grila va deveni 3. 656 00:47:25,480 --> 00:47:32,990 Dar amintiți-vă că veți avea - de exemplu, dacă vă resetați imediat, 657 00:47:32,990 --> 00:47:49,170 spun că grila 0-2 devine 0 acum, atunci vei pierde ceea ce 2 a fost acolo. 658 00:47:49,170 --> 00:47:52,380 Deci gândire înapoi, nu e suficient să realocați doar imediat. 659 00:47:52,380 --> 00:47:56,420 Veți dori probabil să faceți o copie temporară a ceva 660 00:47:56,420 --> 00:48:08,380 înainte de a vă pune de fapt l la locul potrivit. 661 00:48:08,380 --> 00:48:11,860 >> Ultimul lucru este de a pune în aplicare insensibilitate caz. 662 00:48:11,860 --> 00:48:19,310 Dacă te uiți înapoi, căutare la fața locului, în cazul în care specificațiile de utilizare intrări un șir. 663 00:48:19,310 --> 00:48:22,700 Dacă vă amintiți înapoi, gândindu-mă înapoi la - oh, am sters harta. 664 00:48:22,700 --> 00:48:30,300 Dacă credeți că înapoi la harta de programul tau, e în funcția principală, 665 00:48:30,300 --> 00:48:33,850 asa ca uite unde ai de a face cu șirul de utilizator introduse, 666 00:48:33,850 --> 00:48:38,260 și apoi, în cadrul acolo, cred că de instrumentele pe care le-ați învățat de la dvs. 667 00:48:38,260 --> 00:48:43,690 cripto PSET, PSET 2, și atunci cred că de moduri în care ați putea fi în măsură să 668 00:48:43,690 --> 00:48:48,640 permite ca datele introduse de utilizator regim mixt. 669 00:48:48,640 --> 00:48:53,980 Astfel încât acestea ar putea avea un amestec de litere mari și a minusculelor, dar că ar trebui să fie încă valabile. 670 00:48:53,980 --> 00:48:59,770 În dicționar, amintesc când am deschis acel fișier, fiecare cuvânt a fost depozitat ca toate majuscule. 671 00:48:59,770 --> 00:49:05,880 Dar noi nu vrem ca utilizatorul să aibă la intrare majuscule tot timpul. 672 00:49:05,880 --> 00:49:12,150 Poate cineva gândi la o modalitate pe care am putea fi în măsură să permită utilizatorului, 673 00:49:12,150 --> 00:49:18,320 chiar dacă acestea introduse toate cu litere mici, de exemplu? Da? 674 00:49:18,320 --> 00:49:20,540 [Student] Ai putea face pentru a sus? 675 00:49:20,540 --> 00:49:23,470 Da, exact. Ai putea face la partea superioară. 676 00:49:23,470 --> 00:49:27,670 Deci, ai putea converti toate literele în majuscule, iar apoi 677 00:49:27,670 --> 00:49:30,950 în acest fel vă asigurați că va fi o copie exacta 678 00:49:30,950 --> 00:49:35,410 de ce a mai găsit în dicționar, dacă e în dicționar. 679 00:49:35,410 --> 00:49:40,910 Mare. Avem un pic de timp stanga. 680 00:49:40,910 --> 00:49:47,530 >> Deci, unele lucruri pe care le-ar putea întâlni în această PSET este nevoie să știi 681 00:49:47,530 --> 00:49:52,400 ce variabilele sunt la un anumit moment în timp. 682 00:49:52,400 --> 00:49:57,000 Pentru ca in spec. avem funcția de clar că practic 683 00:49:57,000 --> 00:50:05,500 șterge tot ce ați desenat pe tablă, șterge totul și apoi rescrie pe deasupra, 684 00:50:05,500 --> 00:50:10,630 s-ar putea, în timp ce scrii PSET nu, vreau să se întâmple asta. 685 00:50:10,630 --> 00:50:13,810 Pentru că veți dori să vedeți, bine, o dată ce am introduceți în această încăierare, de exemplu, 686 00:50:13,810 --> 00:50:19,720 o dată am intra în încăierare, ce face și ceea ce a fost înainte, doar pentru referință. 687 00:50:19,720 --> 00:50:24,680 Deci, atunci ceea ce ați putea dori să faceți este să mergeți înapoi la funcția principală 688 00:50:24,680 --> 00:50:31,530 și comentați clar, de exemplu. 689 00:50:31,530 --> 00:50:34,060 Deci, atunci când executați programul data viitoare, 690 00:50:34,060 --> 00:50:45,210 programul nu va fi clar în loc și va păstra doar pe imprimarea pe deasupra. 691 00:50:45,210 --> 00:50:47,210 Există câteva modalități de a diagnostica alte asemenea. 692 00:50:47,210 --> 00:50:51,500 Ce ai putea face este puteți include declarații de imprimare f, cred. 693 00:50:51,500 --> 00:50:57,460 Un lucru pe care l-am văzut în psets că am fost clasificate ca oamenii inclus declarații de imprimare f 694 00:50:57,460 --> 00:51:02,710 pentru a imprima variabile la un anumit moment în timp pentru a urmări. 695 00:51:02,710 --> 00:51:06,820 Dar asigurați-vă doar că, la final, după ce ați terminat de scris toate declarațiile de imprimare f 696 00:51:06,820 --> 00:51:11,610 pentru tine de a urmări lucrurile, pe care le comentati după aceea, 697 00:51:11,610 --> 00:51:15,530 sau a le șterge o dată ce ați terminat. 698 00:51:15,530 --> 00:51:21,890 Asta e un alt mod de faptul că ai putea face ceva, ai putea scrie doar intr-o declaratie f imprimare 699 00:51:21,890 --> 00:51:26,260 undeva că e relevant și să vedeți, bazat pe ceea ce terminalul imprimă, 700 00:51:26,260 --> 00:51:28,950 ce a fost variabila. 701 00:51:28,950 --> 00:51:33,320 >> Un alt mod de a face acest lucru, că vom intra în mai multe detalii în timpul prelegerii, 702 00:51:33,320 --> 00:51:36,710 este GDB, care este un instrument de depanare. 703 00:51:36,710 --> 00:51:47,270 În esență, atunci când îl rulați, acesta va intra în programul tău și tu îl poți avea avansa 704 00:51:47,270 --> 00:51:51,500 un singur pas la un moment dat în loc de evaluare a tot ceea ce. 705 00:51:51,500 --> 00:51:54,770 Deci, atunci puteți să-l rupe în sus, în pași mici, iar apoi pe drum - 706 00:51:54,770 --> 00:52:00,230 și apoi de-a lungul modul în care lucrurile de imprimare și a vedea ce valori sunt. 707 00:52:00,230 --> 00:52:07,830 Și care vă ajută să îți dai seama în cazul în care un bug în codul dvs. s-ar putea sa fie. 708 00:52:07,830 --> 00:52:12,970 Ce am putea face chiar acum este a scrie o funcție rapidă și apoi 709 00:52:12,970 --> 00:52:19,780 a se vedea modul în care am putea fi capabili de a utiliza GDB pentru a vedea ce se întâmplă. 710 00:52:19,780 --> 00:52:23,410 Așa că haideți să avem un int principal, și apoi ce avem ca parametri principal? 711 00:52:23,410 --> 00:52:32,690 Avem int arg C, și arg șir V. 712 00:52:32,690 --> 00:52:44,900 Am de gând să salveze acest pas cu pas cum GDB.z. Bine. 713 00:52:44,900 --> 00:52:48,300 Am de gând să aibă retur 0. 714 00:52:48,300 --> 00:52:59,390 Deci, cum despre hai sa avem doar o simplă pentru buclă; să aibă 12. 715 00:52:59,390 --> 00:53:06,750 Să aibă, de asemenea, un nume int contor, și 716 00:53:06,750 --> 00:53:11,910 putem porni de la faptul că 0. Bine. 717 00:53:11,910 --> 00:53:17,760 Deci, la fiecare punct în bucla de, să spunem că dorim să crească contra 718 00:53:17,760 --> 00:53:26,980 sau multiplica prin orice i este. 719 00:53:26,980 --> 00:53:39,650 Aceasta este o funcție destul de scurt. 720 00:53:39,650 --> 00:53:46,290 Să facem GDB. Oh! Și apoi - zăngănit este inteligent. 721 00:53:46,290 --> 00:54:03,780 Spune-mi că nu am includ cs50.h. 722 00:54:03,780 --> 00:54:16,160 Bine. Deci, acum vrem să - 723 00:54:16,160 --> 00:54:32,740 De fapt, Îmi pare rău băieți. Am de gând să redenumiți fișierul doar pentru că e un pic confuz. 724 00:54:32,740 --> 00:54:43,630 >> Bine. Deci, acum ce vrem să facem este, vrem să pornim de GDB. 725 00:54:43,630 --> 00:54:51,750 I-am spus "depanare GDB,", astfel încât în ​​esență, că va fi setat pentru a concentrându-se pe această depanare, 726 00:54:51,750 --> 00:54:55,540 depanarea fișierului. 727 00:54:55,540 --> 00:54:57,930 Am de gând să pun un punct de întrerupere. 728 00:54:57,930 --> 00:55:01,160 În esență, programul este de gând să ruleze până când hit-uri la un punct de întrerupere anumit. 729 00:55:01,160 --> 00:55:04,910 Am de gând să spun pauza la funcția principală. 730 00:55:04,910 --> 00:55:12,680 Deci, acum am de gând să ruleze depanare, așa interiorul GDB pot rula cod. 731 00:55:12,680 --> 00:55:17,710 Este rularea programului, și chiar dacă principal a fost unul din primele lucruri pe care le-a scris, 732 00:55:17,710 --> 00:55:20,870 avem, de asemenea, fișierele includ; acolo se întâmplă lucruri pe deja. 733 00:55:20,870 --> 00:55:25,930 Ea are punct de control la principal. 734 00:55:25,930 --> 00:55:29,900 Să spunem "viitor", astfel încât să putem continua. 735 00:55:29,900 --> 00:55:33,300 Se spune "int contor = 0." 736 00:55:33,300 --> 00:55:39,310 Am de gând să spun "imprima contra." 737 00:55:39,310 --> 00:55:42,980 Acest lucru este ciudat. Deci, în esență, ne așteptăm să fie contoare 0, 738 00:55:42,980 --> 00:55:46,680 dar GDB este un pas înapoi, astfel încât de fiecare dată când spune în continuare, 739 00:55:46,680 --> 00:55:50,350 se spune contorul int = 0. Asta e urmatorul lucru pe care-l va executa. 740 00:55:50,350 --> 00:55:56,160 Apoi faceți clic - vă pot spune următorul nou, sau vă pot spune doar "n", 741 00:55:56,160 --> 00:56:02,400 și acum dacă imprimați contra, contor este 0, așa cum ne așteptăm. 742 00:56:02,400 --> 00:56:07,570 Practic, se creează un fel propriu de variabile pentru ea, dar orice e acolo - 743 00:56:07,570 --> 00:56:12,120 Vrei chiar aici, că e ceea ce reprezintă contra. 744 00:56:12,120 --> 00:56:15,180 Așa că am de gând să faceți clic pe Următorul, și vreau să știu ce i este. 745 00:56:15,180 --> 00:56:21,270 Vei imprima i, i este 0, așa cum ne așteptăm. 746 00:56:21,270 --> 00:56:25,630 Next din nou, se indică faptul că se trece prin bucla din nou pentru, 747 00:56:25,630 --> 00:56:32,970 așa că, dacă I ​​i imprima, de exemplu, pot vedea că suntem pe - care i este în prezent 1. 748 00:56:32,970 --> 00:56:36,150 Deci asta e un fel, că, dacă setați un punct de întrerupere la o anumită funcție 749 00:56:36,150 --> 00:56:39,520 și să păstreze apoi pe merge următoare, și apoi verificând ceea ce i este, 750 00:56:39,520 --> 00:56:45,790 dacă aveți o bănuială că poate undeva, ceva nu se întâmplă așa cum ar trebui, 751 00:56:45,790 --> 00:56:51,340 și bănuiți că poate e de la primul indice sau indicele ultimul sau ceva, 752 00:56:51,340 --> 00:57:00,110 puteți utiliza GDB, continua imprimarea i, pentru a fi în măsură să verificați aceste valori sunt. 753 00:57:00,110 --> 00:57:05,830 Deci, în GDB, deoarece imprimare și viitoare sunt astfel de argumente comune, 754 00:57:05,830 --> 00:57:11,240 comenzi comune, așa cum am abreviat lângă la n, 755 00:57:11,240 --> 00:57:22,010 Eu pot, de asemenea, spun doar p. contra, că e încă 0. 756 00:57:22,010 --> 00:57:25,610 Apoi am faceți clic pe Următorul. Vreau să imprimați din nou contra. 757 00:57:25,610 --> 00:57:26,790 Ei bine, așa că e încă 0. 758 00:57:26,790 --> 00:57:39,010 >> Și tu ești un fel de mirat - ei bine, vreau să fie contra o funcție factorial. 759 00:57:39,010 --> 00:57:43,930 De ce - doar în tehnici de depanare - de ce ar putea fi? 760 00:57:43,930 --> 00:57:48,160 De ce nu este în creștere contra valoarea acestuia? 761 00:57:48,160 --> 00:57:53,100 De ce este sejurului lor la 0? 762 00:57:53,100 --> 00:57:59,320 Ei bine, aici am - înapoi aici, eu zic contra = x i contra. 763 00:57:59,320 --> 00:58:02,180 Deci, dacă mă întorc la începutul funcția mea, 764 00:58:02,180 --> 00:58:09,520 Văd că atunci când am am imprimat, i este 0, și ceea ce este 0 x ceva? 765 00:58:09,520 --> 00:58:13,700 E 0, nu? Deci, asta e, probabil, motivul pentru care contorul 766 00:58:13,700 --> 00:58:16,960 nu este niciodată de gând să fie orice alt număr. 767 00:58:16,960 --> 00:58:21,920 Deci, atunci ceea ce am putea dori să faceți este să se întoarcă la fuction meu, 768 00:58:21,920 --> 00:58:27,410 cuvânt de spus, bine, bine, de fapt, vreau să-l înceapă la 1. 769 00:58:27,410 --> 00:58:32,150 Este că va rezolva lucrurile? 770 00:58:32,150 --> 00:58:34,550 Nu chiar, deoarece contorul este încă 0 aici. 771 00:58:34,550 --> 00:58:42,390 Deci, haideți să stabilit că la 1. 772 00:58:42,390 --> 00:58:49,040 Dorim să resetați instrumentul nostru de depanare, asa ca hai sa renunte. 773 00:58:49,040 --> 00:58:54,000 Și atunci ce putem face este, putem GDB depanare din nou, 774 00:58:54,000 --> 00:59:05,620 pune o pauza de la principal, iar apoi executați din nou depanare, viitoare, în continuare, următoarea. 775 00:59:05,620 --> 00:59:12,520 Să lovit următoare de câteva ori, iar apoi vom imprima contra, văd că - 776 00:59:12,520 --> 00:59:16,140 nu am face în mod corect fișierul din nou. 777 00:59:16,140 --> 00:59:19,500 Chiar dacă am schimbat codul sursă, atunci noi de fapt 778 00:59:19,500 --> 00:59:21,660 nu au actualizat executabil nostru. 779 00:59:21,660 --> 00:59:27,310 Eu cred că puteți face - Da. 780 00:59:27,310 --> 00:59:29,880 În cadrul GDB în sine, puteți face de fapt fișierul. 781 00:59:29,880 --> 00:59:31,880 Deci, tu nu trebuie să renunțe la GDB din nou. 782 00:59:31,880 --> 00:59:36,180 Puteți reveni la fișierul sursă, salvați-l, înapoi în GDB, poți face din nou. 783 00:59:36,180 --> 00:59:40,850 Mare. Deci, haideți să fugi de depanare. 784 00:59:40,850 --> 00:59:45,900 Vrem să-l pornească de la început, deoarece avem un executabil nou. 785 00:59:45,900 --> 00:59:54,870 Putem merge printr-o de câteva ori, iar apoi imprimați i, imprimați contra, continua. 786 00:59:54,870 --> 00:59:59,090 Bine. Deci, acum vedem că, de fapt contra este în creștere valoarea sa ca vrem sa-l. 787 00:59:59,090 --> 01:00:03,340 >> Asta e doar o mica mica muscatura de dimensiuni exemplu despre cum ați putea folosi GDB 788 01:00:03,340 --> 01:00:09,700 pentru a introduce codul dvs., imprimați anumite valori, faceți clic pe lângă pentru a trece la următoarea linie, 789 01:00:09,700 --> 01:00:12,960 și abrevierea și imprima-l. 790 01:00:12,960 --> 01:00:18,690 În mod evident, codul în scramble este un pic mai complex decât atât, dar ceea ce se poate face 791 01:00:18,690 --> 01:00:26,980 este stabilit un punct de control la - puteți seta un punct de control la funcțiile de căutare, ceva de genul asta. 792 01:00:26,980 --> 01:00:29,440 Deci, ori de câte ori acesta ajunge la punctul în care trebuie să se uite ceva, 793 01:00:29,440 --> 01:00:37,340 atunci GDB va rula tot până în acel moment și apoi puteți începe valori de imprimare afară. 794 01:00:37,340 --> 01:00:42,030 Ca este mărcile în acest moment fals sau este adevarat? 795 01:00:42,030 --> 01:00:46,580 Asta e, probabil, ceva care ar putea să doriți să utilizați. 796 01:00:46,580 --> 01:00:49,060 GDB, nu te stresa prea mult despre asta, 797 01:00:49,060 --> 01:00:51,270 pentru că vom intra în mai multe detalii în curs, 798 01:00:51,270 --> 01:00:54,570 dar am vrut doar sa stiu cum voi ați putea fi capabil să-l utilizați 799 01:00:54,570 --> 01:01:00,120 dacă sunteți obtinerea început cu PSET și doresc să înțeleagă 800 01:01:00,120 --> 01:01:05,040 o cale mai bună decât a pune doar declarații de imprimare f și aruncării la gunoi-le pe toate prin codul. 801 01:01:05,040 --> 01:01:10,430 Având în GDB pentru a imprima de fapt, pentru tine și pentru a fi în măsură să stabilească aceste puncte de întrerupere 802 01:01:10,430 --> 01:01:12,980 astfel încât programul poate rula până la un anumit punct 803 01:01:12,980 --> 01:01:21,660 și se lasă apoi să-și intensifice într-adevăr în ea și dau seama de problema acolo. 804 01:01:21,660 --> 01:01:29,600 >> Corect. Deci, dacă ne uităm înapoi la încăierare, am citit codul de distribuție. 805 01:01:29,600 --> 01:01:35,670 Am vorbit despre o modalitate de a itera peste matrice 2D, și veți siguranta 806 01:01:35,670 --> 01:01:40,910 să fie dorința de a repeta peste matrice 2D, atunci când vin la desen grila de joc. 807 01:01:40,910 --> 01:01:45,090 Am vorbit despre funcția de căutare, despre modul în care vrem să ne asigurăm de un cuplu de lucruri. 808 01:01:45,090 --> 01:01:48,300 Dorim să ne asigurăm că nu am fost la cuvântul înainte. 809 01:01:48,300 --> 01:01:51,220 De asemenea, dorim să vă asigurați că acesta este de fapt în dicționar. 810 01:01:51,220 --> 01:01:54,220 Apoi am vorbit despre goana, despre cum vrem să rotiți bord. 811 01:01:54,220 --> 01:01:58,170 Și știind că ați putea dori să faceți o copie a ceva 812 01:01:58,170 --> 01:02:00,440 pentru a fi capabil să-l mute. 813 01:02:00,440 --> 01:02:03,250 În cele din urmă, am vorbit despre caz și sensibilitate, despre modul în care doriți să vă asigurați 814 01:02:03,250 --> 01:02:07,290 că, în ciuda indiferent de combinație de cazul în care intrările de utilizator, 815 01:02:07,290 --> 01:02:10,170 dacă e un cuvânt valabil în dicționar, 816 01:02:10,170 --> 01:02:14,400 atunci va fi găsit în mod corect. 817 01:02:14,400 --> 01:02:21,290 Deci, atunci toate că împreună este PSET scramble, și că este walkthrough 3. 818 01:02:21,290 --> 01:02:29,180 Multumesc tuturor pentru venit, și de noroc cu scramble. 819 01:02:29,180 --> 01:02:32,180 CS50.TV