Getting Runtime error 2 in Pascal Program - Programmers Heaven

#### Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

# Getting Runtime error 2 in Pascal Program

Posts: 2Member
I am trying to solve this puzzle:

LOCK + CANAL + CACHE = HIDDEN

Each letter represents a number from 0 to 9. There is only one solution.

I have found some code somewhere else to solve a problem like these and made some modifications but when i run the program i get a runtime error 2. The code is written in Pascal.
Can someone tell what i'm doing wrong? I have very few programming experience.

[code]program Hidden;

{Solve the cryptogram LOCK
CANAL
CACHE
-----
HIDDEN}

var l,o,c,k,a,n,h,e,i,d :longint;
s,outstr :string;
fout :text;

procedure TryOne;
var x,y :longint;
begin
l:=ord(outstr[0])-48;
o:=ord(outstr[1])-48;
c:=ord(outstr[2])-48;
k:=ord(outstr[3])-48;
a:=ord(outstr[4])-48;
n:=ord(outstr[5])-48;
h:=ord(outstr[6])-48;
e:=ord(outstr[7])-48;
i:=ord(outstr[8])-48;
d:=ord(outstr[9])-48;
if 1001*l + 200*o + 20110*c + k + 2010*a + 100*n + 20*h + e
= 100000*h + 10000*i + 1100*d + 10*e + n
then begin
assign(fout,'HIDDEN.TXT'); append(fout);
writeln(fout,'l=',l);
writeln(fout,'o=',o);
writeln(fout,'c=',c);
writeln(fout,'k=',k);
writeln(fout,'a=',a);
writeln(fout,'n=',n);
writeln(fout,'h=',h);
writeln(fout,'e=',e);
writeln(fout,'i=',i);
writeln(fout,'d=',d);
writeln(fout);
writeln(fout,' ',l,o,c,k);
writeln(fout,' ',c,a,n,a,l);
writeln(fout,' ',c,a,c,h,e);
writeln(fout,'--------');
writeln(fout,h,i,d,d,e,n);
writeln(fout);
writeln(' ', l,o,c,k);
writeln(' ', c,a,n,a,l);
writeln(' ', c,a,c,h,e);
writeln('--------');
writeln(h,i,d,d,e,n);
close(fout);
end;
end;

procedure Permute_it(s :string);
var ss :string;
i,len :integer;
begin
len:=length(s);
if (len=0) then
TryOne
else for i:=1 to len do
begin
outstr:=outstr+s[i];
ss:=s;
delete(ss,i,1);
Permute_it(ss);
Delete(outstr,length(outstr),1);
end;
end;

begin
outstr:='';
s:='0123456789';
Permute_it(s);
end.[/code]

• Hollywood, FlPosts: 26Member
The [color=Purple]2[/color] error is "File not found". Change the [color=Blue]append[/color] function to [color=Red]rewrite[/color]. Better yet, move the assign and rewrite to the beginning of the main part of the program. Also the close right before the last end statement.
• Hollywood, FlPosts: 26Member
I rewrote some of your program and tested it out. I also corrected your [color=Orange]if[/color] statement to compute the equality of the 3 words against the 1. I also added in totals for how many times it was tried and how many succeeded.
[code][{Solve the cryptogram LOCK
CANAL
CACHE
-----
HIDDEN

found on Programmer's Heaven that somebody wanted some help with
on this date 2012-Aug-25

revised by Carl W. Skipworth Rev Date 2012-Aug-28 }

program Hidden;

const
nz : integer = ord( '0' ); { number zero( in character form ) }
ten = 10; { worth ten }
oh = 100; { worth one hundred }
ot = 1000; { worth one thousand }
tt = 10000; { worth ten thousand }
ht = 100000; { worth hundred thousand }

type
str10 = string[10];

var
l, o, c, k, a, n, h, e, i, d : integer;
s, outstr : str10;
fout : text;
attempts : longint;
successes : integer;

procedure TryOne;

begin
Inc( attempts );
l := ord( outstr[ 1] ) - nz;
o := ord( outstr[ 2] ) - nz;
c := ord( outstr[ 3] ) - nz;
k := ord( outstr[ 4] ) - nz;
a := ord( outstr[ 5] ) - nz;
n := ord( outstr[ 6] ) - nz;
h := ord( outstr[ 7] ) - nz;
e := ord( outstr[ 8] ) - nz;
i := ord( outstr[ 9] ) - nz;
d := ord( outstr[10] ) - nz;
if l * ot + o * oh + c * ten + k + { 1st word }
c * tt + a * ot + n * oh + a * ten + l + { 2nd word }
c * tt + a * ot + c * oh + h * ten + e = { 3rd word }
h * ht + i * tt + d * ot + d * oh + e * ten + n then begin
writeln( fout, ' l = ',l );
writeln( fout, ' o = ',o );
writeln( fout, ' c = ',c );
writeln( fout, ' k = ',k );
writeln( fout, ' a = ',a );
writeln( fout, ' n = ',n );
writeln( fout, ' h = ',h );
writeln( fout, ' e = ',e );
writeln( fout, ' i = ',i );
writeln( fout, ' d = ',d );
writeln( fout );
writeln( fout,' ',l,o,c,k );
writeln( fout,' ',c,a,n,a,l );
writeln( fout,' ',c,a,c,h,e );
writeln( fout,' --------' );
writeln( fout,' ',h,i,d,d,e,n );
writeln( fout);
writeln;
writeln( ' ',l,o,c,k );
writeln( ' ',c,a,n,a,l );
writeln( ' ',c,a,c,h,e );
writeln( ' --------' );
writeln( ' ', h,i,d,d,e,n );
Inc( successes )
end
end;

procedure Permute_it ( s : str10 );

var
ss : str10;
i, len : integer;

begin
len := length( s );
if len = 0 then
TryOne
else

for i := 1 to len do begin
outstr := outstr + s[i];
ss := s;
delete( ss, i, 1 );
Permute_it( ss );
Delete( outstr, length( outstr ), 1 )
end

end;

begin
assign( fout, 'B:HIDDEN.TXT');
rewrite( fout );
attempts := 0;
successes := 0;
outstr := '';
s := '0123456789';
Permute_it( s );
writeln( fout, ' attempts = ', attempts, ' successes = ', successes );
writeln( ' attempts = ', attempts, ' successes = ', successes );
close( fout )
end./code]