Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word (5).docx
Скачиваний:
1
Добавлен:
11.09.2019
Размер:
69.8 Кб
Скачать

Интегрированные среды программирования

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

Редактор исходного кода — текстовый редактор для создания и редактирования исходного кода программ. Он может быть отдельным приложением, или встроен в интегрированную среду разработки (IDE). Редакторы исходного кода имеют некоторые возможности, упрощающие и ускоряющие написание и изменение кода, такие как подсветка синтаксиса, автодополнение, проверка правильности расстановки скобок, контекстная помощь по коду и многие другие. Такие редакторы предоставляют удобный способ для запуска компилятора, интерпретатора, отладчика или других программ необходимых в процессе разработки программного обеспечения. Несмотря на то, что многие текстовые редакторы могут быть использованы для редактирования исходного кода, если они не не имеют расширенных возможностей, автоматизирующих или упрощающих ввод и модификацию кода, то они не могут называться «редакторами исходного кода», а просто являются «текстовыми редакторами, которые также могут быть использованы для редактирования исходного кода». Подсве́тка си́нтаксиса — выделение синтаксических конструкций текста с использованием различных цветов, шрифтов и начертаний. Обычно применяется в текстовых редакторах для облегчения чтения исходного текста, улучшения визуального восприятия. Часто применяется при публикации исходных кодовв Интернете. Иногда интегрированная среда программирования содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды программирования также включают браузер классов, инспектор объектов и диаграмму иерархии классов – для использования при объектно-ориентированной разработке программного обеспечения. Хотя, и существуют среды разработки, предназначенные для нескольких языков программирования – такие, как Eclipse, NetBeans, Embarcadero RAD Studio, Qt Creator или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования – как, например, Visual Basic, Delphi, Dev-C++. Частный случай интегрированных сред программирования – среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы. Среда визуальной разработки – среда разработки программного обеспечения, в которой наиболее распространенные блоки программного кода представлены в виде графических объектов. Применяются в основном для создания прикладных программ и разработки графического интерфейса пользователя (GUI). Преимущества: быстрота разработки; лёгкость освоения; стандартизация внешнего вида программ.

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

