提问人:Ya1000 提问时间:8/24/2023 最后编辑:Karl KnechtelYa1000 更新时间:8/31/2023 访问量:103
我用了很多“如果”,我想知道我是否可以用“case”代替一些
I have used so many "if" and I would like to know if I can substitute some by "case"
问:
我有这个代码:
program Coordenadas;
var
x,z : integer;
begin
writeln('Ingresa la coordenada en X.');
readln(x);
writeln('Ingresa la coordenada en Z.');
readln(z);
if (x=0) and (z=0) then
writeLn('La coordenada 0 0 es el centro del mundo.')
else if abs(x)=abs(z) then
if x>0 then
if z>0 then
writeln(x,' ', z,' se ubica en el Sureste')
else
writeln(x,' ', z,' se ubica en el Noreste')
else if z>0 then
writeln(x,' ', z,' se ubica en el Suroeste')
else
writeln(x,' ', z,' se ubica en el Noroeste')
else if abs(x)>abs(z) then
if x>0 then
writeln(x,' ', z, ' se ubica en el Este.')
else
writeln(x,' ', z, ' se ubica en el Oeste.')
else if z>0 then
writeln(x,' ', z, ' se ubica en el Sur.')
else
writeln(x,' ', z, ' se ubica en el Norte.')
end.
这似乎太重复了。我可以缩短它吗,也许通过使用?case
答:
[...]我想知道如何用“案例”缩短它 [...]
Pascal – 根据 ISO 标准 7185 “Standard Pascal” 和 10206 “Extended Pascal” 的定义 – 具有数据类型 。
值是 范围内的整数值。
因此integer
integer
−maxInt‥+maxInt
case myIntegerExpression of
−maxInt‥+maxInt:
writeLn('Ya1k');
end;
将始终打印,而不管 的具体值如何(假设它被定义)。
在您的例子中,您可以编写多个不重叠的 -label,以匹配非正值和 。Ya1k
myIntegerExpression
case
−maxInt‥0
integer
1‥maxInt
但是,这不一定会减少代码的长度,但可能会变得更可读。 请记住,您是为人类编写代码的。 人类应该能够阅读和理解您的代码。 这是一个很小的、(几乎)可以忽略不计的问题,一台机器,一台计算机,也需要能够处理你的代码。
[...]我测试了它并且已经工作了,但我觉得它太重复了。[...]
一般来说,您使用例程来执行重复性任务。
在您的特定情况下,您不使用(最终没有)是很了不起的。
您可以打印一个通用前缀,并用 写出最后一个单词。write
Ln
write
writeLn
writeln('Ingresa la coordenada en X.'); readln(x); writeln('Ingresa la coordenada en Z.'); readln(z);
read
/readLn
接受多个变量。
您可以将两个提示合并为一个提示。
建议您的提示消息告诉用户所有详细信息。
特别是,您的提示应强调只有值(无值)是有效的,因为离散坐标系不太常见(= 预期值较低)。
同样,为人类编写程序。integer
real
用 Pascal 代替写作
if (x=0) and (z=0) then
它(顺便说一句,更简洁,)更习惯地写
if [x, z] = [0] then
至少数学家经常使用集合。 (但请记住,Pascal 仅支持具有序数基类型的集合。
您的计划有九个不同的结果。在不跳过换行符的情况下,只有如此简洁,您才能做到。冒着实际增加重复的风险,您可以减少缩进,这可能使遵循程序的逻辑变得更加容易。
if A then
if B then
V
else
W
else if C then
if D then
X
else
Y
else
Z
等同于:
if A and B then
V
else if A then
W
else if C and D then
X
else if C then
Y
else
Z
评论