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

Обзор языков программирования высокого уровня (Реализация цикла с предусловием)

Содержание:

Введение

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

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

Большое количество компьютерных программ создано при использовании языков высокого уровня, например, Fortran, Си++, Pascal и др. Причем многие из них были разработаны в 60-70-х годах, однако остаются актуальны до сих пор.

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

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

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

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

Для достижения поставленной цели необходимо реализовать следующие задачи:

1) осветить теоретические сведения о языках программирования высокого уровня;

2) представить классификацию языков программирования высокого уровня и выявить их и достоинства и недостатки;

3) рассмотреть виды циклических структур;

4) рассмотреть понятие массива и его реализация средствами языков программирования высокого уровня;

5) продемонстрировать практическую реализацию циклических структур и массивов.

1. Языки программирования высокого уровня

1.1. Языки программирования

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

В связи с этим практически все программы разрабатываются с использованием языков программирования. Программу можно создать и средствами естественного языка – метаязыка, но перевести автоматически такую программу на машинный язык невозможно из-за высокой неоднозначности естественного языка [13].

Язык программирования это искусственный язык. От естественных он отличается ограниченным количеством «слов», значение которых понятно транслятору, и очень строгими правилами записи операторов. Совокупность таких требований определяет синтаксис языка программирования. Смысл каждой команды и конструкций языка образует семантику языка программирования [6]. Нарушение формы записи программы приводит к непониманию транслятором назначения оператора и в следствии появляется сообщение о синтаксической ошибке. Правильное написание, но не соответствующее алгоритму использование команд языка, приводит к семантической ошибке. Процесс поиска ошибок в программе называется тестированием, а процесс устранения ошибок – отладкой.

Языки программирования можно разбить на два основных вида по степени ориентации на специфические возможности электронных вычислительных машин: машинно-зависимые и машинно-независимые. Программы, написанные на первом виде языков, привязываются к ЭВМ только определенного типа, а программа на машинно-независимом языке имеет возможность переноситься на ЭВМ другого типа [11].

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

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

Рисунок 1 – Классификация языков программирования

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

– Фортран – основная цель языка программирование научно-технических задач;

– Кобол – язык, ориентированный на решение задач обработки данных, применяется для решения учетно-экономических и управленческих задач;

– Алгол – использовался для записи алгоритмов, построенных в виде последовательности процедур;

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

Функциональное или аппликативное программирование, по словам А.П. Ершова, это «способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение име­ни функции, а единственным правилом композиции – оператор суперпозиции функций. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».

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

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

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

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

Представителями данного вида программирования являются языки Visual Basic, Delphi, C++ и др [9].

1.3. Возможности современных языков программирования высокого уровня

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

История развития языков программирования высокого уровня довольно обширна и весьма разнообразна, ее начало принято относить к середине прошлого века – моменту создания первого языка программирования высокого уровня «Фортран»[17]. Именно с появлением ЯП ВУ компьютеры начали реализовывать весь свой потенциал.

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

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

Кроме того, эволюционируя, языки программирования получали все больше математических функций: рекурсия, массивы, использование локальных переменных. В связи с этим были заложены основные языки программирования, базой которых мы пользуемся до сих пор, а именно: COBOLPascal, C. Параллельно развивались логические языки, такие как, Prolog(1972), но в силу своих функциональных особенностей они использовались редко и не для инженерно-технических расчетов.

Следующая веха развития программирования – появление процедур и функций в структурном программировании, что позволило объединить разнородные данные и сделать программы автономными и управляемыми. На этом этапе развития языков программирования было выявлено: когда программа достигает определенной длины, то она уже не может обрабатывать правильно сложные запросы. Примером языка, в котором проявился этот недостаток, является ЯП ВУ «Simula - 67».

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

Языки создаются и эволюционируют постоянно. Их влияние нельзя недооценивать на обработку современных научно-технических расчетов, на моделирование сложных процессов и систем в различных прикладных областях экономической деятельности человечества. Эволюцию и взаимовлияние ЯП ВУ задает генеалогическое дерево[17].

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

Одним из ярких представителей языков нового времени является язык Elm. Ключевая особенность этого языка - отладчик реального времени: можно изменять код в реальном времени и наблюдать, как меняется тот или иной параметр. Все действия записываются, перематываются и переигрываются.

Elm - функциональный язык программирования для создания GUI – Graphical User Interface, использующий синтаксис в стиле функционального языка программирования «Haskell». Родственные связи этих языков показаны на схеме (рис. 2).

