需求是检察校验位是否正确,74472078-0,但是执行时报错,请各位帮我看看。急用,在线等待。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Splitter1: TSplitter;
        BitBtn1: TBitBtn;
        Button1: TButton;
        Memo1: TMemo;
        Memo2: TMemo;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      Wi : array[0..7] of Integer;
      Ci : array[0..7] of Integer;
      S1,x,K : string;
      I,J,C9: Integer;
      sum : Integer;
    begin
      Wi[0] := 3;
      Wi[1] := 7;
      Wi[2] := 9;
      Wi[3] := 10;
      Wi[4] := 5;
      Wi[5] := 8;
      Wi[6] := 4;
      Wi[7] := 2;
      for I := 0 to Memo1.Lines.Count - 1 do
      begin
        sum := 0;
        S1 := Memo1.Lines[I];
        K := S1[10];
        for J := 0 to 7 do
        begin
          Ci[J] := StrtoInt(S1[J + 1]);
          sum := sum  + Ci[J]*(Wi[J]);
        end;
        C9 := 11 - (sum)mod 11;
        if C9 = 10 then C9 := strtoint(x)
        else if C9 = 11 then C9 := 0;
        if K <> inttostr(C9) then
        Memo2.Lines.Add(S1);
      end;
    end;end.
      

  2.   

    代碼沒出錯啊!!
    但 if C9 = 10 then C9 := strtoint(x) 中 x 沒有附值啊!!
      

  3.   

    K := S1[10];
    居然敢这样访问,sl也不初始化就能这样访问吗????晕
      

  4.   

    if C9 = 10 then C9 := strtoint(x)
    这句中好象x没有预先设定值,如果DELPHI中假定为空字串,则转换时可能就是0值,那与后面的if语名就完全一样了。
      

  5.   

    错误可能在以下几个地方:一是如果MEMO1中没有东西的话会出错
    二是楼上说的,X没有赋值;
    三是MEMO1中不能有空行;
    四是MEMO1中每行字符数不能小于10;
      

  6.   

    字符串的下标是从1开始的吧,我这样写没错吧
    for J := 0 to 7 do
        begin
          Ci[J] := StrtoInt(S1[J + 1]);
          sum := sum  + Ci[J]*(Wi[J]);
        end;
    我觉得可能是类型转换上的错,不知道怎么改。
      

  7.   

    if C9 = 10 then C9 := strtoint(x)
    x没有值,改为try
      if C9 = 10 then C9 := strtoint(x)
    except
    end;看还出错不
      

  8.   

    for J := 0 to 7 do
        begin
          Ci[J] := StrtoInt(S1[J + 1]);
          sum := sum  + Ci[J]*(Wi[J]);
        end;
    这个循环执行以后,sum值应该是比较大的,那么(sum)mod 11的结果就不应该是0或1,不知道我说的对不对。
    另外你所说的执行时出错,不知道错误是什么?
      

  9.   

    我改过了,
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Splitter1: TSplitter;
        BitBtn1: TBitBtn;
        Button1: TButton;
        Memo1: TMemo;
        Memo2: TMemo;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    procedure TForm1.BitBtn1Click(Sender: TObject);
    const y : char = 'x';
    var
      Wi : array[0..7] of Integer;
      Ci : array[0..7] of Integer;
      S1 : string;
      I,C9,J,K: Integer;
      sum : Integer;
    begin
      Wi[0] := 3;
      Wi[1] := 7;
      Wi[2] := 9;
      Wi[3] := 10;
      Wi[4] := 5;
      Wi[5] := 8;
      Wi[6] := 4;
      Wi[7] := 2;
      for I := 0 to Memo1.Lines.Count - 1 do
      begin
        sum := 0;
        S1 := Memo1.Lines[I];
        K := strtoint(S1[10]);
        for J := 0 to 7 do
        begin
          Ci[J] := StrtoInt(S1[J]);
          sum := sum  + Ci[J]*(Wi[J]);
        end;
        C9 := 11 - (sum)mod 11;
        try
        if C9 = 10 then C9 := strtoint(y)
        else if C9 = 11 then C9 := 0;
        except
        end;
        if K <> C9 then
        Memo2.Lines.Add(S1);
      end;
    end;end.
    但还是不行,说有EconvertEdrror 错误。