Sfera-perm.ru

Сфера Пермь
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Примеры задач с циклом счетчик

Циклы в программировании. Цикл while

Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.

Цикл while

«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».

Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:

Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.

В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.

Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».

Рассмотрите блок-схему цикла while .

На ней ярко-голубыми прямоугольниками обозначена основная ветка программы, ромбом – заголовок цикла с логическим выражением, бирюзовым прямоугольником – тело цикла.

С циклом while возможны две исключительные ситуации:

Если при первом заходе в цикл логическое выражение возвращает False , то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.

Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.

Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.

Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.

Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:

Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.

Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.

Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.

Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.

Читайте так же:
Журнал счетчиков windows 10

Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .

Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.

Вернемся назад. Если в теле try попытка преобразования к числу была неудачной, и было выброшено исключение ValueError , то поток выполнения программы отправляется в ветку except и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.

После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.

Выход из цикла возможен только тогда, когда значение n будет успешно конвертировано в число.

Рассмотрим следующий пример:

Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.

Сначала переменная i равна 0. В заголовке цикла проверяется условие i , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.

Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.

Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.

Три меньше пяти. На этой итерации i присваивается 4.

Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.

Далее начинается шестая итерация цикла. Происходит проверка условия i . Но поскольку теперь оно возвращает ложь, то выполнение цикла прерывается, и его тело не выполняется.

«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .

В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.

Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:

Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.

Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False . Иначе произойдет зацикливание.

Примечание 1. Не обязательно в выражениях total = total — n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .

Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i — 5 , или i -= 5 .

Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).

Читайте так же:
Перепрограммирование счетчика меркурий 234

Практическая работа

Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.

Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Операторы цикла в языке Си

Рассмотрим третью алгоритмическую структуру — цикл.
Циклом называется блок кода, который для решения задачи требуется повторить несколько раз.

Каждый цикл состоит из

  • блока проверки условия повторения цикла
  • тела цикла

Цикл выполняется до тех пор, пока блок проверки условия возвращает истинное значение.
Тело цикла содержит последовательность операций, которая выполняется в случае истинного условия повторения цикла. После выполнения последней операции тела цикла снова выполняется операция проверки условия повторения цикла. Если это условие не выполняется, то будет выполнена операция, стоящая непосредственно после цикла в коде программы.

В языке Си следующие виды циклов:

  • while — цикл с предусловием;
  • do…while — цикл с постусловием;
  • for — параметрический цикл (цикл с заданным числом повторений).

Цикл с предусловием while

Общая форма записи

Если Условие выполняется (выражение, проверяющее Условие , не равно нулю), то выполняется БлокОпераций , заключенный в фигурные скобки, затем Условие проверяется снова.
Последовательность действий, состоящая из проверки Условия и выполнения БлокаОпераций , повторяется до тех пор, пока выражение, проверяющее Условие , не станет ложным (равным нулю). При этом происходит выход из цикла, и производится выполнение операции, стоящей после оператора цикла.

Пример на Си : Посчитать сумму чисел от 1 до введенного k

Результат выполнения

При построении цикла while , в него необходимо включить конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным (равным нулю). Иначе выполнение цикла будет осуществляться бесконечно (бесконечный цикл).

Пример бесконечного цикла

while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным.

Например, если в приведенном выше коде программы ввести k=-1, то получим результат

Цикл с постусловием do. while

Общая форма записи

Цикл do. while — это цикл с постусловием, где истинность выражения, проверяющего Условие проверяется после выполнения Блока Операций , заключенного в фигурные скобки. Тело цикла выполняется до тех пор, пока выражение, проверяющее Условие , не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз.

Использовать цикл do. while лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.

Пример на Си . Проверка, что пользователь ввел число от 0 до 10

Результат выполнения:

Параметрический цикл for

Общая форма записи

for — параметрический цикл (цикл с фиксированным числом повторений). Для организации такого цикла необходимо осуществить три операции:

  • Инициализация — присваивание параметру цикла начального значения;
  • Условие — проверка условия повторения цикла, чаще всего — сравнение величины параметра с некоторым граничным значением;
  • Модификация — изменение значения параметра для следующего прохождения тела цикла.

