Changeset 097e2b0 for src/examples/sum.c
- Timestamp:
- Oct 9, 2015, 4:37:04 PM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- 9909842, d2ded3e7
- Parents:
- 02e5ab6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/examples/sum.c
r02e5ab6 r097e2b0 7 7 // sum.c -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 1 20:46:35 201513 // Update Count : 1 812 // Last Modified On : Mon Sep 28 15:09:55 2015 13 // Update Count : 118 14 14 // 15 15 16 16 extern "C" { 17 int printf( c onst char *, ... );17 int printf( char *, ... ); 18 18 } 19 #include "fstream.h" 19 20 20 21 context sumable( type T ) { 21 22 const T 0; 22 23 T ?+?( T, T ); 24 T ?+=?( T *, T ); 25 T ++?( T * ); 23 26 T ?++( T * ); 24 T ?+=?( T *, T );25 27 }; 26 28 27 29 forall( type T | sumable( T ) ) 28 T sum( int n, T a[] ) { 29 T total; // instantiate T, select 0 30 total = 0; 31 for ( int i = 0; i < n; i += 1 ) 32 total = total + a[i]; // select + 30 T sum( unsigned int n, T a[] ) { 31 T total = 0; // instantiate T, select 0 32 for ( unsigned int i = 0; i < n; i += 1 ) 33 total += a[i]; // select + 33 34 return total; 34 35 } … … 36 37 // Required to satisfy sumable as char does not have addition. 37 38 const char 0; 38 char ?+?( char op1, char op2 ) { return op1 + op2; } 39 char ?++( char *op ) { return *op + 1; } 40 41 const double 0; // TEMPORARY, incorrect use of int 0 39 char ?+?( char op1, char op2 ) { return (int)op1 + op2; } // cast forces integer addition or recursion 40 char ++?( char *op ) { *op += 1; return *op; } 41 char ?++( char *op ) { char temp = *op; *op += 1; return temp; } 42 42 43 43 int main() { 44 44 const int low = 5, High = 15, size = High - low; 45 int si = 0, ai[size]; 45 46 ofstream *sout = ofstream_stdout(); 47 48 char s = 0, a[size]; 49 char v = low; 50 for ( int i = 0; i < size; i += 1, v += 1 ) { 51 s += v; 52 a[i] = v; 53 } 54 sout << "sum from " << low << " to " << High << " is " 55 << (int)sum( size, a ) << ", check " << (int)s << "\n"; 56 57 int s = 0, a[size]; 46 58 int v = low; 47 59 for ( int i = 0; i < size; i += 1, v += 1 ) { 48 s i +=v;49 a i[i] =v;60 s += (int)v; 61 a[i] = (int)v; 50 62 } 51 printf( "sum from %d to %d is %d, check %d\n",52 low, High, sum( size, ai ), si );63 sout << "sum from " << low << " to " << High << " is " 64 << sum( size, (int *)a ) << ", check " << (int)s << "\n"; 53 65 54 // char ci[size]; 55 // char c = sum( size, ci ); 56 // float fi[size]; 57 // float f = sum( size, fi ); 58 59 double sd = 0.0, ad[size]; 66 double s = 0.0, a[size]; 60 67 double v = low / 10.0; 61 68 for ( int i = 0; i < size; i += 1, v += 0.1 ) { 62 s d +=v;63 a d[i] =v;69 s += (double)v; 70 a[i] = (double)v; 64 71 } 65 printf( "sum from %g to %g is %g, check %g\n", 66 low / 10.0, High / 10.0, sum( size, ad ), sd ); 72 printf( "%g\n", sum( size, (double *)a ) ); 73 // sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is " 74 // << sum( size, (double *)a ) << ", check " << (double)s << "\n"; 75 76 float s = 0.0, a[size]; 77 float v = low / 10.0; 78 for ( int i = 0; i < size; i += 1, v += 0.1f ) { 79 s += (float)v; 80 a[i] = (float)v; 81 } 82 printf( "%g\n", sum( size, (float *)a ) ); 83 // sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is " 84 // << sum( size, (float *)a ) << ", check " << (float)s << "\n"; 67 85 } 68 86 69 87 // Local Variables: // 70 88 // tab-width: 4 // 71 // compile-command: "cfa sum.c " //89 // compile-command: "cfa sum.c fstream.o iostream.o" // 72 90 // End: //
Note: See TracChangeset
for help on using the changeset viewer.