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

Сравнительный анализ описания данных для различных языков программирования ( ЯЗЫКИ ПРОГРАММИРОВАНИЯ И ИХ КЛАССИФИКАЦИЯ)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

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

ГЛАВА 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ И ИХ КЛАССИФИКАЦИЯ

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

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

Рассмотрим историю развития языков программирования.

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

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

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

Например, для процессора Zilog Z80 машинная команда 00000101, которая служит для уменьшения на единицу регистра процессора, на языке ассемблера будет записана как DEC B.

Для облегчения понимания программного кода в 1942 году был разработан язык программирования высокого уровня - язык Plankalkül (с немецкого языка - исчисление планов), который был разработан немецким инженером Конрадом Цузе.

Первым в мире транслятором языка высокого уровня является программирующая программа (ПП), он же ПП-1, который был успешно испытан в 1954 году.

Транслятор ПП-2, созданный в 1955 г году уже был оптимизирующим и включал в себя собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 включал в себя уже и компоновщик из модулей [2].

В 1955 году появился первый алгоритмический язык FORTRAN (FORmule TRANslator -переводчик формул), который был создан сотрудниками фирмы IBM под руководством Джон Бэкуса для решения научно-технических и инженерных задач.

В 1960 году появился язык ALGOL (Algoritmic Language -алгоритмический язык), который был ориентирован на научное использование, и который включал в себя множество новых понятий, одной из них является блочная структура. Данный язык стал концептуальным базисом для многих языков программирования.

В 1960 году за очень краткий срок группой CADASYL (Conferenceon Data System Languages) под руководством Joe Wegstein и при поддержке компании IBM был разработан стандартизированный деловой язык программирования COBOL (Comnon business oriented language-общепринятый деловой ориентированный язык). Данный язык в первую очередь ориентирован на решение экономических задач, а именно на обработку информации.

В 1961 году американский профессор Джон Маккартни разработал язык LISP (List procssing language -язык обработки списков), а Р.Грисуолд в 1962 году разработал язык программирования СНОБОЛ, который был ориентирован на обработку строк.

В 1965 году профессорами Дартмутского колледжа Томом Куртцем и Джоном Кемени для обучения студентов, которые незнакомы с вычислительной техникой (далее ВТ) был разработан язык BASIC (Beginners all-parpouse sumbolic instraction code - многоцелевой язык символических инструкций для начинающих). Впервые язык BASIC был применен в ПК IBM 704, но широкое распространение он получил в начале 80-х годов, после того как в 1975 году Пол Аллен и Билл Гейтс написали интерпретатор Basic для первого ПК Altair8800 [3].

В 1968-1970 годах профессор Никлаус Вирт в Цюрихскомполитехническом университете разработал язык PASCAL, как язык, который, с одной стороны, предоставлял бы возможность решать эффективно самые разнообразные задачи на современных ПК, а с другой - был бы очень хорошо приспособлен для обучения программированию. При разработке данного языка Вирт уделял большое внимание хорошему стилю программирования, так называемому структурному программированию, благодаря которому реализованные конструкции языка PASCAL позволяют писать легко проверяемые, надежные, программы с четкой и понятной структурой.

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

На сегодняшний день языки программирования высокого уровня подразделяются на следующие виды:

  • объектно-ориентированные (Object-oriented languages) – языки программирования, которые при разработке ПО используют различные совокупности объектов, которые в свою очередь состоят из самих данных, операций, производящих над ними, и классов объектов, которые обращаются и вызывают друг друга для дальнейшей работы [4];
  • логические (Logical languages) – языки программирования, которые применяются для разработки ПО в виде совокупности логических определенных правил с заранее описанными алгоритмами, которые как раз и обеспечивают обработку данных. Использование логических языков программирования требует упорядочивание основных моментов, которые лежат в базисе алгоритма, а не определение шагов, необходимых для получения результата [5];
  • функциональные (Functional languages) – языки программирования, в которых действия c данными выражаются в виде терминов последовательности команд. Программные продукты разработанные на функциональном языке программирования, представляют собой совокупность различных описаний функций и выражений, необходимых для обеспечения результата. В функциональных языках программирования память используется для хранения значений переменных, и операторы присваивания отсутствуют, благодаря чему, переменные обозначают объекты программы, а не области памяти.[6]
  • процедурные (Procedural languages) – языки программирования, в которых все действия над данными должны быть описаны последовательностями определенных команд. Таким образом, ПО, написанное на процедурном языке, представляет собой некоторую последовательностью команд, которая и определяет алгоритм решения задачи. Главной идеей данного вида программирования является то, что память должна применяться не для накопления и хранения информации, а для ее обработки, при этом главной командой в процедурном программировании является операция присвоения, при помощи которой и изменения определяются и вносятся в память ЭВМ, то есть ПО само осуществляет преобразование содержимого памяти, изменяя его, тем самым из исходного состояния память переходит к результирующему состоянию [7] (рисунок 1).

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

