diff options
Diffstat (limited to 'tinyc/examples/ex2.c')
-rwxr-xr-x | tinyc/examples/ex2.c | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/tinyc/examples/ex2.c b/tinyc/examples/ex2.c deleted file mode 100755 index d415e39d7..000000000 --- a/tinyc/examples/ex2.c +++ /dev/null @@ -1,98 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> - -#define N 20 - -int nb_num; -int tab[N]; -int stack_ptr; -int stack_op[N]; -int stack_res[60]; -int result; - -int find(int n, int i1, int a, int b, int op) -{ - int i, j; - int c; - - if (stack_ptr >= 0) { - stack_res[3*stack_ptr] = a; - stack_op[stack_ptr] = op; - stack_res[3*stack_ptr+1] = b; - stack_res[3*stack_ptr+2] = n; - if (n == result) - return 1; - tab[i1] = n; - } - - for(i=0;i<nb_num;i++) { - for(j=i+1;j<nb_num;j++) { - a = tab[i]; - b = tab[j]; - if (a != 0 && b != 0) { - - tab[j] = 0; - stack_ptr++; - - if (find(a + b, i, a, b, '+')) - return 1; - if (find(a - b, i, a, b, '-')) - return 1; - if (find(b - a, i, b, a, '-')) - return 1; - if (find(a * b, i, a, b, '*')) - return 1; - if (b != 0) { - c = a / b; - if (find(c, i, a, b, '/')) - return 1; - } - - if (a != 0) { - c = b / a; - if (find(c, i, b, a, '/')) - return 1; - } - - stack_ptr--; - tab[i] = a; - tab[j] = b; - } - } - } - - return 0; -} - -int main(int argc, char **argv) -{ - int i, res, p; - - if (argc < 3) { - printf("usage: %s: result numbers...\n" - "Try to find result from numbers with the 4 basic operations.\n", argv[0]); - exit(1); - } - - p = 1; - result = atoi(argv[p]); - printf("result=%d\n", result); - nb_num = 0; - for(i=p+1;i<argc;i++) { - tab[nb_num++] = atoi(argv[i]); - } - - stack_ptr = -1; - res = find(0, 0, 0, 0, ' '); - if (res) { - for(i=0;i<=stack_ptr;i++) { - printf("%d %c %d = %d\n", - stack_res[3*i], stack_op[i], - stack_res[3*i+1], stack_res[3*i+2]); - } - return 0; - } else { - printf("Impossible\n"); - return 1; - } -} |