На главную Самоучитель pascal Форум программистов онлайн Решение задач pascal Задачи pascal Поиск
13 Июл 13

Функции в паскале


Комментарии :  0        Просмотры :  9485



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

В данном уроке мы рассмотрим такие вопросы , как " как объявить функцию в паскале ? , какие встроеные функции и процедуры есть в паскаль ? Как отличить функцию от процедуры ?.
Многие программы на языке паскаль занимают достаточно много места на рабочем экране. И из-за этого достаточно сложно найти какой-либо элемент даже в собственной программе.

Поэтому в некоторых случаях будет проще заменить некоторые участки кода блоками ( подпрограммами ). В паскале подобные подпрограммы называют функциями и процедурами.

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

Все процедуры и функции объявляются после блока Var ( Блок , в котором объявляются глобальные переменные ). Вы возможно задаетесь вопросом о том , что такое глобальные переменные ?

Глобальные переменные - это переменные , которые существуют в любом участке программе ( далее будет яснее ).

Давайте рассмотрим структуры подпрограмм.

Процедуры в паскале :

Структура процедуры в паскале выглядит так :
Структура процедуры в паскале


Как видно по картинке выше , вначале идет слово procedure. Далее идет имя процедуры , в нашем случае процедура называется "А". После имени процедуры идет описание получаемых переменных. ( Пример : A(n:integer) или A(n:integer;t:string) )

Проще говоря , процедура получает переменную , значение которой мы заносим в целочисленную переменную n ( локальная переменная ). Если мы получаем несколько переменных разных типов , то они перечисляются через точку с запятой ; Блок описания получаемых переменных является необязательным.

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

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

Рассмотрим решение такой задачи : Требуется заполнить массив A десятью случайными числами от -10 до 10 , а потом вывести их на экран. Решение выглядит так :
program mypascal;
uses crt;
var
a: array[1..10] of integer;
procedure readA;
var
i:byte;
begin

randomize;
for i:= 1 to 10 do
a[i]:= random(21)-10;

end;
procedure writeA;
var
i:byte;
begin

for i:= 1 to 10 do
write(a[i],' ');

end;
begin

readA; { Процедура заполняет массив A числами от -10 до 10 }

writeA; { Процедура выводит массив A на экран }

end.

Как видно из кода программы , в ней существуют 2 процедуры readA и writeA , которые отвечают за наполнение и вывод массива соответственно.

Также можно рассмотреть подобную задачу : Требуется ввести число и вывести его квадрат на экран. Решение выглядит так :
program mypascal;
var
n:integer;
procedure kv(a:integer);
var
i:byte;
begin

writeln('Квадрат числа ',a,' = ',sqr(a));

end;
begin

write('Введите число : ');
readln(n);

kv(n); { Процедура выводит на экран квадрат числа N }

end.


Здесь процедура kv получает целочисленную переменную n , значение которой заносится в локальную , целочисленную переменную переменную a.

Функции в паскале :

Структура функции совсем немного отличается от структуры процедуры.
Структура функции в паскале


Вы , возможно , уже заметили различие. Главное запомнить , что любая функция должна возвращать какой-либо результат в конце своей работы ( в нашем случае функция возвращает целочисленное значение integer ).

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

В остальном же , структура функции аналогична процедуре.

Решим задачу : Нужно ввести число и вывести его корень на экран.
program mypascal;
var
n:integer;
function kor(a:integer):real;
begin

kor:= sqrt(a);

end;
begin

write('Введите число : ');
readln(n);

writeln('Корень из числа ',n,' = ',kor(n));

end.

Заметьте , что корень может быть нецелым числом , поэтому функция возвращает вещественный результат real.

Рекурсии :

Рекурсия - это ещё одна большая тема в pascal , которую мы разберем позже. Но стоит рассказать сейчас о том , что под рекурсией часто понимают использование подпрограммы в подпрограмме ( Например : процедуры в процедуре или функции в функции ).

Рассмотреть использование рекурсии можно на подобной задаче : Заполнить массив десятью случайными числами от -10 до 10 и найти первое отрицательное число ( вывести на экран номер отрицательного числа , если есть ).
program mypascal;
uses
crt;
var
a: array[1..10] of integer;
i:integer;
procedure ser(n:byte);
begin

randomize;
if ( a[n] < 0 ) then
writeln(n,' число отрицательное !')
else
ser(n+1);

end;
begin

for i:= 1 to 10 do
a[i]:= random(21)-10;

for i:= 1 to 10 do
write(a[i],' ');

writeln();

ser(1);

end.


В нашем случае процедура ser работает с определенными элементами массива A. Если элемент массива отрицательный , то выводим сообщение , а если нет , то переходим к этой процедуре ( передовая другой элемент ).

Понять это довольно трудно , ещё труднее пересказать. Однако практикуясь все будет понятнее.

Рейтинг материала : ( 5 / 3 )
Сообщить об ошибке
Комментарии :  0        Просмотры :  9485

Личный кабинет

Логин:
Пароль:

Поиск

RSS лента

Подписаться на rss


Подпишитесь на нашу ленту новостей rss и вы всегда сможете быть в курсе обновлений на нашем сайте.

Решение задач

Если вас интересует решение какой-либо задачи , то вы можете опубликовать
её условие на нашем сайте или форуме. И в скором времени другие пользователи помогут вам.

Опубликовать на сайте

Опубликовать на форуме

Опрос

Какой ваш любимый раздел ?