Файл: Сравнительный анализ процедур для различных языков программирования (Использование процедур в Турбо Паскаль).pdf
Добавлен: 24.04.2023
Просмотров: 405
Скачиваний: 3
СОДЕРЖАНИЕ
1. Языки высокого уровня: понятие, достоинства
1.1. Языки программирования низкого и высокого уровня
1.2. Обзор языков программирования высокого уровня
1.3. Подпрограммы – процедуры и функции в языках высокого уровня
2. Использование процедур в Турбо Паскаль
2.1. Теоретические аспекты использования процедур в Турбо Паскаль
2.2. Алгоритмизация задачи с использованием процедур в Паскаль
2.3. Реализация задачи с использованием процедур на языке Turbo Pascal
3. Использование процедур в Delphi
3.1. Теоретические аспекты использования процедур в Delphi
3.2. Программная реализация процедур в Делфи
3.3. Сравнительный анализ использования процедур в языках программирования Паскаль и Делфи
Прежде чем процедуру можно будет использовать в приложении, следует знать имя процедуры, модуль, в котором она объявлена, и принимаемые процедурой параметры. Имя процедуры и список параметров — составные части заголовка процедуры. Заголовок простой процедуры выглядит следующим образом:
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 (для простоты считается, что все подпрограммы - это процедуры без параметров).
Рисунок 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).