Главная страница

Учебник. А. Ю. Босова Москва бином. Лаборатория знаний 2016 11 класс Базовый уровень Учебник


Скачать 4.61 Mb.
НазваниеА. Ю. Босова Москва бином. Лаборатория знаний 2016 11 класс Базовый уровень Учебник
АнкорУчебник
Дата24.03.2022
Размер4.61 Mb.
Формат файлаpdf
Имя файлаbosova_uch_11_.pdf
ТипУчебник
#412962
страница7 из 21
1   2   3   4   5   6   7   8   9   10   ...   21
Глава 2. алгоритмы и программирование
рис. 2.7. Ветвящаяся алгоритмическая конструкция
Выясните, какую задачу решает этот алгоритм. К какой последо­
вательной алгоритмической конструкции сводится эта ветвящаяся конструкция при:
1) х = –10;
2) х = 2;
3) х = 10?
6.3. циклическая алгоритмическая конструкция
Алгоритм реализован с использованием циклической алгоритми-
ческой конструкции, если некая группа подряд идущих шагов ал­
горитма может выполняться многократно в зависимости от входных данных. Любая циклическая алгоритмическая конструкция содержит в себе элементы ветвящейся алгоритмической конструкции.

81
алгоритмические структуры
§6
Циклическая структура (цикл) обеспечивает многократное выполнение одних и тех же команд. Существует несколько раз- новидностей циклических структур: цикл с предусловием (цикл- пока), цикл с постусловием (цикл-до), цикл с параметром. Лю- бая циклическая структура состоит из двух частей — заголовка и тела цикла. Последовательность команд, повторяющуюся при выполнении цикла, называют телом цикла. Заголовок определяет количество повторений тела цикла. На рисунке 2.8 представлены блок-схемы цикла с предусловием и цикла с параметром.
рис. 2.8. Блок-схемы циклов
Пример 4. Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в которых параметры v и w обозначают цепочки цифр.
Команда нашлось (v) проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка при этом не изменяется.
Команда заменить (v, w) заменяет в строке первое слева вхо- ждение цепочки v на цепочку w.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (333) ИЛИ нашлось (22)
ЕСЛИ нашлось (333)
ТО заменить (333, 2)
ИНАЧЕ заменить (22, 3)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

82
Глава 2. алгоритмы и программирование
Выясним, какая строка получится в результате применения приведённой выше программы к строке, состоящей из N подряд идущих цифр 3 при:
1) N = 21;
2) N = 25.
Пусть N = 21. Исполнитель Редактор начинает работать со строкой, состоящей из одних только цифр 3: первые три циф- ры 3 сразу же заменяются цифрой 2, следующие три цифры 3 тоже заменяются цифрой 2, полученные две цифры 2 заменяются цифрой 3. После этого мы фактически возвращаемся к исходной задаче, которую должны решить для строки из 16 (21 – 3 – 3 + 1) подряд идущих троек:
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
2 2 3 3 3 3 3 3 3 3 3 3 3 3 ...
3 3 3 3 3 3 3 3 3 3 3 3 3 ...



Можно сказать, что при каждом повторении описанных выше действий из последовательности вычёркивается по пять цифр 3:
21[3] → 16[3] → 11[3] → 6[3] → 1[3] или 3.
Пусть N = 25. Тогда:
25[3] → 20[3] → 15[3] → 10[3] → 5[3] → 1[2]2[3] или 233.
Итак, можно вычёркивать из последовательности по пять цифр 3, но только при условии, что в ней есть шесть и более идущих подряд троек.
Самостоятельно определите, какая строчка получится в результате применения приведённой выше программы к строке, состоящей из
22, 23 и 24 подряд идущих цифр 3.
Таким образом, можно сформулировать следующее правило преобразования строки из N подряд идущих цифр 3, соответст- вующее приведённому выше алгоритму:
1) если N mod 5 = 0, то N := 5, иначе N := N mod 5;
2) исполнить исходный алгоритм для строки, состоящей из N подряд идущих цифр 3.

83
алгоритмические структуры
§6
Определите, какая строчка получится в результате применения приведённой выше программы к строке, состоящей из 2017, 12 345 подряд идущих цифр 3.
Определите, какая строчка получится в результате применения приведённой выше программы к строке, состоящей из 2015, 12 347 подряд идущих цифр 2.
Пример 5. Алгоритмы, реализованные через циклическую алгоритмическую конструкцию, представлены блок-схемами на рисунке 2.9.
рис. 2.9. Циклическая алгоритмическая конструкция

