Recent

Author Topic: compile failed  (Read 9037 times)

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
compile failed
« on: November 28, 2015, 05:28:21 pm »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:INTEGER;VAR A:BOOLEAN;
  3. PROCEDURE RING(K:INTEGER);
  4. BEGIN
  5.         A:=K MOD 2=0;
  6.         IF K=1 AND A=FALSE THEN BEGIN
  7.                 WRITE(1,' ');
  8.                 EXIT;
  9.                 END;
  10.         IF K=2 AND A=TRUE THEN BEGIN
  11.                 WRITE(1,'&',2,' ');
  12.                 EXIT;
  13.                 END;
  14.         RING(K-2);
  15.         WRITE(K,' ');
  16.         RING(K-2);
  17.         RING(K-1);
  18. END;
  19. BEGIN
  20.         READLN(N);
  21.         RING(N);
  22. END.
  23.  
what's wrong with my program?

balazsszekely

  • Guest
Re: compile failed
« Reply #1 on: November 28, 2015, 05:36:22 pm »
Code: Pascal  [Select][+][-]
  1. IF (K = 1) AND (A = FALSE) THEN BEGIN


molly

  • Hero Member
  • *****
  • Posts: 2330
Re: compile failed
« Reply #2 on: November 28, 2015, 05:38:31 pm »
The compiler tells you:
Quote
K_Ring.pas(8,16) Error: Operator is not overloaded: "ShortInt" and "Boolean"
K_Ring.pas(12,16) Error: Operator is not overloaded: "ShortInt" and "Boolean"
K_Ring.pas(24,6) Fatal: There were 2 errors compiling module, stopping

Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2.  
  3. VAR N:INTEGER;VAR A:BOOLEAN;
  4.  
  5. PROCEDURE RING(K:INTEGER);
  6. BEGIN
  7.         A:=K MOD 2=0;
  8.         IF (K=1) AND (A=FALSE) THEN BEGIN
  9.                 WRITE(1,' ');
  10.                 EXIT;
  11.                 END;
  12.         IF (K=2) AND (A=TRUE) THEN BEGIN
  13.                 WRITE(1,'&',2,' ');
  14.                 EXIT;
  15.                 END;
  16.         RING(K-2);
  17.         WRITE(K,' ');
  18.         RING(K-2);
  19.         RING(K-1);
  20. END;
  21. BEGIN
  22.         READLN(N);
  23.         RING(N);
  24. END.
  25.  

Bart

  • Hero Member
  • *****
  • Posts: 5275
    • Bart en Mariska's Webstek
Re: compile failed
« Reply #3 on: November 28, 2015, 05:40:36 pm »
Use parenthese like:
Code: [Select]
IF (K=1) AND (A=FALSE) THEN BEGIN

(And on the other line the compiler barfs)

B.t.w.:
Again: do not write entire code in capitals.
(A=FALSE) is the same as not A. There is no need to compare a boolean with True or False. If that would be the case this would lead to comparisons at infinitum:

Code: [Select]
if (((((((((A=FALSE)=TRUE)=TRUE)=TRUE)=TRUE)=TRUE)=TRUE)=TRUE)=TRUE) ......

So, better do:

Code: [Select]
if (K=1) and not A then ...

Bart

Bart

  • Hero Member
  • *****
  • Posts: 5275
    • Bart en Mariska's Webstek
Re: compile failed
« Reply #4 on: November 28, 2015, 05:44:03 pm »
And of course the program crashes when the user enters 0 or a negative number (or not a number at all).

Validate the input!

And since Ring() is only supposed to accept positive numbers: change the type of the parameter to a type that only supports positive numbers.
It greately helps with finding errors.


Bart
« Last Edit: November 28, 2015, 05:58:46 pm by Bart »

Bart

  • Hero Member
  • *****
  • Posts: 5275
    • Bart en Mariska's Webstek
Re: compile failed
« Reply #5 on: November 28, 2015, 06:18:43 pm »
Nice one: The number Ring calls itself is appr. 10^(N-1)  ;D

What is it supposed to do?
Ring(10) gives me:

Code: [Select]
1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1
1&2 8 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2
1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 7 1 3 1 1&2 5 1 3 1 1&2 1&2
4 1&2 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2
1&2 4 1&2 1 3 1 1&2 10 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3
 1 1&2 1&2 4 1&2 1 3 1 1&2 8 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2
 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 7 1 3
 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2
 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1
 1&2 7 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2
 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 9 1 3 1 1&2 5 1 3 1 1&2 1&2
 4 1&2 1 3 1 1&2 7 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2
 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1&2 4 1&2 1 3 1
 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 8 1&2 4 1&2
 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 1 3 1
 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2 7 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1 1&2
 1&2 4 1&2 1 3 1 1&2 6 1&2 4 1&2 1 3 1 1&2 1 3 1 1&2 5 1 3 1 1&2 1&2 4 1&2 1 3 1
 1&2

