Напишите, что будет выведено на экран в ходе выполнения фрагмента программы:
1) Var k: integer;
Begin
FOR k := 1 TO 7 do
Writeln (к);
2) Var x,y: integer;
Begin
у := 5;
FOR х := 1 TO 10 do
y := у + 4;
Writeln (y);
3) Определить значение переменной у после выполнения следующих фрагментов программы:
Var x,у: integer;
Begin
у := 1;
FOR х:= 1 TO 6 do
y := y *2;
y:=у+x;
Writeln (у);
1) Дана последовательность операторов:
а: =3;
b: =2;
repeat
а:=а+2;
b:=b*2;
b:=a+b;
until b>14;
s:=а*b;
Сколько раз будет повторён цикл и какими будут значения переменных а, b, s после исполнения этой последовательности операторов?
2) Дана последовательность операторов:
а:=2;
b:=4;
while a*b<513 do
begin
а: =а*2;
b: =b+3;
end;
s: =а*10;
Сколько раз будет повторен цикл и какими будут значения переменных a, b, s после исполнения этой последовательности операторов?
110₂ = 1×2²+1×2¹+0×2⁰ = 4+2 = 6₁₀
А теперь посмотрим на картинку во вложении.
Три младших разряда, дающие требуемые 110₂, мы не трогаем. А в старшие разряды начинаем добавлять по +1, получая из 000 значения 001, 010, 011...
А это ни что иное, как числа 0, 1, 2, ... но только с четвертого бита, а не с первого, поэтому они будут множителями числа 2³ = 8. И будем получать последовательно 0, 8, 16, ... Остается только прибавлять к ним наше исходное 6, получая ряд 6, 14, 22, ...
Долго? Но это из-за разъяснения.
А вот пример. Пусть нам надо найти числа, не превышающие 31, такие, что в трех младших разрядах будет 101₂. Как решить?
101₂ = 5. Три бита заняты, счетчик пойдет с четвертого, давая множители 2³=8. Получаем ряд 5, 8+5=13, 2×8+5=21, 3×8+5=29.
Еще пример. Пусть теперь в младших разрядах записано 1010, а границей будет 45.
1010₂ = 10₁₀. Занято 4 разряда, поэтому счетчик пойдет с пятого, порождая множители кратные 2⁴ = 16. Получаем 10, 16+10=26, 2×16+10=42, ...