1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 ZAMYLA CHAN: Este un mine, Zamyla. 3 00:00:02,500 --> 00:00:06,910 Astăzi, în Mario, vom fi desen jumătate piramida lui Mario 4 00:00:06,910 --> 00:00:08,290 pentru a urca în sus. 5 00:00:08,290 --> 00:00:11,570 >> Așa că hai să vorbim despre noastră la-do pentru această problemă. 6 00:00:11,570 --> 00:00:13,610 Mergem să vrea pentru a solicita și valida 7 00:00:13,610 --> 00:00:18,290 utilizatorul pentru o intrare validă a modului în care de mare pe care doresc piramida lui Mario să fie. 8 00:00:18,290 --> 00:00:20,090 Și apoi, vom desena. 9 00:00:20,090 --> 00:00:24,870 Așa că hai să începem cu determinându-i validarea utilizatorului pentru introducerea lor. 10 00:00:24,870 --> 00:00:27,640 >> Noi putem face uz de CS50 Biblioteca de funcții 11 00:00:27,640 --> 00:00:31,160 primi int care se va asigura că utilizatorul introduce un număr întreg. 12 00:00:31,160 --> 00:00:35,730 Orice numere întregi pozitive, negative numere întregi, numărul 0 sunt un joc corect. 13 00:00:35,730 --> 00:00:41,670 În caz contrar, utilizatorul va cere să încercați din nou până când un număr întreg de intrare validă. 14 00:00:41,670 --> 00:00:44,210 Acum, cu toate că nu int get o mulțime de lucru pentru noi 15 00:00:44,210 --> 00:00:46,730 în asigurarea că utilizator ne dă un număr întreg, 16 00:00:46,730 --> 00:00:50,760 avem încă nevoie să se aplice unele constrângeri suplimentare în acest sens. 17 00:00:50,760 --> 00:00:56,420 La urma urmei, nu putem avea Mario alpinism o jumătate de piramidă de înălțime negativă 12. 18 00:00:56,420 --> 00:00:59,040 >> Pe lângă aceasta, caietul de sarcini problemă 19 00:00:59,040 --> 00:01:02,490 spune că noi putem doar permite Mario pentru a urca 20 00:01:02,490 --> 00:01:06,940 o piramidă de înălțimi între 0 și 23. 21 00:01:06,940 --> 00:01:11,120 OK, deci asta înseamnă că avem nevoie pentru a determina utilizatorul in mod continuu 22 00:01:11,120 --> 00:01:14,320 să ne dea un pașaport valabil numărul și numai în continuare 23 00:01:14,320 --> 00:01:17,120 odată ce ne-am dat o înălțime validă. 24 00:01:17,120 --> 00:01:18,720 Cum facem asta? 25 00:01:18,720 --> 00:01:23,760 >> Ei bine, procese continue să ne dea ideea de a face ceva loops-- 26 00:01:23,760 --> 00:01:24,720 repetitiv. 27 00:01:24,720 --> 00:01:28,220 O buclă în C, ca in timp ce bucla care va continuu 28 00:01:28,220 --> 00:01:33,480 executa corpul buclei, atâta timp cât condiția dată evaluează la true. 29 00:01:33,480 --> 00:01:36,200 De îndată ce această condiție evaluează la fals, 30 00:01:36,200 --> 00:01:39,770 programul va proceda la orice vine după aceea. 31 00:01:39,770 --> 00:01:43,180 Așa că în timp ce buclele sunt o modalitate de asigurându-se că noi continuu 32 00:01:43,180 --> 00:01:45,320 solicita utilizatorului o intrare validă. 33 00:01:45,320 --> 00:01:50,070 Și, odată ce acestea ne dea o intrare validă, vom trece la orice vine următor. 34 00:01:50,070 --> 00:01:54,380 Noi știm că ne vom cere utilizator pentru introducerea cel puțin o dată. 35 00:01:54,380 --> 00:01:59,200 Așa că acum am ajuns la o sora în timp ce bucla, care este face în timp ce bucla. 36 00:01:59,200 --> 00:02:02,650 >> Face în timp ce buclele va executa corpul buclei cel puțin o dată. 37 00:02:02,650 --> 00:02:06,150 Deci, fără verificarea stării, acesta va executa corpul buclei. 38 00:02:06,150 --> 00:02:09,750 Și apoi verificați starea pentru a vedea dacă trebuie să se repete. 39 00:02:09,750 --> 00:02:13,080 Acest lucru vine la îndemână atunci când suntem validarea de intrare de utilizator. 40 00:02:13,080 --> 00:02:15,830 Noi știm că vom merge pentru a le cere cel puțin o dată. 41 00:02:15,830 --> 00:02:18,780 Deci, o face în timp ce bucla s-ar putea arata ceva de genul asta. 42 00:02:18,780 --> 00:02:20,090 Avem un întreg n. 43 00:02:20,090 --> 00:02:22,760 Și în interiorul do în timp ce bucla, imediat am 44 00:02:22,760 --> 00:02:24,750 solicita utilizatorului un întreg. 45 00:02:24,750 --> 00:02:29,740 În cazul în care n este nevalid, atunci noi le vom solicita din nou și din nou și din nou, până când 46 00:02:29,740 --> 00:02:31,820 ne da acel număr întreg valid. 47 00:02:31,820 --> 00:02:37,440 În cele din urmă, odată ce n este o intrare validă, vom proceda la restul programului nostru. 48 00:02:37,440 --> 00:02:41,830 >> Așa că hai să ne întoarcem la spec și verificarea ce condițiile pentru o intrare validă 49 00:02:41,830 --> 00:02:43,670 Va fi. 50 00:02:43,670 --> 00:02:48,090 Înălțimile valide vor să fie între 0 și 23, inclusiv. 51 00:02:48,090 --> 00:02:53,350 înălțimi Așa că invalide vor să fie mai mică decât 0 sau mai mult de 23. 52 00:02:53,350 --> 00:02:56,420 Deci, amintiți de a proiecta starea dumneavoastră cu atenție, 53 00:02:56,420 --> 00:02:58,660 știind că condiția pentru face în timp ce bucla 54 00:02:58,660 --> 00:03:01,470 ar trebui să fie în timp ce n este nevalid. 55 00:03:01,470 --> 00:03:05,080 Acum, acest lucru nu va fi o simplă expresie booleană unică. 56 00:03:05,080 --> 00:03:07,630 Vom Va trebui să combine două expresii diferite 57 00:03:07,630 --> 00:03:09,900 pentru a face întreg condiția noastră. 58 00:03:09,900 --> 00:03:13,290 >> Deci să ne uităm la un tabel de adevăr Am dat deja indiciu că suntem 59 00:03:13,290 --> 00:03:15,200 va fi de-a face cu două Booleans. 60 00:03:15,200 --> 00:03:19,620 Deci, aici e un tabel de adevăr în cazul în care am au două Booleans-- boolean 1 și 2. 61 00:03:19,620 --> 00:03:27,050 Așa că avem opțiunea de a evalua bool1 și bool2 sau bool1 sau bool2. 62 00:03:27,050 --> 00:03:31,980 Și va fi adevărat numai dacă ambele Booleane evaluează la adevărat, în timp ce toate 63 00:03:31,980 --> 00:03:37,280 sau va fi adevărat, atâta timp cât unul dintre cele două Booleans evaluează la true. 64 00:03:37,280 --> 00:03:41,450 OK, astfel încât să ia un moment, întrerupe video și digera acest tabel de adevăr. 65 00:03:41,450 --> 00:03:42,930 Voi fi chiar aici în așteptare. 66 00:03:42,930 --> 00:03:45,760 Când te întorci, vezi dacă puteți piesă împreună 67 00:03:45,760 --> 00:03:51,910 o expresie booleană dvs. starea de n fiind o intrare nevalidă. 68 00:03:51,910 --> 00:03:54,420 >> Deci, acum că avem datele introduse de utilizator valid, să 69 00:03:54,420 --> 00:03:58,710 mergeți mai departe și să vorbească despre modul în care ne-am s-ar putea trage jumătate piramida. 70 00:03:58,710 --> 00:04:03,410 Aici, în acest editor de text simplu, Am desenat o piramidă aliniat la stânga. 71 00:04:03,410 --> 00:04:07,050 Dar noi știm că avem nevoie de un piramida să fie aliniate la dreapta. 72 00:04:07,050 --> 00:04:08,650 Deci, cum s-ar putea să fac asta? 73 00:04:08,650 --> 00:04:11,440 Ei bine, aș putea încerca să împingă totul în lateral 74 00:04:11,440 --> 00:04:14,880 doar prin a pune un pic caracter între cele două. 75 00:04:14,880 --> 00:04:16,779 Și apoi, pentru următorul line, am de gând să pun 76 00:04:16,779 --> 00:04:20,970 unele mai multe caractere pentru a-l împinge de-a lungul, și așa mai departe și așa further-- forth-- 77 00:04:20,970 --> 00:04:23,360 până când am aliniat dreapta piramidei. 78 00:04:23,360 --> 00:04:27,780 Așa că avem o piramidă de aliniere dreapta, dar nu arata atat de mare cu puncte. 79 00:04:27,780 --> 00:04:30,680 Dar noi încă mai doresc să susțin că spațierea frumos. 80 00:04:30,680 --> 00:04:35,260 Așa că voi literalmente inserați niște spații. 81 00:04:35,260 --> 00:04:39,420 >> În loc de trei puncte, voi a pus una, două, trei spații. 82 00:04:39,420 --> 00:04:40,370 Pe a doua linie. 83 00:04:40,370 --> 00:04:42,640 Voi pune una, două spații. 84 00:04:42,640 --> 00:04:45,370 Și penultima line, doar un singur spațiu. 85 00:04:45,370 --> 00:04:48,290 Si aici am un aliniat dreapta piramidă. 86 00:04:48,290 --> 00:04:52,170 Din acest exemplu în text editor, avem o idee pentru modelul 87 00:04:52,170 --> 00:04:54,590 pe care le vom folosi pentru a trage jumătate piramida. 88 00:04:54,590 --> 00:04:58,080 Pentru fiecare rând, ceea ce am făcut este de tip am niște spații, 89 00:04:58,080 --> 00:05:00,170 și apoi tastat unele hashes, și apoi tastat 90 00:05:00,170 --> 00:05:03,020 tasta Enter, care este de a crea o nouă linie. 91 00:05:03,020 --> 00:05:07,770 Deci, acum că avem asta, să mergem cu un pas mai departe și de a găsi un model. 92 00:05:07,770 --> 00:05:10,170 >> Așa că am de gând să spun, în interesul acestui exemplu, 93 00:05:10,170 --> 00:05:12,480 avem de a face cu o înălțime de 8. 94 00:05:12,480 --> 00:05:17,100 Primul rând va avea două hashes care urmează șapte spații. 95 00:05:17,100 --> 00:05:20,020 Cele trei second--, sase spatii hash. 96 00:05:20,020 --> 00:05:24,260 În al treilea rând row-- patru, cinci hashes spaces-- așa mai departe și așa mai departe 97 00:05:24,260 --> 00:05:26,350 până când vom ajunge la rândul NTH. 98 00:05:26,350 --> 00:05:31,540 Așa că, atunci, vă întreb pentru rând NTH, cati vom hashes sa avem 99 00:05:31,540 --> 00:05:33,120 și cât de multe spații? 100 00:05:33,120 --> 00:05:37,000 Deci, este de până la tine pentru a descoperi un Formula pentru a reprezenta cât de multe hashes 101 00:05:37,000 --> 00:05:42,020 și câte spații sunt necesare pentru rândul NTH, atunci când au înălțime. 102 00:05:42,020 --> 00:05:46,060 >> Acum, când te imaginind asta, fii atent modul în care sunteți indexare. 103 00:05:46,060 --> 00:05:49,170 Ceea ce vreau să spun prin aceasta este că în viața de zi cu zi noi toți 104 00:05:49,170 --> 00:05:51,540 începe numărarea, de obicei, de 1. 105 00:05:51,540 --> 00:05:55,950 Dar, în CS50 și în știința calculatoarelor în general, suntem 0 indexată. 106 00:05:55,950 --> 00:06:00,620 Deci, primul rând ar fi n de la 0, spre deosebire de 1. 107 00:06:00,620 --> 00:06:04,550 Fii atent la acest lucru atunci când sunteți încercând să dau seama modelul dumneavoastră. 108 00:06:04,550 --> 00:06:07,570 Așa că acum să ne întoarcem la modul în care vom desena piramida noastră. 109 00:06:07,570 --> 00:06:12,300 Pentru fiecare rând, vom dori să imprima spațiile, imprima hash, 110 00:06:12,300 --> 00:06:14,050 și apoi imprimați o nouă linie. 111 00:06:14,050 --> 00:06:19,160 Indiciul aici este cuvânt "pentru" fiecare rând. 112 00:06:19,160 --> 00:06:21,470 În C, avem un construct numit pentru buclă, 113 00:06:21,470 --> 00:06:25,250 care este compus dintr-un inițializare, o condiție, o actualizare, 114 00:06:25,250 --> 00:06:26,790 și corpul buclei. 115 00:06:26,790 --> 00:06:31,360 >> Spun că am vrut să spun, salut mondială, de 50 de ori, pentru bucla mele 116 00:06:31,360 --> 00:06:32,880 ar arata ceva de genul asta. 117 00:06:32,880 --> 00:06:35,480 Am inițializa meu întreg la 0. 118 00:06:35,480 --> 00:06:38,230 Condiția este ca eu este mai mică de 50 de ani. 119 00:06:38,230 --> 00:06:42,350 Și apoi actualizarea mea este doar incrementarea I de către unul de fiecare dată. 120 00:06:42,350 --> 00:06:45,140 Putem folosi, de asemenea, pentru bucle pentru a itera peste lucruri. 121 00:06:45,140 --> 00:06:47,820 Aici cum să nu observăm avem greu codificate un număr, 122 00:06:47,820 --> 00:06:51,820 ci mai degrabă plasat variabila înălțime în schimb în starea. 123 00:06:51,820 --> 00:06:56,420 Deci, ce fac aici e că sunt iterarea peste fiecare rând al piramidei. 124 00:06:56,420 --> 00:07:00,160 Pot să fac ceva pentru fiecare rând în interiorul corpului buclei mele. 125 00:07:00,160 --> 00:07:02,350 >> Ce facem în interior corpul buclei? 126 00:07:02,350 --> 00:07:07,120 Ei bine, așa cum am spus deja, suntem de imprimare spații și suntem de imprimare hashes 127 00:07:07,120 --> 00:07:09,480 și ne tipăriți o nouă linie. 128 00:07:09,480 --> 00:07:11,950 Așa că exterioară mea pentru bucla va arăta acest lucru. 129 00:07:11,950 --> 00:07:15,070 Am itera fiecare rând a piramidei, folosind, 130 00:07:15,070 --> 00:07:18,890 în acest caz, înălțime variabilă care stochează înălțimea piramidei. 131 00:07:18,890 --> 00:07:22,870 În interiorul corpului buclei, sunt va imprima spații în mod repetat, de imprimare 132 00:07:22,870 --> 00:07:26,730 în mod repetat, hash și apoi imprimați o nouă linie. 133 00:07:26,730 --> 00:07:31,010 >> Așa că acum, folosind toate conceptele pe care Am vorbit în această plimbare prin, 134 00:07:31,010 --> 00:07:35,210 ar trebui să poată solicita utilizator pentru intrare, valida de intrare, 135 00:07:35,210 --> 00:07:37,370 și apoi trage jumătate piramida. 136 00:07:37,370 --> 00:07:41,510 >> Numele meu este Zamyla, iar acest lucru este CS50. 137 00:07:41,510 --> 00:07:43,167