Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

«Операторы циклов, их виды, особенности и области применения»

Содержание

Введение 4

1 ЯЗЫКИ ПРОГРАММИРОВАНИЯ. ОСНОВНЫЕ ПОНЯТИЯ И ТЕРМИНЫ 6

1.1. Понятие языка программирования 6

1.2 Классификация языков программирования 6

1.2.1 Классификация по степени ориентации на возможности ЭВМ 7

1.2.2 Классификация по типу решаемых задач 7

1.2.3 Классификация по степени ориентации на класс задач 7

1.2.4 Классификация по степени детализации алгоритма 8

1.2.5 Классификация по способу получения результата 8

1.2.6 Классификация по возможности создания новых типов данных и операций 

1.3 Обзор современных языков программирования высокого уровня 9

1.3.1 Язык программирования C++ 10

1.3.2 Язык программирования C# (Sharp) 10

1.3.3 Язык программирования PHP 11

1.3.4 Язык программирования Perl 11

1.4 Основные этапы разработки программ на языках программирования высокого уровня. 11

1.5 Выводы по главе 1 12

2 ЦИКЛЫ И МАССИВЫ В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ 13

2.1 Циклы в современных языках программирования 13

2.2 Общая информация о цикле For 13

2.3 Общая информация о цикле While 14

2.5 Операторы Break and Continue 16

2.6 Массивы 16

2.7 Выводы по главе 2 17

3 РАЗРАБОТКА ПРОГРАММЫ С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ И МАССИВОВ 19

3.1 Программа сортировки массива 19

3.2 Выводы по главе 3 21

ЗАКЛЮЧЕНИЕ 22

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 24

Введение

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

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

В качестве объекта исследования данной работы выступают языки программирования.

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

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

На основании поставленной цели сформулированы следующие задачи:

  1. Проанализировать информации из литературных источников по теме исследования.
  2. Классифицировать языки программирования.
  3. Провести обзор современных высокоуровневых языков программирования.
  4. Рассмотреть существующие виды циклов на примере использования их в современном языке программирования.
  5. Рассмотреть существующие виды массивов и их использование на примере современного языке программирования.
  6. Создать программу на языке высокого уровня, использующую циклы и массивы.

Во время проведения исследования были задействована литература и научные статьи следующих авторов: Фаронов, Баррон, Мюллер.

Объем фактического материала работы составляет 32 листа.

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

В главе «Языки программирования. Основные понятия и термины» проведет обзор и анализ различных языков программирования, проведена их классификация по нескольким признакам. Также тут рассмотрены основные этапы, из которых состоит разработка на любом современном языке высокого уровня.

В главе «Циклы и массивы в современных языках программирования» рассмотрены основные понятия массивов и циклов, показаны особенности их объявления и работы на примере языка С.

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

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

1 ЯЗЫКИ ПРОГРАММИРОВАНИЯ. ОСНОВНЫЕ ПОНЯТИЯ И ТЕРМИНЫ

1.1. Понятие языка программирования

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

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

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

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

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

1.2 Классификация языков программирования

Языки программирования стали активно развиваться в середине прошлого века. Некоторые из них уже не актуальные другие же используются до сих пор. Для их анализа, определения сходства и различия необходимо провести их классификацию [2].

1.2.1 Классификация по степени ориентации на возможности ЭВМ

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

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

1.2.2 Классификация по типу решаемых задач

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

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

1.2.3 Классификация по степени ориентации на класс задач

По степени ориентации на класс задач современные языки программирования можно разделить на процедурно-ориентированные и проблемно-ориентированные [3].

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

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

1.2.4 Классификация по степени детализации алгоритма

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

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

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

К языкам программирования сверхвысокого уровня можно отнести Алгол-68, в котором сделана попытка формализовать описание языка, приведшая к появлению двух типов программ: абстрактной и конкретной. Первый тип программы — абстрактный — создается программистом, конкретный — выводится из первого. Существует предположение, что при таком подходе принципиально невозможно породить синтаксически (а на практике и семантически) неверную конкретную программу.

1.2.5 Классификация по способу получения результата

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

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

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

