Letysite.ru

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

Программирование алгоритмов циклической структуры

Программирование алгоритмов циклической структуры

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

3.1 Алгоритмы циклической структуры. Операторы цикла

Алгоритм, в котором предусмотрено многократное выполнение одной и той же последовательности действий, называется алгоритмом циклической структуры, а эта последовательность – циклом. Циклический алгоритм позволяет существенно сократить объем программы. Цикл можно организовать двумя способами:

— с помощью счетчика и условия перехода (см. пример 2.2.1);

— с помощью оператора цикла.

В Паскале существует несколько операторов цикла. Оператор цикла представляет собой единую синтаксическую конструкцию, в которой можно выделить три основные части: заголовок цикла, тело цикла, заключительную строку. Заголовок цикла образуют ключевое слово и управляющая фраза, задающая способ управления повторениями. Заключительную строку составляет ключевое слово, заканчивающееся знаком “;”. Тело задает действия, которые повторяются в соответствии с правилами, заданными управляющей фразой. Если число повторений известно заранее (до начала повторений), то в такой ситуации лучше воспользоваться оператором цикла с параметром For-To или For-Downto (оператор цикла с фиксированным числом повторений). В остальных случаях следует использовать операторы цикла с предусловием While-Do или постусловием Repeat-Until.

Оператор цикла с параметром имеет две модификации For-To и For-Downto и следующие ограничения:

— i, m1, m2 могут быть только переменными целого типа;

— параметр i не может изменяться внутри цикла.

Все операторы цикла (For-To, For-Downto, While-Do и Repeat-Until) приведены в таблице D1. Общим для всех перечисленных операторов цикла является то, что циклы, организованные с их помощью, содержат обязательные компоненты: задание начального значения параметра цикла; тело цикла; задание шага изменения параметра цикла; проверку на выход из цикла.

Для операторов While и Repeat изменение параметра цикла по какому-либо закону в теле цикла обязательно.

При программировании алгоритмов циклической структуры часто используются приемы накапливания сумм, произведения, количества:

3.2 Примеры алгоритмов и программ циклической структуры

3.2.1 Вычислить все значения функции Y=A*K 2 , если К меняется от 1 до 10 с шагом 1. Решить задачу несколькими способами (на рисунках 3.1, 3.2, 3.3 и 3.4 показаны все способы решения задачи).

3.2.2 Вычислить значения функции для х, меняющегося в интервале от –5 до 7 с шагом 0,5. Найти количество (К) значений у(х) равных нулю, сумму (S) положительных значений у(х) и произведение (P) отрицательных значений у(х). Решить задачу, используя, оператор For-To.

Блок-схема и программа решения задачи представлены на рисунке 3.5.

При использовании оператора цикла For-To для решения данной задачи выбрать х в качестве параметра цикла нельзя, так как это вещественная переменная, кроме того, интервал ее изменения и шаг, также вещественные числа. Поэтому для организации цикла используем дополнительный параметр i, который будет изменяться параллельно с х требуемое число раз. Для этого определим количество итераций (повторений) по формуле: , где m1 и m2 — начальное и конечное значение х, m3 – шаг. Так как значение N не всегда получается целым числом, в программе рекомендуется использовать функцию trunc(x), результатом которой является целое число, а аргументом — вещественное. Вычисления значения функции производятся в цикле. До организации цикла необходимо задать начальные значения переменных для хранения суммы (S=0), количества (K=0) и произведения (P=1). Также необходимо задать начальное значение переменной (х=-5), а затем внутри цикла изменять х на величину шага (х := х + 0.5). Для накопления суммы и количества в теле цикла используется оператор присваивания типа счетчика, суть которого: последующее значение = предыдущее значение + текущее значение (S:=S+y и K:=K+1), а для накопления произведения используется идентичный оператор присваивания, но со знаком * в правой его части (P:=P*y).

3.3 Варианты заданий

Решить задачу согласно варианту тремя способами, т.е. с использованием операторов цикла For-To (или For-Downto), While-Do и Repeat-Until.

