Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/loto6.c @ 34:5f3bba7b355c
add loto6.c
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Dec 2009 20:46:05 +0900 |
parents | |
children | 5d30d517ebed |
comparison
equal
deleted
inserted
replaced
33:e62c90c8e699 | 34:5f3bba7b355c |
---|---|
1 /* | |
2 * Nov 10, 2009 | |
3 * created by gongo. | |
4 * | |
5 * Nov 10, 2009 | |
6 * modified by kent. | |
7 */ | |
8 | |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
11 | |
12 (*ret)(int, void*); | |
13 void *env; | |
14 | |
15 | |
16 __code | |
17 print(int *numbers) | |
18 { | |
19 printf("%d-%d-%d-%d-%d-%d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5]); | |
20 free(numbers); | |
21 goto ret(0, env); | |
22 } | |
23 | |
24 __code | |
25 take(int *array, int size, int length) | |
26 { | |
27 int *taked = (int*)malloc(sizeof(int)*length); | |
28 | |
29 memcpy(taked, array, sizeof(int)*length); | |
30 free(array); | |
31 | |
32 goto print(taked); | |
33 } | |
34 | |
35 __code | |
36 shuffle(int *array, int size, int idx) | |
37 { | |
38 int j = random() % size; | |
39 int tmp = array[idx]; | |
40 array[idx] = array[j]; | |
41 array[j] = tmp; | |
42 | |
43 if (++idx < size) { | |
44 goto shuffle(array, size, idx); | |
45 } else { | |
46 goto take(array, size, 6); | |
47 } | |
48 } | |
49 | |
50 __code | |
51 range_loop(int *array, int idx, int from, int to, int step, int size) | |
52 { | |
53 array[idx] = from; | |
54 | |
55 if (from+step > to) { | |
56 goto shuffle(array, size, 0); | |
57 } else { | |
58 goto range_loop(array, idx+1, from+step, to, step, size); | |
59 } | |
60 } | |
61 | |
62 __code | |
63 range(int from, int to, int step) | |
64 { | |
65 int size = (to-from+1)/step; | |
66 int *array = (int*)malloc(sizeof(int)*size); | |
67 | |
68 goto range_loop(array, 0, from, to, step, size); | |
69 } | |
70 | |
71 int | |
72 main() | |
73 { | |
74 srand(time(NULL)); | |
75 ret = _CbC_return; | |
76 env = _CbC_environment; | |
77 | |
78 goto range(1, 43, 1); | |
79 } | |
80 |