source: doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa@ 1b770e40

Last change on this file since 1b770e40 was 4558df2, checked in by Peter A. Buhr <pabuhr@…>, 13 months ago

update accordion program, small changes

  • Property mode set to 100644
File size: 1.7 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <array.hfa>
4#include <locale.h> // setlocale
5
6
7
8
9
10forall( [C], [S] ) $\C{// Class size, Students in class}$
11struct School {
12 @array( int, C )@ classIds; $\C{// nested VLAs}$
13 @array( int, S )@ studentIds;
14 @array( int, C, S )@ preferences; $\C{// multidimensional}$
15};
16
17
18
19// TODO: understand (fix?) why these are needed (autogen seems to be failing ... is typeof as struct member nayok?)
20
21forall( [C], [S] )
22void ?{}( School( C, S ) & this ) {}
23
24forall( [C], [S] )
25 void ^?{}( School( C, S ) & this ) {}
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40forall( [C], [S] )
41void init( @School( C, S ) & classes@, int class, int student, int pref ) with( classes ) {
42 classIds[class] = class; $\C{// handle dynamic offsets of fields within structure}$
43 studentIds[student] = student;
44 preferences[class][student] = pref;
45}
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60int main() {
61 int classes, students;
62 sin | classes | students;
63 @School( classes, students ) school;@
64 int class, student, preference;
65 // read data into school calling init
66 // for each student's class/preferences
67 try {
68 for ( ) {
69 sin | class | student | preference;
70 init( school, class, student, preference );
71 }
72 } catch( end_of_file * ) {}
73 for ( s; students ) {
74 sout | "student" | s | nonl;
75 for ( c; classes ) {
76 sout | school.preferences[c][s] | nonl;
77 }
78 sout | nl;
79 }
80}
81
82
83
84/*
85$\$$ cat school1
862 2
870 0 1
881 0 7
890 1 12
901 1 13
91$\$$ a.out < school1
92student 0 1 7
93student 1 12 13
94
95$\$$ cat school2
963 3
970 0 1
981 0 7
992 0 8
1000 1 12
1011 1 13
1022 1 14
1030 2 26
1041 2 27
1052 2 28
106$\$$ a.out < school2
107student 0 1 7 8
108student 1 12 13 14
109student 2 26 27 28
110*/
111
112// Local Variables: //
113// compile-command: "sed -f sedcmd hello-accordion.cfa > ../build/tmp.cfa; cfa ../build/tmp.cfa -Wall -Wextra" //
114// End: //
Note: See TracBrowser for help on using the repository browser.