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

Сравнительный анализ процедур для различных языков программирования (Использование процедур в Турбо Паскаль)

Содержание:

Введение

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

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

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

Объект исследования – языки высокого уровня.

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

Цель курсовой работы – сравнительный анализ процедур в языках высокого уровня Паскаль и Делфи, использование их в программах.

При достижении цели курсовой работы рассмотрены задачи:

  • рассмотрены языки высокого и низкого уровня;
  • проведен обзор языков высокого уровня;
  • изучены подпрограммы – процедуры и функции в языках высокого уровня;
  • более подробно проанализировано использование процедур в ЯВУ Паскаль и Делфи;
  • приведена программная реализация процедур в языках высокого уровня Паскаль и Delphi.

При подготовке работы использовались учебник для вузов Фаронова В.В. «Delphi. Программирование на языках высокого уровня», книга Осипова Д. «Delphi. Программирование для Windows, OSX, iOS и Android»; учебные пособия Фаронова В.В. «Турбо Паскаль 7.0. Начальный курс» и «Турбо Паскаль» и другие, а также Интернет-статьи по данной теме.

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

1. Языки высокого уровня: понятие, достоинства

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

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

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

Трансляторы подразделяются на:

  • компиляторы, превращающие текст программы в машинный код, сохраняемый и затем используемый уже без компилятора (к примеру, исполняемые файлы с расширением *. exe).
  • интерпретаторы, превращающие часть программы в машинный код, выполняющие его и затем переходящие к следующей части. Причем использование интерпретатора осуществляется каждый раз при выполнении программы. [16]

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

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

Недостатки проявляются в том, что:

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

Языки высокого уровня (ЯВУ). Эти языки позволяют писать программы текстом, похожим на английский язык. Транслятор с языка высокого уровня переводит код на язык низкого уровня, затем Компилятор каждую команду преобразует в машинный код, создавая исполняемый файл. Программы, написанные на ЯВУ, более компактны, легче для понимания, а вероятность появления в них ошибок меньше, процесс отладки (поиска и исправления ошибок) легче. [16]

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

К языкам программирования высокого уровня относят: Фортран; Кобол; Алгол; Pascal; Basic; Java; DC, C++, C#; Objective C; Smalltalk; Delphi и другие. Перечислим достоинства языков высокого уровня: [16]

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

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

Недостаток ЯВУ в большом размере программ по сравнению с программами на языках низкого уровня. Поэтому в основном ЯВУ используют при разработках программного обеспечения компьютеров и устройств, имеющих большой объем памяти. А различные подвиды ассемблера применяют для программирования иных устройств, где имеет значение размер программ. [22]

1.2. Обзор языков программирования высокого уровня

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

Фортран является первым из ЯВУ (разработанным Бэкусом в начале 1950-х годов) и широко распространенным языком, особенно среди пользователей, занимающихся численным моделированием. Для этого есть несколько причин: [16]

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

- имеются эффективные трансляторы Фортрана на всех типах ЭВМ, причем с достаточной стандартизированностью версий для различных машин, и перенесение программ с машины на машину обычно не составляет большого труда;

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

Прошедший период отмечен формированием новой методологии и философии программирования. С начала 70-х годов Фортран подвергали заслуженной критике. В 1977г. приняли новый стандарт языка Фортран-77. Новый стандарт разрабатывался долго, и теперь новым стандартом Фортран-90 пользуются программисты Фортрана. Только машины типа IBM PC используют несколько трансляторов, например, Watfor, Lap-Fortran и пр., но наибольшим применением на таких машинах отмечены различные версии транслятора Fortran-77.

Выпущенный в 1990г. транслятор MS-Fortran 5.0 практически в полном соответствии стандарту Fortran-90. Большинство крупных научно-технических прикладных программ пишутся на Фортране из-за его переносимости и устойчивости, а также благодаря имеющимся встроенным математическим и тригонометрическим функциям, а также расширенной графической библиотеке, позволяющей использование различных графических данных и изображений. [14]

