in reply to Help w/ Law of Sines script
instead could be written as:unless ( $A > 0 && $B > 0 && $C > 0 ) { if ( $A > 0 && $B > 0 ) { $var = "C" } if ( $A > 0 && $C > 0 ) { $var = "B" } if ( $B > 0 && $C > 0 ) { $var = "A" } if ( $var eq "C" ) { $sum = $angles{B} + $angles{A}; $other = 180 - $sum; $angles{$var} = $other; $C = sprintf( "%.10f", Math::NumberCruncher::deg2rad( $oth +er ) ); } elsif ( $var eq "B" ) { $sum = $angles{A} + $angles{C}; $other = 180 - $sum; $angles{$var} = $other; $B = sprintf( "%.10f", Math::NumberCruncher::deg2rad( $oth +er ) ); } elsif ( $var eq "A" ) { $sum = $angles{B} + $angles{C}; print ("Sum: $sum\n"); $other = 180 - $sum; $angles{$var} = $other; $A = sprintf( "%.10f", Math::NumberCruncher::deg2rad( $oth +er ) );
The primary difference between your version and mine is that I chose a data structure that allows me to have the interpreter associate pieces of data that should be associated together. Your version requires that you continually associate them yourself.if (grep $_ <= 0, @{$angles->[0]}{('A' .. 'C')}) { my $zero_angle = 'A'; if ($angles->[0]{C} <= 0) { $zero_angle = 'C' } elsif ($angles->[0]{B} <= 0) { $zero_angle = 'B' } my @sides = ('A' .. 'C'); @sides = grep $_ ne $zero_angle, @sides; $sum = 0; $sum += $_ for @{$angles->[0]}{@sides}; $other = 180 - $sum; $angles{$var} = $other; $angles->[0]{$zero_angle} = sprintf( "%.10f", Math::NumberCruncher::deg2rad( $other ) ); }
The second difference is that I'm taking advantage of the easy conversions between hashes and arrays through hash-slices. Read up on them. They're SOOOO powerful. :)
Now, you don't have to use my data structure. I chose it because it was the closest to what you were doing. However, it can easily make sense to have the angles in an array and not a hash. So, triangle 1, angle 2 would be $angles->[0][1]. Simple enough.
Keep with it. It's a neat idea!
Update: Fixed a few square brackets. Thanx Albannach and ChemBoy!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Help w/ Law of Sines script
by sifukurt (Hermit) on Aug 03, 2001 at 00:36 UTC |