#!/usr/bin/perl

use 5.040.3;

np:
say "-" x 78;
print "Nivel pesimista       : ";
chomp(my $a = <STDIN>);
goto np if ($a ne 0+$a);

nn:
print "normal (más probable) : ";
chomp(my $b = <STDIN>);
goto nn if ($b ne 0+$b);

NO:
print "            optimista : ";
chomp(my $c = <STDIN>);
goto NO if ($c ne 0+$c);

say "-" x 40;

nx:
print "Cálculo puntual en    : ";
chomp(my $x = <STDIN>);
goto nx if ($x ne 0+$x);

mm:
print "Masa central deseada [<1]: ";
chomp(my $masa = <STDIN>);
goto mm if ($masa ne 0+$masa);
if ($masa > 1 || $masa < 0) {
    goto mm;
}
say "-" x 40;

my ($h, $AP);

$h = 2/(($b-$a)+($c-$b));

triangular($a,$b,$c,$masa);  # el orden de los parámetros importa 

exit 2;


sub triangular {
    my ($a,$b,$c,$masa) = @_;
    say "La altura es $h";
    $AP = (($b-$a)*$h/2) / ( (($b-$a)*$h/2) + (($c-$b)*$h/2) ); # proporción de la izquierda del área total
    my $AO = 1-$AP;        # derecha del triángulo, de $b a $c
    say "El área nivel pesimista es $AP";
    say "El área nivel optimista es $AO";
    warn "El área no suma 1" if $AP+$AO != 1;
    say "\n";
    my $prob = (1-$masa)/2;  # triangulitos a los lados
    my $xx = puntop($prob);
    $prob = $masa + (1-$masa)/2;
    my $y = puntop($prob);
    printf "Entre el punto %.6f y el punto %.6f esta el %.6f de probabilidad\n\n",$xx,$y,$masa;                  # bien
    printf "El punto %.6f deja abajo (pesimista) %.6f de probabilidad y arriba (optimista), el %.6f\n\n", $x, probab($x), (1-probab($x));                      # bien
}

sub probab{
    my $x = shift;
    return 0 if ($x > $c || $x <= $a);
    if ($x <= $b){
	return (($x-$a)**2)*$h/($b-$a)/2;
    }else{
	return 1-(($c-$x)**2)*$h/($c-$b)/2;
    }
}

sub puntop{
    my $probabilidad = shift;
    die "Error" if ($probabilidad <=0 || $probabilidad > 1);
    if ($probabilidad <= $AP){
	return sqrt( $probabilidad*($b-$a)/$h ) +$a;
    }else{
	return -(sqrt( (1-$probabilidad)*($c-$b)/$h ) -$c);
    }
}

__END__

La distribución triangular parece muy simple y práctica,
  pero si los niveles extremos están muy separados, la 
  cosa (triángulos bajitos y anchos) se parece mucho a una
  uniforme donde lo único que importan son los extremos.
  Como no somos policías (plural mayestático) no se pregunta
  cuánto de probable es el valor más probable :-)
  

