Small FORTRAN code for combinations. BUG

  • Fortran
  • Thread starter jajabinker
  • Start date
  • #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
34,687
6,394


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

Related Threads on Small FORTRAN code for combinations. BUG

Replies
2
Views
628
Replies
2
Views
2K
  • Last Post
Replies
2
Views
2K
  • Last Post
Replies
2
Views
4K
Replies
3
Views
10K
  • Last Post
Replies
4
Views
3K
  • Last Post
Replies
5
Views
4K
  • Last Post
Replies
17
Views
3K
Replies
3
Views
2K
  • Last Post
Replies
4
Views
1K
Top