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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 22.04.2023

Просмотров: 182

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Истекшее время хранится как DWORD. Таким образом, время будет нулю, если система будет работать непрерывно в течении 49,7 дней. Чтобы этой проблемы, можно использовать функцию GetTickCount64. В противном случае, нужно проверить условия переполнения при сравнении.

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

time := getTickCount;

time := getTickCount –

Так как алгоритмы поиска гораздо быстрее, чем 49,7 дней нам функция GetTickCount.

DateTime

Представляет текущее время, обычно как дата и время

Тип значения DateTime представляет дату и в диапазоне от 00:00:00 1 0001 года (н. э.) до 9 31 декабря 9999 э.).

Значения времени измеряются в единицах, называемых тактами, и дата представляется числом тактов с 1 января 0001 года н. э. (н. э.) в GregorianCalendar (за исключением тактов, корректировочными секундами). Например, значение равное 31241376000000000L, представляет пятницу 1 0100 года 00:00:00. Значение DateTime выражается в контексте явно или заданного по умолчанию

Для внутренних целей, все DateTime представляются как количество тактов(количество 100-наносекундных интервалов), закончившихся в 1 января 0001 г. значение DateTime не зависит от появления этого значения, при в элементе пользовательского интерфейса или при в файл. Внешний вид значения DateTime – это результат операции форматирования. Форматирование – это процесс преобразования значения в его представление.

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

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

long time = DateTime.Now.Ticks;

DateTime dt = new

dt.Millisecond.ToString();

Время мы перевели в миллисекунды, так как GetTickCount вычисляет время в Потому что нам нужно время работы программ между

Глава 2


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

В данной работе мы три языка программирования: Borland 7, Visual C++, Visual C#. Рассмотрим их более

Delphi

Delphi – императивный, структурированный, ориентированный язык программирования, диалект Object Pascal. Начиная со среды Delphi 7.0, в официальных Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей жизнью и претерпевал различные связанные с современными тенденциями с развитием платформы .NET) развития языков программирования: class helpers, перегрузки операторов и

Object Pascal – результат языка Turbo Pascal, который, в свою развился из языка Паскаль. был полностью процедурным языком. Turbo Pascal, начиная с 5.5, добавил в Паскаль свойства, а в Object – динамическую идентификацию типа с возможностью доступа к классов (то есть к классов и их членов) в коде, также называемом интроспекцией – технология получила обозначение RTTI. Так как все наследуют функции базового класса то любой указатель на можно преобразовать к нему, чего воспользоваться методом ClassType и TypeInfo, которые и обеспечат

Также отличительным свойством Object от С++ является то, что по умолчанию располагаются в памяти. Однако можно переопределить методы NewInstance и FreeInstance класса TObject. Таким образом, любой класс может осуществить «где хочу – там и буду Соответственно организуется и «многокучность».

Object Pascal (Delphi) является функционального расширения Turbo Pascal.

Delphi оказал огромное влияние на концепции языка C# для .NET. Многие его элементы и решения вошли в состав С#. из причин называют переход Хейлсберга, одного из ведущих разработчиков Delphi, из компании Borland Ltd. в Corporation.

В Delphi реализованы классы для самых распространенных структур данных – очередей и стеков, а массивов строк, которые широко в компонентах. Далее рассмотрим такую структуру как список.

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

2.1 Класс TList

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

ListClass: TList


Procedure Add(O: TObject);

Function Get: TObject;

За исключением того, что хранимые в списке, задаются указателями (указателями типа pointer), а не ссылками на экземпляры классов.

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

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

Function Add(Item: Pointer): Integer;

К элементам, которые хранятся в реализован индексный механизм доступа, то есть для на элемент используется его номер, возвращаемый методом Add. элементам выдаются по порядку от нуля, а при удалении элемента из списка все элементы, следующие за ним, Если существует необходимость вставить элемент в списка, то в программе использоваться метод insert:

Procedure Insert(Index: Integer; Item: Pointer);

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

Property Count: Integer;

Для удаления элементов из предусмотрены методы Delete и Параметр index определяет номер элемента, а параметр item – ссылку на удаляемый элемент.

Procedure Delete(Index: Integer);

Function Remove(Item: Pointer): Integer;

Метод Remove возвращает номер из списка элемента, который он имел до

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

Procedure Clear; Virtual;

Для доступа к элементам предусмотрено несколько методов и свойств. Для получения указателей на хранимые в первом и последнем элементах списка, используются методы First и Last:

Function First: Pointer;

Function Last: Pointer;

Получить ссылку на любой элемент, хранимый в списке, можно с помощью property – свойства items, доступ к которому аналогичен доступу к массиву:


property Items[Index: Integer]: Pointer; default;

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

Мы взяли версию Borland Delphi 7, потому что она интересна нам своим синтаксисом. Так как последующие версии своим синтаксисом больше напоминают язык С.

2.2 C++

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

В 1990–х годах язык стал одним из наиболее широко применяемых языков программирования общего назначения.

При создании С++ стремились сохранить совместимость с языком C. Большинство программ на С будут исправно работать и с компилятором С++. С++ имеет синтаксис, основанный на синтаксисе С.

Нововведениями С++ в сравнении с С являются:

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

Язык возник в начале 1980–х годов, когда сотрудник фирмы «Bell Laboratories» Бьёрн Страуструп придумал ряд усовершенствований к языку С под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка С++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году нынешняя версия этого стандарта – ISO/IEC 14882:2003.

Название «С++» происходит от С, в котором унарный оператор ++ обозначает приращение.

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

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


Шаблон типа для класса задает способ построения отдельных классов, подобно тому, как описание класса задает способ построения его отдельных объектов. Можно определить стек, содержащий элементы произвольного типа:

template<class T>

class stack

{

T* v;

T* p;

int sz;

public:

stack(int s) { v = p = new T[sz=s]; }

~stack() { delete[] v; }

void push(T a) { *p++ = a; }

T pop() { return *--p; }

int size() const { return p-v; }

};

Для простоты не учитывается контроль динамических ошибок. Префикс template<class T> указывает, что описывается шаблон типа с параметром T, обозначающим тип, и что это обозначение будет использоваться в последующем описании. После того, как идентификатор T указан в префиксе, его можно использовать как любое другое имя типа. Область видимости T продолжается до конца описания, начавшегося префиксом template<class T>.

Отметим, что в префиксе T объявляется типом, и оно не обязано быть именем класса. Так, ниже в описании объекта sc тип T оказывается просто char.

Имя шаблонного класса, за которым следует тип, заключенный в угловые скобки <>, является именем класса (определяемым шаблоном типа), и его можно использовать как все имена класса. Например, ниже определяется объект sc класса stack<char>:

stack<char> sc(100); // стек символов.

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

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

C#

С# – объектно–ориентированный язык программирования. Разработан в 1998–2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. Компилятор с C# входит в стандартную установку самой платформы .NET.