Студопедия

Главная страница Случайная страница

Разделы сайта

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






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






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

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

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

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

    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) ‘АДЗОТ’

    Решение:

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

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

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

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

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

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

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

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

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

    7) далее следует цикл пока с проверкой условия 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)

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

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

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

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

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

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

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

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

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

     

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

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






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.