Рисунок 2 - Связи языка Elm

Этот функциональный язык удобен и прост – программный код в несколько строк обеспечивает пользователю возможность рисования мышью любой фигуры в клиентской программе или в окне браузера. Интересна вычислительная модель реактивного функционального программирования – Functional Reactive Programming (FRP), положенная в основу данного языка. Данная парадигма ориентирована на работу с динамическими потоками данных и позволяет создавать приложения с высокой степенью интерактивности. Концепция FRP впервые была предложена Коналом Эллиоттом (Conal Elliott) при разработке функционального предметно-ориентированного языка для программирования анимации[26].

Кроме того, Elm в современной практике программирования успешно используется для разработки веб-приложений. Исходный код, написанный с помощью этого языка, легко компилируется в коды HTML, CSS и JavaScript и органично встраивается в программный блок на странице сайта.

Необходимо отметить, что на сегодняшний день парадигма функционального программирования претерпевает подъем и другим представителем этого направления, заслуживающим внимания, является язык Swift от компании Apple. Этот язык направлен на развитие интерактивности приложения с мобильными устройствами и в какой-то степени аналогичен Elm.

Если рассмотреть генеалогические связи этого языка (рис. 3), то можно выделить конкретные преимущества данного ЯП ВУ.

Рисунок 3 – Структурные связи Swift

Swift сочетает в себе понятность именованных параметров и мощь динамической объектной модели Objective-C, а также открывает доступ к уже существующим интерфейсам прикладного программирования для различных операционных систем [29].

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

Кроме того, скорость реализации некоторых алгоритмов на Swift в 3,9 раза выше, чем на Python, и лаконичней, ввиду того, что в языке максимально искоренѐн такой недостаток как многословность, присущая Objective-C [24].

Если рассмотреть программные продукты ведущих корпораций – разработчиков современного программного обеспечения, то интересен для исследования обучаемыми язык программирования высокого уровня «Go» от корпорации Google (рис.4).

Рисунок 4 - Связи языка Go

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

Первоначальная разработка Go началась в сентябре 2007 года, а его непосредственным проектированием занимались авторы, стоявшие у истоков создания языка C и операционной системы UNIX: Роберт Гризмер, Роб Пайк и Кен Томпсон [27].

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

Многоядерность, охватившая мир вычислительной техники нынешнего столетия, наложила отпечаток и на этот язык. Язык Go обладает особенностью – он предназначен для поддержания параллельного выполнения на нескольких процессорах (ядрах) разработанных на нѐм пользовательских приложений, Для этого любую функцию можно запустить выполняться в отдельном потоке (оператором Go). Параллельно выполняющиеся ветви ведут себя как сопрограммы, и могут обмениваться между собой синхронными сообщениями через двунаправленные каналы. Через каналы могут передаваться данные любых типов.

Как показывает анализ родственных связей, язык программирования высокого уровня «Go» опирается на мощный фундамент языков С и С++, а также поддержку компании Google, одной из самых крупных ИT-компаний на сегодняшний день.

Веб-программирование – тот раздел программирования, к которому студенты испытывают огромный интерес, поэтому стоит обратить внимание на современные ЯП ВУ Dart и TypeScript, как альтернативу уже широко известному языку программирования JavaScript.

Dart – действительно новый язык и при его разработке были учтены следующие аспекты, которые так или иначе мешали его «родственникам» (рис. 5).

Рисунок 5 - Генеалогические связи языка Dart

Во-первых, этот язык структурированный, и в то же время ориентирован на разработку веб-программ.

Во-вторых, он приемник уже существующих языков JavaScript, Go – которые популярны среди разработчиков программного кода, и переход к Dart и обучение ему, естественно, упрощается. Как и в JavaScript, в Dart используется синтаксис похожий на язык C. Но различие в том, что JavaScript основывается на прототипах, тогда как объекты в Dart определяются при помощи классов и интерфейсов(как в C++ или Java). Также Dart позволяет дополнительно задать переменные со статическими типами.

Как показывает короткий промежуток существования этого языка, он становится столь же привычным, динамичным и гибким языком, как и JavaScript, а написанные на нѐм коды – быстрее и легче в выполнении. Кроме того, созданные на этом языке программы – высокопроизводительны и успешно работают на вычислительных устройствах широкого класса: от смартфонов до серверов. Очень важен для любого ЯП ВУ стандарт, и 4 июля 2014Ассоциацией стандартизации информационных и коммуникационных технологий была одобрена первая редакция стандарта языка [28].

