Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SB_13.doc
Скачиваний:
14
Добавлен:
11.05.2015
Размер:
962 Кб
Скачать
☆
  1. Анализ алгоритмов

В заданиях предложены фрагменты программ для конкретных исполнителей: компьютера или некоего робота. Для ответа на тестовый вопрос требуется выполнить эти программы, так сказать, вручную. Рекомендуется начертить таблицу, в которой будут фиксироваться постепенно изменяющиеся значения переменных, или сделать поясняющий рисунок.

A12 (5 мин)

В программе описан одномерный целочисленный массив A с индексами от 0 до 10. Ниже представлен фрагмент этой программы, записанный на разных языках программирования, в котором значения элементов сначала задаются, а затем меняются.

Бейсик

Паскаль

FOR i=0 TO 10

A(i) = i-1

NEXT i

FOR i = 1 TO 10

A(i-1) = A(i)

NEXT i

A(10) = 10

for i:=0 to 10 do

A[i] := i-1;

for i:=1 to 10 do

A[i-1] := A[i];

A[10] := 10;

Си

Алгоритмический язык

for (i=0;i<=10;i++)

A[i] = i-1;

for (i=1;i<=10;i++)

A[i-1] = A[i];

A[10] = 10;

нц для i от 0 до 10

A[i]:= i-1

кц

нц для i от 1 до 10

A[i-1] := A[i]

A[10] := 10

Как изменятся элементы этого массива после выполнения фрагмента

программы?

1) все элементы, кроме последнего, окажутся равны между собой

2) все элементы окажутся равны своим индексам

3) все элементы, кроме последнего, будут сдвинуты на один элемент вправо

4) все элементы, кроме последнего, уменьшатся на единицу

РЕШЕНИЕ

В первом цикле массив заполняется значениями от -1 до 9.

Работу второго цикла проиллюстрируем на таблице с последовательностью преобразований:

i

Массив

номер

0

1

2

3

4

5

6

7

8

9

10

-1

0

1

2

3

4

5

6

7

8

9

1

0

2

1

3

2

4

3

…

…

…

…

…

10

9

0

1

2

3

4

5

6

7

8

9

10

Ответ: 2.

A13 (6 мин)

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, включает в себя 4 команды-приказа и 4 команды проверки условия.

Команды-приказы:

вверх

вниз

влево

вправо

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится, и программа прервётся.

Другие четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно

снизу свободно

слева свободно

справа свободно

Цикл

ПОКА < условие >

последовательность команд

КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции

ЕСЛИ условие

ТО команда1

ИНАЧЕ команда2

КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие

ложно).

Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка А1)?

НАЧАЛО

ПОКА слева свободно ИЛИ сверху свободно

ЕСЛИ слева свободно

ТО влево

ИНАЧЕ вверх

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

1

2

3

4

5

6

A

B

C

D

E

F

  1. 8 2) 12 3) 17 4) 21

РЕШЕНИЕ

  1. Цикл завершается, когда РОБОТ попадает в клетку с левой и верхней стеной. В частности, если он начинает проход с клетки А1, то в ней сразу и остановится. Таким образом, одна клетка найдена.

По той же причине попадание РОБОТА в клетки E1 или B3 не позволит ему дальше двигаться.

1

х

2

3

х

4

5

6

A

B

C

D

E

F

  1. По последовательности клеток с левой стеной РОБОТ может двигаться только вверх. Следовательно, из B4 и B5 он неминуемо попадет в запрещенную клетку.

    1

    х

    2

    3

    х

    4

    х

    5

    х

    6

    A

    B

    C

    D

    E

    F

  2. В соответствии с условным оператором движение РОБОТА может происходить только влево или вверх, причем направление движения изменяется только при возникновении или исчезновении левой стены в очередной клетке по сравнению с предыдущей клеткой. Проверим такие клетки.

Из F1, C3, C4 и C5 РОБОТ сразу попадет в запрещенную клетку. Следовательно, и клетки D3, D4, E4, F4 и D5 тоже запрещены.

1

х

х

2

3

х

х

х

4

х

х

х

х

х

5

х

х

х

6

A

B

C

D

E

F

  1. Из E5 РОБОТ попадет в запрещенную клетку. Следовательно, и клетка F5 тоже запрещена.

1

х

х

2

3

х

х

х

4

х

х

х

х

