Changeset 097e2b0 for src/examples/sum.c


Ignore:
Timestamp:
Oct 9, 2015, 4:37:04 PM (9 years ago)
Author:
Peter A. Buhr <pabuhr@…>
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
Message:

constructor/destructor, more example programs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/examples/sum.c

    r02e5ab6 r097e2b0  
    77// sum.c --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun  1 20:46:35 2015
    13 // Update Count     : 18
     12// Last Modified On : Mon Sep 28 15:09:55 2015
     13// Update Count     : 118
    1414//
    1515
    1616extern "C" {
    17         int printf( const char *, ... );
     17        int printf( char *, ... );
    1818}
     19#include "fstream.h"
    1920
    2021context sumable( type T ) {
    2122        const T 0;
    2223        T ?+?( T, T );
     24        T ?+=?( T *, T );
     25        T ++?( T * );
    2326        T ?++( T * );
    24         T ?+=?( T *, T );
    2527};
    2628
    2729forall( 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 +
     30T 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 +
    3334        return total;
    3435}
     
    3637// Required to satisfy sumable as char does not have addition.
    3738const 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
     39char ?+?( char op1, char op2 ) { return (int)op1 + op2; } // cast forces integer addition or recursion
     40char ++?( char *op ) { *op += 1; return *op; }
     41char ?++( char *op ) { char temp = *op; *op += 1; return temp; }
    4242
    4343int main() {
    4444        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];
    4658        int v = low;
    4759        for ( int i = 0; i < size; i += 1, v += 1 ) {
    48                 si += v;
    49                 ai[i] = v;
     60                s += (int)v;
     61                a[i] = (int)v;
    5062        }
    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";
    5365
    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];
    6067        double v = low / 10.0;
    6168        for ( int i = 0; i < size; i += 1, v += 0.1 ) {
    62                 sd += v;
    63                 ad[i] = v;
     69                s += (double)v;
     70                a[i] = (double)v;
    6471        }
    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";
    6785}
    6886
    6987// Local Variables: //
    7088// tab-width: 4 //
    71 // compile-command: "cfa sum.c" //
     89// compile-command: "cfa sum.c fstream.o iostream.o" //
    7290// End: //
Note: See TracChangeset for help on using the changeset viewer.