Кроме компании Google, компания Microsoft представила свой аналог JavaScript – TypeScript (рис. 6).

Рисунок 6 - Связи языка TypeScript

TypeScript – язык программирования, как уже было отмечено выше, может позиционироваться как средство разработки веб-приложений, расширяющее возможности JavaScript. Разработчиком языка TypeScript является Андерс Хейлсберг, создавший ранее TurboPascal, Delphi и C#.

Язык работает в любом браузере, поддерживается в таких популярных средах визуального программирования, как Microsoft Visual Studio, и совместим с некоторыми JavaScript-библиотеками, среди которых jQuery. Язык TypeScript является обратно совместимым с JavaScript (может легко

компилироваться в этот язык) [25].

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

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

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

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

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

Прикладная наука развивается в эпоху межсетевых отношений и больших хранилищ данных[3-5, 11, 12]. Современные студенты, пользователи (и, возможно, будущие разработчики) интернет-сервисов и веб-технологий, баз данных и баз знаний, банков данных, должны уметь выбирать правильные и эффективные инструменты решения прикладных задач, мыслить категориями современных языков программирования.

1.3 Этапы разработки программ и основные критерии оценки качества программ, разработанных на языке программирования высокого уровня

С помощью компьютера можно решать задачи разнообразного направления. Рассмотрим этапы разработки программ для задач научно-технического направления [7]. На рисунке 7 представлены основные этапы разработки.

1

2

3

4

6

5

7

Рисунок 7 – Этапы решения задач на компьютере

Первый этап – формирование цели решения задачи, анализ требований, определение исходных данных.

Второй этап – составление формальной модели данных.

Третий этап – формализация задачи.

Четвертый этап – разбиение процесса обработки данных на элементарные действия и определение последовательности их выполнения.

Пятый этап – запись алгоритма на языке программирования.

Шестой этап – готовность альфа-версии, проверка наличия ошибок и переход к бета-тестированию.

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

В таблице 1 представлены основные показатели качества программного средства.

Таблица 1 – Показатели качества ПС

Показатель

Характеристика

Надежность

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

Сопровождаемость

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

Удобство применения

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

Эффективность

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

Универсальность

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

Корректность

Характеризуют степень соответствия ПС требованиям к обработке данных и общесистемным требованиям

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

2 Организация алгоритмов циклических структур

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

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

  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку;
  • подняться на одну ступеньку.

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

1) Подошел к лестничному маршу.

2) Подняться на одну ступеньку.

3) Если поднялись меньше чем на 9 ступенек, повторить п.2.

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

Классификация циклических структур представлена на рисунке 8.

Рисунок 8 – Классификация циклических структур

Каждый цикл состоит из определенной последовательности операторов. Блок, ради выполнения которого и организуется цикл, называется телом цикла. Остальные операторы служат для управления процессом повторений: это начальные установки, проверка условия продолжения цикла и модификация параметра цикла [2]. Один проход цикла называется итерацией. На рисунке 9 представлены структурные схемы итерационных циклов.

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

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

Начальные условия

Выражение

Операторы

Начальные условия

Модификация параметра цикла

Начальные условия

Выражение

Операторы

Начальные условия

Модификация параметра цикла

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

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

Рисунок 9 – Структурные схемы операторов цикла

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue и goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные условия [16].

В Паскале существуют три вида циклов:

  • цикл с предусловием while … do;
  • цикл с постусловием repeat … until;
  • цикл с параметром for.

Рассмотрим более подробно каждый из видов цикла.

2.1 Реализация цикла с предусловием

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

while выражение do оператор;

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор. Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор [15].

Представим практическую реализацию данного оператора.

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

Представим словесный алгоритм:

1) ввести исходные данные;

2) взять первое значение аргумента;

3) определить, какому промежутку оно принадлежит;

4) вычислить значение функции по соответствующей формуле;

5) вывести строку таблицы;

6) перейти к следующему значению аргумента;

7) если оно превышает конечное значение, повторить шаги 3-6, иначе закончить.

Шаги 3-6 повторяются несколько раз, поэтому рационально для них организовать цикл. Введем следующие переменные:

х0 – начальное значение аргумента;

xn – конечное значение аргумента;

h – шаг изменения аргумента; k – параметр.

Все введенные переменные будут вещественного типа. Листинг программы будет иметь следующий вид:

program tab_func;

uses crt;

var x0,xn: real; //начальное и конечное значение аргумента

h: real; // шаг изменения аргумента

k: real; // параметр

x,y: real; //текущие значения аргумента

begin