х

5

х

х

х

х

х

6

A

B

C

D

E

F

Итак, найдено 15 запрещенных клеток. Значит, можно начинать движение РОБОТА с 36 –15=21 клетки. Правильный ответ 4).

Ответ: 4.

B2 (2 мин)

Определите значение переменной c после выполнения следующего фрагмента программы (записанного ниже на разных языках программирования). Ответ запишите в виде целого числа.

Бейсик

Паскаль

a = 30

b = 14

a = a - 2 * b

IF a > b THEN

c = b + 2 * a

ELSE

c = b - 2 * a

END IF

a := 30;

b := 14;

b := a - 2 * b;

if a > b then

c := b + 2 * a

else

c := b - 2 * a;

Си

Алгоритмический язык

a = 30;

b = 14;

b = a - 2 * b;

if (a > b)

c = b + 2 * a;

else

c = b - 2 * a;

a := 30

b := 14

b := a - 2 * b

если a > b

то c := b + 2 * a

иначе c := b - 2 * a

все

Ответ: ___________________________.

РЕШЕНИЕ

Отобразим в таблице последовательные изменения значений переменных:

a

b

c

30

14

2

10

Ответ: 10

B5 (3мин)

Определите, что будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):

Бейсик

Паскаль

DIM N, S AS INTEGER

N = 0

S = 0

WHILE s <= 35

N = N + 1

S = S + 4

WEND

PRINT N

Var n, s : integer;

BEGIN

n := 0;

s := 0;

while s<=35 do

begin

n := n+1;

s := s+1;

end;

write(n);

END.

Си

Алгоритмический язык

#include<stdio.h>

void main()

{

int n, s;

n = 0;

s = 0;

while (s<=35) {

n = n+1;

s = s+4;

}

printf("%d", n);

}

нач

цел n, s

n := 0

s := 0

нц пока s <= 35

n := n+1

s := s+4

кц

вывод n

кон

Ответ: ___________________________.

РЕШЕНИЕ

Отобразим в таблице последовательные изменения значений переменных и выражений:

n

s

s<=35

0

0

да

1

4

да

2

8

да

3

12

да

4

16

да

5

20

да

6

24

да

7

28

да

8

32

да

9

36

нет

Ответ: 9

В6 (2 мин)

Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:

F(1) = 1

F(n) = F(n–1) * n, при n >1

Чему равно значение функции F(5)?

В ответе запишите только натуральное число.

Ответ: ___________________________.

РЕШЕНИЕ

Отобразим в таблице последовательность вычислений:

n

F(n)

1

1

2

2

3

6

4

24

5

120

Ответ: 120

В8 (5мин)

Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 21.

Бейсик

Паскаль

DIM X, A, B AS INTEGER

INPUT X

A=0: B=1

WHILE X > 0

A = A+1

B = B * (X MOD 10)

X = X \ 10

WEND

PRINT A

PRINT B

var x, a, b: integer;

begin

readln(x);

a := 0; b := 1;

while x>0 do

begin

a := a+1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

Си

Алгоритмический язык

#include<stdio.h>

void main()

{

int x, a, b;

scanf("%d", &x);

a=0; b=1;

while (x>0) {

a=a+1;

b = b * (x % 10);

x= x/10;

}

printf("%d\n%d", a, b);

}

алг

нач

цел x, a, b

ввод x

a := 0; b := 1

нц пока x>0

a := a+1

b := b * mod(x,10)

x := div(x,10)

кц

вывод a, нс, b

кон

Ответ: ___________________________.

РЕШЕНИЕ

  1. Для того чтобы a стало равным 2, цикл должен проработать 2 раза.

  2. На каждом шаге цикла выполняется оператор x := x div 10, x уменьшается в 10 раз.

  3. Последнее значение x должно получиться равным 0, чтобы цикл завершился. Значит, исходное значение x должно быть двухзначным числом.

  4. По завершении цикла переменная b должна стать равной 21. Значение b вычисляется как произведение предыдущего значения и остатка от деления x на 10. На первом шаге цикла b равна последней цифре в x, на втором шаге b умножается на предпоследнюю цифру x.

  5. У числа 21 имеется 2 простых делителя: 3 и 7. Наименьшее число, составленное из этих цифр – 37.

Ответ: 37

В13 (7 мин)

У исполнителя Удвоитель две команды:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]