Ignore:
Timestamp:
Jun 25, 2024, 12:09:24 PM (7 days ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
6803ff1
Parents:
41f4e2d
Message:

update test programs for different program languages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/jiada_liang_MMath/test2.cfa

    r41f4e2d rf3b67b6  
    11#include <fstream.hfa>
    22#include <stdlib.hfa>
     3#include <enum.hfa>
    34
    45struct MR { double mass, radius; };
    56
    6 enum( MR ) Planet {
     7enum( MR ) Planet {                                                                             // typed enumeration
    78        //          mass (kg)  radius (km)
    89        MERCURY = { 0.330_E24, 2.4397_E6 },
    910        VENUS   = { 4.869_E24, 6.0518_E6 },
    1011        EARTH   = { 5.976_E24, 6.3781_E6 },
    11         MOON    = { 7.346_E22, 1.7380_E6 }, // not a planet
     12        MOON    = { 7.346_E22, 1.7380_E6 },                                     // not a planet
    1213        MARS    = { 0.642_E24, 3.3972_E6 },
    1314        JUPITER = { 1898._E24, 71.492_E6 },
     
    1516        URANUS  = { 86.86_E24, 25.559_E6 },
    1617        NEPTUNE = { 102.4_E24, 24.746_E6 },
     18        PLUTO   = { 1.303_E22, 1.1880_E6 },                                     // not a planet
    1719};
    1820
    19 enum( double ) { G = 6.6743_E-11 }; // universal gravitational constant (m3 kg-1 s-2)
     21enum( double ) { G = 6.6743_E-11 };                                             // universal gravitational constant (m3 kg-1 s-2)
    2022
    2123static double surfaceGravity( Planet p ) with( p ) {
    22         return G * mass / ( radius \ 2 ); // exponentiation
     24        return G * mass / ( radius \ 2 );                                       // no qualification, exponentiation
    2325}
    2426static double surfaceWeight( Planet p, double otherMass ) {
     
    2729
    2830int main( int argc, char * argv[] ) {
    29         if ( argc != 2 ) exit | "Usage: " | argv[0] | "earth-weight";
     31        if ( argc != 2 ) exit | "Usage: " | argv[0] | "earth-weight"; // terminate program
    3032
    3133        double earthWeight = convert( argv[1] );
    3234        double earthMass = earthWeight / surfaceGravity( EARTH );
    3335
    34         Planet p = fromInt( prng( SizeE(Planet) ) ); // select a random orbiting body
    35 //      Planet p = fromInt( prng( 9 ) ); // select a random orbiting body
    36         choose( p ) {
     36        Planet rp = fromInt( prng( countof( Planet ) ) );       // select random orbiting body
     37        choose( rp ) {                                                                          // implicit breaks
    3738          case MERCURY, VENUS, EARTH, MARS:
    38                 sout | labelE( p ) | "is a rocky planet";
     39                sout | label( rp ) | "is a rocky planet";
    3940          case JUPITER, SATURN, URANUS, NEPTUNE:
    40                 sout | labelE( p ) | "is a gas-giant planet";
     41                sout | label( rp ) | "is a gas-giant planet";
    4142          default:
    42                 sout | labelE( p ) | "is not a planet";
     43                sout | label( rp ) | "is not a planet";
    4344        }
    4445
    45 //      for ( Planet p = MERCURY; posE(p) <= posE(NEPTUNE); p = succ( p ) ) {
    46         for ( p; enum Planet ) {
    47                 sout | "Your weight on" | (p == MOON ? "the" : "") | labelE(p)
    48 //              sout | "Your weight on" | labelE(p)
    49                          | "is" | wd( 1,1, surfaceWeight( p, earthMass ) ) | "kg";
     46        for ( p; Planet ) {                                                                     // enumerate
     47                sout | "Your weight on" | ( p == MOON ? "the" : " " ) | label( p )
     48                         | "is" | wd( 1,1,  surfaceWeight( p, earthMass ) ) | "kg";
    5049        }
    5150}
Note: See TracChangeset for help on using the changeset viewer.