Циклические алгоритмические структуры

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

Рубрика Программирование, компьютеры и кибернетика
Вид лекция
Язык русский
Дата добавления 06.09.2017
Размер файла 19,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Циклические алгоритмические структуры

1. Циклическая алгоритмическая структура

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

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

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

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

2. Операторы цикла

Операторы цикла предназначены для организации повторяющихся действий. Примеры:

FOR k:=0 TO 20 DO s:=s+k/(k*k+1);

FOR i:=k+10 DOWNTO 0 DO i:=i-1;

WHILE x<=b DO

BEGIN y:=Sin(2*x)+Sqr(Cos(x/2));x:=x+h;END;

REPEAT

y:=Sin(2*x)+Sqr(Cos(x/2));x:=x+h

UNTIL x>b;

В первом примере приведен оператор цикла с параметром, заданным по нарастанию (шаг изменения равен 1). Во втором - параметр задан по убыванию (шаг изменения равен -1).

Общий вид оператора цикла с параметром:

FOR <переменная>:=<выражение1> TO <выражение2> DO <оператор>

или

FOR <переменная>:=<выражение1> DOWNTO <выражение2> DO <оператор>.

Параметр цикла, а вместе с ним его начальное и конечное значения, в общем случае могут иметь любой из дискретных типов. Если величина начального значения параметра цикла (<выражение1>) больше конечного (<выражение2>), то есть параметр цикла задается по убыванию, а сам оператор цикла записан со служебным словом TO, то оператор тела цикла не выполнится ни разу. Тоже самое произойдет, если параметр цикла задан по нарастанию, а оператор цикла записан со служебным словом DOWNTO.

В третьем примере (цикл с предусловием) тело цикла, представляющее собой составной оператор, будет выполняться (повторяться), пока значение выражения x<=b остается равным True. В общем случае цикл с предусловием имеет вид:

WHILE <условие> DO <оператор>.

Тело цикла WHILE, как и в случае оператора цикла с параметром, вообще говоря, состоит из единственного оператора, стоящего после служебного слова DO. Чтобы выполнить более одного оператора, надо использовать составной оператор.

В последнем примере (в котором приведен цикл с постусловием) наоборот, операторы тела цикла будут выполняться, пока неравенство x>b остается равным False. Общий вид оператора цикла с постусловием следующий:

REPEAT [<оператор1>;<оператор2>;…;<оператор N>] UNTIL <условие>.

Между служебными словами REPEAT и UNTIL, так же как и между BEGIN и END, может стоять любое количество любых операторов (в том числе и ни одного). Последний пример с оператором цикла с постусловием эквивалентен третьему.

3. Типовые алгоритмы

Пример 1. Вычисление суммы последовательности чисел, заданных общей формулой.

Составить программу для вычисления суммы:

Решение:

Const

N=17;

var

i:Integer;

s:Real;

begin

s:=0;

for i:=1 to N do s:=s+(2*i+1)/(i*i+2);

Writeln(' s = ',s:13:7);

Readln

end.

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

Пример 2. Вычисление значений функции на отрезке (табулирование функции).

Задана функция:

Составить программу для вычисления значений функции f(x) на отрезке [-3;4] с шагом x=0,3.

Решение:

var

xn,xk,h,x,y:Real;

begin {Начало головной программы}

Readln(xn,xk,h);

x:=xn;

while x<=xk do

begin

if x<=-1 then y:=Sqrt(1-x);

if Abs(x)<1 then y:=x/(2*x*x+3);

if x>=1 then y:=Sqrt(x+1);

Writeln(' x = ',x:12:6,' f(x) = ',y:12:6);

x:=x+h

end;

Readln

end.

Табулирование функции непосредственно реализовано с помощью оператора цикла с предусловием. Функция, как видно из постановки задачи, задана тремя ветвями: на интервале от - до -1 она принимает значения выражения ; на интервале [-1;1] - значения выражения ; и, наконец, на интервале от 1 до + - значения выражения . Вычисление значений функции во всех трех ветвях реализовано с использованием трех условных операторов IF в сокращенной форме IF...THEN.... Вычисление значений аргумента осуществляется так. Сначала задается его начальное значение (x:=xn), затем в конце цикла значение x каждый раз изменяется, увеличиваясь на шаг h. Вычисленные аргумент x и значение функции y выводятся на экран.

Пример 3 (вариант примера 1). Вычисление суммы элементов массива.

Задан одномерный массив действительных чисел ak, k = 1,2, …, 20. Составить программу для вычисления суммы

.

Решение:

Const N=20;

var

k:Integer;s:Real;

a:array[1..N] of Real;

begin

for k:=1 to N do Read(a[k]);Readln;

s:=0;for k:=1 to N do s:=s+a[k];

Writeln(' s = ',s:13:7);

