Хелпикс

Главная

Контакты

Случайная статья





if a < b then. while n < > 0 do begin. write ( 2*(n mod 10)+1);



a: = 40;

b: = 10;

b: = - a / 2 * b;

if a < b then

c: = b - a

else

c: = a - 2 * b;

Решение:

1) для решения нужно использовать «ручную прокрутку» программы

2) выполним начальные присваивания:

  a b c
  ? ? ?
a: = 40; b: = 10;  

3) самый сложный оператор, содержащий «подводный камень»:

b: = - a / 2 * b;

не забываем, что умножение и деление имеют равный приоритет, и в такой цепочке сначала выполнится деление, а потом умножение

4) результат:

b: = - (40 / 2) * 10 = - 20 * 10 = - 200

  a b c
  ? ? ?
a: = 40; b: = 10;  
b: = - a / 2 * b;   -200  

5) очевидно, что теперь условие « a < b » ложно, поэтому выполняется оператор, стоящий после слова else: c: = a-2*b = 40 – 2*(-200) = 440.

6) Ответ: 440.

Возможные ловушки и проблемы: · нужно не забыть, что умножение и деление имеют одинаковый приоритет, то есть выполняются по порядку слева направо (если нет скобок)

Еще пример задания:

В результате выполнения фрагмента программы

while n < > 0 do begin

write ( 2*(n mod 10)+1);

n: = n div 10;

end;

на экран выведено число 13717. Укажите все числа, которые могли находиться в переменной n до выполнения этого цикла.

Решение (вариант 1, аналитический):

1) прежде всего, заметим, что для вывода используется оператор write, который не переходит на следующую строку; поэтому числа в цикле будут выводиться в одной строке «вплотную» друг к другу, без промежутков

2) вспомним, что n mod 10 – остаток от деления числа на 10 – это последняя цифра числа в десятичной системе счисления;

3) операция n div 10 (деление нацело на 10) равносильна отбрасыванию последней цифры в десятичной системе счисления

4) эти две операции выполняются пока значение переменной n не станет равно нулю

5) анализируя алгоритм, можно придти выводу, что этот фрагмент программы выводит на экран числа , где  – это -ая цифра с конца числа

6) подумаем, в каком интервале находится значение , если  – это цифра от 0 до 9: получаем интервал от  до

7) поэтому разбить цепочку 13717 на части можно следующими способами:

1 – 3 – 7 – 17

1 – 3 – 7 – 1 – 7

13 – 7 – 17

13 – 7 – 1 – 7

8) в любом варианте разбиения каждое число получено по формуле , поэтому можно сразу определить цифры соответствующих чисел по формуле :

1 – 3 – 7 – 17                0 – 1 – 3 – 8

1 – 3 – 7 – 1 – 7            0 – 1 – 3 – 0 – 3

13 – 7 – 17                     6 – 3 – 8

13 – 7 – 1 – 7                6 – 3 – 0 – 3

9) вспоминаем, что цифры числа в цикле обрабатываются, начиная с последней, поэтому в ответе нужно перечислить числа 836, 3036, 8310 и 30310.

10) таким образом, правильный ответ – 836, 3036, 8310, 30310.

Возможные ловушки и проблемы: · нужно уметь анализировать работу алгоритма, «прокручивать» его в уме · можно забыть, что цифры числа обрабатываются в обратном порядке, начиная с последней

Решение (вариант 2, перебор, М. Н. Мамчур, УГАТУ):

1) для вывода используется оператор write, который не переходит на следующую строку; поэтому числа в цикле будут выводиться в одной строке «вплотную» друг к другу, без промежутков

2) вспомним, что n mod 10 – остаток от деления числа на 10 – это последняя цифра числа в десятичной системе счисления;

3) операция n div 10 (деление нацело на 10) равносильна отбрасыванию последней цифры в десятичной системе счисления

4) эти две операции выполняются пока значение переменной n не станет равно нулю

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

Исходная цифра n mod 10 2*(n mod 10)+1

6) на основе таблицы, разобьем нашу цепочку 13717 на все возможные комбинации:

1 – 3 – 7 – 1 – 7

1 – 3 – 7 – 17

13 – 7 – 17

13 – 7 – 1 – 7

7) из этой же таблицы видим, что каждому числу в этой цепочке соответствует исходная цифра (первый столбец); таким образом, преобразуем полученные комбинации в наборы исходных цифр:

0 – 1 – 3 – 0 – 3

0 – 1 – 3 – 8

6 – 3 – 8

6 – 3 – 0 – 3

8) 5) во фрагменте программы цифры числа обрабатываются в обратном порядке, начиная с последней, поэтому в ответе нужно перечислить числа, записанные в обратном порядке, т. е. 30310, 8310, 836, 3036.

9) таким образом, правильный ответ – 30310, 8310, 836, 3036.


Задачи для тренировки [2]:

1) Определите значение целочисленных переменных a и b после выполнения фрагмента программы:



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.