0

I am trying to display the Pythagorean Theorem in bash for my son - which should be easy. I need it in function. However the theorem a2 + b2 = c2 is just not making sense here. Don't know what I am doing wrong.

#!/bin/bash
read side_a side_b
hypo=$(( (side_a*side_a) + (side_b*side_b) ))
echo "side: $side_a side: $side_b hypotenuse: $hypo"


$ /tmp/hypo  
5 5
side: 5 side: 5 hypotenuse: 50
capser
  • 2,442
  • 5
  • 42
  • 74
  • what exactly are you confused about in bash? It is performing correctly for the inputs you gave it. – jeremysprofile Nov 20 '18 at 19:38
  • The code gives you square of length of the hypotenuse. You have to calculate square root to get length of hypotenuse. – pii_ke Nov 20 '18 at 19:41
  • ... and then you'll bump into https://stackoverflow.com/questions/12722095/how-do-i-use-floating-point-division-in-bash – Benjamin W. Nov 20 '18 at 19:44

1 Answers1

1

time to switch to awk

$ awk '{print "side:",$1,"side:",$2,"hypotenuse:",sqrt($1^2+$2^2)}'
3 4
side: 3 side: 4 hypotenuse: 5

$1 and $2 are the input fields, the rest should read trivially.

With little more effort, you can generate the integer solutions as well...

$ awk 'BEGIN{for(i=1;i<=10;i++) for(j=1;j<i;j++) print 2*i*j, i^2-j^2, i^2+j^2}'

4 3 5
6 8 10
12 5 13
8 15 17
16 12 20
24 7 25
10 24 26
20 21 29
30 16 34
40 9 41
12 35 37
...
karakfa
  • 66,216
  • 7
  • 41
  • 56