writeln('Input x0,xn,h,k');

readln(x0,xn,h,k);

writeln(' -----------------------');

writeln('| X | Y |');

writeln(' -----------------------');

x:=x0;

while x<=xn do

begin

if x<-3 then y:=2*k;

if (x>=-3) and (x<=3) then y:=sqr(x);

if x>3 then y:=k;

writeln('|',x:9:2,' |',y:9:2,' |');

x:=x+h

end;

writeln(' -----------------------');

readkey

end.

Параметром этого цикла является х. Для верной работы цикла нужно параметру присвоить начальное значение до входа в цикл (шаг 2). Блок модификации параметра цикла представлен оператором, выполняющимся на шаге 6. Для перехода к следующему значению аргумента текущее значение наращивается на величину шага и заносится в ту же переменную [20]. Рисунок 10 демонстрирует результат работы данной программы.

Рисунок 10 – Результат работы программы

Рассмотрим еще один пример на реализацию цикла с предусловие.

Пример. Вывести все четные числа, начиная с числа n и до числа m. Числа n и m задает пользователь.

Введем следующие переменные:

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

Листинг программы примет вид:

Program even_numbers;

uses crt;

var n,m:integer;

Begin

clrscr;

writeln('Input n and m (n<=m)');

readln(n,m);

writeln('even numbers in an interval from ',n,' to ',m);

while m>n do

begin

if n mod 2=0 then writeln(n);

n:=n+1;

end;

readkey;

End.

Рисунок 11 демонстрирует результат работы данной программы.

Рисунок 11 – Результат работы программы

2.2 Реализация цикла с постусловием

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

repeat

тело цикла

until выражение;

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

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

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

Рассмотрим задачу, в которой реализуется цикл с постусловием.

Пример. Определить, является ли введенное число простым.

Введем следующие переменные:

n – величина, обозначающая введенное число; тип – integer;

d – величина, обозначающая количество делителей; тип – integer;

s – переменная, использующаяся для пересчета делителей числа n; тип – integer.

Листинг программы имеет вид:

Program prostie_chisla;

uses crt;

var n,d,s:integer;

Begin

clrscr;

writeln('Input number');

readln(n);

s:=1;

d:=0;

repeat

if n mod s=0 then d:=d+1;

s:=s+1;

until s>n;

if d=2 then write ('Prime number')else write ('the number isn`t simple');

readkey;

End.

Рисунок 12 демонстрирует результат работы данной программы.

Рисунок 12 – Результат работы программы

2.3 Реализация цикла for

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

I:= nz, kz

Тело цикла

Рисунок 13 – Структурная схема цикла с параметром

Синтаксис данного цикла:

for параметр:=n1 to n2 do оператор;

for параметр:=n1 downto n2 do оператор;

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

1) вычисляется значение верхней границы n2;

2) переменной цикла присваивается значение нижней границы n1;

3) производится проверка того, что переменная цикла не превосходит n2;

4) если это так, то выполняется <оператор>;

5) значение переменной цикла увеличивается на единицу;

6) пункты 3-5, составляющие одну итерацию цикла, выполняются до тех пор, пока переменная цикла не станет строго больше, чем n2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору [19].

Из этой последовательности действий можно понять, какое количество раз отработает цикл for-to в каждом из трех случаев:

  • n1 < n2: цикл будет работать n2-n1+1 раз;
  • n1 = n2: цикл отработает ровно один раз;
  • n1 > n2: цикл вообще не будет работать.

После окончания работы цикла переменная-счетчик может потерять свое значение. Таким образом, нельзя с уверенностью утверждать, что после того, как цикл завершил работу, обязательно окажется, что ее значение равно n2+1.Поэтому попытки использовать переменную-счетчик сразу после завершения цикла могут привести к непредсказуемому поведению программы при отладке.

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

1) вычисляется значение верхней границы n2;

2) переменной цикла присваивается значение нижней границы n1;

3) производится проверка того, что переменная цикла не меньше n2;

4) если это так, то выполняется <оператор>;

5) значение переменной цикла уменьшается на единицу;

6) пункты 1-3 выполняются до тех пор, пока переменная цикла не станет меньше, чем n2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.

Из этой последовательности действий можно понять, какое количество раз отработает цикл for-downto в каждом из трех случаев:

  • n1 < n2: цикл вообще не будет работать;
  • n1 = n2: цикл отработает ровно один раз;
  • n1 > n2: цикл будет работать n1-n2+1 раз.

Рассмотрим реализация цикла с параметром.