Эти три операции записываются в скобках и разделяются точкой с запятой ; ;. Как правило, параметром цикла является целочисленная переменная.
Инициализация параметра осуществляется только один раз — когда цикл for начинает выполняться.
Проверка Условия повторения цикла осуществляется перед каждым возможным выполнением тела цикла. Когда выражение, проверяющее Условие становится ложным (равным нулю), цикл завершается. Модификация параметра осуществляется в конце каждого выполнения тела цикла. Параметр может как увеличиваться, так и уменьшаться.

Пример на Си : Посчитать сумму чисел от 1 до введенного k

Читайте так же:
Просмотр статистики сайта без счетчика

Результат выполнения

В записи цикла for можно опустить одно или несколько выражений, но нельзя опускать точку с запятой, разделяющие три составляющие цикла.
Код предыдущего примера можно представить в виде

Параметры, находящиеся в выражениях в заголовке цикла можно изменить при выполнении операции в теле цикла, например

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
int main() <
int k; // объявляем целую переменную key
int sum = 0; // начальное значение суммы равно 0
printf( «k = » );
scanf( «%d» , &k); // вводим значение переменной k
for ( int i=1; i // цикл для переменной i от 1 до k с шагом 1
<
sum = sum + i; // добавляем значение i к сумме
i++; // добавляем 1 к значению i

>
printf( «sum = %dn» , sum); // вывод значения суммы
getchar(); getchar();
return 0;
>

В цикле for может использоваться операция запятая, — для разделения нескольких выражений. Это позволяет включить в спецификацию цикла несколько инициализирующих или корректирующих выражений. Выражения, к которым применяется операция запятая, будут вычисляться слева направо.

Вложенные циклы

В Си допускаются вложенные циклы, то есть когда один цикл находится внутри другого:

Пример : Вывести числа от 0 до 99, по 10 в каждой строке

Результат выполнения

Рекомендации по выбору цикла

При выборе цикла необходимо оценить необходимость проверки условия при входе в цикл или по завершении прохождения цикла.
Цикл с постусловием удобно применять в случаях, когда для проверки условия требуется вычислить значение выражения, которое затем будет размещено в теле цикла (см. выше пример ввода числа от 0 до 10).
Цикл c предусловием используется в случае если все переменные, участвующие в выражении, проверяющем условие, проинициализированы заранее, но точное число повторений цикла неизвестно или предполагается сложная модификация переменных, участвующих в формировании условия повторения цикла.
Если цикл ориентирован на работу с параметром, для которого заранее известно число повторений и шаг изменения, то более предпочтительным является параметрический цикл. Очень удобно использовать параметрический цикл при работе с массивами для перебора элементов.

Операторы прерывания и продолжения цикла break и continue

В теле любого цикла можно использовать операторы прерывания цикла — break и продолжения цикла — continue .

Оператор break позволяет выйти из цикла, не завершая его.
Оператор continue позволяет пропустить часть операторов тела цикла и начать новую итерацию.

Пример на Си : Вывести числа от 0 до 99 ниже главной диагонали

Результат выполнения

Пример на Си : Вывести числа от 0 до 99 исключая числа, оканчивающиеся на 5 или 8

Результат выполнения

При вложенных циклах действия операторов break и continue распространяется только на самую внутреннюю структуру, в которой они содержатся.

Оператор безусловного перехода goto

Общая форма записи

Выполнение оператора goto вызывает передачу управления в программе операции, помеченной Меткой . По сути Метка является идентификатором адреса операции, которой должно быть передано управление. Для отделения Метки от Операции используется двоеточие — : .
Метка может располагаться в программе как до оператора goto , так и после него. Имена Меток образуются по тем же правилам, что и имена переменных.

Пример на Си : Вывести все целые числа от 5 до 0.

Использование оператора goto в программах на Си без крайней необходимости не рекомендуется, поскольку это может повлечь за собой ряд ошибок, связанных с плохой читаемостью кода программы. Использование операторов цикла позволяет практически полностью исключить необходимость использования оператора goto .

Арифметический цикл

Арифметическим называется циклический процесс, в котором количество повторений известно в момент входа в цикл. В языке Паскаль для реализации этого вида циклов рекомендуется использовать оператор FOR … DO. получивший название оператор цикла с параметром.

До первого вхождения в тело арифметического цикла известно, сколько раз его необходимо повторить, например, N раз. В арифметических циклах обязательно должен присутствовать счетчик (параметр) цикла, который показывает, сколько раз до заданного момента времени повторилось тело цикла. Первоначально он принимает начальное значение, а при каждом прохождении тела он изменяется на величину приращения, и так происходит до тех пор, пока его значение или не превысит конечное значение, равное N (для случая положительного значения приращения) или не станет меньше N (для случая отрицательного значения приращения), затем происходит выход из цикла.

Читайте так же:
Как осуществляется предварительная установка счетчиков

Арифметический цикл служит основой для алгоритмизации процесса, в котором число повторений известно заранее, поэтому при использовании такого процесса необходимо четко уяснить, какая переменная является счетчиком цикла, каков диапазон ее изменения ( начальное и конечное значение ), чему равно ее приращение за один проход цикла.

Чаще всего алгоритм арифметического цикла строится на основе цикла с предусловиями ( ЦИКЛ – ДО ), шаблон такого цикла для положительного значения приращения счетчика цикла приведен на рис. 2.5. В блоке задания начальных условий указываются начальное и конечное значения счетчика цикла и его приращение, при этом счетчик цикла получает свое начальное значение, затем проверяется условие повторения цикла ( счетчик цикла не больше конечного значения счетчика ), в зависимости от выполнения которого тело цикла выполняется еще раз ( по ветке ДА ) или происходит выход из цикла ( по ветке НЕТ ), затем следует тело цикла. После выполнения тела цикла счетчик цикла увеличивает свое значение на величину приращения, а затем осуществляется переход на проверку условия повторения.

Рис. 2.5 Шаблон арифметического цикла

Арифметические циклы используются, как правило, для решения следующих задач:

· вычисление суммы N слагаемых;

· вычисление произведения N сомножителей;

· табулирование функции на конечном интервале в N точках.

Рассмотрим подробнее примеры решения таких задач.

Вычисление суммы слагаемых.

Пусть необходимо вычислить

Исходными данными алгоритма являются значение переменной N, которое необходимо ввести, а выходными данными алгоритма является значение переменной S, которое надо вычислить и вывести.

В данном примере счетчиком цикла является переменная i, которая принимает значения от 1 до N с шагом 1.

Представим процесс вычисления суммы S как последовательное вычисление частичных сумм:

;

;

;

Исходя из этого, начальное значение суммы S принимается равным 0, затем, на каждом шаге текущее значение S увеличивается на величину i-го слагаемого:

Заполним таблицу имен объектов:

Имя объекта в задачеИмя объекта в блок-схемеТип объектаПримечание
Iцелая переменнаясчетчик цикла
Nцелая переменнаяконечное значение счетчика цикла
SВещественная переменнаятекущее значение частичной суммы
PIВещественная переменная
AВещественная переменнаятекущее слагаемое

Тогда схема алгоритма по шагам запишется следующим образом:

Ш2. S присвоить 0.

Ш3. присвоить 1.

Ш4. Если , то перейти на Ш7.

Ш5. Вывод .

Ш7. присвоить .

Ш8. S присвоить .

Ш9. присвоить .

Ш10. Перейти на Ш4.

Блок-схема этого алгоритма приведена на рис.2.6.

Рис 2.6 Блок-схема алгоритма вычисления суммы N слагаемых

Поясним работу алгоритма таблицей трассировки для .

№ действия№ блокаРезультат действия
Ввод
1 £ 3, ДА
S = 0 + 0,8674 = 0,8674
i= 1 + 1 = 2
переход на 4
2 £ 3, да
i = 2 + 1 = 3
переход на 4
3 £ 3, да
S = 1,3011 + 0 = 1,3011
i = 3 + 1 = 4
переход на 4
4 £ 3, нет
Вывод S = 1,3011
Конец

При составлении программы по блок-схеме блоку «Начало» поставим в соответствие заголовок программы PROGRAM, блоку описания используемых в программе переменных соответствует раздел описания переменных VAR декларативной части блока. В этом разделе содержатся два описания : переменные I и N объявляются целыми, а переменные S и A вещественными.

Далее следует исполнительная часть блока, представляющая собой составной оператор. Она начинается с открывающей операторной скобки BEGIN. За ней следуют операторы программы. Блоку ввода ставим в соответствие вызов процедуры вывода информации на экран дисплея WRITELN для вывода приглашения ко вводу и вызов процедуры ввода информации с клавиатуры READLN для ввода исходных данных алгоритма – значения N.

Далее программируем операторы присваивания для задания сумме S начального значения 0, и параметру цикла I начального значения 1, ставя каждому блоку в соответствие один оператор, затем переходим к программированию цикла с предусловиями с помощью оператора WHILE. В теле цикла содержится более одного оператора, поэтому необходимо использование операторных скобок BEGIN END. В теле цикла последовательно вычисляются значение А, S и значение счетчика цикла увеличивается на величину приращения.

Читайте так же:
Как сделать счетчик для лески

По выходу из цикла вывод информации программируем с помощью вызова процедуры вывода информации на экран дисплея WRITELN, блоку «конец» ставим в соответствие закрывающую операторную скобку END.

В результате получается следующая программа:

Билет № 16. Алгоритмическая структура «цикл». Циклы со счетчиком и циклы по условию.

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

Алгоритмическая конструкция «Цикл»:

Пример: Вычислить 2 n , где n вводится с клавиатуры.

4. Если К=N То Вывод А: Конец

NКАК=N
Начало;
Ввод N;
К:=1: А:=2
Если К=N
А:=А*2
К:=К+1
Если К=N
А:=А*2
К:=К+1
Если К=N
А:=А*2
К:=К+1
Если К=N+
Вывод А: Конец

Билет № 17 (убрать. ). Технология решения задач с помощью компьютера (моделирование, формализация, алгоритмизация, программирование). Показать на примере задачи (математической, физической или другой).

Рассмотрим процесс решения задачи на конкретном примере:

Тело брошено вертикально вверх с начальной скоростью с некоторой высоты. Определить его местоположение и скорость в заданный момент времени.

1. На первом этапе обычно строится описательная информационная модель объекта или процесса. В нашем случае с использованием физических понятий создается идеализированная модель движения объекта. Из условия задачи можно сформулировать следующие основные предположения:

1) тело мало по сравнению с Землей, поэтому его можно считать материальной точкой;

