Школьный алгоритмический язык


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

Служебные слова

·       алг (алгоритм)
·       арг (аргумент)
·       рез (результат)
·       нач (начало)
·       кон (конец)
·       цел (целый)
·       вещ (вещественный)
·       сим (символьный)
·       лит (литерный)
·       лог (логический)
·       таб(таблица)
·       нц (начало цикла)
·       кц (конец цикла)
·       длин (длина)
·       дано
·       надо
·       если
·       то
·       иначе
·       все
·       пока
·       для
·       от
·       до
·       знач
·       и
·       или
·       не
·       да
·       нет
·       при
·       выбор
·       Ввод
·      Вывод
·      утв



Алгоритм

алг имя
нач
            тело алгоритма
кон

Исполнители

СКИ Робот

вверх
вниз
вправо
влево
закрасить
Логические команды обратной связи
сверху свободно
снизу свободно
справа свободно
слева свободно
клетка закрашена
радиация
слева стена
справа стена
сверху стена
снизу стена
клетка не закрашена
температура

СКИ Чертежник

опустить перо
поднять перо
сместиться в точка(х,у)
сместиться на вектор(а,б)

Типы переменных
цел  - целые числа из диапазона от -32768 до 32767 (2 байта)
вещ - вещественные числа от -1038 до 1038 (4 байта) Например: 3.140.314е1; 27e-2=0.27
лог логические переменные (да, нет) (1 байт)    (да>нет)
сим – символьные переменные (a’, ‘5’, ‘.’, ‘,’ …) (1 байт)
лит -  литерные (строковые) переменные (‘’, ‘мама мыла раму’) (256 байт)

Описание переменных

цел а,в,с
вещ х,у

Команда присваивания

Имя:=значение;
Имя:=Имя2;
Имя:=значение выражения

Например

а:=5;
b:=a;
c:=a+b;
c:=c+1;

Блок-схема линейного алгоритма




Ветвление

Алгоритм может содержать команду ветвления. Блок-схема команды ветвления.

Команды ветвления
если-то-иначе-все

Общий вид команды:
если условие
· то серия 1
· иначе серия 2
все
Серия 2 вместе со служебным словом иначе может отсутствовать. В этом случае команда имеет вид:
если условие
     то серия 1
все
При выполнении команды если КуМир сначала проверяет условие, записанное между
если и то. При соблюдении этого условия выполняется серия 1, в противном случае —
серия 2 (если она есть), после чего КуМир переходит к выполнению команд, записанных
после слова все.
Если условие не соблюдается, а серия 2 вместе с иначе отсутствует, то КуМир сразу
переходит к выполнению команд, записанных после слова все.
Пример 1:
если a<b
· то b:=b-a; p:=p+q
· иначе a:=a-b; q:=q+p
все
Пример 2:
если x>m
· то
· · m:=x
· · n:=n+1
все

Выбор-при-иначе-все
Общий вид команды:

выбор
· при условие 1 : серия 1
· при условие 2 : серия 2
· ...
· при условие n : серия n
· иначе серия n+1
все

Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:
выбор· при условие_1 : серия_1
· при условие_2 : серия_2
· ...
· при условие_n : серия_n
все
КуМир сначала проверяет условие 1. Если оно соблюдается, то КуМир выполняет
команды из серии 1, после чего переходит к выполнению команд, записанных после слова
все. В противном случае КуМир делает то же самое с условием 2 и командами из серии 2
и т.д.
Команды, записанные после слова иначе, выполняются в том случае, когда не соблю-
дено ни одно из условий.
В команде выбор всегда выполняется не более одной серии команд, даже если несколько условий окажутся истинными. Выполнение команды выбор заканчивается после того,
как найдено первое (по порядку следования) условие со значением да (и выполнена соответствующая серия команд).
Пример 1:
выбор
· при а>1: i:=i+1
· при а<0: j:=j-1
· иначе t:=i; i:=j; j:=t
все

Цикл с предварительным условием


нц пока условие
      тело цикла