Некоторые визуальные среды разработки имеют собственный формат хранения проекта, и при переходе на другую среду может возникнуть непереносимость свойств проекта и некоторых частей проекта, таких как собственные библиотеки используемой среды разработки. Некоторые изменения могут вноситься и в язык программирования. Так, например, несмотря на то, что в среде разработки Delphi за основу взят Pascal, она представляет собой уже новый язык программирования. Среду разработки, как и язык программирования, следует выбирать на этапе проектирования программного обеспечения. Правильно спроектированное программное обеспечение должно учитывать развитие и внедрение новых технологий, поэтому перенос разработки такого программного обеспечения в другую среду разработки не должен представлять трудностей. Turbo Pascal (произносится «ту́рбо паска́ль») — Интегрированная среда разработки программного обеспечения для платформ DOS и Windows 3.x иязык программирования в этой среде, диалект языка Паскаль от фирмыBorland. Товарный знак Borland Pascal был зарезервирован для дорогих вариантов поставки (с бо́льшим количеством библиотек и исходным кодом стандартной библиотеки), оригинальная дешёвая и широко известная версия продавалась как Turbo Pascal. Название Borland Pascal также используется в более широком смысле — как неофициальное название версии языка Паскаль от фирмы Borland. Turbo Pascal — это среда разработки для языка программирования Паскаль.  Когда в 1983 году появилась первая версия Turbo Pascal, такой тип среды разработки был относительно новым. Во время дебюта на американском рынке, Turbo Pascal продавался по цене в $49.99. Помимо привлекательной цены, встроенный компилятор Паскаля также был очень высокого качества. Приставка «Turbo» намекала как на скорость компиляции, так и на скорость производимого им исполняемого кода. Turbo Pascal создавал машинный код за один проход, без шага компоновки. После рекламной кампании за первый месяц поступило заказов на 150 тыс. долларов — так много, что местные банки отказывались оплачивать чеки и кредитные карточки, подозревая мошенничество. За первые два года было продано не менее 300 тысяч копий компилятора, что превзошло объём продаж всех прочих языков для микрокомпьютеров.  Для того времени это была потрясающая среда разработки. Она была проста и интуитивно понятна, с хорошо организованным меню. В более поздних версиях появилась возможность быстро получить определение ключевого слова языка, просто поставив курсор на ключевое слово и нажав клавишу справки. Справочные статьи часто включали примеры кода, использующего данное ключевое слово. Это позволяло неопытным программистам изучать Паскаль даже без помощи книг, используя лишь среду разработки. В поставку входило большое количество исходных текстов демонстрационных и прикладных программ. В их числе были даже шахматы. Среда позволяла легко встраивать в код на Паскале вставки на языке ассемблера. Пользователь имел возможность проходить программу шаг за шагом; при переходе на ассемблерный блок это также работало. В любой момент пользователь мог добавить переменную или регистр в удобно расположенное окно для наблюдения за ними. При построчной отладке программ, использующих графические режимы IBM PC, происходило корректное переключение между графическим режимом программы и текстовым режимом среды разработки. Книги, включённые в поставку Borland Pascal, давали детальное описание языка ассемблера Intel вплоть до указания количества тактовых циклов, необходимых для выполнения каждой инструкции. В общем и целом, система давала превосходные возможности для оптимизации кода; пользователю не требовалось пользоваться чем-либо кроме среды разработки. Всё было сделано так идеально, что даже школьник мог этим пользоваться. Эти качества позволили версии Паскаля от Borland стать стандартом языка Паскаль де-факто. С начала 1990-х TP/BP используется в университетах для изучения фундаментальных концепций программирования. Вероятно, разработка Microsoft Pascal была прекращена из-за конкуренции с высоким качеством и небольшой ценой Turbo Pascal. Другая версия гласит, что Borland заключил соглашение с Microsoft на прекращение разработки Turbo BASIC (среды разработки для BASIC, ответвившейся от Turbo Pascal), если Microsoft прекратит разработку Microsoft Pascal. В течение нескольких лет Borland улучшал не только среду разработки, но и язык. В версии 5.5 в него были введены передовые возможности объектно-ориентированного программирования. Последней выпущенной версией была версия 7. Borland Pascal 7 включал в себя среду разработки и компиляторы для создания программ под DOS, под DOS с расширителем DOS и Windows 3.x, в то время как Turbo Pascal 7 мог создавать только обычные DOS-программы. С 1995 года в Borland прекратили разработку Turbo Pascal и предложили в качестве замены среду разработки Delphi. Новая версия языка подверглась изменению (в особенности ООП), и языку вернулось изначальное название, закреплённое разработчиками Apple Object Pascal. Turbo Pascal 1.0, 1983 год. Компилирует непосредственно в машинный код. Требует 32 килобайта оперативной памяти. Стоит меньше 50 долларов. Имеет интегрированный компилятор/редактор, высокую скорость компиляции. Позволяет размещать динамические данные в куче (heap) — динамической области памяти.

Turbo Pascal 2.0, 1984 год. Увеличен размер создаваемой программы — позволяет использовать до 64 килобайт для кода, стека и данных. Версия для DOS поддерживает арифметический сопроцессор и двоично-десятичную арифметику (Binary-coded decimal (англ.), BCD).

Turbo Pascal 3.0, 1985 год. Поддержка оверлейной структуры. Поддержка графических режимов. Специальные подпрограммы формирования изображений для IBM PC-совместимых компьютеров, включая «черепаховую» графику. Инструментальные пакеты.

Turbo Pascal 4.0, 1987 год. Раздельная компиляция модулей. Размер программы ограничен только объёмом оперативной памяти. Управляемая с помощью меню интегрированная среда разработки (англ. Integrated DevelopmentEnvironment, IDE). Интеллектуальная компоновка модулей. Автономный компилятор командной строки. Убрана поддержка оверлеев. Контекстно-чувствительная система помощи.

Turbo Pascal 5.0, 1988 год. Восстановлена поддержка оверлейных структур. Встроенный отладчик. Отдельный отладчик (Turbo Debugger). Эмуляция арифметического сопроцессора. Поддержка графических драйверов BGI (Borland Graphics Interface).

Turbo Pascal 5.5, 1989 годОбъектно-ориентированное программирование. Возможность копирования в программу примеров из справочной системы. Электронный учебник на диске. Turbo Profiler — профилировщик, позволяющий оптимизировать код программы.

Turbo Pascal 6.0, 1990 год. Библиотека Turbo Vision. Новая IDE, переписанная с использованием Turbo Vision, поддерживающая мышь и редактирование нескольких файлов одновременно в разных окнах. Возможность задания во встроенном отладчике условных и по количеству проходов точек останова. Встроенный ассемблер BASM позволяющий в исходном тексте программы делать ассемблерные вставки. Protected поля и методы для объектов. Работающий в защищённом режиме компилятор командной строки.