Объектно-ориентированные языки, разработанные в середине 70-х гг., представляют собой отображение объектов реального мира, их свойств (атрибутов) и связей между ними при помощи специальных структур данных. При объектно-ориентированном подходе для каждого объекта создается своя структура данных, называемая классом и содержащая свойства объекта (поля) и процедуры для управления объектом (методы). При этом каждый класс может содержать несколько подклассов, описывающих частные случаи общего объекта. Все подклассы содержат в себе, наряду с общими свойствами, также еще ряд специфических свойств, отличающих их от первоначального класса. Такой принцип называется принципом наследования свойств (от общего к частному) [4].

1.2.6 Классификация по возможности создания новых типов данных и операций

По данному признаку языки программирования делятся на расширяемые и нерасширяемые.

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

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

1.3 Обзор современных языков программирования высокого уровня

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

1.3.1 Язык программирования C++

C++ является одним из самых основополагающих современных языков. Он представляет компилируемый язык программирования общего назначения со статическими типами данных. В нем можно реализовывать различные концепции программирования, но основным его отличием от языка С считается наличие в нем объектно-ориентированного подхода [5].

C++ может использоваться для разработки программ в любой области, начиная с написания драйверов и заканчивая созданием игр. Язык позволяет напрямую управлять аппаратными ресурсами, получать доступ к регистрам и памяти. При этом программист вправе сам решать использовать ли объектно-ориентированный подход или же работать с директивным программированием, обобщенным программированием. С++ поддерживается практически на любым платформах и видах процессоров, что позволяет писать программы для любых архитектур. Также C++ полностью поддерживает код, написанный на своем предшественнике, языке С.

Недостатки C++ в какой-то степени унаследованы от языка-предка ‑ языка Си, и вызваны изначально заданным требованием возможно большей совместимости с Си. Это такие недостатки, как:

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

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

1.3.2 Язык программирования C# (Sharp)

C# (произносится си-шарп) - объектно-ориентированный язык программирования. Он был разработан в 1998-2001 годах инженерами компании Microsoft под руководством Андерса Хейлсберга. Его назначением является создание приложений в платформе Microsoft .NET.

Компилятор для C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio. Синтаксис языка C# очень похож на синтаксис языка С [6].

1.3.3 Язык программирования PHP

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

Язык PHP обладает высокой скоростью и функционалом, довольно лёгок в изучении, может работать на различных платформах. Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений [7].

1.3.4 Язык программирования Perl

Perl - высокоуровневый интерпретируемый язык программирования общего назначения. Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе реализованные при помощи регулярных выражений. Перл унаследовал много свойств от языков Си, shell script, awk. Perl также знаменит огромной коллекцией дополнительных модулей CPAN [8].

1.4 Основные этапы разработки программ на языках программирования высокого уровня.

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

  1. Постановка задачи. Задача формулируется на уровне понятий проблемной области, к которой она относится, и должна быть понятна исполнителю (пользователю).
  2. Математическая формулировка задачи (формализация задачи). Формализация задачи фактически представляет разработку математической модели решаемой задачи и включает в себя:
    1. описание задачи с помощью формул;
    2. определение перечней исходных данных и получаемых результатов;
    3. задание начальных условий и точности вычислений.
  3. Выбор (поиск) метода решения задачи. В ряде случаев одна и та же задача может быть решена с помощью различных методов.
  4. Разработка алгоритма решения задачи. На данном этапе устанавливается необходимая логическая последовательность вычислений с учетом выбранного метода решения задачи и других действий, с помощью которых будут получены результаты.
  5. Написание программы на одном из имеющихся языков программирования .
  6. Тестирование и отладка программы при различных входных данных.

Обычно последний пункт может занимать значительное время, иногда сравнимое со временем разработки программного продукта. Современные языки высокого уровня вкупе со специальными средами разработки значительно сокращают длительность этого этапа [9-12].

1.5 Выводы по главе 1

В главе 1 была обобщена информация о языках программирования взятая из литературных источников. Описано понятие языка программирования, его назначение и выполняемые функции.

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

