ZAMYLA CHAN: Este un-mă, Zamyla.
Astăzi, vom pune în aplicare Mario, în cazul în care vom trage Mario
o piramidă completă pentru el să sară peste.
Hai să dărâme sub-sarcini pentru această problemă.
>> În primul rând, dorim să solicita utilizatorului pentru înălțimea piramidei.
Și apoi vrem să ne asigurăm că această intrare este validă.
Și apoi vom doresc să atragă piramida.
>> Așa că hai să vorbim despre determinându și validarea introduse de utilizator.
S-ar putea arata ceva de genul acest lucru, o buclă de do-în timp ce
solicită utilizatorului o întregi și apoi doar se repetă
dacă acel număr întreg este nevalid.
Deci, ce ar trebui să fie această condiție?
>> Pentru acest lucru, să ne întoarcem în caietul de sarcini.
Ei bine, spec ne spune că orice validă înălțimea va fi între 0 și 23,
inclusiv.
Așa că atunci înseamnă că orice nevalid înălțimea va fi mai mică decât 0
sau mai mult de 23.
>> Deci, acum că avem această informație, Să proiecteze starea noastră.
Dar, trebuie să fim atenți, pentru că acum avem
două Booleans pe care dorim să le evalueze.
>> Aici v-am furnizat cu un tabel de adevăr.
Acest lucru ne permite să ia două Booleane, Boolean unu și doi.
Si putem evalua fie bool1 și bool2 sau bool1 sau bool2.
>> Deci, ce este diferența între și și sau?
Ei bine, bool1 și bool2 va să evalueze la adevărat dacă și numai
în cazul în care ambele Booleans sunt adevărate, întrucât sau operație
va fi adevărat în cazul în care fie unul dintre a Booleans sau ambele sunt adevărate.
Deci, cu acest lucru în minte, a se vedea dacă vă puteți da seama
ce condiția corespunzătoare pentru bucla do-în timp ce pentru un n nevalid
Va fi.
>> Cu aceasta, ne-am determinat și validat utilizatorul pentru înălțimea piramidei
pe care le doresc.
Deci, acum, este de până la noi pentru a desena piramida.
Piramida completă pentru acest problema va arata un pic
ca aceasta, în cazul în care avem o piramidă stânga, unele decalaj, și apoi o piramidă dreaptă.
Așa că haideți să rupă această jos un pic.
>> Dacă mă duc la editorul meu de text, aici Am ne trase o piramidă aliniat stânga-jos.
Dar asta nu se va face.
Ceea ce vrem să facem este să ne dorim a crea o piramidă aliniat la dreapta mai întâi.
Deci, pentru a face acest lucru, pentru a împinge pur și simplu hashes mea de-a lungul la o parte,
Mă duc să pun niște personaje între acestea, doar aceste puncte.
Apoi am de gând să pun două pe următoarea linie, și una pe acea linie.
Si asa ca aici am o piramidă aliniat la dreapta.
>> După aceea, voi du-te înapoi la rândul de sus
și a pus în decalajul, care este, pe spec, două spații.
Apoi am de gând pentru a umple cealaltă parte a piramidei.
Mă duc să merg la al doilea rând, scrie două spații pentru decalajul și apoi două
hashes.
Înapoi la al treilea rând, două spații pentru diferența și trei hash.
Iar la sfârșitul anului, două spații pentru diferența și patru hash.
Deci asta un plin piramida va arata.
>> Desigur, noi nu vrem aceste puncte în drum.
Așa că vom înlocui aceste puncte prin punerea în niște spații.
Unu, doi, trei pe prima linie.
Una, două pe al doilea.
Și unul pe a treia linie.
Deci, aceasta este ceea ce ne-ar face dacă am a vrut să facă doar o piramidă completă,
spune, în editorul nostru de text.
>> Deci să luăm acest lucru, înțelegerea modelelor,
si-l transforma peste la unele pseudocod.
Pentru fiecare rând al piramidei, ne-o dorim pentru a imprima piramida din stânga și apoi
decalajul și apoi piramida din dreapta.
Pentru piramida din stânga, vom imprima cantitatea necesară de spații,
urmată de hash.
Apoi vom imprima golul, care este doar două spații de fiecare dată.
Iar în piramida din dreapta, vom imprima numărul necesar de hash-uri.
>> Pentru al doilea rând, am realizat același proces de exact.
Imprimăm spațiile pentru stânga piramidă, cantitatea necesară
din hashes, diferența, două spații, și apoi pentru piramida hash dreapta.
>> Hai să abordeze modelul pentru piramida din stânga.
Dacă aș fi avut, în scopuri din acest exemplu, o înălțime
de opt solicitate de către utilizator, atunci primul meu rând
ar avea un singur hash și șapte spații.
Al doilea rând mi-ar fi două, șase hashes spații.
Al treilea rând, trei, cinci spații hash-uri.
Poti face acest lucru, probabil, te pentru o înălțime de opt
și de a determina pentru fiecare rând câte hashes și cât de multe spații de care aveți nevoie.
Dar, ceea ce vrem să facem este noi vrem să-l abstracte.
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?
>> Acum, așa cum sa determinati model pentru cât de multe hashes
și cât de multe spații de care aveți nevoie pentru orice rând pentru nth o anumită înălțime,
Nu uitați să fiți atenți de modul în care sunteți indexare.
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.
Deci, primul rând ar fi numărul unu.
Și al doilea rând ar fi rând numărul doi, așa mai departe și așa mai departe.
>> Dar, în știința calculatoarelor și CS50, suntem zero indexate.
Așa că vom începe efectiv numărarea de la zero.
Deci primul rând ar să fie numărul de rând la zero.
Și al doilea rând ar fi rând numărul unu.
Deci, dacă am avut o înălțime de opt pentru piramida mea, atunci ultima valoare a lui n
ar fi de fapt șapte și nu opt.
>> Deci, să fie atent cu privire la acest lucru.
Și să fie conștienți atunci când determinarea modelul dumneavoastră dacă dvs. de la zero indexate
sau unul indexate
>> O.K.
Deci, acum, că avem model pentru piramida din stânga,
avem nevoie pentru a determina modelul pentru gap-ul.
Din fericire, acest lucru este foarte ușor.
Este doar întotdeauna două spații.
>> Deci, acum vom trece la modelul de dreapta.
Primul rând va avea un singur hash.
Al doilea rând, două.
Al treilea rând, trei.
Si asa mai departe.
Deci, din nou, pentru a determina orice abstract n și orice înălțime cât de multe hashes
și cât de multe spații fiecare rând ar trebui să aibă.
>> O.K.
Deci, noi știm că pentru fiecare rând noi au nevoie de a efectua un proces.
Cum facem asta?
Ei bine, vom folosi pentru construct bucla, compus dintr-o initializare,
o condiție și o actualizare.
Pentru bucle pot fi folosite pentru a repeta procese.
>> Deci, spun că vreau să spun salut, mondială de 50 de ori, atunci mea pentru bucla
ar arata ceva de genul asta, în cazul în care Am inițializa variabila mea la zero.
Condiția este ca i este mai mic de 50.
Și apoi actualizarea este că creșteri câte unul de fiecare dată.
Deci, ce acest lucru s-ar face ar fi să print hello, lume de 50 de ori la rând.
>> Acum, spun că am vrut să revizuim peste înălțimea piramidei.
Apoi, în loc de codificare greu o anumită valoare în stare,
Eu folosesc doar înălțimea variabilă.
Deci, ce acest lucru va face este itera peste înălțimea fiecărui rând.
Și eu pot face ceva în interior a corpului buclei.
>> Ce vrem să facem în interiorul corpului buclei?
Ei bine, așa cum am indicat mai înainte, ne-o dorim pentru a imprima spațiile și hash
pentru piramida din stânga și apoi de imprimare două spații și apoi imprimați hash.
Așa că deja am dat seama de asta.
Deci, putem începe să umple în programul nostru mult mai mult.
>> Aici am o buclă exterioară pentru care iterează peste fiecare rând în piramidă.
Si in interiorul acestui organism voi pentru a imprima spații în mod repetat,
în mod repetat hashes, iar apoi diferența, și apoi pentru piramida hashes dreapta,
și apoi, în final, o nouă line pentru a începe rândul următor.
>> Cu aceasta, ne-am determinat utilizatorul de intrare.
Ne-am asigurat că e valabil.
Și apoi ne-am tras piramida.
Așa că Mario poate cu succes urca piramida.
>> Numele meu este Zamyla.
Și acest lucru este CS50.