Пример. Вычислить факториал числа n (число n вводится пользователем).

По определению факториал числа n (n!) = 1*2*3*…*n. Используя программу, описанную ниже, вычислить p как произведение чисел от 1 до n, т.е. p каждый раз умножается не на одно и то же число, а на значение переменной цикла.

Введем следующие переменные:

p – величина, обозначающая число, полученное в результате вычисления факториала, тип – longint.

n – величина, обозначающая число, для которого находится факториал, тип – integer.

i – величина, обозначающая переменную цикла, тип – integer.

Листинг программы имеет вид:

Program faktorial;

uses crt;

var i,n:integer;

p:longint;

Begin

clrscr;

writeln('Input number n:');

readln(n);

p:=1;

for i:= 1 to n do

p:=p*i;

writeln;

writeln('Result:');

writeln(n, '!=' ,p);

readkey;

End.

Рисунок 14 демонстрирует результат работы данной программы.

Рисунок 14 – Результат работы программы

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

Оператор break

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

Оператор break прерывает работу всего цикла и передает управление на следующий за ним оператор, при этом не контролируется условие выхода из цикла.

Формат: Break;

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

Оператор continue

Действие оператора сontinue заключается в передаче управления на начало цикла, при этом контролируется условие выхода из цикла, т.е. прерывается работа текущей итерации цикла и передается управление [4]:

– следующей итерации (цикл с постусловием)

– или на предшествующую ей проверку (циклы с параметром и с предусловием).

Формат: Continue;

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

For i:= 1 to 3 do

begin

write('Введите ПАРОЛЬ:');

readln(S); //S и Parol – переменные одного типа

if S=Parol then break //прерывание цикла

else if i<>3 then continue;

//ограничение цикла

writeln( 'Доступ к программе ЗАПРЕЩЕН' );

writeln( 'Нажмите Enter' );

readln;

halt //прерывание программы

end;

3 Массивы данных

3.1 Одномерные массивы

Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы применяются для обработки большого объема однотипных данных. Имя массива является указателем. Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от размерности массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива. Чаще всего в программировании используются одномерные и двумерные массивы.

Одномерный массив может быть числовой последовательностью с известным количеством членов. Так же, как и в последовательности, в массиве можно указать элемент с конкретным номером, например а5, или записать общий вид элемента, используя в качестве индекса переменную и указывая диапазон ее изменения: аi, i=1, 2, …, n.

Задачи на обработку массивов могут иметь различную формулировку. Например, начинаться со слов «Дано n чисел...», а далее говорится, что требуется сделать с этими числами. Чтобы решить такую задачу на компьютере с использованием языка программирования Паскаль, необходимо выполнить следующее:

  1. определить, какие числа даны: целые или вещественные;
  2. присвоить массиву имя, которое будет использоваться для каждого элемента, при этом к каждому элементу добавится номер (индекс);
  3. объявить массив в разделе переменных var, отведя место в памяти для массива;
  4. внести значения элементов в память.

В описании массива имеется специальное слово array (массив), после которого в квадратных скобках через две точки указывается диапазон изменения номеров элементов, затем слово of (из) и пишется тип данных массива. Встретив описание массива, транслятор отводит для него столько последовательных ячеек, сколько указано в квадратных скобках, и такого формата, каков тип данных массива. Эту память в программе можно использовать целиком или частично, вычисляя значения элементов массива или вводя их с клавиатуры (либо с диска). Чаще всего номера элементов меняются от 1 до заданного числа n. Поместив значение n в разделе констант (const), в описании можно указать в качестве переменной n последнее значение (верхнюю границу) номера элемента массива [3].

Пример описания:

Const n =10;

Var a: array [1..n] of real;

Это описание означает, что для массива а будет отведено десять ячеек оперативной памяти по шесть байтов каждая. Имена ячеек: а1, а2, …, а10. в Паскале эти имена будут записаны следующим образом: a[1], …, a[10].

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

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

For i : = 1 to n do

Read (a[ i ]);

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

Можно ввод прокомментировать и вводить каждое данное на отдельной строке экрана:

For i : = 1 to n do

Begin

Write(‘a[‘,i,’]=’);

Readln (a[i]);

End;

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

Рассмотрим реализацию одномерных массивов.

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

Вычисление суммы элементов массива ничем не отличается, в принципе, от суммирования значений простых переменных. Решение задачи состоит из трех этапов: 1) ввод данных; 2) вычисление суммы; 3) печать результатов.

Листинг программы имеет вид:

program summa_elementov;

