а) for, так как наша переменная, которая будет управлять циклом(как принято i ) будет принимать значения от 0 до 9, если начинать цикл с 0. Мы создаем переменную result и помещаем внутри цикла следующее выражение: result += 1/(i + 1). На выходе получим результат данного выражения.
б) В данном случае, можно использовать либо for range based, где выражение цикла выглядит так for (const auto & grade : grades), либо while с условием пока не дойдем до конца списка, зависит какой вид списка мы используем. Я считаю больше подходит for.
в) Думаю for range-based, либо обычный for.
г) ответ как и в б, можно использовать либо for ranged base, либо while, если значения аргументов содержатся в массиве, то тогда for range-based. Если например, тестирование происходит с пользовательского ввода, то тогда удобнее было бы использовать while.
Program sieve_of_Eratosthenes;
var
n, i, x:integer;
a: array[1..32000] of boolean;
begin
readln(n);
for i:=2 to (n+1) div 2 do
begin
x:=i*2;
while x<=n do
begin
a[x]:=true;
x:=x+i;
end;
x:=0;
end;
for i:=1 to n do if not a[i] then write(i,' ');
readln;
end.