search check home clock-o tag tags chevron-left chevron-right chevron-up chevron-down twitter facebook github rss comment comments terminal code

[perl] trójmian kwadratowy

Napisz skrypt w języku Perl obliczający i wypisujący na konsolę wynik rozwiązania trójmianu kwadratowego dla liczb rzeczywistych. Współczynniki trójmianu a, b, c mogą być wczytane z konsoli w trakcie działania skryptu lub podane jako parametry wywołania skryptu. Skrypt ma zawierać i posługiwać się funkcją delta obliczającą wartość, tzw. delty, wg. wzoru d = b2 - 4 ac.

#!/usr/bin/perl
#use warnings;
 
if(@ARGV)
{
  if(@ARGV != 3)
  {
    print "Podano niewłaściwą liczbę argumentów: " .@ARGV. "n";
  }
  elsif($ARGV[0] eq "0")
  {
    print "Parametr a nie może być zerem!n";
  }
  else
  {
    @arg = @ARGV;
    foreach (@ARGV)
    {
      if(!/^-?[0-9]+.?[0-9]*$/)
      {
        print "Nieprawidłowy format argumentu: $_n";
        undef(@arg);
      }
    }
  }
 
}
 
if(!@arg)
{
  print "y = ax^2 + bx + cn";
 
  print "Podaj parametr a: ";
  my $a = 0;
  while(chomp($a = <STDIN>) && ($a !~ /^-?[0-9]+.?[0-9]*$/ || $a == 0))
  {
    if($a == 0)
    {
      print "Parametr a nie może być zerem!n";
    }
    else
    {
      print "Podano nieprawidłowy parametr!n";
    }
 
    print "Podaj parametr a: ";
  }
 
  print "Podaj parametr b: ";
  my $b = 0;
  while(chomp($b = <STDIN>) && $b !~ /^-?[0-9]+.?[0-9]*$/)
  {
    print "Podano nieprawidłowy parametr!n";
    print "Podaj parametr b: ";
  }
 
  print "Podaj parametr c: ";
  my $c = 0;
  while(chomp($c = <STDIN>) && $c !~ /^-?[0-9]+.?[0-9]*$/)
  {
    print "Podano nieprawidłowy parametr!n";
    print "Podaj parametr c: ";
  }
 
  @arg = ($a, $b, $c);
}
 
sub Delta
{
  $delta = ($_[1] * $_[1]) - (4 * $_[0] * $_[2]);
  $delta;
}
 
$d = &Delta(@arg);
print "Delta wynosi: $dn";
 
if($d < 0)
{
  print "Brak rozwiązań w liczbach rzeczywistychn";
}
elsif($d == 0)
{
  $x1 = -$arg[1] / (2 * $arg[0]);
  print "Rozwiązanie: jedno miejsce zerowe.n";
  print "x = $x1n";
}
elsif($d > 0)
{
  $x1 = (-$arg[1] - sqrt($d)) / (2 * $arg[0]);
  $x2 = (-$arg[1] + sqrt($d)) / (2 * $arg[0]);
  print "Rozwiązanie: dwa miejsca zerowen";
  print "x1 = $x1, x2 = $x2n";
}