Small FORTRAN code for combinations. BUG

  • #1
small FORTRAN code for combinations. BUG!

Code:
PROGRAM test
implicit double precision(a-h,o-z)

INTEGER :: r=2,n=4,k=1
INTEGER,allocatable :: comb(:)           !array to hold a set of combinations
        allocate(comb(r))
        comb(1)=1
        CALL iterate(1,n-r+1,1)
CONTAINS

RECURSIVE SUBROUTINE iterate(s,e,j)
INTEGER,INTENT(IN) :: s,e
        DO i=s,e
         comb(j)=i
         if(j.LT.r) then
          CALL iterate(i+1,e+1,j+1)
         END IF
         WRITE(*,*)comb
        END DO
END SUBROUTINE iterate

END PROGRAM test

for n=4,r=2
prints
1 2
1 3
1 4
1 4 <-here
2 3
2 4
2 4 <-here
3 4
3 4 <-here

For any n it prints and extra line once for r=2.

For r=3 it prints extra twice.

can anyone help?
 
Last edited by a moderator:

Answers and Replies

  • #2


NVM solved it, Silly :rofl:

put the WRITE(*,*)comb statement under the following IF condition.

IF(j.EQ.r) WRITE(*,*)comb

Just for reference this is the working code to print all combinations of 1-9 in sets of r.
Code:
PROGRAM combinations

INTEGER :: r=4,n=32
INTEGER,allocatable :: comb(:)

	allocate(comb(r))
	CALL iterate(1,n-r+1,1)
CONTAINS

RECURSIVE SUBROUTINE iterate(s,e,j)
INTEGER,INTENT(IN) :: s,e	
	DO i=s,e
         comb(j)=i
         IF(j.LT.r) CALL iterate(i+1,e+1,j+1)
	 IF(j.EQ.r) WRITE(*,*)comb
	 END IF
	END DO
END SUBROUTINE iterate

END PROGRAM test
 
Last edited by a moderator:
  • #3


For future reference, use [noparse]
Code:
...
[/noparse] tags around your code, not quote tags. I did this in your posts.
 

Suggested for: Small FORTRAN code for combinations. BUG

2
Replies
60
Views
632
Replies
2
Views
548
Replies
12
Views
637
Replies
22
Views
1K
Replies
12
Views
751
Replies
11
Views
682
Replies
34
Views
1K
Replies
2
Views
487
Back
Top