На рисунке 2 отображена классификация наиболее популярных языков программирования.

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

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

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

1. Ассемблер является языком программирования, который расширен путем внедрения конструкций высокоуровневых языков программирования. К достоинствам данного языка следует отнести, компактный код, можно разработать ПО, которое работает на микроуровне, то есть вне операционной системы (далее ОС), например, BIOS или драйвер.

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

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

3. Язык программирования Фортран (Fоrtran) является самым первым языком программирования высокого уровня, имеющий транслятор. Достоинством данного языка программирования является то, что он обладает, такими, важными факторами, как устойчивость и переносимость. Также неотъемлемой частью любого ПО, которое разработано на данном языке программирования, является специальная графическая библиотека, которая позволяет использовать различные графические данные при разработке ПО.

4. Язык программирования Pascal обладает строжайшей типизацией и наличием средств структурного (процедурного) программирования. Достоинством данного языка программирования является то, что он обладает огромным количеством возможностей для структурирования различных абстракций и информации (определение типов и перечислений, указатели, множества, записи).

5. C# является языком программирования высокого уровня. Достоинства данного языка заключаются в том, что на нем можно написать большое ПО с минимальным количеством ошибок, применяя при этом правила процедурного программирования. Недостатками данного языка является то, что до сих пор обнаруживается огромное количество случаев некорректного применения подобных элементов, которые не видны ни при компиляции ПО, ни во время исполнения программного кода.

ГЛАВА 2. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ОПИСАНИЯ ДАННЫХ ДЛЯ РАЗЛИЧНЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

2.1. Критерии эффективности языков программирования

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

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

Критерий эффективности— это правило, служащее для сравнительной оценки качества различных языков программирования, Который базируется на основе частных показателей эффективности (показателей качества) таких, как:

  • читабельность (легкость чтения и понимания программ);
  • легкость создания программ (удобство языка для создания программ в выбранной области);
  • надежность (обеспечение минимума ошибок при работе программ);
  • переносимость программ (легкость переноса программ из одной операционной среды в другую);
  • универсальность (применимость к широкому кругу задач);
  • четкость (полнота и точность официального описания языка) [9].

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

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

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

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

Легкость создания программ, которая отражает удобство языка для написания программ в конкретной предметной области. Поскольку в каждой предметной области программы имеют свою специфику, очень важно выбирать язык, который ее учитывает. Например, если речь идет об исследовании искусственного интеллекта, следует использовать язык Prolog или LISP, а при решении задач научных вычислений — язык Fortran. Как и следовало ожидать, характеристики, от которых зависит этот показатель, во многом пересекаются с характеристиками читабельности, ведь чтение текста является неотъемлемым атрибутом как процесса создания, так и процесса понимания программы [12].

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

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

Выразительность, которая может характеризовать две возможности. С одной стороны, она означает наличие очень мощных средств для представления структур данных и действий, описывающих большой объем вычислений с помощью очень маленькой программы (языки APL, Snobol, Icon, SETL). С другой стороны, выразительность позволяет записывать вычисления в более удобной и компактной форме.

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

