(d) should have過去分詞です。shouldとought toは同じなので、ought to have過去分詞でも同じです。
shouldの基本訳の「~すべき」に過去の「た」をつけて、「~すべきだったのに」と訳せばいいです。「~すべきだったのに」というのは、結局「~しなかった」ということが示唆されています。日本語訳どうぞ。
「~しなかった」までは書かなくていいです。
「あなたは英語を勉強するべきだったのに」やらなかった感は出てますね。
(参考)を見てください。
shouldの基本訳には「~のはずだ」もありました。それに過去の「た」をつけて、「~したはずだ」と訳す場合もあります。日本語訳どうぞ。
文脈で決まりますが、まずは「~すべきだったのに」で訳して、おかしいときに「~したはずだ」でいきましょう。今回は「~したはずだ」でいきます。
「あなたは英語を勉強したはずだ」
(注意)を見てください。
否定文である、should not have過去分詞やought not to have過去分詞では逆に「~すべきではなかったのに」となります。
「~すべきではなかったのに」というのは、結局「~した」ということが示唆されています。日本語訳どうぞ。
「~した」までは書かなくていいです。
「あなたは数学を勉強するべきではなかったのに」
今日テストが無かったから、勉強するべきではなかったというようなことでしょう。でも、無駄なことなんて何一つありません。きっと良いことありますよ。
(e) need not have過去分詞です。need notの基本訳の「~する必要がない」に過去の「た」をつけて、「~する必要はなかったのに」と訳せばいいです。「~する必要はなかったのに」というのは、結局「~した」ということが示唆されています。日本語訳どうぞ。
さっきの例文に似ています。
「あなたは数学を勉強する必要はなかったのに」