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

Pascal过程调用异常:仅绘制单个三角形而非预期垂直序列

Pascal图形绘制问题:仅显示单个三角形的原因排查

问题代码

uses GraphABC;
var 
  x, y, a: integer;

  procedure treug(x, y, a, b: integer);
  begin
    x := 0;
    y := 20;
    line(x, y, x+a, y);
    line(x, y, x, y+b);
    line(x+a, y, x, y+b);
  end;

begin
  writeln('Enter the length of the catheter'); 
  read(a);

  while y < 480 do
  begin
    y := y+1;
    treug(x, y, a, a);
  end;
end. 

问题现象

运行代码后仅显示一个三角形,无法生成沿图形窗口下边界排列的垂直直角三角形序列(预期以x、y为直角顶点坐标)。

核心问题原因

  • 过程参数被强制覆盖:treug过程定义了局部的x、y参数,且在过程内部直接将x固定为0、y固定为20,完全忽略调用时传入的全局变量值。所有调用都在同一坐标绘制三角形,重叠后仅显示一个。
  • 全局变量未初始化:全局变量y启动时未赋值,初始值为随机值,可能导致循环执行次数不符合预期(甚至直接不进入循环)。
  • 步长与绘制逻辑不匹配:循环中y每次仅增加1,即使参数正常传递,三角形也会几乎完全重叠;同时当前绘制的垂直边向上延伸,不符合“沿下边界排列”的需求。

修正示例

uses GraphABC;
var 
  x, y, a: integer;

  procedure treug(x, y, a: integer);
  begin
    // 使用传入坐标作为直角顶点,绘制向下延伸的直角三角形
    line(x, y, x+a, y);       // 水平直角边
    line(x, y, x, y+a);       // 垂直直角边(向下延伸)
    line(x+a, y, x, y+a);     // 斜边
  end;

begin
  writeln('Enter the length of the catheter'); 
  read(a);
  x := 0;
  y := 0; // 初始化起始坐标,从窗口顶部开始排列
  // 确保三角形不超出窗口下边界
  while y < 480 - a do
  begin
    treug(x, y, a);
    y := y + a + 5; // 控制三角形间的间隔,按需调整
  end;
end. 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:50:37