You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用case语句替代大量if简化Pascal坐标判断代码?

用Case语句简化Pascal坐标判断代码

你的这段坐标判断代码可以通过构造离散标识值结合case语句来简化——因为Pascal的case分支要求匹配常量表达式,我们可以先把坐标的符号、相对大小转化为固定数值,再用case分支对应不同的方向逻辑,避免嵌套if的混乱。

简化思路

  1. 先单独处理原点(0,0)的特殊情况;
  2. 定义辅助变量记录x、z的符号(1代表正,-1代表负,0代表零);
  3. 根据abs(x)和abs(z)的大小关系,分成三类场景:对角线(绝对值相等)、X轴主导(X绝对值更大)、Z轴主导(Z绝对值更大);
  4. 在每类场景里,用case匹配符号组合的常量值,输出对应方向。

简化后的中文版本代码

program Coordenadas;
var
    x, z : integer;
    x_sign, z_sign : integer;
begin
  writeln('请输入X坐标:');
  readln(x);
  writeln('请输入Z坐标:');
  readln(z);

  // 处理原点特殊情况
  if (x = 0) and (z = 0) then
  begin
    writeln('坐标 0 0 是世界中心。');
    exit;
  end;

  // 获取x的符号标识
  if x > 0 then x_sign := 1
  else if x < 0 then x_sign := -1
  else x_sign := 0;

  // 获取z的符号标识
  if z > 0 then z_sign := 1
  else if z < 0 then z_sign := -1
  else z_sign := 0;

  // 按坐标类型分支处理
  if abs(x) = abs(z) then
  begin
    // 对角线方向:匹配符号组合的常量值
    case x_sign * 10 + z_sign of
      11: writeln(x,' ', z,' 位于东南方向');
      9: writeln(x,' ', z,' 位于东北方向');  // x正、z负
      -9: writeln(x,' ', z,' 位于西南方向'); // x负、z正
      -11: writeln(x,' ', z,' 位于西北方向');// x负、z负
    end;
  end
  else if abs(x) > abs(z) then
  begin
    // X轴主导:仅需判断x的符号
    case x_sign of
      1: writeln(x,' ', z,' 位于东方。');
      -1: writeln(x,' ', z,' 位于西方。');
    end;
  end
  else
  begin
    // Z轴主导:仅需判断z的符号
    case z_sign of
      1: writeln(x,' ', z,' 位于南方。');
      -1: writeln(x,' ', z,' 位于北方。');
    end;
  end;
end.

关键优化点

  • 拆分了原代码的多层嵌套if,把逻辑拆分为三个清晰的大类,每个类内部用case替代嵌套判断,可读性大幅提升;
  • 用符号组合的整数值作为case的匹配条件,完美适配Pascal对case常量的要求;
  • 保留了原代码的所有判断逻辑,同时统一了输入输出的中文表述。

内容的提问来源于stack exchange,提问作者Ya1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:13:24