Hi shaan_aragorn
I am doing C++ for almost two and a half years, though I am still at school.
The problem you are facing is very common, and students have to tackle it on their own. One can learn all the aspects of a programing language in no time, but the real problem is- algorithm development. I am nobody to advise you, but the way I did it was to read the maximum number of examples given in the course book. Read each example, and each line of code in it carefully and ask yourself: What is this code supposed to do?
There may be instances where the code is a compact one and difficult to understand. Try to break it into simpler codes.
After you have completely grasped the algorithm of the program, close the book and try to write it yourself without peeking into the book.
No doubt it will take time, and sometimes it gives you hell of a frustration. But once you have understood these examples, you feel a little more confident. Now try to attempt the exercise questions yourself. Here also, attempt each and every question.
A major thing to remember here is to try the maximum number of programs on your computer. After you have written a code in the compiler/interpreter debug it line by line, and insert codes which can help you understand how the computer solves the problem.
For example:
C++
for(int i=0;i<10;i++)
{
if(i%2==0) cout<<"even";
else cout<<"odd";
}
The computer will run the code written in braces 10 times, each time increasing the value of i by 1 by the computer. If i's value is divisible by 2, your monitor will display "even", otherwise it will display "odd".
Doing things in this way will lay down a firm foundation for you to build on. The programs given in introductory chapters are such that you have got to grasp them completely. After that, though the subsequent chapters have new concepts, but they are not so difficult if you have done your homework the right way.
Regarding the type of problems, there are 1) Mathematical problems: e.g. categorizing numbers as prime or composite, finding the factorial of a number etc.
2) Non-mathematical problems ( though there is some basic mathematics involved here.): converting lower-case characters to upper-case, finding out vowels and consonants, or whitespaces etc.
Both types of problems need practice. However, mathematical problems are comparatively easier: you have already got formulae for them. (Here again, the difficult part is making the system understand those formulae by suitable coding.)
It all depends on how much time you can devote, and how much time you are left with. But beware! Never try to start the next chapter without completing the previous one ( It will just make the situation more desperate for you). And yes, hard work pays greatly in programing: the harder you strive, the better you become. I am sure you will soon overcome this problem.
I hope my post was helpful in some way.
regards
Mr V