Duong Nguyen <[EMAIL PROTECTED]> wrote:
: 
: Thanks for the response.  I discovered that it was my 
: @array1[0..5] =1; initialization.
: So I manually allocated values to the array to see if it 
: would work, much to my surprise, the correct "total" was 
: being printed.  Here's what I did:
: 
: change @array1[0..5] to @array1[0] = 1;
:                         @array1[1] = 1;
:                         @array1[2] = 1;
: 
: This works well.

    Looks like a lot of Jscript I have been recently
unraveling. I'd hate to see that used to initialize
10,000 elements.

 my @array;
 @array[ 0 .. 5 ] = (1) x 6;
 my @totals = 0;


:   for($i=0; $i<4; $i++)
:   {

    In perl, is it rare that you would need to use
indexes to iterate through a single array. I don't care
much for $i and $j, either. I didn't come from a C
background, so the idiom above tends to confuse me.

 foreach $amount ( @array[ 0 .. 3 ] ) {


:        if($i == 0)
:        {
:             @total[$i] = @array1[$i];
:           print "First group";
:             print @total[$i];
:        }

    My first reaction was why not place this outside
the loop? In perl both @total[$1] and $total[$1] will
both work, but the second form is preferred. You will
also catch a lot less grief from this list.


:        else
:        {
:             $j = $i - 1;
:           print "Second group";
:             @total[$i] = @total[$j] + @array1[$i];
:             print @total[$i];
:        }
:    }

    Since we are not using an $i index, $j won't help
much. We can grab values from an array by using a
negative index. -1 is the last element in an array:

     push @totals, $totals[ -1 ] + $amount;
     print $totals[ -1 ];
 }

    Let's review that. I am pushing onto @totals the
sum of the last value on @totals ( $totals[-1] ) and
the current amount. Then I print the new last total
on @totals. Notice that this algorithm will allow
any range in $amounts to be totaled, not just
consecutive amounts starting from the beginning.


HTH,

Charles K. Clarkson
-- 
Head Bottle Washer,
Clarkson Energy Homes, Inc.
Mobile Home Specialists
254 968-8328

As tested:

#!/usr/bin/perl

use strict;
use warnings;

my @array;
@array[ 0 .. 5 ] = (1) x 6;

my @totals = 0;
foreach my $amount ( @array[ 0 .. 3 ] ) {
    push @totals, $totals[ -1 ] + $amount;
}

shift @totals;
print @totals;



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to