Pseudo-code is not an option. You have to have it.
The purpose of such a course is not about the expression of algorithms in a nearly ready to run form. It is about the work involved in their development. The strategies you use. The ideas you consider, try and abandon as they don't seem so good.
So how could we use a formal language to write down fuzzy ideas ?
Given a problem, like "compute how many leap years there are between y1 and y2", you have to try different ideas. And these ideas are not yet wholly developed. So it is much too early to put them under the form of code.
But you still have the need to keep the ideas in written form, if you want to remember/transmit them.
An idea may be
A. test all years between y1 and y2
count these that are leap years
another could be
B. use a formula about multiples of 4, 100 and 400.
This is not supposed to be a complete description of the final algorithm. But it is an idea which has to be written, as a first step of the work.
A second step would be to give more details. For the second solution :
B.1 use a formula f for leap years from year 0 to y
compute the difference f(y)-f(0)
An a third step
B.2 f(y) = number of multiples of 4
- number of multiples of 100
+ number of mltiples of 400
A decent ready-to-program version emerges only now
B.3 function leap_years_from_0 (y)
= (y / 4) - (y / 100) + (y / 400)
function leap_years_between(y1, y2)
= leap_years_from_0(y2) - leap_years_from_0(y1)
In such a course, the important point is the journey between the problem and the solutions. It is not the exposure of algorithms/programs in there final version.