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

Классификация языков программирования высокого уровня ( Обзор актуальных технологий программирования )

Содержание:

ВВЕДЕНИЕ

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

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

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

Цель работы – рассмотреть классификацию языков программирования высокого уровня.

Объект работы – язык программирования высокого уровня направленный на решение задач вычислительной математики

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

Задачи исследования:

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

1. Обзор актуальных технологий программирования

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

На сегодняшний день в мире существует около 170 языков программирования, более 300 их реализаций. Каждый из них обладает своими особенностями, достоинствами и недостатками. Старые, не развивающиеся языки отмирают, поддержка их прекращается. Те же языки программирования, которые снискали большую популярность, толкают разработчиков на создание сред программирования (SDK), которые призваны ускорить процесс создания и отладки программ, значительно упростить жизнь программистам[1].

К языкам программирования высокого уровня относятся: Фортран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi[2].

В программировании можно выделить несколько этапов решения любой задачи:

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

- кодирование - составление программы на любом из языков программирования, которую затем можно будет перевести на понятный для компьютера язык;

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

Без четкой задачи и грамотной проработки алгоритма невозможно создать качественную программу.

Устройство всех систем взаимодействия схоже и во многом определяет классификацию языков программирования. Основные объекты языка программирования постоянны и напоминают компоненты человеческих языковых систем: синтаксис, определяющий формальные правила записи программы, допустимые виды и регистр символов; лексика, включающая в себя весь словарный запас языка: имена переменных и функций, константы, строки, операторы; грамматика, указывающая, как правильно сочетать единицы языка для образования словосочетаний и предложений[4]. Лексика и грамматика вместе определяют семантику языка. На этом уровне конкретные последовательности знаков приобретают особый смысл, понятный человеку и компьютеру. Например, слово while во многих системах программирования трактуется как начало циклической операции[5].

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

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

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

Рассмотрим классификацию и особенности языков программирования разного уровня:

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

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

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

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

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

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

Основные недостатки низкоуровневых языков: для каждого типа ЭВМ необходимо использовать определенную систему команд, зависящую от особенностей функционирования машины; сложность и низкая скорость процесса программирования; высокая вероятность появления ошибок, которые сложно отследить; отсутствие мобильности программ, невозможность запустить их на ЭВМ другого типа. Высокоуровневые системы программирования не привязаны к определенной машинной системе команд и могут выполняться на любом компьютере[10].

Благодаря высокому уровню абстракции они могут себе позволить использовать различные концепции и методологии в составлении инструкций. Поэтому классификация языков программирования высокого уровня очень обширна и сложна[11].

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

Компиляция - единовременный перевод всей программы в машинный код.

Интерпретация - последовательное выполнение каждого выражения.

Транскомпиляция - перевод на язык более низкого уровня, например, C или ассемблер, и его последующая компиляция.[12]

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

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

Основные недостатки интерпретационной модели: постоянное нахождение транслятора в памяти ЭВМ; повторная обработка повторяющихся команд. Несмотря на это, интерпретируемые языки очень удобны для циклической разработки и отладки, так как позволяют быстро вносить изменения в программу. Компилятор же трудится только один раз, сразу преобразуя всю инструкцию в понятный для компьютера вид - машинный код или некий промежуточный байт-код, а затем покидает память ЭВМ. Здесь выполнение отделено от процесса трансляции, что является более эффективной моделью. Основные недостатки компиляционной модели: большая сложность. Прежде чем перевести программу на понятный машине язык, транслятор много раз проходит по исходной инструкции, анализируя и проверяя ее[14].

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

Классификация языков программирования высокого уровня по модели исполнения[15]:

Интерпретируемые - Python, Haskell, PHP, JavaScript.

Компилируемые сразу в машинный код: C, C++, Fortran, ASM. Компилируемые в байт-код: Python, Java.

Транскомпилируемые: Haskell, Fortran, C, C++. Обработка данных Любой язык программирования работает с информацией, которой нужно каким-то образом манипулировать, проверять на корректность, изменять. Данные могут быть самими разнообразными - числами, строками или сложными структурами. Разумеется, с каждым типом необходимо работать по-разному, но чтобы определить, как именно, сначала необходимо понять, с какими именно данными ЭВМ имеет дело. На основе метода определения разновидности данных построена классификация языков программирования по системе типов.

