1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 ZAMYLA CHAN: És un jo, Zamyla. 3 00:00:02,500 --> 00:00:06,910 Avui Mario, estarem dibuixar la meitat de la piràmide de Mario 4 00:00:06,910 --> 00:00:08,290 per pujar. 5 00:00:08,290 --> 00:00:11,570 >> Així que anem a parlar de la nostra coses per fer per aquest problema. 6 00:00:11,570 --> 00:00:13,610 Anem a voler per impulsar i validar 7 00:00:13,610 --> 00:00:18,290 l'usuari per a una entrada vàlida de com alta que volen piràmide de Mario sigui. 8 00:00:18,290 --> 00:00:20,090 I després, anem a dibuixar. 9 00:00:20,090 --> 00:00:24,870 Així que començarem amb indicacions i validar l'usuari per a la seva entrada. 10 00:00:24,870 --> 00:00:27,640 >> Podem fer ús de la Biblioteca de funcions CS50 11 00:00:27,640 --> 00:00:31,160 int aconseguir que assegurarà que l'usuari introdueix un nombre sencer. 12 00:00:31,160 --> 00:00:35,730 Qualsevol sencers positius, negatius nombres enters, nombre 0 són presa fàcil. 13 00:00:35,730 --> 00:00:41,670 Altrament, l'usuari se li demanarà que fins que torni a intentar introduir un nombre enter vàlid. 14 00:00:41,670 --> 00:00:44,210 Ara bé, tot i que get int fa una gran part de la feina per nosaltres 15 00:00:44,210 --> 00:00:46,730 per garantir que el usuari ens dóna un nombre enter, 16 00:00:46,730 --> 00:00:50,760 encara hem d'aplicar una mica restriccions addicionals al respecte. 17 00:00:50,760 --> 00:00:56,420 Després de tot, no podem tenir Mario escalada una mitjana piràmide d'altura negativa de 12. 18 00:00:56,420 --> 00:00:59,040 >> A més d'això, la especificació problema 19 00:00:59,040 --> 00:01:02,490 diu que només podem permet a Mario a pujar 20 00:01:02,490 --> 00:01:06,940 una piràmide d'altures entre 0 i 23. 21 00:01:06,940 --> 00:01:11,120 D'acord, pel que significa que necessitem per impulsar contínuament l'usuari 22 00:01:11,120 --> 00:01:14,320 per donar-nos una vàlida nombre i només continuarà 23 00:01:14,320 --> 00:01:17,120 una vegada que ens han donat una alçada vàlida. 24 00:01:17,120 --> 00:01:18,720 Com ho fem? 25 00:01:18,720 --> 00:01:23,760 >> Doncs bé, els processos continus ens donen la idea de fer alguna cosa loops-- 26 00:01:23,760 --> 00:01:24,720 repetitivament. 27 00:01:24,720 --> 00:01:28,220 Un bucle en C com un temps bucle que contínuament es 28 00:01:28,220 --> 00:01:33,480 executar el cos del bucle, sempre que la condició donada s'avalua com a veritable. 29 00:01:33,480 --> 00:01:36,200 Tan aviat com aquesta condició s'avalua com a falsa, 30 00:01:36,200 --> 00:01:39,770 el programa procedirà a el que ve després d'això. 31 00:01:39,770 --> 00:01:43,180 Així, mentre que els bucles són una forma de assegurar que contínuament 32 00:01:43,180 --> 00:01:45,320 sol·licitar a l'usuari una entrada vàlida. 33 00:01:45,320 --> 00:01:50,070 I una vegada que ens donen una entrada vàlida, procedirem al que vingui després. 34 00:01:50,070 --> 00:01:54,380 Sabem que demanarem entrada a l'usuari com a mínim una vegada. 35 00:01:54,380 --> 00:01:59,200 Així que ara arribem a una germana de la while, que és el do while. 36 00:01:59,200 --> 00:02:02,650 >> Bucle do executaran el cos del bucle almenys una vegada. 37 00:02:02,650 --> 00:02:06,150 Així que sense la comprovació de l'estat, s'executarà el cos del bucle. 38 00:02:06,150 --> 00:02:09,750 I a continuació, comprovar l'estat per veure si ha de repetir-se. 39 00:02:09,750 --> 00:02:13,080 Això és molt útil quan estem validar l'entrada de l'usuari. 40 00:02:13,080 --> 00:02:15,830 Sabem que anem per demanar-los que almenys una vegada. 41 00:02:15,830 --> 00:02:18,780 Pel que un bucle Do While podria una cosa semblant a això. 42 00:02:18,780 --> 00:02:20,090 Tenim un nombre enter n. 43 00:02:20,090 --> 00:02:22,760 I dins de la DO while, immediatament 44 00:02:22,760 --> 00:02:24,750 sol·licitar a l'usuari un nombre sencer. 45 00:02:24,750 --> 00:02:29,740 Si n no és vàlid, llavors anem a impulsar-los una i altra vegada i una altra fins que es 46 00:02:29,740 --> 00:02:31,820 donar-nos aquesta sencer vàlid. 47 00:02:31,820 --> 00:02:37,440 Finalment, una vegada que n és una entrada vàlida, anem a segueixi amb la resta del nostre programa. 48 00:02:37,440 --> 00:02:41,830 >> Així que anem a tornar a l'especificació i verificació quines són les condicions per a una entrada vàlida 49 00:02:41,830 --> 00:02:43,670 serà. 50 00:02:43,670 --> 00:02:48,090 Les altures vàlids van a de ser entre 0 i 23, inclusivament. 51 00:02:48,090 --> 00:02:53,350 Així d'ara no vàlids van a ser inferior a 0 o més de 23. 52 00:02:53,350 --> 00:02:56,420 Així que recorda al disseny el seu estat de salut atentament, 53 00:02:56,420 --> 00:02:58,660 sabent que la condició per al do while 54 00:02:58,660 --> 00:03:01,470 ha de ser mentre que n no és vàlid. 55 00:03:01,470 --> 00:03:05,080 Ara bé, això no serà una expressió booleana única i senzilla. 56 00:03:05,080 --> 00:03:07,630 Haurem de combinar dues expressions diferents 57 00:03:07,630 --> 00:03:09,900 perquè tota la nostra condició. 58 00:03:09,900 --> 00:03:13,290 >> Així que anem a veure en una taula de veritat que he ja que donat l'indici que estem 59 00:03:13,290 --> 00:03:15,200 va a estar tractant amb dos booleans. 60 00:03:15,200 --> 00:03:19,620 Així que aquí hi ha una taula de veritat on tenen dos Booleans-- booleà 1 i 2. 61 00:03:19,620 --> 00:03:27,050 Així que tenim l'opció d'avaluar Bool1 i Bool2 o Bool1 o Bool2. 62 00:03:27,050 --> 00:03:31,980 I només serà veritable si tots dos Booleans com a resultat true, mentre que tots 63 00:03:31,980 --> 00:03:37,280 o serà cert sempre que un els dos booleans s'avalua com a veritable. 64 00:03:37,280 --> 00:03:41,450 OK, així que prengui un moment, fer una pausa en aquest vídeo i pair aquesta taula de veritat. 65 00:03:41,450 --> 00:03:42,930 Vaig a ser aquí esperant. 66 00:03:42,930 --> 00:03:45,760 Quan tornis, consulteu si es pot armar 67 00:03:45,760 --> 00:03:51,910 una expressió booleana per a la seva condició que n és una entrada vàlida. 68 00:03:51,910 --> 00:03:54,420 >> Així que ara que tenim d'entrada d'usuari vàlid, anem a 69 00:03:54,420 --> 00:03:58,710 seguir endavant i parlar sobre com podria dibuixar la piràmide meitat. 70 00:03:58,710 --> 00:04:03,410 Aquí, en aquest editor de text simple, He dibuixat una piràmide alineat a l'esquerra. 71 00:04:03,410 --> 00:04:07,050 No obstant això, sabem que necessitem la nostra piràmide per ser alineat a la dreta. 72 00:04:07,050 --> 00:04:08,650 Llavors, com podria jo fer això? 73 00:04:08,650 --> 00:04:11,440 Bé, jo podria tractar d'empènyer tot a un costat 74 00:04:11,440 --> 00:04:14,880 amb només col·locar una mica caràcter en el medi. 75 00:04:14,880 --> 00:04:16,779 I després, per a la següent línia, vaig a posar 76 00:04:16,779 --> 00:04:20,970 alguns caràcters més per empènyer al llarg, i further-- així successivament i així forth-- 77 00:04:20,970 --> 00:04:23,360 fins que tingui la piràmide alineat a la dreta. 78 00:04:23,360 --> 00:04:27,780 Així que tenim una piràmide Alinea a la dreta, però no es veu tan gran amb els punts. 79 00:04:27,780 --> 00:04:30,680 Però encara volem mantenir aquesta bona separació. 80 00:04:30,680 --> 00:04:35,260 Així que vaig a, literalment, inserir alguns espais. 81 00:04:35,260 --> 00:04:39,420 >> En lloc de tres punts, em quedo posar un, dos, tres espais. 82 00:04:39,420 --> 00:04:40,370 A la segona línia. 83 00:04:40,370 --> 00:04:42,640 Vaig a posar una, dos espais. 84 00:04:42,640 --> 00:04:45,370 I en la penúltima línia, un sol espai. 85 00:04:45,370 --> 00:04:48,290 I aquí tinc una piràmide alineat a la dreta. 86 00:04:48,290 --> 00:04:52,170 De fer l'exemple en el text editor, tenim una idea per al patró 87 00:04:52,170 --> 00:04:54,590 que utilitzarem per dibuixar la piràmide meitat. 88 00:04:54,590 --> 00:04:58,080 Per a cada fila, el que vam fer està escrivim alguns espais, 89 00:04:58,080 --> 00:05:00,170 i després es passen alguns hashes, i després es passen 90 00:05:00,170 --> 00:05:03,020 la tecla Retorn, el qual és la creació d'una nova línia. 91 00:05:03,020 --> 00:05:07,770 Així que ara que hem de, anirem un pas més enllà i trobar un patró. 92 00:05:07,770 --> 00:05:10,170 >> Així que vaig a dir, per al interès d'aquest exemple, 93 00:05:10,170 --> 00:05:12,480 estem tractant amb una alçada de 8. 94 00:05:12,480 --> 00:05:17,100 La primera fila va a tenir dos hashes que segueix set espais. 95 00:05:17,100 --> 00:05:20,020 Els tres second-- hashes, sis espais. 96 00:05:20,020 --> 00:05:24,260 En tercer lloc row-- quatre, cinc hashes spaces-- així successivament i així successivament 97 00:05:24,260 --> 00:05:26,350 fins arribar a la fila n. 98 00:05:26,350 --> 00:05:31,540 Així doncs, us demano la fila n, quants hashes tindrem 99 00:05:31,540 --> 00:05:33,120 i el nombre d'espais? 100 00:05:33,120 --> 00:05:37,000 Així que depèn de vostè per trobar una fórmula per representar el nombre de hashes 101 00:05:37,000 --> 00:05:42,020 i quants espais són necessaris per l'enèsima fila quan es té una certa alçada. 102 00:05:42,020 --> 00:05:46,060 >> Ara, quan vostè està calculant tot això, tenir cura de com s'està indexant. 103 00:05:46,060 --> 00:05:49,170 El que vull dir amb això és que en tots nosaltres la vida quotidiana 104 00:05:49,170 --> 00:05:51,540 començar a comptar, en general per 1. 105 00:05:51,540 --> 00:05:55,950 Però en CS50 i en ciències de la computació en general, som 0 indexada. 106 00:05:55,950 --> 00:06:00,620 Així que la primera fila seria n de 0 a diferència d'1. 107 00:06:00,620 --> 00:06:04,550 Aneu amb compte d'això quan estàs tractant d'esbrinar el seu patró. 108 00:06:04,550 --> 00:06:07,570 Així que ara anem a tornar a la forma anem a cridar la nostra piràmide. 109 00:06:07,570 --> 00:06:12,300 Per a cada fila, anem a voler imprimir els espais, imprimir els valors hash, 110 00:06:12,300 --> 00:06:14,050 i després imprimir una nova línia. 111 00:06:14,050 --> 00:06:19,160 El suggeriment aquí és la paraula "perquè" cada fila. 112 00:06:19,160 --> 00:06:21,470 En C, tenim una construcció diu un bucle for, 113 00:06:21,470 --> 00:06:25,250 que es compon d'una inicialització, un estat, una actualització, 114 00:06:25,250 --> 00:06:26,790 i el cos del bucle. 115 00:06:26,790 --> 00:06:31,360 >> Dir el que volia dir, hola món, 50 vegades, els meus de bucle 116 00:06:31,360 --> 00:06:32,880 seria alguna cosa com això. 117 00:06:32,880 --> 00:06:35,480 Em inicialitzar el meu número sencer de 0. 118 00:06:35,480 --> 00:06:38,230 La condició és que I és menys de 50. 119 00:06:38,230 --> 00:06:42,350 I llavors la meva actualització és només Em incrementant en un cada vegada. 120 00:06:42,350 --> 00:06:45,140 També podem utilitzar els bucles per repetir les coses. 121 00:06:45,140 --> 00:06:47,820 Cal notar aquí la forma en què no tenim codificació fixa un nombre, 122 00:06:47,820 --> 00:06:51,820 sinó que més aviat es col·loca la variable d'altura en lloc de la condició. 123 00:06:51,820 --> 00:06:56,420 Llavors, què estic fent aquí és que estic iterant sobre cada fila de la piràmide. 124 00:06:56,420 --> 00:07:00,160 Puc fer alguna cosa per a cada remar a l'interior del cos de la meva bucle. 125 00:07:00,160 --> 00:07:02,350 >> Què estem fent a l'interior el cos del bucle? 126 00:07:02,350 --> 00:07:07,120 Bé, com ja vam dir, estem imprimint espais i nosaltres estem imprimint hashes 127 00:07:07,120 --> 00:07:09,480 i nosaltres estem imprimint una nova línia. 128 00:07:09,480 --> 00:07:11,950 Així que el meu cicle for exterior tindrà aquest aspecte. 129 00:07:11,950 --> 00:07:15,070 Em iterar sobre cada fila de la piràmide, utilitzant, 130 00:07:15,070 --> 00:07:18,890 en aquest cas, l'alçada com la variable que emmagatzema l'altura de la piràmide. 131 00:07:18,890 --> 00:07:22,870 A l'interior del cos d'aquest bucle, estic va a imprimir espais en repetides ocasions, la impressió 132 00:07:22,870 --> 00:07:26,730 els hashes en diverses ocasions, i després imprimir una nova línia. 133 00:07:26,730 --> 00:07:31,010 >> Així que ara, l'ús de tots els conceptes que He parlat en aquest recorregut, 134 00:07:31,010 --> 00:07:35,210 vostè ha de poder indicar al usuari per a l'entrada, validar aquesta entrada, 135 00:07:35,210 --> 00:07:37,370 i després dibuixar la piràmide meitat. 136 00:07:37,370 --> 00:07:41,510 >> El meu nom és Zamyla, i això és CS50. 137 00:07:41,510 --> 00:07:43,167