Solving Fortran Error on Pascal's Triangle Program

  • Context: Fortran 
  • Thread starter Thread starter Tubs
  • Start date Start date
  • Tags Tags
    Error Fortran
Click For Summary
SUMMARY

The forum discussion centers on resolving a Fortran compilation error in a program designed to print Pascal's triangle. The error arises from the invalid declaration or reference to the function FACT when calculating factorial values. The solution involves defining the function FACT with an explicit return type and using a local variable to store intermediate results. Specifically, the function should be declared as INTEGER FUNCTION FACT(N) to ensure proper type handling.

PREREQUISITES
  • Understanding Fortran programming syntax and structure
  • Familiarity with function declarations and return types in Fortran
  • Knowledge of factorial calculations and their implementation
  • Basic concepts of Pascal's triangle and its mathematical properties
NEXT STEPS
  • Review Fortran function declarations and return types
  • Learn about scope and lifetime of variables in Fortran
  • Explore error handling techniques in Fortran programming
  • Investigate optimization techniques for recursive functions in Fortran
USEFUL FOR

This discussion is beneficial for Fortran developers, students learning programming concepts, and anyone interested in algorithm implementation for mathematical problems like Pascal's triangle.

Tubs
Messages
20
Reaction score
0
I am trying to write a fortran program to take an integer n and print out the first n rows of Pascal's triangle. The code I have so far:

PROGRAM PascalTriangle
IMPLICIT NONE
INTEGER i, n, j, ktemp, ktemp1, ktemp2, ktemp3, ktemp4, ktemp5
WRITE(6,*), "Enter a positive integer n:> "

READ(5,*) n

do 10 i = 1, n
do 20 j = 1, i
ktemp1 = FACT(i)
ktemp2 = FACT(j)
ktemp3 = i - j
ktemp4 = FACT(ktemp3)
ktemp = ktemp1 / ktemp2 * ktemp4
write(*), ktemp
20 continue
10 continue
STOP
END

FUNCTION FACT(N)
FACT=1
DO 30 J=2,N
FACT=FACT*J
30 CONTINUE
RETURN
END

Whats really confusing me is that the compiler throws a single error at the ktemp1 = FACT(i) line, stating that its an invalid declaration of or reference to symbol FACT. It looks like it should be a simple fix but I can't seem to get around the error. Any help is greatly appreciated.
 
Technology news on Phys.org
Try using a local variable to hold the intermediate values of "fact" and only assigning it to the functions return value once at the completion of the function.


Code:
function fact(n)
tmpfact :: integer
tmpfact = 1 
do 30 j-2,n
    tmpfact = tmpfact * j
30 continue
fact=tmpfact
return
 
Tubs said:
FUNCTION FACT(N)

Try including the type of data being returned, in the function definition:

INTEGER FUNCTION FACT(N)
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 25 ·
Replies
25
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 17 ·
Replies
17
Views
7K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 12 ·
Replies
12
Views
3K