АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Вверх вниз влево вправо

Читайте также:
  1. Алюминиевый провод марки АПБ – все размеры таблицы вправо и вверх от жирной черты
  2. Вверх вниз влево вправо.
  3. Вверх и вниз
  4. Вверх и вниз
  5. Вверх по лестнице
  6. Вверх по папе-горе
  7. Вверх по реке Тутто
  8. Взгляд вверх
  9. Визначення щавлевої кислоти
  10. Глава 13. Дом вверх дном
  11. Из положения согнувшись (присев) в момент выпрыгивания вверх.

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

Сверху свободно снизу свободно

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

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену) и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 0

НАЧАЛО

ПОКА <слева свободно> вверх

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

КОНЕЦ

             
         
         
             
             
         
             

Решение:

1) особенность этой задач в том, что РОБОТ проверяет стенку в одном направлении, а движется в другом

2) рассмотрим первый цикл:

ПОКА <слева свободно> вверх

понятно, что при движении вверх РОБОТ остановится в первой же клетке, где слева будет стена

3) рассуждая аналогично, находим, что во втором цикле при движении вправо РОБОТ останавливается в клетке, где есть стена сверху; в третьем цикле (движение вниз) РОБОТ останавливается в клетке, где есть стена справа;

4) наконец, в четвертом цикле РОБОТ останавливается в клетке, где есть стена снизу; при этом он должен попасть обратно в исходную клетку, обозначенную на рисунке красной точкой;

5) кроме этих четырех стенок, необходимо, чтобы коридор, выделенный на рисунке зеленым фоном, был свободен для прохода, иначе РОБОТ врежется в стенку

6) теперь отметим на карте все клетки-кандидаты, где снизу есть стена:

 

        ·    
  ·          
             
          ·  
    ·        
· · · · · ·  
A B C D E F  

 

7) при движении из клеток B5, D1, E1, E6, F1 и F3 РОБОТ врежется в стенку, потому что слева стены нет и условие «слева свободно» всегда истинно:

    ·  
  ·        
             
          ·  
    ·      
· · · · · ·  
A B C D E F  

8) начав движение с клетки A1, C1 или C2, РОБОТ также врезается в стенку и разрушается:

             
           
             
             
    ·        
· · ·        
A B C D E F  

 

9) и только путь, начатый в клетке B1, приводит РОБОТА обратно в точку старта:

             
             
           
             
             
  ·          
A B C D E F  

 

10) таким образом, только клетка B1 удовлетворяет условию задачи, поэтому …

11) правильный ответ – 1.

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

В приведенном ниже фрагменте алгоритма, записанном на алгоритмическом языке, переменные a, b, c имеют тип «строка», а переменные i, k – тип «целое». Используются следующие функции:

Длина(a) – возвращает количество символов в строке a. (Тип «целое»)

Извлечь(a,i) – возвращает i -тый (слева) символ в строке a. (Тип «строка»)

Склеить(a,b) – возвращает строку, в которой записаны сначала все символы
строки
a, а затем все символы строки b. (Тип «строка»)

Значения строк записываются в одинарных кавычках (Например, a:='дом' ). Фрагмент алгоритма:

i:= Длина(a)

k:= 2

b:= 'А'

пока i > 0

нц

c:= Извлечь(a,i)

b:= Склеить(b,c)

i:= i – k

кц

b:= Склеить(b,'Т')

Какое значение будет у переменной b после выполнения вышеприведенного фрагмента алгоритма, если значение переменной a было ‘ПОЕЗД’?

1) ‘АДЕПТ’ 2) ‘АДЗЕОП’ 3) ‘АДТЕТПТ’ 4) ‘АДЗОТ’

Решение:

5) эта задача более близка к классическому программированию, здесь выполняется обработка символьных строк; вся информация для успешного решения, вообще говоря, содержится в условии, но желательно иметь хотя бы небольшой опыт работы с символьными строками на Паскале (или другом языке)

6) заметим, что последняя команда алгоритма, b:=Склеить(b,'Т'), добавляет букву 'Т' в конец строки b, поэтому ответ 2 – явно неверный (строка должна оканчиваться на букву 'Т', а не на 'П')

7) для решения будем использовать ручную прокрутку; здесь пять переменных: a, b, c, i, k, для каждой из них выделим столбец, где будем записывать изменение ее значения

8) перед выполнением заданного фрагмента мы знаем только значение a, остальные неизвестны (обозначим их знаком вопроса):

  a b c i k
  'ПОЕЗД' ? ? ? ?

9) в первой команде длина строки a (она равна 5 символам) записывается в переменную i:

  a b c i k
  'ПОЕЗД' ? ? ? ?
i:=Длина(a)          

10) следующие два оператора записывают начальные значения в k и b:

  a b c i k
  'ПОЕЗД' ? ? ? ?
i:=Длина(a)          
k:=2          
b:='А'   'A'      

11) далее следует цикл пока с проверкой условия i>0 в начале цикла; сейчас i=5>0, то есть, условие выполняется, цикл начинает работать и выполняются все операторы в теле цикла:

  a b c i k
  'ПОЕЗД' ? ? ? ?
i:=Длина(a)          
k:=2          
b:='А'   'A'      
i > 0? да
c:=Извлечь(a,i) i:=Длина(a)        
b:=Cклеить(b,c) k:=2        
i:=i–k          

· поскольку i=5, вызов функции Извлечь(a,i) выделяет из строки a символ с номером 5, это 'Д';

· следующей командой этот символ приписывается в «хвост» строки b, теперь в ней хранится цепочка 'АД';

· в команде i:=i-k значение переменной i уменьшается на k (то есть, на 2)

12) далее нужно перейти в начало цикла и снова проверить условие i>0, оно опять истинно, поэтому выполняется следующий шаг цикла, в котором к строке b добавляется 3-й символ строки a, то есть 'Е':

  a b c i k
... 'ПОЕЗД' 'АД'    
i > 0? да
c:=Извлечь(a,i)     'Е'    
b:=Cклеить(b,c)   'АДЕ'      
i:=i–k          

13) условие i>0 истинно, поэтому тело цикла выполняется еще один раз, к строке b добавляется 1-й символ строки a, то есть 'П':

  a b c i k
... 'ПОЕЗД' 'АДЕ'    
i > 0? да
c:=Извлечь(a,i)     'П'    
b:=Cклеить(b,c)   'АДЕП'      
i:=i–k       –1  

14) теперь i=-1, поэтому при очередной проверке условие i>0 в начале цикла оказывается ложным, выполнение цикла заканчивается, и исполнителю остается выполнить единственную строчку после цикла, которая дописывает в конец строки b букву 'Т':

  a b c i k
... 'ПОЕЗД' 'АДЕП' –1  
i > 0? нет
b:=Склеить(b,'Т')   'АДЕПТ'      

15) у нас получилось, что в конце выполнения фрагмента алгоритма в переменной b будет записана последовательность символов 'АДЕПТ'

16) таким образом, правильный ответ – 1.

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

 

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

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)