Файл: Основы программирования на языке Pascal (Общие сведения о реализации подпрограмм).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 12.03.2024

Просмотров: 11

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

- имя функции может входить в выражение как операнд.

Функция, определенная пользователем, состоит из заголовка и тела функ­ции. Заголовок содержит зарезервированное слово 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, а так же проанализированы виды процедур, функций, а так же особенности описания и реализации. Рассмотрены вопросы, связанные с описанием параметров процедур и функций.

Во второй части работы разработка алгоритма решения задачи сортировки массива методом простого обмена с использованием средств процедур и функций.

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

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

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

Применение модифицированного метода сортировки пузырька (Шейк-сортировки) обычно приводит к повышению скорости и уменьшению операций при сортировке массива, особенно в тех случаях когда массив является частично упорядоченным. Листинг разработанной программы по методу Шейк сортировки и протокол работы программы приведены в приложении А. Результаты показывают, что результат сортировки по этому методу достигается быстрее. Как недостаток метода Шейк-сортировки необходимо отметить некоторую большую сложность по сравнению с методом пузырька.

СПИСОК ЛИТЕРАТУРЫ

  1. Абрамсон, И.. Oracle 10g: Первое знакомство/ И. Абрамсон, М. Кори, М. Эбби. - М.: Лори, 2017. - 348 с.
  2. Андон Ф. Язык запросов SQL / Ф. Андон, В. Резниченко. – СПб.: BHV, 2016. – 416 с.
  3. Аткинсон Л. MySQL Библиотека профессионала / Л. Аткинсон. – М. : Вильямс, 2013. – 624 с.
  4. Ахо А.Д. Хопкрофт Д.Є. Ульман Структуры данныхи алгоритмы. Москва, Санкт-Петербург, 2016
  5. Базы данных для небольших предприятий и Интернета; СПб: Символ-Плюс, 2015. - 560 c.
  6. Базы данных: Учебник для ВУЗов / Под ред.— СПб: Корона принт, 2014. - 416 с.
  7. Базы данных: Учебник для ВУЗов / Под ред.А.Д.Хомоненко — СПб: Корона принт, 2014. - 416 с.
  8. Виейра, Р. Программирование баз данных Microsoft SQL Server 2005 для профессионалов; Диалектика, 2016. - 301 c.
  9. Гайдамакин Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный курс: Учебное пособие. — М.: Гелиос АРВ, 2012. — 368 с.
  10. Герасевич, Виталий Блоги и RSS: интернет-технологии нового поколения; СПб: BHV, 2016. - 256 c.
  11. Голицына О.Л. Попов И.И. основы алгоритмизации и программирования. Москва, 2016
  12. Грабер, Мартин SQL. Справочное руководство; М.: Лори; Издание 2-е, 2015. - 354 c.
  13. Иванов Б.Н. Дискретная математика алгоритмы. Алгоритмы и программы. Лаборатория базовых знаний 2013
  14. Окулов С. М. Программирование в алгоритмах. М.Бином: 2012.
  15. Рапаков Г. Г., Ржеуцкая С. Ю. Программирование на языке Pascal. — СПб.: БХВ-Петербург, 2014. - 480 с.
  16. MySQL Библиотека профессионала / Л. Аткинсон. – М. : Вильямс, 2012. – 624 с.
  17. MySQL руководство администратора; М.: Вильямс, 2015. - 621 c.
  18. SQL Server 2015 шаг за шагом. Практическое руководство; М.: ЭКОМ, 2017. - 463 c.
  19. 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>