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

如何在Pascal二维数组中正确删除元素以避免平均值计算错误?

解决方案

针对你用0标记删除元素导致平均值计算错误的问题,这里有几个实用的解决办法:

方法1:使用生理指标不可能出现的特殊值作为删除标记

因为血压、脉搏这类生理指标都是正数,你可以用负数(比如-1)来标记已删除的元素,计算平均值时跳过这些标记值。

修改删除逻辑:

把原代码里的删除部分:

Else
  Begin
    Mesures[jour, param] := 0;
  End;

改成:

Else
  Begin
    Mesures[jour, param] := -1; // 用-1标记已删除
  End;

计算平均值的逻辑调整:

计算某参数(比如收缩压)的平均值时,遍历每天的数据,只统计值不为-1的项:

Function CalculerMoyenne(param: Integer): Real;
Var
  jour: Integer;
  somme: Integer;
  compte: Integer;
Begin
  somme := 0;
  compte := 0;
  For jour := 1 To Nbre_J Do
  Begin
    If Mesures[jour, param] <> -1 Then // 跳过已删除的标记值
    Begin
      somme := somme + Mesures[jour, param];
      compte := compte + 1;
    End;
  End;
  If compte > 0 Then
    CalculerMoyenne := somme / compte
  Else
    CalculerMoyenne := 0; // 无有效数据时返回0或按需处理
End;

方法2:维护一个独立的有效性标记数组

新增一个布尔类型的二维数组,专门记录每个测量值是否有效。删除时标记为无效,修改或新增时标记为有效,计算平均值时只统计有效项。

步骤1:声明有效性数组

在全局或合适的位置声明:

Var
  Mesures: array[1..Nbre_J, 1..Max_Param] of Integer;
  MesuresValides: array[1..Nbre_J, 1..Max_Param] of Boolean; // 新增有效性标记

初始化时把所有MesuresValides[jour, param]设为True(默认所有数据有效)。

步骤2:修改ModifierSupprimerMesure过程

修改删除和修改的逻辑:

If choix = 'M' Then
  Begin
    Write('Entrez la nouvelle valeur : ');
    read(Mesures[jour, param]);
    MesuresValides[jour, param] := True; // 修改后标记为有效
  End
Else
  Begin
    MesuresValides[jour, param] := False; // 删除时标记为无效,原数值可保留或清零
    // Mesures[jour, param] := 0; // 可选:清零原数值,不影响统计
  End;

步骤3:计算平均值的逻辑

Function CalculerMoyenne(param: Integer): Real;
Var
  jour: Integer;
  somme: Integer;
  compte: Integer;
Begin
  somme := 0;
  compte := 0;
  For jour := 1 To Nbre_J Do
  Begin
    If MesuresValides[jour, param] Then // 只统计有效项
    Begin
      somme := somme + Mesures[jour, param];
      compte := compte + 1;
    End;
  End;
  If compte > 0 Then
    CalculerMoyenne := somme / compte
  Else
    CalculerMoyenne := 0;
End;

方法3:动态调整数组(适合动态数组场景)

如果你的Mesures是动态数组,可以真正删除元素,把后续元素前移。但这种方法需要调整数组的长度,且对二维数组来说操作稍复杂,适合需要严格缩减数组大小的场景。比如针对某一天的参数列表删除元素,但考虑到你的结构是[日, 参数]的二维数组,这种方法实用性不如前两种,除非你的数据结构是按参数分组的一维动态数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:20