Turbo Pascal for Windows. Создание 16-разрядных программ под Windows. Библиотека объектов Objects Windows Library (OWL), сходная по идеологии с Turbo Vision. Графическая IDE, работающая под Windows.

Borland Pascal 7.0, 1992 год. Выпущен Borland Pascal 7.0, включающий в себя более дешёвый и менее мощный Turbo Pascal 7.0, который поставлялся также отдельно. BP 7.0 позволял создавать программы под реальный и защищённый 16-битный режим DOS и Windows. Была введена поддержка открытых массивов, добавлено новое ключевое слово «public» для доступных полей и методов объекта. Открыты исходные тексты системных библиотек и функций времени выполнения (RTL).

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

Недостатки Компилятор рассчитан на реальный режим DOS, применение которого сходит на нет. Однако в последних версиях компилятора и среды введена поддержка защищённого режима вместе с соответствующим отладчиком (TD). В модуле CRT имеется ошибка (некорректный подсчёт количества циклов для функции delay, не рассчитанный на быстрые процессоры, процессоры с переменной частотой и многозадачные среды), из-за которой при запуске программы на компьютерах с тактовой частотой более 200 MHz сразу происходило аварийное завершение с сообщением «Runtime error 200 at…». Существуют разные варианты исправления модуля CRT.[2][3][4] В варианте Клауса Хартнегга ошибка 200 не возникает, но длительность Delay на быстрых компьютерах меньше желаемой, и эта проблема по незнанию иногда тоже считается недостатком Turbo Pascal. QBASIC — диалект языка программирования Бейсик (BASIC), разработанный компанией Microsoft, а также среда разработки, позволяющая писать, запускать и отлаживать программы на этом языке. QBASIC удобен для выполнения несложных вычислений и для прямой работы с портами. Наряду с Pascal, язык довольно популярен для обучения программированию, и используется во многих школах. QBasic был создан в качестве замены для GW-BASIC и поставлялся вместе с MS-DOS 5.0 и выше, вплоть до Windows 95. QBasic основан на более раннем QuickBASIC 4.5, но, в отличие от него, не содержит компилятора и компоновщика. Майкрософт прекратила поставку QBasic с более поздними версиями Windows. Однако, обладатели лицензий Windows 98 могут найти его на установочном компакт-диске в папке \TOOLS\OLDMSDOS. Кроме того, QBasic по-прежнему можно загрузить с сайта Microsoft. QBasic предоставлял удобную среду разработки (для своего времени), включающую расширенные возможности отладки и возможность работы в командном режиме. Embarcadero Delphi ([дэлфа́й], по-русски обычно произносят [де́льфи] или [дэ́льфи] или [де́лфи]), ранее Borland Delphi и CodeGear Delphi, — интегрированная среда разработки ПО для Microsoft Windows на языке Delphi (ранее носившем название Object Pascal), созданная первоначально фирмой Borland и на данный момент принадлежащая и разрабатываемая Embarcadero Technologies.

Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i][j].

Действительно, если разобраться с тем, что такое a[i] при фиксированном значении i, то увидим, что это одномерный массив, состоящий из m элементов, к которым можно обращаться по индексу: a[i][1], a[i][2], ... , a[i][m]. Схематически это вся i-я строка строка таблицы. Аналогично, если мы рассмотрим одномерный массив строк, то сможем заметить, что это так же двумерный массив, где каждый отдельный элемент - это символ типа char, а a[i] - это одномерный массив, представляющий отдельную строку исходного одномерного массива строк. Исходя из идеи определения думерного массива можно определить рекурентное понятие многомерного массива:

n-мерный массив - это одномерный массив, элементами которого являются (n-1)-мерные массивы.

Несложно догадаться, что 3-мерный массив визуально можно представить в виде куба с ячейками (похоже на кубик Рубика), где каждый элемент имеет вид a[i][j][k]. А вот с большими размерностями возникают сложности с визуальным представлением, но математическая модель ясна.

По-другому двумерный массив также называют матрицей, а в том случае, когда n=m (число строк равно числу столбцов) матрицу называют квадратной. В матрицах можно хранить любые табличные данные: содержание игрового поля (шашки, шахматы, Lines и т.д.), лабиринты, таблицу смежности графа, коэффициенты системы линейных уравнений и т.д. Матрицы часто используют для решения олимпиадных и математических задач.

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

