Pascal

Moderators: None (Apply to moderate this forum)
Number of threads: 4106
Number of posts: 14016

This Forum Only
Post New Thread
Single Post View       Linear View       Threaded View      f

Report
Getting Runtime error 2 in Pascal Program Posted by repmeer on 26 Aug 2012 at 4:15 AM
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.

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.

Report
Re: Getting Runtime error 2 in Pascal Program Posted by quikcarlx on 27 Aug 2012 at 7:39 PM
The 2 error is "File not found". Change the append function to rewrite. 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.
Report
Re: Getting Runtime error 2 in Pascal Program Posted by quikcarlx on 29 Aug 2012 at 2:44 PM
I rewrote some of your program and tested it out. I also corrected your if 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.
[{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]



 

Recent Jobs

Official Programmer's Heaven Blogs
Web Hosting | Browser and Social Games | Gadgets

Popular resources on Programmersheaven.com
Assembly | Basic | C | C# | C++ | Delphi | Flash | Java | JavaScript | Pascal | Perl | PHP | Python | Ruby | Visual Basic
© Copyright 2011 Programmersheaven.com - All rights reserved.
Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
Operated by CommunityHeaven, a BootstrapLabs company.