uses crt;

const n = 7;

var a: array [1 .. n ] of real;

S : real;

i: integer;

begin

clrscr;

writeln ('Input ', n, ' real numbers through a gap');

for i:= 1 to n do

read (a [ i ]);

S:= 0;

for i:= 1 to n do

S:= S + a[ i ];

writeln;

write (' Sum of elements of the massif S = ', S:1:1);

readkey

end.

Рисунок 15 демонстрирует результат работы данной программы.

Рисунок 15 – Результат работы программы

Пример 2. Упорядочение массива по возрастанию

Упорядочения массивов по какому-либо признаку, называются также сортировками. Существуют различные методы сортировок, различающиеся, в основном, по скорости получения результата. Рассмотрим один из них – «метод пузырька».

Пусть имеется последовательность чисел аl, а2, … , аn, которую необходимо упорядочить по возрастанию. Зафиксируем первый элемент и будем последовательно сравнивать его со стоящими справа. Если какой-то из элементов справа окажется меньше первого, то мы поменяем местами этот элемент с первым и продолжим сравнение уже нового элемента, стоящего на первом месте, с оставшимися справа числами. Если снова выявится элемент, меньший зафиксированного, то повторим перестановку. В результате первого просмотра последо­вательности на первом месте окажется наименьший из всех элементов, т.е. он, как более «легкий», как бы всплывает наверх (отсюда и название метода – «метод пузырька»). Теперь зафиксируем второй элемент и повторим просмотр, выполняя при необходимости перестановки элементов [14].

Уяснив идею решения, остановимся на двух вопросах: каким образом фиксировать элементы и как осуществить перестановку двух элементов? Чтобы при переборе элементов, стоящих справа от проверяемого, не менялся индекс последнего, индексы фиксируемого и стоящих правее него элементов должны быть различными: i и j. Индекс i изменяется от 1 до (п – 1), индекс j всегда на 1 больше i и пробегает все значения от (i +1) до п. Для каждого значения i индексу должен последовательно принять все допустимые значения, следовательно, конструкция программы, отражающая полный перебор всех элементов и их упорядочение по возрастанию, представляет собой двойной цикл.

При перестановке двух элементов используется третья переменная. Перестановка местами (обмен значениями в памяти) двух переменных а и b выглядит следующим образом 1) с: = а; 2) а:= b; 3) b: = с.

Программа сортировки методом пузырька имеет вид:

program sort_vozr;

uses crt;

const n = 7;

var a : array [ 1.. n ] of real;

i, j: integer;

c: real;

begin

clrscr;

for i:= 1 to n do

begin

write ('a [', i , '] = ');

readln(a[i]);

end;

for i:= 1 to n-1 do

for j:= i+1 to n do

if a[i] > a[j] then begin

c:=a[i];

a[i]:= a[j];

a[j]:= c;

end;

writeln;

writeln (' Result ');

for i:= 1 to n do

write (a[i]:7:1);

readkey;

end.

Рисунок 16 демонстрирует результат работы данной программы.

Рисунок 16 – Результат работы программы

3.2 Двумерные массивы

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

То есть, визуально, двумерный массив – это обычная таблица, со строками и столбцами [17]. Структура двумерного массива, с именем a, размером m на n показана ниже (рисунок 17).

Описание: Описание: Описание: Описание: Описание: Описание: двумерный массив С++

Рисунок 17 – Cтруктура двумерного массива

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

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

Рассмотрим задачи обработки таблиц и алгоритмы их решения [18].

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

Для решения задачи надо выполнить следующие шаги: 1) ввести таблицу в память; 2) найти сумму элементов главной диагонали; 3) напечатать результат. Описание таблицы, как и описание одномерного массива, используется для резервирования памяти. В описании указываются диапазоны для двух номеров: строк и столбцов.

Const n = 3;

Var b: array [ 1..n, 1..n ] of real;

i, j: integer;

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

При вычислении суммы элементов диагонали следует обратить внимание на имена суммируемых элементов: оба индекса одинаковые значение, т.е. в общем виде имя элемента диагонали – b[ i, i ]. Это означает, что можно рассматривать диагональ, как одномерный массив, и использовать один цикл для вычислений.

Листинг программы:

Program sum_diag;

Uses crt;

Const n = 3;

Var b: array [1..n, 1..n] of integer;

i, j: integer;

S: integer;

Begin

Clrscr;

writeln ('enter values of elements of the table in the lines');

writeln ('at the end of every line press <Enter> ');

for i:= 1 to n do

for j:= 1 to n do

read (b[i,j]);

S:= 0;

for i:= 1 to n do

S:= S + b[i,i];

write (' Sum elements of the main diagonal S = ' , S);

readkey

end.

Рисунок 18 демонстрирует результат работы данной программы.

Рисунок 18 – Результат работы программы

Пример 2. Перестановка строк таблицы.

В прямоугольной таблице В из n строк и m столбцов требуется поменять местами две строки. При решении этой задаче можно воспользоваться алгоритмом обмена значениями двух переменных из программы сортировки [8]. Для этого достаточно организовать цикл по переменной столбца и, используя промежуточную переменную, менять местами каждую пару элементов, стоящих в одном столбце. При заданных номерах строк К и L решение выглядит так:

program shift_mas;

uses crt;

const n = 3; m = 4;

var b: array [1..n, 1..m ] of integer;

c: integer;

i, j, K, L: integer;

begin

writeln ('Enter numbers of the lines of the table changed by places');

readln (K, L);

writeln;

writeln ('enter the table dimension ',n, ' on ',m);

//input of the table

for i:= 1 to n do

for j:= 1 to m do

read (b [ i, j ] );

//shift of lines

for j:= 1 to m do

begin

c:= b [ K, j ];

b [ K, j ]:= b [ L, j ];

b [L, j ]:= c

end;

//press of results

writeln;

writeln ('The table with the rearranged lines: ');

for i:= 1 to n do

begin

for j:= 1 to m do

write (b [i, j ]:4 );

writeln

end;

readkey

end.

Рисунок 19 демонстрирует результат работы данной программы.

Рисунок 19 – Результат работы программы

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

Заключение

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

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

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

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

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

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

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

В рамках данной работы рассмотрены основные виды циклов, это:

– цикл с предусловием;

– цикл с постусловием;

– цикл с параметром.

Представлены схематические структуры и описаны методы реализации каждой из них. А также продемонстрирована практическая реализация каждого вида циклов. Рассмотрены специальные функции циклов – break и continue.

В третьем разделе работы введено понятие массива, и представлены основные виды массивов: одномерные и двумерные. Дан синтаксис описания ввода и вывода массивов.

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

В процессе выполнения курсовой работы решены следующие задачи:

1) раскрыты теоретические сведения о языках программирования высокого уровня;

2) представлена классификация языков программирования высокого уровня и выявлены их и достоинства и недостатки;

3) рассмотрены виды циклических структур;

4) рассмотрены понятие массива и представлена реализация одномерных и двумерных массивов средствами языка программирования высокого уровня Pascal;

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

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

Список используемой литературы

  1. ГОСТ 28195-89. «Оценка качества программных средств. Общие положения» (утв. Постановлением Госстандарта СССР от 28.07.1989 N 2507).
  2. Арамов, В.Г. Введение в язык Паскаль: учебное пособие / В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова. – М.: КНОРУС, 2011. – 384 с. – ISBN 978-5-406-00757-0.
  3. Артюшенко, В. М.Современные направления развития корпоративных сетей спутниковой связи[Текст] / В.М. Артюшенко, Т.С.Аббасова, Б.А. Кучеров // Двойные технологии. – 2014. – №3(68). – С.67–72.
  4. Артюшенко, В. М. Системный анализ в области управления и обработки информации: монография [Текст] / В.М. Артюшенко, Т.С. Аббасова, Ю.В. Стреналюк, Н.А. Васильев, И.М. Белюченко, К.Л. Самаров, В.Н. Зиновьев, С.П. Посеренин, Г.Г. Вокин, А.П. Мороз, В.С. Шайдуров, С.С. Шаврин /под науч. ред. док.техн. наук, проф. В.М. Артюшенко. – Королев МО: МГОТУ, 2015. – 168 с.
  5. Артюшенко, В. М. Информационные технологии и управляющие системы: монография [Текст] / В.М. Артюшенко, Т.С. Аббасова, Ю.В. Стреналюк, В.И. Привалов, В.И. Воловач, Е.П. Шевченко, В.М. Зимин, Е.С. Харламова, А.Э. Аббасов, Б.А. Кучеров /под науч. ред. док.техн. наук, проф. В.М. Артюшенко. – М.: Издательство «Научный консультант», 2015. – 185 с.
  6. Введение в программирование / И.Ю. Баженова, В.А. Сухомлин. – М.: Национальный Открытый Университет «ИНТУИТ», 2016. – 412 с.. – ISBN 978-5-9556-0077-9.
  7. Давыдова, Н.А. Программирование / Н.А. Давыдова, Е.В. Боровская. – М.: Лаборатория знаний, 2015. – 241 с. – ISBN 978-5-9963-24-647-1.
  8. Иванова, Г.С. Программирование: учебник / Г.С. Иванова. – 3-е изд., стер. – М.: КНОРУС, 2014. – 432 с. – (Бакалавриат). – ISBN 978-5-406-03447-7.
  9. Иванова, Г.С. Технология программирования: учебник / Г.С. Иванова. – 3-е изд., стер. – М.: КНОРУС, 2016. – 334 с. – (Бакалавриат). – ISBN 978-5-406-04734-7.
  10. Информатика. Базовый курс: Учебник для вузов / Под ред. С.В. Симонович. – 3-е изд. – СПб.: Питер, 2011. – 640 с. – ISBN 9785459004397.
  11. Исаева, Г. Н. Об индуктивном подходе к приобретению знаний в экспертных системах управления персоналом[Текст] / Г.Н. Исаева // Вопросы региональной экономики – 2010. Т.5. – С.100-105.
  12. Когтев, П.А. Определение местоположения объектов в помещениях ВУЗа с помощью технологии ZigBee[Текст] /П.А.Когтев, Н.В.Логачева, Г.Н.Исаева // Перспективы, организационные формы и эффективность развития сотрудничества российских и зарубежных ВУЗов. Сборник материалов Международной научно-практической конференции 24-25 апреля 2014 г.: Королев МО: ФТА. Изд-во «Канцлер», 2014. – С.357-363.
  13. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. – М.: ДМК Пресс, 2011. – 464 с.
  14. Ковалевская, Е.В. Методы программирования: учебно-методический комплекс / Е.В. Ковалевская, Н.М. Комлева. – М.: ЕАОИ, 2011. – 320 с. – ISBN 978-5-374-00356-7.
  15. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов / Т.А. Павловская. – М.: Национальный Открытый Университет «ИНТУИТ», 2016. – 154 с.
  16. Программирование на Free Pascal и Lazarus / Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер. – М.: Национальный Открытый Университет «ИНТУИТ», 2016. – 552 с.
  17. Свердлов, С. З. Языки программирования и методы трансляции [Текст] / С.З. Свердлов // Питер: 2007 .
  18. Фаронов, В.В. Turbo Pascal 7.0. Учебный курс: учебное пособие / В.В. Фаронов. – М.: КНОРУС, 2016. – 364 с. – ISBN 978-5-406-04792-7.
  19. Mini-soft: Разработка алгоритма. Блок-схема. Структуры алгоритмов. [Электронный ресурс]. URL: http://www.mini-soft.ru/soft/vba/r_2.php (дата обращения 10.04.2016).
  20. Программирование на Free Pascal и Lazarus [Электронный ресурс]. URL: http://teacher.ucoz.net/index/programmirovanie_na_pascal/0-28 (дата обращения 10.04.2016).
  21. Программирование. Двумерные массивы Pascal. [Электронный ресурс]. URL: http://www.pascal.helpov.net/index/two-dimensional_arrays_
    pascal_programming (дата обращения 10.04.2016).
  22. Программирование. Цикл for в Паскале. [Электронный ресурс]. URL: http://learnprogramm.ucoz.ru/index/cikl_for/0-49 (дата обращения 10.04.2016).
  23. Циклы в Pascal: repeat, while, for. [Электронный ресурс]. URL: http://learnpascal.ru/cikly-v-paskal/for-while-repeat.html (дата обращения 10.04.2016).
  24. Зачем язык программирования Swift нужен Apple и вам: [Электронный ресурс] // Lookatme.URL: http://www.lookatme.ru/mag/ live/inspiration-lists/204771-swift
  25. Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript: [Электронный ресурс] // OpenNet.URL: http:// www.opennet.ru/opennews/art.shtml?num=34981
  26. Новости свободного ПО: [Электронный ресурс] // Компьютерные вести.URL: http://www.kv.by/content/325304-novostisvobo dnogo-po
  27. Олег Цилюрик. Сравнительное обозрение языков программирования[Электронный ресурс] // Редакция 2.31. 2014 год. – 78с.5.
  28. Сайт о языке программирования Dart – руководства, инструкции, новости, статьи и многое другое: [Электронный ресурс] // dartdot.ru.URL: http://dartdot.ru/
  29. Язык программирования Swift. Русская версия: [Электронный ресурс] // Хабрахабр.URL: http://habrahabr.ru/post/225841/