русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Процедуры и функции пользователя в языке Паскаль


Дата добавления: 2014-11-28; просмотров: 881; Нарушение авторских прав


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

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

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

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

Procedure идентификатор [(параметры)];

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

Список параметров может состоять из нескольких групп параметров, разделенных точкой с запятой (;):

(группа параметров [; группа параметров [; …] ] ).

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

§ идентификатор [, идентификатор [,…]]: type (список параметров-значений - только передают значения в процедуру);

§ var идентификатор [, идентификатор [,…] ]: type (список параметров-переменных – возвращают значения в вызывающую программу из процедуры);



§ var идентификатор [, идентификатор [,…] ](список нетипизированных параметров-переменных).

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

Пример. Процедура для вывода текстовой строки в указанную позицию на экране. Описание процедуры:

Procedure WrStr(X, Y: integer; S: string); {Заголовок}

var {Описание локальных переменных}

SaveX, SaveY: Integer;

begin

SaveX := WhereX; {Запоминаем позицию курсора на экране по Х}

SaveY := WhereY; {То же по Y}

GotoXY(X,Y); {Перемещаем курсор в заданную позицию X,Y}

Write(S); {Выводим с заданной позиции строку текста}

GotoXY(SaveX, SaveY); {Перемещаем курсор в исходную позицию}

end;

Обращение к ней из головной программы или другой процедуры может выглядеть следующим образом: WrStr(40, 2, ’Расчет …’):

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

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

Функция, в отличие от процедуры, имеет имя, которое принимает определенное значение после ее выполнения. Описание функции:

{функция, которая преобразует все символы строки в прописные}

Function UpCaseStr(S: string): string; {заголовок}

var i : integer; {раздел описаний локальных переменных}

begin {начало тела функции}

for i := 1 to Length(S) do

if (S[i] >= 'a') and (S[i] <= 'z') then Dec(S[i], 32);

UpCaseStr := S;

end; {конец описания функции}

Вызов этой функции из головной программы или другой процедуры может выглядеть следующим образом: Write(UpCaseStr(’Расчет …’)).

Использование подобных функций пользователя ничем не отличается от использования стандартных функций вроде sin(x), exp(a) и проч.

Ниже приведён пример построения программы с разбиением её на отдельные процедуры:

 

Program Prg_proc;

Uses Crt, Printer;

Var

xn, xk, h : real;

i, j, m, n : word;

x, y : array [1..50] of real;

mnu : array [1..6] of string[10];

vv : char;

 

Procedure my_mnu;

begin

Window(1, 1, 80, 1); TextColor(0); GoToXY(1,1);

for i:=1 to 5 do

if i=m then

begin

TextBackground(2);Write(' ',mnu[i],' ');

end

else

begin

TextBackground(7); Write(' ',mnu[i],' ');

end;

Window(1, 2, 80, 25);

GoToXY(1,1); TextColor(15);TextBackground(0);

end;

 

Procedure input_kl;

begin

ClrScr;

Write('x начальное = '); Readln(xn);

Write('x конечное = '); Readln(xk);

Write('количество точек графика (n<50) = '); Readln(n);

m:=2; my_mnu

end;

 

Procedure calc_dat;

begin

x[1]:=xn;

h:=(xk-xn)/(n-1);

for i:=1 to n do

begin

y[i]:=sin(x[i]); x[i+1]:=x[i]+h;

end;

ClrScr; Write('Расчет выполнен!')

end;

 

Procedure out_dat;

begin

ClrScr;

Writeln('------------------------------');

Writeln(' X Y ');

Writeln('------------------------------');

for i:=1 to n do Writeln(x[i]:15:5,Y[i]:15:5);

Writeln('------------------------------');

end;

 

Procedure out_gr;

begin

Write('здесь нужно описать вывод графика на экран')

end;

 

begin {Головная программа}

TextBackground(0); ClrScr;

mnu[1]:='Исх.данные';

mnu[2]:='Расчет' ;

mnu[3]:='Таблица';

mnu[4]:='График' ;

mnu[5]:='Выход' ;

m:=1;

my_mnu;

Repeat

vv:=Readkey;

if ord(vv)=0 then vv:=Readkey;

case ORD(VV) of

13:begin

Case m of

1:input_kl;

2:calc_dat;

3:out_dat ;

4:out_gr ;

end;

end;

77:begin if m<5 then m:=m+1 else m:=1; my_mnu end;

75:begin if m>1 then m:=m-1 else m:=5; my_mnu end;

end;

Until (vv=chr(13)) and (m=5);

end.

Задание

Ввести текст программы Prg_proc с клавиатуры в системе Turbo Pascal. Сохранить файл в свою папку. Выполнить отладку программы. Дополнить программу процедурой вывода расчетной таблицы на принтер.

Пользуясь программой, рассчитать таблицу значений для следующих функций:

1. y = exp( - ax2); 6. y = ax;
2. y = x /(sin(5x)+1,5); 7. y = | cos(x)|;
3. y = a x2+ b x + c; 8. y = x/(1- x2);
4. y = , где –r £ x £ r; 9. y = x ;
5. E = 1010 / ; 10. y = 0,1x sin(x/0,5).


<== предыдущая лекция | следующая лекция ==>
Задание | Лабораторная работа №10


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.075 сек.