Бейсик (BASIC - Beginner’s All-Purpose Symbolic Instruction Code) является “универсальным символическим кодом инструкций для начинающих”, прямым потомком Фортрана и до сих пор самым популярным языком программирования для персональных компьютеров (ПК). Появился Бейсик в 1963г., основная заслуга в его появлении американцев Джона Кемени и Томаса Курца. Как и любые преимущества, простоту Бейсика сопровождали, особенно в ранних версиях, трудности структурирования; не применение рекурсии – интересного приема, позволяющего составление эффективных и в то же время коротких программ. [16]

Разработкой мощных компиляторов Бейсика обеспечивается не только богатая лексика и высокое быстродействие, но и возможность структурного программирования. По мнению некоторых программистов, наиболее интересны версии GWBASIC, Turbo-Basic и Quick Basic.

Появлением Quick Basic ознаменовано рождение второго поколения систем программирования на языке Бейсик. Он сочетал в себе возможности модульного и процедурного программирования, создание библиотек, компиляцию готовых программ и другое, что вывело его на уровень таких классических языков программирования, как Си, Паскаль, Фортран и др. Более того, из-за отсутствия официального стандарта языка Бейсик, его реализация Quick Basic представила фактический стандарт. Безусловные лидеры среди разных версий Бейсика были Quick Basic 4.5 и PDS 7.1 фирмы Microsoft, появившиеся в конце 80-х годов. [21]

Язык программирования Паскаль разработал профессор кафедры вычислительной техники Швейцарского Федерального института технологии Николас Вирт в 1968г. как альтернативу существующим и все усложняющимся языкам программирования, таким, как PL/1, Algol, Fortran. Интенсивное развитие Паскаля привело к появлению уже в 1973г. его стандарта, а число трансляторов с этого языка в 1979г. превышало 80. В начале 80-х годов позиции Паскаля еще более упрочились с появлением трансляторов MS-Pascal и Turbo-Pascal для ПЭВМ. С этих времен Паскаль - один из наиболее важных и широко используемых языков программирования. [5]

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

Основные причины популярности Паскаля заключаются в следующем:

- простота языка позволяет быстрое его освоение и создание алгоритмически сложных программ;

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

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

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

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

Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal. Слово Delphi – это название города в древней Греции, в котором пророчествовали оракулы. Такое название выбрано разработчиками Delphi для того, чтобы подчеркнуть способность программ, создаваемых в Delphi, взаимодействовать с базами данных Oracle. Имя приобрело популярность, и коммерческий продукт под этим же названием был выпущен на рынок. [22]

Версия Delphi 1 была выпущена в феврале 1995 г., Delphi 2 – в марте 1996г., а Delphi 3 – в мае 1997г. затем было решено интегрировать эту платформу программирования с CORBA (Common Object Request Broker Architecture – технология построения объектных приложений, предложенная компанией IBM), быстро развивающейся технологией создания распределенных приложений. Версия Delphi 4 со встроенными средствами CORBA появились на рынке в июне 1998г. Версия Delphi 5 была выпущена в августе 1999г., версия Delphi 6 выпущена в мае 2001г. и обновленная версия Delphi 7 выпущена в 2002 году. Система Delphi – ключевой программный продукт компании Borland. [23]

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

Главное окно всегда присутствует на экране и предназначено для управления процессом создания программы. Основное меню содержит все необходимые средства для управления проектом. Пиктограммы облегчают доступ к наиболее часто применяемым командам основного меню. [19]

1.3. Подпрограммы – процедуры и функции в языках высокого уровня

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

Структура подпрограммы напоминает программу в миниатюре: она также состоит из заголовка, блока объявлений переменных и блока инструкций. Отличия лишь в невозможности подключения модулей (блок uses), а так же в ограничениях на объявления типов данных: если локальные простые и даже составные типы в подпрограммах вполне допустимы, то объявление более сложных типов - объектов, классов и интерфейсов, в подпрограммах не допустимо, и они не могут быть локальными. Использование подпрограмм состоит из 2 этапов: сначала описание подпрограмм, а затем, уже в программе, ее вызов. [18]

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

Подпрограммой называют небольшую программа, решающую часть общей задачи. Каждая подпрограмма имеет имя, используемое в программе для вызова подпрограммы. Упоминание этого имени в тексте программы и есть вызов процедуры (функции). [4, с. 152]

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

