我用了很多“if”,我想知道是否可以用“case”来代替一些

问题描述 投票:0回答:1

我是 Pascal 的新手,为此我想知道如何用“case”来缩短它 你好! Soy nuevo con Pascal y por eso me gustaría saber cómo acortar esto, tal vez con “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.

我测试了它并且已经可以工作,但是我觉得它太重复了。 Lo probé y ya funciona, pero siento que es muy repetitivo.

pascal freepascal
1个回答
0
投票

[…]我想知道如何用“case”来缩短它[…]

Pascal – 由 ISO 标准 7185“标准 Pascal”和 10206“扩展 Pascal”定义 – 具有数据类型

integer
integer
值是
−maxInt‥+maxInt
范围内的整数值。 这样

case myIntegerExpression of
    −maxInt‥+maxInt:
        writeLn('Ya1k');
end;

always打印

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 仅支持具有序数基类型的集合。)

© www.soinside.com 2019 - 2024. All rights reserved.