Changeset f3b67b6 for doc/theses/jiada_liang_MMath/test2.cfa
- Timestamp:
- Jun 25, 2024, 12:09:24 PM (7 days ago)
- Branches:
- master
- Children:
- 6803ff1
- Parents:
- 41f4e2d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/jiada_liang_MMath/test2.cfa
r41f4e2d rf3b67b6 1 1 #include <fstream.hfa> 2 2 #include <stdlib.hfa> 3 #include <enum.hfa> 3 4 4 5 struct MR { double mass, radius; }; 5 6 6 enum( MR ) Planet { 7 enum( MR ) Planet { // typed enumeration 7 8 // mass (kg) radius (km) 8 9 MERCURY = { 0.330_E24, 2.4397_E6 }, 9 10 VENUS = { 4.869_E24, 6.0518_E6 }, 10 11 EARTH = { 5.976_E24, 6.3781_E6 }, 11 MOON = { 7.346_E22, 1.7380_E6 }, 12 MOON = { 7.346_E22, 1.7380_E6 }, // not a planet 12 13 MARS = { 0.642_E24, 3.3972_E6 }, 13 14 JUPITER = { 1898._E24, 71.492_E6 }, … … 15 16 URANUS = { 86.86_E24, 25.559_E6 }, 16 17 NEPTUNE = { 102.4_E24, 24.746_E6 }, 18 PLUTO = { 1.303_E22, 1.1880_E6 }, // not a planet 17 19 }; 18 20 19 enum( double ) { G = 6.6743_E-11 }; 21 enum( double ) { G = 6.6743_E-11 }; // universal gravitational constant (m3 kg-1 s-2) 20 22 21 23 static double surfaceGravity( Planet p ) with( p ) { 22 return G * mass / ( radius \ 2 ); //exponentiation24 return G * mass / ( radius \ 2 ); // no qualification, exponentiation 23 25 } 24 26 static double surfaceWeight( Planet p, double otherMass ) { … … 27 29 28 30 int 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 30 32 31 33 double earthWeight = convert( argv[1] ); 32 34 double earthMass = earthWeight / surfaceGravity( EARTH ); 33 35 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 37 38 case MERCURY, VENUS, EARTH, MARS: 38 sout | label E(p ) | "is a rocky planet";39 sout | label( rp ) | "is a rocky planet"; 39 40 case JUPITER, SATURN, URANUS, NEPTUNE: 40 sout | label E(p ) | "is a gas-giant planet";41 sout | label( rp ) | "is a gas-giant planet"; 41 42 default: 42 sout | label E(p ) | "is not a planet";43 sout | label( rp ) | "is not a planet"; 43 44 } 44 45 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"; 50 49 } 51 50 }
Note: See TracChangeset
for help on using the changeset viewer.