First of all when it comes to "problems" you should use decidable -- recursive for corresponding language and semi-decidable -- recursively enumerable for corresponding language.
Now, lets see the definitions of P, NP and NPC
- P - set of problems solvable in polynomial time by a deterministic TM
- NP - set of problems solvable in polynomial time by a non-deterministic TM
- NPC - a subset of NP where the problems are also NP-hard
In all the definitions above, the problems must be "decidable" - who (which machine) decides it is the difference.
https://gatecse.in/p-np-np-complete-np-hard/