X
PrevPrev Go to previous topic
NextNext Go to next topic
Last Post 04 Dec 2010 05:52 PM by  anon
IDL premuration - combination
 0 Replies
Sort:
You are not authorized to post a reply.
Author Messages

anon



New Member


Posts:
New Member


--
04 Dec 2010 05:52 PM
    Hi, i am trying to develop a code that determine the different combination of set of numbers stored in an array. e.g. a = [2, 5, 7] then i need the program to determine and calculate the number and content of arrays of combinations as follows: [2,5] [2,7] [5,7] [2,5,7] i have written an IDL code to so so but the result is not correct. Any help is very appreciated pro display, values, size ;s = Size(values) ;NY = s[3] FOR i = 0, size-1 DO BEGIN print, values[i] ENDFOR ;print, NY end pro fill, values, size, data for i = 0, size - 1 do begin values[i] = data endfor end pro swap, values, i, j s = Size(values) NY = s[3] if (i le NY-1 and j le NY-1) then begin temp = values[i] values[i] = values[j] values[j] = temp endif end pro sortt, values, size s = Size(values) NY = s[3] for i = 0, size-1 do begin for j = 0, (size - 1) - i do begin if (j ne size - 1) then begin if (values[j+1] lt values[j]) then begin swap, values, j, j + 1 endif endif endfor ;print, values[i - 1] endfor end function Tot, values, size sum = 0 for i = 0, size - 1 do begin sum = sum + values[i] endfor return, sum end pro copy, first, second, size for i = 0, size-1 do begin first[i] = second[i] endfor end function equal, first, second, size result = 1 lt 2 for i = 0, size - 1 do begin ; MODIFIED if not (first[i] = second[i]) then begin result = 1 gt 2 return, result endif endfor return, result end function sorted_descending, values, size last = 2147483647 result = 1;;;; for i = 0, size - 1 do begin if (values[i] le last) then begin last = values[i] endif else begin result = 0 ;;; endelse endfor return, result end pro rev, values, first, last i = first j = last while (i le j) do begin swap, values, i, j i = i + 1 j = j - 1 endwhile end function next_pre, values, size if (size eq 1) then begin n = 0 return, n endif i = size while 1 do begin k = i - 1 i = i - 2 if (values[i] lt values[k]) then begin j = size - 1 while not (values[i] lt values[j]) do begin j = j - 1 endwhile swap, values, i, j rev, values, k, size n = 1 ;;;;; return, n endif if (i eq 1) then begin rev, values, 1, size n = 0 ;;;; return, n endif endwhile end pro combine1, values, length last = intarr(10) for size = 2, length do begin fill, last, size, 0 sortt, values, length ;np = next_pre( values, length) ;e = equal(last, values, size) ;sd = sorted_descending(values, size) ;t = Tot(values, size) while (next_pre (values, length) eq 1) do begin print, "-----" print, size print, "-----" if (not equal (last, values, size)) then begin if (sorted_descending (values, size)) then begin if (Tot (values, size)) ne 2147483647 then begin print, "########" display, values, size endif endif endif copy, last, values, size endwhile endfor end pro combine values = [11, 22, 31, 14, 24, 16, 7] length = 7 display, values, length combine1, values, length end
    You are not authorized to post a reply.