Проверка типов. Принципиальным средством достижения высокой надежности языка является система типизации данных. В ходе проверки типов анализируется совместимость типов в программе. Разные языки обеспечивают разную полноту проверки типов. Достаточно слабой считают проверку типов в языке С. Языки с динамической типизацией вообще относят эту проверку только к периоду выполнения программы [15].

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

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

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

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

2.2.1. Простые типы данных

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

Некоторые языки программирования требуют, чтобы до их использования все переменные, аргументы и возвращаемые значения функций и процедур были объявлены с указанием типа (Pascal, Basic, С/C++). Другие (Лисп, PHP) этого не требуют, переменная в них приобретает тип в зависимости от первого присвоенного ей значения. При этом в большинстве языков программирования переменные могут иметь только один тип во все время их существования. Но в некоторых тип может меняться во время исполнения программы. В первом случае говорят о статической, во втором случае говорят о динамической типизации. Языки программирования могут быть как с явной, так и с неявной системой типов. В первом случае четко фиксируется, к какому типу относится та или иная переменная или константа, во втором об этом отдельно речь не идет, тем не менее данные обычно обрабатываются по-разному. И у первого, и у второго подхода имеются как достоинства, так и недостатки. Динамическая неявная типизация расширяет возможности использования переменных и избавляет программиста от хлопот, связанных с объявлением и контролем соответствия типов. Кроме того, данный подход позволяет создавать более универсальные и проще интегрируемые программные модули. Однако это требует от программиста большей ответственности, поскольку во время выполнения программы возможны неожиданности вроде попыток перемножить две строки или разделить число на логическое значение. При статической типизации такие ошибки обнаружились бы на этапе компиляции. И чем больше размер программы, тем более острой становится эта проблема. В некоторых языках само имя переменной свидетельствует о типе переменной. Например, в некоторых диалектах Basic имя переменной A% свидетельствует, что она целочисленная, а A$— что строковая. В языке Perl переменная в зависимости от типа получает значок перед именем: для скалярных переменных это $, для массивов — @, для ассоциативных массивов — % [17].

Под простыми, или базовыми, типами данных в языках программирования понимаются объекты (переменные или константы), которые не имеют доступной программисту внутренней структуры. В различных языках имеются разные наборы встроенных базовых типов данных [18].

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

Таблица 1 – Представление чисел в языках программирования

Тип данных переменной

C#

Pascal

Basic

Целочисленный

int

integer

integer

Действительный

double

real

Double

Логический

bool

boolean

boolean

Хранение одиночного символа

char

char

-

Строка

String

String

String

Указатель - константа или переменная, которая задает адрес в памяти, где располагаются некоторые другие объекты (данные, функция)

int* pA

C:=@pA;

-

Перечисления

enum DAY {Monday, Tuesday, Wednesday }

Type DAY=(Monday, Tuesday, Wednesday)

enum DAY{ Monday, Tuesday, Wednesday }

Программный код объявления переменной и присвоение ей значения на языках программирования:

1 C#:

int i=10;

2 Pascal:

var I :integer;

I:=10;

3 Basic:

Dim I as integer

I=10

2.2.2. Массивы

Массив представляет собой проиндексированный набор однородных элементов [19]. Объявление одномерного массива из 10 элементов в различных языках программирования может выглядеть так:

1 Basic:

Dim Vector (10) as integer

2 Pascal:

Var Vector = array [1..10] of integer;

3 C#:

Vector= new int[10];

Описание двумерного массива приведено ниже:

1 Basic:

Dim M(3, 4) as integer

2 Pascal:

Var M = array [1..3,1..4] of integer;

3 C#:

M= new int[3][4];

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

