Are they the same thing? If not, what are the differences?
Adobe Shockwave was a media player (formerly by Macromedia), and can be used to run Adobe Director applications (usually in a web browser as a plugin). It has largely been superseded by Adobe Flash (also originally by Macromedia). IIRC, Flash was originally just a new fancy version of Shockwave, usually referred to as Shockwave Flash (which is where it gets confusing). This is why most Flash objects have the SWF extension.
Flex is built on top of Flash, and is designed to simplify a few aspects of flash. Think of Flex like a toolkit (à la Qt and GTK) for Flash.
Adding a bit: originally, the Shockwave player was a heavy-duty player intended for CD-ROM interfaces and such things, and Flash was a more light-weight player intended for web-based interfaces. Though SW is not so popular these days, this is still roughly true - feature-wise, Shockwave "supersedes" Flash in that it can play Flash content, as well as do things Flash can't do (like render hardware-accelerated 3D).
With that said, while the feature lists differ Flash and Shockwave are equivalent technologies. They're both content players that can stand alone or run as browser plugins.
For more on Flex see this similar question.
I suggest going to Wikipedia or Google. Please don't ask their differences...