Сравнительный анализ языков программирования

Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 20:35, курсовая работа

Описание работы

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

Содержание работы

•Введение
•1. Сравнительный анализ языков программирования высокого уровня Си и Паскаль
•1.1 Структура программы
•1.2 Типы данных
•1.2.1 Типы данных в Паскале
•1.2.2 Типы данных в СИ
•1.2.3 Пользовательские типы
•1.3 Арифметические операции
•Заключение
•Список использованных источников

Файлы: 1 файл

Сравнительный анализ языков программирования.docx

— 43.65 Кб (Скачать файл)

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

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

[8] В языке Си существует пять  способов создания пользовательских  типов данных. Пользовательские  типы данных можно создавать  с помощью:

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

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

· битового поля, которое является специальным  типом элемента структуры или  объединения, позволяющим легко  получать доступ к отдельным блокам;

· перечисления - списка поименованных  целых констант;

· ключевого слова typedef, которое определяет новое имя для существующего типа;

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

1.3 Арифметические операции

Арифметическая  операция - вычислительная операция над  числами. Во многих языках программирования определены двуместные арифметические операции: сложения, вычитания, умножения, деления, деления нацело, вычисление остатка от деления. Допустимые операции в языке Паскаль представлены в таблице 2.3.1 [9].

Таблица 2.3.1 Операции в Паскале

 

Приоритет операции

Символ

Выражение

Название операции

Тип переменных

         

Логические операции

       

1

Not

Not A

«не»

Логический, целый

2

And

A and B

«и»

 

3

Or

A or B

«или»

 

3

Xor

A xor B

«искл. или»

 

Математические операции

       

2

*

A*B

Умножение

Целый, вещественный

2

/

A/B

Деление

 

2

Div

A div B

Деление без остатка

Целый

2

Mod

A mod B

Остаток от деления

 

3

+

A+B

Сложение

Целый, вещественный, строки

3

-

A-B

Вычитание

Целый, вещественный

Операции сравнения

       

4

=

A=B

Равно

Целый, вещественный, логический, строки

4

<>

A<>B

Не равно

 

4

>

A>B

Больше

 

4

<

A<B

Меньше

 

4

>=

A>=B

Больше либо равно

 

4

<=

A<=B

Меньше либо равно

 

Специфические операции

       

1

@

@A

Адрес

Любой

1

^

A^

Разыменование

Указатель

2

Chl

A chl B

Сдвиг влево

Целый

2

Shr

A shr B

Сдвиг вправо

 

2

*

A*B

Пересечение

Множество

3

+

A+B

Объединение

 

3

-

A-B

Вычитание

 

4

In

A in B

Вхождение в множество

Элементы множества

         

 

Для строк  операция сложения выступает как  конкатенация - присоединение второй строки к «хвосту» первой. Как правило, для большинства операций характерно неявное приведение типов, поэтому  они являются в некотором роде универсальными.

Операции  в языке Си более универсальны из-за отсутствия логических типов  и упразднения типов строк  и символов, однако и они имеют  свои особенности. Список допустимых операций в Си приведен в таблице 2.3.2 [10]. В  языке существует жесткая иерархия по приоритету выполнения операций, что  позволяет более детально прорабатывать  структуру программ. Также введено  понятие ассоциативности - приоритет  выполнения операций может быть как  слева направо, так и справа налево. Большинство операций допустимы  для всех типов, исключения составляют побитовые и логические операции, а так же операции деления без  остатка и остаток от деления  для вещественных типов. Особенностью языка Си является тернарный оператор условия (x?y;z), который представляет простейший условный переход.

Таблица 2.3.2 - Операции языка Си

 

Оператор

Название

Класс

Приоритет

Ассоциативность

++/--

Инкремент, декремент

Постфиксный

16

Слева направо

++/--

Инкремент, декремент

Префиксный

15

Справа налево

~

Побитовое НЕ

Унарный

15

Справа налево

!

Логическое НЕ

Унарный

15

Справа налево

- +

Изменение знака, плюс

Унарный

15

Справа налево

&

Адрес

Унарный

15

Справа налево

*

Разыменование

Унарный

15

Справа налево

(имя типа)

Приведение типа

Унарный

14

Справа налево

* / %

Мультипликативные операции

Бинарный

13

Слева направо

+ -

Аддитивные операции

Бинарные

12

Слева направо

<<>>

Сдвиг влево и вправо

Бинарный

11

Слева направо

<><= >=

Отношения

Бинарный

10

Слева направо

== !=

Равенство / неравенство

Бинарный

9

Слева направо

&

Побитовое И

Бинарный

8

Слева направо

^

Побитовое исключающее ИЛИ

Бинарный

7

Слева направо

|

Побитовое ИЛИ

Бинарный

6

Слева направо

&&

Логическое И

Бинарный

5

Слева направо

||

Логическое ИЛИ

Бинарный

4

Слева направо

? ;

Условие

Тернарный

3

Справа налево

= += -= *= /= %= <<= >>= &= ^= |=

Присваивание

Бинарный

2

Справа налево

Оператор

Название

Класс

Приоритет

Ассоциативность

,

Последовательная оценка

Бинарный

1

Слева направо

         

 

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


Информация о работе Сравнительный анализ языков программирования