Алгоритмизация и программирование
Алгоритмы, виды алгоритмов, описание алгоритмов. Формальное исполнение алгоритмов
Термин «алгоритм», впервые употребленный в современном значении. Лейбницем (1646–1716), является латинизированной формой имени великого персидского математика Мухаммеда бен Муссы аль-Хорезми (ок. 783 – ок. 850). Его книга «Об индийском счете» в XII в. была переведена на латинский язык и пользовалась широкой популярностью не одно столетие. Имя автора европейцы произносили как Алгоритми (Algorithmi), и со временем так стали называть в Европе всю систему десятичной арифметики.
Научное определение алгоритма дал А. Чёрч в 1930 году. В наше время понятие алгоритма является одним из основополагающих понятий вычислительной математики и информатики.
Алгоритм — это точное и полное описание последовательности действий над заданными объектами, позволяющее получить конечный результат.
Можно сказать, что алгоритм решения какой-либо задачи — это последовательность шагов реализации (или нахождения) этого решения, а процесс построения алгоритма (алгоритмизация) — разложение задачи на элементарные действия или операции.
Область математики, известная как теория алгоритмов, посвящена исследованию свойств, способов записи, области применения различных алгоритмов, а также созданию новых алгоритмов. Теория алгоритмов находит широкое применение в различных областях деятельности человека — в технике, производстве, медицине, образовании и т. д. Появление компьютера позволило решать чрезвычайно сложные, трудоемкие задачи.
Определение алгоритма для применения в области информатики нуждается в некотором уточнении. Во-первых, решение задач в информатике всегда связано с преобразованием информации, а значит, исходными данными и результатом работы алгоритма должна быть информация. Это может быть представлено в виде схемы.
Во-вторых, алгоритмы в информатике предназначены для реализации в виде компьютерных программ или для создания некоторой компьютерной технологии. Для выполнения алгоритма требуется конечный объем оперативной памяти и конечное время.
Основные требования, предъявляемые к алгоритмам:
Дискретность (прерывность): алгоритм должен представлять решение задачи в виде последовательности простых (или ранее определенных) этапов (шагов). Каждый шаг алгоритма формулируется в виде инструкций (команд).
Определенность (детерминированность; лат. determinate — определенность, точность): шаги (операции) алгоритма должны допускать однозначную трактовку и быть понятными для исполнителя алгоритма. Это свойство указывает на то, что любое действие в алгоритме должно быть строго определено и описано для каждого случая.
Массовость: алгоритм должен давать решение не только для конкретного набора значений, а для целого класса задач, который определяется диапазоном возможных исходных данных (область применимости алгоритма). Свойство массовости подразумевает использование переменных в качестве исходных данных алгоритма.
Результативность: алгоритм должен давать конкретный результат, т. е. должны быть рассмотрены все возможные ситуации и для каждой из них получен результат. Под результатом может пониматься и сообщение о том, что задача решения не имеет.
Конечность: количество шагов алгоритма должно быть конечным.
Эффективность: количество шагов и сами шаги алгоритма должны быть такими, чтобы решение могло быть найдено за конечное и, более того, приемлемое время.
Для оценки и сравнения алгоритмов существует много критериев. Чаще всего анализ алгоритма (или, как говорят, анализ сложности алгоритма) состоит в оценке временных затрат на решение задачи в зависимости от объема исходных данных. Используются также термины «временная сложность», «трудоемкость» алгоритма. Фактически эта оценка сводится к подсчету количества основных операций в алгоритме, поскольку каждая из них выполняется за заранее известное конечное время. Кроме временной сложности, должна оцениваться также емкостная сложность, т. е. увеличение затрат памяти в зависимости от размера исходных данных. Оценка сложности дает количественный критерий для сравнения алгоритмов, предназначенных для решения одной и той же задачи. Оптимальным (наилучшим) считается алгоритм, который невозможно значительно улучшить в плане временных и емкостных затрат.
Анализом сложности алгоритмов, исследованием классов задач, решаемых с помощью алгоритмов той или иной сложности, и многими другими теоретическими вопросами занимается специальная область информатики.
Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых элементов.
Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур:
- следование — образуется из последовательности действий, следующих одно за другим;
- ветвление (развилка) — обеспечивает в зависимости от результатов проверки условия (ДА или НЕТ) выбор одного из альтернативных путей алгоритма;
- цикл — обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.
Для описания алгоритмов наиболее распространены следующие методы (языки):
Обычный язык. Изложение алгоритма ведется на обычном языке с разделением на последовательные шаги.
Блок-схемы. Графическое изображение алгоритма с помощью специальных значков-блоков.
Формальные алгоритмические языки (языки программирования). При записи алгоритмов используют строго определенный набор символов и составленных из них специальных зарезервированных слов. Имеют строгие правила построения языковых конструкций.
Псевдокод. Синтез алгоритмического и обычного языков. Элементы некоторого базового алгоритмического языка используются для строгой записи базовых структур алгоритма.
Словесный способ (запись на обычном языке) не имеет широкого распространения, т. к. таких описаний есть ряд недостатков:
- строго не формализуемы;
- достаточно многословны;
- могут допускать неоднозначность толкования отдельных предписаний;
- сложные задачи с анализом условий, с повторяющимися действиями трудно представляются в словесной или словесно-формульной форме.
Графический способ представления информации является более наглядным и компактным по сравнению со словесным. При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Такое графическое представление алгоритма называется блок-схемой. Определенному типу действия (ввод/вывод данных, проверка условия, вычисление выражения, начало и конец алгоритма и т. п.) соответствует определенная геометрическая фигура — блочный символ. Блоки соединяются между собой линиями переходов, которые определяют очередность выполнения действий.
Название символа | Графическое изображение | Комментарии |
Пуск/Останов (блоки начала и конца алгоритма) | Указание на начало или конец алгоритма | |
Ввод/Вывод данных (блоки ввода, вывода | Организация ввода/вывода в общем виде | |
Процесс (операторные блоки) | Выполнение вычислительного действия или последовательности действий (можно объединять в один блок), которые изменяют значение, форму представления или размещение данных | |
Условие (условный блок) | Выбор направления выполнения алгоритма. Если условие, записанное внутри ромба, выполняется, то управление передается по стрелке «да», в противном случае — по стрелке «нет». Таким образом, реализуется процесс изменения последовательности вычислений в зависимости от выполнения условия | |
Начало цикла с параметром | Используется для организации циклических конструкций с известным количеством итераций (повторений) и известным шагом изменения параметра цикла. Внутри блока для параметра цикла указываются через запятую его начальное значение, конечное значение и шаг изменения. Цикл, для которого неизвестно количество повторений, записывается с помощью условного и операторных блоков | |
Предопределенный процесс | Используется для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращения к библиотечным подпрограммам | |
Печать сообщений (документ) | Вывод результатов на печать |
При составлении блок-схемы необходимо проверять выполнение следующих условий:
- из каждого прямоугольника и параллелограмма (кроме конца алгоритма) должна выходить только одна стрелка;
- в каждый прямоугольник и параллелограмм (кроме начала алгоритма) должна входить хотя бы одна стрелка;
- в каждый ромб должна входить хотя бы одна стрелка, а выходить из него — две стрелки, помеченные словами «ДА» и «НЕТ».
Псевдокод занимает промежуточное положение между естественным языком и языками программирования. В псевдокоде не приняты строгие синтаксические правила для записи команд, что отличает формальные языки программирования. Однако в псевдокоде есть некоторые конструкции, которые присущи формальным языкам, что облегчает переход от записи алгоритма на псевдокоде к записи алгоритма на языке программирования. Псевдокоды бывают разные. Рассмотрим учебный (школьный) алгоритмический язык АЯ.
Алфавит учебного алгоритмического языка является открытым. В него могут быть введены любые понятные всем символы: русские и латинские буквы, знаки математических операций, знаки отношений, специальные знаки и т. д. Кроме алфавита, в алгоритмической нотации определяются служебные слова, которые являются неделимыми. Служебные слова обычно выделяются жирным шрифтом или подчеркиванием. К служебным словам относятся:
алг — заголовок алгоритма | нц — начало цикла | знач |
нач — начало алгоритма | кц — конец цикла | и |
кон — конец алгоритма | дано | или |
арг — аргумент | надо | не |
рез — результат | если | да |
цел — целый | то | нет |
сим — символьный | иначе | при |
лит — литерный | всё | выбор |
лог — логический | пока | утв |
вещ — вещественный | для | ввод |
таб — таблица | от | вывод |
длин — длина | до |
Общий вид записи алгоритма на псевдокоде:
алг — название алгоритма (аргументы и результаты)
дано — условие применимости алгоритма
надо — цель выполнения алгоритма
нач — описание промежуточных величин
последовательность команд (тело алгоритма)
кон
Часть алгоритма от слова алг до слова нач называется заголовком, а часть, заключенная между словами нач и кон, — телом алгоритма (исполняемой частью алгоритма).
В предложении алг после названия алгоритма в круглых скобках указываются характеристики (арг, рез) и тип значения (цел, вещ, сим, лит или лог) всех входных (аргументы) и выходных (результаты) переменных. При описании массивов (таблиц) используется служебное слово таб, дополненное именем массива и граничными парами по каждому индексу элементов массива.
Команды учебного языка:
1. Оператор присваивания, который обозначается «:=» и служит для вычисления выражений, стоящих справа, и присваивания их значений переменным, указанным в левой части. Например, если переменная а имела значение 5, то после выполнения оператора присваивания а := а + 1, значение переменной а изменится на 6.
2. Операторы ввода/вывода:
ввод (список имен переменных)
вывод (список вывода)
Список вывода может содержать комментарии, которые заключаются в кавычки.
3. Оператор ветвления (с использованием команды если…то… иначе…всё; выбор);
4. Операторы цикла (с использованием команд для, пока, до).
Запись алгоритма на псевдокоде:
Здесь в предложениях дано и надо после знака «|» записаны комментарии. Комментарии можно помещать в конце любой строки, они существенно облегчают понимание алгоритма.
При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается произвольное изображение команд. Вместе с тем такая запись позволяет понять человеку суть дела и исполнить алгоритм. Однако алгоритм, предназначенный для исполнения на компьютере, должен быть записан на строго формализованном языке. Такой язык называется языком программирования, а запись алгоритма на этом языке — компьютерной программой.
Для решения одной и той же задачи можно предложить несколько алгоритмов. Алгоритмы составляются с ориентацией на определенного исполнителя алгоритма. У каждого исполнителя имеется свой конечный набор команд, которые для него понятны и исполняемы. Этот набор называется системой команд исполнителя. Пользуясь системой команд, исполнитель может выполнить алгоритм формально, не вникая в содержание поставленной задачи. От исполнителя требуется только строгое выполнение последовательности действий, предусмотренной алгоритмом. Таким образом, в общем случае алгоритм претерпевает изменения по стадиям:
- первая стадия — алгоритм должен быть представлен в форме, понятной человеку, который его разрабатывает;
- вторая стадия — алгоритм должен быть представлен в форме, понятной исполнителю алгоритма (вторая стадия может отсутствовать, если исполнять алгоритм будет сам разработчик).
Примеры решения задач
Пример 1. Исполнитель Утроитель может выполнить только две команды, которым присвоены номера:
1 — вычти 1;
3 — умножь на 3.
Первая команда уменьшает число на 1, вторая — увеличивает его втрое.
Написать набор команд (не более пяти) получения из числа 3 числа 16. В ответе указать только номера команд.
Решение.
1 (3 – 1 = 2)
3 (2 * 3 = 6)
3 (6 * 3 = 18)
1 (18 – 1 = 17)
1 (17 – 1 = 16)
Ответ: 13311
Пример 2. Имеется Исполнитель алгоритма, который может передвигаться по числовой оси.
Система команд Исполнителя алгоритма:
1. «Вперед N» (Исполнитель алгоритма делает шаг вперед на N единиц).
2. «Назад M» (Исполнитель алгоритма делает шаг назад на M единиц).
Переменные N и M могут принимать любые целые положительные значения. Известно, что Исполнитель алгоритма выполнил программу из 50 команд, в которой команд «Назад 2» на 12 больше, чем команд «Вперед 3». Других команд в программе не было. Какой одной командой можно заменить эту программу, чтобы Исполнитель алгоритма оказался в той же точке, что и после выполнения программы?
Решение.
1. Найдем, сколько было команд «Вперед», а сколько «Назад». Учитывая, что общее количество команд равно 50 и что команд «Назад» на 12 больше, чем команд «Вперед». Получим уравнение: x + (x + 12) = 50, где x — количество команд «Вперед». Тогда общее количество команд «Вперед»: x = 19, а количество команд «Назад»: 19 + 12 = 31.
2. Будем вести отсчет от начала числовой оси. Выполнив 19 раз команду «Вперед 3», Исполнитель алгоритма оказался бы на отметке числовой оси 57 (19 * 3 = 57). После выполнения 31 раз команды «Назад 2» (31 * 2 = 62) он оказался бы на отметке –5 (57 – 62 = –5).
3. Все эти команды можно заменить одной — «Назад 5».
Ответ: команда«Назад 5».
Пример 3. Черепашка является исполнителем для создания графических объектов на рабочем поле. При движении Черепашка оставляет след в виде линии. Черепашка может исполнять следующие команды:
Название команды | Параметр | Действия исполнителя |
вп | Число шагов | Продвигается в направлении головы на указанное число шагов |
нд | Число шагов | Продвигается в направлении, противоположном направлению головы на указанное число шагов |
пр | Число градусов | Поворачивается направо относительно направления, заданного головой черепашки |
лв | Число градусов | Поворачивается налево относительно направления, заданного головой черепашки |
Для записи повторяющихся действий (цикла) используется команда Повтори. В этой команде два параметра: первый задает количество повторений (итераций), а второй — список команд которые должны повторяться (тело цикла); список заключается в квадратные скобки.
Записать для исполнителя Черепашка алгоритмы:
а) построения квадрата со стороной 100;
б) построения правильного шестиугольника со стороной 50.
в) построения изображения цифры 4, если голова Черепашки смотрит на север.
Ответ: а) Повтори 4 [вп 100 пр 90]; б) Повтори 6 [вп 50 пр 360/6]; в) вп 100; повтори [лв 135 вп 50].
Пример 4. Два игрока играют в следующую игру (это вариант восточной игры). Перед ними лежат три кучки камней, в первой из которых 2, во второй — 3, в третьей — 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в одной из кучек, или добавляет по два камня в каждую из них. Выигрывает игрок, после хода которого либо в одной из кучек становится не менее 15 камней, либо общее число камней в трех кучках становится не менее 25. Кто выиграет при безошибочной игре обоих игроков — игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ следует обосновать.
Решение. Удобнее всего составить таблицу возможных ходов обоих игроков. Заметим, что в каждом случае возможны всего четыре варианта хода. В таблице курсивом выделены случаи, которые сразу же приносят поражение игроку, делающему этот ход (например, когда камней в какой-либо кучке становится больше или равно 8, другой игрок непременно выигрывает следующим ходом, удваивая количество камней в этой кучке). Из таблицы видно, что при безошибочной игре обоих игроков первый всегда выиграет, если первым ходом сделает 4, 5, 6. У второго игрока в этом случае все ходы проигрышные.
1-й ход | 2-й ход | |||
Начало | 1-й игрок | 2-й игрок | 1-й игрок | 2-й игрок |
2,3,4 | 4,3,4 | 8,3,4 | выигрыш | |
4,6,4 | 8,6,4 | выигрыш | ||
4,12,4 | выигрыш | |||
4,6,8 | выигрыш | |||
6,8,6 | выигрыш | |||
4,3,8 | выигрыш | |||
6,5,6 | 12,5,6 | выигрыш | ||
6,10,6 | выигрыш | |||
6,5,12 | выигрыш | |||
8,7,8 | выигрыш | |||
2,6,4 | 4,6,4 | 8,6,4 | выигрыш | |
4,12,4 | выигрыш | |||
4,6,8 | выигрыш | |||
6,8,6 | выигрыш | |||
2,12,4 | выигрыш | |||
2,6,8 | выигрыш | |||
4,8,6 | выигрыш | |||
2,3,8 | выигрыш | |||
4,5,6 | 8,5,6 | выигрыш | ||
4,10,6 | выигрыш | |||
4,5,12 | выигрыш | |||
6,7,8 | выигрыш |
Пример 5. Записано 7 строк, каждая из которых имеет свой номер. В нулевой строке после номера записана цифра 001. Каждая последующая строка содержит два повторения предыдущей строки и добавленной в конец большой буквы латинского алфавита (первая строка — A, вторая строка — B и т. д.). Ниже приведены первые три строкиєтой записи (в скобках указан номер строки):
(0) 001
(1) 001001A
(2) 001001A001001AB
Какой символ находится в последней строке на 250-м месте (считая слева направо)?
Примечание. Первые семь букв латинского алфавита: A, B, C, D, E, F, G.
Решение. Найдем длину каждой строки. Длина каждой следующей строки в два раза больше длины предыдущей плюс один символ, длина строк составит:
(0) 3 символа;
(1) 32+1=7;
(2) 72+1=15;
(3) 152+1=31;
(4) 312+1=63;
(5) 632+1=127;
(6) 1272+1=255 символов.
Так как задано 7 строк, а нумерация начинается с нулевой строки, последняя строка имеет номер 6 и содержит 255 символов. Последний символ в строке — F. Предпоследний элемент — E, далее идут символы D, C, B, A, 1 (по правилу формирования строк). Таким образом, 250-й символ — это 1.
Ответ: 1.
Пример 6. Имеется фрагмент алгоритма, записанный на учебном алгоритмическом языке:
n := Длина(а)
k = 2
b := Извлечь(а, k)
нц для i от 7 до n – 1
с := Извлечь(а, i)
b := Склеить(b, с)
кц
Здесь переменные а, b, с — строкового типа; переменные n, i — целые.
В алгоритме используются следующие функции:
Длина(х) — возвращает количество символов в строке х. Имеет тип «целое».
Извлечь(х, i) — возвращает i-й символ слева в строке х. Имеет строковый тип.
Склеить(х, у) — возвращает строку, в которой находятся все символы строки х, а затем все символы строки у. Имеет строковый тип.
Какое значение примет переменная b после выполнения этого фрагмента алгоритма, если переменная а имела значение «ВОСКРЕСЕНЬЕ»?
Решение. Находим общее число символов в строке а, получим, что n = 11.
Выполняя команду b := Извлечь(а, k) при k = 2, получим, что b примет значение «О«.
В цикле последовательно, начиная с 7-го символа строки а и заканчивая предпоследним (n – 1), извлекаем символ из строки а и присоединяем к строке b.
В результате получим слово «ОСЕНЬ» (символы с номерами 2 + 7 + 8 + 9 + 10).
Ответ: «ОСЕНЬ«
Пример 7. Леонардо из Пизы, известный как Фибоначчи, был первым из великих математиков Европы позднего Средневековья. Числовой ряд, который называется его именем, получился в результате решения задачи о кроликах, которую Фибоначчи изложил в своей «Книге Абака», написанной в 1202 году. Он выглядит так:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…
В этом ряду каждое следующее число, начиная с третьего, равно сумме двух предыдущих. Составить словесный алгоритм и блок-схему проверки принадлежности введенного числа n ряду Фибоначчи.
Решение. Словесный алгоритм:
- Ввести число n.
- Установить значение первых трех чисел Фибоначчи: 1, 1, 2 (сумма двух предыдущих чисел).
- Пока введенное число n больше очередного числа Фибоначчи, взять два последних числа Фибоначчи и получить из них новое число Фибоначчи.
- Если число Фибоначчи равно введенному n или было введено число n = 1, значит, что было введено число Фибоначчи, в противном случае — введенное число не является числом Фибоначчи.
Приведенный словесный алгоритм в пункте 1, 2 содержит начальные установки, в пункте 3 — цикл с условием, а пункт 4 — это вывод результата работы алгоритма.
Блок-схема алгоритма:
Обозначения:
F — текущее число ряда Фибоначчи;
F1 и F2 — два предыдущих числа ряда Фибоначчи для числа F;
n — число, для которого требуется определить, является ли оно числом из ряда Фибоначчи.
Использование основных алгоритмических конструкций: следование, ветвление, цикл
Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур: следование, ветвление, цикл.
Базовая структура СЛЕДОВАНИЕ указывает на то, что управление передается последовательно от одного действия к другому.
Учебный алгоритмический язык | Язык блок-схем |
действие 1 действие 2 … действие n |
Использование исключительно этой структуры возможно лишь для достаточно простых задач, ход решения которых не меняется в зависимости от конкретных исходных данных и состоит в последовательном выполнении определенных операций.
В качестве примера рассмотрим решение простой задачи.
Пример. Найти y(x) = x2 + 3x + 5, используя только операции умножения и сложения.
Решение. На рис. приводятся два алгоритма, реализующие решение поставленной задачи.
Порядок вычисления y(x) в первом случае — обычный, а во втором — (x + 3) x + 5. Обе формулы эквивалентны, но в первом случае для вычисления необходимо 2 умножения, 2 сложения и 3 переменных (x, y, z), а во втором используются 1 умножение, 2 сложения и 2 переменные (x, y).
Приведенный пример показывает, что даже простые задачи могут решаться с помощью различных вариантов алгоритмов.
Обратите внимание, как в блоке следования используется оператор присваивания.
Операция присваивания — важнейшая операция во всех языках программирования. С помощью присваивания переменные получают новые значения: в левой части инструкции ставится идентификатор величины, а в правой части — выражение, значение которого можно определить.
В операторах присваивания используется либо привычный знак равенства, либо сочетание двоеточия и знака равенства «:=». Поскольку знак присваивания — это не знак равенства, возможны записи вида Х := Х + 1 или А := А – В. Нужно учитывать, что оператор присваивания будет выполняться только в том случае, если значения всех переменных правой части уже определены.
Базовая структура ВЕТВЛЕНИЕ (РАЗВИЛКА) используется в случае, когда выполнение программы может измениться в зависимости от результата проверки условия и пойти двумя разными (альтернативными) путями. Другими словами, условие является некоторым высказыванием (предикатом) и может быть истинным или ложным (принимать значение TRUE или FALSE). Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
Различают две структуры этого типа — полную и неполную. В случае полной структуры, если условие выполняется (является истинным), вслед за ним выполняется действие 1, иначе — действие 2. В случае неполной структуры, если условие выполняется (является истинным), то вслед за ним выполняется действие 1, иначе ничего не происходит.
Важную роль в операторах ветвления играют содержащиеся в них условия. В простейшем случае условиями служат отношения между величинами. Условия с одним отношением называют простыми условными выражениями, или простыми условиями. В некоторых задачах необходимы более сложные условия, состоящие из нескольких простых, например условие А < X < С, т. е. Х < А и (Х > C) (возможна запись (Х < А) and (Х > C)). Объединение нескольких простых условий в одно образует составное условное выражение, или составное условие. Составные условия образуются с помощью логических операторов not (отрицание), and (логическое И), or (логическое ИЛИ), хоr (исключающее ИЛИ).
Структура ВЕТВЛЕНИЕ существует в четырех основных вариантах:
если — то (неполная структура);
если — то — иначе (полная структура);
выбор (неполный);
выбор — иначе (полный).
Учебный алгоритмический язык | Язык блок-схем |
1) если — то | |
если условие то действие 1 всё |
|
2) если — то — иначе | |
если условие то действие 1 иначедействие 2 всё |
|
3) выбор | |
выбор при условие 1: действие 1 при условии 2: действие 2 … при условие N: действие N всё |
|
4) выбор — иначе | |
выбор при условие 1: действие 1 при условие 2: действие 2 … при условие N: действие N + 1 иначе действия N + 1 всё |
В качестве простого примера рассмотрим нахождение модуля числа y(x) = |x|. Решение приведено на рис. для случаев полной (а) и неполной (б) структур ветвления.
Базовая структура ЦИКЛ служит для записи алгоритмов, в которых некоторая часть алгоритма (тело цикла) должна повторяться несколько раз. Количество повторений цикла может определяться разными способами, в зависимости от которых различают три вида циклов.
1. Цикл с предусловием, или цикл «пока». При реализации этого цикла сначала проверяется условие его выполнения. Пока оно выполняется, будут происходить повторения тела цикла. Отсюда и другое его название — цикл «пока». Если условие не выполняется при первой проверке, то тело цикла не будет выполняться вообще. После выхода из цикла управление передается следующей структуре. Для того чтобы избежать зацикливания, т. е. бесконечного цикла, в теле цикла обязательно должны изменяться параметры, записанные в условии.
Учебный алгоритмический язык | Язык блок-схем |
нц пока условие тело цикла (последовательность действий) кц |
2. Цикл с параметром. Этот вид цикла удобно использовать в тех случаях, когда заранее извесно количество повторений цикла. Вводится понятие счетчика цикла, который по умолчанию считается равным либо 1, либо –1. В некоторых случаях изменение счетчика цикла (приращение) указывают явно. Для организации цикла необходимо задать верхнюю и нижнюю границы изменения счетчика цикла. В зависимости от значения верхней и нижней границы определяется шаг цикла (1 или −1), т. е. значение счетчика цикла.
Учебный алгоритмический язык | Язык блок-схем |
нц для i от i1 до i2 тело цикла (последовательность действий) кц |
3. Цикл с постусловием, или цикл «до». При реализации этого цикла условие завершение цикла проверяется после тела цикла. В этом случае тело цикла всегда выполняется хотя бы один раз. Цикл будет выполняться до выполнения условия, отсюда и другое название — цикл «до». А пока условие не выполнено, будет повторяться тело цикла (выполнение условия, таким образом, является условием окончания цикла). В этом случае, как и в цикле «пока», необходимо предусмотреть в теле цикла изменение параметров условия цикла.
Учебный алгоритмический язык | Язык блок-схем |
нц тело цикла (последовательность действий) до условие кц |
Для всех видов цикла предусмотрена возможность досрочного выхода, т. е. прерывание работы цикла.
Помимо трех рассмотренных видов цикла существует и так называемый интерационные циклы. Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа пока. Выход из итерационного цикла осуществляется в случае выполнения заданного условия. На каждом шаге вычислений происходит последовательное приближение и проверка условия достижения искомого результата. Классический пример — вычисление суммы ряда с заданной точностью.
Алгоритм, в состав которого входит итерационный цикл, называется итерационным алгоритмом. Итерационные алгоритмы используются при реализации итерационных численных методов. В итерационных алгоритмах необходимо обеспечить обязательное условие выхода из цикла (сходимость итерационного процесса). В противном случае произойдет зацикливание алгоритма, т. е. не будет выполняться основное свойство алгоритма — результативность.
Пример. Вычислить сумму знакопеременного ряда $S=x-{x^2}/{2}+{x^3}/{3}-{x^4}/{4}+…$ с заданной точностью $ε$.
Для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше $ε$.
Решение. Запишем блок-схему алгоритма, где будем использовать следующие обозначения:
$S$ — частичная сумма ряда (стартовое значение равно 0);
$ε$ — точность вычисления;
$i$ — номер очередного слагаемого;
$m$ — значение очередного слагаемого;
$p$ — числитель очередного слагаемого.
На псевдокоде алгоритм можно записать следующим образом:
Примечание. Следует отметить, что ряд будет сходящимся только при выполнении условия 0 < х < 1.
Возможны случаи, когда внутри тела цикла необходимо повторить некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле, или вложенного цикла. Глубина вложения циклов (количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии времени выполнения необходимо выносить из внутреннего цикла во внешний все действия, результаты которых не зависят от параметра внутреннего цикла.
Пример. Вычислить сумму элементов для заданной матрицы (таблицы из 5 строк и 3 столбцов) А(5,3).
Решение. Алгоритм решения задачи на псевдокоде:
Основная часть блок-схемы нахождения суммы элементов матрицы будет иметь следующий вид:
Здесь порядок выполнения вложенных циклов следующий: счетчик внутреннего цикла изменяется быстрее, т. е. для i = 1(внешний цикл), j пробегает значения 1, 2, 3 (внутренний цикл); далее i = 2, j опять пробегает значения 1, 2, 3 и т. д.
Примеры решения задач
Пример 1. Дан фрагмент блок-схемы некоторого алгоритма.
Определить значение переменной А после выполнения фрагмента алгоритма.
Какие исправления нужно внести, чтобы изменение значения переменной А происходило в обратном порядке?
Как записать исходный алгоритм с помощью двух других видов цикла?
Решение. Если представить пошаговое выполнение алгоритма в виде таблицы, получим:
Начальные установки: | A = 100000; N = 2 |
1-я итерация | A = 10000; N = 4 |
2-я итерация | A = 1000; N = 6 |
3-я итерация | A = 100; N = 8 |
4-я итерация | A = 10; N = 10 |
5-я итерация, выполнилось условие выхода: N > 10 | Ответ: А = 1; N = 12 |
Таблица обратного хода изменения значения А будет иметь такой вид:
Начальные установки: | A = 1; N = 2 |
1-я итерация | A = 10; N = 4 |
2-я итерация | A = 100; N = 6 |
3-я итерация | A = 1000; N = 8 |
4-я итерация | A = 10000; N = 10 |
5-я итерация, выполнилось условие выхода: N > 10 | А = 100000; N = 12 |
Блок-схема алгоритма примет такой вид:
В алгоритме нужно изменить начальное значение А и операцию деления заменить операцией умножения. Счетчик N в данном случае изменять не нужно.
В приведенной в условии блок-схеме используется цикл с предусловием. Для цикла с параметром блок-схема алгоритма будет иметь такой вид:
Понятно, что цикл должен выполниться пять раз. В заголовке цикла необходимо указать начальное и конечное значение счетчика цикла N (приращение по умолчанию равно 1).
Для цикла с постусловием блок-схема исходного алгоритма имеет такой вид:
В данной схеме условие завершения цикла находится после тела цикла. Цикл, в отличие от цикла с предусловием, выполняется, пока значение условия ложно.
Пример 2. Сколько раз выполнится тело цикла в программе?
Q := 27; P := 36
нц пока (div(Q, 5) = div(P, 7))
Q := Q + 2
P := P + 3
кц
Примечание. Результат функции div(X, Y) — целая часть от деления X на Y.
Решение. Рассмотрим пошаговое выполнение алгоритма, оформив его в виде таблицы.
Начальные установки | Q := 27; P := 36 |
Проверка выполнения условия | div(27, 5) = 5; div(36, 7) = 5; 5 = 5 |
1-я итерация; выполнение тела цикла | Q := 29; P := 39 |
Проверка выполнения условия | div(29, 5) = 5; div(39, 7) = 5; 5 = 5 |
2-я итерация; выполнение тела цикла | Q := 31; P := 42 |
Проверка выполнения условия | div(31, 5) = 6; div(42, 7) = 6; 6 = 6 |
3-я итерация; выполнение тела цикла | Q := 33; P := 45 |
Проверка выполнения условия | div(33, 5) = 6; div(45, 7) = 6 6 = 6 |
4-я итерация; выполнение тела цикла | Q := 35; P := 48 |
Проверка выполнения условия. Условие не выполняется, цикл завершает работу | div(35, 5) = 7; div(48, 7) = 6; 7 ≠ 6 |
Ответ: цикл выполнится 4 раза.
Использование переменных. Объявление переменной (тип, имя, значение).
Локальные и глобальные переменные
Величины служат для описания объектов и процессов в материальном мире. Каждая величина имеет некоторые характеристики. В программировании понятие величины несколько отличается от понятия величины в естественных науках — оно является более формальным. Величиной называют объект — переменную, с которым связывается определенное множество значений. Такому объекту присваивается имя — идентификатор. Понятие переменной в программировании сходно с понятием переменной в математике. Например, в алгебраическом равенстве C = F + 2B – 5 значение переменной С зависит от значений переменных F и B, указанных в правой части равенства. Например, при F = 2 и B = 6, С = 9. Такое же равенство можно записать в программе, например на языке программирования Бейсик: C = F + 2B – 5. В терминах языка программирования C, F и B — это идентификаторы (имена) переменных.
Переменная — это объект программы, имеющий имя и изменяемое значение. Для хранения переменной в памяти компьютера выделено определенное место.
Переменные величины в отличие от постоянных величин (констант) могут со временем менять свое значение. Константой называется величина, которая в ходе выполнения программы не меняет своего значения.
Назначение программы состоит в обработке информации, при этом, конечно, основную роль играют переменные.
Переменная характеризуется:
- идентификатором;
- типом;
- значением.
Каждая переменная имеет свой идентификатор, т. е. свое уникальное имя. Имя переменной показывает, в каком месте памяти компьютера она хранится, значение переменной считывается из указанного ее именем места в памяти. Двух переменных с одним именем в одном программном модуле (блоке) быть не должно. Примерами идентификаторов величин могут быть, например, следующие последовательности символов: a1, SUMMA, X_1, Y_1, My_program.
Во многих языках программирования существуют некоторые ограничения на задания имен переменных. Имена составляются из букв и цифр; первой литерой должна быть буква. Знак подчеркивания «_» считается буквой, его удобно использовать, чтобы улучшить восприятие длинных имен переменных. Разумно давать переменным логически осмысленные имена, в соответствии с их назначением. Нельзя использовать в качестве имен зарезервированные (служебные) слова языка программирования.
Тип переменной — это диапазон (набор) всех значений, которые может принимать данная переменная. Тип переменной определяет, какие операции для нее допустимы. Другими словами, тип переменной — это характеристика, которая для величины определяет:
- необходимый размер памяти;
- диапазон значений, которые может принимать величина;
- возможные операции над величиной (подразумеваются действия относительно использования величин в выражениях);
- формы представления величин (или формат представления величин).
Стандартные типы — это числовые, литерные и логические типы.
Числовой тип, к которому относятся целые и вещественные величины, позволяет оперировать с числами. Целые числа, которые в учебном алгоритмическом языке составляют тип цел, сверху ограничены положительным числом Nmax, а снизу — отрицательным числом Nmin. Значения Nmax и Nmin определяются объемом ячеек памяти, в которые записываются целые числа. Обычно для целых чисел выделяется два байта памяти, соответственно границы диапазона равны [Nmin = –32768 и Nmax = 32767]. Считается, что все операции с величинами типа цел выполняются по обычным правилам арифметики, за одним исключением: возможны две операции деления div и mod.
Операция div обозначает целочисленное деление. При делении с точностью до целых чисел получается два результата — частное и остаток. Знак результата берется по обычным правилам, а полученный остаток игнорируется. Например:
23 div 5 = 4;
2 div 6 = 0;
(–13) div 5 = –2;
(–13) div (–5) = 2.
Операция mod определяет остаток при делении двух целых чисел.
Например:
23 mod 5 = 3;
2 mod 6 = 2;
(–13) mod 5 = –3;
(–13) mod (–5) = 3;
8 mod 2 = 0.
Целые числа чаще всего используются в простых арифметических выражениях и выступают в программах в качестве различных счетчиков и значений индексов.
К другому числовому типу относятся вещественные (вещ) величины. Значения вещественных величин могут изображаться в форме с фиксированной запятой (например, 0,3333; 2,0; –4,567 и т. д.) и с плавающей запятой (например, 7,0102, 5,173*10–3 и т. д.).
В отличие от целых чисел, действия с вещественными числами могут быть неточными — это связано с ошибками округлений. Объем памяти, который предоставляется для хранения значений вещественной переменной, — от 4 до 10 байтов (в зависимости от выбранного формата числа). Над числовыми величинами можно выполнять как арифметические операции, так и операции сравнения (>, <, >=, <=, =, ).
Литерный тип, включающий символы и строки, дает возможность работать с текстом. Литерные величины — это произвольные последовательности символов: букв, цифр, знаков препинания, пробела и других специальных знаков (возможными символами могут быть символы таблицы ASCII). Литерные величины обычно заключаются в кавычки: «а», «В», «СТРОКА», «1_2_3». В учебном алгоритмическом языке литерные величины обозначаются как лит. В других языках программирования (например, в Паскале) различают символьный (char) и строковый (string) типы. Величины символьного типа состоят из одного символа и занимают в памяти всего 1 байт. Величины строкового типа представляют собой различные последовательности символов, которые предусмотрены кодовой страницей, установленной в компьютере. Длина строки может составлять от 0 до 255 символов. Над всеми литерными величинами возможны операции сравнения. С помощью отношений типа «a» < «b», «b» < «c», «c» < «d»,… выполняется упорядочение литерных величин (сортировка по возрастанию или убыванию).
Еще одной операцией, характерной для символьных и строковых величин, является операция конкатенации (слияния): «a» + «b» = «ab».
Логический тип позволяет определять логические переменные, которые могут принимать только два значения: истина (true) или ложь (false). Для представления логической величины достаточно одного бита, однако, поскольку место в памяти выделяется по байтам, логической величине отводится минимальная «порция» памяти — один байт. Над логическими величинами можно выполнять все стандартные логические операции.
Значение — это непосредственно то, чему равна переменная в конкретный момент времени. Это может быть число, символ, текст и т. д. Значение переменной в программе можно задать двумя способами: присваиванием и с помощью процедуры ввода.
Оператор присваивания
Во всех языках программирования оператор присваивания является одним из важнейших. С помощью присваивания переменные получают новые значения, например:
Д := 13;
D1 := C;
Х := Х + 1.
В операторах присваивания используется либо обычный знак равенства, либо сочетание двоеточия и знака равенства «:=». Поскольку знак присваивания — это не знак равенства, возможны записи вида Х := Х + 1 или А := А – В. Нужно учитывать, что оператор присваивания будет выполняться только в том случае, если значения всех переменных в правой части уже определены и выполняется соответствие типов для правой и левой части оператора присваивания. Например, С := А > B выполнится только в том случае, если для переменной С определен булевский (логический) тип. Операция присваивания может быть применена к большинству типов величин. Однако для каждого из типов предусмотрен свой набор операций.
Локальные, глобальные и общие переменные
Каждая переменная характеризуется областью действия или областью видимости. По зоне видимости в языках программирования различают локальные и глобальные переменные. Первые доступны только конкретному подалгоритму (вспомогательному алгоритму, подпрограмме, модулю), вторые — всему алгоритму (программе). С распространением модульного и объектного программирования появились еще и общие переменные, доступные для определенных уровней иерархии подпрограмм.
Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных, так и для защиты от ошибок, связанных с неправомерным использованием переменных.
Имена локальных и глобальных переменных могут совпадать. При этом действует правило: локальные переменные на время работы подпрограмм, в которых они объявлены, экранируют, т. е. перекрывают глобальные переменные. Например, если в основной программе переменная с именем с определена как логическая, а в подпрограмме идентификатор с используется для задания вещественной переменной, то только на время работы подпрограммы с можно использовать как число — в остальных случаях идентификатор с определяет логическую переменную.
Примеры решения задач
Пример 1. Значения заданных переменных А, В перераспределить таким образом, чтобы А и В поменялись значениями.
Решение. Возможны два варианта решения:
С использованием промежуточной переменной С | Без использования дополнительной переменной |
C := A; A := B; B := C |
A := A + B; B := A – B; A := A – B |
Пример 2. Определить значение переменной A после выполнения фрагмента алгоритма:
Решение. Оформим решение в виде таблицы.
A | B | D | Условие |
2 | –2 | 10 | да |
–4 | –2 | 12 | да |
8 | –2 | 14 | да |
–16 | –2 | 16 | да |
32 | –2 | 18 | да |
–64 | –2 | 20 | да |
128 | –2 | 22 | нет — окончание цикла |
Ответ: А = 128.
Пример 3. Определить значение переменной S:
A := –1; B := 1
нц пока A + B < 10
A := A + 1; B := B + A
кц
S := A * B
Решение. Оформим решение в виде таблицы.
A | B | A + B | S |
–1 | 1 | 0 | |
0 | 1 | 1 | |
1 | 2 | 3 | |
2 | 4 | 6 | |
3 | 7 | 10 — условие выхода из цикла | 21 |
Ответ: S = 21.
Пример 4. Записать последовательность операций присваивания (:=), которая позволит определить номера подъезда и этажа по номеру N квартиры девятиэтажного дома, считая, что на каждом этаже по 4 квартиры, а нумерация квартир начинается с первого подъезда.
Решение.
4 * 9 = 36 {количество квартир в подъезде}
Х := (N – 1) div 36 + 1 {номер подъезда}
N := N – (X – 1) * 36 { N ∊[1, 36] }
Y := (N – 1) div 4 + 1 {номер этажа}
Например, для квартиры с номером 150 получим:
Х = (150 – 1) div 36 + 1 = 4 + 1 = 5;
N = 150 – (5 – 1) * 36 = 6;
Y = (6 – 1) div 4 + 1 = 2.
Ответ: квартира с номером 150 находится в пятом подъезде, на втором этаже.
В решение заданий демо-версии используется язык программирования Python.
Задание 1. Анализ информационных моделей На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах). Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт В и из пункта F в пункт A. В ответе запишите целое число. |
На графе расставим веса вершин. Далее 2 и 7 вершины ведут нас к 5, значит А это 5, оставшаяся «тройка» это вершина Е под номером 6. Сумма дорог BD + AF = 53 + 5 = 58 Ответ: 58 |
||||||||||||||||||
Задание 2. Построение таблиц истинности логических выражений Миша заполнял таблицу истинности логической функции F F= ¬(y → x) v (z→ w) v ¬z , но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z. Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z. В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно. Пример. Функция задана выражением ¬x v y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид. В этом случае первому столбцу соответствует переменная y, а второму столбцу – переменная x. В ответе следует написать yx. |
¬(y → x) v (z→ w) v ¬z=0. Следовательно y → x =1, z→ w=0, z=1. Значит третий столбец z. z→ w=0, значит w=0, и это может быть только 4 столбец. y → x =1, следовательно из второй строки мы видим, что первый столбец может быть только у, а второй х.
Решение на Python Ответ: YXZW |
||||||||||||||||||
Задание 3. Базы данных. Файловая система В прикрепленном файле приведён фрагмент базы данных «Продукты» о поставках товаров в магазины районов города. База данных состоит из трёх таблиц. Таблица «Движение товаров» содержит записи о поставках товаров в На рисунке приведена схема указанной базы данных. Используя информацию из приведённой базы данных, определите общий вес |
На третьем листе книги применим фильтр по району и получим ID четырех магазинов. На втором листе применим фильтр по товару и получим ID товара. На первом листе применим фильтры по ID товара и ID магазинов и типу операции. Все даты попадают в интервал от 1 до 8 июня. Получим: Поступило в продажу 710 упаковок. В упаковке 0,5 кг. Получим 355 кг. Ответ: 355 |
||||||||||||||||||
Задание 4. Кодирование и декодирование информации По каналу связи передаются сообщения, содержащие только буквы из набора: А, З, К, Н, Ч. Для передачи используется двоичный код,удовлетворяющий прямому условию Фано, согласно которому никакое кодовое слово не является началом другого кодового слова. Это условие обеспечивает возможность однозначной расшифровки закодированных сообщений. Кодовые слова для некоторых букв известны: Н – 1111, З – 110. Для трёх оставшихся букв А, К и Ч кодовые слова неизвестны. Какое количество двоичных знаков потребуется для кодирования слова КАЗАЧКА, если известно, что оно закодировано минимально возможным количеством двоичных знаков? |
Ответ: 14 |
||||||||||||||||||
Задание 5. Анализ и построение алгоритмов для исполнителей На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему 1. Строится двоичная запись числа N. Полученная таким образом запись является двоичной записью искомого числа R.Например, для исходного числа 610 = 1102 результатом является число |
Минимальное R, большее 40, это 41. ИЛИ программное решение Ответ: 16
|
||||||||||||||||||
Задание 6. Определение результатов работы простейших алгоритмов Исполнитель Черепаха действует на плоскости с декартовой системой координат. Черепахе был дан для исполнения следующий алгоритм: Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n– целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n– целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m– целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Определите, сколько точек с целочисленными координатами будут находиться внутри пересечения фигур, ограниченных заданными алгоритмом линиями, включая точки на границах этого пересечения. |
Сначала нужно построить фигуру. Далее мы находим уравнения прямых, которыми ограничена фигура и решаем ИЛИ Ответ: 1 задание — 38, 2 задание — 128 |
||||||||||||||||||
Задание 7. Кодирование и декодирование информации. Передача информации Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных. Размер полученного файла – 28 Мбайт. Затем тот же музыкальный фрагмент был записан повторно в формате стерео (двухканальная запись) и оцифрован с разрешением в 3,5 раза выше и частотой дискретизации в 2 раза меньше, чем в первый раз. Сжатие данных не производилось. Укажите размер полученного при повторной записи файла в Мбайт. В ответе запишите только целое число, единицу измерения писать не нужно. |
I = ν ⋅ i ⋅ t ⋅ k, где ν — частота дискретизации (Гц), i — разрешение (бит), t — время (с), k — количество дорожек (1 -моно, 2- стерео, 4 — квадро) I1 = ν ⋅ i ⋅ t I2 = 3,5 · 28 = 98 Ответ: 98 |
||||||||||||||||||
Задание 8. Перебор слов и системы счисления Определите количество пятизначных чисел, записанных в восьмеричной системе счисления, в записи которых только одна цифра 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6. |
* * * * * — пятизначное число. 6 * * * * — вариантов 3 ⋅ 7 ⋅ 7 ⋅ 7 = 1029 Ответ: 2961 |
||||||||||||||||||
Задание 9. Работа с таблицами Файл с данными Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия: |
Для решения этой задачи понадобится 10 вспомогательных столбцов. Сначала мы посчитаем количество повторяющихся чисел в каждой строке. Затем сумму каждой строки диапазона H:M. Если повторений нет, то эта сумма равна 6. Далее мы найдем среднее арифметическое неповторяющихся значений. Затем найдем сумму повторяющихся значений. Затем проверим соблюдение двух условий. И подсчитаем количество строк, в которых соблюдаются оба условия. Ответ: 2241 |
||||||||||||||||||
Задание 10. Поиск символов в текстовом редакторе Файл с данными Текст произведения Льва Николаевича Толстого «Севастопольские рассказы» представлен в виде файлов различных форматов. Откройте один из файлов и определите, сколько раз встречается в тексте отдельное слово «теперь» со строчной буквы. Другие формы этого слова учитывать не следует. |
В текстовом редакторе используем инструмент найти (по умолчанию он не учитывает регистр, в расширенном поиске есть кнопка больше, где можно проверить настройки). Ищем слово целиком. Ставим галочку учитывать регистр. Слово теперь со строчной буквы встречается 45 раз. Ответ: 45 |
||||||||||||||||||
Задание 11. Вычисление количества информации При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из 250 символов и содержащий только десятичные цифры и символы из 1650-символьного специального алфавита. В базе данных для хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование идентификаторов, все символы кодируются одинаковым и минимально возможным количеством бит. Определите объём памяти (в Кбайт), необходимый для хранения 65 536 идентификаторов. В ответе запишите только целое число – количество Кбайт. |
I = K · i, N = 2 i ID : ****….**** – всего 250 различных символов в наборе N = 10 + 1650 = 1660, 1024<1660<2048, 2048 = 211, значит для кодирования одного символа нужно 11 бит. IID = 250 · 11 = 2750 бит = 343,75 байт ≈ 344 байт – отводится на идентификатор целое число байт I65536 = 65536 ⋅ 344 = 22544384 байта = 22016 Кбайт– всего Ответ: 22016 |
||||||||||||||||||
Задание 12. Выполнение алгоритмов для исполнителей Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется. Цикл выполняется, пока условие истинно. В конструкции ЕСЛИ условие выполняется команда 1 (если условие истинно). В конструкции ЕСЛИ условие выполняется команда 1 (если условие истинно) или команда 2 (если условие ложно). Дана программа для Редактора: |
def pr(n): #функция определяет простое ли число for n in range(100): #перебираем n if ‘>2’ in s: if ‘>0’ in s: sum_s = 0 Ответ: 5 |
||||||||||||||||||
Задание 13. Поиск путей в графе На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, Л. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. |
Начнем подсчет из вершины Е налево через В и возвращаемся в Е через Л. Ответ: 21 |
||||||||||||||||||
Задание 14. Кодирование чисел. Системы счисления Операнды арифметического выражения записаны в системе счисления с основанием 15. |
for x in range(15): if n%14 == 0: Ответ: 8767 |
||||||||||||||||||
Задание 15. Преобразование логических выражений На числовой прямой даны два отрезка: D = [17; 58] и C = [29; 80]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение |
def deli(n,m): for A in range(1,1000): if Ok: Ответ: 94 |
||||||||||||||||||
Задание 16. Рекурсивные алгоритмы Алгоритм вычисления значения функции F(n), где n – натуральное число, |
F(2023) = 2023! = 2023 ⋅ 2022! F(2023)/F(2020) = (2023 ⋅ 2022 ⋅ 2021 ⋅ 2020!)/2020! = 2023 ⋅ 2022 ⋅ 2021 = = 8266912626 Ответ: 8266912626 |
||||||||||||||||||
Задание 17. Проверка на делимость Файл с данными В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых |
f= open(’17.txt’) k = 0 for i in p: for i in range(1,len(p)): #Осторожно, скобки! print(k,PP) Ответ: 180 190360573 |
||||||||||||||||||
Задание 18. Робот-сборщик монет Файл с данными Квадрат разлинован на N×N клеток (1 < N < 17). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. При попытке выхода за границу квадрата Робот разрушается. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клетке маршрута Робота. Откройте файл. Определите максимальную и минимальную денежную сумму, которую может собрать Робот, пройдя из левой верхней клетки в правую нижнюю. В ответ запишите два числа друг за другом без разделительных знаков — сначала максимальную сумму, затем минимальную. Исходные данные представляют собой электронную таблицу размером N×N, каждая ячейка которой соответствует клетке квадрата.Пример входных данных:
Для указанных входных данных ответом должна быть пара чисел 41 и 22. |
Сначала скопируем таблицу рядом, начиная со столбца АА, можно уменьшить ширину столбца до 4-5. Ячейка АА1=А1. Ячейка АВ1 = АА1+В1, протягиваем ее до АТ1. Ячейка АА2 = АА1 + А2, протягиваем ее до АА20. Далее ячейка АВ2 = В2+МАКС(АА2;АВ1), протягиваем ее на весь оставшийся диапазон, копируем только значения, не трогая стен. Справа от стен формулы повторяют крайний левый рял, столбец АА, снизу от стен формулы копируют верхнюю строку 1. Далее делаем замену всех формул МАКС на МИН. Ответ: 1099 1026 |
||||||||||||||||||
Задание 19. Выигрышная стратегия. Задание 1 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 129. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 129 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 128. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом. |
При значениях S < 64 у Пети есть возможность сделать такой ход, что Ваня не сможет выиграть своим первым ходом. При значении S = 64 Петя своим первым ходом может получить 65 или 128 камней в куче. Во всех случаях Ваня увеличивает количество камней в куче в два раза и выигрывает своим первым ходом. Ответ: 64 |
||||||||||||||||||
Задание 20. Выигрышная стратегия. Задание 2 Для игры, описанной в задании 19, найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причем одновременно выполняются два условия:
Найденные значения запишите в порядке возрастания. |
Значение S должно быть меньше 64, поскольку иначе Ваня сможет выиграть своим первым ходом. Ответ: 32 63 |
||||||||||||||||||
Задание 21. Выигрышная стратегия. Задание 3 Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:
Если найдено несколько значений S, в ответе запишите минимальное из них. |
Ответ: 62 |
||||||||||||||||||
Задание 22. Многопроцессорные системы В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно. Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно. |
В независимых процессах время считается от 0, Ответ: 17 |
||||||||||||||||||
Задание 23. Анализ программы с циклами и условными операторами Исполнитель преобразует число на экране. |
def f(x, y): print (f(1,10) * f(10, 35)) Ответ: 98 |
||||||||||||||||||
Задание 24. Анализ программы с циклами и условными операторами Файл с данными Текстовый файл состоит из символов A, C, D, F и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная |
f=open(’24.txt’) PP = [‘CA’, ‘CO’, ‘DA’, ‘DO’, ‘FA’, ‘FO’] for i in range(1, len(p), 2): Ответ: 95 |
||||||||||||||||||
Задание 25. Анализ программы с циклами и условными операторами Назовём маской числа последовательность цифр, в которой также могут Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1?2139*4, делящиеся на 2023 без остатка. |
Самый простой способ использовать библиотеку fnmatch. или так полным перебором: y = {»,’0′,’00’,’000′} for x in range (1000): Ответ: 162139404 80148 |
||||||||||||||||||
Задание 26. Анализ программы с циклами и условными операторами В магазине для упаковки подарков есть N кубических коробок. Самой интересной считается упаковка подарка по принципу матрёшки – подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д. |
|||||||||||||||||||
Задание 27. Анализ программы с циклами и условными операторами У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью не более 36 штук. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории. Файл А Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000) – количество пунктов приёма биоматериалов. В каждой из следующих N строк находится два числа: номер пункта и количество пробирок в этом пункте (все числа натуральные, количество пробирок в каждом пункте не превышает 1000). Пункты перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки. Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов. |
Ответ: 51063 5634689219329 |
Урок посвящен тому, как решать 5 задание ЕГЭ по информатике
Содержание:
- Объяснение 5 задания
- Исполнитель для возведения в квадрат, деления, умножения и сложения
- Проверка числовой последовательности на соответствие алгоритму
- Разбор 5 задания
- Решение задания про алгоритм, который строит число R
- Решение заданий для темы Проверка числовой последовательности (Автомат)
5-е задание: «Анализ алгоритмов и исполнители»
Уровень сложности
— базовый,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 4 минуты.
Проверяемые элементы содержания: Формальное исполнение алгоритма, записанного на естественном языке, или умение создавать линейный алгоритм для формального исполнителя с ограниченным набором команд
До ЕГЭ 2021 года — это было задание № 6 ЕГЭ
Типичные ошибки и рекомендации по их предотвращению:
«Как и в других заданиях базового уровня сложности, источником ошибок служит недостаточная внимательность и отсутствие или поверхностность самостоятельной проверки полученного ответа»
ФГБНУ «Федеральный институт педагогических измерений»
Проверка числовой последовательности на соответствие алгоритму
- для выполнения некоторых заданий необходимо повторить тему системы счисления;
- максимальное значение суммы цифр десятичного числа — это 18, так как 9 + 9 = 18;
- для проверки правильности переданного сообщения иногда вводится бит четности — дополнительный бит, которым дополняется двоичный код таким образом, чтобы в результате количество единиц стало четным: т.е. если в исходном сообщении количество единиц было четным, то добавляется 0, если нечетным — добавляется 1:
например: 310 = 112 после добавления бита четности: 110 ---- 410 = 1002 после добавления бита четности: 1001
например: 1112 - это 710 добавим 0 справа: 11102 - это 1410
Теперь будем рассматривать конкретные типовые экзаменационные варианты по информатике с объяснением их решения.
Разбор 5 задания
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
Решение задания про алгоритм, который строит число R
5_11:
На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом:
- Строится двоичная запись числа 4N.
- К этой записи дописываются справа еще два разряда по следующему правилу:
- складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 10000 преобразуется в запись 100001;
- над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись является двоичной записью искомого числа R.
Укажите такое наименьшее число N, для которого результат работы алгоритма больше 129. В ответе это число запишите в десятичной системе счисления.
Типовые задания для тренировки
✍ Решение:
-
✎ Решение аналитическим способом:
- Заметим, что после выполнения второго пункта задания, будут получаться только четные числа! Наименьшим возможным четным числом, превышающим 129, является число 130. С ним и будем работать.
- Переведем 130 в двоичную систему счисления. Используя компьютер это можно сделать с помощью программистского режима калькулятора. Либо в консоли интерпретатора Python набрать
bin(130)
. Получим:
13010 = 100000102
в обратном порядке: было 1000001 -> стало 10000010 еще раз то же самое: было 100000 -> стало 1000001
int('100000',2)
.1000002 = 3210
✎ Решение с использованием программирования:
PascalAbc.Net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
uses school; begin var n_ := 1; while True do begin var n := 4*n_; var ost := bin(n).CountOf('1') mod 2; // остаток при делении на 2 n := 2 * n + ost; //в двоичной с.с. добавляем разряд (*2) и остаток к этому разряру (+ost) ost := bin(n).CountOf('1') mod 2; // остаток при делении на 2 n := 2 * n + ost; if n > 129 then begin println(n_); break end; n_ += 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
n_ = 1 while True: n = 4*n_ r = str(bin(n)) r = r[2:] for i in range(2): if r.count('1') % 2 == 0: r+='0' else: r+='1' n = int(r, base=2) if n > 129: print(n_) break n_+=1 |
Результат: 8
Для более детального разбора предлагаем посмотреть видео теоретического решения данного 5 задания ЕГЭ по информатике:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
5_12: Демоверсия ЕГЭ 2018 информатика:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- Строится двоичная запись числа N.
- К этой записи дописываются справа ещё два разряда по следующему правилу:
- складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
- над этой записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите минимальное число R, которое превышает число 83 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.
✍ Решение:
- Заметим, что после второго пункта условия задачи получаются только четные числа (т.к. если число в двоичной системе заканчивается на 0, то оно четное). Таким образом, нас будут интересовать только четные числа.
- Наименьшим возможным числом, превышающим 83, является число 84. С ним и будем работать.
- Переведем 84 в двоичную систему счисления. На компьютерном ЕГЭ это можно сделать с помощью программистского режима калькулятора. Либо в консоли интерпретатора Python набрать
bin(84)
. Получим:
84 = 1010100
86 = 1010110
Результат: 86
Подробное решение данного 5 (раньше №6) задания из демоверсии ЕГЭ 2018 года смотрите на видео:
Видеорешение с программированием (PascalAnc.Net):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Аналитическое видеорешение:
📹 Видеорешение на RuTube здесь -> аналитическое решение
5_18:
Алгоритм получает на вход натуральное число N > 1
и строит по нему новое число R
следующим образом:
1. Строится двоичная запись числа N
.
2. Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
3. Шаг 2 повторяется ещё два раза.
4. Результат переводится в десятичную систему счисления.
При каком наименьшем исходном числе N > 65
в результате работы алгоритма получится число, кратное 4?
Типовые задания для тренировки
✍ Решение:
-
✎ Решение с использованием программирования:
PascalAbc.Net:
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 |
uses school; begin var n_ := 1; while True do begin var n := n_; for var i := 1 to 3 do begin if bin(n).CountOf('1') = bin(n).CountOf('0') then // сравниваем if n mod 2 = 0 then // если четное, то в конце 0 n := 2 * n // добавляем разряд = 0 else n := 2 * n + 1 // иначе добавляем разряд = 1 else if bin(n).CountOf('1') > bin(n).CountOf('0') then n := 2 * n else n := 2 * n + 1 end; if (n_ > 65) and (n mod 4 = 0) then begin println(n_); break end; n_ += 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
n_ = 1 while True: n = n_ r = str(bin(n)) r = r[2:] for i in range(3): if r.count('1') == r.count('0'): r+=r[-1] elif r.count('1')>r.count('0'): r+='0' else: r+='1' n = int(r, base=2) if n_ > 65 and n % 4 == 0 : print(n_,n) break n_+=1 |
Ответ: 79
5_19:
На вход алгоритма подаётся натуральное число N
. Алгоритм строит по нему новое число R
следующим образом.
1) Число N
переводим в двоичную запись.
2) Инвертируем все биты числа кроме первого.
3) Переводим в десятичную запись.
4) Складываем результат с исходным числом N
.
Полученное число является искомым числом R
.
Укажите наименьшее нечетное число N
, для которого результат работы данного алгоритма больше 99. В ответе это число запишите в десятичной системе счисления.
✍ Решение:
-
✎ Решение с использованием программирования:
PascalAbc.Net:
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
n_ = 1 while True: n = n_ r = str(bin(n)) r = r[2:] for i in range(1,len(r)): if r[i]== '0': r=r[:i]+'1'+r[i+1:] else: r=r[:i]+'0'+r[i+1:] n = int(r, base=2) n+=n_ if n > 99 and n_ % 2 != 0 : print(n_,n) break n_+=1 |
Ответ: 65
5_13:
На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа еще два разряда по следующему правилу:
— если N делится нацело на 4, в конец числа (справа) дописывается сначала ноль, а затем еще один ноль;
— если N при делении на 4 дает в остатке 1, то в конец числа (справа) дописывается сначала ноль, а затем единица;
— если N при делении на 4 дает в остатке 2, то в конец числа (справа) дописывается сначала один, а затем ноль;
— если N при делении на 4 дает в остатке 3, в конец числа (справа) дописывается сначала один, а затем еще одна единица.
Например, двоичная запись 1001 числа 9 будет преобразована в 100101, а двоичная запись 1100 числа 12 будет преобразована в 110000.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа R — результата работы данного алгоритма.
Укажите максимальное число R, которое меньше 100 и может являться результатом работы данного алгоритма. В ответе это число запишите
в десятичной системе счисления
.
Типовые задания для тренировки
✍ Решение:
- Поскольку требуется найти наибольшее число, то возьмем наибольшее из возможных чисел, которые < 100 — это число 99. Переведем его в двоичную систему. На компьютерном ЕГЭ это можно сделать с помощью программистского режима калькулятора. Либо в консоли интерпретатора Python набрать
bin(99)
. Получим:
99 = 11000112
1100011 N
int('11000',2)
11000 = 2410
98 = 11000102 : 10 в конце добавлено алгоритмом N = 110002 = 2410 24 делится нацело на 4. По алгоритму в конце должно быть 00, а мы имеем 10 98 - не подходит 97 = 11000012 : 01 в конце добавлено алгоритмом N = 110002 = 2410 24 делится нацело на 4. По алгоритму в конце должно быть 00, а мы имеем 01 97 - не подходит 96 = 11000002 : 00 в конце добавлено алгоритмом N = 110002 = 2410 24 делится нацело на 4. По алгоритму в конце должно быть 00, у нас 00 - верно! 96 - подходит!
Результат: 96
Предлагаем посмотреть видео теоретического решения:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
5_14:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. К этой записи дописывается (дублируется) последняя цифра.
3. Затем справа дописывается бит чётности: 0, если в двоичном коде полученного числа чётное число единиц, и 1, если нечётное.
4. К полученному результату дописывается ещё один бит чётности.
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите минимальное число R, большее 114, которое может быть получено в результате работы этого алгоритма. В ответе это число запишите в десятичной системе.
Типовые задания для тренировки
✍ Решение:
-
✎ Решение аналитическим способом:
- В постановке задания задано R > 114. R — это результат работы алгоритма. Для того, чтобы определить наименьшее возможно N, переведем сначала 114 в двоичную систему счисления и выделим в нем три добавленные по алгоритму цифры (перевод можно выполнить в консоли Питона:
bin(114)
)
114 = 11100102
2. В полученное числе N = 1110 дублируется последняя цифра и получается 11100.
3. Поскольку число единиц (3) — нечетное, то справа добавляется 1: 111001.
4. Т.к. в полученном наборе цифр четное число единиц, то добавляем 0: 1110010
1. N = 1110 + 1 = 1111 Работа по алгоритму: 2. 11111 - дублирование последней цифры. 3. 111111 - справа дописываем единицу, т.к. в полученном числе 5 единиц (нечетное) 4. 1111110 - дописываем ноль, т.к. в полученном числе четное число единиц.
int('1111110',2)
):min R = 11111102 = 12610
✎ Решение с использованием программирования:
PascalAbc.Net:
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 |
uses school; begin var n_ := 1; while True do begin var n := n_; // дублирвание последней цифры if n mod 2 = 0 then // если четное, то в конце 0 n := 2 * n // добавляем разряд = 0 else n := 2 * n + 1; // иначе добавляем разряд = 1 for var i := 1 to 2 do begin if bin(n).CountOf('1') mod 2 = 0 then n := 2 * n // добавляем разряд = 0 else n := 2 * n + 1 // иначе добавляем разряд = 1 end; if n > 114 then begin println(n); break end; n_ += 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
n_ = 1 while True: n = n_ r = str(bin(n)) # строковое значение r = r[2:] # убираем 0b r=r+r[-1] for i in range (2): if r.count('1') % 2 == 0: r = r+'0' else: r = r+'1' r = int(r,base = 2) # в 10-ю с.с. if r > 114: print(r) break n_+= 1 |
Результат: 126
5_17: Досрочный вариант 1 ЕГЭ по информатике 2020, ФИПИ:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.
1) Строится двоичная запись числа N.
2) К этой записи дописываются справа ещё два разряда по следующему правилу:
— если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы.
Например, двоичная запись 1001 числа 9 будет преобразована в 100111.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма.
Укажите минимальное число N, для которого результат работы алгоритма будет больше 134. В ответе это число запишите в десятичной системе счисления.
Ответ: 33
Видео -> теоретическое решение
📹 Видеорешение на RuTube здесь -> теоретическое решение
5_16:
Автомат обрабатывает целое число N (0 ≤ N ≤ 255) по следующему алгоритму:
1. Строится восьмибитная двоичная запись числа N.
2. Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0).
3. Полученное число переводится в десятичную запись.
4. Из нового числа вычитается исходное, полученная разность выводится на экран.
Какое число нужно ввести в автомат, чтобы в результате получилось 45?
✍ Решение:
- Результатом выполнения алгоритма является число 45. Алгоритм работает в двоичной системе счисления, поэтому переведем число:
45 = 001011012
1 - 0
, с учетом, что у разряда с единицей заняли. То есть бит:. _ 1 _ _ _ _ _ _ _ N инвертируемое = 0 _ _ _ _ _ _ _ N исходное 0 0 1 0 1 1 0 1 = 45 результат
1 - 0
не может в результате дать 0, так как у следующей слева единицы мы заняли. Значит, 0 - 1
. Чтобы не получить единицу в ответе, необходимо у нуля тоже занять:. . _ 1 0 _ _ _ _ _ _ = 0 1 _ _ _ _ _ _ 0 0 1 0 1 1 0 1 = 45 результат
1 - 0
не может быть, так как у следующего слева нуля мы заняли.Значит
0 - 1
. То есть как раз чтобы получить единицу (10 - 1 = 1
), занимаем у следующих слева разрядов:. . _ 1 0 0 _ _ _ _ _ = 0 1 1 _ _ _ _ _ 0 0 1 0 1 1 0 1 = 45 результат
0 - 1
не может быть. Значит, чтобы получить в результате ноль, берем 1 - 0
, у единицы должно быть занято.. . . _ 1 0 0 1 _ _ _ _ = 0 1 1 0 _ _ _ _ 0 0 1 0 1 1 0 1 = 45 результат
1 - 0
не может быть. Так как слева у единицы занято. Значит, чтобы получить в результате 1, берем 0 - 1
:. . . _ 1 0 0 1 0 _ _ _ = 0 1 1 0 1 _ _ _ 0 0 1 0 1 1 0 1 = 45 результат
0 - 1
не даст в ответе единицу, значит, имеем 1 - 0
:. . . _ 1 0 0 1 0 1 _ _ = 0 1 1 0 1 0 _ _ 0 0 1 0 1 1 0 1 = 45 результат
0 - 1
не может быть, значит, 1 - 0
. Чтобы получить в результате 0, необходимо, чтобы у 1 было занято:. . . . _ 1 0 0 1 0 1 1 _ = 0 1 1 0 1 0 0 _ 0 0 1 0 1 1 0 1 = 45 результат
0 - 1
:. . . . _ 1 0 0 1 0 1 1 0 = 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 1 = 45 результат
01101001 = 10510
Ответ: 105
Смотрите теоретический разбор задания на видео и подписывайтесь на наш канал:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь -> теоретическое решение
Решение заданий для темы Проверка числовой последовательности (Автомат)
5_7:
Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам.
- Складываются первая и вторая, а также третья и четвёртая цифры исходного числа.
- Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 3165. Суммы: 3 + 1 = 4; 6 + 5 = 11. Результат: 114.
Укажите наименьшее число, в результате обработки которого, автомат выдаст число 1311.
✍ Решение:
Результат: 2949
Процесс теоретического решения данного 5 задания представлен в видеоуроке:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь -> теоретическое решение
5_8:
Автомат получает на вход четырехзначное число. По нему строится новое число по следующим правилам:
- Складываются первая и вторая, затем вторая и третья, а далее третья и четвёртая цифры исходного числа.
- Полученные три числа записываются друг за другом в порядке возрастания (без разделителей).
Пример: Исходное число: 7531. Суммы: 7+5=12; 5+3=8; 3+1=4. Результат: 4812.
✍ Решение:
2
, 5
, 12
9
:12=9+3
93**
9320
.Результат: 9320
Подробное теоретическое решение данного 5 задания можно просмотреть на видео:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь -> теоретическое решение
5_9:
Автомат получает на вход два двузначных шестнадцатеричных числа. В этих числах все цифры не превосходят цифру 6 (если в числе есть цифра больше 6, автомат отказывается работать). По этим числам строится новое шестнадцатеричное число по следующим правилам:
- Вычисляются два шестнадцатеричных числа — сумма старших разрядов полученных чисел и сумма младших разрядов этих чисел.
- Полученные два шестнадцатеричных числа записываются друг за другом в порядке убывания (без разделителей).
Пример: Исходные числа: 25, 66. Поразрядные суммы: 8, B. Результат: B8.
Какие из предложенных чисел могут быть результатом работы автомата?
Перечислите в алфавитном порядке буквы, соответствующие этим числам, без пробелов и знаков препинания.
Варианты:
A) 127
B) C6
C) BA
D) E3
E) D1
✍ Решение:
Проанализируем все варианты:
12
в шестнадцатеричной системе записывается как С
.С6
разбиваем на 12
и 6
. Число может быть результатом работы автомата. Исходные числа, например, 35
и 37
BA
разбиваем на 11
и 10
. Число может быть результатом работы автомата. Исходные числа, например, 55
и 56
E3
разбиваем на 14
и 3
. 14=6+8
, но цифры большие 6 не принимает автомат. Не подходит.D1
разбиваем на 13
и 1
. 13=6+7
, но цифры большие 6 не принимает автомат. Не подходит.Результат: BC
Подробное теоретическое решение данного 5 задания можно просмотреть на видео:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь -> теоретическое решение
5_10: Задание 5 ГВЭ 11 класс 2018 год ФИПИ
Автомат получает на вход два двузначных шестнадцатеричных числа. В этих числах все цифры не превосходят цифру 7 (если в числе есть цифра больше 7, автомат отказывается работать). По этим числам строится новое шестнадцатеричное число по следующим правилам.
1. Вычисляются два шестнадцатеричных числа: сумма старших разрядов полученных чисел и сумма младших разрядов этих чисел.
2. Полученные два шестнадцатеричных числа записываются друг за другом в порядке возрастания (без разделителей).
Пример. Исходные числа: 66, 43. Поразрядные суммы: A, 9. Результат: 9A.
Определите, какое из предложенных чисел может быть результатом работы автомата.
Варианты:
1) AD
2) 64
3) CF
4) 811
✍ Решение:
Теоретическое решение 4 задания ГВЭ 11 класса смотрите на видео:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь -> теоретическое решение
5_15:
Автомат получает на вход натуральное число X. По этому числу строится трёхзначное число Y по следующим правилам:
1. Первая цифра числа Y (разряд сотен) – остаток от деления X на 7.
2. Вторая цифра числа Y (разряд десятков) – остаток от деления X на 2.
3. Третья цифра числа Y (разряд единиц) – остаток от деления X на 5.
Пример. Исходное число: 55. Остаток от деления на 7 равен 6; остаток от деления на 2 равен 1; остаток от деления на 5 равен 0. Результат работы автомата: 610.
Сколько существует двузначных чисел, при обработке которого автомат выдаёт результат 312?
Типовые задания для тренировки
✍ Решение:
- Обозначим каждую цифру числа Y согласно заданию:
Y = 3 1 2 x mod 7 x mod 2 x mod 5
1. x mod 2 = 1 => значит, X — нечетное число
2. x mod 5 = 2 => значит, X — либо ?2, либо ?7.
3. раз x — нечетное, то из пред. пункта получаем x = ?7
4. x mod 7 = 3 => переберем все варианты:
97 - не подходит, 87 - подходит (87 / 7 = 12, остаток = 3) 77 - не подходит, 67 - не подходит, 57 - не подходит, 47 - не подходит, 37 - не подходит, 27 - не подходит, 17 - подходит (17 / 7 = 2, остаток = 3)
Результат: 2
Всего: 1000 1–20 | 21–40 | 41–60 | 61–80 | 81–100 | 101–120 | 121–140 …
Добавить в вариант
Ниже на пяти языках программирования записан алгоритм, который вводит натуральное число x, выполняет преобразования, а затем выводит одно число. Укажите наименьшее возможное значение x, при вводе которого алгоритм выведет число 12.
Бейсик | Python |
---|---|
DIM X, A, B, D AS INTEGER INPUT X A = 0: B = 10 WHILE X > 0 D = X MOD 6 IF D > A THEN A = D IF D < B THEN B = D X = X 6 WEND PRINT A*B |
x = int(input()) a=0; b=10 while x > 0: d = x % 6 if d > a: a = d if d < b: b = d x = x // 6 print(a*b) |
Паскаль | Алгоритмический язык |
var x, a, b, d: longint; begin readln(x); a := 0; b := 10; while x > 0 do begin d := x mod 6; if d > a then a := d; if d < b then b := d; x := x div 6 end; writeln(a*b); end. |
алг нач цел x, a, b, d ввод x a := 0; b := 10 нц пока x > 0 d := mod(x,6) если d > a то a := d все если d < b то b := d все x := div(x,6) кц вывод a*b кон |
С++ | |
#include <iostream> using namespace std; int main() { int x, a, b, d; cin >> x; a = 0; b = 10; while (x > 0) { d = x % 6; if (d > a) a = d; if (d < b) b = d; x = x / 6; } cout << a*b << endl; return 0; } |
Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа N.
2. Запись «переворачивается», то есть читается справа налево. Если при этом появляются ведущие нули, они отбрасываются.
3. Полученное число переводится в десятичную запись и выводится на экран.
Пример. Дано число N = 58. Алгоритм работает следующим образом.
1. Двоичная запись числа N: 111010.
2. Запись справа налево: 10111 (ведущий ноль отброшен).
3. На экран выводится десятичное значение полученного числа 23.
Какое наибольшее число, не превышающее 100, после обработки автоматом даёт результат 11?
Ниже на пяти языках программирования записан алгоритм, который вводит натуральное число x, выполняет преобразования, а затем выводит одно число. Укажите наименьшее возможное значение x, при вводе которого алгоритм выведет число 13.
Бейсик | Python |
---|---|
DIM X, A, B, D AS INTEGER INPUT X A = 0: B = 10 WHILE X > 0 D = X MOD 9 IF D > A THEN A = D IF D < B THEN B = D X = X 9 WEND PRINT A+B |
x = int(input()) a=0; b=10 while x > 0: d = x % 9 if d > a: a = d if d < b: b = d x = x // 9 print(a+b) |
Паскаль | Алгоритмический язык |
var x, a, b, d: longint; begin readln(x); a := 0; b := 10; while x > 0 do begin d := x mod 9; if d > a then a := d; if d < b then b := d; x := x div 9 end; writeln(a+b); end. |
алг нач цел x, a, b, d ввод x a := 0; b := 10 нц пока x > 0 d := mod(x,9) если d > a то a := d все если d < b то b := d все x := div(x,9) кц вывод a+b кон |
С++ | |
#include <iostream> using namespace std; int main() { int x, a, b, d; cin >> x; a = 0; b = 10; while (x > 0) { d = x % 9; if (d > a) a = d; if (d < b) b = d; x = x / 9; } cout << a+b << endl; return 0; } |
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Файл A
Файл B
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 32.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Источник: Демонстрационная версия ЕГЭ−2021 по информатике
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — минимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Файл A
Файл B
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 20.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 5 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Файл A
Файл B
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 33.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из пар натуральных чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 3 и при этом была максимально возможной.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество пар в наборе. Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 10
6 9
5 4
3 3
1 1
Для указанных данных искомая сумма равна 30.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из пар натуральных чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 3 и при этом была минимально возможной.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество пар в наборе. Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных данных искомая сумма равна 21.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из троек натуральных чисел. Необходимо распределить все числа на три группы, при этом в каждую группу должно попасть ровно одно число из каждой исходной тройки. Сумма всех чисел в первой группе должна быть чётной, во второй — нечётной. Определите максимально возможную сумму всех чисел в третьей группе.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество троек в наборе. Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.
Пример входного файла:
3
1 2 3
5 12 4
6 9 7
Для указанных данных искомая сумма равна 24, она соответствует такому распределению чисел по группам: (1, 5, 6), (2, 4, 7), (3, 12, 9).
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из троек натуральных чисел. Необходимо распределить все числа на три группы, при этом в каждую группу должно попасть ровно одно число из каждой исходной тройки. Сумма всех чисел в первой группе должна быть чётной, во второй — нечётной. Определите минимально возможную сумму всех чисел в третьей группе.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество троек в наборе. Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.
Пример входного файла:
3
1 2 3
8 12 4
6 9 7
Для указанных данных искомая сумма равна 11, она соответствует такому распределению чисел по группам: (2, 8, 7), (3, 12, 9), (1, 4, 6).
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из нечётного количества пар натуральных чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы чётность суммы выбранных чисел совпадала с чётностью большинства выбранных чисел и при этом сумма выбранных чисел была как можно больше. Определите максимальную сумму, которую можно получить при таком выборе. Гарантируется, что удовлетворяющий условиям выбор возможен.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество пар в наборе. Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример входного файла:
5
15 8
5 11
6 3
7 2
9 14
Для указанных данных надо выбрать числа 15, 11, 6, 7 и 14. Большинство из них нечётны, сумма выбранных чисел равна 53 и тоже нечётна. В ответе надо записать число 53.
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Набор данных состоит из нечётного количества пар натуральных чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы чётность суммы выбранных чисел совпадала с чётностью большинства выбранных чисел и при этом сумма выбранных чисел была как можно меньше. Определите минимальную сумму, которую можно получить при таком выборе. Гарантируется, что удовлетворяющий условиям выбор возможен.
Входные данные.
Файл A
Файл B
Первая строка входного файла содержит число N — общее количество пар в наборе. Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример входного файла:
5
15 8
5 11
6 3
7 2
9 14
Для указанных данных надо выбрать числа 8, 5, 3, 2 и 9. Большинство из них нечётны, сумма выбранных чисел равна 27 и тоже нечётна. В ответе надо записать число 27.
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Автомат обрабатывает натуральное число N по следующему алгоритму.
1. Строится двоичная запись числа N.
2. Если N четное, то в конец полученной записи (справа) дописывается 0, в начало — 1; если N — нечётное в конец и начало дописывается по две единицы.
3. Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Число нечетное, следовательно, по две единицы по краям — 11110111.
3. На экран выводится число 247.
Укажите наименьшее число, большее 52, которое может является результатом работы автомата.
Источник: ЕГЭ по информатике 24.06.2021. Основная волна. Вариант Евгения Джобса
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 43. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные
Файл A
Файл B
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 10 000 000). Каждая из следующих N строк содержит одно натуральное число, не превышающее 10 000.
Пример организации исходных данных во входном файле:
7
1
3
4
93
8
5
95
В ответе укажите два числа: сначала значение искомой длины для файла А, затем — для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Источник: Демонстрационная версия ЕГЭ−2022 по информатике
Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом:
1. Вычисляется сумма чётных цифр в десятичной записи числа N. Если чётных цифр в записи нет, сумма считается равной нулю.
2. Вычисляется сумма цифр, стоящих на чётных местах в десятичной записи числа N без ведущих нулей. Места отсчитываются слева направо (от старших разрядов к младшим, начиная с единицы). Если число однозначное (цифр на чётных местах нет), сумма считается равной нулю.
3. Результатом работы алгоритма становится модуль разности полученных двух сумм.
Пример. Дано число N = 2021. Алгоритм работает следующим образом:
1. Чётные цифры в записи: 2, 0, 2, их сумма равна 4.
2. Цифры на чётных местах: 0, 1, их сумма равна 1.
3. Модуль разности полученных сумм равен 3.
Результат работы алгоритма R = 3.
При каком наименьшем N в результате работы алгоритма получится R = 13?
Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом:
1. Вычисляется сумма чётных цифр в десятичной записи числа N. Если чётных цифр в записи нет, сумма считается равной нулю.
2. Вычисляется сумма цифр, стоящих на чётных местах в десятичной записи числа N без ведущих нулей. Места отсчитываются слева направо (от старших разрядов к младшим, начиная с единицы). Если число однозначное (цифр на чётных местах нет), сумма считается равной нулю.
3. Результатом работы алгоритма становится модуль разности полученных двух сумм.
Пример. Дано число N = 2021. Алгоритм работает следующим образом:
1. Чётные цифры в записи: 2, 0, 2, их сумма равна 4.
2. Цифры на чётных местах: 0, 1, их сумма равна 1.
3. Модуль разности полученных сумм равен 3.
Результат работы алгоритма R = 3.
При каком наименьшем N в результате работы алгоритма получится R = 11?
Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 11011.
3. Сумма цифр полученной записи 4, остаток от деления на 2 равен 0, новая запись 110110.
4. Результат работы алгоритма R = 54.
При каком наименьшем числе N в результате работы алгоритма получится R > 170? В ответе запишите это число в десятичной системе счисления.
Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 11011.
3. Сумма цифр полученной записи 4, остаток от деления на 2 равен 0, новая запись 110110.
4. Результат работы алгоритма R = 54.
При каком наименьшем числе N в результате работы алгоритма получится R > 154? В ответе запишите это число в десятичной системе счисления.
Ниже на 5-ти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм напечатает сначала 2, а потом 14.
Бэйсик | Паскаль |
---|---|
DIM X, A, B AS INTEGER INPUT X A = 0: B = 1 WHILE X > 0 A = A + 1 B = B * (X MOD 10) X = X 10 WEND PRINT A PRINT B |
var x, a, b : integer; begin readln(x); a := 0; b := 1; while x > 0 do begin a := a + 1; b := b * (x mod 10); x := x div 10; end; writeln(a); write(b); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { int x, a, b; cin >> x; a = 0; b = 1; while (x > 0){ a = a + 1; b = b *(x%10); x= x / 10; } cout << a << endl << b endl; } |
алг нач цел x, a, b ввод x a := 0; b := 1 нц пока x > 0 a := a+1 b := b * mod(x,10) x := div(x,10) кц вывод a, нс, b кон |
Python | |
x = int(input()) a = 0 b = 1 while x > 0: a += 1 b *= x % 10 x = x // 10 print(a) print(b) |
Ниже на 5-ти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 72.
Бэйсик | Паскаль |
---|---|
DIM X, A, B AS INTEGER INPUT X A=0: B=1 WHILE X > 0 A = A+1 B = B*(X MOD 10) X = X 10 WEND PRINT A PRINT B |
var x, a, b: integer; begin readln(x); a:=0; b:=1; while x>0 do begin a:=a+1; b:=b*(x mod 10); x:= x div 10; end; writeln(a); write(b); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { int x, a, b; cin >> x; a=0; b=1; while (x>0){ a=a+1; b=b*(x%10); x= x/10; } cout << a << endl << b endl; } |
алг нач цел x, a, b ввод x a:=0; b:=1 нц пока x>0 a:=a+1 b:=b*mod(x,10) x:=div(x,10) кц вывод a, нс, b кон |
Python | |
x = int(input()) a = 0 b = 1 while x > 0: a += 1 b *= x % 10 x = x // 10 print(a) print(b) |
Всего: 1000 1–20 | 21–40 | 41–60 | 61–80 | 81–100 | 101–120 | 121–140 …
Тесты
/
Информатика
/
11 класс
/ Проверочная работа по теме «Определение результатов работы простейших алгоритмов» (ЕГЭ-6) 1 вариант
10.10.2022.
Тест. Информатика, 11 класс
Внимание! Все тесты в этом разделе разработаны пользователями сайта для собственного
использования.
Администрация сайта не
проверяет возможные ошибки,
которые могут встретиться в тестах.
Данная работа оценивает знания учащихся по теме «Определение результатов работы простейших алгоритмов»
Список вопросов теста
Вопрос 1
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 100 [Вперёд 10 Направо 30]
Определите, из какого количества отрезков будет состоять фигура, заданная данным алгоритмом.
Вопрос 2
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 100 [Вперёд 10 Направо 80]
Определите, из какого количества отрезков будет состоять фигура, заданная данным алгоритмом.
Вопрос 3
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 5 [Вперёд 8 Направо 120 Повтори 2 [Вперёд 4 Направо 60] Вперёд 4 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Вопрос 4
Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b – целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a; y + b). Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, −3) переместит Чертёжника в точку (6, −. Цикл
ПОВТОРИ число РАЗ
последовательность команд
КОНЕЦ ПОВТОРИ
означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным). Чертёжнику был дан для исполнения следующий алгоритм:
ПОВТОРИ 7 РАЗ
сместиться на (6, -9)
сместиться на (-6, 2)
сместиться на (12, 3)
КОНЕЦ ПОВТОРИ
Определите, сколько различных точек с целочисленными координатами принадлежат траектории Чертёжника, считая начальную и конечную точки, если исполнитель стартует в точке с целочисленными координатами.
Вопрос 5
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Направо 45
Повтори 9 [Вперёд 9 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
Вопрос 6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Направо 90 Повтори 10 [Вперёд 8 Налево 72]
Определите, наибольшее целочисленное значение ординаты среди точек с целочисленными координатами, которые будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Автор материалов — Лада Борисовна Есакова.
Алгоритм – это точно сформулированное исполнителю предписание совершить определенную последовательность действий для решения задачи за конечное число шагов.
Алгоритм может быть задан одним из следующих способов:
— Словесное описание последовательности действий на естественном языке;
— Графическое изображение в виде блок-схемы;
— Запись при помощи псевдокода (алгоритмического языка);
— Запись на языке программирования.
В этом типе задач рассматривается, в основном, словесное описание алгоритмов на естественном языке, а потому никаких специальных знаний для решения задачи не требуется.
Проверка буквенной последовательности на соответствие алгоритму
Пример 1.
Из букв А, И, 3, У, Т, М, К, С формируется слово. Известно, что слово сформировано по следующим правилам:
а) в слове нет подряд идущих двух гласных или двух согласных;
б) первая буква слова в русском алфавите стоит до буквы «К».
Какое из следующих слов удовлетворяет всем перечисленным условиям?
1) АЗИМУТ
2) ТУЗИК
3) МУЗА
4) АИСТ
Решение:
Поочередно проанализируем каждое слово:
1) а) выполняется б) выполняется (буква «А» в русском алфавите стоит до буквы «К»)
2) а) выполняется б) не выполняется (буква «Т» в русском алфавите стоит после буквы «К»)
3) а) выполняется б) не выполняется (буква «М» в русском алфавите стоит после буквы «К»)
4) а) не выполняется (две подряд идущие гласные).
Ответ: 1
Поиск числа, соответствующего алгоритму
Пример 2.
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите такое наименьшее число N, для которого результат работы алгоритма больше 125. В ответе это число запишите в десятичной системе счисления.
Решение:
Алгоритм приписывает в конце числа 10, если в двоичной записи числа было нечетное количество единиц, или 00 если четное. Наименьшее число N найдем, если возьмем наименьший результат, больший 125. Это число 126.
12610 = 11111102 может получиться в результате работы алгоритма из числа 111112.
111112 = 3110.
Ответ: 31
Пример 3.
Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам.
1. Складываются первая и вторая, а также вторая и третья цифры исходного числа.
2. Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 348. Суммы: 3 + 4 = 7; 4 + 8 = 12. Результат: 127. Укажите наименьшее число, в результате обработки которого автомат выдаст число 1412.
Решение:
Наименьшим число будет тогда, когда на первом месте стоит наименьшая возможная цифра. Поскольку сумма первой и второй цифр равна 14 или 12, то наименьшая первая цифра – это 3 (в сумме с 9 даст 12), тогда вторая цифра – это 9. А третья цифра в сумме со второй дает 14, т.е. равна 14-9 = 5.
Получилось число 395.
Ответ: 395
Пример 4.
Автомат получает на вход четырёхзначное десятичное число. По этому числу строится новое число по следующим правилам.
1. Складываются первая и вторая, а также третья и четвёртая цифры.
2. Полученные два числа записываются друг за другом в порядке возрастания (без разделителей).
Пример. Исходное число: 8754. Суммы: 8+7 = 15; 5+4 = 9. Результат: 915. Определите, сколько из приведённых ниже чисел могут быть получены, как результат работы автомата.
1419 1518 406 911
1) 1 2) 2 3) 3 4)4
Решение:
Проанализируем поочередно все числа на соответствие алгоритму:
1419 – не соответствует, т.к. сумма двух цифр не может дать число 19;
1518 – соответствует, например, на вход могло подаваться число 9699;
406 – не соответствует, т.к. 40 < 6 (не соблюдается порядок возрастания);
911 – соответствует, например, на вход могло подаваться число 3656;
Итого, может быть получено два числа из списка.
Ответ: 2
Спасибо за то, что пользуйтесь нашими публикациями.
Информация на странице «Задача №6. Анализ алгоритма.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
Чтобы успешно сдать нужные и поступить в высшее учебное заведение или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими материалами из данного раздела.
Публикация обновлена:
09.03.2023
Характеристика задания
1. Тип ответа: числовой.
2. Структура содержания задания: дана текстовая задача, нужно выполнить приведённый алгоритм.
3. Уровень сложности: базовый.
4. Примерное время выполнения: (4) минуты.
5. Количество баллов: (1).
6. Требуется специальное программное обеспечение: да.
7. Задание проверяет умение определять возможные результаты работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов.
Пример задания из демоверсии (2023)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова расположена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды: Вперёд (n) (где (n) — целое число), вызывающая передвижение Черепахи на (n) единиц в том направлении, куда указывает её голова, и Направо (m) (где (m) — целое число), вызывающая изменение направления движения на (m) градусов по часовой стрелке.
Запись Повтори (k) [Команда(1) Команда(2)… Команда(S)] означает, что последовательность из (S) команд повторится (k) раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори (7) [Вперёд (10) Направо (120)].
Определи, сколько точек с целочисленными координатами будет находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Для решения задания используется КуМир, исполнитель Черепаха.
Разберём каждый шаг алгоритма.
Команда |
Что выполняет |
использовать Черепаха | Активирует исполнителя Черепаха |
алг нач |
Начало алгоритма |
опустить хвост | Черепаха опускает хвост так, как указано в задании |
нц (7) раз | Организуем цикл, который повторится (7) раз |
вперёд((10)) | Черепаха двигается на (10) единиц |
вправо((120)) | Черепаха поворачивается на (120) градусов по часовой стрелке |
кц | Конец цикла |
кон | Конец алгоритма |
Полностью алгоритм выглядит так:
Рис. (1). Алгоритм в КуМир
Результат работы алгоритма
Рис. (2). Результат
Посчитав внимательно точки внутри контура, не учитывая те, что находятся на линиях, получаем ответ: 38.
Источники:
Рис. 1. Алгоритм в КуМир. © ЯКласс.
Рис. 2. Результат. © ЯКласс.