Нетипизированные языки.

Типизированные языки разной степени строгости. Нетипизированными являются языки ассемблера, которые способны обрабатывать непосредственно двоичные данные[16]. Тип данных при этом не имеет никакого значения. Для типизированных языков важно, с какой разновидностью данных они работают. Некоторые операции определены только для чисел, например, деление, другие - только для строк. При этом некоторые системы позволяют программисту определенные вольности. Например, они могут самостоятельно определять и «неявно» конвертировать один тип данных в другой, исходя из семантики команды. Это очень удобно, но усложняет отладку, так как может привести к незаметной ошибке. Ярким примером нестрогой типизации является JavaScript. Строго типизированные языки, например, Java, такой свободы не допускают и требуют указания типов и их явной конверсии, если она необходима[17].

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

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

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

Объекты в программировании. Языки последней группы описывают все сущности в виде независимых объектов, скрывающих в себе сложные механики. Основными концепциями ООП (объектно-ориентированного программирования) являются: инкапсуляция - скрытие функционала внутри объекта; наследование одними объектами методов других; полиморфизм - изменение сути с сохранением внешнего интерфейса[20].

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

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

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

1.2. Краткая характеристика языков программирования высокого уровня

Язык программирования С++. Созданный на основе языка С, но не совместимый полностью с ним язык С++ – компилируемый, типизированный язык программирования, поддерживающий основные парадигмы программирования (процедурное программирование, объектно-ориентированное программирование, обобщённое программирование, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции)[22].

Он широко используется при разработке программного обеспечения (ПО) и является одним из самых популярных языков программирования. Область его применения огромна: создание операционных систем, драйверов устройств, игр, серверов и пр. С++ делает акцент на разработке новых типов данных, наиболее полно соответствующих концепциям выбранной области знаний и задачам приложения. Ключевым понятием С++ является класс[23].

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

Достоинства: Имеется возможность работы на низком уровне с памятью, адресами. Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы). Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы[26].

Язык программирования С# C# — элегантный, типобезопасный объектно-ориентированный язык, предназначенный для разработки разнообразных безопасных и мощных приложений, выполняемых в среде .NET Framework, поставляемой компанией Microsoft. С помощью языка C# можно создавать обычные приложения Windows, XML-веб-службы, распределенные компоненты, приложения «клиент-сервер», приложения баз данных и т.д.[27]. Visual C# предоставляет развитый редактор кода, конструкторы с удобным пользовательским интерфейсом, встроенный отладчик и множество других средств, упрощающих разработку приложений на базе языка C# и .NET Framework.

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

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

Атрибуты с декларативными метаданными о типах во время выполнения.

Встроенные комментарии XML-документации.

LINQ, предлагающий встроенные возможности запросов в различных источниках данных.

Инкапсулированные сигнатуры методов, называемые делегатами, которые поддерживают типобезопасные уведомления о событиях[29].

Программа на языке C# выполняется в среде .NET Framework – интегрированном компоненте Windows, содержащем виртуальную систему выполнения (среда CLR) и унифицированный набор библиотек классов[30]. Среда CLR представляет собой коммерческую реализацию Майкрософт инфраструктуры CLI (common language infrastructure), международного стандарта, основы сред выполнения и разработки с тесным взаимодействием языков и библиотек. Исходный код, написанный на языке C#, компилируется в промежуточный язык (IL) в соответствии со спецификацией CLI. Код IL и ресурсы, такие как растровые изображения и строки, хранятся на диске в исполняемом файле, называемом сборкой, с расширением EXE или DLL в большинстве случаев. C# спроектирован быть кросплатформенным, однако его развитие не пошло в этом направлении. Поэтому под Windows образовалась достаточно полная .net инфраструктура; на других же платформах равноценной инфраструктуры не появилось[31].

Преимуществ у C# перед другими ООП-языками немало:

C# разрабатывался вместе с новым каркасным фреймворком Framework.Net и, соответственно, лишен всех «прелестей» подстройки, ведь основной девиз .Net — это отсутствие мук выбора, единая платформа для множества языков[32].

У него неограниченные возможности наследования и универсализации.

Как потомок C/C++, он невероятно прост в освоении для любого, знакомого с прародителем, что облегчает переход с языка на язык.

Оставаясь узнаваемым, C# заметно надёжнее и проще.

Мощная база данных каркасного фреймворка дает просто неограниченные возможности при том, что у современной версии языка их вообще три: десктопный WPF, сервисный WCF и вебовский MVC, .NET 4.5.

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

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

Язык Java, разработанный компанией Sun Microsistems, а ныне пребывающий под началом Oracle – объектно-ориентированный, простой в освоении язык программирования, одинаково удобный для разработки как простых учебных приложений, так и серьезных программных комплексов для бизнеса. Java зародился как часть проекта создания передового программного обеспечения для различных бытовых приборов. Реализация проекта была начата на языке C++, но вскоре возник ряд проблем, наилучшим средством борьбы с которыми было изменение самого инструмента — языка программирования. Стало очевидным, что необходим платформонезависимый язык программирования, позволяющий создавать программы, которые не приходилось бы компилировать отдельно для каждой архитектуры и можно было бы использовать на различных процессорах под различными операционными системами. Язык Java потребовался для создания интерактивных продуктов для сети Internet[34].

Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с C и C++[35]. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++. Три ключевых элемента объединились в технологии языка Java[36]:

1. Java предоставляет для широкого использования свои апплеты (applets) — небольшие, надежные, динамичные, не зависящие от платформы активные сетевые приложения, встраиваемые в страницы Web. Апплеты Java могут настраиваться и распространяться потребителям с такой же легкостью, как любые документы HTML.

2. Java высвобождает мощь объектно-ориентированной разработки приложений, сочетая простой и знакомый синтаксис с надежной и удобной в работе средой разработки.

3. Java предоставляет программисту богатый набор классов объектов для ясного абстрагирования многих системных функций, используемых при работе с окнами, сетью и для ввода-вывода. Ключевая черта этих классов заключается в том, что они обеспечивают создание независимых от используемой платформы абстракций. Главная особенность Java – независимость от платформы, на которой выполняется программа. Программы на Java транслируются в байт-код, выполняемый на виртуальной java-машине (JVM) — программе, обрабатывающей байт-код и передающей инструкции оборудованию, как интерпретатор, но с тем отличием, что байт-код, в отличие от текста, обрабатывается значительно быстрее.

Язык Паскаль (Pascal). Был создан математиком Н. Виртом специально для обучения программированию. Однако со временем стал широко применяться для разработки программных средств в профессиональном программировании[37].

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

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

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

В отличие от языка С (С++) в при использовании Паскаль сведены к минимуму возможные синтаксические неоднозначности, синтаксис языка является интуитивно понятным и доступным, поскольку, как уже было отмечено выше, язык изначально разрабатывался для обучения студентов программированию[40].

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

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

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

К проблемно-ориентированным относят следующие языки программирования:

Язык Лисп. Считается вторым после Фортрана старейшим высокоуровневым языком программирования. Данный язык наиболее часто применяется при разработке экспертных систем и систем аналитических вычислений. Существуют современные версии этого языка, которые активно применяются при разработке новейших web-технологий. Также модификации данного языка используются в качестве встроенных языков программирования в САПР. Примером может послужить AutoLISP – язык для разработки надстроек в продуктах компании AutoDesk[42].

Язык Пролог. Используется для реализации систем искусственного интеллекта, а также и интеллектуальных систем баз данных[43].

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

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

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

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

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

К основным языкам программирования высокого уровня относятся: Фортран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi.

2. Использование языков программирования высокого уровня для решения задач вычислительной математики

2.1. Методы численного интегрирования

Постановка задачи

Найти значение интеграла, пользуясь методом трапеций, методом Симпсона и методом Ньютона для различных n (n=6, 12, 30). Сравнить с точным значением интеграла и оценить погрешности методов при указанных n. Изобразить график подынтегральной функции и заштриховать область, площадь которой равна значению интеграла.

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

