1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 陳ZAMYLA:這是一個我,Zamyla。 3 00:00:02,500 --> 00:00:06,910 今天馬里奧,我們將要 圖紙馬里奧半金字塔 4 00:00:06,910 --> 00:00:08,290 爬了​​起來。 5 00:00:08,290 --> 00:00:11,570 >> 所以,讓我們來談談我們 待辦的這個問題。 6 00:00:11,570 --> 00:00:13,610 我們會想 提示和驗證 7 00:00:13,610 --> 00:00:18,290 用戶對於如何有效輸入 高,他們希望馬里奧的金字塔是。 8 00:00:18,290 --> 00:00:20,090 接下來,我們要畫它。 9 00:00:20,090 --> 00:00:24,870 因此,讓我們開始使用提示和 驗證他們的用戶輸入。 10 00:00:24,870 --> 00:00:27,640 >> 我們可以利用的 CS50庫函數 11 00:00:27,640 --> 00:00:31,160 得到INT將確保 用戶輸入的整數。 12 00:00:31,160 --> 00:00:35,730 任何正整數,負 整數,0號都是公平的遊戲。 13 00:00:35,730 --> 00:00:41,670 否則,用戶將被提示 重試,直到他們輸入一個有效的整數。 14 00:00:41,670 --> 00:00:44,210 現在雖然GET INT呢 很多關於我們的工作 15 00:00:44,210 --> 00:00:46,730 在確保 用戶給了我們一個整數, 16 00:00:46,730 --> 00:00:50,760 我們仍然需要應用一些 上額外的約束。 17 00:00:50,760 --> 00:00:56,420 畢竟,我們不能有馬里奧攀岩 高度負12的一半的金字塔。 18 00:00:56,420 --> 00:00:59,040 >> 除此之外,該 問題說明 19 00:00:59,040 --> 00:01:02,490 說,我們只能 讓馬里奧爬 20 00:01:02,490 --> 00:01:06,940 高度的0到23之間的金字塔。 21 00:01:06,940 --> 00:01:11,120 好了,這意味著我們需要 連續提示用戶 22 00:01:11,120 --> 00:01:14,320 給我們一個有效 數只有不斷 23 00:01:14,320 --> 00:01:17,120 一旦他們已經給了我們一個有效的高度。 24 00:01:17,120 --> 00:01:18,720 我們怎麼辦呢? 25 00:01:18,720 --> 00:01:23,760 >> 那麼,連續的過程給我們 的loops--做某事的想法 26 00:01:23,760 --> 00:01:24,720 重複。 27 00:01:24,720 --> 00:01:28,220 在C一根環路一段時間 循環將持續 28 00:01:28,220 --> 00:01:33,480 只要執行循環體 給定的條件計算為真。 29 00:01:33,480 --> 00:01:36,200 一旦這個條件 計算結果為false, 30 00:01:36,200 --> 00:01:39,770 該計劃將繼續進行 以後無論發生什麼事。 31 00:01:39,770 --> 00:01:43,180 因此,while循環的一種方式 確保我們不斷 32 00:01:43,180 --> 00:01:45,320 提示輸入有效用戶輸入。 33 00:01:45,320 --> 00:01:50,070 一旦他們給我們一個有效的輸入, 我們將繼續成何體統來。 34 00:01:50,070 --> 00:01:54,380 我們知道,我們要問 用戶至少一次輸入。 35 00:01:54,380 --> 00:01:59,200 所以,現在我們來到的一姐 while循環,這是do while循環。 36 00:01:59,200 --> 00:02:02,650 >> do-whil​​e循環將執行 循環體至少一次。 37 00:02:02,650 --> 00:02:06,150 因此,沒有檢查的情況下, 它將執行循環體。 38 00:02:06,150 --> 00:02:09,750 然後檢查情況看 是否需要重演。 39 00:02:09,750 --> 00:02:13,080 這是在方便的時候 我們正在驗證用戶輸入。 40 00:02:13,080 --> 00:02:15,830 我們知道,我們要去 問他們至少一次。 41 00:02:15,830 --> 00:02:18,780 因此,一個do while循環可能 是這個樣子。 42 00:02:18,780 --> 00:02:20,090 我們有一個整數n。 43 00:02:20,090 --> 00:02:22,760 而做的內部 while循環,我們馬上 44 00:02:22,760 --> 00:02:24,750 提示整數用戶。 45 00:02:24,750 --> 00:02:29,740 如果n是無效的,那麼我們就會促使他們 一次一次又一次,直到他們 46 00:02:29,740 --> 00:02:31,820 給我們有效的整數。 47 00:02:31,820 --> 00:02:37,440 最後,當n是一個有效的投入,我們將 繼續我們的節目的其餘部分。 48 00:02:37,440 --> 00:02:41,830 >> 因此,讓我們回到規範和檢查 什麼有效的輸入條件 49 00:02:41,830 --> 00:02:43,670 將是。 50 00:02:43,670 --> 00:02:48,090 的有效高度要 介於0和23(含)之間。 51 00:02:48,090 --> 00:02:53,350 因此無效的高度要 小於0或大於23。 52 00:02:53,350 --> 00:02:56,420 所以請記住,設計 你的病情仔細, 53 00:02:56,420 --> 00:02:58,660 知道該條件 為do while循環 54 00:02:58,660 --> 00:03:01,470 應而n是無效的。 55 00:03:01,470 --> 00:03:05,080 現在,這不會是一個 簡單的單布爾表達式。 56 00:03:05,080 --> 00:03:07,630 我們將不得不結合 兩種不同的表現 57 00:03:07,630 --> 00:03:09,900 使我們的整體狀態。 58 00:03:09,900 --> 00:03:13,290 >> 因此,讓我們只看一個真值表我已經 已經給你,我們的提示 59 00:03:13,290 --> 00:03:15,200 將要處理兩個布爾值。 60 00:03:15,200 --> 00:03:19,620 所以這裡有一個真值表,我 有兩個Booleans--布爾值1和2。 61 00:03:19,620 --> 00:03:27,050 因此,我們必須評估選項 BOOL1和BOOL2或BOOL1或BOOL2。 62 00:03:27,050 --> 00:03:31,980 並只當雙方真實 布爾值評估為true,而所有 63 00:03:31,980 --> 00:03:37,280 或將如此只要之一 兩個布爾值計算結果為true。 64 00:03:37,280 --> 00:03:41,450 OK,所以採取了片刻,暫停此 視頻和消化這個道理表。 65 00:03:41,450 --> 00:03:42,930 我會在這裡等候。 66 00:03:42,930 --> 00:03:45,760 當你回來時,看到 如果你能拼湊 67 00:03:45,760 --> 00:03:51,910 布爾表達式為您 n個條件是無效的輸入。 68 00:03:51,910 --> 00:03:54,420 >> 所以,現在我們有 有效的用戶輸入,讓我們 69 00:03:54,420 --> 00:03:58,710 繼續前進,談談我們如何 可能會得出一半的金字塔。 70 00:03:58,710 --> 00:04:03,410 在這裡,在這個簡單的文本編輯器, 我畫一個左對齊的金字塔。 71 00:04:03,410 --> 00:04:07,050 但我們知道,我們需要我們的 金字塔是正確對齊。 72 00:04:07,050 --> 00:04:08,650 所以,我怎麼可以這樣做? 73 00:04:08,650 --> 00:04:11,440 好吧,我可能會嘗試推 一切都在一旁 74 00:04:11,440 --> 00:04:14,880 通過只把一點點 字符之間。 75 00:04:14,880 --> 00:04:16,779 然後,對於下一 行了,我打算把 76 00:04:16,779 --> 00:04:20,970 一些更多的字符,以推動它一起 和further--等等等等forth-- 77 00:04:20,970 --> 00:04:23,360 直到我有右對齊金字塔。 78 00:04:23,360 --> 00:04:27,780 所以,我們有一個正確對齊的金字塔,但 它看起來並不那麼大的點。 79 00:04:27,780 --> 00:04:30,680 但是,我們仍然要 保持那該多好間距。 80 00:04:30,680 --> 00:04:35,260 所以我打算從字面上 插入一些空間。 81 00:04:35,260 --> 00:04:39,420 >> 取而代之的三個點,我會 放一個,兩個,三個空間。 82 00:04:39,420 --> 00:04:40,370 在第二行。 83 00:04:40,370 --> 00:04:42,640 我把一,二位。 84 00:04:42,640 --> 00:04:45,370 而在倒數第二 行,只有一個空間。 85 00:04:45,370 --> 00:04:48,290 在這裡,我有一個右對齊金字塔。 86 00:04:48,290 --> 00:04:52,170 從做在文本的例子 編輯,我們有圖案的想法 87 00:04:52,170 --> 00:04:54,590 我們將用它來繪製半金字塔。 88 00:04:54,590 --> 00:04:58,080 對於每一行,我們做什麼 是我們鍵入一些空間, 89 00:04:58,080 --> 00:05:00,170 然後鍵入一些 散列,然後鍵入 90 00:05:00,170 --> 00:05:03,020 輸入鍵,這 正在創建一個新的行。 91 00:05:03,020 --> 00:05:07,770 所以,現在,我們有,讓我們去 一步,找到一個模式。 92 00:05:07,770 --> 00:05:10,170 >> 所以我要說,對於 本實施例的興趣, 93 00:05:10,170 --> 00:05:12,480 我們正在處理的8的高度。 94 00:05:12,480 --> 00:05:17,100 第一行是要具有兩個 下面7個空格的哈希值。 95 00:05:17,100 --> 00:05:20,020 該second-- 3哈希值,六個空格。 96 00:05:20,020 --> 00:05:24,260 第三row--四個散列值,五 spaces--等等等等 97 00:05:24,260 --> 00:05:26,350 直到我們得到的第n行。 98 00:05:26,350 --> 00:05:31,540 於是,我問你的第n行, 多少散列,我們將不得不 99 00:05:31,540 --> 00:05:33,120 又有多少空間? 100 00:05:33,120 --> 00:05:37,000 所以這是給你找出一個 公式來表示多少哈希 101 00:05:37,000 --> 00:05:42,020 多少空間所需的 第n行,當你有一定的高度。 102 00:05:42,020 --> 00:05:46,060 >> 現在,當你搞清楚了這一點, 小心你是如何索引。 103 00:05:46,060 --> 00:05:49,170 我的意思是說 在日常生活中我們所有人 104 00:05:49,170 --> 00:05:51,540 開始由1算起,通常。 105 00:05:51,540 --> 00:05:55,950 但在CS50和計算機科學 在一般情況下,我們是0的索引。 106 00:05:55,950 --> 00:06:00,620 因此第一行是 0 n作為反對1。 107 00:06:00,620 --> 00:06:04,550 要小心這個時候你 試圖找出你的模式。 108 00:06:04,550 --> 00:06:07,570 所以,現在,讓我們回去如何 我們要引起我們的金字塔。 109 00:06:07,570 --> 00:06:12,300 對於每一行,我們會想 打印空間,打印的哈希值, 110 00:06:12,300 --> 00:06:14,050 然後打印一個新行。 111 00:06:14,050 --> 00:06:19,160 這裡的提示是 詞“為”每一行。 112 00:06:19,160 --> 00:06:21,470 在C中,我們有一個結構 被稱為一個循環, 113 00:06:21,470 --> 00:06:25,250 它包括一個 初始化,條件,更新, 114 00:06:25,250 --> 00:06:26,790 並且循環體。 115 00:06:26,790 --> 00:06:31,360 >> 說我想說的話,你好 世界上50倍,我的for循環 116 00:06:31,360 --> 00:06:32,880 會是這個樣子。 117 00:06:32,880 --> 00:06:35,480 我初始化我的整數為0。 118 00:06:35,480 --> 00:06:38,230 的條件是,I小於50。 119 00:06:38,230 --> 00:06:42,350 然後我的更新僅僅是 通過每一個時間遞增我。 120 00:06:42,350 --> 00:06:45,140 我們也可以使用循環 遍歷的事情。 121 00:06:45,140 --> 00:06:47,820 注意這裡我們怎麼沒有 硬編碼的數, 122 00:06:47,820 --> 00:06:51,820 而是放在變量 高度而不是插入的條件。 123 00:06:51,820 --> 00:06:56,420 所以,我在做什麼這裡我遍歷 在金字塔的每一行。 124 00:06:56,420 --> 00:07:00,160 我可以做一些對每個 排我的循環體內部。 125 00:07:00,160 --> 00:07:02,350 >> 什麼是我們內部做 循環的身體? 126 00:07:02,350 --> 00:07:07,120 嗯,正如我們已經說過,我們在輸出 空間和我們在輸出哈希 127 00:07:07,120 --> 00:07:09,480 我們要打印一個新行。 128 00:07:09,480 --> 00:07:11,950 所以,我的外循環 看起來是這樣。 129 00:07:11,950 --> 00:07:15,070 我遍歷每個行 金字塔的,使用 130 00:07:15,070 --> 00:07:18,890 在這種情況下,高度可變 存儲該金字塔的高度。 131 00:07:18,890 --> 00:07:22,870 該循環的身體裡面,我 要重複打印空間,打印 132 00:07:22,870 --> 00:07:26,730 反复哈希值, 然後打印一個新行。 133 00:07:26,730 --> 00:07:31,010 >> 所以,現在,使用所有的概念 我在這個步行通過津津樂道, 134 00:07:31,010 --> 00:07:35,210 你應該能夠提示 用戶輸入,驗證輸入, 135 00:07:35,210 --> 00:07:37,370 然後繪製一半的金字塔。 136 00:07:37,370 --> 00:07:41,510 >> 我的名字是Zamyla,這是CS50。 137 00:07:41,510 --> 00:07:43,167