Programming Fundamentals/Arrays/Perl

arrays.pl

edit
#!/usr/bin/perl

# This program uses arrays to display temperature conversion tables 
# and temperature as an array subscript to find a given conversion.
#
# References:
#     https://www.mathsisfun.com/temperature-conversion.html
#     https://en.wikibooks.org/wiki/Perl_Programming

sub build_c 
{
    $size = $_[0];

    my @c;
    my $index;
    my $value;

    for ($index = 0; $index <= $size; $index += 1) 
    {
        $value = $index * 9 / 5 + 32;
        push(@c, $value);
    }
    
    return @c;
}

sub build_f 
{
    $size = $_[0];

    my @f;
    my $index;
    my $value;

    for ($index = 0; $index <= $size; $index += 1) 
    {
        $value = ($index - 32) * 5 / 9;
        push(@f, $value);
    }
    
    return @f;
}

sub display_array 
{
    my ($name, @array) = @_;
    my $index;
    
    for ($index = 0; $index <= @array - 1; $index += 1) 
    {
        print $name . "[" . $index . "] = " . $array[$index], "\n";
    }
}

sub find_temperature 
{
    my $c = $_[0];
    my @c = @$c;
    my $f = $_[1];
    my @f = @$f;
    
    my $temp;
    my $size;
    
    $size = minimum($#c, $#f);
    do 
    {
        print "Enter a temperature between 0 and ". $size . "\n";
        $temp = <>;
        chomp($temp);
    } while $temp < 0 || $temp > $size;
    print $temp . "° Celsius is " . $c[$temp] . "° Fahrenheit\n";
    print $temp . "° Fahrenheit is " . $f[$temp] . "° Celsius\n";
}

sub minimum 
{
    my $value1 = $_[0];
    my $value2 = $_[1];
    my $result;
    
    if ($value1 < $value2) 
    {
        $result = $value1;
    }
    else
    {
        $result = $value2;
    }
    
    return $result
}

sub main()
{
    my @c;
    my @f;
    
    @c = build_c(100);
    @f = build_f(212);
    
    display_array("C", @c);
    display_array("F", @f);
    find_temperature(\@c, \@f);
}

main();

Try It

edit

Copy and paste the code above into one of the following free online development environments or use your own Perl compiler / interpreter / IDE.

See Also

edit