2) скорость бросания тела мала, поэтому:

— ускорение свободного падения считать постоянной величиной;

— сопротивлением воздуха можно пренебречь.

2. На втором этапе создается формализованная модель, т. е. описательная информационная модель записывается с помощью какого-либо формального языка.

Из курса физики известно, что описанное выше движение является равноускоренным. При заданных начальной скорости (V), начальной высоте (Н) и ускорении свободного падения (g = 9,8 м/с 2 ) зависимость скорости (V) и высоты (Н) от времени (t) можно описать следующими математическими формулами:

V=V-gt, Y = H + Vt-

3. На третьем этапе необходимо формализованную информационную модель преобразовать в компьютерную на понятном для компьютера языке. Существуют два принципиально различных пути построения компьютерной модели:

— создание алгоритма решения задачи и его кодирование на одном из языков программирования;

— формирование компьютерной модели с использованием одного из приложений (электронных таблиц, СУБД и т. д.).

Для реализации первого пути надо построить алгоритм определения координаты тела в определенный момент времени и закодировать его на одном из языков программирования.

Второй путь требует создания компьютерной модели, которую можно исследовать в электронных таблицах. Для этого следует представить математическую модель в форме таблицы функции зависимости координаты от времени (таблицы функции , H=H+Vt-gt 2 /2 ) и таблицы зависимости скорости тела от времени (V=V-g • t).

4. Четвертый этап исследования информационной модели состоит в проведении компьютерного эксперимента. Если компьютерная модель существует в виде программы на одном из языков программирования, ее нужно запустить на выполнение и получить результаты. Если компьютерная модель исследуется в приложении, например в электронных таблицах, можно провести сортировку или поиск данных, построить диаграмму или график и т. д.

5. На пятом этапе выполняется анализ полученных результатов и при необходимости корректировка исследуемой модели. Например, в нашей модели необходимо учесть, что не имеет физического смысла вычисление координаты тела после его падения на поверхность Земли.

Таким образом, технология решения задач с помощью компьютера состоит из следующих этапов:

1. построение описательной модели

3. построение компьютерной модели

4. компьютерный эксперимент

5. анализ результатов и корректировка модели.

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector