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

Last change on this file since c2f6b79 was 579427b, checked in by Peter A. Buhr <pabuhr@…>, 4 months ago

half way through proofreading array chapter

  • Property mode set to 100644
File size: 1.4 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <array.hfa>
4#include <string.hfa>
5
6
7
8
9
10forall( [C], [S] ) $\C{// num courses, num students}$
11struct School {
12 @array@( string, C ) course_codes; $\C{// nested VLAs}$
13 @array@( string, S ) student_ids;
14 @array@( int, C, S ) preferences; $\C{// multidimensional}$
15};
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30forall( [C], [S] )
31int getPref( @School( C, S ) & school@, int is, int pref ) {
32 for ( ic; C ) {
33 if ( pref == @school.preferences@[ic][is]; ) return ic; $\C{// offset calculation implicit}$
34 }
35 assert( false );
36}
37
38
39
40
41
42
43
44
45
46
47
48
49
50int main() {
51 int nc, ns;
52 sin | nc | " courses,";
53 sin | ns | " students";
54 @School( nc, ns ) school;@
55 // ... elided: read data into school
56
57
58
59
60 { string sv;
61 int iv;
62 // headers' row
63 sin | "\nc\\s";
64 for ( is ; ns ) {
65 // column label
66 sin | sv;
67 school.student_ids[is] = sv;
68 }
69 // body rows
70 for ( ic ; nc ) {
71 // row label
72 sin | sv;
73 school.course_codes[ic] = sv;
74 for ( is ; ns ) {
75 // matrix item
76 sin | iv;
77 school.preferences[ic][is] = iv;
78 }
79 }
80 }
81
82
83
84
85
86
87
88
89
90 for ( is; ns ) {
91 sout | school.student_ids[is] | ": " | nonl;
92 for ( pref; 1 ~= nc ) {
93 int ic = getPref( school, is, pref );
94 sout | school.course_codes[ ic ] | nonl;
95 }
96 sout | nl;
97 }
98}
99
100
101// Local Variables: //
102// compile-command: "sed -f sedcmd hello-accordion.cfa > ../build/tmp.cfa; cfa ../build/tmp.cfa -Wall -Wextra" //
103// End: //
Note: See TracBrowser for help on using the repository browser.