1 Вычислить сумму четных и нечетных первых N чисел натурального ряда.

2 Дано целое число N. Вычислить P=N!=1´2´3´…´N.

3 Даны числа a и n. Вычислить P = a´(a-n) ´ (a-2n) ´ (a-3n) ´…´ (a-n 2 ).

4 Вычислить произведение первых n сомножителей .

5 Вычислить произведение четных и нечетных первых N чисел натурального ряда.

6 Даны вещественное число X и натуральное число n. Вычислить сумму первых n слагаемых S = sinX + sinX 2 + sinX 3 +…+ sinX n .

7 Даны вещественное число X и натуральное число n. Вычислить произведение первых N сомножителей S = sinX ´ sinX 2 ´ sinX 3 ´…´ sinX n .

8 Дано целое число n. Вычислить .

9 Дано целое число n. Вычислить .

10 Вычислить произведение первых n сомножителей .

11 Даны вещественное число X и натуральное число n. Вычислить сумму первых n слагаемых .

12 Даны вещественное число X и натуральное число n. Вычислить сумму первых n слагаемых .

13 Даны числа b и n. Вычислить P = b´(b+1) ´ (b+2) ´ (b+3) ´…´ (b+n).

14 Вычислить сумму первых N чисел натурального ряда.

15 Вычислить произведение четных и нечетных первых N чисел натурального ряда.

16 Вычислить сумму первых n слагаемых .

17 Дано целое число n. Вычислить .

18 Даны числа x и n. Вычислить .

19 Даны числа b и n. Вычислить P = (b-n) + (b — (n-1)) + (b- (n-2)) +…+ (b-1).

20 Даны вещественное число x и целое число n. Вычислить .

21 Даны числа x и n. Вычислить .

22 Дано целое число n. Вычислить .

23 Дано целое число n. Вычислить .

24 Дано целое число n. Вычислить .

25 Дано целое число n. Вычислить .

26 Дано целое число n. Вычислить .

27 Даны числа a и n. Вычислить S = a+(a-n) + (a-2n) + (a-3n) +…+ (a-n 2 ).

28 Даны вещественное число X и натуральное число n. Вычислить сумму первых n слагаемых S = sin 2 X + 2sin 2 X +…+ nsin 2 X.

29 Дано целое число n. Вычислить .

3.4 Контрольные вопросы

1 Что называется циклом?

2 Что представляет собой оператор цикла?

3 Какие виды оператора цикла существуют в Паскале?

4 Дайте сравнительную характеристику операторов For-To и For-Downto.

5 Что представляет собой оператор цикла While-Do?

6 Что представляет собой оператор цикла Repeat-Until?

7 Как организовать цикл For-To с вещественным параметром?

8 Как осуществляется накапливание суммы в программе?

9 Какое значение следует принять за начальное при накапливании произведения?

10 В какой последовательности выполняются действия при накапливании количества?

Описание символов, используемых в графической схеме алгоритмов (ГСА)

Программирование алгоритмов циклической структуры.

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

Различают регулярные циклы с управляющим параметром (с известным числом повторений), условием окончания которого является достижение параметром цикла своего конечного значения; итерационные циклы, в которых условие повторения или окончания цикла задается по некоторому результату, например, пока не будет достигнута точность вычислений. Реализуются циклы с помощью специальных операторов цикла. Оператор цикла While. Wend Синтаксис:

While условие [операторы]

Условие — обязательный элемент. Числовое выражение или строковое выражение, которое имеет значение True или False.

Операторы — необязательный элемент. Один или несколько операторов, выполняемых, пока условие имеет значение True.

Этот оператор называют оператором цикла с предусловием. Выполняется оператор While. Wend следующим образом. Если условие имеет значение True, выполняются все операторы до инструкции Wend. Затем управление возвращается инструкции While и вновь проверяется условие. Если условие по-прежнему имеет значение True, процесс повторяется. Если оно не имеет значение True, выполнение возобновляется с инструкции, следующей за инструкцией Wend. В связи с этим элемент условие здесь является условием выполнения цикла. Циклы While. Wend могут иметь любую глубину вложенности.

