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
相关产品推荐
相关产品推荐