Также рассмотрено использование подпрограмм – процедур и функций в языках высокого уровня.

2. Использование процедур в Турбо Паскаль

2.1. Теоретические аспекты использования процедур в Турбо Паскаль

Структура процедуры в Паскаль имеет следующий вид:

Procedure <имя процедуры>(формальные параметры : их тип);

Var

(локальные переменные)

begin

. . .

end;

Процедура вызывается по имени:

<имя процедуры> (фактические параметры); [5, c. 45-47]

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

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

Переменные, описанные в процедуре после слова Var, - это внутренние переменные процедуры или промежуточные, они собой данные для операций внутри процедуры и не представляют результат её выполнения, а нужны лишь для промежуточных действий. Данные и результаты описываются в круглых скобках после имени процедуры. Перед описанием переменных-результатов пишется служебное слово var. [15]

Если параметры определены как параметры-переменные, перед ними ставится слово VAR, а если это параметры-константы, - слово CONST, например:

Procedure MyProcedure (var d: Real; s: Real; const r: String);

Здесь d - параметр-переменная, s -параметр-значение, а r - параметр-константа. [5, с. 156-158]

Процедуры в программе выполняются не в том порядке, в каком они записаны, их вызывает главная программа по имени с указанием фактических параметров. [11]

На примере сложения двух целых чисел проиллюстрируем возможности Турбо Паскаля 7.0 по оформлению программ при помощи процедур. [6, с. 176-190]

Program ProcedureAndFunction;

Uses

Crt;

Var

a, b, SumNumbers : integer;

Procedure Summa1(Var Sum: integer; a, b : integer);

Begin

Sum:= a+b;

End;

Begin

ClrScr;

a := 12;

b := 15;

Summa1(SumNumbers, a, b);

writeln ('Сумма чисел равна ',SumNumbers);

End.

Вызов процедуры производится по ее имени. Наряду с параметрами-значениями a и b, которые подлежат сложению, в списке параметров присутствует параметр-переменная Sum, который содержит возвращаемое процедурой значение - сумму.

2.2. Алгоритмизация задачи с использованием процедур в Паскаль

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

  1. Укрупненный алгоритм сортировки двумерного массива целых чисел по возрастанию, определения максимального положительного элементов.
  2. Сначала вводится размерность двумерного массива;
  3. Затем вводятся элементы двумерного массива целых чисел, причем числа могут быть и положительными и отрицательными;
  4. Затем производится сортировка элементов массива по возрастанию. Сортировку массива оформим в виде процедуры с параметрами;
  5. После сортировки массива распечатаем отсортированный массив и максимальный элемент массива (он последний в массиве); [3]
  6. Теперь приведем алгоритм сортировки двумерного массива.

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

  1. Для упрощения алгоритма вводится одномерный массив R, размерность которого равна n*n, элементы которого – это элементы двумерного массива. Сначала идет формирование одномерного массива R из элементов двумерного массива по строкам;
  2. Теперь элементы сформированного одномерного массива R упорядочиваются по возрастанию; замена элементов производится с помощью процедуры Swap, которой передаются параметры – элементы массива, которые нужно поменять местами;
  3. После сортировки одномерного массива идет обратное присвоение: элементам двумерного массива присваиваются элементы отсортированного одномерного массива. [12, 20]

Приведем блок-схему алгоритма (рис. 1). [1, 2]

начало

Ввод n

Ввод элемента M[i.j]

I=1;

j=1;

Присвоение одном. Мас. R[(i-1)*k+j] = M[I,j]

j=j+1;

j<=k

да

нет

i=i+1;

да

i<=k

нет

I=1;

1

j=1;

1

1

N3=rj

Rj=rj+1

Rj+1=n3

Rj>Rj+1

да

j=j+1;

j<=k

да

i=i+1;

1

I<=k

да

Переприсвоение двум. Мас. M[I,j]=R[(i-1)*k+j]

Вывод массива M

конец

Рисунок 1 – Блок-схема алгоритма сортировки двумерного массива [13]

2.3. Реализация задачи с использованием процедур на языке Turbo Pascal

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