Были рассмотрены наиболее популярные на сегодняшний день языки программирования высокого уровня. Язык С++ является наиболее универсальным из них, он позволяет как создавать кроссплатформенные программы с высоким уровнем абстракции от оборудования, так и системные решения вроде драйверов и низкоуровневых программ. Такие языки как Perl и PHP нашли свое широкое применение в создании сайтов сети Интернет. Популярный на сегодняшний день C# создавался на основе языка C для работы с платформой .NET компании Microsoft.

2 ЦИКЛЫ И МАССИВЫ В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ

2.1 Циклы в современных языках программирования

В компьютерном программировании цикл представляет собой последовательность инструкций, которая непрерывно повторяется до тех пор, пока не будет достигнуто определенное условие. Как правило, выполняется определенный процесс, например, получение элемента данных и его изменение, а затем проверяется какое-либо условие, например, достиг ли счетчик заданного числа. Если это не так, то выполняется инструкция для возврата к первой команде в последовательности и ее повторения. Если условие достигнуто, выполняется следующая инструкция идущая после цикла. Цикл - это фундаментальная идея программирования, которая обычно используется при написании программ [13].

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

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

2.2 Общая информация о цикле For

FOR – один из самых распространенных циклов. Синтаксис цикла for:

for (инициализация переменной; проверка условия выхода из цикла; обновление значения переменной ) {

выполняемый код

}

Инициализация переменных позволяет либо объявить переменную, либо присвоить значение уже существующей переменной. Условие сообщает программе, что, пока условное выражение истинно, цикл должен продолжать повторяться. Обновления переменных является самым простым способом для цикла for обрабатывать изменение переменной. Обратите внимание, что точка с запятой разделяет каждый из этих разделов, что важно. Также обратите внимание, что каждый из разделов может быть пустым, хотя точки с запятой все равно должны быть там. Если условие пустое, оно оценивается как true, и цикл будет повторяться до тех пор, пока что-то не остановит его [14,15].

Рассмотрим пример использования цикла For:

#include <stdio.h>

int main()

{

int x;

for ( x = 0; x < 10; x++ ) {

printf( "%d\n", x );

}

getchar();

}

Результат выполнения программы показан на рисунке 1

Рисунок 1 – Результат работы цикла For

Эта программа является очень простым примером цикла for. Переменная x установлена на ноль, пока x меньше 10, программа вызывает функцию printf для отображения значения переменной x и добавляет 1 к x до тех пор, пока условие не будет выполнено [16].

2.3 Общая информация о цикле While

Синтаксис цикла While очень прост. Его основная структура: while (условие) {Код для выполнения, когда условие истинно}

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

Рассмотрим пример использования цикла While

#include <stdio.h>

int main()

{

int x = 0;

while ( x < 10 ) { /* While x is less than 10 */

printf( "%d\n", x );

x++;

}

getchar();

}

Этот код генерирует результат аналогичный изображенному на рисунке 1

Этот код длиннее, чем для цикла For. Самый простой способ думать о цикле состоит в том, что, когда он достигает скобки в конце, он возвращается к началу цикла, который снова проверяет условие и решает, будет ли повторять блок с кодом или остановится и перейдет к следующему оператору после блока [17].

2.4 Общая информация о цикле Do…While

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

do {

} while ( условие);

Условие проверяется в конце блока вместо начала, поэтому блок будет выполняться хотя бы один раз. Если условие истинно, мы возвращаемся к началу блока и выполняем его снова. Цикл do..while почти такой же, как цикл while, за исключением того, что тело цикла гарантированно выполняется хотя бы один раз. Рассмотрим пример кода с использованием Do..While

#include <stdio.h>

int main()

{

int x;

x = 0;

do {

printf( "Hello, world!\n" );

} while ( x != 0 );

getchar();

Результат выполнения кода представлен на рисунке 2

Рисунок 2 – Результат работы цикла Do..While

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

2.5 Операторы Break and Continue

Два ключевых слова, которые очень важны при работе с циклами – это Break и Continue. Команда Break приводит к выходу изцикла независимо от значения условия. Break полезен, если мы хотим выйти из цикла при особых обстоятельствах [18].

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

2.6 Массивы

Массив – это упорядоченный и именованный набор элементов одного типа.

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

Один из способов визуализации массива может быть следующим:

[][][][][][]

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

Синтаксис объявления массива следующий:

int examplearray[100];

Это сделает целочисленный массив со 100 слотами (местами, в которых хранятся значения массива). Чтобы получить доступ к определенному элементу детали массива, необходимо записат имя массива и в скобках - номер индекса. Это соответствует определенному элементу массива. Первый номер индекса всегда равен нулю, а последний - числу элементов минус единица. К примеру, индексы для массива из 100 элементов варьируются от 0 до 99.

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

[][][][][]

[][][][][]

[][][][][]

[][][][][]

[][][][][]

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

int two_dimensional_array[8][8];

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

2.7 Выводы по главе 2

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

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

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

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

3 РАЗРАБОТКА ПРОГРАММЫ С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ И МАССИВОВ

3.1 Программа сортировки массива

В данной курсовой работе была разработана программа, которая сортирует массив с помощью сортировки методом выбора. Программа написана на языке C++ и разработана в среде Microsoft Visual Studio 2017.

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

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

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

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

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

Для сортировки массива от наименьшего до наибольшего элемента методом выбора выполняются следующие шаги:

Начиная с элемента под индексом 0, ищем в массиве наименьшее значение.

Найденное значение меняем местами с нулевым элементом.

Повторяем шаги 1 и 2 уже для следующего индекса в массиве.

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

Вот пример работы этого алгоритма в массиве с 5-ью элементами:

{ 30, 50, 20, 10, 40 }

Сначала ищем наименьший элемент, начиная с индекса 0:

{ 30, 50, 20, 10, 40 }

Затем меняем местами наименьший элемент с элементом под индексом 0:

10, 50, 20, 30, 40 }

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

{ 10, 50, 20, 30, 40 }

И меняем его местами с элементом под индексом 1:

{ 10, 2050, 30, 40 }

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

{ 10, 20, 50, 30, 40 }

И меняем его местами с элементом под индексом 2:

{ 10, 20, 3050, 40 }

Ищем следующий наименьший элемент, начиная с индекса 3:

{ 10, 20, 30, 50, 40 }

И меняем его местами с элементом под индексом 3:

{ 10, 20, 30, 4050 }

Ищем следующий наименьший элемент, начиная с индекса 4:

{ 10, 20, 30, 40, 50 }

И меняем его местами с элементов под индексом 4 (самозамена — ничего не делаем):

{ 10, 20, 30, 40 50 }

На этом этапе массив отсортирован.

{ 10, 20, 30, 40, 50 }

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

Исходный код программы представлен ниже:

int main()

{

const int len = 5;

int array[len] = { 30, 50, 20, 10, 40 };

for (int i = 0; i < len - 1; ++i)

{

int smallest = i;

for (int current = i + 1; current < len; ++current)

{

if (array[current] < array[smallest])

smallest = current;

}

std::swap(array[i], array[smallest]);

}

for (int i = 0; i < len; ++i)

std::cout << array[i] << ' ';

getchar();

return 0;

}

Вначале работы программы массиву array присваиваются значения { 30, 50, 20, 10, 40 }.

Далее выполняются два цикла For один из которых вложен в другой.  Внешний цикл перебирает элементы один за другим (по очереди). В каждой итерации внешнего цикла внутренний цикл используется для поиска наименьшего элемента среди элементов, которые остались в массиве (начиная с i + 1). smallest отслеживает индекс наименьшего элемента, найденного внутренним циклом. Затем smallest меняется значением с i. И наконец, внешний цикл передает этот элемент, и процесс повторяется. Результат выполнения программы представлен на рисунке 3

Рисунок3 – Результат выполнения программы SortArray.exe

Как видно из рисунка, программа вывела на экран отсортированный массив. Следует отметить, что подобный метод сортировки не является быстрым или оптимальным. Так, для созданного в данной программе массива из 5 элементов, общее количество операций сравнения в циклах составило 52-1=24.

3.2 Выводы по главе 3

В данной главе была разработана программа по сортировке массива. Программа создана на языке С++ в среде Microsoft Visual Studio 2017. В данной программе выполняется сортировка массива методом выбора. В ней задается массив из пяти чисел и после ее запуска на экране отображается отсортированный массив.

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

ЗАКЛЮЧЕНИЕ

В данной курсовой работе было проведено исследование на тему «Операторы циклов, их виды, особенности и области применения.»

В главе 1 была обобщена информация о языках программирования взятая из литературных источников. Описано понятие языка программирования, его назначение и выполняемые функции.

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

Были рассмотрены наиболее популярные на сегодняшний день языки программирования высокого уровня. Язык С++ является наиболее универсальным из них, он позволяет как создавать кроссплатформенные программы с высоким уровнем абстракции от оборудования, так и системные решения вроде драйверов и низкоуровневых программ. Такие языки как Perl и PHP нашли свое широкое применение в создании сайтов сети Интернет. Популярный на сегодняшний день C# создавался на основе языка C для работы с платформой .NET компании Microsoft.

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

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

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

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

В главе 3 изученные знания были применены на практике. В данной главе была разработана программа по сортировке массива. Программа создана на языке С++ в среде Microsoft Visual Studio 2017. В данной программе выполняется сортировка массива методом выбора. В ней задается массив из пяти чисел и после ее запуска на экране отображается отсортированный массив.

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Языки программирования // Wikipedia. [Электронный ресурс]. URL: https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F (дата обращения: 24.09.2017)
  2. Фаронов Валерий Васильевич. Delphi. Программирование на языке высокого уровня: Учебник для вузов / В. В. Фаронов. — СПб.: Питер, 2007. — 639 с.: ил. — (Учебник для вузов). — Библиогр.: с. 628 (7 назв.)
  3. Баррон, Дэвид Введение в языки программирования; М.: Мир - Москва, 2011. - 192 c.
  4. Григорьев, А.Б. О чем не пишут в книгах по Delphi; БХВ-Петербург - Москва, 2013. - 576 c.
  5. Гудман, Д. Java Script и DHTML. Сборник рецептов для профессионалов; СПб: Питер - Москва, 2013. - 523 c.
  6. Delphi 7 / А. Д. Хомоненко [и др.]; под ред. А. Д. Хомоненко. — СПб.: БХВ-Петербург, 2006. — 1200 с.: ил. — (В подлиннике). — Предм. указ.: с. 1196-1200
  7. Скворцова Л.А., Чудновская Н.Д. Лабораторный практикум по программированию в Delphi. Электронная версия
  8. Кристиансен, Том; Торкингтон, Натан Perl: библиотека программиста; СПб: Питер - Москва, 2013. - 736 c.
  9. Либерти, Джесс Освой самостоятельно C++ за 21 день; М.: Вильямс - Москва, 2012. - 816 c.
  10. Мугал, Халид А.; Расмуссен, Рольф В. Java. Руководство по подготовке к сдаче сертификационного экзамена CX-310-035 (+ CD-ROM); М.: Кудиц-образ - Москва, 2012. - 688 c.
  11. Муртаф, Б. Современное линейное программирование; Мир - Москва, 2010. - 224 c.
  12. Мюллер, Дж. Visual C++ 5; СПб: BHV - Москва, 2011. - 720 c.
  13. Нейгел, Кристиан С# 2005 для профессионалов (+CD-ROM); М.: Диалектика - Москва, 2010. - 582 c.
  14. Нотон, Патрик Java. Справочное руководство. Все, что необходимо для программирования на Java; М.: Бином - Москва, 2012. - 448 c.
  15. Петзолд, Ч. Программирование для Windows 95; СПб: BHV - Москва, 2013. - 279 c.
  16. Просиз, Дж. Программирование для Microsoft .NET (+ CD-ROM); М.: Microsoft Press. Русская Редакция - Москва, 2010. - 704 c.
  17. Робинсон, С.; Корнес, О.; Глинн, Д. и др. C# для профессионалов; М.: Лори - Москва, 2011. - 996 c.
  18. Холл, П. Вычислительные структуры: Введение в нечисленное программирование; М.: Мир - Москва, 2010. - 214 c.
  19. Чан, Теренс Системное программирование на C++ для Unix; БХВ - Москва, 2010. - 592 c.
  20. Абельсон, Х.; Сассман, Дж. Структура и интерпретация компьютерных программ; М.: Добросвет - Москва, 2012. - 608 c.