Файл: Операторы циклов, их виды, особенности и области применения (История создания языка).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 411

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 3- Блок-схема цикла с постусловием

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

Далее целесообразно привести синтаксис операторов цикла.

2.1. Арифметический оператор цикла

Синтаксис оператора цикла с фиксированным числом шагов выглядит следующим образом:[18]

FOR параметр цикла = значение 1 TO значение 2 DO оператор

или

FOR параметр цикла = значение 1 DOWNTO значение 2 DO оператор

Оператор FOR вызывает один оператор или несколько операторов, которые располагаются после ключевого слова DO, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.

Параметр цикла, переменные «значение 1» и «значение 2», то есть начальное и конечное значения параметра цикла, должны иметь перечисляемый тип. Если используется арифметический цикл с ключевым словом TO, значение параметра цикла увеличивается на 1 при каждом выполнении тела цикла. Если же используется цикл с ключевым словом DOWNTO, значение переменной цикла уменьшается на 1 при каждом выполнении тела цикла. Особенностью данного типа цикла является требование не изменять параметр цикла вручную в теле цикла.

В языке Pascal в условных операторах, операторах цикла и подпрограммах используются, так называемые, «операторные скобки». В частности в операторах цикла, в арифметическом цикле и цикле с предусловием, если тело цикла состоит из нескольких операторов (двух или больше), они (операторы) заключаются в операторные скобки «begin … end». В литературе эти несколько операторов, заключенных в операторные скобки, называют составным оператором.

2.2. Итерационный цикл с предусловием

Как упоминалось выше в работе, итерационные циклы, как предусловием, так и с постусловием, используются в случае, когда число повторений не известно. Блок-схема цикла с предусловием приведена на рисунке 2. Очень часто итерационные циклы используются в задачах табулирования функций, когда задана функциональная зависимость на заданном интервале с определенной величиной шага, чаще всего шаг не является целым числом равным единице.

Синтаксис оператора цикла с предусловием:


WHILE логическое выражение DO тело цикла

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

Чаще всего тело цикла содержит несколько операторов, то есть является составным оператором, следовательно, должны использоваться операторные скобки «begin …end». Иногда случается, так называемое, зацикливание программы. Данная ситуация возникает в том случае, когда результат вычисления логического выражения всегда есть истина, поэтому необходимо контролировать правильность написания программы, особенное внимание следует уделять изменению параметра цикла.[20]

В качестве примера используется программа 1, которая печатала 10 звездочек. Тест программы и результат работы приведены на экранной форме 7. (Рис.4)

Рисунок 4- Экранная форма 1 Программа с циклом с предусловием

Более показательным является использование данного типа цикла в программах табулирования функций. Пусть требуется выполнить табулирование функции y=3(x+1)3/2x на интервале, где х изменяется от 1 до 3 с шагом 0,25. Программы 4 приведена на экранной форме 8.(Рис.5)[6,c.208]

Рисунок 5- Экранная форма 2 Исходный код программы 4

Результаты работы программы 4 приведены на экранной форме 9.(Рис.6)

Рисунок 6- Экранная форма 3 Результаты работы программы 4

2.3. Итерационный цикл с постусловием

Как говорилось выше в курсовой работе цикл с постусловием, в любом случае, выполнится хотя бы один раз, потому что тело цикла «располагается» перед условием. Еще одним отличием является тот факт, что в это цикле не используются операторные скобки. Синтаксис данного оператора цикла:[3,c.496]

repeat

<операторы>

until (условие);

Алгоритм работы цикла следующий: выполняется операторы тела цикла, затем проверяется условие, если условие ложно, то вновь выполняются операторы тела цикла, если же условие истинно, то осуществляется выход из цикла. Как и в цикле с предусловием, в этом цикле, параметр изменяется принудительно программистом. Как пример, рассмотрена программа табуляции функции предыдущего раздела, программа 5. Исходный текст программы 5 представлен на экранной форме 10. Результаты работы на экранной форме 9.(Рис.7)


