![](/stc/img/evkova.png)
Классификация языков программирования. Критерии выбора среды и языка разработки программ
Содержание:
Введение
Актуальность исследования. Мир ИТ сильно поменялся за последние годы, появились новые приоритеты и технологии – вместе с ним сильно изменился процесс разработки. Сегодняшние средства разработки это совсем не те продукты, которые были лет десять назад, они построены на новейших технологиях, интегрируются со средствами групповой разработки, планирования и управления проектами, средствами оценки рисков, управления жизненным циклом приложений и позволяют создавать настоящую среду для индустриального программирования.
В настоящее время интерес к созданию новых языков программирования снизился (и в мире, и в России), а круг используемых языков стабилизировался. Наступил момент для анализа использования современных языков программирования. Результаты проведенного CNews Analytics и "Форт-Россом" исследования среди разработчиков ПО России подтвердили предположения, что языки программирования, ориентированные на интернет и интеграцию приложений, доминируют в среде разработчиков.
Целью данной работы является анализ современных языков программирования, для достижения поставленной цкли были выделеы следующие задачи:
- рассмотреть современные языки программирования и их классификация;
- изучить рейтинг и возможности современных языков программирования.
Оьбъект исследования – языки программирования.
Предмет исследования - современные языкы программирования.
Структура работы состоит из введения, основной части, заключения и списка литературы.
Теоретической и методологической базой данной работы послужили труды российских и зарубежных авторов в области информатики, программирования, материалы периодических изданий и сети Интернет.
Глава 1 Современные языки программирования и их классификация
1.1 Анализ современных языков программирования
Технология программирования не стоит на месте и постоянно развивается с учетом новых потребностей в сфере IT-технологий. Существуют два главных требования для языков программирования: их близость к обычному профессиональному языку определенной сферы деятельности и простота реализации. Противоречивость требований стимулирует непрерывный процесс создания новых языков и доработки существующих.
Язык программирования - система обозначений для описания алгоритмов и структур данных, определенная искусственная формальная система, средствами которой можно выражать алгоритмы [1].
В настоящее время ежегодно число языков программирования пополняется новыми. На сегодняшний день известно более двух с половиной тысяч языков программирования. Ниже рассматриваются несколько самых передовых языков программирования, каждый из которых решает свою определенную работу.
Язык Dart, разработанный компанией Google, как один из языков веб-программирования.
Как и в JavaScript, в Dart используются синтаксисы и ключевые слова, похожие на те, которые используются в языке C. Однако одним существенным различием является то, что в то время как JavaScript основывается на прототипах, объекты в Dart определяются с помощью классов и интерфейсов, как в C++ или Java [2].
Идея его создания основана на том, чтобы сделать язык таким же привычным, гибким и динамичным как JavaScript. Но пока, что этот язык мало где возможно использовать потому, что разработан для запуска на клиенте, либо на сервере.
Следующим новым языком программирования, разработанный компанией Google является Go. Этот язык общего назначения, создан для легкого программирования, подходящий для всего - от разработки приложений до программирования систем.
Язык больше похож на C или C++, чем на Java или C#. Однако, как и последние языки, Go включает в себя такие современные функции, как очистка памяти от ненужных данных, отражение текущих процессов выполнения и поддержку параллельности [2].
Секция «Информационно-экономические системы»
В языке Go понятия классов, конструкторов и деструкторов совершенно отсутствуют. Однако в нем присутствуют структуры, заимствованные из языка C, к которым возможна привязка функций, в связи с этим на языке Go можно создавать программы базирующихся на объектно-ориентированном программировании. Наличие функции очищение памяти от ненужных данных упрощает работу, по сравнению с C и C++. Язык Go еще в разработке, но тем не менее с ним можно уже работать.
Веб-программирование сложно тем, что для клиента, сервера, баз данных и т. д. свои отдельные языки программирования. Инженеры разработали новый язык Opa. Этот язык созданный с идеей того, чтобы связать в себя интерфейс пользователя, логику сервера и базу данных ввода-вывода. Компилятор самостоятельно решает, где запушена программа и выполняет написанный код.
Среда выполнения Opa объединяет собственный веб-сервер и систему управления базой данных, которые не могут быть заменены самостоятельными альтернативами. Opa поставляется бесплатно и на данный момент доступен для 64-х битных Linux и Mac OS X платформ, другие же порты пока разрабатываются [2].
С другой стороны в каждом языке существуют свои недостатки, которые ставят созданную на этом языке систему менее безопасной.
Для решения этой проблемы ученые нашли способ защиты такой, что позволяет защитить и веб-сайты, и компьютеры пользователей, разработав систему позволяющую использовать несколько языков программирования при создании одой программы.
Система Wyvern является чем-то вроде компилятора одного мета-языка, в состав которого входят все известные и популярные языки программирования. Эта система позволяет программистам разрабатывать веб-страницы и приложения, используя напрямую все возможности С, PHP, HTML, CSS, JavaScript и других языков, и избегая необходимости использования некоторых искусственных приемов, которые являются источниками потенциальной опасности [3].
Данная система не единственная, примерами подобных программ являются - Scheme, ProteaJ, Spoofax и OJ. Они также решают вышеперечисленные задачи.
В продолжение темы, был разработан новый язык программирования под названием Sketch. Особенность языка в том, что он позволяет при написании программ опускать некоторые участки кода, заполняя эти промежутки самостоятельно при этом оптимизируя получившиеся конструкции.
Основной идеей, реализованной в виде компилятора языка Sketch, является метод поиска оптимального решения определенной задачи. Известно, что любая логическая и математическая задача может быть решена несколькими путями, количество которых, в некоторых случаях, может стремиться к бесконечности [4].
Еще одним новым языком программирования стал - язык Wolfram Alpha.
Wolfram Language является языком, основанным на обширной базе знаний при помощи которой можно создавать достаточно сложные приложения, не прибегая к процессу традиционного программирования. Wolfram Language является языком, опирающимся на огромную базу знаний, в которой заключены все типовые вычислительные операции [5].
Рассмотрев современные языки программирования, некоторые из которых внедряются в программирования, некоторые еще дорабатываются можно сделать выводы о том, что в настоящее время, имея базу из двух с половиной тысяч языков программирования нет ни одного универсального. Пока такая задача не стоит, поэтому на этом этапе можно выделить систему Wyvern, система, позволяющую использовать несколько разных языков программирования при создании одной программы. Можно предположить, что хотя бы один из рассмотренных языков заменит в будущем популярных в настоящее время языков программирования.
1.2 Классификация языков программирования
Существуют различные классификации языков программирования.
По наиболее распространенной классификации все языки программирования, в соответствии с тем, в каких терминах необходимо описать задачу, делят на языки низкого и высокого уровня.
Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.
В группу языков низкого уровня входят машинные языки и языки символического кодирования: Автокод, Ассемблер. Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно–зависимыми.
Машинно–ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).
К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50–х годов программистами фирмы IBM и в основном используется для программ, выполняющих естественно – научные и математические расчеты), Алгол, Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом.), Си (Деннис Ритч – 1972 году),Пролог (в основе языка лежит аппарат математической логики) и т.д.
Эти языки машинно–независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
Программу, написанную на языке программирования высокого уровня, ЭВМ не понимает, поскольку ей доступен только машинный язык. Поэтому для перевода программы с языка программирования на язык машинных кодов используют специальные программы – трансляторы.
Существует три вида транслятора: интерпретаторы (это транслятор, который производит пооператорную обработку и выполнение исходного кода программы), компиляторы (преобразует всю программу в модуль на машинном языке, после чего программа записывается в память компьютера и лишь потом исполняется) иассемблеры (переводят программу, записанную на языке ассемблера, в программу на машинном языке).
Языки программирования также можно разделять на поколения:
– языки первого поколения: машинно–ориентированные с ручным управлением памяти на компьютерах первого поколения.
– языки второго поколения: с мнемоническим представлением команд, так называемые автокоды.
– языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль.
– языки четвертого поколения: усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных.
– языки программирования пятого поколения: языки декларативные, объектно–ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.
Языки программирования также можно классифицировать на процедурные и непроцедурные.
В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.
Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.
Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, К непроцедурному программированию относятся функциональные и логические языки.
В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь делятся на еще более простые задачи и т.д. Один из основных элементов функциональных языков – рекурсия. Оператора присваивания и циклов в классических функциональных языках нет.
В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Программа на Прологе содержит, набор предикатов–утверждений, которые образуют проблемно–ориентированную базу данных и правила, имеющие вид условий.
Можно выделить еще один класс языков программирования – объектно–ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно–ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме.
Первый объектно-ориентированный язык программирования Simula был создан в 1960-х годах Нигаардом и Далом.
Ява – язык для программирования Internet, позволяющий создавать безопасные, переносимые, надежные, объектно–ориентированные интерактивные программы. Язык Ява жестко связан с Internet, потому, что первой серьезной программой, написанной на этом языке, был браузер Всемирной паутины.
В последнее время, говоря о программировании в Internet, часто имеют в виду создание публикаций с использованием языка разметки гипертекстовых документов HTML. Применение специальных средств (HTML–редакторов) позволяет не только создавать отдельные динамически изменяющиеся интерактивные HTML–документы, используя при этом данные мультимедиа, но и редактировать целые сайты.
ГЛАВА 2 ПРИМЕНЕНИЕ СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
2.1 Выбор языка в зависимости от задачи
Допустим, перед вами стоит задача написать драйвер для видеокарты. Каким языком вы будете пользоваться сегодня? (Выкрик из зала: Java!) А чего… Джава — отлично, но чего не на Руби или на PHP? (Лектор говорит с сарказмом.)
Если вы пишете чего-то низкоуровневое, то лучший выбор — это Си, но вообще-то я чего-то слышал (но не видел), что C++ применяют для этого. Но я слабо верю в это, потому что в Си можно четко контролировать — раз вы дали столько-то байт памяти, значит столько-то и будет. А в C++ (STL) как реализована строка? Ну, как-то реализована. И мы в итоге не знаем, как и что там происходит, может у нас память кончится на нашей видеокарте или ещё что-то произойдёт. Поэтому Си до сих пор живёт и не умирает, такие задачи системного программирования по прежнему есть — написать операционную систему, написать драйвера, написать ещё чего-нибудь — Си отлично подходит для этого. Кроме того, сейчас появляются всякие устройства, (интернет вещей обещают, что он вот-вот наступит) которые живут от батарейки (и, естественно, их будут миллионы, всё будет обвешано этим интернетом вещей), они должны быть очень дешёвыми и очень мало электричества потреблять. Соответственно, там будет 2 Кб памяти, процессор на 5 кГц, ну и понятное дело, что вкрутить какую-то виртуальную машину или скриптовый язык в ближайшее время не получится -— значит, придётся писать что-то на Си. Да и сейчас, например, вычисления на видеокарте (OpenCL или ещё какая-нибудь технология) — там не придумывают новый язык, чтобы писать для них программ — там делают Си с каким-то большими ограничениями. Просто потому что люди уже умеют, зачем учить чего-то новое? Формально это, наверное, тоже, в каком-то смысле Си.
Допустим, вы хотите написать новый Facebook (социальную сеть). На чем вы будете это писать? (Из зала говорят про HTML и CSS.) HTML, CSS — это дизайн, а мы хотим, чтобы там можно было фотографии добавлять, друзей, комментарии оставлять.
Для скриптовой части — то есть то, что будет происходит на стороне клиента, — это JavaScript. Причем иногда JavaScript генерируется на другом языке и высылается (так бывает, что скрипт генерируется…, потому что так проще иногда бывает обрабатывать какие-то изменения в логике)[6;35].
На удивление, он написан на PHP — и Facebook, и многие другие большие проекты. Пришлось, конечно, написать свои какие-то вещи, чтобы это всё-таки работало нормально, а не так как «тяп-ляп» было сделано, но они справились. В принципе, более менее всё равно, на чём вы будете писать, но не советую Perl. Здесь и сейчас, понятное дело, с нуля уже для веба никто ничего не пишет. Все пишут какой-нибудь фреймворк или ещё чего-то. Интернет-магазин? Скачали фреймворк для интернет-магазина — ну и всё, написали интернет-магазин.
2.2 Программирование для бизнеса
Дальше вы хотите написать какое-нибудь скучное приложение для банка. Или, например, есть ли у вас кто-нибудь, кто продаёт симки? Возможно, вы когда-нибудь покупали телефон или ещё что-то и вам говорили: «Вот система висит, мы ничего не можем сделать». На чём вы будете писать такое приложение? (Выкрик из зала про Python) На Питоне такое нельзя писать, вы что?! Ничего для бизнеса не стоит писать на Питоне. Почему? Потому что когда вы пишете что-то на Питоне, у вас в процессе написания невозможно обнаружить значительно количество багов. Питон всячески динамически типизированный, и вообще там можно так спрятать баг, что он всплывёт в такой ситуации, что вы даже понять не сможете, что там сделали вот эти криворукие пользователи, что у вас всё сломалось. То есть на Питоне лучше писать для себя, маленькие скрипты — вы понимаете, что там происходит и что делается. Ну или что-нибудь, что не жалко выкинуть: вы хотите раньше конкурентов что-то выкатить, ну и что, что оно через раз будет ломаться. Вы написали на Питоне и всё — вы захватили рынок[4;16].
А если вы пишите что-то надолго, например банковское приложение какое-то (чтобы оно кредиты одобряло, ещё что-нибудь) — вы пишете это на Java. Потому что там дело серьезное, бумажки, деньги, документы, ещё чего-то, а в ней так накосячить нельзя, что всё сломается, а то люди обидятся — у них деньги ушли и никуда не дошли, потому что у вас в какой-то момент строка превратилась в число или наоборот. Итак, значит, методично на Java берёте и пишете, пишете… Ну или на .Net, тоже такие ситуации, в принципе, бывают. Там, конечно, тоже можно нарваться на проблемы, но всё таки вероятность этого несколько ниже.
2.3 Программирование для армии, аэрокосмической отрасли
А теперь представьте, что вас решили отправить на Луну на ракете. На чём бы вы предпочли, чтобы был написать код, который управляет двигателями ракеты? Давайте посмотрим. Вот это, наверное (лектор показывает на Perl, Python, PHP, Ruby), не стоит — оно тормозит, ещё чего-то происходит, ну и вообще я бы не согласился лететь на такой ракете. На C++? Я бы тоже, честно говоря, не доверил, потому что на C++ слишком много способов убиться. Когда ты там где-то в космосе, это не очень хорошо.
Может быть на Java? Вроде там довольно надёжно всё и архитектура хороша, никаких диких типов, никаких выходов за пределы памяти лишних. Допустим, наступил самый ответственный момент, а наша Java решила собрать мусор за нас. Нам нужно приземляться, тормозить, а она такая: «Нет, garbage собирается». В общем, тоже не очень.
Честно говоря, я бы предпочел, чтобы на Паскале писали эту программу. Я, конечно, не очень люблю Паскаль, но как-то в таких вопросах, было бы очень здорово.
2.4 Использование сразу нескольких языков для разработки ПО
Ну и что нужно вообще сказать о современных языках. Сейчас многие проекты не живут каким-то одним языком, то есть у них часть какая-то живет на одном языке, часть — на другом, ещё какая-то часть — на третьем. Например, если у вас какое-то веб-приложение, которое обрабатывает дикие объемы информации, обращения к дискам (даже не к базам данных, они настолько огромны, что там даже база данных не тянет какая-то уже написанная) наверняка написаны на каком-то низкоуровневом Си, чтобы дико быстро писать на диск и всё такое. Естественно, писать весь проект на Си не стоит. Может быть, там какая-то промежуточная логика, написанная на Java, которая обращается к Сишным функциям для быстрых обращений. Ну а фронтенд (то на что смотрит пользователь), конечно, уже написан на чём-нибудь, на каких-то скриптах, на том, что непосредственно выполняется браузером (JavaScript). И всё это живет вместе и успешно взаимодействует.
В разработке каких-то приложений, даже больших, иногда люди что делают? Они берут и на Питоне пишут прототип (как оно всё будет работать), набрасывают, какую-то архитектуру продумывают. Писать на нём реально очень быстро — они накидали прототип, поэкспериментировали с ним и сказали: «Во! Вот так круто!» И полностью переписали. Казалось бы, они два раза сделали работу, от этого в два раза больше времени ушло (ну, в полтора). Но нет! Часто оказывается, что такой способ неплох, потому что, если вы напишете сразу на чем-то, например на Java, а потом решите: «Нет, давайте рефакторинг, меняем архитектуру полностью и всё такое,» — то потратите в 10 раз больше времени. Такие вещи тоже существуют и живут[9].
Теперь поговорим о том, почему некоторые хорошие на вид языки не выжили, ну или живут в очень ограниченном пространстве. Когда Вирт увидел, что сделали с его Паскалем нехорошие фирмы Applе, Borland и всё такое, он придумал язык ещё лучше — Oberon. Он только был дико минималистичный — то есть, там было очень мало команд (Строки? Зачем нам строки? Мы сделаем массив символов!). Ну и чего-то не пошло у него, в той степени, как могло бы пойти.
Ещё одна штука. Американские военные попросили разработать им тоже крутой язык, на котором всё работает и всё можно написать. В результате получился довольно монструозный язык Ada, на котором, правда, до сих пор что-то пишут, но опять же — для военных только.
В чём проблема? Почему некоторые языки вроде Python, который никакая компания его не поддерживала вначале, захватили рынок. PHP, который ещё и плохо спроектирован, тоже сам по себе взял и захватил рынок (большую часть). А всякие миллиарды долларов вложены (лектор показывает на Ada) и никуда не пошли, ничего не произошло. С чем это связано? Это связано с тем, что нет инфраструктуры вокруг этих языков. То есть язык может быть отличный, но пока нет документации, пока нет сообщества, которое умеет отвечать на вопросы (на Stack Overflow) и, наконец, самое главное, пока нет большого количества библиотек, язык не выстреливает. То есть, вы, например, захотели на Обероне написать сайт. А что такого, почему бы и нет? И начинается морока… Веб-сервер вы не можете поднять свой на Обероне, чтобы потестировать легонько, какие-нибудь библиотеки вы подключить не можете, потому что их на Обероне нет. И всё это через какие-то костыли делается, силы уходят, и в общем вы плюете и пишете на чистом Си свой сайт вместо Оберона. А живут хорошо те языки, которые умеют пользоваться библиотеками от других языков. Тот же Питон в тех местах, где он тормозит. Ну и вообще всякие стандартные вещи типа сортировки и ещё чего-то написаны на Си, и он (Python) умеет с ними взаимодействовать.
У Java тоже есть Java Native Interface. Это по сути Си, то есть там (по-моему, всё время хотят запретить, но кажется ещё не запретили) эти языки могут взаимодействовать с уже существующими библиотеками (в основном Сишными). И за счёт этого берут и работают. Понятна идея, которую я пытаюсь до вас донести, да? Не пишите на тех языках, которые не умеют подключать Сишную библиотеку. Ну, если вы хотите пользоваться чем-то классным. Ну, и постепенно они (языки) обрастают своей какой-то инфраструктурой. И живут как-то хорошо.
ГЛАВА 3. ОСНОВНЫЕ ОПЕРАТОРЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
3.1 Операторы присваивания
Дальнейшее рассмотрение операторов языков программирования высокого уровня будем вести на примере языка Паскаль. Данный выбор обусловлен простотой языка и строгим синтаксисом.
В языке Паскаль оператор присваивания обозначается двумя символами «:=», между которыми не ставится пробел. В левой части данного оператора должна стоять переменная, а в правой части – выражение, значение которого будет присвоено переменной.
Очень часто в Паскале можно увидеть конструкцию вида p:=p+1. Данная запись не содержит ошибки. Внутри компьютера данный оператор выполняется следующим образом: сначала берется исходное значение переменной, к которому прибавляется единица. После этих действий результат вычислений помещается в переменную p. Таким образом в языке Паскаль реализуется инкремент переменной.
Очень важно следить, чтобы все переменные, которые участвуют в правой части оператора присваивания, были определены к моменту его исполнения. В качестве правых частей для вычисления численных переменных операторы присваивания используют арифметические выражения, состоящие из переменных, констант, знаков операций, скобок и вызовов функций. В общем случае правила построения выражений аналогичны математической записи. Бинарные операции, применимые к целочисленным данным приведены в таблице 1 [19].
Для примера реализации операции присваивания рассмотрим задачу вычисления гипотенузы треугольника по двум известным катетам. Согласно теореме Пифагора, гипотенуза будет рассчитываться по формуле:
(1)
Таблица 1 – Бинарные арифметические операции над типом integer
Операция |
Обозначение |
Пример |
Сложение |
+ |
p + 2 |
Вычитание |
- |
p– 2 |
Умножение |
* |
p * 2 |
Деление нацело |
div |
p div 2 |
Остаток от деления |
mod |
p mod 2 |
Исходный код программы:
Program Op_prisv;
var
a,b,c:real;
begin
a:=3;
b:=4;
c:=sqrt(a*a+b*b);
end.
В данной программе использованы только операторы присваивания. При этом в двух случаях переменным просто присваивается начальное значение – это катеты треугольника. А в третьем случае происходит вычисление выражения, определяющего корень из суммы квадратов катетов.
В результате выполнения данного кода программа вычислит значение гипотенузы треугольника со сторонамиa, b, и занесет это значение в переменную c.
3.2 Операторы ввода-вывода
Ввод и вывод необходимы для связи программы с внешним миром – таким образом можно получать входные данные от пользователя и выводить полученные результаты на экран. Очевидно, программа без вывода не имеет смысла. В предыдущем примере было рассмотрено вычисление гипотенузы прямоугольного треугольника, однако, без использования оператора вывода нельзя узнать результат, полученный при исполнении программы.
В языке Паскаль операторы ввода-вывода правильнее называть процедурами. Они служат для обмена данными между программой и внешними устройствами. Так, например, можно ввести данные с клавиатуры, из файла, вывести данные на экран или в файл.
Для ввода с клавиатуры в языке Паскаль существует два оператора: Readи Readln. Для вывода на экран – Writeи Writeln. Дополнение «ln» произошло от английского слова «line» - строка, линия. Операторы, заканчивающиеся на «ln» в результате своих действий переводят курсор на новую строку. Так, например, при работе оператора Write курсор останется на следующей позиции после последнего выведенного символа. А в случае оператора Read очередные данные будут считываться из той же строки, где стоит курсор.
Традиционная запись данных операторов содержит параметры, однако, их может и не быть. В таком случае оператор Writeln будет реализовывать просто переход на новую строку, а оператор Readlnбудет ждать ввода любой клавиши.
Кроме стандартного вывода данных в языке Паскаль предусмотрен и форматированный вывод, который существует для того, чтобы сделать отображение на экране более понятным. Форматированный вывод содержит количество позиций, которые при выводе необходимо отвести под значение переменной [5].
В качестве примера использования операторов ввода-вывода модифицируем задачу определения гипотенузы прямоугольного треугольника следующим образом:
Program Op_vvod_vyvod;
uses crt;
var
a,b,c:real;
begin
write('Катет a = ');
readln(a);
write('Катет b = ');
readln(b);
c:=sqrt(a*a+b*b);
writeln('Гипотенуза = ',c:3:2);
writeln('Для завершения нажмите любую клавишу...');
readln();
end.
В данной программе используются операторы ввода исходных данных – катетов прямоугольного треугольника. Для вывода результата на экран используется форматированный вывод. Результаты работы программы приведены на рисунке 1.
Рисунок 1 – Пример работы с операторами ввода-вывода
Кроме того, в программе используется оператор Readln без параметров, который подтверждает завершение программы. Так, после нажатия любой клавиши программа выдаст сообщение о том, что ее работа завершена (см. рисунок 2).
Рисунок 2 – Пример работы оператора ввода без параметров
3.3 Операторы перехода
В языке Паскаль существует два вида операторов перехода – условный и безусловный.
Оператор безусловного перехода вызывает передачу управления оператору, которому предшествует соответствующая метка. Важно отметить, что данный подход не рекомендуется к использованию [16].
Рассмотрим пример программы с использованием оператора безусловного перехода:
ProgramOp_goto;
usescrt;
labelm1;
var
a: integer;
begin
a:=5;
goto m1;
a:=a*10;
m1: writeln('a = ', a);
end.
Рассмотрим последовательность действий данной программы. В первую очередь переменной а присваивается значение 5. Затем в программе встречается оператор безусловного перехода, который посылает компьютеру сигналу о том, что следующий оператор, подлежащий исполнению, помечен меткой m1. Следовательно, дальнейшие действия программы – вывод результата на экран, а не умножение значения переменной на 10. Важно отметить, что оператор a:=a*10 в данной программе не исполнится никогда.
Результат исполнения данного кода приведен на рисунке 3.
Рисунок 3 – Пример работы с оператором безусловного перехода
Другой вид оператора перехода – условный переход. Данный оператор служит для выбора одной из двух альтернативных ветвей алгоритма в зависимости от значения некоторого условия [20].
Условия в таких операторах представляют собой некоторые логические выражения, которые могут быть истинны, либо ложны. Выражения при этом могут быть простыми и сложными. Простое выражение включает в себя два операнда и операцию сравнения. Сложные представляют собой последовательность простых условий, которые объединены друг с другом знаками логических операций (больше, меньше, равно и т.п.). В языке Паскаль существует четыре логических операции:
- логическое сложение – or;
- логическое умножение – and;
- отрицание – not;
- исключающее «ИЛИ» - xor.
В языке Паскаль существуют условные операторы с одной и двумя ветвями. Если в условном операторе прописаны две ветви, такой оператор называется полным (см. рисунок 4), в противном случае – неполным (см. рисунок 5) [10].
Рисунок 4 – Полное ветвление
Рисунок 5 – Неполное ветвление
В качестве примера программы, использующей операторы ветвления, рассмотрим следующий код:
Program Op_perehod;
uses crt;
var
a,b,c: integer;
begin
write('Введите стороны треугольника: ');
read(a,b,c);
if (a>=(b+c)) or (b>=(a+c)) or (c>=(a+b))
then writeln ('Такого треугольника не существует!')
else
begin
if (a<b) and (a<c) then writeln ('Минимальнаясторонаа = ',a)
else if (b<a) and (b<c) then writeln ('Минимальнаясторона b = ',b)
else writeln ('Минимальная сторона с = ',c);
if ((a+b+c)>50) then writeln('Периметрбольше 50');
end;
end.
В данной программе реализован запрос ввода данных сторон треугольника. Далее, происходит проверка введенных данных – существует ли треугольник с такими сторонами. В том случае, если он не существует, пользователь получает соответствующее сообщение (см. рисунок 15), иначе – программа определяет минимальную сторону и выводит ее на экран.
Для примера использования неполного ветвления реализована проверка периметра треугольника. Так, если он больше 50, программа выдаст соответствующее сообщение, в противном случае просто завершит свою работу (см. рисунок 6).
Рисунок 6 – Пример работы оператора полного ветвления
Рисунок 7 – Пример работы оператора неполного ветвления
3.4 Операторы выбора
В том случае, когда в условном операторе необходимо использовать больше, чем две ветви, можно пойти двумя путями:
- использовать вложенные условия;
- использовать оператор выбора.
Очевидно, использование вложенных условий является не самым удобным способом решения подобных задач, поэтому в языке Паскаль был создан оператор выбора Case, синтаксис которого выглядит следующим образом:
Case<ключ>of
C_1: <операторы_1>;
C_2: <операторы_2>;
…
C_N: <операторы_N>;
else<операторы 0>
end;
В данной записи ключом называется выражение порядкового типа, в зависимости от значения которого и принимается решение. Значениями C_1, C_2, …, C_N обозначены константы - возможные варианты значения ключа, которые необходимо рассмотреть при вычислениях. Данным значениям соответствуют блоки операторов, которые исполняются, если значение ключа совпадает со значением C. Если же значение ключа не совпало ни с одной из указанных констант, выполнится блок <операторы_0>. Важно отметить, что этот блок может отсутствовать [15].
В качестве примера использования оператора выбора рассмотрим задачу определения времени года по введенному месяцу[13]:
Program Op_vybor;
uses crt;
var
m: integer;
begin
write('Введите номер месяца: ');
readln(m);
case m of
1,2,12: writeln('Время года - зима');
3,4,5: writeln('Время года - весна');
6,7,8: writeln('Время года - лето');
9,10,11: writeln('Время года - осень');
elsewriteln('Такого месяца не существует!');
end;
end.
В данной программе реализован оператор выбора, который в качестве констант использует сразу несколько значений, операторы для которых идентичны. Данный подход является очень удобным и позволяет сократить число ветвей программы с 13 до 5. Результат выполнения приведенного кода представлен на рисунке 17.
Рисунок 8– Пример работы с оператором выбора
3.5 Операторы цикла
Циклическим называется такой алгоритм, в котором задана некоторая последовательность действий для многократного исполнения. Эта последовательность действий называется телом цикла. Заметим, что тело цикла указано в алгоритме один раз, но исполняться оно может многократно. Однократное исполнение тела цикла называется итерацией. В языках программирования высокого уровня, как правило, используют три вида циклов:
- цикл с предусловием – while. Состоит из условия цикла и его тела (см. рисунок 9). Пока условие цикла будет иметь значение «истина», тело цикла будет исполняться.
Рисунок 9 – Блок-схема цикла с предусловием
Как видно из блок-схемы, если условие цикла с самого начала имеет значение «Ложь», то тело цикла ни разу не будет исполнено. Если в процессе исполнения цикла условие всегда принимает значение «Истина», то цикл начинает исполняться бесконечно – происходит зацикливание. Это означает, что в алгоритме допущена ошибка. Пример использования цикла с предусловием:
Program Op_pred;
uses crt;
var
N, p: integer;
begin
write('Введитецелоечисло N = ');
readln(N);
writeln('Степени числа 2, не превосходящие ', N);
p:= 2;
while p <= N do
begin
write(p,' ');
p:= p * 2;
end;
writeln();
end.
Данная программа запрашивает у пользователя целое число, а затем выводит все степени двойки, которые не превосходят заданное число. Результат работы программы представлен на рисунке 10 [1];
Рисунок 10 – Пример работы цикла с предусловием
- цикл с постусловием – repeat-until. В данном случае сначала выполняется тело цикла, после чего проверяется выражение, записанное в блоке until (см. рисунок 11).
Рисунок 11 – Блок-схема цикла с постусловием
В том случае, когда условие цикла выполнено, его тело больше не повторяется, и программа переходит к следующему оператору. Важно отметить, что тело данного цикла выполняется как минимум один раз. Примеры использования данного цикла:
ProgramOp_post;
usescrt;
varm, N, sum: integer;
begin
write('N = ');
read(N);
m:=0;
sum:=0;
repeat
m:=m+1;
sum:=sum+m;
until m=N;
writeln ('Сумма первых ',N,' чисел равна ', sum);
end.
В данной программе определяется сумма первых N натуральных чисел. N задается пользователем с клавиатуры [12];
Рисунок 12 - Пример работы цикла с постусловием
- цикл с параметром – for. Данный цикл выполняется заданное количество раз. Существует две формы записи данного цикла в зависимости от того, каким образом должна изменяться переменная цикла. Если она должна увеличиваться, используется запись:
for<переменная_цикла>:= <начальное_значение>to<конечное_значение>do<операторы>.
Если же переменная цикла должна уменьшаться, используется другая запись:
for<переменная_цикла>:= <начальное_значение>downto<конечное_значение>do<операторы> [14].
Чаще всего данный цикл используется при обработке массивов. Рассмотрим пример подобной программы:
Program Op_param;
uses crt;
var i, n, sum, a: integer;
begin
write('N = ');
readln(n);
write('Введите ',n,' элементов массива: ');
sum:=0;
for i:=1 to n do
begin
read(a);
sum:=sum+a;
end;
writeln('Сумма введенных элементов = ', sum);
end.
В данной программе у пользователя запрашивается размерность массива, а затем и сам массив. В результате выполнения программы считается сумма введенных элементов. Результат выполнения приведенного кода представлен на рисунке 13.
Рисунок 13 - Пример работы цикла с параметром
В данной главе рассмотрены основные операторы языков программирования высокого уровня на примере языка Паскаль.
Заключение
Что бы быть современным язык программирования должен отвечать всем современным требованиям и соответствовать тем задачам, которые встают перед программистом сегодня. Именно поэтому в рассмотренных языках программирования представлено большинство методов и способов решения задач по созданию систем обработки информации.
Сегодня предоставляемое программисту многообразие возможностей позволяет, начиная новый проект любой сложности, выбрать язык программирования наиболее подходящий для его реализации. При выборе языка программирования необходимо учитывать требования проекта к скорости работы, потребляемым ресурсам, необходимости кроссплатформенного использования, а также сроки реализации проекта. Кроме того, для некоторых проектов может стать существенным фактор популярности языка программирования. Для популярного языка имеется, как правило, большое количество учебной и справочной литературы, кроме того, использованный язык программирования может стать решающим фактором при выборе программы конечным пользователем. Не менее важно при выборе языка программирования учитывать опыт других разработчиков при решении похожих задач, это поможет избежать типичной ошибки - «изобретение колеса».
Рассмотрев основные концепции современных языков программирования можно выделить несколько наиболее актуальных задач стоящих сегодня перед программистами: Проектирование межплатформенных приложений - не зависящих от используемой платформы. Разработка Интернет-приложений - работающих через Интернет, но не поддерживаемых браузером непосредственно. Создание Web-приложений - клиент-серверных архитектур. Возможность быстрого создания приложений и средств автоматизации. Также актуальны приложения полностью и эффективно использующие все ресурсы современных платформ.
Список литературы
- Артюшенко, В. М. Системный анализ в области управления и обработки информации: монография [Текст] / В.М. Артюшенко, Т.С. Аббасова, Ю.В. Стреналюк, Н.А. Васильев, И.М. Белюченко, К.Л. Самаров, В.Н. Зиновьев, С.П. Посеренин, Г.Г. Вокин, А.П. Мороз, В.С. Шайдуров, С.С. Шаврин /под науч. ред. док.техн. наук, проф. В.М. Артюшенко. - Королев МО: МГОТУ, 2015. - 168 с.
- Артюшенко, В. М. Информационные технологии и управляющие системы: монография [Текст] / В.М. Артюшенко, Т.С. Аббасова, Ю.В. Стреналюк, В.И. Привалов, В.И. Воловач, Е.П. Шевченко, В.М. Зимин, Е.С. Харламова, А.Э. Аббасов, Б.А. Кучеров /под науч. ред. док.техн. наук, проф. В.М. Артюшенко. - М.: Издательство «Научный консультант», 2015. - 185 с.
- Артюшенко, В. М.Современные направления развития корпоративных сетей спутниковой связи[Текст] / В.М. Артюшенко, Т.С.Аббасова, Б.А. Кучеров // Двойные технологии. - 2014. - №3(68). - С.67-72.
- Зачем язык программирования Swift нужен Apple и вам: [Электронный ресурс] // Lookatme.URL: http://www.lookatme.ru/mag/ live/inspiration-lists/204771 -swift
- Исаева, Г. Н. Об индуктивном подходе к приобретению знаний в экспертных системах управления персоналом [Текст] / Г.Н. Исаева // Вопросы региональной экономики - 2017. Т.5. - С. 100-105.
- Когтев, П.А. Определение местоположения объектов в помещениях ВУЗа с помощью технологии ZigBee[Текст] /П.А.Когтев, Н.В.Логачева, Г.Н.Исаева // Перспективы, организационные формы и эффективность развития сотрудничества российских и зарубежных ВУЗов.Сборник материалов Международной научно-практической конференции 24-25 апреля 2014 г.: Королев МО: ФТА. Изд-во «Канцлер», 2014. - С.357-363.
- Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript: [Электронный ресурс] // OpenNet.URL: http:// www.opennet.ru/opennews/art.shtml?num=34981
- Новости свободного ПО: [Электронный ресурс] // Компьютерные вести.иКЬ: http://www.kv.by/content/325304-novostisvobo dnogo-po
- Олег Цилюрик. Сравнительное обозрение языков программи- рования[Электронный ресурс] // Редакция 2.31. 2014 год. - 78с.
- Сайт о языке программирования Dart - руководства, инструкции, новости, статьи и многое другое: [Электронный ресурс] // dartdot.ru.URL: http://dartdot.ru/
- Свердлов,С. З. Языки программирования и методы трансляции [Текст] / С.З. Свердлов // Питер: 2017 .
- Язык Wolfram Alpha - революция в области программирования // DailyTechlnfo [Электронный ресурс]. URL: http://www.dailytechinfo.org/infotech/5709-yazyk-wolfram-alpha-revolyuciya-v- oblasti-programmirovaniya.html (дата обращения: 26.12.2017).
- Язык программирования Swift. Русская версия: [Электронный ресурс] // Хабрахабр.URL: http://habrahabr.ru/post/225841/
- Языки программирования [Электронный ресурс]. URL: http://life-prog.ru (дата обращения: 26.12.2017).
- McALLISTER N. InfoWorld. «10 языков программирования, которые могут перевернуть мир IT» // Компьютерные вести [Электронный ресурс]. URL: http://www.kv.by/content/325498-10-yazykov- programmirovaniya-kotorye-mogut-perevernut-mir-it (дата обращения: 26.12.2017).
- Sketch - новый язык программирования, способный самостоятельно оптимизировать и завершать незаконченные участки кода // DailyTechlnfo [Электронный ресурс]. URL: http://www. dailytechinfo.org/infotech/5691-sketch-novyy-yazyk-programmirovaniya-sposobnyy-samostoyatelno- optimizirovat-i-zavershat-nezakonchennye-uchastki-koda.html (дата обращения: 26.12.2017).
- Wyvern - новая система, позволяющая использовать несколько разных языков программирования при создании одной программы // Daily Techlnfo [Электронный ресурс]. URL: http://www.dailytechinfo.org/infotech/6167-wyvern-novaya-sistema-pozvolyayuschaya-ispolzovat-neskolko- raznyh-yazykov-programmirovaniya-pri-sozdanii-odnoy-programmy.html (дата обращения: 26.12.2017).
- Организационная культура и ее роль в современных организациях на примере ООО «Новосибирск МонтажТехСервис»
- «Понятие и принципы правового регулирования в индустрии спорта»
- Юридические лица как субъекты предпринимательского права (Теоретические аспекты сущности категории юридического лица)
- Процедуры банкротства: виды, общая характеристика
- Функции системы управления персоналом в спортивной организации
- Индивидуальное предпринимательство (Понятие индивидуального предпринимательства и предпринимательской деятельности. государственная регистрация индивидуального предпринимателя)
- Применение объектно-ориентированного подхода при проектировании информационной системы (Анализ методов моделирования и предметной области)
- Процессы принятия решений в организации (Характеристика управленческих решений)в
- Политика мотивации персонала в системе стратегического управления кадровым направлением деятельности организации (Понятие мотивации и особенности его отражения в различных теориях)
- Организационная культура как источник конкурентных преимуществ фирмы (на примере салона «Тера»)
- Разработка конфигурации «Учет реализации лекарственных препаратов через аптечную сеть»
- Разработка регламента выполнения процесса «Проведение оценки качества» (Описание предметной области. Постановка задачи)