Выберите фрагмент программы, в котором ищется произведение 1*2*3*4*5
1. а:=0; i:=1; repeat a:=a*i; i:=i +1 until i>=6 ;
2. а:=1; i:=0; repeat a:=a*i; i:=i +1 until i<5 ;
3. а:=1; i:=1; repeat a:=a*i; i:=i +1 until i<6 ;
4. а:=1; i:=1; repeat a:=a*i; i:=i +1 until i>=6 ;
4. a : = 1; i := 1; repeat a := a * i; i := i + 1 until i >= 6.
Объяснение:
Каждый вариант ответа повторяет процесс повторения, но отличается условием и присваиванием значений переменным.
Поэтому посмотрим сначала на один и тот же процесс:
repeat a := a * i; i := i + 1Мы умножаем переменную a на переменную i, после чего увеличиваем переменную i на + 1.
Посмотрим теперь на присваивания в разных ответах.
1. a := 0; i := 1.Здесь мы изначально присваиваем числу а значение 0, i значение 1, то есть мы можем уже понять, что этот вариант ответа неправильный, т.к. у нас постоянно будет 0*1, 0*2, 0*3 и т.д.
2. a := 1; i := 0.Здесь мы изначально присваиваем числу а значение 1, i значение 0, что тоже неверно, потому что это в итоге будет выглядеть так:
1*0, 0*1, 0*2 и т.д.
3,4. a := 1, i := 1Здесь в двух вариантах ответа мы присваиваем двум переменным значение 1, которое выглядит правильно, потому что будет выглядеть следующим образом: 1*1, 1*2, 2*3, и т.д.
Мы откинул 1 и 2 ответы, так что осталось лишь посмотреть на условия в двух последних ответах.
3. until i < 6То есть мы будем выполнять перемножение до тех пор, пока i не станет меньше 6, что означает что функция выполнится всего 1 раз, потому что i изначально равно 1, что меньше 6.
Остаётся только 4 вариант ответа, где условие:
4. until i >= 6Что означает, что функция будет повторяться до тех пор пока i не станет больше или равно 6, что правильно.
Вот как это бы выглядело:
1*1; (i теперь 2)
1*2; (i теперь 3)
2*3; (i теперь 4)
6*4; (i теперь 5)
24*5; (i теперь 6, что равно 6 и повтор больше не происходит)
Надеюсь, логика понятно.
Последующая детализация функций приведена справа (серо-голубой фон).
// PascalABC.NET 3.3, сборка 1590 от 03.12.2017
// Внимание! Если программа не работает, обновите версию!
function a(x:real):real;
begin
if x<=1 then Result:=Pi/4 else Result:=Pi
end;
function z(a,x:real):real;
begin
Result:=0;
for var k:=0 to 10 do
Result+=Ln(x)*Sin(k*(x-a))
end;
begin
var x:=0.6;
repeat
Writeln(x:3:1,z(a(x),x):15:8);
x+=0.2
until x>1.81
end.
Результат
0.6 3.76029679
0.8 -0.17885683
1.0 0.00000000
1.2 -0.05865268
1.4 0.04432873
1.6 -0.54134665
1.8 -0.34651256