Динамический массив это массив, размер которого определяется при выполнении программы, тогда же происходит и выделение памяти под него. В некоторых языках программирования индекс может изменяться лишь в пределах от единицы до N (Basic) или от нуля до N – 1 (С#). Это обусловлено смещением элемента от адреса начала массива в памяти. В других языках, например Pascal допускается устанавливать произвольные границы изменения индекса для каждого измерения.

Базовая операция для массива — взятие элемента по индексу. Поэтому массив представляет собой структуру данных с произвольным доступом - в любой момент за одинаковое количество времени возможен доступ к любому месту в нем. Как правило, сравнение массивов одной операцией недопустимо [20].

Программный код объявления и заполнения массива на различных языках программирования.

1 C#:

{

            Console.WriteLine("Введите n");

            int n = int.Parse(Console.ReadLine());

            int[] a = new int[n];

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

            {

                Console.WriteLine("Введите {0}-й элемент", i + 1);

                a[i] = int.Parse(Console.ReadLine());

            }

        }

2 Pascal:

var a:array[1..100] of integer;

I,n: integer;  

begin

writeln(' Введите n: ');

 readln(n);

for i:=1 to n do begin

  write(' Введите {',i,'}-й элемент');

  readln(a[i]);  

end;

end;

3 Basic:

Dim n as integer;

Console.WriteLine("Введите n:", n)

n = Integer.Parse(Console.ReadLine())

DIM a(n)

For i = 1 To n

Console.WriteLine("Введите {0}-й элемент", i)

a(i) = Integer.Parse(Console.ReadLine())

Next

2.2.3. Записи

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

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

Рассмотрим пример записи на различных языках:

1 Pascal:

Type Book =record

price: real;

title: string[50];

author: string[50];

end;

var b: Book;

begin

writeln ('введите сведения об авторе');

readln (b. author);

writeln ('введите сведения о названии книги’);

readln (b. title);

writeln ('введите сведения о цене’);

readln (b. price);

end;

2 C#:

public struct Book

{

public decimal price;

public string title;

public string author;

   public void DisplayInfo()

        {

            Console.WriteLine($"author: {author}  title: {title} price: {price}");

        }

}

class Program

    {

        static void Main(string[] args)

        {

Book b;

b. author= Console.ReadLine();

b. title= Console.ReadLine();

b.price= Console.ReadLine();

b.DisplayInfo();

Console.ReadKey();

}

3 Basic – Отсутствует понятие структуры, доступно только в Visual Basic. Net.

Как видно из вышеописанного при помощи Pascal получается более трудоемкий программный код объявления записи, в отличие от C#.

2.2.4. Список

Следующей важнейшей структурой данных являются списки. Такого рода структуры в языках программирования весьма разнообразны. Простейшей является линейный односвязный список который представляет собой набор идущих друг за другом элементов, при записи разделяемых пробелом, запятой или иным знаком, например: [a,b,c,d,e]

В отличие от массивов, список, как правило, не предполагает возможности взятия элемента по его номеру.

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

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

Основными операциями над списками служат:

  • взятие первого элемента - головы списка;
  • взятие остатка списка, также являющегося списком, или его хвоста;
  • добавление элемента в список;θ
  • удаление заданного элемента из списка;
  • проверка на вхождение элемента в список;
  • приписывание списка к списку;θподсчет количества элементов списка.

В некоторых языках списки можно сравнивать одной операцией.

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

2 Во многих языках программирования списки не являются встроенной структурой, и их поддержка требует конструирования на основе записей и ссылок(указателей).

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

1 C# при использовании пространства имен System.Collections.Generic:

List<string> dinosaurs = new List<string>();

2 Pascal:

Type T dinosaursElem = ^TElemSpiska;

TElemSpiska = record

inf: integer;

next: T dinosaursElem;

end;

Var

dinosaurs: TdinosaursElem;

3 Basic:

Dim dinosaurs As New List(Of string)() From {‘Dino1’, ‘Dino2’, ‘Dino3’}

Как видно C# и Basic в отличие от Pascal обладают более простыми способами описания данных типа список.

2.2.5. Множества

В Pascal, C# и некоторых других языках программирования возможно использование так называемых множеств. Понятие множества в программировании значительно уже математического понятия.

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

Базовые операции над множествами:θпроверка вхождения элемента в множество;θтеоретико-множественные операции — объединение, пересечение, вычитание, сравнение множеств на эквивалентность, проверка вхождения подмножества в множество, удаление и/или добавление элемента.

Рассмотрим способы объявления множеств и работы с ними:

1 C# при использовании пространства имен System.Collections.Generic:

HashSet<int> T = new HashSet<int>();

Т.Add(‘1’);

Т.Add(‘2’);

Т.Add(‘3’);

Console.Write("Количество элементов множества: ", T.Count);

DisplaySet(T);

2 Pascal:

var

T:set of 1..N;

i:integer;

begin

T:=[1,2,3];

for i:=1 to N do if i in T then Write(i,' ');

ReadLn;

end.

Как видно на Pascal обладает встроенной библиотекой, которая позволяет краткой записью объявить множества, для работы с множествами C# требуется подключение пространства имен, да и запись множества довольна трудоемка. Также необходимо отметить, что Basic в отличие от Pascal и C# не обладает инструментом работы со множествами.

2.2.6. Файлы

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

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

Основные операции над файлами:θоткрытие в различных режимах — на чтение, запись, добавление и так далее.

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

1 Pascal:

var hta: file;

assign(hta,'c:\text.txt');

2 С#:

string path = @"C:\ hta.txt";

FileInfo fileInf = new FileInfo(path);

3 Basic:

Open "c:\ hta.txt" For Input As #1

Как видно из вышеописанного Pascal задает переменную, в которую передается содержимое файла, C# и Basic работают на прямую с фалом, но при этом только Basic в самом начале нуждается в определении, для чего будет применятся файл для ввода или вывода информации, в то время как Pascal и C# в этом не нуждаются.

2.3 Пример реализации записи данных

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

Листинг программного кода на языке C#:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ConsoleApplication1

{

class Program

{

private static void DisplaySet(HashSet<int> set)

{

Console.Write("{");

foreach (int i in set)

{

Console.Write(" {0}", i);

}

Console.WriteLine(" }");

}

static void Main(string[] args)

{

Console.WriteLine("Введите n");

int n = int.Parse(Console.ReadLine());

int[] a = new int[n];

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

{

Console.WriteLine("Введите {0}-й элемент", i + 1);

a[i] = int.Parse(Console.ReadLine());

}

HashSet<int> evenNumbers = new HashSet<int>();

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

{

evenNumbers.Add(a[i]);

}

Console.Write("Множество: ", evenNumbers.Count);

DisplaySet(evenNumbers);

Console.ReadKey();

}

}

}

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

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

Листинг программного кода на языке Pascal:

uses crt;

var a:array[1..100] of integer;

I,n: integer; evenNumbers:set of 1..100;

begin

clrscr;

writeln(' Vvod n: ');

readln(n);

for i:=1 to n do begin

write(' Vvedite element {',i,'}');

readln(a[i]);

end;

for i:=1 to n do

include(evenNumbers,a[i]);

write('Mnozhestvo:');

for i:=1 to n do if i in evenNumbers then Write(i,' ');

ReadLn;

end.

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

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

Листинг программного кода на языке Basic:

Module Module1

Sub Main()

Dim n As Integer

Dim s As String

Console.WriteLine("Введите n:", n)

n = Integer.Parse(Console.ReadLine())

Dim a(n) As Integer

For i = 1 To n

Console.WriteLine("Введите {0}-й элемент", i)

a(i) = Integer.Parse(Console.ReadLine())

Next

s = ""

For i = 1 To n

If i = 1 Then

s = a(i).ToString()

ElseIf i > 1 Then

s = s + "," + a(i).ToString()

End If

Next

Console.WriteLine("Множество: ")

Console.WriteLine("[{0}]", s)

Console.ReadKey()

End Sub

End Module

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

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

Необходимо отметить, что Basic не обладает инструментами создания и работы данными типа Множество, поэтому множество можно представить в виде строки значений, при этом функции множеств- объединение, пересечение и так далее придется создавать собственные.

2.4 Анализ полученных результатов

Проанализируем эффективность описания данных для различных языков программирования (таблица 2).

Обозначения в таблице.

Простота - П

Ортогональность - О

Объем кода – ОК

Таблица 2 – Эффективность описания данных для различных языков программирования

Тип данных

C#

Pascal

Basic

П

О

ОК

П

О

ОК

П

О

ОК

Простые типы данных

10

10

10

10

10

8

10

10

8

Массивы

10

10

10

9

9

8

10

9

7

Записи

10

10

10

9

9

8

8

9

7

Множества

9

7

7

10

10

10

0

0

0

Файлы

9

8

9

9

9

10

10

10

8

ИТОГО

48

45

46

47

47

44

38

38

36

Как видно из таблицы 2 язык программирования Pascal обладает всеми необходимыми инструментами для работы не только с простыми типами данных, но также с данными сложных структур – записи, множества, файлы. В отличие от Pascal язык программирования C# обладает более простой записью данных, объем кода при работе с данными простого типа является минимальным, а для работы с данными сложных типов применяются специальные пространства имен, что усложняет читабельность программного кода. Язык программирования Basic обладает в сравнении с вышеописанными языками программирования огромными недостатками – большой объем кода, простота написания, отсутствия встроенных механизмов описания данных типа множества.

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

  1. Окулова С. М. Основы программирования/ С. М. Окулова. – М.: Бином, 2018. – 332 с.
  2. Зыков С. В. Введение в теорию программирования/ С. В. Зыков. – М.: Интуит, 2018. – 400 с.
  3. Павловская Т. C#. Программирование на языке высокого уровня. Учебник для вузов/ Т. Павловская. – М.: Питер, 2016. – 432 с.
  4. Архангельский А.Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi / А.Я. Архангельский. - М.: Бином-Пресс, 2015. - 1248 c.
  5. Шилдт Герберт. C# 4.0. Полное руководство/ Герберт Шилдт. – М.: Диалектика, 2019. – 1056 с.
  6. Балена Ф. Современная практика программирования на MS Visual Basic и Visual C# / Ф. Балена. - М.: Русская редакция, 2016. - 640 c.
  7. Хорев П. Б. Объектно-ориентированное программирование с примерами на C#. Учебное пособие/ П. Б. Хорев. – М.: Форум, 2019. – 200 с.
  8. Чистякова Т. Б. Программирование на языках высокого уровня. Базовый курс : учеб. пособие / Т. Б. Чистякова, Р. В. Антипин, И. В. Новожилова ; СПбГТИ(ТУ). - СПб. : [б. и.], 2018. - 101 с.
  9. Ковалев В.Г. Turbo Pascal 7.0. Практика программирования / В.Г. Ковалев, С.В. Ковалев. - М.: КноРус, 2014. - 540 c.
  10. Остроух А.В. Основы информационных технологий: Учебник / А.В. Остроух. - М.: Academia, 2017. - 183 c.
  11. Коваленко В. В. Проектирование информационных систем: учеб. пособие для вузов / В. В. Коваленко. - М. : Форум, 2016. - 319 с.
  12. Фаронов В.В. TurboPascal 7.0. Практика программирования: Учебное пособие / В.В. Фаронов. - М.: КноРус, 2012. - 414 c.
  13. Великович Л.С. Программирование для начинающих / Л.С. Великович. - М.: Бином. Лаборатория знаний, 2017. - 287 c.
  14. МакГрат М. Программирование на C для начинающих / М. МакГрат. - М.: Эксмо, 2015. - 192 c.
  15. Аболрус С. Программирование на Pascal / С. Аболрус. - СПб.: Символ-плюс, 2015. - 328 c.
  16. Перри Г. Программирование на C для начинающих / Г. Перри, Д. Миллер. - М.: Эксмо, 2016. - 192 c.
  17. Мартынов Б.М. Программирование для Windows на С/С++ в 2-х томах. т.2. / Б.М. Мартынов. - М.: Бином-Пресс, 2015. - 480 c.
  18. Истомин Е.П. Информатика и программирование: Pascal и VBA / Е.П. Истомин, А.М. Власовец. - М.: АИД, 2010. - 293 c.
  19. Мюллер Д. П., Семпф Б., Сфер Ч. C# для чайников/ Д. П. Мюллер. – М.: Диалектика, 2019. – 608 c.
  20. Васильев А.Н. Программирование на C# для начинающих. Особенности языка / А.Н. Васильев. - М.: Эксмо, 2017. - 128 c.