Вы находитесь на странице: 1из 7

Учебные машины УМ-3

Задача 1:

Написать программу для машины УМ-3, которая позволяет вычислить сумму первых 10 нечетных чисел 1, 3, 5,7, 9, …,
i=9
19. Формула для вычисления суммы: S=∑ (2∗i+ 1)
i=0

Решить задачу двумя способами (с помощью циклов While и repeat).

Решение 1 (цикл While) – УМ-3

Алгоритм:

i := 1;

S := 0;

while i <= 9 do

begin

S := S + (2*i+1);

i := i+1

end

Распределение памяти (адрес - переменная):

0100 ~ S

0101 ~ t1

0102 ~ i
Адрес Содержимое ячейки Комментарий

0000 00 0009 0000 0102 i := 1


0001 00 000A 0000 0100 S := 0
0002 96 0102 000B 0008 while: if i > 9 then goto L1
0003 03 0102 000C 0101 t1 := i*2
0004 01 0101 0009 0101 t1 := t1 + 1
0005 01 0100 0101 0100 S := S + t1
0006 01 0102 0009 0102 i := i + 1
0007 80 0000 0000 0002 goto while
0008 99 0000 0000 0000 L1: stop
0009 00 0000 0000 0001 1
000A 00 0000 0000 0000 0
000B 00 0000 0000 0009 9
000C 00 0000 0000 0002 2

Решение 1 (цикл Repeat) – УМ-3

Алгоритм:

i := 1;

S := 0;

repeat

S := S + (2*i+1);

i := i+1
until i > 9

Распределение памяти (адрес - переменная):

0100 ~ S

0101 ~ t1

0102 ~ i

Адрес Содержимое ячейки Комментарий

0000 00 0008 0000 0102 i := 1


0001 00 0009 0000 0100 S := 0
0002 03 0102 000B 0101 repeat: t1 := i*2
0003 01 0101 0008 0101 t1 := t1 + 1
0004 01 0100 0101 0100 S := S + t1
0005 01 0102 0009 0102 i := i + 1
0006 95 0102 000A 0002 if i <= 9 then goto repeat
0007 99 0000 0000 0000 stop
0008 00 0000 0000 0001 1
0009 00 0000 0000 0000 0
000A 00 0000 0000 0009 9
000B 00 0000 0000 0002 2
УМ-2 (ДВУХАДРЕСНАЯ)
A1:=A1+A2;

Особенности операции сравнения


Пример:

If x>=5 then …

X – 0100

5 – 0101

05 – Код операции сравнения


05 0100 0101
94 0000 0005
Задача 2:
Написать программу для УМ-2, которая вычисляет сумму от 1 до 25.
i=25
S= ∑ (2∗i−(i mod 5))
i=1

Алгоритм:

i := 1;

S := 0;

repeat

S := S + (2*i - (i mod 5));

i := i + 1

until i > 25

Распределение памяти (адрес - переменная):

0100 ~ S
0101 ~ t1
0102 ~ t2
0103 ~ mod
0104 ~ i

Решение:
Адрес Содержимое ячейки Комментарий

0000 00 0008 0000 0104 i := 1


0001 00 0009 0000 0100 S := 0
0002 03 0104 000A 0101 repeat: t1 := i*2
0003 14 0104 000B 0102 t2 := i div 5 -> 0103 mod
0004 02 0101 0103 0101 t1 := t1 – 0103
0005 01 0100 0101 0100 S := S + t1
0006 95 0104 000C 0002 if i <= 25 then goto repeat
0007 99 0000 0000 0000 stop
0008 00 0000 0000 0001 1
0009 00 0000 0000 0000 0
000A 00 0000 0000 0002 2
000B 00 0000 0000 0005 5
000C 00 0000 0000 0019 25
Алгоритм:

i := 1;

S := 0;

repeat

S := S + (2*i - (i mod 5));

i := i + 1

until i > 25

Распределение памяти (адрес - переменная):


0100 ~ S
0101 ~ t1
0102 ~ t2
0103 ~ mod
0104 ~ i
Адрес Содержимое ячейки Комментарий

0000 00 0104 000C i := 1


0001 00 0100 000D S := 0
0002 00 0101 0104 repeat: t1 := i
0003 03 0101 000E t1 := t1*2
0004 00 0101 0104 t2 := i
0005 14 0102 000F t2 := t2 div 5 -> 0103 mod
0006 02 0101 0103 t1 := t1 – 0103
0007 01 0100 0101 S := S + t1
0008 01 0104 000C i := i + 1
0009 05 0104 0010 i <= 25 ?
000A 95 0000 0002 if i <= 25 then goto repeat
000B 99 0000 0000 stop
000C 00 0000 0001 1
000D 00 0000 0000 0
000E 00 0000 0002 2
000F 00 0000 0005 5
0010 00 0000 0019 25

Вам также может понравиться