> SameRow(a, d) -> Cube(d)
Better to stay closer to the English. The sentence to be translated says a is left of or right of d only if it's a cube. Notice that being left of or right of is not the same thing as being in the same row! a could be left of d (or right of d) while also being in a different row.
> FrontOf(e, b) <-> (Tet(e) -> RightOf(e, b))
Looks like you took the major operator to be the biconditional rather than the conditional. Note that commas are often used to indicate where the major operator goes (i.e. commas can work sort of like parentheses).
So we have:
If e is a tetrahedron, then it's to the right of b if and only if it is also in front of b
If e is a tet then (it's to the right of b if and only if in front of b)
> Dodec(b) -> ~(FrontOf(b, d) v BackOf(b, d))
It's best to stay close to the English. The English sentence says if b is a dodec, then if it's not in front of d, it's not in back of d either. So the antecedent is OK, but the consequent should also be a conditional.
> (Larger(a, c) & Larger(e, c)) & ~(Large(a) & Large(e))
The first conjunct is OK. However, your second conjunct, ~(Large(a) & Large(e)), does not imply that *neither* a nor e is large. Your version will be true if *one or the other* is not large; to say that *neither* is large you need either ~(Large(a) v Large(e)) or, alternatively, ~Large(a) & ~Large(b).
> Tet(c) -> ~Cube(b)
Remember, "unless" can be translated as "if not," and what follows "if" is the antecedent of a conditional (unless it's an "only if"). So: "b is a cube unless c is a tetrahedron" = "b is a cube if c is not a tetrahedron" = "if c is not a tetrahedron, then b is a cube"
The second part of 7.15 (figuring out sizes and shapes of a - e) is fun, but also somewhat tricky. It's worth spending some time on, but don't stay up all night working on it. Keep in mind the truth tables for -> and <->. For example, if you know that P -> Q, and Q is F, then the only way for the conditional to be true is if P is also F. Similarly, the only way P <-> Q can be true if Q is F is if P is also F, and in this case (biconditional) it's also the case, unlike the conditional, that if P is F Q must also be F.
> Tet(c) -> Tet(b)
remember, "if" indicates the antecedent. "c is a tetrahedron if b is" = "if b is a tetrahedron, then c is a tetrahedron."