3 5

7 8 2 3 1

5 3 2 6 3

9 3 5 2 0

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

int a[1..100][1..100];

//Чтение данных двумерного массива из файла

read(n,m);

for i=1..n{

for j=1..m{

read(a[i][j]);

}

}

//Вывод матрицы в файл

for i=1..n{

for j=1..m{

write(a[i][j], ' ');

}

writeln; //новая строка

}

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

for i=2..n{

for j=1..i-1{

a[i][j] <---> a[j][i];

}

}

for i=1..n-1{

for j=1..n-i{

a[i][j] <---> a[n-j+1][n-i+1];

}

}

Двоичный (бинарный) поиск элемента в массиве

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

Переменные Lb и Ub содержат, соответственно, левую и правую границы отрезка массива, где находится нужный нам элемент. Мы начинаем всегда с исследования среднего элемента отрезка. Если искомое значение меньше среднего элемента, мы переходим к поиску в верхней половине отрезка, где все элементы меньше только что проверенного. Другими словами, значением Ub становится (M – 1) и на следующей итерации мы работаем с половиной массива. Таким образом, в результате каждой проверки мы вдвое сужаем область поиска. Так, в нашем примере, после первой итерации область поиска – всего лишь три элемента, после второй остается всего лишь один элемент. Таким образом, если длина массива равна 6, нам достаточно трех итераций, чтобы найти нужное число.

Двоичный поиск - очень мощный метод. Если, например, длина массива равна 1023, после первого сравнения область сужается до 511 элементов, а после второй - до 255. Легко посчитать, что для поиска в массиве из 1023 элементов достаточно 10 сравнений.

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

int function BinarySearch (Array A, int Lb, int Ub, int Key);

begin

do forever

M = (Lb + Ub)/2;

if (Key < A[M]) then

Ub = M - 1;

else if (Key > A[M]) then

Lb = M + 1;

else

return M;

if (Lb > Ub) then

return -1;

end;

12. Методы сортировки массивов

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

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

  • количество шагов алгоритма, необходимых для упорядочения;

  • количество сравнений элементов;

  • количество перестановок, выполняемых при сортировке.

Мы рассмотрим только три простейшие схемы сортировки.

Метод "пузырька"

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

  • если встречается более "легкий" (с меньшим значением) элемент, то они меняются местами;

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

В результате наибольший элемент оказывается в самом верху массива.

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

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

Теперь можно привести текст программы упорядочения массива M[1..N]:

begin    for j:=1 to N-1 do      for i:=1 to N-j do         if M[i] > M[i+1] then               swap(M[i],M[i+1]) end;

Стандартная процедура swap будет использоваться и в остальных алгоритмах сортировки для перестановки элементов (их тип мы уточнять не будем) местами:

procedure swap(var x,y: ...);    var t: ...;  begin     t := x;     x := y;     y := t  end;

Заметим, что если массив M — глобальный, то процедура могла бы содержать только аргументы (а не результаты). Кроме того, учитывая специфику ее применения в данном алгоритме, можно свести число парметров к одному (какому?), а не двум.

Применение метода "пузырька" можно проследить здесь.

Сортировка вставками

Второй метод называется метод вставок., т.к. на j-ом этапе мы "вставляем" j-ый элемент M[j] в нужную позицию среди элементов M[1]M[2],. . ., M[j-1], которые уже упорядочены. После этой вставки первые j элементов массива M будут упорядочены. Сказанное можно записать следующим образом:

нц для j от 2 до N     переместить M[j] на позицию i <= j такую, что          M[j] < M[k] для i<= k < j и          либо M[j] >= M[i-1], либо i=1 кц

Чтобы сделать процесс перемещения элемента M[j], более простым, полезно воспользоваться барьером: ввести "фиктивный" элемент M[0], чье значение будет заведомо меньше значения любого из "реальных"элементов массива (как это можно сделать?). Мы обозначим это значение через —оо.

Если барьер не использовать, то перед вставкой M[j], в позицию i-1 надо проверить, не будет ли i=1. Если нет, тогда сравнить M[j] ( который в этот момент будет находиться в позиции i) с элементом M[i-1].

Описанный алгоритм имеет следующий вид:

begin    M[0] := -oo;    for j:=2 to N do     begin        i := j;          while M[i] < M[i-1] do           begin                swap(M[i],M[i-1]);               i := i-1           end     end  end;

Процедура swap нам уже встречалась.

Демонстрация сортировки вставками.