а) 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.
s:string;
i,n,k:integer;
begin
Write('Введите выражение: '); Readln(s);
i:=Length(s);
while i>0 do begin
if s[i]=')' then begin
k:=0; Dec(i);
while (s[i]<>'(') and (i>0) do
begin Dec(i); Inc(k) end;
Delete(s,i+1,k)
end;
Dec(i)
end;
Writeln(s)
end.
Тестовое решение:
Введите выражение: 3*(a+b)/(a-b);
3*()/();