Эти методы применяются для приближенного вычисления определенного интеграла вида: . Функция f(x) задана на отрезке [a, b]. Этот отрезок разбивается на n равных частей длины h=(b-a)/n.

Определенный интеграл представляет собой площадь, ограниченную кривой f(x), осью x и прямыми x=a и x=b. Приблизительно эта площадь представляется суммой площадей полос, основания которых одинаковы и равны h, а высоты равны значениям функции в точках разбиения. Обозначим точки разбиения x0=a, x1=a+h, x2= a+2h,…xn=b, а значения функции в этих точках соответственно yo=f(x0); y1=f(x1), y2=f(x2), … yn=f(xn).

Метод трапеций:

Метод Симпсона:

гдеn=2*m число разбиений отрезка [a, b], кратное двум.

Метод Ньютона:

гдеn=m*3– число разбиений отрезка [a, b], кратное трем

2.2. Решение задания на языке высокого уровня С

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

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define a -1

#define b 1

#define I 2.350402

int N;

void menu();

float y(float x);

intget_n();

float Simpson();

float Trap();

floatNewton();

intconsole_n();

intfile_n();

void output(float f, inti);

void console_I(float f, inti);

void file_i(float f, inti);

int main()

{

menu();

return 0;

}

void menu()

{

printf("\n %3.d\n", b);

printf(" I = S(e^x)dx\n");

printf(" %1.d\n\n", a);

printf("1. Solve by Simpson\n2. Solve by trapeze\n3. Solve by Newton\n4. Exit\n>> ");

int c;

float f;

scanf("%d", &c);

switch (c)

{

case 1 :

{

system("cls");

f = Simpson();

break;

}

case 2 :

{

system("cls");

f = Trap();

break;

}

case 3 :

{

system("cls");

f = Newton();

break;

}

case 4 :

{

system("cls");

exit(1);

break;

}

default :

{

system("cls");

menu();

}

}

output(f, c);

printf("Push any button to return to menu...");

getch();

system("cls");

menu();

}

void console_I(float f, inti)

{

system("cls");

if (i == 1)

printf("Solved by Simpson method: n = %d\n", N);

else if (i == 2)

printf("Solved by trapeze method: n = %d\n", N);

else

printf("Solved by Newton method: n = %d\n", N);

printf("\n %3.d\n", b);

printf(" I = S(e^x)dx = %f\n", f);

printf(" %1.d\n\n", a);

printf("Exact value: %f\n", I);

printf("Difference: %f\n", I - f);

}

void file_I(float f, inti)

{

FILE *t;

t = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/output_f.txt", "w");

if (i == 1)

fprintf(t, "Solved by Simpson method: n = %d\n", N);

else if (i == 2)

fprintf(t, "Solved by trapeze method: n = %d\n", N);

else

fprintf(t, "Solved by Newton method: n = %d\n", N);

fprintf(t, "\n %3.d\n", b);

fprintf(t, " I = S(e^x)dx = %f\n", f);

fprintf(t, " %1.d\n\n", a);

fprintf(t, "Exact value: %f\n", I);

fprintf(t, "Difference: %f\n", I - f);

fclose(t);

}

void output(float f, inti)

{

int c;

printf("Output I:\n1. File\n2. Console\n3. File&Console\n>> ");

scanf("%d", &c);

if (c == 1)

file_I(f, i);

else if (c == 2)

console_I(f, i);

else

{

console_I(f, i);

file_I(f, i);

}

}

float y(float x)

{

return expf(x);

}

intget_n()

{

int n, c;

printf("Input n:\n1. From file\n2. From console\n>> ");

scanf("%d", &c);

if (c == 1)

n = file_n();

else

n = console_n();

N = n;

return n;

}

intconsole_n()

{

system("cls");

int n;

printf("Enter n: ");

scanf("%d", &n);

return n;

}

intfile_n()

{

FILE *f;

int n;

f = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/input_n.txt", "r");

fscanf(f, "%d", &n);

fclose(f);

return n;

}

