Основные различия между функциями и процедурами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные различия между функциями и процедурами



 

1. Функция, как правило, возвращает одно единственное значение, например Sin (x).

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

2. Заголовок функции (ее первая строка) завершается указанием типа возвращаемого значения (например, real, integer и т.д.). В заголовке процедуры такая информация не требуется.

3. В конце тела функции ей присваивается то значение, для вычисления которого она предназначена, например, Sum_Mas:=S;

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

 

Правила применения подпрограмм

 

Нельзя в заголовке подпрограммы описывать сложные структуры, необходимо ссылаться на описание типов этих структур в основной программе. Например,

Procedure pr1(a: array [1..n] of integer); - нельзя!

Можно:

Procedure pr1(a: Mas_Type);,

где Mas_Type – имя типа, описанного в основной программе:

const n=100;

Type Mas_Type= array[1..n] jf integer;

2. Типы формальных и фактических параметров должны быть согласованными.

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

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

5. Подпрограммы с параметром-константой не могут изменить этот параметр в главной программе, в стек копируется только адрес параметра-константы, она может быть переменной, константой или математическим выражением.

6. Желательно, чтобы имена формальных и фактических параметров были различными. Глобальная переменная в подпрограмме становится локальной, если она объявлена в заголовке подпрограммы или в её разделе описания переменных.

7. В подпрограммах могут быть объявлены локальные метки, константы, переменные, процедуры и функции, но не может быть объявлена директива компилятора Uses.

 

 

Примеры


Пример. Проверяем наличие файла и записываем его

type
TFileData=record
Name:String[10];
ExtDat:Extended;
end;
var
Cals: File of TFileData;

CalsData: TFileData;

procedure NAME;

//Описание процедуры

var p: Real;

u: Byte;

begin
Road:='{файл}.dat';
Dest:='{каталог}'+Road;
try
AssignFile(Cals,Dest);
// Если файл существует открываем на чтение, иначе создаем новый

If FileExists(Cals) then Reset(cals) else Rewrite(cals);

// установим позицию чтения в конец файла

seek (cals,filesize(cals));

CalsData.Name:= 'название параметра';

CalsData.ExtDat:= {сами данные};

Write(Cals,CalsData);
except
on E: EInOutError do

ShowMessage('При выполнении файловой операции возникла ошибка'+

' № '+ IntToStr(E. ErrorCode)+': '+SysErrorMessage(GetLastError));

on E: EAccessViolation do

ShowMessage('Ошибка!: '+SysErrorMessage(GetLastError));

end;
CloseFile(cals); //Независимо от того что произошло выше закрываем

открытый файл

end;

Перепишем файл a.dat в файл b.dat, удалив признаки конца файла:

Proedure MyWrite;

var
f1,f2:file of Byte;

a:Byte;

i:Longint;

begin
{$I-}
AssignFile(f1, 'a.dat');

AssignFile(f2, 'b.dat');

Reset(f1);
Rewrite(f2);
for i:= 1 to FileSize(f1) do

begin
Read(f1, a);

if a <> 26 then Write(f2, a);

end;
CloseFile(f1);
CloseFile(f2);
end.

Файл записей. Пишем и читаем любую:

Procedure MyBook;

type TR=Record

Name:string[100];
Age:Byte;
Income:Real;
end;
var f:file of TR;

r:TR;
begin
//assign file

assignFile(f, 'MyFileName');

//open file

if FileExists('MyFileName') then

reset(f)
else
rewrite(f);
//чтение 10-й записи

seek(f,10);
read(f,r);
//запись 20й записи

seek(f, 20);

write(f,r);
closefile(f);
end;

3.3. Контрольные вопросы

    1. В чем различия между процедурой и функцией?
    2. Какие цели достигаются при использовании подпрограмм?
    3. Опишите структуру процедуры.
    4. С какого слова начинается объявление любой процедуры?
    5. Каким символом завершается заголовок процедуры?
    6. Что перечисляется в разделе объявление переменных?
    7. Какими словами начинается и заканчивается раздел инструкций?
    8. С какого слова начинается заголовок функции и что за ним следует?
    9. Чем отличаются глобальные переменные от локальных?
    10. Различают формальные и фактические параметры. Опишите.
    11. Будет ли видима глобальная переменная внутри подпрограммы, если в этой программе имеется локальная переменная с таким же именем?