Readln

end.

Массив описан в разделе VAR. Элементы массива вводятся с помощью клавиатуры в одной строке, отделяются друг от друга пробелами. В конце ввода следует нажать [Enter]. Сумма вычисляется с помощью оператора цикла с параметром; ее начальное значение, равное нулю, задается до выполнения цикла, затем в цикле, как и в предыдущем примере производится ее накопление.

Пример 4. Вычисление среднего геометрического положительных элементов одномерного массива.

Задан одномерный массив ak, k = 1,2, …, 25. Вычислить

.

Решение:

Const N=25;

var

k,m:Integer;p:Real;

a:array[1..N] of Real;

begin

for k:=1 to N do Read(a[k]);Readln;

p:=1;m:=0;

for k:=1 to N do

if a[k]>0 then begin p:=p+a[k];m:=m+1;end;

if m<>0 then Writeln(' p = ',Exp(Ln(p)/m):13:7)

else Writeln('No solve');

Readln

end.

Известно, что среднее геометрическое равно корню степени m из произведения заданных чисел, где m - количество этих чисел. Параметр m вначале задан равным нулю (в предположении, что положительных элементов в массиве может не быть). В программе выполняется проверка на положительность очередного элемента: если текущий элемент больше нуля, то, во-первых, выполняется умножение и, во-вторых, увеличение величины m на единицу (так как увеличилось на единицу число положительных элементов массива). Но, поскольку положительных элементов в массиве может не оказаться вообще, после завершения оператора цикла параметр m останется, равным нулю. В данном случае задача решений не имеет, что и должна вывести программа. Если же окажется, что этот параметр отличен от нуля, то задача имеет решение. Так как операция "возведение в степень" в языке Object Pascal отсутствует, ее придется заменить на некоторое выражение (в каждом конкретном случае - свое), связывающее экспоненту и логарифм (по определению логарифма ), что и реализовано в программе.

Пример 5. Нахождение наименьшего (наибольшего) элемента в массиве.

Задан одномерный массив ak, k = 1,2, …, 15. Найти

.

Решение:

Const N=15;

var

k:Integer;min:Real;

a:array[1..N] of Real;

begin

for k:=1 to N do Read(a[k]);Readln;

min:=a[1];

for k:=2 to N do

if a[k]<min then min:=a[k];

Writeln(' min = ',min:10:4);Readln

end.

В данной программе реализован так называемый метод "пузырька". Сначала предполагается, что наименьшим элементом является первый элемент в массиве. Затем в цикле выполняется проверка. Если очередной элемент меньше текущего минимального, то последнему присваивается значение этого элемента, в противном случае ничего не выполняется.

Размещено на Allbest.ru


Подобные документы

  • Решение задач, прямо связанных с применением циклов и массивов. Условия применения различных видов циклической структуры. Операторы цикла с предусловием while, постусловием do-while и for. Особенности работы с одномерными и двумерными массивами.

    курсовая работа [1,1 M], добавлен 31.08.2019

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

    курсовая работа [156,8 K], добавлен 07.11.2012

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

    курсовая работа [63,0 K], добавлен 27.12.2012

  • Работа с массивами, их ввод и вывод, организация программ циклической структуры. Способы описания и использования массивов, алгоритмы их сортировки, сортировка выбором и вставками. Алгоритмы поиска элемента в неупорядоченном и упорядоченном массивах.

    лабораторная работа [14,2 K], добавлен 03.10.2010

  • Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.

    контрольная работа [210,5 K], добавлен 25.03.2015

  • Свойства алгоритма как определенного содержания и порядка действий над объектами. Базовые алгоритмические структуры: следование, ветвление, повторение. Структурированные типы данных. Реализация на языке программирования задач при помощи алгоритмов.

    контрольная работа [598,6 K], добавлен 06.12.2014

  • Постановка задач автоматизированной системы управления "Автосервис". Описание технологий проектирования и инструментальных средствах. Проектирование структуры базы данных. Перечень функций в соответствии с функциональными блоками в диаграмме IDEFO.

    дипломная работа [3,2 M], добавлен 06.03.2010

  • Характеристика алгоритма, его свойств, способов записи. Особенности, типовые примеры линейной алгоритмической структуры. Анализ разветвляющей алгоритмической структуры. Изучение основных операторов циклов. Эволюция, классификация языков программирования.

    контрольная работа [492,2 K], добавлен 15.02.2010

  • Реализация основных алгоритмических структур. Усеченный условный оператор и оператор exit. Цикл с параметром (счетный цикл). Распечатка таблиц функций. Средства разработки программ на языке Free Pascal. Разработка игрового приложения "Быки и коровы".

    курсовая работа [1,9 M], добавлен 23.12.2015

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

    реферат [21,0 K], добавлен 13.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.