Avatar billede plazm Nybegynder
07. oktober 2005 - 20:10 Der er 3 kommentarer og
1 løsning

Function fejler, en gang i mellem?

Hejsa

Jeg har lavet følgende kode, men jeg er løbet ind i et meget mærkeligt problem. Jeg har ikke ændret noget på koden, men plduselig godtager den ikke nogle strenge længere.
Den kunne modtage 0+((1+2)+3) 0+((5+5)+5) men nu fejler den.
Hvad der så er sjovt er at hvis jeg laver en showmessage på hver anden linie, så kører den lige igennem.

function opdel(Streng: string): double;
var
  a,b,p,r: integer;
  tegn: array of string;
  posstart,posslut: array of integer;
begin
  setlength(tegn,Length(Streng)+1);
  setlength(posstart,1);
  setlength(posslut,1);
  p := 0;
  r := 0;
  for a:=1 to Length(Streng) do
  begin
    tegn[a] := RightStr(LeftStr(Streng,a),1);
    if (tegn[a] = '(') then
    begin
      p := p + 1;
      setlength(posstart,length(posstart) + 1);
      posstart[p] := a;
    end
    else if  (tegn[a] = ')') then
    begin
      setlength(posslut,length(posslut) + 1);
      posslut[p - r] := a;
      r := r + 1;
    end;
  end;
  showmessage('BØF!');
end;
Avatar billede kroning Nybegynder
07. oktober 2005 - 20:58 #1
Jeg får en fejl i linien:
posslut[p - r] := a;
hvilken jo er ganske naturligt da p=2 og r=0 på det tidspunkt og posslut kan kun indeholde 2 integer dvs. på plads [0] og [1].
Hvis det har virket før har du måske haft Range Check slået fra.
Avatar billede plazm Nybegynder
07. oktober 2005 - 21:20 #2
Jeg takker.

Jeg ændrede det til at jeg først tæller antallet af ( og ) og så sætter arrays derefter.
Det virker i hvert fald fint :)

Smider du et svar ?
Avatar billede kroning Nybegynder
07. oktober 2005 - 21:34 #3
Mht. at showmessage på div. linier giver et andet resultat så lyder det meget rigtig, det kan give nogle sjove resultater en gang i mellem hvis Range checking er slået fra så den bør man ikke slå fra før man er 100% sikker på at koden ikke kan give fejl.
Avatar billede plazm Nybegynder
07. oktober 2005 - 21:42 #4
Hehe, ja, men siden jeg tildelte længden på den nye måde, så har der ikk været nogen problemer ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester