Is there a way that i can write a jcl and find out which are the unused programs ?
How do you define unused program? For subprograms you could check the library for all called routines (although that's not a very straight forward process to start with) and mark them. However, for batch and CICS programs how would you classify them as unused? Over time you could track via SMF statistics which programs are executed but it would take a while (at least a year, since some programs only run once a year) before you could even begin to identify which programs are "unused" in the sense of not being executed.
The simpler solution would be simply to archive everything and see what's pulled back from archive.