Pomoc w wykryciu błędu w kodzie [Pascal]

0

Witam
Mój problem polega na tym, że nie mogę zlokalizować błędu w kodzie, konkretnie chodzi o linijkę:

...
Sum(matrix, x+1, y, path+'1', sum, seq); 
...

i błąd:
project1.lpr(43,8) Error: Illegal expression
project1.lpr(43,8) Fatal: Syntax error, ";" expected but "(" found
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}


type Ttab = array[0..10,0..10] of integer;
     Tpath = array[0..22] of boolean;

var array_:Ttab;
    m,n:integer;
    winnerPath,winnerSequence:string;
    winnerSum:integer=1000000;


const width=10; height=10; min=0; max=100;


  procedure Sum(matrix:Ttab; x:integer; y:integer; path:string; sum:integer; seq:string);
  var s:string;
  begin
    if (x>=width) OR (sum>winnerSum) OR (y<0) then break;
    sum:=sum+matrix[x,y];
    Str(matrix[x,y], s);
    seq:=seq+s+ '+' ;

    if (x=width-1) AND (y=0) AND (sum<winnerSum) then
    begin
      winnerSum:=sum;
      winnerPath:=path;
      winnerSequence:=seq;
    end;


    Sum(matrix, x+1, y, path+'1', sum, seq);
    Sum(matrix, x, y-1, path+'0', sum, seq);
  end;

begin
     Randomize;
     for m:=0 to 10 do
         for n:=0 to 10 do array_[m,n]:=random(max);

     Sum(array_,0, height-1, '', 0,'');

     Writeln(winnerPath);
     Writeln(winnerSum);
     Writeln(winnerSequence);

end.
2

project1.lpr(43,8) Fatal: Syntax error, ";" expected but "(" found

czyli że błąd składni. zamiast ";" dostał "(" więc prawdopodobnie gdzieś zapomniałeś postawić średnika na koncu linii (gdzieś wyżej niż ten błąd zaznacza).

a nie, sorry... juz wiem: maz funkcje "sum()" i zmienna/parametr "sum" typu integer. kompilator nie wie czy chodzi Ci o funkcje czy o zmienną (parametr). Założył, że chodzi Ci o parametr. zmien nazwe parametru lub funkcji i bedzie ok.

0

Dzięki, oczywiście pomogłeś, ale mam jeszcze jeden problem z tą procedurą tylko już trybie wizualnym (Lazarus). Chodzi o to że gdy dodaję elementy do ListView (vsReport) to między elementami jest kilka pustych linii odstępów. W StringGridzie nie ma takiego problemu.

procedure TForm1.Sum(matrix:Ttab; x:integer; y:integer; path:string; suma:integer; seq:string);
var Item: TListItem;
begin
  Item := ListView1.Items.Add;
  if (x>=n) OR  (y<0) then exit;
  suma:=suma+matrix[x,y];
  seq:=seq+IntToStr(matrix[x,y])+ '+' ;
 if (x=n-1) AND (y=0) then
  begin

    winnerSum:=suma;
    winnerPath:=path;
    winnerSequence:=seq;

    Item.Caption := path;
    Item.SubItems.Add(IntToStr(suma));
    Item.SubItems.Add(seq);

    Stringgrid2.Cells[0,a]:=path;
    Stringgrid2.Cells[1,a]:=IntToStr(suma);
    Stringgrid2.Cells[2,a]:=seq;
    StringGrid2.RowCount:=a+2;
    inc(a);

  end;


  Sum(matrix, x+1, y, path+'1', suma, seq);
  Sum(matrix, x, y-1, path+'0', suma, seq);
end;  
1

spójrz w kod. dodajesz item przy kazdym wywolaniu funckji (do tego rekurencyjnie), a wypelniasz go dopiero po spelnieniu dwóch warunków.
przeciez wystarczy przeanalizowac na spokojnie to co podales. skoro pojawia sie za duzo itemow w ListView tzn ze za duzo ich tam wstawiles. nikt inny tam ich nie dodaje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1