Number to word converter (1 to 99 inclusive)
The code is broken. If a number is greater than 20 and ends with 0, print1to20(num_b) will not do what it should. 
Don't mix the logic with the output. I'd change the return type of your functions to std::string. It'll make the code more testable and reusable.
Don't just print something to std::cout in a case of an error. Throw an exception instead. 
Declare each variable as late as possible:

int num_a, num_b; // num = (a)(b);
num_a = num - num%10; 
num_b = num%10;


should be

int num_a = ...;
int num_b = ...;

Use more descriptive names. I have no clue what num_a mean. What is a? Something like first_digit and second_digit would be better (well the first one is not exactly a digit, so you can come with even better names).
There's no need to return 0 from the main function explicitly (sure, you can if you want to). 
Write proper automated tests for your code to reduce the number of bugs (your bug is very likely to get caught by tests). In fact, you can check all possible valid inputs. There're only 100 of them.
There's nothing wrong in having stand-alone functions. There's no entity here, so I don't see the point of modeling this problem in terms of objects. A function from an int to its string representation is just a function.