Сортировка производится с помощью процедуры SortMax, которая имеет в качестве параметров размерность квадратной матрицы и сам двумерный массив. Процедура Swap меняет местами элементы массива. Имя программы SORTMAXV.pas.

PROGRAM SORTMAXV;

CONST

n=10; { максимальный размер массива }

type

Ind = 1 .. 10;

MM = array [ind] of Integer;

Matr = array [ind] of MM;

var

ii,jj,n : Ind;

M : Matr;

MN, MX: Integer; [8]

Procedure Swap(var n1,n2: integer);

Var n3: integer;

Begin

N3:=n1;

N1:=n2;

N2:=n3;

End; [20]

PROCEDURE SortMax (k: integer; var mm: Matr);

{ Процедура сортировки двумерного массива целых чисел по возрастанию }

VAR

i,j,l: integer;

m2: integer;

r: array[1..100] of integer;

BEGIN

for i:=1 to k do

for j:=1 to k do

r[(i-1)*k+j]:=mm[I,j];

for i:=1 to k*k do

for j:=1 to k*k-1 do

if r[j]>r[j+1] then Swap(r[j],r[j+1]);

for i:=1 to k do

for j:=1 to k do

mm[I,j]:=r[(i-1)*k+j];

END; { процедуры SortMax} [9]

BEGIN {основная программа}

writeln(` введите размер двумерного массива n`);

read(n);

writeln(`введите массив по строкам`);

for ii:=1 to n do

for jj :=1 to n do

Read (M[ii,jj]);

ReadLn;

SortMax (n,M); { сортировка массива m }

{Печать отсортированного массива}

writeln (`отсортированный массив`);

for ii: =1 to n do

begin

for jj:=1 to n do

write (‘ ’, M[ii,jj]);

writeln;

end; [7]

readln;

END.

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

Рисунок 2 – Ход и результат выполнения программы SortMaxV.pas

К курсовой работе прилагается исходный модуль программы SortMaxV.pas.

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

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

3. Использование процедур в Delphi

3.1. Теоретические аспекты использования процедур в Delphi

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

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

Параметры используют:

  • для передачи данных в подпрограмму;
  • для получения результата из подпрограммы.

В общем случае в качестве фактического параметра процедуры можно использовать выражение, тип которого должен совпадать с типом соответствующего формального параметра. [10]

Прежде чем процедуру можно будет использовать в приложении, следует знать имя процедуры, модуль, в котором она объявлена, и принимаемые процедурой параметры. Имя процедуры и список параметров — составные части заголовка процедуры. Заголовок простой процедуры выглядит следующим образом:  

procedure ИмяПроцедуры;

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

procedure ИмяПроцедуры (СписокПараметров);

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

procedure DisplayString(s: string); [17]

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

procedure Имя_процедуры (параметры);

begin

//Код процедуры;

end;

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

Таблица 1 – Стандартные процедуры [18]

procedure ChDir(const S: string);

изменяет текущий каталог;

procedure Delete(var S: string; Index, Count: Integer);

удаляет часть строки;

procedure Halt [ ( Exitcode: Integer) ];

Инициирует досрочное прекращение программы;

procedure Insert(Source: string; var S: string; Index: Integer);

вставляет одну строку в другую;

procedure New(var P: Pointer);

создает новую динамическую переменную и назначает указатель для нее;

procedure RmDir(const S: string);

удаляет указанный подкаталог (должен быть пустым).

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

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

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

http://www.rtfm.4hack.com/dat/books_2_4_8.1.jpg

Рисунок 3 - Пример структуры программы [4, с. 152]

Procedure A;

Procedure Al;

begin

end {A1};

Procedure A2;

begin

end {A2};

begin {A}

end {A};

Procedure B;

Procedure Bl;

begin

end {B1};

Procedure B2;

Procedure B21;

и т.д.