кц
При выполнении цикла пока КУМИР циклически повторяет следующие действия:
∙ Проверяет записанное после служебного слова пока условие.
∙ Если условие не соблюдается, то выполнение цикла завершается и КуМир начинает
выполнять команды, записанные после кц.
Если же условие соблюдается, то КуМир выполняет тело цикла, снова проверяет
условие и т.д.
Пример:
нц пока а<10
· а := а + 1
кц
В теле цикла может быть использована команда выход. При выполнении
этой команды содержащий ее цикл будет завершен.

Цикл с последующим условием


нц 
    тело цикла
кц_при  условие

При выполнении цикла пока КУМИР циклически повторяет следующие действия:
∙ Проверяет записанное после служебного слова пока условие.
∙ Если условие не соблюдается, то выполнение цикла завершается и КуМир начинает
выполнять команды, записанные после кц.
Если же условие соблюдается, то КуМир выполняет тело цикла, снова проверяет
условие и т.д.
Пример:
нц пока а<10
· а := а + 1
кц
В теле цикла может быть использована команда выход. При выполнении этой команды содержащий ее цикл будет завершен.

Цикл с параметром



Цикл «для»
Общий вид цикла для:

нц для i от i1 до i2
· тело_цикла
кц
Здесь i — величина типа цел (она называется параметром цикла), а i1 и i2 — целые
выражения, т. е. выражения типа цел. При выполнении цикла для тело цикла выполняется последовательно для i = i1, i = i1 + 1, . . . , i = i2. Если i1 = i2, то тело цикла
выполнится один раз для i = i1. Если же i1 > i2, то тело цикла не выполнится ни разу.
Общий вид цикла для с шагом:
нц для i от i1 до i2 шаг i3
· тело_цикла
кц
Если шаг i3 (который также должен быть целым выражением) равен положительному
числу d, то тело цикла будет выполняться последовательно для i = i1, i = i1 + d, i =
i1 + 2d, . . . до тех пор, пока значение i удовлетворяет условию i ≤ i2.
Если же шаг i3 отрицателен и равен −d, то тело цикла будет выполняется последовательно для i = i1, i = i1 − d, i = i1 − 2d, . . . до тех пор, пока значение i удовлетворяет
условию i ≥ i1.

В теле любого из циклов может быть использована команда выход. При
выполнении этой команды содержащий ее цикл будет завершен.

Пример 1

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

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


свер­ху
сво­бод­но
снизу
сво­бод­но
слева
сво­бод­но
спра­ва
сво­бод­но
Цикл
ПОКА < усло­вие >
по­сле­до­ва­тель­ность ко­манд
КОНЕЦ ПОКА
вы­пол­ня­ет­ся, пока усло­вие ис­тин­но.
В кон­струк­ции
ЕСЛИ < усло­вие >
ТО ко­ман­да1
ИНАЧЕ ко­ман­да2
КОНЕЦ ЕСЛИ
вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но) или ко­ман­да2 (если усло­вие ложно)

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

НА­ЧА­ЛО
ПОКА<спра­ва сво­бод­но ИЛИ снизу сво­бод­но >
ПОКА < снизу сво­бод­но >
вниз
КОНЕЦ ПОКА
ПОКА < спра­ва сво­бод­но >
впра­во
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ

1) 14
2) 17
3) 19
4) 21

Пояснения к задаче

В дан­ной про­грам­ме РОБОТ по­сту­па­ет сле­ду­ю­щим об­ра­зом: спер­ва РОБОТ про­ве­ря­ет сво­бод­на ли клет­ка спра­ва или снизу от него, если это так, то РОБОТ пе­ре­хо­дит к пер­во­му внут­рен­не­му циклу. В этом цикле пока у ниж­ней сто­ро­ны клет­ки в ко­то­рой на­хо­дит­ся РОБОТ нет стены он про­дол­жа­ет дви­гать­ся вниз. Как толь­ко это усло­вие пе­ре­ста­нет вы­пол­нять­ся он пе­ре­хо­дит ко вто­ро­му внут­рен­не­му циклу. Этот внут­рен­ний цикл ана­ло­ги­чен пер­во­му, толь­ко те­перь про­ве­ря­ет­ся от­сут­ствие стены у пра­вой сто­ро­ны клет­ки.
Про­ана­ли­зи­ро­вав эту про­грам­мы при­хо­дим к вы­во­ду, что РОБОТ будет дви­гать­ся впра­во или вниз, пока у него есть такая воз­мож­ность. РОБОТ при дан­ной про­грам­ме ни­ко­гда не разобьётся.
Про­ве­рив все клет­ки по вы­ве­ден­но­му нами пра­ви­лу дви­же­ния РО­БО­ТА вы­яс­ня­ем, что число кле­ток, удо­вле­тво­ря­ю­щих усло­вию за­да­чи равно 19.

