First class environments: Difference between revisions
Content added Content deleted
(→{{header|C}}: using goto (yes!)) |
|||
Line 14: | Line 14: | ||
#define JOBS 12 |
#define JOBS 12 |
||
#define jobs(a) |
#define jobs(a) for (switch_to(a = 0); a < JOBS || !printf("\n"); switch_to(++a)) |
||
typedef struct { int seq, cnt; } env_t; |
typedef struct { int seq, cnt; } env_t; |
||
Line 23: | Line 23: | ||
{ |
{ |
||
printf("% 4d", *seq); |
printf("% 4d", *seq); |
||
if (*seq |
if (*seq == 1) return; |
||
++*cnt; |
|||
else return; |
|||
⚫ | |||
⚫ | |||
else *seq /= 2; |
|||
} |
} |
||
Line 38: | Line 36: | ||
int main() |
int main() |
||
{ |
{ |
||
int i |
int i; |
||
jobs(i) { env[i].seq = i + 1; } |
jobs(i) { env[i].seq = i + 1; } |
||
again: jobs(i) { hail(); } |
|||
while (!done) { |
|||
jobs(i) { if (1 != *seq) goto again; } |
|||
printf("\n"); |
|||
done = 1; |
|||
jobs(i) if (*seq != 1) done = 0; |
|||
} |
|||
printf("COUNTS:\n"); |
printf("COUNTS:\n"); |
||
jobs(i) printf("% 4d", *cnt); |
jobs(i) { printf("% 4d", *cnt); } |
||
printf("\n"); |
|||
return 0; |
return 0; |
||
}</lang>output<lang> |
}</lang>output<lang> |
||
1 2 3 4 5 6 7 8 9 10 11 12 |
|||
1 1 10 2 16 3 22 4 28 5 34 6 |
1 1 10 2 16 3 22 4 28 5 34 6 |
||
1 1 5 1 8 10 11 2 14 16 17 3 |
1 1 5 1 8 10 11 2 14 16 17 3 |
||
Line 73: | Line 66: | ||
1 1 1 1 1 1 1 1 4 1 1 1 |
1 1 1 1 1 1 1 1 4 1 1 1 |
||
1 1 1 1 1 1 1 1 2 1 1 1 |
1 1 1 1 1 1 1 1 2 1 1 1 |
||
COUNTS: |
COUNTS: |
||
0 1 7 2 5 8 16 3 19 6 14 9</lang> |
0 1 7 2 5 8 16 3 19 6 14 9</lang> |