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