Условие задачи:
Исполнитель Черепаха действует на плоскости с
декартовой системой координат. В начальный момент Черепаха находится в начале
координат, её голова направлена вдоль положительного направления оси ординат,
хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде
линии. В каждый конкретный момент известно положение исполнителя и направление
его движения. У исполнителя существует две команды: Вперёд n (где
n – целое число), вызывающая передвижение Черепахи на n единиц в том
направлении, куда указывает её голова, и Направо m (где m –
целое число), вызывающая изменение направления движения на m градусов по
часовой стрелке.
Запись Повтори k [Команда1 Команда2 …
КомандаS] означает, что последовательность из S команд
повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори
7 [Вперёд 10 Направо 120].
Определите, сколько точек с целочисленными
координатами будут находиться внутри области, ограниченной линией, заданной
данным алгоритмом. Точки на линии учитывать не следует.
Решение: С
этого сайта https://www.niisi.ru/kumir/dl.htm скачиваем
программу Загрузить версию 2.1.0
(rc11)
Запускаем
Кумир-Стандарт Пишем алгоритм:
использовать Черепаха
алг нач
. опустить хвост
. нц
7 раз
. .
вперед (10)
. .
вправо (120)
. кц
кон
Появляется
вот такой значок:
Нажимаем
на черепашку и появляется клетчатое поле:
Далее
нажимаем выполнение. И черепашка нарисует треугольник.
Обязательно
нужно настроить поле. Для этого нажимаем значок Появится окно:
Убираем
галочку с авто и значение ставим 1.0000 (как на рисунке выше) и нажимаем кнопку
«Весь чертеж».
После
этого подсчитываем количество точек внутри треугольника.
Привет! Сегодня разберём новый тип 6 задания из ЕГЭ по информатике 2023! Добавим недостающий пазл в видеокурс по подготовке к ЕГЭ по информатике.
Так же Вы можете посмотреть разбор 6 задания из ДЕМОВЕРСИИ 2023.
На мой взгляд, на экзамене скорее всего будет задача, похожая именно на демонстрационный вариант. Т.к. это задание нового образца, то выпускникам необходимо привыкнуть к нему.
Вспомним, когда в прошлом году была введена новая формулировка для 3 задания, то на экзамене дали очень похожую задачу на ту, которая была в демоверсии.
Рассмотрим первую тренировочную задачу из 6 задания ЕГЭ по информатике 2023.
Задача (Элегантный способ)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 15 [Вперёд 15 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Решение:
В начале нужно понять, какая фигура получится в результате действий Исполнителя Черепахи.
Черепаха идёт вверх на 15 единиц. Потом поворачивает направо на 120 градусов. Потом идёт на 15 единиц по заданному курсу и снова поворачивает на 120 градусов, идёт на 15 единиц ещё и попадает в исходную точку. В итоге получается равносторонний треугольник! Дальнейшие повторения не имеют смысла, т.к. нового больше ничего не нарисуется.
Проведём перпендикуляры от каждой точки с целыми координатами на оси Y внутри треугольника.
Для каждой точки на оси Y мы можем найти этот перпендикуляр. Это и есть искомое количество точек на каждой такой линии, если округлить это значение в меньшую сторону.
Посмотрим, как найти такой перпендикуляр, если точка на оси Y находится до середины стороны. Пусть есть точка (0, yn), а dn — это перпендикуляр для этой точки. Тогда
tg(60o) = dn / yn
dn = tg(60o) * yn
Для второй половины длины перпендикуляров будут такие же.
Напишем программу на Питоне, которая подсчитает все точки.
import math s=0 for y in range(0, 8): s = s + int(math.tan(math.pi / 3) * y ) s = 2*s print(s)
Нам необходимо взять первые 7 точек, дальше ситуация симметричная. Пишем в цикле for 8, потому что последнее число не проходится в Питоне.
Вычисляем по формуле длину каждого перпендикуляра. Тангенс вычисляется с помощью функции math.tan. Для неё нужна математическая библиотека math. Функция должна получить градусы в радианах, поэтому ей передаём π/3 = 60o.
В цикле суммируем все точки для каждой линии. Результат нужно умножить на 2, чтобы учесть вторую половину треугольника.
Ответ: 90
Задача(Считаем точки вручную)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 16 [Налево 36 Вперёд 4 Налево 36]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
Решение:
В это задачке достаточно не просто составить уравнения прямых полученной фигуры. В таких случаях можно попробовать вручную посчитать точки с помощью известной программы Кумир от НИИСИ РАН. Скачать её можно с официального сайта НИИСИ РАН.
Вероятно, это программа окажется на компьютере на экзамене.
Запустим программу Кумир-Стандарт. В начале нужно подключить модуль Черепаха.
После того, как модуль Черепаха подключён, можно написать программу на языке Кумир.
использовать Черепаха алг нач опустить хвост нц 16 раз влево(36) вперед(4) влево(36) кц кон
В начале нужно подключить модуль Черепаха. Слово алг обозначает начало алгоритма. Слово нач — это начало программы.
Опускаем хвост у Черепахи. Цикл пишем с помощью команды нц — начало цикла. Команда кц — это конец цикла. Команда влево — это аналог команды Налево (видим, что эти команды пишутся по-разному). Аналогично есть команда вправо в программе Кумир. Команда вперед пишется без буквы ё.
После того, как алгоритм перенесли в программу Кумир, запускаем программу, нажав на кнопку F9 (или кнопка плей в виде треугольника).
После этого появится окно в правом нижнем углу. Это окно можно расширить до приемлемых размеров, чтобы нам было удобно анализировать рисунок.
Необходимо настроить масштабирование на 1.
После этого можно сделать скриншот и перенести рисунок в программу Paint, где и посчитать точки вручную.
Получается в ответе 31 точка. Обратите внимание, что в этой задачи просили подсчитать точки, которые находятся на линиях в том числе.
Даже если нет программы Кумир, можно подсчитать точки вручную через Python. Напишем программу.
from turtle import * left(90) for i in range(16): left(36) forward(4*40) left(36) penup() for x in range(-10, 10): for y in range(-10, 10): setpos(x*40, y*40) dot(4, 'red')
Программа выведет такую картину.
В программе подключаем модуль turtle. В начале повернём Черепаху на 90 градусов налево, с помощью команды left. Это делается из-за того, в Python Черепаха смотрит вдоль положительного направления оси абсцисс.
Далее идёт цикл, который указан в задаче. Он должен повторится 16 раз. Внутри цикла пишем программу для Черепахи. Команда left() — поворот налево (аналогично right() — поворот направо), команда forward() — это движение верёд.
4 единицы внутри команды forward() умножаются на 40. Число 40 — это коэффициент размера нашего рисунка. Попробуйте «поиграть» с этим числом, чтобы посмотреть эффект уменьшения или увеличения рисунка.
Команда penup() позволяет поднять кисть, чтобы проставить точки, которые будут символизировать точки с целыми координатами.
Далее идут вложенные циклы, с помощью них мы проставим точки с целыми координатами. Выбираем диапазон, чтобы наша фигура точно уместилась.
Команда setpos() ставим точки. Умножаем координаты x и y на тот же коэффициент, что использовали ранее.
Команда dot() устанавливает жирность и цвет точки.
Ответ: 31
Задача (Составляем уравнения)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост поднят. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке; Опусти, принуждающая Черепаху опустить хвост.
Запись Повтори k [Команда 1 Команда 2 … Команда S] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Вперёд 100 Направо 90 Вперёд 100 Направо 30 Опусти Повтори 10 [Вперёд 25 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Решение:
Нарисуем общий рисунок.
Здесь уже не очень удобно пользоваться элегантным способом. Составим уравнения прямых, которые образуют квадрат. Общий вид уравнения прямой выглядит так:
y=k*x+b
Коэффициент k — это тангенс угла наклона α к оси X ( 0 ≤ α < π, но α ≠ π/2). Число b — это смещение прямой по оси Y относительно нуля.
Для прямой AE k1=tan(60o)=√3. Так же она проходит через точку (100, 100).
Найдём число b. Подставим в общее уравнение координаты точки (100, 100):
y = k*x+b = √3*100 + b = 100
b=100*(1 — √3)
Получается уравнение прямой AE:
y= √3*x + 100(1 — √3)
Найдём на сколько смещена FC по оси Y относительно AE.
cos(60o) = 25 (сторона квадрата) / AB
AB = 25 / cos(60o) = 25 / 0,5 = 50
Получается, что уравнение для прямой FC:
y=√3*x + 100(1 — √3) — 50
Для прямой EC k2=-tan(30o) = — √3/3. Эта прямая тоже проходит через точку (100, 100). Подставим эти координаты в уравнение и найдём b.
y = (-√3/3) * x + b = (-√3/3) * 100 + b = 100
b = 100(1 + √3/3)
Тогда уравнение для прямой EC получается:
y = (-√3/3) * x + 100(1 + √3/3)
Найдём на сколько смещена прямая AF относительно EC по оси Y.
cos(30o) = 25 (длина стороны) / CD
CD = 25 / cos(30o) = 25 / (√3/2) = 50/√3
Тогда для прямой AF:
y = (- √3/3) * x + 100(1 + √3/3) — 50/√3
Пробежимся с помощью Питона для переменной x от 0 до 150. Для переменной y от 0 до 100. Чтобы получить точку, используем вложенные циклы!
s=0 for x in range(1, 200): for y in range(1, 200): if (y < (3**0.5)*x + 100*(1-3**0.5)) and (y > (3**0.5)*x + 100*(1-3**0.5) - 50) and (y < (- 3**0.5 / 3)*x + 100*(1+ 3**0.5 / 3)) and (y > (-3**0.5/3)*x + 100*(1 + 3**0.5 /3) - 50 / 3**0.5 ): s=s+1 print(s)
Точки, которые лежат в квадрате должны удовлетворять следующим условиям:
Точки должны быть ниже прямых AE и EC, но выше AF и FC
Проверить выше или ниже некоторая точка M(xm, ym), чем прямая y=k*x+b, можно следующим образом:
Если ym > k*xm + b, то точка лежит выше прямой.
Если ym < k*xm + b, то точка лежит ниже прямой.
Данный принцип и был использован в программе.
Ответ: 625
Задача (Закрепление)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке; Опусти, принуждающая Черепаху опустить хвост.
Запись Повтори k [Команда 1 Команда 2 … Команда S] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 21 [Вперёд 31 Направо 60]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Копирование прямо
Решение:
Попробуем понять, какая фигура получится в итоге.
Получается правильный шестиугольник. Угол ∠СВА = 120o. Как раз угол правильного n-угольника равен (n-2)*180o/n. Для шестиугольника получается (6-2)*180o/6 = 120o.
Будем решать методом составления уравнений.
Рассмотрим прямую BC. Если провести от точки B прямую параллельную оси X, то мы увидим, что угол наклона прямой BC равен 30o.
y = tan(30o)*x + 31
y = (√3/3) * x + 31
Прямая DC имеет угол наклона -30o к оси X. Она расположена выше, чем BC на МВ. Треугольник BCM равносторонний. Значит, МВ=31. Тогда уравнение для DC будет:
y = -(√3/3) * x + 62
Уравнение для AF будет:
y = -(√3/3) * x
Прямая EF имеет угол наклона 30o относительно оси X. Смещена она вниз на AP. Треугольник AFP так же является равносторонним. Следовательно, AP = 31. Тогда для EF получается:
y=tan(30o)*x — 31
y=(√3/3)*x — 31
Прямая AB это x=0. Найдём так же ED.
cos(30o) = BQ / BC
BQ = BC * cos(30o)
BQ = 31 * (√3/2)
BD = 2 * BQ = 2 * 31 * (√3/2) = 31 * √3
Значит, уравнение для ED: x = 31 * √3.
Когда уравнения готовы, можно написать программу.
k=0 for x in range(-100, 100): for y in range(-100, 100): if (y < 3**0.5 / 3 * x + 31) and (y < -(3**0.5) / 3 * x + 62) and (y > -(3**0.5) / 3 * x) and (y > 3**0.5 / 3 * x - 31) and (x > 0) and (x < 31 * 3**0.5): k=k+1 print(k)
Точки должны быть ниже прямых BC и CD, но выше прямых AF и EF. Так же координаты x должны быть 0 < x < 31 * √3.
Важно не забыть для y пробежаться и по отрицательным значениям, т.к. фигура находится меньше оси X.
Ответ: 2476
На сегодня всё. Удачи при решение 6 задания из ЕГЭ по информатике 2023.
Зачем это делать? Авторы задания предполагают, что ученики просто воспользуются КуМир и все там получат.
В Кумире не удобно считать.
Исполнитель ‹‹Черепаха››
1. Использование исполнителя
Исполнитель ‹‹Черепаха›› входит в Вашу поставку Кумир, но его функции не являются частью языка программирования. Для его использования необходимо в программе явно указать использование данного исполнителя:
использовать Черепаха
теперь функции черепахи доступны для использования в программе
2. Команды действий
- поднять хвост
Синтаксис:
алг поднять хвост
Черепаха поднимает хвост. Теперь при перемещении Черепаха не будет чертить линию.
- опустить хвост
Синтаксис:
алг опустить хвост
Черепаха опускает хвост. Теперь при перемещении Черепаха будет чертить линию.
- вперед
Синтаксис:
алг вперед(цел а)
Черепаха перемещается вперёд на заданное количество точек (пикселей).
а – количество пикселей, на которое переместится Черепаха. - назад
Синтаксис:
алг назад(цел а)
Черепаха перемещается назад на заданное количество точек (пикселей).
а – количество пикселей, на которое переместится Черепаха. - влево
Синтаксис:
алг влево(цел угол)
Черепаха поворачивается влево на заданный угол.
угол – значение угла (в градусах), на который повернётся Черепаха. - вправо
Синтаксис:
алг вправо(цел угол)
Черепаха поворачивается вправо на заданный угол.
угол – значение угла (в градусах), на который повернётся Черепаха.
Задание 6 (ИНФ-11 ЕГЭ 2023_ДЕМО)
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды:
Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм: Повтори 7 [Вперёд 10 Направо 120].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Решение:
В нашей задаче черепаха двигается всего на 10 шагов, поэтому достаточно будет просто посчитать точки с целыми координатами внутри нашего треугольника, но если шагов будет больше этот вариант для решения не подходит. Поэтому попробуем написать программу, которая поможет нам посчитать точки при любом варианте шагов.
Вспомним график линейной функции
Ответ: 38
Пройти тестирование по этим заданиям
Вернуться к каталогу заданий
Версия для печати и копирования в MS Word
1
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм: Повтори 7 [Вперёд 10 Направо 120].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Источник: Демонстрационная версия ЕГЭ−2023 по информатике
2
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и
его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 5 [Вперёд 9 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
3
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 14 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
4
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 8 [Вперёд 6 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
5
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 10 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Пройти тестирование по этим заданиям
Канал видеоролика: Физика Информатика
Смотреть видео:
#информатика #егэинформатика #икт #экзамены #егэ_2020 #мгту #школьникам #помощь_студентам #подготовкакэкзаменам
Свежая информация для ЕГЭ и ОГЭ по Информатике (листай):
С этим видео ученики смотрят следующие ролики:
Разбираем 3 задание ЕГЭ по информатике. Задача 5148 с сайта К.Ю. Полякова
Физика Информатика
Разбираем 7 задание ЕГЭ. Задача 191 с сайта К.Ю. Полякова
Физика Информатика
Решение задание № 2 егэ по информатике. Задача 15814 с сайта СДАМ ГИА: РЕШУ ЕГЭ
Физика Информатика
Как решать 3 задание ЕГЭ в Экселе? Задача 4291 с сайта К.Ю. Полякова
Физика Информатика
Облегчи жизнь другим ученикам — поделись! (плюс тебе в карму):
15.02.2023
ЕГЭ информатика 6 задание разбор, теория, как решать.
Анализ программ с циклами, (Б) — 1 балл
Е6.9 Определите, сколько точек с целочисленными положительными координатами будут
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.8 при котором Черепаха оставит след в виде замкнутой ломанной линии.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.7 Сколько раз черепаха пройдет через начало координат?
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.6 Сколько существует точек с целочисленными координатами, лежащими на получившемся контуре?
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.5 Определите, сколько точек с целочисленными координатами будут находиться внутри области
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.4 Определите, из какого количества отрезков будет состоять фигура, заданная данным алгоритмом.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.3 сколько точек с целочисленными координатами будут находиться внутри пересечения фигур
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.2 Определите периметр фигуры, построенной Черепахой после выполнения данного алгоритма.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Е6.1 Исполнитель Черепаха действует на плоскости с декартовой системой координат.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд …
Читать далее
Рекомендации по выполнению:
Циклы:
«Задания этой линии можно решать двумя способами:
1) составить на черновике таблицу переменных, произвести пооператорное выполнение программы с записью изменяющихся значений в таблицу(трассировка);
2) определить количество итераций цикла и на основе этого вычислить результат.
Второй способ более быстрый, но он требует умения анализировать текст простой программы без её выполнения»
Типичные ошибки и рекомендации по их предотвращению:
«Экзаменуемый не учитывает последнюю итерацию цикла или, напротив, добавляет лишнюю. Это может быть связано с непониманием того, как обрабатывается условие цикла, или с ошибочной обработкой строгого неравенства как нестрогого или наоборот»
Массивы
«Рекомендуемый способ выполнения этого задания – трассировка»
Типичные ошибки и рекомендации по их предотвращению:
«Часто бывает, что при выполнении программы внутри итерации цикла изменяется значение не только текущего i-го элемента, но и следующего i+1-го, поэтому в следующей итерации текущий элемент будет иметь не то значение, что перед выполнением программы. Это нужно внимательно отслеживать, чтобы избежать ошибок. Кроме того, в определённых типах заданий может более сложно изменяться индекс текущего элемента, тут тоже требуется аккуратность и внимательность»
ФГБНУ «Федеральный институт педагогических измерений»
В 6 задании ЕГЭ используются алгоритмические структуры с циклами. Рассмотрим их на примере языка Паскаль.
- Понятие главной диагонали матрицы: элементы матрицы главной диагонали имеют совпадающие номера строки и столбца:
- если у элементов матрицы номер строки меньше номера столбца (i < j), то они расположены выше главной диагонали:
- если у элементов матрицы номер строки больше номера столбца (i > j), то они расположены ниже главной диагонали:
- побочная диагональ матрицы имеет формулу:
т.е. формула элементов главной диагонали:
i = j
где i и j — счетчики циклов (А[i,j])
n = i + j — 1
или
j = n — i + 1
где n — общее количество элементов квадратной матрицы, i и j — счетчики циклов строк и столбцов.
Решение заданий 6 ЕГЭ по информатике для 2021
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
6_1 new: Определите, при каком наименьшем введённом значении переменной s программа выведет число 256:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,n,p,l,s,x:integer; var s, n: integer; begin readln (s); n := 1; while s <=45 do begin s := s + 4; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 1 while s <= 45: s = s + 4 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 1; cin >> s; while( s <= 45 ) { s = s + 4; n = n * 2; } cout << n; } |
Типовые задания для тренировки
📹 Видеорешение подобного 6 задания на Python:
📹 здесь
📹 Видеорешение на RuTube здесь
✍ Решение:
-
✎ Способ 1 (программный):
- Поскольку в цикле
s
увеличивается, а по условию задания следует найти наименьшее значениеs
, то можно начать сs=1
, постоянно увеличивая значениеs
на единицу во внешнем цикле. - Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная
s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменнуюS1
для этих целей.
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s1 := 1; while true do // внешний цикл, бесконечный begin var s := s1; // --- код из условия задания --- // var n := 1; while s <= 45 do // внутренний цикл из задания begin s := s + 4; n := n * 2; end; // --- конец кода из условия задания --- // if n = 256 then // если найдено, то выводим соответствующее s begin print(s1); break; // выход из бесконечного цикла end; s1 := s1 + 1; // end; end. |
Пояснение:
Бейсик: |
Python:
s1 = 1 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 1 while s <= 45: s = s + 4 n = n * 2 # --- конец кода из условия задания --- if n == 256: print(s1) break s1 += 1 |
С++: |
Ответ: 14
6_2 new: Определите, при каком наибольшем введённом значении переменной s программа выведет число 96:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln (s); n := 3; while s <= 51 do begin s := s + 7; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 3 while s <= 51: s = s + 7 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 3; cin >> s; while( s <= 51 ) { s = s + 7; n = n * 2; } cout << n; } |
Типовые задания для тренировки
📹 Видеорешение:
📹 здесь
📹 Видеорешение на RuTube здесь
✍ Решение:
-
✎ Способ 1 (программный):
- Поскольку в цикле
s
увеличивается, и цикл работает пока s<=50, а по условию следует найти наибольшее значениеs
, то можно начать сs = 50
, постоянно уменьшая значениеs
на единицу во внешнем цикле. - Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная
s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значениеs
, уменьшив его всего на 1. Используем переменнуюS1
для этих целей.
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s1 := 50; while true do // внешний цикл, бесконечный begin var s := s1; // --- код из условия задания --- // var n := 3; while s <= 51 do // внутренний цикл из задания begin s := s + 7; n := n * 2; end; // --- конец кода из условия задания --- // if n = 96 then // если найдено, то выводим соответствующее s begin print(s1); break; // выход из бесконечного цикла end; s1 := s1 - 1; // end; end. |
Пояснение:
Бейсик: |
Python:
s1 = 50 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 3 while s <= 51: s = s + 7 n = n * 2 # --- конец кода из условия задания --- if n == 96: print(s1) break s1 -= 1 |
С++: |
Ответ: 23
6_3 new::
Сколько существует различных значений d
, оканчивающихся на 8, при вводе которых эта приведенная программа выведет число 50?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var S, N, d: integer; begin readln(d); S := 15; N := 10; while S <= 2400 do begin S := S + d; N := N + 5; end; writeln(N); end. |
Бейсик: |
Python:
d = int(input()) S = 15 N = 10 while S <= 2400: S = S + d N = N + 5 print(N) |
С++: |
Типовые задания для тренировки
✍ Решение:
-
✎ Способ 1 (программный):
- Вывод:
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 |
begin var counter:=0; var d1:=1; while true do begin var d := d1; // из условия задачи var s := 15; var n := 10; while s <= 2400 do begin s := s + d; n:=n + 5; end; // проверка условий: увеличение счетчика if (d mod 10 = 8) and (n = 50) then begin counter+=1;; end; d1 += 1; // выход из бесконечного цикла if d1 = 2400 then break; end; print (counter) end. |
4
Бейсик: |
Python:
counter = 0 d1 = 1 while True: s = 15 n = 10 d = d1 # --- код из условия задания --- while s <= 2400: s = s + d n = n + 5 if d%10==8 and n==50: counter+=1 d1=d1+1 if d1 == 2400: break print (counter) |
С++: |
Ответ: 4
6_4 new:
Определите наименьшее и наибольшее введённое значение переменной s
, при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln(s); n := 600; while n > s do begin s := s + 3; n := n - 6 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 600 while n > s: s = s + 3 n = n - 6 print(n) |
С++: |
✍ Решение:
-
✎ Способ 1 (программный):
- Вывод:
- Записываем в порядке убывания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := -100; while true do begin var n := 600; var s := s_; while n > s do begin s := s + 3; n := n - 6 end; if n = 210 then print(s_); s_ += 1; if s > 1000 then break; end; end. |
15 16 17 18 19 20 21 22 23
2315
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
s_ = -100 while True: # внешний цикл, бесконечный s = s_ n = 600 # --- код из условия задания --- while n > s: s = s + 3 n = n - 6 # --- конец кода из условия задания --- if n == 210: print(s_) s_ += 1 if s > 1000: break |
Ответ: 2315
6_5 new:
Определите, при каком наибольшем положительном введённом значении переменной s
программа выведет трёхзначное число.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin readln (s); n := 200; while s div n >= 2 do begin s := s + 5; n := n + 5 end; writeln(s) end. |
Бейсик: |
Python:
s = int(input()) n = 200 while s // n >= 2: s = s + 5 n = n + 5 print(s) |
С++: |
✍ Решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := 1000; while true do begin var n := 200; var s := s_; while s div n >= 2 do begin s := s + 5; n := n + 5 end; if (s > 99) and (s<1000) then begin print(s_); break; end; s_ -= 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
s_ = 1000 while True: # внешний цикл, бесконечный s = s_ n = 200 # --- код из условия задания --- while s // n >=2: s = s + 5 n = n + 5 # --- конец кода из условия задания --- if 99 < s < 1000: print(s_) break s_ -= 1 |
Ответ: 699
6_6 new:
Получив на вход некоторое натуральное число X
, этот алгоритм печатает одно число. Сколько существует чисел Х
, для которых алгоритм напечатает число на отрезке [2;500]?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var x, s, n: integer; begin readln(x); s := 6 * (x div 15); n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
x = int(input()) s = 6 * (x // 15) n = 1 while s < 300: s = s + 18 n = n * 2 print(n) |
С++: |
✍ Решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
begin var x := 1; var count := 0; while true do begin var s := 6 * (x div 15); var n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; if (n >= 2) and (n <= 500) then count += 1; x += 1; if x > 1000 then break; end; print(count) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
x = 1 count = 0 while True: # внешний цикл, бесконечный s = 6 * (x // 15) n = 1 while s <300: s = s + 18 n = n * 2 # --- конец кода из условия задания --- if 1 < n < 501: count+=1 x += 1 if x > 1000: break print (count) |
Ответ: 360
Решения подобных заданий прошлых лет
Алгоритмы с циклами:
Определить, какое число пропущено
6_14:
Сопоставьте формулу:
и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var k,n,p,l,s,x:integer; begin writeln('введите n='); readln(n); writeln('введите x='); readln(x); s:=0; p:=1; l:=x; For k:=1 to n do begin p:=p * k; s:=s + 3*l/p; l:=l*x; end; writeln('S=',S:5:2); end. |
Бейсик:
INPUT "введите n=", n INPUT "введите x=", x s=0: p=1 l=x FOR k:=1 to n p = p * k: s = s + 3*l/p l = l*x NEXT k PRINT "S=",S END |
Python:
n = int(input('введите n=')) x = int(input('введите x=')) s=0 p=1 l=x For k in range (1,n+1): p*= k s+=3*l/p l*=x print('S=',S) |
С++:
#include <iostream> using namespace std; int main() { int k,n,p,s,x; printf("введите n="); scanf("%d",&n); printf("введите x="); scanf("%d",&x); l=x; for (k=1,s=0,p=1;k<=n;k++) { p*=k; s+=3*l/p; l*=x; } printf("s=%d",s); } |
✍ Решение:
- Рассмотрим формулу:
- Рассмотрим алгоритм программы:
- Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
Фактически она обозначает: сумма xk/ k!
для всех k, начиная от 1 до n.
For k:=1 to n do
p:=p * k;
l:=l*x;
s:=s + 3*l/p;
Ответ: 3
Простые задания с двумя линейными непересекающимися функциями
6_3:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s:integer; begin s:=512; k:=0; while s < 2048 do begin s:=s + 64; k:=k + 1; end; write(k); end. |
Бейсик:
DIM S, K AS INTEGER S = 512 K = 0 WHILE S < 2048 S = S + 64 K = K + 1 WEND PRINT K |
Python:
s = 512 k = 0 while s < 2048: s = s + 64 k = k + 1 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 512, k = 0; while (s < 2048) { s = s + 64; k = k + 1; } cout << k << endl; return 0; } |
Подобные задания для тренировки
✍ Решение:
Рассмотрим алгоритм программы:
- В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла значение k выводится на экран, т.е. это и есть результат работы программы.
- В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на
s < 1536
(2048 — 512 = 1536):
s:=0; k:=0; while s < 1536 do begin ...
- Цикл будет выполняться пока
s<1536
, а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:
1536 / 64 = 24
- Соответственно, k = 24.
Результат: 24
Для более детального разбора предлагаем посмотреть видео решения (теоретическое) данного 6 задания ЕГЭ по информатике:
📹 здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_2:
Определите, что будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, i: integer; begin i := 1; s := 105; while s > 5 do begin s := s - 2; i := i + 1 end; writeln(i) end. |
Бейсик:
DIM S, I AS INTEGER I = 1 S = 105 WHILE S > 5 S = S - 2 I = I + 1 WEND PRINT I |
Python:
i = 1 s = 105 while s > 5: s = s - 2 i = i + 1 print(i) |
С++:
#include <iostream> using namespace std; int main() { int s = 105, i = 1; while (s > 5) { s = s - 2; i = i + 1; } cout << i << endl; return 0; } |
✍ Решение:
- Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
- В цикле также присутствует счетчик — переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
- Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на
while s > 0
; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку наs:=100
(105-5):
... s := 100; while s > 0 do begin ...
- Для того чтобы посчитать, сколько раз выполнится цикл, необходимо 100 разделить на 2, т.к. s каждый шаг цикла уменьшается на 2:
100 / 2 = 50 -> количество итераций цикла
- В 3-й строке видим, что начальным значением i является 1, т.е. в первую итерацию цикла i = 2. Значит, нам необходимо к результату (50) прибавить 1.
-
50 + 1 = 51
- Это значение и будет выведено на экран.
Результат: 51
6_1: 6 (8) задание. Демоверсия ЕГЭ 2018 информатика:
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 260; n := 0; while s > 0 do begin s := s - 15; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 260 N = 0 WHILE S > 0 S = S - 15 N = N + 2 WEND PRINT N |
Python:
s = 260 n = 0 while s > 0: s = s - 15 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 260, n = 0; while (s > 0) { s = s - 15; n = n + 2; } cout << n << endl; return 0; } |
Подобные задания для тренировки
✍ Решение:
- Рассмотрим алгоритм:
- Цикл зависит от значения переменной s, которая изначально равна 260. В цикле переменная s постоянно меняет свое значение, уменьшаясь на 15.
- Цикл завершит свою работу когда s <= 0. Значит, необходимо посчитать сколько чисел 15 «войдет» в число 260, иными словами:
260 / 15 ~ 17,333...
- Эта цифра должна соответствовать количеству шагов (итераций) цикла. Так как условие цикла строгое —
s > 0
, то увеличим полученное число на единицу:
17 + 1 = 18 итераций цикла Проверим: 17 * 15 = 255 (< 260) 18 * 15 = 270 (> 260)
- Проверим на более простом примере. Допустим, изначально s=32. Два прохождения цикла даст нам s = 32/15 = 2,133... Число 2 больше 0, соответственно, цикл будет работать еще третий раз.
- В результате работы программа распечатывает значение переменной n (искомый результат). В цикле переменная n, изначально равная 0, увеличивается на 2. Так как цикл включает 18 итераций, то имеем:
n = 18 * 2 = 36
Результат: 36
Подробное решение данного 6 (8) задания из демоверсии ЕГЭ 2018 года смотрите на видео:
📹 здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_4:
Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s: integer; begin k:=1024; s:=50; while s > 30 do begin s:= s - 4; k:= k div 2; end; write(k) end. |
Бейсик:
DIM S, K AS INTEGER S = 50 K = 1024 WHILE S > 30 S = S - 4 K = K 2 WEND PRINT K |
Python:
s = 50 k = 1024 while s > 30: s = s - 4 k = k // 2 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 50, k = 1024; while (s > 30) { s = s - 4; k = k / 2; } cout << k << endl; return 0; } |
✍ Решение:
Результат: 32
Подробное решение смотрите на видео:
📹 здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_5:
Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.
Паскаль:
1 2 3 4 5 6 7 |
a:=-5; c:=1024; while a<>0 do begin c:=c div 2; a:=a + 1 end; |
Бейсик:
A = -5
C = 1024
WHILE A <> 0
C = C 2
A = A + 1
WEND
|
Python:
a = -5 c = 1024 while a != 0: c = c // 2 a = a + 1 |
С++:
int a = -5, c = 1024; while (a != 0) { c = c / 2; a = a + 1; } |
✍ Решение:
Результат: 32
Смотрите видеоразбор задания:
📹 здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_12:
Определите, что будет напечатано в результате работы следующего фрагмента программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var n, s: integer; begin n := 1; s := 0; while s <= 365 do begin s := s + 36; n := n * 2 end; write(n) end. |
Бейсик:
N = 1 S = 0 WHILE S <= 365 S = S + 36 N = N * 2 WEND PRINT N |
Python:
n = 1 s = 0 while s <= 365: s = s + 36 n = n * 2 print(n) |
С++:
using namespace std; int main() { int n = 1, s = 0; while (s <= 365) { s = s + 36; n = n * 2; } cout << n << endl; return 0; } |
✍ Решение:
- с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2k, где k – это число итераций цикла;
- поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
- тогда n = 2k = 211 = 2048.
Результат: 2048
Сумма или разность двух линейных функций (while s — n или while s + n)
6_7:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 522; n := 400; while s - n > 0 do begin s := s - 20; n := n - 15 end; write(s) end. |
Бейсик:
DIM S, N AS INTEGER S = 522 N = 400 WHILE S - N > 0 S = S - 20 N = N - 15 WEND PRINT S |
Python:
s = 522 n = 400 while s - n > 0: s = s - 20 n = n - 15 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 522, n = 400; while (s - n > 0) { s = s - 20; n = n - 15; } cout << s << endl; return 0; } |
Подобные задания для тренировки
✍ Решение:
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
- Видим, что в условии разница между значениями составляет 5:
№ шага | условие цикла | s | n |
---|---|---|---|
1 | 522-400=122 122 > 0 |
522-20=502 | 400-15=385 |
2 | 502-385=117 117 > 0 |
502-20=482 | 385-15=370 |
3 | 482-370=112 112 > 0 |
… | … |
122 - 117 = 5 117 - 112 = 5 ...
122 / 5 = 24,4 24 * 5 = 120 (120 + 2 = 122)
Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
25 * 5 = 125 (125 - 3 = 122)
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
26 | 3 < 0 | не выполняется | не выполняется |
25 * 20 = 500 (за 25 итераций)
522 - 500 = 22 (вычитаем из исходных данных)
Результат: 22
Предлагаем посмотреть видео решения задания:
📹 здесь
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_13:
Запишите число, которое будет выведено в результате работы программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 10; n := 55; while n > s do begin s := s + 1; n := n - 1 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 10 N = 55 WHILE N > S S = S + 1 N = N - 1 WEND PRINT N |
Python:
s = 10 n = 55 while n > s: s = s + 1 n = n - 1 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 10, n = 55; while (n > s) { s = s + 1; n = n - 1; } cout << n << endl; return 0; } |
✍ Решение:
- Для условия цикла — перенесем влево:
n - s > 0
55 - 10 = 45
n - 1 > s + 1 => n - s - 2 > 0
для 22 итераций: 2 * 22 = 44 в условии цикла имеем 45 > 44, т.е. условие еще истинно для 23 итераций: 2 * 23 = 46 в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
n = 55 - 23 = 32
Результат: 32
Поиск наименьшего/наибольшего целого введенного числа d
ЕГЭ 6.8:
При каком наименьшем целом введенном числе d после выполнения программы будет напечатано число 192?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 |
var k,s,d: integer; begin readln (d); s:=0; k:=0; while k < 200 do begin s:=s + 64; k:=k + d; end; write(s); end. |
Бейсик:
DIM S, K, D AS INTEGER INPUT D S = 0 K = 0 WHILE K < 200 S = S + 64 K = K + D WEND PRINT S |
Python:
d = int (input ()) s = 0 k = 0 while k < 200: s = s + 64 k = k + d print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, k = 0; int d; cin >> d; while (k < 200) { s = s + 64; k = k + d; } cout << s << endl; return 0; } |
Подобные задания для тренировки
✍ Решение:
Рассмотрим алгоритм программы:
- Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит «работу», когда k сравняется с 200 или превысит его (k >= 200).
- Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
- Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
64 * x = 192 число повторов: x = 192 / 64 = 3
- Так как в цикле k увеличивается на значение d, а повторов цикла 3 (при этом цикл завершается при k>=200), составим уравнение:
3 * d = 200 d = 200/3 ~ 66,66
- Поскольку число получилось нецелое, то проверим и 66 и 67. Если мы возьмем 66, то:
66 + 66 + 66 = 198 (< 200)
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
- Для 67:
67 + 67 + 67 = 201 (>200)
- Данное число 67 нас устраивает, оно наименьшее из возможных, что и требуется по заданию.
Результат: 67
Разбор задания смотрите на видео:
📹 здесь
6_9:
Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s, d: integer; begin readln(d); n := 33; s := 4; while s <= 1725 do begin s := s + d; n := n + 8 end; write(n) end. |
Бейсик:
DIM S, N, D AS INTEGER INPUT D N = 33 S = 4 WHILE S <= 1725 S = S + D N = N + 8 WEND PRINT N |
Python:
d = int (input ()) n = 33 s = 4 while s <= 1725: s = s + d n = n + 8 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 4, n = 33; int d; cin >> d; while (s <= 1725) { s = s + d; n = n + 8; } cout << n << endl; return 0; } |
✍ Решение:
Разберем листинг программы:
- Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
- Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
- Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 «поместится» в 120 (153 — 33)? :
120 / 8 = 15 раз (количество итераций цикла)
- Как мы определили, цикл зависит от s, которая в начале программы s = 4. Для простоты работы примем, что s = 0, тогда изменим и условие цикла: вместо
s <= 1725
сделаемs <= 1721
(1725-1721)
... s := 0; while s <= 1721 do begin ...
- Найдем d. Так как цикл выполняется 15 раз, то необходимо найти такое целое число, которое при умножении на 15 возвращало бы число большее 1721:
1721 / 15 = 114,733 - не целое, не подходит 1722 / 15 = 114,8 - не целое, не подходит ... берем кратное 5: 1725 / 15 = 115 - целое, подходит!
- 115 — это наименьшее d при котором n станет равным 153 (за 15 шагов цикла).
- Найдем наибольшее d. Для этого надо найти такое число, которое соответствует неравенствам:
14 * d <= 1721 при этом: 15 * d > 1721
- Найдем:
14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
- Наибольшее d=122
Результат: 115, 122
Смотрите видео данного 6 задания ЕГЭ:
📹 здесь
Усложненные задания с двумя линейными функциями
6_6:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 0; n := 0; while 2*s*s < 123 do begin s := s + 1; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 0 N = 0 WHILE 2*S*S < 123 S = S + 1 N = N + 2 WEND PRINT N |
Python:
s = 0 n = 0 while 2*s*s < 123: s = s + 1 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, n = 0; while (2*s*s < 123) { s = s + 1; n = n + 2; } cout << n << endl; return 0; } |
Подобные задания для тренировки
✍ Решение:
Разберем листинг программы:
- В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
- В результате работы программы на экран выводится значение n.
- Цикл зависит от s, причем работа цикла завершится когда 2 * s2 >= 123.
- Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s2 >= 123:
1 шаг: s = 2*12=2 2 шаг: s = 2*22=8 3 шаг: s = 2*32=18 ... 7 шаг: s = 2*72=98 (меньше 123, т.е. цикл еще работает) 8 шаг: s = 2*82=128 (больше 123, цикл не работает! )
Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:
s=124/2 = √62 - не подходит! s=126/2 = √63 - не подходит! s=128/2 = √64 = 8 - подходит!
- Таким образом, программа выполнит 8 итераций цикла.
- Определим n, которая увеличивается каждый шаг цикла на 2, значит:
n = 2 * 8 = 16
Результат: 16
Видео данного задания ЕГЭ доступно здесь:
📹 здесь
Арифметическая и геометрическая прогрессия
6_10:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var k, s: integer; begin s:=3; k:=1; while k < 25 do begin s:=s + k; k:=k + 2; end; write(s); end. |
Бейсик:
DIM S, K AS INTEGER S = 3 K = 1 WHILE K < 25 S = S + K K = K + 2 WEND PRINT S |
Python:
s = 3 k = 1 while k < 25: s = s + k k = k + 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 3, k = 1; while (k < 25) { s = s + k; k = k + 2; } cout << s << endl; return 0; } |
✍ Решение:
Разберем листинг программы:
- Результатом программы является вывод значения s.
- В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
- Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
- В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
n = 25 / 2 ~ 12
(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)
- В s накапливается сумма арифметической прогрессии, последовательность элементов которой удобней начать с 0 (а не с 3, как в программе). Поэтому представим, что в начале программы s = 0. Но при этом не забудем, что в конце необходимо будет к результату прибавить 3!
s:=0; k:=1; while k < 25 do begin ...
- Тогда арифметическая прогрессия будет выглядеть:
1 + 3 + 5 + 7 ... количество членов прогрессии - 12, т.к. 12 итераций цикла
- Существует формула вычисления суммы арифметической прогрессии:
s = ((2 * a1 + d * (n — 1)) / 2) * n
где a1 — первый член прогрессии,
d — разность,
n — количество членов прогрессии (в нашем случае — кол-во итераций цикла)
- Подставим значения в формулу:
(2 * 1 + 2 * 11) / 2 * 12 = 144
- Не забудем, что мы к результату должны прибавить 3:
144+3 = 147
- Это и есть значение s, которое выводится в результате работы программы.
Результат: 147
Решение данного задания ЕГЭ по информатике видео:
📹 здесь
6_11: Государственный выпускной экзамен ГВЭ 2019 (информатика ГВЭ ФИПИ, № 15):
Запишите число, которое будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s: integer; begin n := 1; s := 0; while n <= 1000 do begin s := s + n; n := n * 2 end; write(s) end. |
Бейсик:
DIM N, S AS INTEGER N = 1 S = 0 WHILE N <= 1000 S = S + N N = N * 2 WEND PRINT S |
Python:
n = 1 s = 0 while n <= 1000: s = s + n n = n * 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int n = 1, s = 0; while (n <= 1000) { s = s + n; n = n * 2; } cout << s << endl; return 0; } |
✍ Решение:
- Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
Рассмотрим алгоритм:
1 2 4 8 16 32 64 128 256 512 1024
1.
[ S_{n} = frac {b_1-b_{n}*q}{1-q} ]
2.
[ S_{n} = b_{1} * frac {1-q^n}{1-q} ]
[ S_{n} = frac {1-512*2}{1-2} =1023 ]
[ S_{n} = 1 * frac {1-2^{10}}{1-2}=1023 ]
Результат: 1023
Алгоритмы с массивами:
Наибольшее или наименьшее значение переменной s (сумматор)
6_15: Досрочный экзамен 2020 г., вариант 1:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
A[i] | 14 | 13 | 15 | 8 | 4 | 12 | 30 | 21 | 22 | 16 | 5 | 9 |
Определите значение переменной s после выполнения следующего фрагмента этой программы
Язык программирования Паскаль:
s := 0; n := 1; for i := 0 to 11 do if A[i] > A[n] then s := s + A[i] + i else A[n] := A[i];
Бейсик:
s = 0 n = 1 FOR i = 0 TO 11 IF A(i) > A(n) THEN s = s + A(i) + i ELSE A(n) = A(i) END IF NEXT i |
Python:
s = 0 n = 1 for i in range(0, 12): if A[i] > A[n]: s += A[i] + i else: A[n] = A[i] |
С++:
s = 0; n = 1; for (int i = 0; i < 12; i++) { if (A[i] > A[n]) s += A[i] + i; else A[n] = A[i]; } |
✍ Решение:
Видео подробного решения:
📹 здесь
6_16:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=0; n:=10; for i:=0 to n-1 do begin s:= s + A[i] + A[i+1] end;
В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.
Какое наибольшее значение может иметь переменная s после выполнения данной программы?
✍ Решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
- В цикле повторяется операция, суммирующая два подряд идущих элемента массива, — текущего и следующего:
A[i] + A[i+1]
s = 0 + 98 + 98 = 196
s = 196 + 98 + 98
196 * 10 = 1960
Результат: 1960
Детальный разбор задания 6 ЕГЭ по информатике предлагаем посмотреть в видеоуроке:
📹 здесь
6_17:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=1; n:=10; for i:=1 to 5 do begin s:= s * A[i] * A[n-i+1] end;
В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.
Какое наименьшее значение может иметь переменная s после выполнения данной программы?
✍ Решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 5 раз: от 1 до 5.
- В цикле повторяется операция произведения двух элементов массива:
A[i] * A[n-i+1]
1 шаг: A[1]*A[10] 2 шаг: A[2]*A[9] 3 шаг: A[3]*A[8] 4 шаг: A[4]*A[7] 5 шаг: A[5]*A[6]
s = 1 * 2 * 2 = 4
s = 4 * 2 * 2 = 16 ...
45 = 1024
Результат: 1024
Если что-то осталось непонятным, предлагаем посмотреть разбор задания 6 ЕГЭ по информатике в видеоуроке:
📹 здесь
Перестановка в массиве. Определить значение переменной
6_18: 6 (19) задание. Демоверсия ЕГЭ 2018 информатика:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т.е. A[0] = 3, A[1] = 0 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i-1] > A[i] then begin c := c + 1; t := A[i]; A[i] := A[i-1]; A[i-1] := t; end; |
✍ Решение:
Результат: 5
Подробное решение 19 задания демоверсии ЕГЭ 2018 года смотрите на видео:
📹 здесь
6_19:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 3, 4, 7, 2, 9, 1, 2, 3, 0 соответственно, т.е. A[0] = 1, A[1] = 3 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i] > A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := 2*t; end; |
✍ Решение:
- Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
№ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
if | 3>4 true |
4>6 false |
7>6 true |
2>14 false |
9>14 false |
1>14 false |
2>14 false |
3>14 false |
0>14 false |
c | 1 | — | 2 | — | — | — | — | — | — |
t | 3 | — | 7 | — | — | — | — | — | — |
A[i] | 1 | 6 | |||||||
A[0] | 6 | — | 14 | — | — | — | — | — | — |
Результат: 2
📹 Видео здесь
6_20:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 0, 7, 1, 3, 2, 1, 8, 9, 6, 3 соответственно, т.е. A[0] = 0, A[1] = 7 и т.д.
Определите значение переменной j после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 |
j:=9; while A[j] + A[j-1] > 4 do begin t:=A[j]; A[j]:=A[j-1]; A[j-1]:=t; j:=j-1; end; |
✍ Решение:
- В задании используется цикл while — с предусловием. Такой цикл выполняется пока условие истинно.
- В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (
j=9
), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
Для первой итерации цикла имеем: while A[9] + A[8] > 4 do ...
j:=j-1
).A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
Результат: 6
6_21: Разбор досрочного ЕГЭ по информатике 2019:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
n := 1; s := 1; for i := 1 to 11 do if A[i] < A[n] then begin s := s * i; t := A[i]; A[i] := A[n]; A[n] := t; end; |
✍ Решение:
Смотрите подробный разбор на видео:
📹 здесь
6_22:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
s := 0; n := 4; for i:=0 to 9 do if A[i] <= A[n] then begin s := s + A[i]; t := A[i]; A[i] := A[n]; A[n] := t; n := i mod 3; end; writeln(s); |
Бейсик:
s=0: n=4 FOR k=1 to 10 IF A(i) <= A(n) THEN s = s + A(i) t = A(i) A(i) = A(n) A(n) = t n = i MOD 3 END IF NEXT k PRINT S END |
Python:
s = 0 n = 4 for i in range(10): if A[i] <= A[n]: s = s + A[i] t = A[i] A[i] = A[n] A[n] = t n = i % 3 print(s) |
С++:
s = 0; n = 4; for (i=0; i<=9; i++) if (A[i]<=A[n]) { s+=A[i]; t=A[i]; A[i]=A[n]; A[n]=t; n=i%3; } cout << s; |
Типовые задания для тренировки
✍ Решение:
- Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой — очередная итерация цикла.
- При последнем изменении s стало равным 75.
i | <= ? | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | s | n |
21 | 16 | 7 | 12 | 18 | 3 | 8 | 13 | 11 | 17 | 0 | 4 | ||
0 | 21<=18 нет |
21 | 18 | ||||||||||
1 | 16<=18 да |
16 18 |
18 16 |
16 | 1 mod 3 = 1 | ||||||||
2 | 7<=18 да |
18 7 |
7 18 |
16+7=23 | 2 mod 3 = 2 | ||||||||
3 | 12<=18 да |
18 12 |
12 18 |
23+12=35 | 3 mod 3 = 0 | ||||||||
4 | 16<=21 да |
21 16 |
16 21 |
35+16=51 | 4 mod 3 = 1 | ||||||||
5 | 3<=7 да |
7 3 |
3 7 |
51+3=54 | 5 mod 3 = 2 | ||||||||
6 | 8<=12 да |
12 8 |
8 12 |
54+8=62 | 6 mod 3 = 0 | ||||||||
7 | 13<=16 да |
16 13 |
13 16 |
62+13=75 | 7 mod 3 = 1 | ||||||||
8 | нет | 3 | 11 | ||||||||||
9 | нет | 13 | 17 |
Ответ: 75
📹 здесь
6_23:
В результате выполнения программы напечатано число 6.
Какое наибольшее значение может иметь переменная S после выполнения программы?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var k, m, S, N: integer; Dat: array[1..100] of integer; begin N:= 5; m := 0; S := 0; for k := 1 to N do readln(Dat[k]); for k := 1 to N do begin S := S + 2 * Dat[k]; if Dat[k]>m then begin m := Dat[k] end end; writeln(m) end. |
Бейсик:
N=5 m=0 S=0 FOR k=1 to N INPUT Dat(k) NEXT k FOR k=1 to N S = S + 2 * Dat(k) IF Dat(k) > m THEN m = Dat(k) END IF NEXT k PRINT m END |
Python:
Dat = [0]*100 N = 5 m = S = 0 for k in range(0, N): Dat[k] = int(input()) for k in range(0, N): S += 2 * Dat[k] if Dat[k] > m: m = Dat[k] print(m) |
С++:
#include <iostream> using namespace std; int main() { int Dat[100]; int N = 5; int k, m = 0, S = 0; for(k=0; k<N; k++) cin >> Dat[k]; for(k=0; k<N; k++) { S += 2 * Dat[k]; if (Dat[k]>m) m = Dat[k]; } cout << m; return 0; } |
✍ Решение:
-
Рассмотрим алгоритм.
- В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
- Изначально переменная N равна значению 5:
- В первом цикле формируются значения для пяти элементов массива:
- Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
- Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива — это значение 6. Так как в результате
m = 6
. - В цикле помимо условия находится сумматор, который суммирует
2 * Dat[k]
. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение. - Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
- Посчитаем S в цикле:
for k := 1 to N do readln(Dat[k]);
if Dat[k]>m then begin m := Dat[k] end
S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60
Ответ: 60
Смотрите видеоразбор задания:
📹 здесь