陳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。