84
Глава 2. алгоритмы и программирование
Известно, что X, A, B, S — целые положительные числа. Выясните, какую задачу решает каждый из алгоритмов на рисунке 2.9.
Известно, что при некотором Х результатом работы и первого, и второго алгоритмов является число 3. Укажите все значения Х, при которых возможен такой результат.
СамОе ГлаВнОе
Вне зависимости от выбранной формы записи элементарные шаги алгоритма объединяются в алгоритмические конструкции
(структуры): последовательные, ветвящиеся, циклические, вспомо- гательные и рекурсивные. Для записи любого алгоритма достаточ- но трёх основных алгоритмических структур: последовательной, ветвящейся, циклической.
Алгоритм реализован через последовательную алгоритмиче- скую конструкцию, если все команды алгоритма выполняются один раз, причём в том порядке, в котором они записаны в тек- сте программы.
Алгоритм реализован через ветвящуюся алгоритмическую конструкцию, если от входных данных зависит, какие команды алгоритма будут выполняться.
Алгоритм реализован с использованием циклической алгорит- мической конструкции, если некая группа подряд идущих ша- гов алгоритма может выполняться многократно в зависимости от входных данных.
Вопросы и задания
1. Какая алгоритмическая конструкция называется последова- тельной?
2. Петя приглашён в гости к однокласснику Васе, живущему в квартире № 362 шестнадцатиэтажного десятиподъездного дома. Петя забыл, в каком подъезде и на каком этаже живёт
Вася, но знает, что в доме на каждой лестничной площадке по 4 квартиры. Помогите Пете узнать, в каком подъезде и на каком этаже находится нужная ему квар тира.
3. Какая алгоритмическая конструкция называется ветвящей- ся? Как она связана с последовательной?
4. Как на блок-схемах изображается полное ветвление? Непол- ное ветвление?
5. Автомат по продаже напитков имеет только две кнопки (A и
B), но должен продавать 4 напитка: горячий кофе, горячий чай, холодный яблочный сок и холодную газировку. Пред- ставьте в форме блок-схемы алгоритм работы такого автомата.

85
Запись алгоритмов на языках программирования
§7
6. Разработайте и составьте в словесной форме инструкцию для школьного охранника: в какой последовательности и что он должен проверять (наличие пропуска, соответствие фотогра- фии, есть ли сменная обувь и т. п.) и как реагировать на выявленные нарушения (вызвать милицию, отправить до- мой, сделать замечание, но пропустить, и т. д.).
7. Какая алгоритмическая конструкция называется цикличе- ской? Как она связана с ветвящейся?
8. Водитель автобуса, в котором К мест, продаёт билеты и по одному пропускает пассажиров в автобус. Он должен завер- шить посадку и уехать либо когда в автобус войдут все же- лающие, либо когда все места будут заняты. Составьте алго- ритм действий водителя.
9. Исполнитель Редактор получает на вход строку цифр и преоб- разует её. Редактор может выполнять две команды. Команда
нашлось (v) проверяет, встречается ли цепочка v в строке, поданной на вход исполнителя. Команда заменить (v, w) за- меняет в строке первое слева вхождение цепочки v на це- почку w. Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (33) ИЛИ нашлось (22)
ЕСЛИ нашлось (33)
ТО заменить (33, 2)
ИНАЧЕ заменить (22, 3)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведён- ной выше программы к строке, состоящей из:
1) 500 идущих подряд цифр 3;
2) 500 идущих подряд цифр 2;
3) 300 идущих подряд цифр 3 и следующих за ними 200 идущих подряд цифр 2.
§ 7
Запись алгоритмов на языках
программирования
Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ.

86
Глава 2. алгоритмы и программирование
Компьютерную программу можно считать последовательно- стью строк символов некоторого алфавита. Современные системы программирования допускают использование визуальных элемен- тов (окон, иконок и др.) для построения программ, в частности для создания интерфейса пользователя. Такое программирование называют визуальным. Тем не менее основная, алгоритмическая часть любой программы строится с использованием символьных средств.
В основной школе вы познакомились со школьным алгорит- мическим языком КуМир и языком программирования Pascal
(Паскаль). В 11 классе мы продолжим работать с языком
Pascal.
Желательно установить среду программирования на ваш домашний компьютер.
Все алгоритмы, представленные в этом учебнике на языке Pascal, вы можете записывать и на любом другом интересующем вас языке программирования.
Среда программирования
Сайт с программным 
обеспечением
Pascal ABC.Net http://pascalabc.net
Компилятор Free Pascal http://freepascal.org
Среда разработки Lazarus с компилятором Free Pascal http://lazarus.freepascal.org
Интерпретатор Python http://python.org
7.1. Структурная организация данных
Информация, представленная в виде, пригодном для автома- тизированной обработки, называется данными. Компьютер опе- рирует только одним видом данных — отдельными битами, или двоичными цифрами. Причём он работает с этими данными в соответствии с неизменным набором алгоритмов, которые опре- деляются системой команд центрального процессора.
Задачи, которые решаются с помощью компьютера, редко вы- ражаются на языке битов. Как правило, данные имеют форму чисел, символов, текстов и более сложных структур. Алгоритмы, создаваемые для обработки этих данных, учитывают их струк- туру.