Оператор цикла Do. Loop также используется для выполнения наборов операторов неопределенное число раз. Оператор имеет синтаксис:

Loop Until [условие]

Условие — необязательный элемент. Числовое или строковое выражение, которое имеет значение True или False.

Операторы — один или несколько операторов, выполнение которых повторяется, пока условие не приобретет значение True.

Этот оператор называют оператором цикла с постусловием. Выполняется оператор Do. Loop следующим образом. Если условие имеет значение False, выполняются все операторы после инструкции Do. Затем управление передается инструкции Until и вновь проверяется условие. Если условие по-прежнему имеет значение False , процесс повторяется. Если оно имеет значение True, управление передается следующему за инструкцией LoopUntil оператору. В связи с этим элемент условие здесь является условием выхода из цикла.

Читать еще:  8000fff ошибка обновления

Часто при составлении макроса заранее известно количество повторений группы операторов, в таких случаях можно использовать инструкцию For. Next.

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

Счетчик — обязательный элемент. Это должна быть числовая переменная. Она не может иметь тип Boolean или быть элементом массива.

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

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

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

Операторы — необязательный элемент. Один или несколько операторов между For и Next, которые выполняются указанное число раз.

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

Допускается вложение циклов For. Next (один цикл For. Next располагается внутри другого). Счетчик каждого цикла должен иметь уникальное имя.

Пример. Составить таблицу значений функции у = х 2 на отрезке [2,8] с шагом 0.5.

Программа Sub Tablica()

Dim х, у As Double, i As Integer i = 1

Cells(l, 1) = «X»: Cells(l, 2) = «Y»

For x = 2 To 8 Step 0.5 у — x Л 2 i = i + 1

Cells(i, 1) = x: Cells(i, 2) = у Next x End Sub

Пример.Вычислить сумму квадратов п чисел: 1,4,9,16,25. . Число п задать произвольно при вводе.

Программа Sub sum()

Dim n, i As Integer, s As Double

n = Уа1(1пр^Вох(«Введите количество слагаемых n”)) s = 0

s = s + i Л 2 Next i

