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

如何定位并修复Pascal代码中数组元素全为0的错误?

问题修复方案

问题根源

Pascal中参数默认采用值传递:当你把主程序的数组X传入Read1d过程时,程序会创建一个数组副本,你输入的元素全部存在这个副本里,主程序的原数组X始终是初始的0值,这就导致后续输出和查找都不符合预期。

修复步骤

  1. 修改Read1d的数组参数为引用传递:
    必须将X参数声明为Var类型,这样过程才能直接操作主程序中的原数组,而不是副本。
  2. 其他读写数组的过程/函数用Const优化:
    对于Write1d、Nbev、RechV这类只读取数组、不修改的过程/函数,把数组参数声明为Const类型,既可以避免不必要的数组拷贝(提升效率),也能防止意外修改数组。

修复后的完整代码

Program MainProgram;
Uses Crt;

Const
  n = 100;

Type
  TypeIn = 1..n;
  Array1d = Array[TypeIn] Of Integer;

Procedure Read1d(Var Tai: TypeIn; Var X: Array1d);
Var
  i: TypeIn;
Begin
  Writeln('Enter the size of the array: ');
  Readln(Tai);
  For i := 1 To Tai Do
  Begin
    Write('X[', i, '] = ');
    Read(X[i]);
    Readln; // 读取输入后的换行符,避免后续ReadLn读取空值
  End;
End;

Procedure Write1d(Var Tai: TypeIn; Const X: Array1d);
Var
  i: TypeIn;
Begin
  Write(' | ');
  For i := 1 To Tai Do
  Begin
    Write(X[i], ' | ');
  End;
  WriteLn;
End;

Function Nbev(Tai:TypeIn; Const X: Array1d ; V:Integer):Integer;
var i, cpt:Integer;
Begin
  cpt := 0;
  for i := 1 to tai do
  Begin
    if X[i] = V then 
      cpt := cpt + 1; 
  End;
  Nbev := cpt;
End;

Function RechV(Tai: TypeIn; Const X: Array1d; V: Integer): Boolean;
Var
  i: TypeIn;
Begin
  RechV := False; // 直接给函数名赋值,兼容部分编译器对Result的支持差异
  For i := 1 To Tai Do
  Begin
    If X[i] = V Then
    Begin
      RechV := True;
      Break;
    End;
  End;
End;

Var
  Tai: TypeIn;
  X: Array1d;
  V: Integer;

Begin
  textcolor(green);
  textbackground(black);
  ClrScr;
  Read1d(Tai, X);
  WriteLn;
  Write1d(Tai, X);
  Writeln('What''s the element you are looking for: ');
  Readln(V);

  If RechV(Tai, X, V) Then
  Begin
    Writeln('Element found.');
    WriteLn('出现次数: ', Nbev(Tai, X, V));
  End
  Else
    Writeln('Element not found.');
End.

额外优化说明

  • 在Read1d的Read(X[i])后添加了Readln,用来读取输入数字后的换行符,避免后续的Readln(V)直接读取空行导致异常。
  • 把RechV函数里的Result赋值改成直接给函数名赋值,兼容部分对Result关键字支持不完善的Pascal编译器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:43:17