87
Запись алгоритмов на языках программирования
§7
Под структурой данных в общем случае понимают множество эле­
ментов данных и множество связей между ними.
Различают простые и сложные структуры данных.
Простые структуры данных не могут быть разделены на составные части больше, чем бит. К ним относятся числовые, символьные, логические и другие данные. Простые структуры данных служат основой для построения сложных структур дан- ных — массивов, списков, графов, деревьев и др.
В языках программирования понятие «структуры данных» тесно связано с понятием «типы данных». Любые данные, т. е. константы, переменные, значения функций или выражения, ха- рактеризуются своими типами. Информация по каждому типу однозначно определяет:
1) множество допустимых значений, которые может иметь тот или иной объект описываемого типа;
2) множество допустимых операций, которые применимы к объ- екту описываемого типа;
3) объём выделенной памяти для хранения данных указанного типа.
Некоторые простые типы данных языка Pascal приведены на рис. 2.10.
рис. 2.10. Некоторые простые типы данных языка Pascal

88
Глава 2. алгоритмы и программирование
7.2. некоторые сведения о языке
программирования Pascal
Основными элементами языка Pascal являются:

алфавит языка (латинские буквы, арабские цифры, специаль- ные символы);

служебные слова, значение которых в языке программирова- ния строго определено;

постоянные и переменные величины;

знаки операций (табл. 2.2);

стандартные функции;

выражения;

операторы (языковые конструкции, с помощью которых в программах записываются действия, выполняемые над дан- ными в процессе решения задачи).
Все величины имеют имена (идентификаторы), формируемые по определённым правилам:

имя может состоять из буквы или последовательности букв латин­
ского алфавита, цифр и символа подчёркивания, но начинаться такая последовательность должна с буквы или символа подчёр­
кивания;

желательно, чтобы имя отражало смысл величины;

имя не должно совпадать ни с одним из зарезервированных слов.
Таблица 2.2
Операции в языке Pascal
Арифметические операции
Операции отношения
+
Сложение
=
Равно

Вычитание
<>
Не равно
*
Умножение
>
Больше
/
Деление
<
Меньше div
Целочисленное деление
<=
Меньше или равно mod Остаток от целочисленного деления
>=
Больше или равно

89
Запись алгоритмов на языках программирования
§7
Логические операции
Строковые операции
not
Логическое отрицание
+
Сцепление
(присоединение)
and Логическое И
or
Логическое ИЛИ
xor
Исключающее ИЛИ
Выражение — это формула, по которой вычисляется значение.
Выражение может состоять из операндов (констант, переменных, стандартных функций), знаков операций и круглых скобок. Выра- жения записываются в строку; знаки операций не пропускаются.
Порядок выполнения операций определяется скобками и прио- ритетом операций (табл. 2.3). Операции одинакового приоритета выполняются слева направо, если порядок выполнения не задан явно круглыми скобками. Вычисление выражения с вложенными скобками начинается с внутренних скобок.
Таблица 2.3
        Приоритет операций в языке Pascal
Приоритет
Операция
1
not
2
*, /, div, mod, and
3
+, –, or, xor
4
=, <>, >, <, >=, <=
Программа на языке Pascal имеет следующую структуру:
program <имя программы>;
Заголовок программы
var <переменные с указанием типов>;
const <постоянные с указанием типов>;
Блок описания ис- пользуемых данных
begin
<последовательность команд>;
end.
Блок описания дей- ствий по преобразо- ванию данных (про- граммный блок)
Окончание табл. 2.2

90
Глава 2. алгоритмы и программирование
Обязательными в ней являются два раздела: описания данных и описания действий, которые над этими данными необходимо выполнить.
Данные, обрабатываемые компьютером, хранятся в памяти.
С точки зрения языка Pascal она разделена на секции, называ- емые переменными. Каждая переменная имеет имя, тип и зна- чение; значения переменных могут меняться в ходе выполнения программы.
Блок описания действий начинается со слова begin, а закан- чивается словом end и знаком точки. Действия представляются операторами (табл. 2.4). Операторы языка Pascal разделяются точкой с запятой. Операторы бывают простые и составные (за- ключённые в операторные скобки beginend).
Таблица 2.4
Основные операторы языка Pascal
Название
Общий вид
Присваивание a:=b
Ввод с клавиатуры read(a)
Вывод на экран write(a)
Условный
if <условие>
then <оператор 1>
else <оператор 2>
Цикл с предусловием
while <условие> do
<тело цикла (операторы)>
Цикл с постусловием
repeat
<тело цикла (операторы)>
until <условие>
Цикл с увеличиваю- щимся параметром
for <целочисленная переменная>:=<начальное значение>
to <конечное значение> do
<тело цикла (операторы)>
Цикл с уменьшаю- щимся параметром
for <целочисленная переменная>:=<начальное значение>
downto <конечное значение> do
<тело цикла (операторы)>

