ZAMYLA CHAN: E 'un-me, Zamyla. Oggi, stiamo andando a implementare Mario, dove traiamo Mario una piramide piena per lui per saltare. Analizziamo il sub-task per questo problema. In primo luogo, vogliamo richiedere all'utente per l'altezza della piramide. E poi vogliamo fare in modo che tale input è valido. E poi andremo a vogliono disegnare la piramide. Quindi parliamo di spingendo e validare l'input dell'utente. Potrebbe sembrare qualcosa di simile questo, un ciclo do-po che richiede all'utente per un interi e poi solo ripetizioni se questo intero non è valido. Così che cosa dovrebbe essere questa condizione? Per questo, andiamo indietro alla specifica. Ebbene, le specifiche ci dice che qualsiasi valida altezza sta per essere compreso tra 0 e 23, inclusiva. Allora questo significa che qualsiasi invalido altezza sarà inferiore a 0 o superiore a 23. Quindi, ora che abbiamo queste informazioni, cerchiamo di progettare la nostra condizione. Ma dobbiamo stare attenti, perché ora abbiamo due booleani che vogliamo valutare. Qui ho fornito voi con una tabella di verità. Questo ci permette di prendere due Booleani, booleano uno e due. E siamo in grado di valutare sia Bool1 e Bool2 o Bool1 o Bool2. Allora, qual è la differenza tra AND e OR? Bene, Bool1 e Bool2 sarà valutata come vera se e solo se entrambi booleani sono vere, mentre il o il funzionamento sarà vero se uno di i booleani o entrambi sono vere. Quindi, con questo in mente, vedere se si riesce a capire ciò che la condizione appropriata per il ciclo do-while per n non valida sarà. Con questo, abbiamo spinti e validate l'utente per l'altezza della piramide che vogliono. Così ora, tocca a noi per disegnare la piramide. La piramide completa per questo problema avrà un aspetto un po ' come questo, dove abbiamo una piramide di sinistra, alcuni gap, e poi una piramide retta. Quindi cerchiamo di rompere questo giù un po '. Se vado al mio editor di testo, qui ho ci ha disegnato una piramide allineato a sinistra. Ma questo non lo farà. Quello che vogliamo fare è che vogliamo creare una piramide allineato a destra prima. Quindi, per fare questo, per spingere solo i miei hash lungo al lato, Sto solo andando a mettere alcuni caratteri in mezzo, a questi punti. Poi ho intenzione di mettere due sul riga successiva, e uno su quella linea. Ed ecco ho una piramide allineato a destra. Dopo di che, ho intenzione di tornare alla riga superiore e mettere il divario, che è, per le specifiche, due spazi. Poi ho intenzione di riempire il Dall'altro lato della piramide. Ho intenzione di andare alla seconda fila, scrivo due spazi per il vuoto e poi due hash. Torna alla terza fila, due posti per il divario e tre gli hash. E alla fine, due posti per il divario e quattro gli hash. Ecco, questo è ciò che un pieno piramide sarà simile. Naturalmente, non vogliamo questi punti nel modo. Quindi stiamo andando a sostituire questi puntini mettendo alcuni spazi in. Uno, due, tre sulla prima riga. Una, due al secondo. E uno sulla terza riga. Quindi questo è quello che avremmo fatto se ci voluto fare solo una piramide piena, dire, nel nostro editor di testo. Quindi cerchiamo di prendere questo, la comprensione dei modelli, e convertirlo verso alcuni pseudocodice. Per ogni riga della piramide, vogliamo stampare la piramide sinistra e poi il vuoto e quindi la piramide destra. Per la piramide di sinistra, il risultato della stampa la quantità richiesta di spazi, seguito dai hash. Poi stampiamo il divario, che è solo due spazi ogni volta. E nella piramide destra, il risultato della stampa il numero richiesto di hash. Per la seconda fila, abbiamo condotto lo stesso processo esatto. Stampiamo gli spazi per la sinistra piramide, la quantità necessaria di hash, il divario, due spazi, e poi gli hash per la piramide destra. Affrontiamo il modello per la piramide sinistra. Se ho avuto, a fini di questo esempio, un'altezza otto richiesto dal utente, quindi la mia prima fila avrebbe un hash e sette spazi. La mia seconda fila avrebbe due hash, sei spazi. La terza fila, tre gli hash, cinque spazi. Probabilmente si può fare questo voi stessi per una altezza di otto e determinare per ogni riga quanti hash e quanti spazi è necessario. Ma quello che vogliamo fare è vogliamo astratta esso. Quindi vi chiedo per qualsiasi riga ennesima, quanti hash e quanti spazi abbiamo bisogno? Ora, come si determina il modello per quanti hash e quanti spazi necessario per ogni ennesima riga per una determinata altezza, ricordarsi di stare attenti di come si sta indicizzazione. Quello che voglio dire con questo è che in tutti i giorni la vita la maggior parte di noi inizia a contare da uno. Quindi la prima fila sarebbe stato il numero uno. E la seconda fila sarebbe fila numero due, così via e così via. Ma in informatica e CS50, stiamo zero indicizzato. Così abbiamo effettivamente iniziare a contare da zero. Quindi la prima fila sarebbe essere il numero di riga zero. E la seconda fila sarebbe numero di riga uno. Quindi, se ho avuto una altezza di otto per la piramide, allora l'ultimo valore di n sarebbe in realtà sette e non otto. Quindi state attenti su questo. Ed essere consapevoli quando si sta per determinare il vostro modello se il vostro zero indicizzati o uno-indicizzati OK. Quindi, ora che abbiamo la modello per la piramide sinistra, abbiamo bisogno di determinare il modello per il gap. Per fortuna, questo è davvero facile. E 'solo sempre due spazi. Così ora si procede al modello giusto. La prima riga avrà un hash. La seconda fila, due. La terza fila, tre. Così via. Quindi, di nuovo, determinare per qualsiasi astratto n e qualsiasi altezza quanti hash e quanti spazi ogni riga dovrebbe avere. OK. Quindi sappiamo che per ogni fila ci per gli incontri di processo. Come lo facciamo? Beh, usiamo il ciclo for costrutto, costituito da una inizializzazione, una condizione, e un aggiornamento. Per i cicli possono essere usati ripetere processi. Quindi dire che voglio per dire ciao, mondo 50 volte, poi il mio ciclo for sarebbe simile a questa, dove Ho inizializzo mia variabile a zero. La condizione è che i è inferiore a 50. E allora l'aggiornamento è che incrementa di uno ogni volta. Così che cosa questo sarebbe fare sarebbe quella di stampare ciao, mondo 50 volte di fila. Ora, dico che volevo iterare sull'altezza della piramide. Poi invece di codifica duro qualche valore nella condizione, Mi basta usare l'altezza variabile. Così che cosa questo farà è iterate sull'altezza ciascuna riga. E posso fare qualcosa dentro del corpo di tale ciclo. Che cosa vogliamo fare all'interno del corpo del ciclo? Beh, come abbiamo indicato in precedenza, vogliamo per stampare gli spazi e gli hash per la piramide sinistra e quindi stampare due spazi e quindi stampare il hash. Quindi abbiamo già capito che fuori. Così possiamo iniziare a riempire nel nostro programma molto di più. Qui ho un esterno per ciclo che itera oltre ogni riga nella piramide. E dentro quel corpo sto andando per stampare più volte gli spazi, hash ripetutamente, e poi il vuoto, e poi hash per la piramide a destra, e quindi, infine, una nuova la linea per iniziare la riga successiva. Con questo, abbiamo spinti l'utente per l'ingresso. Abbiamo fatto in modo che sia valido. E poi abbiamo disegnato la piramide. Così Mario può con successo scalare la piramide. Il mio nome è Zamyla. E questo è CS50.