There's no reason to use Pascal (see, e.g., why Pascal is not my favorite programming language or why Pascal sucks), but that doesn't mean it's not worth knowing. Probably the least understood feature of Pascal is the use of the semicolon (that's `;', to any native English-speakers who may have wandered in). My University professor was unable to explain this at all (not too surprising; he was unable to explain a lot of other things).

Most of the confusion stems from people thinking semicolons in Pascal are like semicolons in C. They're not, and using them as if they were will insert lots of empty statements into your code, and the occasional syntax error. C uses semicolons as terminators -- so you put one at the end of every statement.

Pascal uses semicolons as separators -- so you put one between statements. This is all you need to know to use them correctly. Should I put in a semicolon? Only if the next thing is a statement!

Some examples:

No semicolon before end:
end is not a statement (it's a part of the block structure), so you don't put a semicolon before it:
if (n = 0) then begin
  writeln('N is now zero');
  func := 1
end
Adding the (redundant) semicolon before the end just adds an empty statement before it, which is legal, so the compiler doesn't complain. But don't do it: not understanding the rule will lead to trouble!
No semicolon before else:
else is part of the if ... then ... else ... statement, so you cannot separate it out!
write('N is no');
if (n = 0) then
  write('w')
else
  write('t');
writeln(' zero.')
Adding the semicolon in anyway ends the if statement (turning it into a if ... then ... statement. If you do that, the next statement is else ..., which is illegal, and the compiler gives an error message. Not understanding this error message is the #1 reason why people think Pascal has complicated rules for semicolon placement.
begin ... end blocks are statements
So after an end, you continue to put a semicolon if you need to separate it from the next statement. This is in marked contrast to C, where a { ... } block doesn't take a semicolon.
That's it!

Oh, one more thing: the last end in a program isn't followed by any statement, so it doesn't take a semicolon after it. But it's the end of the program, so it take a full stop: end..

The rules for semicolon placement in Pascal are no longer than those for C;