Рисунок 7- Экранная форма 4 Исходный код программы 5

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

Следует отметить, что все три цикла могут содержать в теле цикла операторы или команды «принудительного выхода» из цикла. Команда break прерывает выполнение цикла, то есть осуществляет безусловный выход из цикла. Схема работы оператора break представлена рисунке 8. [2,c.624]

break

Рисунок 8- Схема использования оператора break

Команда continue прерывает выполнение тела цикла и возвращает управление в начало цикла. Схема работы оператора continue представлена рисунке 9.[5,c.544]

continue

Рисунок 9- Схема работы команды continue

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

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

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

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

Циклы любых типов могут быть вложенными друг в друга неограниченное количество раз. На схеме изображена конструкция из трех вложенных циклов (Рис.10)[10,c.112]

Рисунок 10 - Схема вложенных циклов

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


Глава 3. Циклические алгоритмы в задачах с массивами

При изучении языка программирования основополагающим понятием является термин «тип данных». Прежде чем перейти к изучению структурированных типов данных, изучаются базовые типы. Базовыми типами данных в Паскале являются целый - integer , word , byte , longint, вещественный - real, символьный - char, логический – boolean. Любой алгоритм можно запрограммировать с помощью этих четырех базовых типов. [14,c.176]

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

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

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

Самой распространенной структурой, которая реализована практически во всех языках программирования, является массив.

Массив – это поименованная совокупность однотипных данных. Любой массив состоит из конечного числа элементов. Как следует из определения массива, все элементы массива имеют один и тот же базовый тип. Другими словами, структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Этими другими однотипными элементами могут быть массивы, записи, массивы записей и др. [12,c.472]

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

Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Обычно тип индекса - это целочисленный тип (integer, word или byte ), но может быть и логический и символьный.

В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив). Объявление пользовательского типа данных «массив» в программе выглядит следующим образом:[17]


Type < имя _ типа >= array [ I ] of T;

где I – тип индекса массива, T – тип его элементов.

Объявлять массив можно другим способом, в разделе описания переменных и описывать сразу переменные типа массив, т.е. в:

Var a,b: array [ I ] of T;

Как было указано выше, тип индекса (integer, word или byte ) характеризуется некоторым диапазоном значений. Диапазону значений соответствует порядковый тип данных: I1 .. IN. Например, индексы могут изменяться в диапазоне 1..15 или ‘a’..’ n’.

При этом длину массива Паскаля характеризует выражение:

ord (IN) - ord (I1) + 1

Вот, например, объявление двух типов: vect в виде массива Паскаля из 17 целых чисел и strk в виде массива из 130 символов:

Type

Vect=array [1..17] of integer;

Strk=array [0..129] of char;

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

Тогда переменные типа vect и strk должны быть следующим образом:

Var mass1: vect;

mass2: strk;

После того, как переменные объявлены, далее в программе пользователь может обращаться к отдельным элементам массива mass1 или mass2 .

Например, фрагмент программы может содержать следующие операторы:[19]

mass1 [5]:=23;

mass2 [19]:=’ w ’;

mass1 [7]:= mass1[5]*2;

writeln (mass2[1], mass2[3])

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

Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами диапазона допустимых значений индекса. В этом случае, будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива». На экранной форме 11 приведен пример программы с ошибкой массива Паскаля.(Рис.11)[13,c.128]

Рисунок 11- Экранная форма 5 Программа с ошибкой «выход за пределы массива»

На экранной форме 12 приведено описание ошибки в программе.(Рис.12)

Рисунок 12- Экранная форма 6 Описание ошибки «выход за пределы массива»

Следует заметить, что текст программы полностью соответствует синтаксису языка. Программа пройдет трансляцию, но на этапе выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n*2=90, компьютер сделает попытку обратиться к элементу массива a[90], но такого элемента нет, поскольку описан массив размерностью 80.