Основы программирования на языке Pascal (Механизм передачи параметров)
Содержание:
ВВЕДЕНИЕ
Если в программе имеется несколько одинаковых (или очень похожих) фрагментов, то возникает естественный вопрос: нельзя ли оформить повторяющийся фрагмент в виде отдельного блока, а затем обращаться к нему в программе столько раз, сколько требуется. Аналогичная идея возникает и при отладке больших программ — если разделить программу на отдельные самостоятельные фрагменты, то отладить ее по частям будет проще. Эти разумные мысли имеют поддержку во всех языках высокого уровня, которые предоставляют программисту такое удобное средство разбиения программы на части, как подпрограммы.
Подпрограммой называется программная единица (часть программы), имеющая имя, по которому она может быть вызвана из других частей программы.
Подпрограммы бывают двух видов: процедуры и функции, которые, в свою очередь, делятся на стандартные и определенные пользователем. Стандартные процедуры и функции являются частью языка и вызываются без предварительного описания. Описание процедур и функций пользователя выполняется в разделе описания процедур и функций.
Само название подпрограмма говорит о том, что это часть программы, которая оформляется как самостоятельная программная единица. Подпрограмма обязательно должна иметь уникальное имя (идентификатор), это имя и употребляется для вызова подпрограммы. Понятно, что такой вызов можно выполнять многократно, более того, одни и те же подпрограммы можно использовать в разных программах, отладив их код только один раз.
Многие подпрограммы невелики по размерам и содержат десятки строк текста. Написать такие программы можно и без подпрограмм. Иное дело — создание проектов, насчитывающих тысячи и десятки тысяч строк, в которых задействованы целые команды программистов. Писать такие программы как единое целое, без разделения на самостоятельные фрагменты, просто невозможно. В курсовой работе рассмотрим варианты реализации подпрограмм средствами языка Pascal.
Целью данной работы является исследование программирования на языке Pasсal, для достижения поставленной цели, были выделены следующие задачи:
- рассмотреть теоретические аспекты программирования на языке Паскаль;
- разработать программу на языке Паскаль.
Объект исследования – разработка программы.
Предмет исследования - программирования на языке Pasсal.
Структура работы состоит из введения, основной части, заключения и списка литературы.
Теоретической и методологической базой данной работы послужили труды российских и зарубежных авторов в области информационных технологий и программирования.
ГЛАВА1 ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PASCAL
1.1 Общие сведения о реализации подпрограмм
В программах на Pascal используются подпрограммы двух видов: процедуры и функции. Имея один и тот же смысл и аналогичную структуру, они несколько различаются назначением и способом их использования.
Все процедуры и функции, в свою очередь, подразделяются на две группы:
- стандартные (встроенные);
- определенные пользователем.
Встроенные (стандартные) процедуры и функции входят в стандартные библиотеки и могут вызываться по имени без предварительного описания (например, процедуры ввода и вывода read и write). Наличие стандартных процедур существенно облегчает разработку программ, и этот инструмент широко используется при программировании на языке высокого уровня.
Однако многие специфичные для программы действия не находят прямых аналогов в библиотеках Pascal, и тогда программисту приходится разрабатывать свои собственные процедуры и функции.
Процедуры и функции пользователя разрабатываются самим программистом и помещаются в раздел описаний процедур и функций. Их вызов для выполнения записывается в разделе операторов основной программы или другой подпрограммы[6;15].
Данный раздел используется в программах, которые с целью удобства программирования были разбиты на более мелкие части — подпрограммы.
В общем случае подпрограмма имеет ту же структуру, что и программа.
Объявление процедуры:
procedure ИмяПроцедуры (ФормальныеПараметры) ;
{ описательная часть процедуры }
Begin
{ Инструкции исполнительной части процедуры }
end;
Объявление функции:
Function ИмяФункции (ФормальныеПараметры) : ТипРезультата;
{ описательная часть функции }
Begin
{ Инструкции исполнительной части функции }
ИмяФункции := Результат;
end;
1.2 Использование процедур в языке Pascal
Процедура — это независимая именованная часть программы, которую после однократного описания можно многократно вызывать по имени из последующих частей программы. Вызов процедуры оформляется как отдельный оператор, процедура не может выступать как операнд в выражении.
Структура процедуры повторяет структуру программы, это "программа в миниатюре", состоящая из заголовка и тела. В отличие от программы, для процедур и функций наличие заголовка обязательно.
Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного списка формальных параметров. Тело процедуры по своей структуре аналогично обычной программе:
procedure ИмяПроцедуры(ФормальныеПараметры) ;
{ Описательная часть процедуры }
begin
{ Инструкции исполнительной части процедуры }
end;
В конце тела процедуры, как и в конце программы, стоит end, однако после end ставится точка с запятой, а не точка[7;31].
Для обращения к процедуре используется оператор вызова процедуры. Он состоит из имени процедуры и необязательного списка фактических параметров, отделенных друг от друга запятыми:
ИмяПроцедуры(ФактическиеПараметры);
При вызове процедуры работа главной программы приостанавливается и начинает выполняться вызванная процедура. Когда процедура выполнит свою задачу, программа продолжится с оператора, следующего за оператором вызова процедуры.
Для принудительного выхода из процедуры в ее теле записывается оператор завершения exit, который обеспечивает выход во внешний блок (обычно — в основную программу).
Эти несложные правила позволяют сформировать выводы об использовании процедур.
1.Если в программе есть повторяющиеся фрагменты, оформление их в виде процедур позволит сократить текст основной программы.
2. При использовании осмысленных и понятных имен процедур текст основной программы становится не только более коротким, но и более понятным и выразительным.
3.Использование процедур позволяет упростить процесс внесения изменений в повторяющиеся фрагменты, т. к. исправления делаются один раз в процедуре, а не несколько раз в программе.
Параметры для процедуры аналогичны исходным данным для программы. Использование параметров позволяет сделать процедуру более универсальной. Процедура может выполнять какие-либо вычисления, но по определенным причинам нет смысла сразу выводить результаты на экран. Тем не менее, они нужны программе для дальнейшей работы. В этом случае результаты работы процедуры можно передать в программу через параметры, как и исходные данные.
Параметры служат для обмена данными между программой и подпрограммой. Программа передает подпрограмме какие-то входные данные (если они требуются), а от подпрограммы получает результаты в виде значений переменных. Иногда подпрограмма не требует входных данных, иногда не возвращает результатов, а иногда и вообще не содержит параметров, как в самом первом из приведенных примеров.
1.3 Механизм передачи параметров
Параметры, которые указываются при описании процедур и функций, называются формальными. Название "формальные" параметры получили в связи с тем, что они нужны только для записи алгоритма, а при вызове подпрограммы на их место будут подставлены конкретные фактические параметры.
Соответствие между формальными и фактическими параметрами обеспечивается выполнением следующих требований:
- формальных и фактических параметров должно быть одинаковое количество;
- порядок следования фактических и формальных параметров должен быть один и тот же;
- тип фактического параметра должен быть совместим с типом соответствующего ему формального параметра.
В языке Pascal типом любого параметра в списке формальных параметров может быть только стандартный или ранее объявленный тип.
Например, нельзя объявить процедуру с заголовком:
procedure proc(m,n: integer; k: 1..5);
Для передачи в процедуру параметра к необходимо предварительно описать его тип в разделе описаний основной программы.
type range : 1. .5;
procedure proc(m,n: integer; к: range);
Имеются два основных вида параметров, которые отличаются способом их передачи в подпрограмму:
- параметры-значения;
- параметры-переменные.
Начиная с версии Turbo Pascal 7.0, появилась еще одна разновидность параметров — параметры-константы. В Delphi они также используются.
Параметры-значения используются только для передачи исходных данных из основной программы в процедуру или функцию. По умолчанию параметры подпрограммы считаются именно параметрами-значениями.
В данном случае подпрограмме передается лишь значение параметра, которое помещается в переменную, специально созданную для этой цели. Таким образом, в подпрограмме используется копия фактического параметра. В теле подпрограммы формальные параметры могут изменяться, но это никак не отразится на фактических параметрах, т. к. меняется их копия.
Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу. К сожалению, нарушение этого требования — это типичная ошибка начинающих, которая не обнаруживается компилятором, но выражается в неверных результатах работы программы. Ошибки, которые трудно обнаружить, лучше совсем не делать, поэтому будьте внимательны к параметрам подпрограмм.
Зато фактическим параметром-значением может быть не только константа или переменная с заданным значением, но и произвольное выражение. Перед вызовом подпрограммы фактические параметры вычисляются, и полученное значение передается в подпрограмму — выполняется подстановка значений.
Параметры-переменные необходимо использовать, прежде всего, для возврата результатов работы подпрограммы в основную программу.
В списке формальных параметров перед ними ставится ключевое слово var[14;15].
Каждому формальному параметру-переменной должен соответствовать фактический параметр обязательно в виде переменной. Выражение здесь недопустимо, т. к. результаты подпрограммы могут быть сохранены только в переменных.
В этом случае при вызове подпрограммы ей передается адрес фактического параметра в памяти и в дальнейшем подпрограмма работает именно с этой ячейкой памяти, а не с копией, как при использовании параметра-значения.
Параметры-константы передаются по адресу, как параметры-переменные, но значения их запрещено изменять в подпрограмме. За этим строго следит компилятор, при нарушении запрета он выдает сообщение об ошибке Invalid variable reference (Недопустимое обращение к переменной).
При описании подпрограммы перед параметрами-константами добавляется служебное слово const, например:
procedure proc (const p: integer) ;.
Параметры-константы — это очень хороший способ передачи исходных данных в подпрограмму, т. к. он не требует дополнительных затрат памяти для хранения копий (во многих случаях для хранения адреса требуется меньше памяти, чем для хранения самого значения). При этом сами исходные данные в своих ячейках памяти остаются в неприкосновенности.
1.4 Использование функций
Если результатом подпрограммы является только одно значение, то имеет смысл оформить такую подпрограмму не в виде процедуры, а в виде функции. Функция пользователя во всем аналогична процедуре, за исключением двух отличий:
- функция передает в программу результат своей работы — единственное значение, носителем которого является имя самой функции;
- имя функции может входить в выражение как операнд.
Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, имя функции, необязательный список формальных параметров и, в отличие от процедуры, тип возвращаемого функцией значения. Тело функции по своей структуре аналогично обычной программе:
function ИмяФункции (ФормальныеПараметры) : ТипРезультата;
{ Описательная часть функции }
begin
{ Инструкции исполнительной части функции }
ИмяФункции := Результат;
end;
В разделе операторов функции должен находиться по крайней мере один оператор, который присваивает ее имени значение результата работы функции. Если таких присваиваний несколько, то результатом функции будет значение последнего выполненного оператора присваивания. Если же такой оператор отсутствует, то значение, возвращаемое функцией, не определено (компилятор не выдает сообщения об ошибке, но результат программы, скорее всего, будет неверным).
В отличие от процедуры, вызов функции не оформляется в виде отдельного оператора. Обращение к функции пользователя осуществляется аналогично обращению к стандартной функции, т. е. посредством ее использования в выражении. Можно считать, что разработка собственных функций позволяет расширить список стандартных функций, доступных программе.
В Pascal допускается любой уровень вложенности процедур и функций. Процедура, описанная в основной программе, в свою очередь, может содержать описания внутренних процедур и функций. При этом объекты, описанные в вызывающей процедуре, являются глобальными по отношению к вызываемой процедуре.
Схематическое изображение структуры блоков некоторой программы на Pascal приведено на рис. 1.1
Рис.1.1 Иллюстрация вложенных процедур
Для доступа к объектам, описанным в различных блоках, требуется соблюдать следующие правила[8;63]:
- имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные блоки;
- имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков;
- если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в вышестоящем блоке, то это последнее имя становится недоступным в данном блоке.
Если применить эти правила к схеме на рис. 1.1, можно сказать, что объекты, описанные в блоке В, известны (видимы), кроме самого блока В, еще и в блоках С и D, но невидимы в блоке А. Объекты, описанные в блоке F, видимы только в пределах этого блока.
ГЛАВА 2 ПРОЕКТНАЯ ЧАСТЬ
2.1 Условие задачи
Дан массив целых чисел. Необходимо отсортировать заданный массив, по возрастанию элементов.
Наиболее простым методом решения этой задачи, является метод простого обмена или метод «пузырька».
Слева направо поочередно сравниваются два соседних элемента массива, и если их взаимное расположение не соответствует заданному условию упорядоченности, то они меняются местами. Далее берутся два следующих соседних элемента и так далее до конца массива.
После одного такого прохода на последней n-ой позиции массива будет стоять максимальный (или минимальный) элемент ("всплыл" первый "пузырек"). Поскольку максимальный (или минимальный) элемент уже стоит на своей последней позиции, то второй проход обменов выполняется до (n-1)-го элемента. И так далее. Всего требуется (n-1) проход.
2.2 Тестовые примеры
Тестовый примерами для проверки работы программы представлен на рис. 2.1
Рис. 2.1. Демонстрация сортировки по возрастанию методом "пузырька"
2.3 Схема алгоритма
Разработаем схему алгоритма метода пузырька, используя понятие подпрограмм, для обеспечения ввода, вывода и обмена элементов массива.
Рис. 2.2. Схема алгоритма метода «пузырька»
Рис.2.3 Алогритм процедуры ввода элементов массива
Рис.2.4 Алогритм процедуры вывода элементов массива
Рис.2.4 Алогритм функции перестановки элементов массива
ГЛАВА 3 ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
3.1 Листинг программы
Согласно разработанного алгоритма, в разделе 2.3, используя язык программирования Pascal, была разработана программа текст, которой представлен ниже
{программа сортирует по возрастанию массив из 100 целых элементов}
program sort;
{подключаем библиотеку, содержащую функции стирания экрана и ожидания нажатия клавиши}
uses crt;
{описываем тип массива}
type massive=array[1..100] of integer;
{описываем необходимые переменные}
var lb,ub:integer;
i,n,a0:integer;
flag:boolean;
A:massive;
procedure vvod(var A:massive);
{процедура ввода массива}
begin
for i:=1 to n do
begin
write('A[',i,']=');
read(A[i]);
end;
end;
procedure vuvod(var A:massive);
{процедура вывода массива}
begin
for i:=1 to n do
writeln(A[i]);
writeln('<Enter>');
readkey;
end;
function swap:boolean;
{функция перестановки элементов массива}
begin
a0:=A[i+1];
A[i+1]:=A[i];
A[i]:=a0;
swap:=false;
end;
{начало главной программы }
Begin
{стирание экрана }
clrscr;
{ввод размера массива}
Writeln('Vvedite N');
readln(N);
lb:=1;
ub:=n-1;
{ввода массива}
vvod(A);
repeat
flag:=true;
for i:=1 to ub do
if A[i]>A[i+1] then
{перестановка элементов массива}
flag:=swap;
writeln('************');
{вывод промежуточных результатов}
vuvod(A);
{завершение цикла обработки }
until flag=true;
{ вывод результирующего массива}
writeln('Rezultat');
vuvod(A);
end.
3.2 Протокол работы программы
Vvedite N
7
A[1]=7
A[2]=0
A[3]=-4
A[4]=3
A[5]=1
A[6]=-2
A[7]=5
************
0
-4
3
1
-2
5
7
<Enter>
************
-4
0
1
-2
3
5
7
<Enter>
************
-4
0
-2
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
0
1
-2
3
5
7
<Enter>
************
-4
0
-2
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
Rezultat
-4
-2
0
1
3
5
7
<Enter>
ЗАКЛЮЧЕНИЕ
Курсовая работа посвящена вопросам реализации подпрограмм на языке высокого уровня pascal. Первая часть работы является теоретическим исследованием рассматриваемых вопросов. Проанализированы методы описания процедур и функций в pascal, а так же проанализированы виды процедур, функций, а так же особенности описания и реализации. Рассмотрены вопросы, связанные с описанием параметров процедур и функций.
Во второй части работы разработка алгоритма решения задачи сортировки массива методом простого обмена с использованием средств процедур и функций.
В третьей части работы выполнена разработка программы, реализующей алгоритм рассматриваемого метода с использованием процедур и функций.
Как показывают проведенные исследования разработанный алгоритм и программа позволяют успешно решать рассматриваемую задачу трассировки целочисленного массива. Удачным решением при разработке программы является использование двух процедур и одной функции, что позволило существенно уменьшить код программы, однако реализованный метод, не обладает высокой эффективностью решения задач сортировки и близок к полнопереборным методом.
Для уменьшения этого недостатка возможна модификация рассматриваемого метода простого обмена, которая известна в литературе как Шейк-сортировка. В этом алгоритме сортировка выполняется каждый раз с различных сторон массива. Первый раз с начальных элементов, второй раз -с последних элементов массива. Процесс сортировки, обмена элементов массива аналогичен сортировке простого обмена (метод пузырька).
Применение модифицированного метода сортировки пузырька (Шейк-сортировки) обычно приводит к повышению скорости и уменьшению операций при сортировке массива, особенно в тех случаях когда массив является частично упорядоченным. Листинг разработанной программы по методу Шейк сортировки и протокол работы программы приведены в приложении А. Результаты показывают, что результат сортировки по этому методу достигается быстрее. Как недостаток метода Шейк-сортировки необходимо отметить некоторую большую сложность по сравнению с методом пузырька.
СПИСОК ЛИТЕРАТУРЫ
- Абрамсон, И.. Oracle 10g: Первое знакомство/ И. Абрамсон, М. Кори, М. Эбби. - М.: Лори, 2017. - 348 с.
- Андон Ф. Язык запросов SQL / Ф. Андон, В. Резниченко. – СПб.: BHV, 2016. – 416 с.
- Аткинсон Л. MySQL Библиотека профессионала / Л. Аткинсон. – М. : Вильямс, 2013. – 624 с.
- Ахо А.Д. Хопкрофт Д.Є. Ульман Структуры данныхи алгоритмы. Москва, Санкт-Петербург, 2016
- Базы данных для небольших предприятий и Интернета; СПб: Символ-Плюс, 2015. - 560 c.
- Базы данных: Учебник для ВУЗов / Под ред.— СПб: Корона принт, 2014. - 416 с.
- Базы данных: Учебник для ВУЗов / Под ред.А.Д.Хомоненко — СПб: Корона принт, 2014. - 416 с.
- Виейра, Р. Программирование баз данных Microsoft SQL Server 2005 для профессионалов; Диалектика, 2016. - 301 c.
- Гайдамакин Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный курс: Учебное пособие. — М.: Гелиос АРВ, 2012. — 368 с.
- Герасевич, Виталий Блоги и RSS: интернет-технологии нового поколения; СПб: BHV, 2016. - 256 c.
- Голицына О.Л. Попов И.И. основы алгоритмизации и программирования. Москва, 2016
- Грабер, Мартин SQL. Справочное руководство; М.: Лори; Издание 2-е, 2015. - 354 c.
- Иванов Б.Н. Дискретная математика алгоритмы. Алгоритмы и программы. Лаборатория базовых знаний 2013
- Окулов С. М. Программирование в алгоритмах. М.Бином: 2012.
- Рапаков Г. Г., Ржеуцкая С. Ю. Программирование на языке Pascal. — СПб.: БХВ-Петербург, 2014. - 480 с.
- MySQL Библиотека профессионала / Л. Аткинсон. – М. : Вильямс, 2012. – 624 с.
- MySQL руководство администратора; М.: Вильямс, 2015. - 621 c.
- SQL Server 2015 шаг за шагом. Практическое руководство; М.: ЭКОМ, 2017. - 463 c.
- Weinberg P. Groff J. SQL The Complete Reference, The McGraw-Hill Companies 2015.- 911c.
ЛИСТИНГ И ПРОТОКОЛ РАБОТЫ МОДИФИЦИРОВАННОЙ ПРОГРАММЫ
program sort;
uses crt;
type massive=array[1..100] of integer;
var lb,ub:integer;
i,n,a0:integer;
flag:boolean;
A:massive;
procedure vvod(var A:massive);
begin
for i:=1 to n do
begin
write('A[',i,']=');
read(A[i]);
end;
end;
procedure vuvod(var A:massive);
begin
for i:=1 to n do
writeln(A[i]);
writeln('<Enter>');
readkey;
end;
function swap:boolean;
begin
a0:=A[i+1];
A[i+1]:=A[i];
A[i]:=a0;
swap:=false;
end;
function swap1:boolean;
begin
a0:=A[i];
A[i]:=A[i-1];
A[i-1]:=a0;
swap1:=false;
end;
begin
clrscr;
Writeln('Vvedite N');
readln(N);
lb:=1;
ub:=n-1;
vvod(A);
repeat
flag:=true;
for i:=1 to ub do
if A[i]>A[i+1] then flag:=swap;
writeln('************');
vuvod(A);
if flag=true then break;
for i:=n downto 2 do
if A[i-1]>A[i] then flag:=swap1;
writeln('************');
vuvod(A);
until flag=true;
writeln('Rezultat');
vuvod(A);
end.
Протокол работы программы
Vvedite N
7
A[1]=7
A[2]=0
A[3]=-4
A[4]=3
A[5]=1
A[6]=-2
A[7]=5
************
0
-4
3
1
-2
5
7
<Enter>
************
-4
0
-2
3
1
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
0
-2
3
1
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
************
-4
-2
0
1
3
5
7
<Enter>
Rezultat
-4
-2
0
1
3
5
7
<Enter>
- Разработка регламента выполнения процесса «Разработка стратегии охраны окружающей среды»
- Анализ внешней и внутренней среды организации (Понятие и факторы внешней и внутренней среды)
- Управление изменениями в проекте (История развития управления проектами за рубежом и в России)
- Бренд как социально-психологический феномен (Особенности радиобрендинга)
- Технологии создания управленческих команд (Понятие управленческой команды как субъекта управления)
- Информационные и мотивационные структуры в особенностях индивидуального поведения и учет их в практике работы с персоналом (Мотивация как функция управления. Взаимосвязь понятий: потребности, мотивы, стимулы)
- Страхование и его государственное регулирование(Анализ особенностей регулирования страховой деятельности в РФ)
- Управление рисками в проектной среде (Понятие и виды рисков в проектной среде)
- Мотивация и ее теории (Появление и значение теорий мотивации)
- Коммерческая деятельность оптового торгового предприятия и ее совершенствование (на примере ООО «Охотник»)
- Особенности кадровой стратегии кредитных организаций (Базовые принципы кадровой стратегии)
- Понятие и виды ценных бумаг (Развитие ценных бумаг в мире)