87 lines
2.2 KiB
Plaintext
87 lines
2.2 KiB
Plaintext
include "ConsoleWindow"
|
|
|
|
// Set width of tabs
|
|
def tab 10
|
|
|
|
local fn gcd( a as long, b as long )
|
|
dim as long result
|
|
|
|
if ( b != 0 )
|
|
result = fn gcd( b, a mod b)
|
|
else
|
|
result = abs(a)
|
|
end if
|
|
end fn = result
|
|
|
|
begin globals
|
|
dim as long triangleInfo( 600, 4 )
|
|
end globals
|
|
|
|
local fn CalculateHeronianTriangles( numberToCheck as long ) as long
|
|
dim as long c, b, a, result, count : count = 0
|
|
dim as double s, area
|
|
|
|
for c = 1 to numberToCheck
|
|
for b = 1 to c
|
|
for a = 1 to b
|
|
s = ( a + b + c ) / 2
|
|
area = s * ( s - a ) * ( s - b ) * ( s - c )
|
|
if area > 0
|
|
area = sqr( area )
|
|
if area = int( area )
|
|
result = fn gcd( b, c )
|
|
result = fn gcd( a, result )
|
|
if result == 1
|
|
count++
|
|
triangleInfo( count, 0 ) = a
|
|
triangleInfo( count, 1 ) = b
|
|
triangleInfo( count, 2 ) = c
|
|
triangleInfo( count, 3 ) = 2 * s
|
|
triangleInfo( count, 4 ) = area
|
|
end if
|
|
end if
|
|
end if
|
|
next
|
|
next
|
|
next
|
|
end fn = count
|
|
|
|
dim as long i, k, count
|
|
|
|
count = fn CalculateHeronianTriangles( 200 )
|
|
|
|
print
|
|
print "Number of triangles:"; count
|
|
print
|
|
print "---------------------------------------------"
|
|
print "Side A", "Side B", "Side C", "Perimeter", "Area"
|
|
print "---------------------------------------------"
|
|
|
|
// Sort array
|
|
dim as Boolean flips : flips = _true
|
|
while ( flips = _true )
|
|
flips = _false
|
|
for i = 1 to count - 1
|
|
if triangleInfo( i, 4 ) > triangleInfo( i + 1, 4 )
|
|
for k = 0 to 4
|
|
swap triangleInfo( i, k ), triangleInfo( i + 1, k )
|
|
next
|
|
flips = _true
|
|
end if
|
|
next
|
|
wend
|
|
|
|
// Find first 10 heronian triangles
|
|
for i = 1 to 10
|
|
print triangleInfo( i, 0 ), triangleInfo( i, 1 ), triangleInfo( i, 2 ), triangleInfo( i, 3 ), triangleInfo( i, 4 )
|
|
next
|
|
print
|
|
print "Triangles with an area of 210:"
|
|
print
|
|
// Search for triangle with area of 210
|
|
for i = 1 to count
|
|
if triangleInfo( i, 4 ) == 210
|
|
print triangleInfo( i, 0 ), triangleInfo( i, 1 ), triangleInfo( i, 2 ), triangleInfo( i, 3 ), triangleInfo( i, 4 )
|
|
end if
|
|
next
|