source: doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa @ 4b75ae9

Last change on this file since 4b75ae9 was 4558df2, checked in by Peter A. Buhr <pabuhr@…>, 10 days ago

update accordion program, small changes

  • Property mode set to 100644
File size: 1.7 KB
RevLine 
[dab9fb93]1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <array.hfa>
[e26a842]4#include <locale.h>                                                     // setlocale
[bbf6a180]5
6
7
8
9
[4558df2]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}$
[bbf6a180]15};
16
17
18
[4558df2]19// TODO: understand (fix?) why these are needed (autogen seems to be failing ... is typeof as struct member nayok?)
[e26a842]20
[4558df2]21forall( [C], [S] )
22void ?{}( School( C, S ) & this ) {}
[bbf6a180]23
[4558df2]24forall( [C], [S] )
25        void ^?{}( School( C, S ) & this ) {}
[bbf6a180]26
27
28
29
30
31
32
33
34
35
36
37
38
39
[4558df2]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;
[bbf6a180]45}
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[4558df2]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        }
[dab9fb93]80}
[4558df2]81
82
83
[bbf6a180]84/*
[4558df2]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
[bbf6a180]110*/
[e26a842]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.