提问人:Heidihale58 提问时间:5/3/2023 最后编辑:trincotHeidihale58 更新时间:5/4/2023 访问量:74
While 和 Do-While 循环
While and Do-While Loops
问:
这是使用 WHILE 和 DO 的正确方法吗?WHILE 循环?
这两个循环示例是另一个用户向我建议的,所以,我想我会把它们放到我的伪代码中,看看它们的外观。
编写的伪代码用于计算房间面积以购买油漆罐的程序。
Start
Display "Enter room length"
Input roomLength
Display "Enter room width"
Input roomWidth
Display "Enter room height"
Input roomHeight
Display "Enter number of doors"
// Use a WHILE loop to validate input for doors
While doors < 0 Display "Invalid input. Please enter a positive number of doors:"
Input doors
End While
Display "Enter number of windows"
Do If windows < 0 Then
Display "Invalid input. Please enter a positive number of windows:"
Input windows
End If Loop While windows < 0
Set paintCans = (L x W x H) - (20 sq. ft. per door & 15 sq. ft. per window) / (400 sq. ft. per gallon)
Display "Total cans of paint is", + paintCans
End
答:
自己浏览该代码:
在第一次评估时:门的价值是什么?我们在这里看到的片段没有给我们任何线索,所以这取决于实际的语言(这里的标签表明它是伪代码)。doors < 0
如果默认值为 ,您将永远无法输入门数,因为条件永远不会为真。0
doors < 0
否则,如果它默认为 -1,则在用户输入任何数字之前显示错误消息。不太人性化。
如果未初始化的值默认为其他值,并且/或无法计算,则在计算第一个条件时可能会遇到错误情况。while
第二个循环的类似步骤:结果将取决于默认值,并且在输入任何值之前显示错误消息。
我想这意味着,这不是使用这种循环的正确方法。虽然一般来说,你可以让两种方式都起作用。
我决定在我的伪代码中使用 While 循环来输入门窗,并为该区域添加了一个 If-then-else 语句。希望我正确地编写了代码。
Start
DECLARE REAL roomLength, roomWidth, roomHeight, area
DECLARE INTEGER doors, windows // Integer variables will be whole numbers
DISPLAY "Enter room length"
INPUT roomLength
DISPLAY "Enter room width"
INPUT roomWidth
DISPLAY "Enter room height"
INPUT roomHeight
DISPLAY "Enter number of doors"
// Use a WHILE loop to validate input for doors
WHILE doors < 1
DISPLAY "Invalid input. Please enter a positive number of doors:"
INPUT doors
END WHILE
DISPLAY "Enter number of windows"
// Use WHILE loop to validate input for windows
While windows < 1
DISPLAY "Invalid input. Please enter a positive number of windows:"
INPUT windows
END WHILE
Set area = (L x W x H) - (20 sq. ft. per door & 15 sq. ft. per window)
// USE IF-THEN-ELSE statement for square footage
IF area is <= 400 square feet Then
DISPLAY “One can of paint is needed”
Else
DISPLAY “Two cans of paint are needed”
END IF
END
评论
这个问题可以用许多不同的方式来回答。例如,我们可以在一个数组上有一个循环,该数组具有 5 个不同的输入提示,每个提示都获取输入,并将这些输入收集到第二个数组中。
内部循环可以用于确保输入值不是负数。
只要用户愿意,外部循环就可以用于重复程序。
请注意,您的油漆罐数量公式不正确。长 x 宽 x 高是一个体积,而不是一个表面。然而,我认为你想粉刷墙壁,而不是用油漆填满整个房间。有两个(相对)墙的表面为 L x H,两个(相对)墙的表面为 W x H,因此公式应以 2 x (L + W) x H 开头。
下面的程序可能有点矫枉过正,但至少它显示了一些可以使用循环的选项,以及不同类型的循环:
PROGRAM
SET sq_ft_per_door := 20
SET sq_ft_per_window := 15
SET sq_ft_per_gallon := 400
SET metrics := ['room length', 'room width', 'room height',
'number of doors', 'number of windows']
DO // Each iteration is a new input/output session
SET values := [0, 0, 0, 0, 0]
FOR i := 1 TO 5 // To input 5 values
DISPLAY 'Enter ', metrics[i]
INPUT value[i]
WHILE value[i] < 0 // Not OK
DISPLAY 'Invalid input. Please enter a positive ', metrics[i]
INPUT value[i]
END WHILE
END FOR
SET sq_ft_to_paint := 2 * (values[1] + values[2]) * value[3]
- sq_ft_per_door * values[4]
- sq_ft_per_window * values[5]
SET num_gallons := sq_ft_to_paint / sq_ft_per_gallon
DISPLAY 'Total cans of paint is', paintCans
DISPLAY 'Do you want to repeat the calculation with new values? (Y/N)'
INPUT answer
REPEAT WHILE answer = 'Y'
END
评论