1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,640 ZAMYLA CHAN: Este un-mă, Zamyla. 3 00:00:02,640 --> 00:00:06,950 Astăzi, vom pune în aplicare Mario, în cazul în care vom trage Mario 4 00:00:06,950 --> 00:00:10,730 o piramidă completă pentru el să sară peste. 5 00:00:10,730 --> 00:00:14,430 Hai să dărâme sub-sarcini pentru această problemă. 6 00:00:14,430 --> 00:00:17,930 >> În primul rând, dorim să solicita utilizatorului pentru înălțimea piramidei. 7 00:00:17,930 --> 00:00:20,510 Și apoi vrem să ne asigurăm că această intrare este validă. 8 00:00:20,510 --> 00:00:23,280 Și apoi vom doresc să atragă piramida. 9 00:00:23,280 --> 00:00:26,850 >> Așa că hai să vorbim despre determinându și validarea introduse de utilizator. 10 00:00:26,850 --> 00:00:29,920 S-ar putea arata ceva de genul acest lucru, o buclă de do-în timp ce 11 00:00:29,920 --> 00:00:33,250 solicită utilizatorului o întregi și apoi doar se repetă 12 00:00:33,250 --> 00:00:35,700 dacă acel număr întreg este nevalid. 13 00:00:35,700 --> 00:00:38,220 Deci, ce ar trebui să fie această condiție? 14 00:00:38,220 --> 00:00:40,630 >> Pentru acest lucru, să ne întoarcem în caietul de sarcini. 15 00:00:40,630 --> 00:00:46,240 Ei bine, spec ne spune că orice validă înălțimea va fi între 0 și 23, 16 00:00:46,240 --> 00:00:47,350 inclusiv. 17 00:00:47,350 --> 00:00:51,400 Așa că atunci înseamnă că orice nevalid înălțimea va fi mai mică decât 0 18 00:00:51,400 --> 00:00:53,840 sau mai mult de 23. 19 00:00:53,840 --> 00:00:57,220 >> Deci, acum că avem această informație, Să proiecteze starea noastră. 20 00:00:57,220 --> 00:00:59,230 Dar, trebuie să fim atenți, pentru că acum avem 21 00:00:59,230 --> 00:01:02,130 două Booleans pe care dorim să le evalueze. 22 00:01:02,130 --> 00:01:04,150 >> Aici v-am furnizat cu un tabel de adevăr. 23 00:01:04,150 --> 00:01:07,520 Acest lucru ne permite să ia două Booleane, Boolean unu și doi. 24 00:01:07,520 --> 00:01:13,600 Si putem evalua fie bool1 și bool2 sau bool1 sau bool2. 25 00:01:13,600 --> 00:01:17,390 >> Deci, ce este diferența între și și sau? 26 00:01:17,390 --> 00:01:21,810 Ei bine, bool1 și bool2 va să evalueze la adevărat dacă și numai 27 00:01:21,810 --> 00:01:25,680 în cazul în care ambele Booleans sunt adevărate, întrucât sau operație 28 00:01:25,680 --> 00:01:30,190 va fi adevărat în cazul în care fie unul dintre a Booleans sau ambele sunt adevărate. 29 00:01:30,190 --> 00:01:33,110 Deci, cu acest lucru în minte, a se vedea dacă vă puteți da seama 30 00:01:33,110 --> 00:01:37,460 ce condiția corespunzătoare pentru bucla do-în timp ce pentru un n nevalid 31 00:01:37,460 --> 00:01:38,850 Va fi. 32 00:01:38,850 --> 00:01:43,540 >> Cu aceasta, ne-am determinat și validat utilizatorul pentru înălțimea piramidei 33 00:01:43,540 --> 00:01:44,550 pe care le doresc. 34 00:01:44,550 --> 00:01:47,740 Deci, acum, este de până la noi pentru a desena piramida. 35 00:01:47,740 --> 00:01:50,520 Piramida completă pentru acest problema va arata un pic 36 00:01:50,520 --> 00:01:56,340 ca aceasta, în cazul în care avem o piramidă stânga, unele decalaj, și apoi o piramidă dreaptă. 37 00:01:56,340 --> 00:01:58,630 Așa că haideți să rupă această jos un pic. 38 00:01:58,630 --> 00:02:03,510 >> Dacă mă duc la editorul meu de text, aici Am ne trase o piramidă aliniat stânga-jos. 39 00:02:03,510 --> 00:02:05,160 Dar asta nu se va face. 40 00:02:05,160 --> 00:02:10,139 Ceea ce vrem să facem este să ne dorim a crea o piramidă aliniat la dreapta mai întâi. 41 00:02:10,139 --> 00:02:13,580 Deci, pentru a face acest lucru, pentru a împinge pur și simplu hashes mea de-a lungul la o parte, 42 00:02:13,580 --> 00:02:18,240 Mă duc să pun niște personaje între acestea, doar aceste puncte. 43 00:02:18,240 --> 00:02:22,560 Apoi am de gând să pun două pe următoarea linie, și una pe acea linie. 44 00:02:22,560 --> 00:02:26,070 Si asa ca aici am o piramidă aliniat la dreapta. 45 00:02:26,070 --> 00:02:28,540 >> După aceea, voi du-te înapoi la rândul de sus 46 00:02:28,540 --> 00:02:33,930 și a pus în decalajul, care este, pe spec, două spații. 47 00:02:33,930 --> 00:02:37,680 Apoi am de gând pentru a umple cealaltă parte a piramidei. 48 00:02:37,680 --> 00:02:42,030 Mă duc să merg la al doilea rând, scrie două spații pentru decalajul și apoi două 49 00:02:42,030 --> 00:02:42,920 hashes. 50 00:02:42,920 --> 00:02:47,020 Înapoi la al treilea rând, două spații pentru diferența și trei hash. 51 00:02:47,020 --> 00:02:51,480 Iar la sfârșitul anului, două spații pentru diferența și patru hash. 52 00:02:51,480 --> 00:02:54,400 Deci asta un plin piramida va arata. 53 00:02:54,400 --> 00:02:57,260 >> Desigur, noi nu vrem aceste puncte în drum. 54 00:02:57,260 --> 00:03:01,220 Așa că vom înlocui aceste puncte prin punerea în niște spații. 55 00:03:01,220 --> 00:03:03,720 Unu, doi, trei pe prima linie. 56 00:03:03,720 --> 00:03:05,650 Una, două pe al doilea. 57 00:03:05,650 --> 00:03:08,200 Și unul pe a treia linie. 58 00:03:08,200 --> 00:03:12,060 Deci, aceasta este ceea ce ne-ar face dacă am a vrut să facă doar o piramidă completă, 59 00:03:12,060 --> 00:03:13,700 spune, în editorul nostru de text. 60 00:03:13,700 --> 00:03:15,860 >> Deci să luăm acest lucru, înțelegerea modelelor, 61 00:03:15,860 --> 00:03:19,870 si-l transforma peste la unele pseudocod. 62 00:03:19,870 --> 00:03:24,500 Pentru fiecare rând al piramidei, ne-o dorim pentru a imprima piramida din stânga și apoi 63 00:03:24,500 --> 00:03:26,580 decalajul și apoi piramida din dreapta. 64 00:03:26,580 --> 00:03:30,260 Pentru piramida din stânga, vom imprima cantitatea necesară de spații, 65 00:03:30,260 --> 00:03:31,740 urmată de hash. 66 00:03:31,740 --> 00:03:35,030 Apoi vom imprima golul, care este doar două spații de fiecare dată. 67 00:03:35,030 --> 00:03:38,080 Iar în piramida din dreapta, vom imprima numărul necesar de hash-uri. 68 00:03:38,080 --> 00:03:41,410 >> Pentru al doilea rând, am realizat același proces de exact. 69 00:03:41,410 --> 00:03:44,510 Imprimăm spațiile pentru stânga piramidă, cantitatea necesară 70 00:03:44,510 --> 00:03:49,930 din hashes, diferența, două spații, și apoi pentru piramida hash dreapta. 71 00:03:49,930 --> 00:03:52,490 >> Hai să abordeze modelul pentru piramida din stânga. 72 00:03:52,490 --> 00:03:55,660 Dacă aș fi avut, în scopuri din acest exemplu, o înălțime 73 00:03:55,660 --> 00:03:58,790 de opt solicitate de către utilizator, atunci primul meu rând 74 00:03:58,790 --> 00:04:01,020 ar avea un singur hash și șapte spații. 75 00:04:01,020 --> 00:04:03,860 Al doilea rând mi-ar fi două, șase hashes spații. 76 00:04:03,860 --> 00:04:06,749 Al treilea rând, trei, cinci spații hash-uri. 77 00:04:06,749 --> 00:04:09,040 Poti face acest lucru, probabil, te pentru o înălțime de opt 78 00:04:09,040 --> 00:04:13,470 și de a determina pentru fiecare rând câte hashes și cât de multe spații de care aveți nevoie. 79 00:04:13,470 --> 00:04:16,209 Dar, ceea ce vrem să facem este noi vrem să-l abstracte. 80 00:04:16,209 --> 00:04:22,660 Așa că te întreb pentru orice rând nth, cât de multe hashes și cât de multe spații de ce avem nevoie? 81 00:04:22,660 --> 00:04:25,410 >> Acum, așa cum sa determinati model pentru cât de multe hashes 82 00:04:25,410 --> 00:04:29,920 și cât de multe spații de care aveți nevoie pentru orice rând pentru nth o anumită înălțime, 83 00:04:29,920 --> 00:04:32,910 Nu uitați să fiți atenți de modul în care sunteți indexare. 84 00:04:32,910 --> 00:04:37,160 Ceea ce vreau să spun prin aceasta este că în fiecare zi viață cele mai multe dintre noi începe numărarea de către unul. 85 00:04:37,160 --> 00:04:39,680 Deci, primul rând ar fi numărul unu. 86 00:04:39,680 --> 00:04:43,620 Și al doilea rând ar fi rând numărul doi, așa mai departe și așa mai departe. 87 00:04:43,620 --> 00:04:47,620 >> Dar, în știința calculatoarelor și CS50, suntem zero indexate. 88 00:04:47,620 --> 00:04:50,750 Așa că vom începe efectiv numărarea de la zero. 89 00:04:50,750 --> 00:04:54,020 Deci primul rând ar să fie numărul de rând la zero. 90 00:04:54,020 --> 00:04:56,640 Și al doilea rând ar fi rând numărul unu. 91 00:04:56,640 --> 00:05:02,510 Deci, dacă am avut o înălțime de opt pentru piramida mea, atunci ultima valoare a lui n 92 00:05:02,510 --> 00:05:05,850 ar fi de fapt șapte și nu opt. 93 00:05:05,850 --> 00:05:07,010 >> Deci, să fie atent cu privire la acest lucru. 94 00:05:07,010 --> 00:05:10,750 Și să fie conștienți atunci când determinarea modelul dumneavoastră dacă dvs. de la zero indexate 95 00:05:10,750 --> 00:05:12,360 sau unul indexate 96 00:05:12,360 --> 00:05:13,070 >> O.K. 97 00:05:13,070 --> 00:05:15,380 Deci, acum, că avem model pentru piramida din stânga, 98 00:05:15,380 --> 00:05:18,650 avem nevoie pentru a determina modelul pentru gap-ul. 99 00:05:18,650 --> 00:05:20,480 Din fericire, acest lucru este foarte ușor. 100 00:05:20,480 --> 00:05:22,690 Este doar întotdeauna două spații. 101 00:05:22,690 --> 00:05:25,240 >> Deci, acum vom trece la modelul de dreapta. 102 00:05:25,240 --> 00:05:27,220 Primul rând va avea un singur hash. 103 00:05:27,220 --> 00:05:28,640 Al doilea rând, două. 104 00:05:28,640 --> 00:05:29,530 Al treilea rând, trei. 105 00:05:29,530 --> 00:05:30,790 Si asa mai departe. 106 00:05:30,790 --> 00:05:35,540 Deci, din nou, pentru a determina orice abstract n și orice înălțime cât de multe hashes 107 00:05:35,540 --> 00:05:38,810 și cât de multe spații fiecare rând ar trebui să aibă. 108 00:05:38,810 --> 00:05:39,700 >> O.K. 109 00:05:39,700 --> 00:05:45,050 Deci, noi știm că pentru fiecare rând noi au nevoie de a efectua un proces. 110 00:05:45,050 --> 00:05:46,600 Cum facem asta? 111 00:05:46,600 --> 00:05:50,440 Ei bine, vom folosi pentru construct bucla, compus dintr-o initializare, 112 00:05:50,440 --> 00:05:52,310 o condiție și o actualizare. 113 00:05:52,310 --> 00:05:54,830 Pentru bucle pot fi folosite pentru a repeta procese. 114 00:05:54,830 --> 00:05:59,610 >> Deci, spun că vreau să spun salut, mondială de 50 de ori, atunci mea pentru bucla 115 00:05:59,610 --> 00:06:03,510 ar arata ceva de genul asta, în cazul în care Am inițializa variabila mea la zero. 116 00:06:03,510 --> 00:06:06,200 Condiția este ca i este mai mic de 50. 117 00:06:06,200 --> 00:06:09,670 Și apoi actualizarea este că creșteri câte unul de fiecare dată. 118 00:06:09,670 --> 00:06:14,700 Deci, ce acest lucru s-ar face ar fi să print hello, lume de 50 de ori la rând. 119 00:06:14,700 --> 00:06:18,080 >> Acum, spun că am vrut să revizuim peste înălțimea piramidei. 120 00:06:18,080 --> 00:06:21,560 Apoi, în loc de codificare greu o anumită valoare în stare, 121 00:06:21,560 --> 00:06:23,280 Eu folosesc doar înălțimea variabilă. 122 00:06:23,280 --> 00:06:27,180 Deci, ce acest lucru va face este itera peste înălțimea fiecărui rând. 123 00:06:27,180 --> 00:06:30,280 Și eu pot face ceva în interior a corpului buclei. 124 00:06:30,280 --> 00:06:32,710 >> Ce vrem să facem în interiorul corpului buclei? 125 00:06:32,710 --> 00:06:36,550 Ei bine, așa cum am indicat mai înainte, ne-o dorim pentru a imprima spațiile și hash 126 00:06:36,550 --> 00:06:40,730 pentru piramida din stânga și apoi de imprimare două spații și apoi imprimați hash. 127 00:06:40,730 --> 00:06:42,500 Așa că deja am dat seama de asta. 128 00:06:42,500 --> 00:06:45,670 Deci, putem începe să umple în programul nostru mult mai mult. 129 00:06:45,670 --> 00:06:49,850 >> Aici am o buclă exterioară pentru care iterează peste fiecare rând în piramidă. 130 00:06:49,850 --> 00:06:53,340 Si in interiorul acestui organism voi pentru a imprima spații în mod repetat, 131 00:06:53,340 --> 00:06:56,860 în mod repetat hashes, iar apoi diferența, și apoi pentru piramida hashes dreapta, 132 00:06:56,860 --> 00:07:00,440 și apoi, în final, o nouă line pentru a începe rândul următor. 133 00:07:00,440 --> 00:07:02,860 >> Cu aceasta, ne-am determinat utilizatorul de intrare. 134 00:07:02,860 --> 00:07:04,510 Ne-am asigurat că e valabil. 135 00:07:04,510 --> 00:07:06,280 Și apoi ne-am tras piramida. 136 00:07:06,280 --> 00:07:09,540 Așa că Mario poate cu succes urca piramida. 137 00:07:09,540 --> 00:07:10,970 >> Numele meu este Zamyla. 138 00:07:10,970 --> 00:07:13,840 Și acest lucru este CS50. 139 00:07:13,840 --> 00:07:15,419