Bart
« Last Edit: November 28, 2015, 06:23:32 pm by Bart »

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #6 on: November 29, 2015, 04:41:26 am »
thanks to you all.
it is suppose to resolve
https://en.wikipedia.org/wiki/Baguenaudier

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #7 on: November 29, 2015, 04:44:50 am »
generalized chinese ring puzzule

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #8 on: November 29, 2015, 04:46:40 am »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:INTEGER;
  3. PROCEDURE RING(K:INTEGER);
  4. BEGIN
  5.         IF K=1 THEN BEGIN
  6.                 WRITE(1,' ');
  7.                 EXIT;
  8.                 END;
  9.         IF K=2 THEN BEGIN
  10.                 WRITE(1,'&',2,' ');
  11.                 EXIT;
  12.                 END;
  13.         RING(K-2);
  14.         WRITE(K,' ');
  15.         RING(K-2);
  16.         RING(K-1);
  17. END;
  18. BEGIN
  19.         READLN(N);
  20.         RING(N);
  21. END.
  22.  

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #9 on: November 29, 2015, 06:01:43 am »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:WORD;
  3. PROCEDURE RING(K:WORD);
  4. BEGIN
  5.         IF K=1 THEN BEGIN
  6.                 WRITE(1,' ');
  7.                 EXIT;
  8.                 END;
  9.         IF K=2 THEN BEGIN
  10.                 WRITE(1,'&',2,' ');
  11.                 EXIT;
  12.                 END;
  13.         RING(K-2);
  14.         WRITE(K,' ');
  15.         RING(K-2);
  16.         RING(K-1);
  17. END;
  18. BEGIN
  19.         REPEAT
  20.         READLN(N);
  21.         UNTIL(N=0);
  22.         RING(N);
  23. END.

rabbit_dance

  • Full Member
  • ***
  • Posts: 157

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #11 on: November 29, 2015, 06:17:15 am »
my algorithm is wrong.

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #12 on: November 29, 2015, 08:26:19 am »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:WORD;
  3. PROCEDURE RINGS_UP(K:WORD);
  4. BEGIN
  5.         IF K=1 THEN BEGIN
  6.                 WRITE('1 ');
  7.                 EXIT;
  8.                 END;
  9.         IF K=2 THEN BEGIN
  10.                 WRITE('1&2 ');
  11.                 RINGS_DOWN(K-1);
  12.                 EXIT;
  13.                 END;
  14.         RINGS_UP(K-1);
  15.         RINGS_DOWN(K-2);
  16.         WRITE(K,' ');
  17.         RINGS_UP(K-2);
  18.         RINGS_DOWN(K-1);
  19. END;
  20. PROCEDURE RINGS_DOWN(K:WORD);
  21. BEGIN
  22.         IF K=1 THEN BEGIN
  23.                 WRITE(1,' ');
  24.                 EXIT;
  25.                 END;
  26.         IF K=2 THEN BEGIN
  27.                 WRITE(1,'&',2,' ');
  28.                 EXIT;
  29.                 END;
  30.         RINGS_DOWN(K-2);
  31.         WRITE(K,' ');
  32.         RINGS_UP(K-2);
  33.         RINGS_DOWN(K-1);
  34. END;
  35. BEGIN
  36.         REPEAT
  37.         READLN(N);
  38.         UNTIL(N=0);
  39.         RINGS_DOWN(N);
  40. END.
the souce code as shown above cannot be compiled

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #13 on: November 29, 2015, 08:46:22 am »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:WORD;
  3. PROCEDURE RINGS_UP(K:WORD);
  4. BEGIN
  5.         IF K=1 THEN BEGIN
  6.                 WRITE('1 ');
  7.                 EXIT;
  8.                 END;
  9.         IF K=2 THEN BEGIN
  10.                 WRITE('1&2 ');
  11.                 EXIT;
  12.                 END;
  13.         RINGS_UP(K-1);
  14.         RINGS_DOWN(K-2);
  15.         WRITE(K,' ');
  16.         RINGS_UP(K-2);
  17.         RINGS_DOWN(K-1);
  18. END;
  19. PROCEDURE RINGS_DOWN(K:WORD);
  20. BEGIN
  21.         IF K=1 THEN BEGIN
  22.                 WRITE(1,' ');
  23.                 EXIT;
  24.                 END;
  25.         IF K=2 THEN BEGIN
  26.                 WRITE(1,'&',2,' ');
  27.                 EXIT;
  28.                 END;
  29.         RINGS_DOWN(K-2);
  30.         WRITE(K,' ');
  31.         RINGS_UP(K-2);
  32.         RINGS_DOWN(K-1);
  33. END;
  34. BEGIN
  35.         REPEAT
  36.         READLN(N);
  37.         UNTIL(NOT N=0);
  38.         RINGS_DOWN(N);
  39. END.
cannot be compiled too.

rabbit_dance

  • Full Member
  • ***
  • Posts: 157
Re: compile failed
« Reply #14 on: November 29, 2015, 09:31:14 am »
Code: Pascal  [Select][+][-]
  1. PROGRAM K_RING;
  2. VAR N:WORD;
  3. PROCEDURE RINGS_UP(K:WORD);
  4. BEGIN
  5.         IF K=1 THEN BEGIN
  6.                 WRITE('1 ');
  7.                 EXIT;
  8.                 END;
  9.         IF K=2 THEN BEGIN
  10.                 WRITE('1&2 ');
  11.                 EXIT;
  12.                 END;
  13.         RINGS_UP(K-1);
  14.         RINGS_DOWN(K-2);
  15.         WRITE(K,' ');
  16.         RINGS_UP(K-2);
  17. END;
  18. PROCEDURE RINGS_DOWN(K:WORD);
  19. BEGIN
  20.         IF K=1 THEN BEGIN
  21.                 WRITE(1,' ');
  22.                 EXIT;
  23.                 END;
  24.         IF K=2 THEN BEGIN
  25.                 WRITE(1,'&',2,' ');
  26.                 EXIT;
  27.                 END;
  28.         RINGS_DOWN(K-2);
  29.         WRITE(K,' ');
  30.         RINGS_UP(K-2);
  31.         RINGS_DOWN(K-1);
  32. END;
  33. BEGIN
  34.         REPEAT
  35.         READLN(N);
  36.         UNTIL(NOT N=0);
  37.         RINGS_DOWN(N);
  38. END.
cannot be compiled too.

 

TinyPortal © 2005-2018