Подготовка к ОГЭ, задание 15.2 (Pascal), часть 2
Программирование циклов с заданным условием продолжения работы (цикл-ПОКА)
Ключевые слова:
• оператор цикла
• while (цикл-ПОКА)
Цикл с заданным условием продолжения работы (цикл-ПОКА) программируется в языке Паскаль с помощью оператора while.
Общий вид оператора цикла:
while do
begin
end
Здесь:
условие — логическое выражение; пока оно истинно, выполняется тело цикла;
тело цикла — один или несколько операторов, описывающих последовательность действий, выполняемых многократно.
Каждый оператор в программе заканчивается знаком "точка с запятой" (;). Но при этом нужно помнить, что знак "точка с запятой" закрывает не только последний оператор, а все открытые перед ней операторы.
Поэтому если внутри одного оператора (в теле цикла) нужно выполнить два или более других операторов, то их заключают в операторные скобки, которые обозначаются словами begin и end.
Решаемые на данном уроке задачи похожи на задачи, рассмотренные на уроке 8.4.5, главное, что меняется здесь - условие цикла и (соответственно этому) порядок обработки данных.
Для упрощения ввода исходных данных можно вводить их двумя способами, которые приведут к одному результату:
-
отдельно в каждой строке, как дано в примере. Для этого используется оператор readln();
-
все числа в одной строке через пробел, используя оператор read().
Второй из приведенных способов ввода чисел:
-
более удобен в случае необходимости запускать решение задачи несколько раз, так как после копирования заданной последовательности чисел и вставки их в окно ввода достаточно эту строку скопировать в буфер, и при повторных запусках программы тогда будет достаточно вставить эту строку в окно ввода;
-
гарантирует, что при отладке программы для контроля правильности ответа вводятся одни и те же числа и при правильно выполненной программе будет получен требуемый результат.
Для вывода результатов в отдельных строках используем операторы println() :
println (kol);
println (sr/kol);
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.
Для вывода результатов в отдельные строки, как это показано в примерах, следует использовать операторы println (), количество которых будет зависеть от условия задачи, где перечислены получаемые в примере результаты.
Задача 5. Вычисление суммы всех чисел, кратных заданному числу и оканчивающегося на указанную цифру
Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1 000. Введённые числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.
Пример работы программы:
Решение
В данной задаче нужно найти сумму всех чисел в последовательности, кратных 6 (то есть остаток от деления этих чисел на 6 равен 0) и оканчивающихся на 4 (то есть остаток от деления этих чисел на 10 равен 4). Условия "Количество чисел не превышает 10 000" и "Введённые числа не превышают 30 000" не влияют на решение задачи, так как данные ограничения в условии не рассматриваются.
За начальное значение искомой суммы принимаем ноль, так как он не повлияет на ее значение в процессе суммирования.
Для ввода чисел используем оператор read(), а не readln() (см. описание урока).
В данной программе выполняем оператор read(a) дважды: читаем первое значение числа а перед началом цикла, иначе цикл не выполнится ни разу, и второй раз - внутри цикла для чтения остальных чисел последовательности.
Исходный текст программы:
var a, sum, kol: integer;
begin
sum := 0;
kol := 0;
read(a);
while a 0 do
begin
if (a mod 6 = 0) and (a mod 10 = 4) then
sum += a;
read(a);
end;
print(sum);
end.
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.
Задача 6. Определение количества чётных (нечетных) чисел, кратных указанному числу
Напишите программу, которая в последовательности целых чисел определяет их количество нечётных чисел, кратных 3. Программа получает на вход целые числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1 000. Введённые числа по модулю не превышают 30 000. Программа должна вывести два числа: длину последовательности (завершающий 0 не учитывается) и количество нечётных чисел, кратных 3.
Пример работы программы:
Решение
В данной задаче нужно найти в последовательности количество нечётных чисел, кратных 3, т.е. чисел, которые делятся на 3 с остатком, равным 0, и на 2 с остатком, не равным 0 (или с остатком, равным единице.).
Исходный текст программы:
var a, dl, kol: integer;
begin
dl := 0;
kol := 0;
read ( a );
while a 0 do
begin
dl += 1;
if (a mod 3 = 0) and (a mod 2 = 1) then
kol += 1;
read ( a );
end;
println ( dl );
println ( kol );
end.
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.
Задача 7. Определение суммы чисел и разности количества положительных и отрицательных чисел
Напишите программу, которая в последовательности целых чисел определяет их сумму и подсчитывает разность количества положительных и отрицательных чисел последовательности. Программа получает на вход целые числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность).
Количество чисел не превышает 1 000. Введённые числа по модулю не превышают 30 000.
Программа должна вывести два числа: сумму всех чисел последовательности и разность количества положительных и отрицательных чисел.
Пример работы программы:
Решение
Подсчет суммы всех чисел не вызывает вопросов, но для получения разности количества положительных и отрицательных чисел нужно объявить две суммы - kolp для накопления количества положительных чисел и kolo - аналогично для отрицательных чисел. Проверку на а = 0 не делаем, так как 0 - это конец ввода чисел и в подсчете не участвует, и при входе в цикл задаем условие a 0 (a не равно нулю).
Для определения знака числа здесь необходимо применить оператор условного перехода if.
Подсчет разности количества положительных и отрицательных чисел выполним непосредственно в операторе вывода результата на экран.
Исходный текст программы:
var a, sum, kolp, kolo: integer;
begin
sum := 0;
kolp := 0;
kolo := 0;
read(a);
while a 0 do
begin
sum += a;
if (a 0) then
kolp += 1
else
kolo += 1;
read(a);
end;
print(sum, kolp-kolo);
end.
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.
Для вывода результатов в отдельных строках используем операторы println() :
println (sum);
println (kolp-kolo);
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.
Задача 8. Определение среднего арифметического n-значных чисел, кратных заданному числу и не превосходящих его
Напишите программу, которая в последовательности натуральных чисел определяет среднее арифметическое значение трёхзначных чисел, кратных 4 и не превосходящих число 256. Программа получает на вход натуральные числа, количество которых неизвестно, последовательность чисел заканчивается числом 0 (0 – признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1 000. Введённые числа не превышают 30 000. Программа должна вывести одно число - среднее арифметическое значение трехзначных чисел, кратных 4 и меньших числа 256.
Пример работы программы:
Решение
Данная задача содержит три явных условия, которые должны выполняться одновременно. Заметим, что описание интервала трехзначных чисел содержит две проверки, поэтому всего условий стало четыре:
(a99) and (a
При этом из двух одновременно выполняемых проверок (aи (aможно оставить одну, тогда получаем условие чуть короче:
(a99) and (a
Чтобы посчитать среднее арифметическое значение, нужно найти сумму и количество чисел, соответствующих условиям отбора. При этом, так как значение суммы выводить не нужно, то можно это значение в переменной не сохранять, а использовать сразу для вычисления среднего арифметического значения. Назовем эту переменную sr.
Поскольку среднее арифметическое значение получается путем обычного деления, в результате которого в программе на языке Паскаль получается всегда вещественное число, объявляем переменную sr как real. Это не помешает нам использовать ее сначала для подсчета суммы, а затем и для получения результата.
Исходный текст программы, вариант 1:
var a, kol: integer;
sr: real;
begin
kol := 0;
sr := 0;
read ( a );
while a 0 do
begin
if (a 99) and (a and (a mod 4 = 0) then
begin
kol += 1;
sr += a;
end;
read(a);
end;
sr := sr / kol;
print(kol, sr );
end.
Можно выполнить задачу и без использования вещественной переменной. Для этого достаточно не сохранять результат деления в переменную, а выполнить операцию деления непосредственно в операторе вывода результатов на экран. Тогда программа будет проще в написании и быстрее выполняться.
Исходный текст программы, вариант 2:
var a, kol, sr: integer;
begin
kol := 0;
sr := 0;
read ( a );
while a 0 do
begin
if (a 99) and (a and (a mod 4 = 0) then
begin
kol += 1;
sr += a;
end;
read(a);
end;
print (kol, / kol );
end.
Для вывода результатов в отдельных строках используем операторы println() :
println(kol);
println(sr/kol);
Проверьте правильность работы программы на приведенных в контрольном примере исходных данных, и если Ваш ответ совпал с указанным в задании, то задача решена правильно. Для большей надежности можно придумать и проверить еще несколько контрольных примеров.