Пра­виль­ный ответ ука­зан под но­ме­ром 3.

Пример 2

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

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


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

НА­ЧА­ЛО
ПОКА < снизу сво­бод­но > вниз
ПОКА < слева сво­бод­но > влево
ПОКА < свер­ху сво­бод­но > вверх
ПОКА < спра­ва сво­бод­но > впра­во
КОНЕЦ
1) 1
2) 2
3) 3
4) 4

По­яс­не­ние.


Вы­яс­ним, что не­об­хо­ди­мо, чтобы РОБОТ оста­но­вил­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние. Про­грам­ма за­кан­чи­ва­ет­ся ко­ман­дой "ПОКА < спра­ва сво­бод­но > впра­во", сле­до­ва­тель­но, для того, чтобы робот оста­но­вил­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние, не­об­хо­ди­мо, чтобы у этой клет­ки была стен­ка спра­ва (усло­вие 1). Этому усло­вию удо­вле­тво­ря­ют все клет­ки пра­вой стен­ки ла­би­рин­та и еще пять кле­ток кроме нее.
Пред­по­след­няя ко­ман­да: "ПОКА < свер­ху сво­бод­но > вверх", зна­чит у клет­ки в ко­то­рой он пре­кра­тит вы­пол­не­ние долж­но быть огра­ни­че­ние стен­кой свер­ху. Кроме того, робот, пре­кра­тив вы­пол­не­ние этой ко­ман­ды, дол­жен ока­зать­ся на одной строч­ке с клет­кой, с ко­то­рой он начал дви­же­ние (усло­вие 2).
Кле­ток, удо­вле­тво­ря­ю­щих усло­ви­ям 1 и 2, всего две: Г3 и Д1, если ну­ме­ро­вать циф­ра­ми свер­ху вниз, а бук­ва­ми слева на­пра­во. Пред­ста­вив себе дви­же­ние ро­бо­та в том слу­чае когда он стар­ту­ет из этих кле­ток, уви­дим, что в них он и вер­нет­ся.

Пра­виль­ный ответ ука­зан под но­ме­ром 2.

Домашнее задание

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

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

свер­ху сво­бод­носнизу сво­бод­нослева сво­бод­носпра­ва сво­бод­но
Цикл
ПОКА < усло­вие >
по­сле­до­ва­тель­ность ко­манд
КОНЕЦ ПОКА
вы­пол­ня­ет­ся, пока усло­вие ис­тин­но.
В кон­струк­ции
ЕСЛИ < усло­вие >
ТО ко­ман­да1
ИНАЧЕ ко­ман­да2
КОНЕЦ ЕСЛИ
вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но) или ко­ман­да2 (если усло­вие ложно).

Сколь­ко кле­ток ла­би­рин­та со­от­вет­ству­ют тре­бо­ва­нию, что, начав дви­же­ние в ней и вы­пол­нив пред­ло­жен­ную про­грам­му, РОБОТ уце­ле­ет и оста­но­вит­ся в за­кра­шен­ной клет­ке (клет­ка А1)?
НА­ЧА­ЛО
ПОКА < слева сво­бод­но ИЛИ свер­ху сво­бод­но >
ЕСЛИ < слева сво­бод­но >
ТО влево
ИНАЧЕ вверх
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
1) 8
2) 12
3) 17
4) 21

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


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


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

НА­ЧА­ЛО
ПОКА <слева сво­бод­но> влево
ПОКА <свер­ху сво­бод­но> вверх
ПОКА <спра­ва сво­бод­но> впра­во
ПОКА <снизу сво­бод­но> вниз
КОНЕЦ
1) 1
2) 2
3) 3
4) 4




Комментариев нет:

Отправить комментарий