source: doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa @ 5b643ea

Last change on this file since 5b643ea was 4558df2, checked in by Peter A. Buhr <pabuhr@…>, 3 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.