12. В каких случаях применимы параметры – константы?

13. Почему в функциях нежелательно использовать параметры –

переменные?

 

 

Задания к лабораторной работе № 3

Подпрограммы

Вариант 1.

1.Треугольник задан координатами своих вершин. Составить программу для вычисления его площади.

2.Даны две дроби А/В и С/D (A,B,C,D-натуральные числа). Составить программу для вычитания из первой дроби второй. Результат должен быть несократимой дробью.

 

Вариант 2.

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

2.Даны две дроби A/В и С/D (A,B,C,D-натуральные числа). Составить программу для сложения дробей. Результат должен быть несократимой дробью.

 

Вариант 3.

1.Сформировать массив X(N), N-й член которого определяется формулой X(N)=1/N!.

2.На плоскости заданы своими координатами n точек. Создать массив размером n(n-1), элементами которого являются расстояния от каждой из точек до n-1 других.

 

Вариант 4.

1.Даны числа X,Y,Z,T – длины сторон четырехугольника. Вычислить его площадь, если угол между сторонами длиной X и Y –прямой.

2.Составить программу для вычисления суммы факториалов всех чётных чисел от m до n.

 

Вариант 5.

1.Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке (например, дано число 156, нужно получить 651).

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

 

Вариант 6.

1.Написать программу вычисления суммы p/q=1-1/2+1/3-…+((-1)^(n+1))/n для заданного числа n. Дробь p/q должна быть несократимой(p, q – натуральные).

2.Составить функцию для нахождения наименьшего нечётного натурального делителя k (k≠1) любого заданного натурального числа n.

 

Вариант 7.

1.Напечатать все пары чисел-близнецов из отрезка [n,2n], где n – заданное натуральное число больше 2.

2.Дано натуральное число N. Составить программу для формирования массива, элементами которого являются цифры числа N.

 

Вариант 8.

1.Найти все пары дружественных чисел, которые не больше данного числа К.

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

Написать программу вычисления суммы 1+1/2+1/3+…+1/n для зааданного числа n. Результат представить в виде несократимой дроби p/q (p, q – натуральные).

 

Вариант 9.

1.Составить программу для нахождения чисел из интервала [M,N], имеющих наибольшее количество делителей.

2.Найти все числа Армстронга от 1 до К написать программу, которая находит и выводит на печать все четырехзначные числа вида abcd, для которых выполняется: 1) a, b, c, d – разные цифры; 2) ab - cd = a+ b+ c+ d.

 

Вариант 10.

1.Даны числа X,Y,Z,T-длины сторон четырёхугольника. Вычислить его площадь, если угол между сторонами X и Y-

прямой.

2.Составить программу для вычисления суммы факториалов, всех чисел, кратных 3, от А до В.

 

Вариант 11.

1.Сформировать массив X(N), N-ый член которого определяется формулой X(N)=1/N!

1.Дано простое число. Составить функцию, которая будет находить следующие К простых чисел.

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

 

Вариант12.

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

2.Найти все простые натуральные числа, не превосходящие n, двоичная запись которых представляет собой палиндром.

 

Вариант 13.

1.Составить подпрограмму, которая будет находить корни квадратного уравнения.

2.Написать программу вычисления суммы 1+1/2+1/3+…+1/n для заданного числа n. Результат представить в виде несократимой дроби p/q (p,q-натуральные).

 

Вариант 14.

1.Даны натуральные числа K и N. Составить программу формирования массива А, элементами которого являются числа, сумма цифр которых равна K и которые не больше N.

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

 

Вариант 15.

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

2. Имеется часть катушки с автобусными билетами. Номер билета шестизначный. Составить программу, определяющее количество счастливых билетов на катушке, если меньший номер билета – N, больший – М(билет является счастливым, если сумма первых трех его цифр равнв сумме последних трех).



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 886; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.2.122 (0.017 с.)