В подпрограмме любого уровня обычно множество имен констант, переменных, типов и вложенных в нее подпрограмм низшего уровня. Все имена, описанные внутри подпрограммы, локализуются в ней, т.е. они как бы “невидимы” вне подпрограммы. Таким образом, для операторов, использующих обращение к подпрограмме, она представляется “черным ящиком”, в котором реализуется некоторый алгоритм. Все детали этой реализации скрыты от глаз пользователя подпрограммы и потому недоступны ему. К примеру, в рассмотренном выше примере из основной программы возможно обращение к процедурам А и В, но невозможно вызывать вложенные в них процедуры А1, А2, В1 и т.д. [4, c. 152-153]

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

При входе в подпрограмму низшего уровня доступны не только объявленные в ней имена, но и все имена верхнего уровня. Образно говоря, любая подпрограмма как бы окружена полупрозрачными стенками: снаружи подпрограммы не видны ее внутренности, но, внутри подпрограммы, можно наблюдать все, что делается снаружи. Так, например, из подпрограммы В21 может быть вызвана подпрограмму А, использованы имена, объявленные в основной программе, в подпрограммах В и В2, и даже возможно обращение к ним. Любая подпрограмма может вызвать саму себя - такой способ вызова называется рекурсия. [4, с. 152-154]

3.2. Программная реализация процедур в Делфи

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

Исходный модуль программы называется SortM1.pas, исполняемый модуль – PSotrM.exe.

unit SortM1; //Cортировка двумерного массива и вывод отсортированного массива

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

