Please don't ask us to do your homework for you. In case you haven't figured it out yet, a running program is always in RAM (or possibly virtual memory on modern systems). Google is your friend. The answers to all of these questions can be found in the Wikipedia I think. It is elementary computer science.
Anyway, to sort of answer your question(s) about relocatable code. On some systems, such as embedded systems, you need to specify where in memory space your code will run from, usually in ROM. This is non-relocatable code. On current systems, where you are not running code from Read-Only-Memory (ROM), your code needs to be runable from any memory location, hence the "relocatable" concept - in that the code can be relocated to any suitable place in memory. When the operating system loads such a program into RAM, it decides where it should go, and then "fixes up", or "relocates", the memory addresses in the code to point to the correct memory addresses that it will actually be running from.