Control Flow Patterns
For Range Loop
A for loop can walk across a small range of numbers.
range
A range like `1 .. 3` produces each number between the endpoints.
For Range Loop
for_range.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $max_value = 4;
my $sum = 0;
my $last = 0;
for my $number (1 .. $max_value) {
$sum = $sum + $number;
$last = $number;
}
print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
use strict;
use warnings;
my $max_value = 2;
my $sum = 0;
my $last = 0;
for my $number (1 .. $max_value) {
$sum = $sum + $number;
$last = $number;
}
print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
use strict;
use warnings;
my $max_value = 5;
my $sum = 0;
my $last = 0;
for my $number (1 .. $max_value) {
$sum = $sum + $number;
$last = $number;
}
print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
$max_value ← 4, $sum ← 0, $last ← 0
4my $max_value→ 4 = 4; #@max_value=2, 55my $sum→ 0 = 0;6my $last→ 0 = 0;$sum ← 1, $last ← 1
pass 1 of 48for my $number1 (1 .. $max_value4) {9 $sum→ 1 = $sum + $number1;10 $last→ 1 = $number1;11}All 4 passes — pass 1 is the card above pass $number$sum$last1 1 0 → 1 0 → 1 2 2 1 → 3 1 → 2 3 3 3 → 6 2 → 3 4 4 6 → 10 3 → 4 print "max_value=$max_value ";
13print "max_value=$max_value4\n";14print "last=$last4\n";15print "sum=$sum10\n";outputmax_value=4 last=4 sum=10
$max_value ← 2, $sum ← 0, $last ← 0
4my $max_value→ 2 = 2;5my $sum→ 0 = 0;6my $last→ 0 = 0;$sum ← 1, $last ← 1
pass 1 of 28for my $number1 (1 .. $max_value2) {9 $sum→ 1 = $sum + $number1;10 $last→ 1 = $number1;11}$sum ← 3, $last ← 2
pass 2 of 28for my $number2 (1 .. $max_value2) {9 $sum→ 3 = $sum + $number2;10 $last→ 2 = $number2;11}print "max_value=$max_value ";
13print "max_value=$max_value2\n";14print "last=$last2\n";15print "sum=$sum3\n";outputmax_value=2 last=2 sum=3
$max_value ← 5, $sum ← 0, $last ← 0
4my $max_value→ 5 = 5;5my $sum→ 0 = 0;6my $last→ 0 = 0;$sum ← 1, $last ← 1
pass 1 of 58for my $number1 (1 .. $max_value5) {9 $sum→ 1 = $sum + $number1;10 $last→ 1 = $number1;11}All 5 passes — pass 1 is the card above pass $number$sum$last1 1 0 → 1 0 → 1 2 2 1 → 3 1 → 2 3 3 3 → 6 2 → 3 4 4 6 → 10 3 → 4 5 5 10 → 15 4 → 5 print "max_value=$max_value ";
13print "max_value=$max_value5\n";14print "last=$last5\n";15print "sum=$sum15\n";outputmax_value=5 last=5 sum=15
Add the Range
$max_valuestarts at4.- The range
1 .. $max_valuegives1,2,3, and4. - Each pass adds the number to
$sum. $lastends as4and$sumends as10. | Number | Running sum | | --- | --- | |1|1| |2|3| |3|6| |4|10|
Exercise: for_range.pl
Use a for range loop to add 1 through a maximum value and print last and sum