chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

[PERL] trójmian kwadratowy

Ta wersja
blog.piotrnalepa.pl/2009/05/30/perl-trojmian-kwadratowy
Opublikowano
Autor
, Staff Software Engineer
Kategoria
Inne
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 17 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

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.

Przykład 1PERL
#!/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";
}
Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!