procedure VvM(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

r: array[1..9] of integer;

i,j,k: Integer;

str: string;

implementation

{$R *.dfm}

procedure TForm1.VvM(Sender: TObject);

// ввод массива чисел

var

r: array[1..9] of integer;

i,k,x: integer;

str: string;

begin

for k:=1 to 9 do

begin

str:=Memo1.Lines[k-1];

r[k]:=StrToInt(str);

end; [10]

// печать введенного массива

Memo1.Clear;

Memo1.Lines.Add('Введенный массив');

Memo1.Lines.Add('-----------------------------------');

i:=1;

while (i<=7) do

begin

str:=IntToStr(r[i])+' '+IntToStr(r[i+1])+' '+IntToStr(r[i+2]);

Memo1.Lines.Add(str);

i:=i+3;

end;

for i:=1 to 9 do //повторяется сколько элементов

for k:=1 to 8 do

if r[k+1]<r[k]

then

begin //обмен элементами

x:=r[k+1];

r[k+1]:=r[k];

r[k]:=x;

end; [4]

Memo1.Clear;

Memo1.Lines.Add('Отсортированный массив');

Memo1.Lines.Add('----------------------------------------------');

i:=1;

while (i<=7) do

begin

str:=IntToStr(r[i])+' '+IntToStr(r[i+1])+' '+IntToStr(r[i+2]);

Memo1.Lines.Add(str);

i:=i+3;

end;

str:='Максимальный элемент массива = '+IntToStr(r[9]);

ShowMessage(str);

end;

END.

Скриншот хода и результата выполнения программы SortM1.pas дан на рис. 4.

Рисунок 4 – Скриншот результата программы PSortM.exe

3.3. Сравнительный анализ использования процедур в языках программирования Паскаль и Делфи

Отличие использования процедур в этих языках программирования в том, что в Делфи запуск процедуры осуществляется чаще всего при наступлении какого-то события – нажатия кнопки, активации формы и т.д., а в Паскале оформляется просто вызов процедуры. Кроме того, в Делфи должно быть объявление процедур в классе type, а в Паскале этого нет.

В остальном использование процедур в обоих языках аналогично – процедуры вызываются по имени, в программе должно быть описание процедуры, начинающееся со слова Procedure, процедуре могут передаваться параметры с описанием типов параметров, тело процедуры находится между begin и end, используемые внутри процедуры переменные должны быть объявлены в процедуре.

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

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

Также проведен сравнительный анализ использования процедур в языках программирования Паскаль и Делфи.

Заключение

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

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

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

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

В языках Delphi и Pascal два вида подпрограмм — процедура и функция. Каждая подпрограмма имеет имя, используемое в программе для вызова подпрограммы. Упоминание этого имени в тексте программы и есть вызов процедуры (функции).

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

Во второй главе дано подробное описание использования процедур в Паскаль, поставлена задача сортировки двумерного массива с использованием процедур. Проведена алгоритмизация задачи, реализация алгоритма на языке Турбо Паскаль, отладка программы и представлен ход и результат работы программы. Исходный модуль программы SortMasV.pas, листинг которой приведен в работе.

В третьей главе проведена реализация той же задачи на языке Делфи7, исходный модуль SortM1.pas, выполняемый модуль PSortM.exe. В программе используется процедура VvM, запускаемая по нажатию кнопки Ввод.

Программа вводит данные массива построчно в поле Memo, в нем же выводит отсортированный массив и максимальный элемент массива – последний элемент. Программа также отлажена и работает корректно.

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

Список использованных источников

Основы алгоритмизации и программирования: учебное пособие / Г.Р. Кадырова. – Ульяновск: УлГТУ, 2014. – 95 с.

Основы алгоритмизации и программирования: учебное пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. Гос. ун-та, 2011. – 56 с.

Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. - Казань: Изд-во КНИТУ- КАИ, 2015, - 153 с.

Фаронов В.В. Delphi. Программирование на языках высокого уровня: учебник для вузов. – СПб.: Питер, 2010. – 640 с.

Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. - М.: Издательство «ОМД Групп», 2013. - 616 с.

Фаронов В.В. Турбо Паскаль. Учебное пособие. – СПб.: БХВ-Петербург, 2014. - 1056 с.

Шпак Ю.А. Turbo Pascal 7.0 на примерах/Под ред. Ю.С. Ковтанюка. — К.: Издательство Юниор, 2013. — 496 с.

Turbo Pascal. Самоучитель. О.А. Меженный. 2012. – 336 с.

Turbo Pascal: решение сложных задач. – СПб.: БХВ-Петербург, 2013. – 208 с.

Delphi. Урок №9. Создание собственных процедур и функций Delphi. Учебник по Delphi 7. 2015.

Модульное программирование. 23.12.2013. URL: http://life-prog.ru/1_3236_modulnoe-programmirovanie.html (дата обращения: 20.10.18).

Лекции по Паскаль. Сортировка двумерного массива. 2013. URL: http://mojainformatika.ru/paskal/lekczii-po-pascal/sortirovka-dvumernogo-massiva.html (дата обращения: 25.10.18).

Лекция 27. Двумерные массивы. Сортировка двумерного массива. Садовский Е.М. URL: http://znatok-pascal.ucoz.ru/publ/1-1-0-27 (дата обращения: 24.10.18).

Обзор языков программирования. 2016. URL: http://www.bourabai.kz/alg/classification04.htm (дата обращения: 21.10.18).

Основные принципы модульного программирования. 2017. URL: http://stydopedia.ru/4x76fb.html (дата обращения: 20.10.18).

Программирование на языке высокого уровня. 2016. URL: http://pandia.ru/text/78/221/44162.php (дата обращения: 20.10.18).

Процедуры и функции в Delphi. 2014. URL: http://delphicomponent.ru/108-procedury-i-funkcii-v-delphi.html (дата обращения: 23.10.18).

Процедуры и функции Delphi. 2015. URL: http://www.snkey.net/books/delphi/ch1-6.html (дата обращения: 23.10.18).

Самоучитель по Delphi 6. 2018. URL: http://www.rtfm.4hack.com/books.php?id1=2&id2=4&id3=3 (дата обращения: 26.10.18).

Упорядочивание матрицы по возрастанию - Turbo Pascal. URL: http://www.cyberforum.ru/turbo-pascal/thread97516.html (дата обращения: 22.10.18).

Чем отличаются языки низкого уровня от высокого? 2015. URL: http://bestanswer.ru/raznoe/chem-otlichayutsya-yazyki-programmirovaniya-nizkogo-urovnya-ot-yazykov-vysokogo-kakim-yavlyaetsya-delphi-a-kakim-c (дата обращения: 19.10.18).

Языки программирования. 2015. URL: http://life-prog.ru/ (дата обращения: 20.10.18).

Язык программирования Delphi (Object Pascal). Лекции. 2016. URL: http://works.doklad.ru/view/unh62qqQkM8/14.html (дата обращения: 20.10.18).