float Simpson()

{

float n;

n = get_n();

float h = (b - a) / n, sum = 0;

inti, p;

for (i = 1; i< n; i++)

{

if ((int)i % 2 == 0)

p = 2;

else

p = 4;

sum += p*y(a + h * i);

}

sum += y(a) + y(b);

sum *= (h/3);

return sum;

}

float Trap()

{

float n;

n = get_n();

float h = (b - a) / n, sum = 0;

inti;

for (i = 0; i< n; i++)

sum += y(a + i * h) + y(a + (i + 1) * h);

sum *= h / 2;

return sum;

}

float Newton()

{

float n;

n = get_n();

float h = (b - a) / n, sum1 = 0, sum2 = 0, sum;

inti;

for (i = 1; i< n; i++)

if ((int)i % 3 == 0)

sum1 += y(a + i * h);

else

sum2 += y(a + i * h);

sum = 3.0 / 8 * h * (y(a) + y(b) + 2 * sum1 + 3 * sum2);

returnsum;

}

Тестирование

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

Решим интеграл тремя разными способами, но при одном n, допустим n = 12.

Точное значение = 2.350402.

Решим методом Симпсона:

ограммирование matlab паскаль язык

Решим методом трапеций:

Решим методом Ньютона:

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

2.3. Решение задания на языке высокого уровня Паскаль

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

Модульmain:

programKursVar4;

uses menu;

begin

menu_1;

end.

Модульmenu:

unit menu;

Interface

procedure menu_1;

Implementation

uses crt, math, output;

procedure menu_1;

var c, n : integer;

f : real;

begin

clrscr;

writeln(' 1');

writeln(' I = S(e^x)dx');

writeln(' -1');

writeln('1. Solve by Simpson');

writeln('2. Solve by trapeze');

writeln('3. Solve by Newton');

write('>> ');

read(c);

case c of

1: begin

clrscr;

f := Simpson(n);

end;

2: begin

clrscr;

f := Trap(n);

end;

3: begin

clrscr;

f := Newton(n);

end;

4: begin

clrscr;

halt;

end;

else

begin

menu_1;

end;

end;

output_I(f, c, n);

writeln('Push any button to proceede to main menu...');

readln;

menu_1;

end;

end.

Модульmath:

unit math;

Interface

function Simpson(var n: integer): real;

function Trap(var n: integer): real;

function Newton(var n: integer): real;

function y(x: real): real;

Implementation

uses crt, input;

var a, b : integer;

function Simpson(var n: integer): real;

var h, sum : real;

i, p: integer;

begin

n := get_n;

a := -1; b := 1;

h := (b - a) / n;

sum := 0;

for i := 1 to n - 1 do

begin

if i mod 2 = 0 then

p := 2

else

p := 4;

sum := sum + p * y(a + h * i);

end;

sum := sum + y(a) + y(b);

sum := sum * (h / 3);

Simpson := sum;

end;

function Trap(var n: integer): real;

var h, sum : real;

i : integer;

begin

n := get_n;

a := -1; b := 1;

h := (b - a) / n;

sum := 0;

for i := 0 to n - 1 do

sum := sum + y(a + i * h) + y(a + (i + 1) * h);

sum := sum * (h / 2);

Trap := sum;

end;

function Newton(var n: integer): real;

var h, sum1, sum2, sum: real;

i : integer;

begin

n := get_n;

a := -1; b := 1;

h := (a - b) / n;

sum1 := 0; sum2 := 0;

for i := 0 to n - 1 do

if i mod 3 = 0 then

sum1 := sum1 + y(a + i * h)

else

sum2 := sum2 + y(a + i * h);

sum := 3 / 8 * h * (y(a) + y(b) + 2 * sum1 + 3 * sum2);

Newton := sum;

end;

function y(x : real): real;

begin

y := exp(x);

end;

end.

Модульinput:

unit input;

Interface

function get_n : integer;

function file_n : integer;

function console_n : integer;

Implementation

uses crt;

function get_n : integer;

var c : integer;

begin

clrscr;

writeln('Input N:');

writeln('1. From file');

writeln('2. From console');

write('>> ');

readln(c);

if c = 1 then

get_n := file_n

else

get_n := console_n;

end;

function file_n : integer;

var t : text;

n : integer;

begin

clrscr;

assign(t, 'input_n.txt');

reset(t);

read(t, n);

close(t);

clrscr;

file_n := n;

end;

function console_n : integer;

var n : integer;

begin

clrscr;

write('Input N: ');

readln(n);

delay(300);

clrscr;

console_n := n;

end;

end.

Модульoutput:

unit output;

Interface

procedure output_I(f : real; i, n : integer);

procedure file_I(f : real; i, n : integer);

procedure console_I(f : real; i, n : integer);

Implementation

uses crt;

procedure output_I(f : real; i, n : integer);

var c : integer;

begin

writeln('Output I:');

writeln('1. File');

writeln('2. Console');

writeln('3. File&Console');

write('>> ');

readln(c);

if c = 1 then

file_I(f, i, n)

else

if c = 2 then

console_I(f, i, n)

else

begin

file_I(f, i, n);

console_I(f, i, n);

end;

end;

procedure file_I(f : real; i, n : integer);

var t : text;

r : real;

begin

assign(t, 'output_f.txt');

rewrite(t);

if i = 1 then

writeln(t, 'Solved by Simpson method: n = ', n)

else

if i = 2 then

writeln(t, 'Solved by trapeze method: n = ', n)

else

writeln(t, 'Solved by Newton method n = ', n);

writeln(t, ' 1');

writeln(t, ' I = S(e^x)dx = ', f);

writeln(t, ' -1');

r := exp(1) - exp(-1);

writeln(t, 'Exact value: ', r);

r := f - r;

writeln(t, 'Difference: ', r);

close(t);

end;

procedure console_I(f : real; i, n : integer);

var r : real;

begin

clrscr;

if i = 1 then

writeln('Solved by Simpson method: n = ', n)

else

if i = 2 then

writeln('Solved by trapeze method: n = ', n)

else

writeln('Solved by Newton method n = ', n);

writeln(' 1');

writeln(' I = S(e^x)dx = ', f);

writeln(' -1');

r := exp(1) - exp(-1);

writeln('Exact value: ', r);

writeln('Difference: ', f - r);

end;

end.

Тестирование

Решим методом трапеций:

Решим методом Ньютона:

Решим методом Симпсона:

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

Таким образом, в данной главе нами была осуществлена задача вычислительной математики на двух языках: #Си и Pascal.

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

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

Плюсы и минусы итоговой программы:

Плюсы:

1. Программа включает в себя такие структуры как: условные операторы, операторы множественного выбора, функции, процедуры, модули, файлы.

2. Занимает небольшой объем оперативной памяти.

3. Совмещена практически с любой операционной системой.

4. Может запускаться как с использованием среды, так и с помощью файла exe.

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

Минусы:

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

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

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

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

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

Так, например, в обоих языках есть подпрограммы ввода и вывода, но в Си это printf и scanf, а в Паскале write и read. Так со многими командами, но они имеют одинаковый смысл, что делает несложным перевод кода с одного языка на другой. Структурное программирование заметно упрощает процесс написания программы. Благодаря использованию подпрограмм упрощается исправление ошибок, допущенных в ходе написания программы. А нисходящее программирование снижает количество ошибок. Дальнейшее применение этой программы вполне возможно. Модули вычисления интегралов можно использовать в других, более сложных программах, что является серьезным преимуществом структурного программирования.

ЗАКЛЮЧЕНИЕ

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

В курсовой работе нами была произведена классификация языков программирования высокого уровня к ним относятся: Фортран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi.

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

Во второй главе мы использовали язык программирования Си и Паскаль (высокого уровня), для решения задач по вычислительной математики. В результате чего, пришли к выводу, что эти языки крайне похожи, но имеют серьезные различия в синтаксисе. Так, например, в обоих языках есть подпрограммы ввода и вывода, но в Си это printf и scanf, а в Паскале write и read. Так со многими командами, но они имеют одинаковый смысл, что делает несложным перевод кода с одного языка на другой. Структурное программирование заметно упрощает процесс написания программы. Благодаря использованию подпрограмм упрощается исправление ошибок, допущенных в ходе написания программы. Дальнейшее применение этой программы вполне возможно. Модули вычисления интегралов можно использовать в других, более сложных программах, что является серьезным преимуществом структурного программирования.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Абрамов Г.В., Медведкова И.Е., Коробова Л.А. Проектирование информационных систем. – М.: ВГУИТ, 2012. – 172 с.
  2. Архангельский А.Я. Программирование в С++Builder 6. – М.: Бином, 2012. – 1151 с.
  3. Ашарина И.В. Основы программирования на языках C и C++. – М.: Горячая линия – Телеком, 2012. – 208 c.
  4. Батоврин В.К. Толковый словарь по системной и программной инженерии. – М.: ДМК Пресс. 2012. – 280 с.
  5. Биллиг В.А. Основы объектного программирования на C# (C# 3.0, Visual Studio 2008). – М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2016. – 584 c.
  6. Васильев П.П. Турбо Паскаль в примерах и задачах. – М.: Финансы и статистика, 2016. – 496 c.
  7. Вязовик Н.А. Программирование на Java. - СПб: Интуит, 2016. –600 с.
  8. Гавриков М.М., Иванченко А.Н., Гринченков Д.В. Теоретические основы разработки и реализации языков программирования. – М.: КноРус, 2014. – 184 c.
  9. Гергель В.П. Современные языки и технологии параллельного программирования. – М.: Издательство МГУ, 2012. – 408 c.
  10. Герман О., Герман Ю. Программирование на Java и C# для студента. – М.: БХВ-Петербург, 2014. - 512 c.
  11. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – 400 c.
  12. Ишкова Э.А. C#. Начала программирования. – М.: Бином-Пресс, 2016. – 334 c.
  13. Кетков Ю.Л., Кетков А.Ю. Свободное программное обеспечение. FREE PASCAL для студентов и школьников (+ CD). – М.: БХВ–Петербург, 2012. – 376 c.
  14. Павловская Т.А. C/C++: Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2012. – 480 с.
  15. Пахомов Б. C/C++ и MS Visual С++ 2010 для начинающих. – СПб.: БХВ–Петербург, 2011. – 726 с.
  16. Портянкин И.А. Swing. Эффектные пользовательские интерфейсы. - СПб.: Лори, 2011. – 608 с.
  17. Советов Б.Я. Архитектура информационных систем / Б.Я. Советов, А.И. Водяхо, В.А. Дубенецкий и др. – М.: Издательский центр «Академия», 2012. – 288 с.
  18. Трутнев Д.Р. Архитектуры информационных систем. Основы проектирования: Учебное пособие. - СПб.: НИУ ИТМО, 2012. – 66 с.
  19. Хорев П.Б. Объектно-ориентированное программирование с примерами на С#. Учебное пособие. – М.: Форум, Инфра-М, 2016. – 200 c.
  20. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – 220 c.
  1. Гавриков М.М., Иванченко А.Н., Гринченков Д.В. Теоретические основы разработки и реализации языков программирования, – М.: КноРус, 2014. – С. 72.

  2. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – С. 28.

  3. Батоврин В.К. Толковый словарь по системной и программной инженерии. – М.: ДМК Пресс, 2012. – С. 55.

  4. Гергель В.П. Современные языки и технологии параллельного программирования. – М.: Издательство МГУ, 2012. – С. 33.

  5. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – С. 54.

  6. Абрамов Г.В., Медведкова И.Е., Коробова Л.А. Проектирование информационных систем. – М.: ВГУИТ, 2012. – С. 60.

  7. Биллиг В.А. Основы объектного программирования на C# (C# 3.0, Visual Studio 2008). – М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, – 2016. – C. 28.

  8. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – С. 58.

  9. Архангельский А.Я. Программирование в С++Builder 6. – М.: Бином, 2012. – С. 552.

  10. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – С. 65.

  11. Черпаков И.В. Основы программирования. Учебник и практикум / И.В. Черпаков. – М.: Юрайт, 2016. – C. 187.

  12. Батоврин В.К. Толковый словарь по системной и программной инженерии. – М.: ДМК Пресс, 2012. – С. 154.

  13. Гергель В.П. Современные языки и технологии параллельного программирования. – М.: Издательство МГУ, 2012. – С. 67.

  14. Гавриков М.М., Иванченко А.Н., Гринченков Д.В. Теоретические основы разработки и реализации языков программирования. – М.: КноРус, 2014. – С. 59.

  15. Трутнев Д.Р. Архитектуры информационных систем. Основы проектирования: Учебное пособие. - СПб.: НИУ ИТМО, 2012. – С. 241.

  16. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – С. 77.

  17. Герман О., Герман Ю. Программирование на Java и C# для студента. – М.: БХВ-Петербург, 2014. – С. 73.

  18. Советов Б.Я. Архитектура информационных систем / Советов Б.Я., Водяхо А.И., Дубенецкий В.А. и др. – М.: Издательский центр «Академия», 2012. – С. 127.

  19. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – С. 81.

  20. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – C. 197.

  21. Гавриков М.М., Иванченко А.Н., Гринченков Д.В. Теоретические основы разработки и реализации языков программирования. – М.: КноРус, 2014. – С. 88.

  22. Ашарина И.В. Основы программирования на языках C и C++. – М.: Горячая линия – Телеком, 2012. – С. 38.

  23. Архангельский А.Я. Программирование в С++Builder 6. – М.: Бином, 2012. – С. 782.

  24. Пахомов Б. C/C++ и MS Visual С++ 2010 для начинающих. – СПб.: БХВ–Петербург, 2011. – С. 122.

  25. Ашарина И.В. Основы программирования на языках C и C++. – М.: Горячая линия – Телеком, 2012. – C. 178.

  26. Павловская Т.А. C/C++: Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2012. – С. 55.

  27. Биллиг В.А. Основы объектного программирования на C# (C# 3.0, Visual Studio 2008). – М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2016. – С. 49.

  28. Герман О., Герман Ю. Программирование на Java и C# для студента. – М.: БХВ-Петербург, 2014. – С. 66.

  29. Ишкова Э.А. C#. Начала программирования. – М.: Бином-Пресс, 2016. – C. 207.

  30. Хорев П.Б. Объектно-ориентированное программирование с примерами на С#. Учебное пособие. – М.: Форум, Инфра-М, 2016. – С. 71.

  31. Ашарина И.В. Основы программирования на языках C и C++. – М.: Горячая линия – Телеком, 2012. – C. 241.

  32. Гергель В.П. Современные языки и технологии параллельного программирования. – М.: Издательство МГУ, 2012. – C. 297.

  33. Ишкова Э.А. C#. Начала программирования. – М.: Бином-Пресс, 2016. – С. 91.

  34. Вязовик Н.А. Программирование на Java. - СПб: Интуит, 2016. – С. 325.

  35. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – С. 105.

  36. Герман О., Герман Ю. Программирование на Java и C# для студента. – М.: БХВ-Петербург, 2014. - C. 157.

  37. Кетков, Ю.Л., Кетков А.Ю. Свободное программное обеспечение. FREE PASCAL для студентов и школьников (+ CD). – М.: БХВ–Петербург, 2012. – C. 76.

  38. Васильев П.П. Турбо Паскаль в примерах и задачах. – М.: Финансы и статистика, 2016. – С. 67.

  39. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – С. 147.

  40. Васильев П.П. Турбо Паскаль в примерах и задачах. – М.: Финансы и статистика, 2016. – С. 84.

  41. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – С. 125.

  42. Зыков С.В. Введение в теорию программирования. Курс лекций. Учебное пособие. – М.: Интернет-университет информационных технологий, 2012. – C. 198.

  43. Гавриков М.М., Иванченко А.Н., Гринченков Д.В. Теоретические основы разработки и реализации языков программирования. – М.: КноРус, 2014. – С. 100.

  44. Черпаков И.В. Основы программирования. Учебник и практикум. – М.: Юрайт, 2016. – С. 132.