Controllability/Observability in Controller/Observer form
It seems like you have slightly misunderstood the frequency domain controllability/observability condition. If we have a linear time invariant single-input, single-output system written in state space form, and we form the transfer function
$$ G(s) = c^T (sI - A)^{-1} b + d$$
then we can state that the system is both controllable and observable iff there is no pole-zero cancellation in the transfer function. On the other hand, if there is pole-zero cancellation, then the system is either uncontrollable or unobservable or both (but we cannot tell which).

This is natural, because the transfer function is an expression of the relationship from input to output, but controllability considers the input-to-state relationship, and observability the state-to-output relationship. Hence we can never tell the difference between an unobservable and uncontrollable system by considering the transfer function alone.

If you would like to check controllability and observability independently, then you need to use another condition, e.g. the system is controllable iff
$$ \left[ \begin{array}{ccccc} b &amp; Ab &amp; A^2 b &amp; \ldots &amp; A^{n-1} b \end{array} \right]$$
is a full-rank matrix. Likewise, the system is observable iff 
$$ \left[ \begin{array}{c} c^T \\ c^T A \\ c^T A^2 \\ \cdots \\ c^T A^{n-1} \end{array} \right] $$
is a full-rank matrix. You can check this by reducing the matrix to row-echelon form using Gaussian elimination if working it out by hand, or with the rank() function in MATLAB or matrix_rank() in NumPy if you're using a computer.