Файл: Основы программирования на языке Pascal (Использование процедур в языке Pascal).pdf
Добавлен: 28.06.2023
Просмотров: 76
Скачиваний: 2
function ИмяФункции (ФормальныеПараметры) : ТипРезультата;
{ Описательная часть функции }
begin
{ Инструкции исполнительной части функции }
ИмяФункции := Результат;
end;
В разделе операторов функции должен находиться по крайней мере один оператор, который присваивает ее имени значение результата работы функции. Если таких присваиваний несколько, то результатом функции будет значение последнего выполненного оператора присваивания. Если же такой оператор отсутствует, то значение, возвращаемое функцией, не определено (компилятор не выдает сообщения об ошибке, но результат программы, скорее всего, будет неверным).
В отличие от процедуры, вызов функции не оформляется в виде отдельного оператора. Обращение к функции пользователя осуществляется аналогично обращению к стандартной функции, т. е. посредством ее использования в выражении. Можно считать, что разработка собственных функций позволяет расширить список стандартных функций, доступных программе.
1.5 Вложенные процедуры и функции
В Pascal допускается любой уровень вложенности процедур и функций. Процедура, описанная в основной программе, в свою очередь, может содержать описания внутренних процедур и функций. При этом объекты, описанные в вызывающей процедуре, являются глобальными по отношению к вызываемой процедуре.
Схематическое изображение структуры блоков некоторой программы на Pascal приведено на рис. 1.1
Рис.1.1 Иллюстрация вложенных процедур
Для доступа к объектам, описанным в различных блоках, требуется соблюдать следующие правила:
- имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные блоки;
- имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков;
- если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в вышестоящем блоке, то это последнее имя становится недоступным в данном блоке.
Если применить эти правила к схеме на рис. 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, а так же проанализированы виды процедур, функций, а так же особенности описания и реализации. Рассмотрены вопросы, связанные с описанием параметров процедур и функций.
Во второй части работы разработка алгоритма решения задачи сортировки массива методом простого обмена с использованием средств процедур и функций.
В третьей части работы выполнена разработка программы, реализующей алгоритм рассматриваемого метода с использованием процедур и функций.
Как показывают проведенные исследования разработанный алгоритм и программа позволяют успешно решать рассматриваемую задачу трассировки целочисленного массива. Удачным решением при разработке программы является использование двух процедур и одной функции, что позволило существенно уменьшить код программы, однако реализованный метод, не обладает высокой эффективностью решения задач сортировки и близок к полнопереборным методом.
Для уменьшения этого недостатка возможна модификация рассматриваемого метода простого обмена, которая известна в литературе как Шейк-сортировка. В этом алгоритме сортировка выполняется каждый раз с различных сторон массива. Первый раз с начальных элементов, второй раз -с последних элементов массива. Процесс сортировки, обмена элементов массива аналогичен сортировке простого обмена (метод пузырька).
Применение модифицированного метода сортировки пузырька (Шейк-сортировки) обычно приводит к повышению скорости и уменьшению операций при сортировке массива, особенно в тех случаях когда массив является частично упорядоченным. Листинг разработанной программы по методу Шейк сортировки и протокол работы программы приведены в приложении А. Результаты показывают, что результат сортировки по этому методу достигается быстрее. Как недостаток метода Шейк-сортировки необходимо отметить некоторую большую сложность по сравнению с методом пузырька.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
-
-
- Рапаков Г. Г., Ржеуцкая С. Ю. Программирование на языке Pascal. — СПб.: БХВ-Петербург, 2004. - 480 с.
- Окулов С. М. Программирование в алгоритмах. М.Бином: 2002.
- Ахо А.Д. Хопкрофт Д.Є. Ульман Структуры данныхи алгоритмы. Москва, Санкт-Петербург, 2000
- Иванов Б.Н. Дискретная математика алгоритмы. Алгоритмы и программы. Лаборатория базовых знаний 2003
- Голицына О.Л. Попов И.И. основы алгоритмизации и программирования. Москва, 2008
-
ЛИСТИНГ И ПРОТОКОЛ РАБОТЫ МОДИФИЦИРОВАННОЙ ПРОГРАММЫ
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