91
Запись алгоритмов на языках программирования
§7
Пример 1. В начале этой главы мы обсуждали алгоритмы нахождения простых чисел. Напишем программу, проверяющую, является ли заданное натуральное число n простым.
Самый простой путь решения этой задачи — проверить, имеет ли данное число n (n >= 2) делители в интервале [2; n – 1].
Если делители есть, число n — составное, если — нет, то — простое.
В программе будем использовать логическую переменную flag:

если flag = true, то n — простое число;

если flag = false, то n — составное число (если у числа n есть делители, то «флаг выключаем» с помощью оператора присваивания flag := false).
var
n, i: longint;
flag: boolean;
begin
writeln('Введите n');
read(n);
flag:=true;
for i:=2 to n-1 do
if n mod i = 0 then flag:=false;
if flag then writeln('Да') else writeln('Нет')
end.
В этой программе мы проверяли, нет ли у числа n делителей из интервала [2; n – 1]. Но если n = a · b, то меньшее из чисел a, b не больше
n (в противном случае оба числа были бы больше
n , а следовательно, их произведение было бы больше n). Кроме того, из делимости числа n на a автоматически следует, что n де­
лится и на n/a.
Усовершенствуйте приведённую выше программу с учётом этих соображений.
Проверку, является ли заданное натуральное число n >= 2 простым, мы осуществили методом перебора всех возможных его делителей. Метод перебора используется для решения достаточно широкого круга задач.
Пример 2. Применим метод перебора для поиска наибольшего общего делителя (НОД) двух натуральных чисел a и b.
Начнём перебор с d — наименьшего из чисел a и b. Это первый, очевидный кандидат на роль их наибольшего общего

92
Глава 2. алгоритмы и программирование
делителя. И далее, пока не найдём d, на которое оба числа де- лятся нацело, будем уменьшать его на единицу. Как только такое деление произойдёт, останавливаем уменьшение d. Полученное значение d и будет наибольшим общим делителем чисел a и b.
var
a, b, d: integer;
begin
write('Введите два числа: ');
readln(a, b);
if athen d:=a
else d:=b;
while (a mod d <> 0) or (b mod d <> 0) do
d:=d - 1;
write('НОД = ', d)
end.
7.3. анализ программ с помощью
трассировочных таблиц
Для анализа свойств алгоритма и проверки его соответствия решаемой задаче используются трассировочные таблицы. В них фиксируется пошаговое исполнение алгоритма (программы), что позволяет наглядно представлять значения переменных, изменя- ющиеся при его выполнении. Поэтому трассировочные таблицы иначе называют таблицами значений.
Используются трассировочные таблицы двух видов:
1) таблицы, каждая строка которых отражает результат одного действия;
2) таблицы, каждая строка которых отражает результат выпол- нения группы действий.
Пример 3. Определим значения переменных a и b, получен- ные в результате выполнения следующей программы:
var a, b: integer;
begin
a:=5;
b:=1;
while b<=a do
begin
b:=b + 1;

93
Запись алгоритмов на языках программирования
§7
a:=a - 1;
end;
writeln(a);
writeln(b)
end.
Составим трассировочную таблицу первого вида. В её заголов- ке поместим имена всех переменных, используемых в програм- ме. В отдельном столбце будем записывать команды и условия, имеющиеся в программе. Каждая строка таблицы соответствует одному шагу алгоритма. Чтобы не загромождать таблицу, будем записывать в каждой строке только то значение переменной, ко- торое получено на соответствующем шаге.
№ шага
Команда или условие
Значение выражения
a
b
1
a:=5 5
5 2
b:=1 1
1 3
b<=a да
4
b:=b+1 2
2 5
a:=a-1 5
4 6
b<=a да
7
b:=b+1 3
3 8
a:=a-1 3
3 9
b<=a да
10
b:=b+1 4
4 11
a:=a-1 2
2 12
b<=a нет
13
writeln(a)
2 14
writeln(b)
4
Из таблицы видно, что в результате работы переменные при- няли значения: a = 2 и b = 4.

94
1   2   3   4   5   6   7   8   9   10   ...   21


написать администратору сайта