陳ZAMYLA：這是一個我，Zamyla。
今天馬里奧，我們將要 圖紙馬里奧半金字塔
爬了​​起來。
>> 所以，讓我們來談談我們 待辦的這個問題。
我們會想 提示和驗證
用戶對於如何有效輸入 高，他們希望馬里奧的金字塔是。
接下來，我們要畫它。
因此，讓我們開始使用提示和 驗證他們的用戶輸入。
>> 我們可以利用的 CS50庫函數
得到INT將確保 用戶輸入的整數。
任何正整數，負 整數，0號都是公平的遊戲。
否則，用戶將被提示 重試，直到他們輸入一個有效的整數。
現在雖然GET INT呢 很多關於我們的工作
在確保 用戶給了我們一個整數，
我們仍然需要應用一些 上額外的約束。
畢竟，我們不能有馬里奧攀岩 高度負12的一半的金字塔。
>> 除此之外，該 問題說明
說，我們只能 讓馬里奧爬
高度的0到23之間的金字塔。
好了，這意味著我們需要 連續提示用戶
給我們一個有效 數只有不斷
一旦他們已經給了我們一個有效的高度。
我們怎麼辦呢？
>> 那麼，連續的過程給我們 的loops--做某事的想法
重複。
在C一根環路一段時間 循環將持續
只要執行循環體 給定的條件計算為真。
一旦這個條件 計算結果為false，
該計劃將繼續進行 以後無論發生什麼事。
因此，while循環的一種方式 確保我們不斷
提示輸入有效用戶輸入。
一旦他們給我們一個有效的輸入， 我們將繼續成何體統來。
我們知道，我們要問 用戶至少一次輸入。
所以，現在我們來到的一姐 while循環，這是do while循環。
>> do-whil​​e循環將執行 循環體至少一次。
因此，沒有檢查的情況下， 它將執行循環體。
然後檢查情況看 是否需要重演。
這是在方便的時候 我們正在驗證用戶輸入。
我們知道，我們要去 問他們至少一次。
因此，一個do while循環可能 是這個樣子。
我們有一個整數n。
而做的內部 while循環，我們馬上
提示整數用戶。
如果n是無效的，那麼我們就會促使他們 一次一次又一次，直到他們
給我們有效的整數。
最後，當n是一個有效的投入，我們將 繼續我們的節目的其餘部分。
>> 因此，讓我們回到規範和檢查 什麼有效的輸入條件
將是。
的有效高度要 介於0和23（含）之間。
因此無效的高度要 小於0或大於23。
所以請記住，設計 你的病情仔細，
知道該條件 為do while循環
應而n是無效的。
現在，這不會是一個 簡單的單布爾表達式。
我們將不得不結合 兩種不同的表現
使我們的整體狀態。
>> 因此，讓我們只看一個真值表我已經 已經給你，我們的提示
將要處理兩個布爾值。
所以這裡有一個真值表，我 有兩個Booleans--布爾值1和2。
因此，我們必須評估選項 BOOL1和BOOL2或BOOL1或BOOL2。
並只當雙方真實 布爾值評估為true，而所有
或將如此只要之一 兩個布爾值計算結果為true。
OK，所以採取了片刻，暫停此 視頻和消化這個道理表。
我會在這裡等候。
當你回來時，看到 如果你能拼湊
布爾表達式為您 n個條件是無效的輸入。
>> 所以，現在我們有 有效的用戶輸入，讓我們
繼續前進，談談我們如何 可能會得出一半的金字塔。
在這裡，在這個簡單的文本編輯器， 我畫一個左對齊的金字塔。
但我們知道，我們需要我們的 金字塔是正確對齊。
所以，我怎麼可以這樣做？
好吧，我可能會嘗試推 一切都在一旁
通過只把一點點 字符之間。
然後，對於下一 行了，我打算把
一些更多的字符，以推動它一起 和further--等等等等forth--
直到我有右對齊金字塔。
所以，我們有一個正確對齊的金字塔，但 它看起來並不那麼大的點。
但是，我們仍然要 保持那該多好間距。
所以我打算從字面上 插入一些空間。
>> 取而代之的三個點，我會 放一個，兩個，三個空間。
在第二行。
我把一，二位。
而在倒數第二 行，只有一個空間。
在這裡，我有一個右對齊金字塔。
從做在文本的例子 編輯，我們有圖案的想法
我們將用它來繪製半金字塔。
對於每一行，我們做什麼 是我們鍵入一些空間，
然後鍵入一些 散列，然後鍵入
輸入鍵，這 正在創建一個新的行。
所以，現在，我們有，讓我們去 一步，找到一個模式。
>> 所以我要說，對於 本實施例的興趣，
我們正在處理的8的高度。
第一行是要具有兩個 下面7個空格的哈希值。
該second-- 3哈希值，六個空格。
第三row--四個散列值，五 spaces--等等等等
直到我們得到的第n行。
於是，我問你的第n行， 多少散列，我們將不得不
又有多少空間？
所以這是給你找出一個 公式來表示多少哈希
多少空間所需的 第n行，當你有一定的高度。
>> 現在，當你搞清楚了這一點， 小心你是如何索引。
我的意思是說 在日常生活中我們所有人
開始由1算起，通常。
但在CS50和計算機科學 在一般情況下，我們是0的索引。
因此第一行是 0 n作為反對1。
要小心這個時候你 試圖找出你的模式。
所以，現在，讓我們回去如何 我們要引起我們的金字塔。
對於每一行，我們會想 打印空間，打印的哈希值，
然後打印一個新行。
這裡的提示是 詞“為”每一行。
在C中，我們有一個結構 被稱為一個循環，
它包括一個 初始化，條件，更新，
並且循環體。
>> 說我想說的話，你好 世界上50倍，我的for循環
會是這個樣子。
我初始化我的整數為0。
的條件是，I小於50。
然後我的更新僅僅是 通過每一個時間遞增我。
我們也可以使用循環 遍歷的事情。
注意這裡我們怎麼沒有 硬編碼的數，
而是放在變量 高度而不是插入的條件。
所以，我在做什麼這裡我遍歷 在金字塔的每一行。
我可以做一些對每個 排我的循環體內部。
>> 什麼是我們內部做 循環的身體？
嗯，正如我們已經說過，我們在輸出 空間和我們在輸出哈希
我們要打印一個新行。
所以，我的外循環 看起來是這樣。
我遍歷每個行 金字塔的，使用
在這種情況下，高度可變 存儲該金字塔的高度。
該循環的身體裡面，我 要重複打印空間，打印
反复哈希值， 然後打印一個新行。
>> 所以，現在，使用所有的概念 我在這個步行通過津津樂道，
你應該能夠提示 用戶輸入，驗證輸入，
然後繪製一半的金字塔。
>> 我的名字是Zamyla，這是CS50。