MsgBox («Сумма s= M + Str(s#))

Пример. Вычислить произведение квадратов п чисел: 1, 4, 9, 16, 25, . Число п задать произвольно при вводе.

Dimn, iAsInteger, pAsDouble

n = Уа1(1пр^Вох(«Введите количество слагаемых n”)) p=i

Программирование алгоритмов циклической структуры

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

Циклом называется последовательность действий, выполняемых многократно, каждый раз при новых параметрах.

В языке Турбо Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы.

Оператор For.Оператор задает многократное выполнение некоторого оператора (может быть и составным) с одновременным изменением значения управляющей переменной. Вид оператора:

Начальное иконечное значения управляющей переменной могут быть представлены константами, переменными или арифметическими выражениями. Они определяются один раз в начале выполнения оператора For и не заменяются во время выполнения этого оператора. Если окажется, что больше при использовании слова To, то оператор после слова Do («тело» цикла) не будет выполнен ни разу и выполнение цикла с параметром закончится (соответственно при DownTo, если меньше ). Управляющая переменная, а так же её начальное и конечное значения должны быть одного типа, обязательно порядкового. Оператор после слова Do выполняется один раз для каждого значения управляющей переменной. Если в операторе For используется слово To, то значение управляющей переменной увеличивается на единицу при каждом повторении А, А+1, …, В-1, В, при DownTo – уменьшается на единицу.

Оператор While.Данный оператор имеет вид:

Оператор While содержит логическое выражение, значение которого (True или False) управляет повторным выполнением оператора, им может быть и составной оператор. Значение выражения вычисляется перед выполнением оператора. Если результат равен True, то оператор выполняется, при значении False – нет. Если вначале логическое выражение имеет значение False, оператор после слова Do вообще не выполняется. В операторе обязательно изменение значений переменных, влияющих на значение логического выражения.

Оператор Repeat – Until.Оператор Repeat (повторять) – Until (до тех пор, пока) содержит логическое выражение (после Until), которое управляет повторением выполнения последовательности операторов, записанных между Repeat и Until. Повторение продолжается до тех пор, пока логическое значение не примет значение True. Последовательность операторов тела цикла выполняется не менее одного раза.

При использовании оператора RepeatUntil(цикла с постусловием)необходимо учитывать следующее:

§ перед выполнением оператора логическое выражение его окончания (или продолжения) должно быть определено;

§ последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор RepeatUntil работает бесконечно долго;

§ логическое выражение в конечном итоге должно принять значение True

Подпрограммы ЯП Pascal (процедуры и функции)

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

В этом случае указную последовательность операторов следует оформить в виде подпрограммы.

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

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

В языке программирования Pascal определены два вида подпрограмм – процедуры и функции.

В программе описание процедур и функций должно располагаться между разделами описания переменных и основной программой. Каждая процедура или функция определяется только один раз, но может использоваться (вызываться) многократно.

Структура процедур и функций аналогична структуре полной программы на языке Паскаль:

1. Заголовок подпрограммы – задает имя подпрограммы и список формальных параметров с указанием их типов;

2. Раздел описаний;

3. Тело подпрограммы.

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

Процедурой в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя.

Общий вид процедуры:

Для понимания взаимодействия программы и процедуры рассмотрим следующий пример. Слева приведен фрагмент текста основной программы, справа – процедура вычисления суммы двух целых чисел.

Begin Procedure Sum(x,y:integer; Var z:Integer);

Sum(a,b,c); end;

end.

Процедура вызывается указанием ее имени, используемого для обозначения процедуры. Линейный ход выполнения основной программы становится нелинейным – управление вычислительным процессом передается на участок программного кода, занимаемый процедурой. После выполнения процедуры осуществляется возврат на оператор основной программы, следующий за вызовом процедуры. Итак, взаимодействие программы и процедуры по управлению обозначено, рассмотрим взаимодействие по данным. В программе определены переменные a,b,c. В процедуре – x,y,z её параметры, но они являются переменными процедуры. При вызове процедуры Sum(a,b,c) из основной программы значение переменной a присваивается переменной x процедуры Sum, а значение переменной b становится значением переменной y. Стрелки на рисунке в одну сторону. Связь переменных c и z обозначена двойной стрелкой, то есть при изменении значения переменной z необходимо произвести соответствующее изменение значения переменной c. Это обратная связь по данным от процедуры к основной программы. На такой тип связи указывает слово Var в описании параметров процедуры.

В любой программе все переменные делятся на глобальные и локальные. В фрагменте программы переменные a,b,c – глобальные, а x,y,z – локальные. Глобальные переменные – это переменные из раздела описаний основной части программы, а локальные – из раздела описаний процедур и функций. Локальные переменные существуют только в течение работы процедуры, определяются (создаются) при её вызове и исчезают после её завершения.

При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре (x,y,z —формальные). Фактические параметры – это параметры, которые передаются процедуре при обращении к ней (a,b,c — фактические). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.

Читать еще:  Ошибка в игре msvcp100 dll

Формальные параметры процедуры делятся на параметры-переменные и параметры-значения.

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

Параметры-значения – перед ними в описании формальных параметров не ставится служебное слово Var. И в процедуре работают только значения этих параметров. В основной программе после выхода из процедуры их значения не изменяются, то есть остаются теми же, что и до начала процедуры. Если формальный параметр описан как параметр-значение, то при вызове процедуры ему может соответствовать произвольное выражение того же типа.

Результат – одно или несколько значений. Оно передается в основную программу как значение ее параметров.

Функцией в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя.

Общий вид функйии:

Function [(список параметров)]: ;

В теле функции обязательно должен быть хотя бы один оператор присвоения, где в левой части стоит имя функции, а в правой – её значение. Иначе значение функции не будет определено.

Программирование циклических алгоритмов

Инструкция while

Цикл – это алгоритмическая структура в которой одни и те же инструкции выполняются периодически в зависимости от условия. В C++ используется несколько разновидностей циклов. Цикл while реализует алгоритмическую структуру цикл с предстусловием.


В этом цикле условие проверяется вначале. Пока выражение (или логическое выражение) в условии имеет значение отличное от нуля (или логическое выражение имеет значение true ), то цикл делает шаг – выполняется некоторый набор инструкций (одна или более), называемый телом цикла. Шаги цикла будут выполняться до тех пор, пока значение логического выражения в условии не станет равным false или (если это не логическое выражение) равным нулю. Если проверяемое условие ложно изначально, то инструкции, входящие в тело цикла, не выполняются, а управление передается на инструкции находящиеся за циклом (т. е. после > ). Иногда требуется организовать бесконечный цикл. Выход из такого цикла должен быть запрограммирован внутри тела цикла. “Бесконечный цикл” можно организовать следующим условием: while (true) <> .
Цикл while является универсальным циклом. От разработчика требуется программировать изменение значений переменных в теле цикла так, чтобы эти изменения влияли на условие выхода из цикла. Неверно составленный программный код может привести к “зацикливанию” (т. е. невозможности выхода из цикла).
Рассмотрим пример на этот тип цикла.
Постановка задачи: Вывести n раз число k .
Для решения данной задачи нам необходимо использовать переменную-счетчик и определить её начальное значение, равное нулю, перед входом в цикл.

Решение этой задачи можно реализовать иначе – без счетчика. В программе используется операция декремента в условии. Обратите внимание – если в теле цикла всего лишь одна инструкция, то фигурные скобки можно опустить.

Задача учебника. Даны целые x и y . Не используя операции деления получить частное q и остаток r от деления числа x на число y .

Рассмотрим пример в котором используется накопление произведения. Постановка задачи: дано целое n . Вычислить факториал числа n , n! = 1 * 2 * 3 * . * n (n . Факториал – величина, которая имеет очень быстрый рост. Поэтому, нужно предусмотреть переполнение типа. Будем использовать максимально широкий целый тип ( unsigned long long ).

Пример накопления суммы – это задача на подсчет разрядов числа и определения их суммы. Постановка задачи: Дано натуральное n (> 0). Определить сумму цифр данного числа и их количество.

Инструкция do while

Алгоритмическую структуру “цикл с постусловием” в языке программирования C++ реализует инструкция цикла do while .

Поскольку условие проверяется в конце цикла, то тело цикла (одна или более инструкций) будет выполнено хотя бы один раз. В этом существенное отличие инструкций while и do while .
Пока логическое выражение в условии имеет значение, отличное от нуля или true выполняется тело цикла (это его отличает от соответствующего цикла в ЯП Pascal). Если проверяемое условие ложно изначально, то инструкции, входящие в тело цикла, будут выполнены один раз, затем произойдет выход из цикла и будут выполняться инструкции следующие за циклом.
Эту разновидность цикла удобно использовать, когда есть необходимость производить анализ входных данных. В общем случае, инструкции while и do while взаимозаменяемы.
(Наглядность задачи учебеника под вопросом, поэтому заменяем на другой пример).
Постановка задачи: Вывести n -первых четных положительных чисел (включая 0 ).

Инструкция if в теле цикла

В циклах очень часто приходится прибегать к использованию условной инструкции. Однако, если задачу всё же можно решить без if , то следует выбирать именно этот вариант, так как if увеличивает время выполнения и сложность алгоритма. Например, задачу (8.5.6) вывода четных чисел можно было бы решить с помощью if так:

Примером использования условной инструкции являются задачи на анализ разрядов вводимых чисел. Например. Вводится последовательность из n (n > 0) натуральных чисел. Определить количество трехзначных чисел в данной последовательности оканчивающихся на 7 (типичная задача ОГЭ).

Обсуждение. Логическая операция and (“И”) требует истинности всех трех операндов. Подробнее об этой операции мы будем говорить в следующем учебном году.

Инструкции break и continue

Инструкция break прерывает выполнение циклов while , do while (и for , который мы рассмотрим ниже) и передает управление выполнения программы инструкции, следующей за блоком. Это означает, что если используется структура вложенных циклов, то будет осуществлен выход только из вложенного цикла (если break будет выполнена в нем), внешний же цикл продолжит свою работу. Например.
Постановка задачи: Дано натуральное число n . Определить, является ли оно простым.

Обсуждение. Условие основано на том факте, что если не будут найдены делители до n / 2 , то число является простым. Если же будет найден делитель, то нужно немедленно прервать выполнение цикла.
В отличие от break – continue прерывает выполнение только текущей итерации (то есть, выполнение инструкций тела цикла) и передает выполнение на вычисление условия. При этом инструкции, следующие за continue , игнорируются. Данная инструкция применяется не часто, но может быть использована для контроля состояния допустимости значения выражений в теле цикла.
Следует сказать, что многие разработчики стараются не использовать в циклах эти инструкции. Однако последние повышают читаемость программы.
Например. Постановка задачи. Протабулировать значение функции f(x) = 2/x с шагом 1 на отрезке [-5, 5]

Инструкция for

Инструкция for реализует алгоритмическую структуру цикл с параметром (или цикл со счетчиком). Цикл for применяется в том случае, когда в программе, прежде выполнения инструкций тела цикла, становится известным (или заранее определено) количество шагов этого цикла. В блок-схеме инструкция for изображается следующим образом:

Цикл работает следующим образом:

  1. В начале происходит инициализация переменной-счетчика. Инициализация производится единожды, до выполнения цикла.
  2. Затем проверяется выражение-условие: если выражение имеет значение true, будет выполняться тело цикла.
  3. После выполнения инструкций тела цикла производится модификация (изменение) величины счетчика; обычно для этого используются операции инкремента или декремента.

Например. Постановка задачи: Вывести натуральные числа от 1 до n .

Пример учебника. Постановка задачи: Дано целое n и действительное a . Вычислить a n (целую степень действительного числа).

Если в теле цикла более чем одна инструкция, то инструкции тела цикла необходимо заключать в фигурные скобки (блок).
В процессе работы цикла for не рекомендуется изменять значение счетчика в теле цикла. Такую программу будет сложно читать (и часто это будет приводить к ошибкам), но сами изменяемые значения счетчика, использовать можно. Рассмотрим пример. Постановка задачи: Дано натуральное число N. Вывести все делители этого числа.

Область видимости данных

Мы уже знакомы с понятием составной инструкции (блоком), заключенной в фигурные скобки. Фигурные скобки определяют не только блок, но также и область видимости (англ. scope) переменных объявляемых внутри этого блока (включая заголовок цикла). Если попытаться получить доступ к счетчику вне тела цикла, то программа выдаст ошибку. Переменная i (например, в программе 8.5.12) является локальной переменной цикла – её видимость определяют < >. После завершения работы цикла переменная i , объявленная в заголовке, уничтожается и получить значение i (вне цикла) станет невозможным.

Читать еще:  Ошибка 924 андроид

Если переменная определена как локальная, но не была произведена инициализация этой переменной, то её значение неопределено и обращение к ее значению будет считаться ошибкой. Попытка изменить значения локальных переменных вне блока приведет к ошибке, но внутри блока можно получать и изменять значения всех объектов определенных вне блока (за исключением других локальных объектов). Более подробно локальную и глобальную видимость переменных мы обсудим в следующем учебном году.
(Составьте программы раздела 3.5.4 на С++ самостоятельно).
(1 оценок, среднее: 5,00 из 5)
Загрузка.

Программирование алгоритмов циклической структуры

называется конечной суммой

Для некоторых последовательностей известны формулы расчета конечных сумм, например: при an = an-1 + d; Sn = (a1 + an)*n/2; — арифметическая прогрессия, при an = an-1 * q; Sn= (a1 — an*q)/(1-q); — геометрическая прогрессия, где d и q — постоянные числа. Здесь N-ый член последовательности выражается через (N-1)-ый член. Такие зависимости называются реккурентными. Конечная сумма последовательности может быть неизвестна, тогда для ее расчета применяется алгоритм суммирования членов последовательности в цикле от 1 до N. Приведем пример расчета конечной суммы последовательности: 12 + 32 + 52 +. . . + (2*N-1)2; Sn = N*(4*N2-1)/3; В некоторых случаях «N»-ый член последовательности определяется через сумму предыдущих членов, например,

и конечную сумму можно рассчитать по формуле:

где «S» — начальная сумма. Рассмотрим программу вычисления конечной суммы денежного вклада в банк через N месяцев при ежемесячной процентной ставке «pr» (5% cоответствует pr=5). Часто применяются вложенные операторы цикла. Например, если необходимо провести все варианты расчета при изменении нескольких параметров в заданных диапазонах. Составим программу расчета функции y = A*sin(x) — cos(x)/A; при изменении аргумента «x» в диапазоне от 0 до Pi с шагом Pi/100 и при изменении параметра «A» в диапазоне от 1 до 3 с шагом 0.5.

Операторы цикла с условием

Схема выполнения операторов имеет вид:

называется бесконечным рядом и записывается в виде:

Здесь an — общий член ряда. Сумма конечного числа членов ряда называется частичной суммой и обозначается «Sn«. Если сумма членов бесконечного ряда имеет конечный предел «S», то ряд называется сходящимся. Для некоторых рядов получены формулы расчета суммы членов ряда. Например, сумма членов числового ряда:

1 + 1/32 + 1/52 + . . . + 1/(2*N-1) + .

имеет предел S = Pi 2 /8 и общий член an = images/(2*N-1) 2 , где N = 1, 2, 3, . Для сходящегося ряда вычисляется последовательность частичных сумм с заданной погрешностью. Абсолютная погрешность расчетов определяется по формуле Eps=abs(S-Sn), либо Eps=abs(an), если значение S неизвестно. Относительная погрешность расчетов определяется по формуле Eps_o=abs((S-Sn)/S), либо Eps_o=abs(an/Sn). Частичные суммы вычисляются по формуле: Sn = Sn-1 + an Для знакопеременного ряда следует добавить k1=-1, а в цикле: k1:=-k1, an=k1*an. В некоторых случаях «N»-ый член ряда выражается через «N-1»-ый, например, для ряда:

1 + 1/2! + 1/4! + 1/6! + . + 1/(2*N)! + . ; N = 0, 1, 2, .

общий член ряда вычисляется по формуле: an = an-1*k; Параметр k = an/an-1 — коэффициент роста вычисляется предварительно (до написания программы). Для данного ряда

Здесь N! = 1*2*3*. *N; — вычисление факториала числа «N», причем 0! = 1. Расчет частичных сумм производится в цикле с условием, например, для данного ряда операторами:

Операторы ограничения и прерывания цикла

Примеры

Пример1: На промежутке от 1 до M найти все числа Армстронга. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу.

Этапы решения задачи:

  1. Математическая модель: xО[1;M], x=
  2. Составим блок схему программы:


Распишем составные части блока»Находим все числа Армстронга на заданном промежутке и печатаем их»
Опишем блок «Подсчитываем сколько цифр в числе i»
Опишем блок «Проверяем, является ли i числом Армстронга»
Дальнейшая детализация не требуется, запишем блок-схему целиком:
Дальнейшей детализации не требуется, переведем программу на язык Паскаль.

Контрольные вопросы

  1. Как записывается и как работает оператор FOR?
  2. Для организации каких циклов применим оператор FOR?
  3. В чем отличие оператора WHILE от оператора REPEAT?
  4. Как программируются циклические алгоритмы с явно заданным числом повторений цикла?
  5. Как программируются циклические алгоритмы с заранее неизвестным числом повторений цикла?
  6. Напишите оператор цикла, который не выполняется ни разу.
  7. Напишите оператор цикла, который выполняется неограниченное число раз.
  8. Замените оператор «Repeat A Until B» равносильным фрагментом программы с оператором While.

Задачи

  1. Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2,3,4,5,6,7,8,9.
  2. Найти все трехзначные числа, сумма цифр которых равна данному целому числу.
  3. Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр.
  4. Найти все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры.
  5. Найти все двузначные числа, сумма квадратов цифр которых делится на 17.
  6. Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр.
  7. Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.
  8. Найти двузначное число, равное утроенному произведению его цифр.
  9. В каких двузначных числах удвоенная сумма цифр равна их произведению?
  10. Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? Написать программу решения этой задачи.
    Вычисление выражений:
    Дано натуральное n. Вычислить:
  11. ;
  12. ;

Дано действительное число х, натуральное число n. Вычислить:

  • x ( x — n )( x — 2 n )( x — 3 n )…( x — n2 );
  • ;
  • ;
    Дано натуральное n. Вычиcлить:
  • ;
  • ;

    Вычислить приближенно значение бесконечной суммы (справа от каждой суммы дается ее точное значение, с которым можно сравнить полученный ответ):

  • = ;
  • = ;
  • = ;

    Нужное приближение считается полученным, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше данного положительного числа e.

  • Даны два целых числа A и B (A 0). Вывести A в степени N: AN = A·A·. ·A (числа A перемножаются N раз).
  • Дано вещественное число A и целое число N (> 0). Вывести все целые степени числа A от 1 до N.
  • Дано вещественное число A и целое число N (> 0). Вывести 1 + A + A2 + A3 + . + AN.
  • Дано вещественное число A и целое число N (> 0). Вывести 1 — A + A2 — A3 + . + (-1)NAN.
  • Дано целое число N (> 1). Вывести наименьшее целое K, при котором выполняется неравенство 3K > N, и само значение 3K.
  • Дано целое число N (> 1). Вывести наибольшее целое K, при котором выполняется неравенство 3K 1). Вывести наименьшее из целых чисел N, для которых сумма 1 + 1/2 + . + 1/N будет больше A, и саму эту сумму.
  • Дано вещественное число A (> 1). Вывести наибольшее из целых чисел N, для которых сумма 1 + 1/2 + . + 1/N будет меньше A, и саму эту сумму.
  • Дано целое число N (> 0). Вывести произведение 1·2·. ·N. Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и выводить его как вещественное число.
  • Дано целое число N (> 0). Если N — нечетное, то вывести произведение 1·3·. ·N; если N — четное, то вывести произведение 2·4·. ·N. Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и выводить его как вещественное число.
  • Дано целое число N (> 2) и две вещественные точки на числовой оси: A, B (A 2) и две вещественные точки на числовой оси: A, B (A 0). Последовательность чисел AN определяется следующим образом: A1 = 2, AN = 2 + 1/AN-1, N = 2, 3, . Найти первый из номеров K, для которых выполняется условие |AK — AK-1| 0). Последовательность чисел AN определяется следующим образом: A1 = 1, A2 = 2, AN = (AN-2+ AN-1)/2, N = 3, 4, . Найти первый из номеров K, для которых выполняется условие |AK AK-1| Задачи повышенной сложности
    1. Определить, является ли заданное число совершенным , т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, число 6 совершенно: 6=1+2+3).
    2. Дано натуральное k. Напечатать k-ю цифру последовательности 1234567891011121314. в которой выписаны подряд все натуральные числа.
    3. Дано натуральное k. Напечатать k-ю цифру последовательности 149162536. в которой выписаны подряд квадраты всех натуральных чисел.
    4. Дано натуральное k. Напечатать k-ю цифру последовательности 1123581321. в которой выписаны подряд все числа Фибоначчи.
  • Ссылка на основную публикацию
    Adblock
    detector