Язык программирования Паскаль (версия PascalABC.NET)
Процедуры и функции в языке программирования Pascal
Вспомогательный алгоритм – это алгоритм решения какой-либо подзадачи, который может вызываться из основного алгоритма. В программировании вспомогательные алгоритмы называют подпрограммами (процедурами) .
Процедура – подпрограмма, которая начинает выполняться после вызова её из основной программы или другой процедуры. Каждая процедура имеет уникальное имя и список входных и выходных параметров.
Входные параметры – переменные, значения которых устанавливаются до начала выполнения процедуры.
Выходные параметры – переменные, значения которых устанавливаются после окончания выполнения процедуры.
Описание процедуры
Procedure Имя();
Begin ... ... End;
Примечание: Описания процедур располагаются перед блоком операторов основной программы. Список формальных параметров может отсутствовать.
Входные параметры описываются как параметры-значения :
Имя( : тип);
Выходные параметры описываются как параметры-переменные :
Имя( var : тип);
Вызов процедуры
Имя();
Примечание: Между формальными и фактическими параметрами должно быть соответствие по количеству, порядку следования и типу.
Например
//процедура
Procedure Summa(a, b: integer; var c: integer);
begin
c := a + b
end;
//основная программа
Begin
. . .
Summa(2, 3, S); //вызов процедуры
Write(S); //напечатается число 5
. . .
End.
При вызове процедуры её формальные входные параметры заменяются на фактические , по окончании выполнения процедуры значения выходных параметров передаются в основную программу.
y ввод a,b,c,d,e z := y z := x BID (a, b, max) BID (max, c, max) выход BID (max, d, max) a b max c max d max e max BID (max, e, max) вывод max конец " width="640"
Задача 1а
Найти большее из пяти заданных чисел, используя вспомогательный алгоритм нахождения большего из двух чисел.
Блок-схема алгоритма решения задачи
BID (x, y, z)
начало
xy
ввод a,b,c,d,e
z := y
z := x
BID (a, b, max)
BID (max, c, max)
выход
BID (max, d, max)
a b
max c
max d
max e
max
BID (max, e, max)
вывод max
конец
y then z:=x else z:=y end ; //основной алгоритм Begin writeln ( 'Введите пять чисел:' ); readln (a, b, c, d, e); BID (a, b, max); BID (max, c, max); BID (max, d, max); BID (max, e, max); writeln ( 'Максимальное число: ' , max); End . " width="640"
Задача 1а
Найти большее из пяти заданных чисел, используя вспомогательный алгоритм нахождения большего из двух чисел.
Program BIP;
Var a, b, c, d, e, max: integer ;
//вспомогательный алгоритм (x,y – вход, z – выход)
Procedure BID (x, y: integer ; var z: integer );
begin
if xy then z:=x else z:=y
end ;
//основной алгоритм
Begin
writeln ( 'Введите пять чисел:' );
readln (a, b, c, d, e);
BID (a, b, max);
BID (max, c, max);
BID (max, d, max);
BID (max, e, max);
writeln ( 'Максимальное число: ' , max);
End .
Функции
Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение.
Каждая функция имеет уникальное имя и список аргументов и возвращает одно значение-результат . Тип результата указывается в заголовке функции.
Function Имя() : тип;
Begin ... ... End;
Примечание: в коде функции должен быть оператор, присваивающий значение переменной, имя которой совпадает с именем функции , эту переменную не нужно объявлять.
Функции можно вызывать везде, где можно использовать выражение соответствующего типа:
Имя();
Например
//функция
Function Summa (a, b: integer ): integer ;
begin
Summa := a+b
end;
//основная программа
Begin
. . .
s:=Summa( 2 , 3 ); //вызов функции в выражении
Write(s); //напечатается число 5
. . .
End.
При вызове функции её формальные аргументы заменяются на фактические , по окончании выполнения значение функции передаётся в основную программу в место вызова.
y then BID:=x else BID:=y end ; //основная программа Begin writeln ( 'Введите пять чисел:' ); readln (a, b, c, d, e); //вызовы функции в выражении max := BID (BID (BID (BID (a, b), c), d), e); writeln ( 'Максимальное число: ' , max); End . " width="640"
Задача 1б
Найти большее из пяти заданных чисел, используя вспомогательный алгоритм нахождения большего из двух чисел .
max := (BID (BID (BID (a, b), c), d), e)
Program BIP;
Var a, b, c, d, e, max: integer ;
//функция большее из двух
Function BID (x, y: integer ): integer ;
begin
if xy then BID:=x else BID:=y
end ;
//основная программа
Begin
writeln ( 'Введите пять чисел:' ); readln (a, b, c, d, e);
//вызовы функции в выражении
max := BID (BID (BID (BID (a, b), c), d), e);
writeln ( 'Максимальное число: ' , max);
End .
Задача 2а
Подсчитать количество слов в тексте, используя вспомогательный алгоритм нахождения количества пробелов в строке.
Program Kol_slov;
Var a: string ; p: integer ;
//процедура подсчета пробелов (x – вход, k – выход)
Procedure Kol_prob (x: string ; var k: integer );
var i: integer ; //локальная переменная
begin
k:= 0 ;
for i:= 1 to length(x) do
if x[i]= ' ' then k:=k+ 1 ;
end ;
//основная программа
Begin
writeln( 'Введите текст:' ); readln(a);
Kol_prob (a, p); //вызов процедуры
writeln ( 'Количество слов в этом тексте ' , p+ 1 );
End .
Задача 2б
Подсчитать количество слов в тексте, используя вспомогательный алгоритм нахождения количества пробелов в строке.
Program Kol_slov;
Var a: string ; p: integer ;
//функция подсчета пробелов
Function Kol_prob (x: string ): integer ;
var i, k: integer ; //локальные переменные
begin
k:= 0 ;
for i:= 1 to length(x) do
if x[i]= ' ' then k:=k+ 1 ;
Kol_prob:=k; //значение функции
end ;
//основная программа
Begin
writeln( 'Введите текст:' ); readln(a);
p:=Kol_prob(a); //вызов функции
writeln ( 'Количество слов в этом тексте ' , p+ 1 );
End .
Задача 3а
Удалить все пробелы в тексте, используя вспомогательный алгоритм удаления символов в строке.
Program Udal_probelov;
Var a, b: string ;
//x – исх. строка, y – удал. символ, z – рез. строка
Procedure Del (x, y: string ; var z: string );
var i: integer ; //локальная переменная
begin
z:= '' ;
for i:= 1 to length(x) do
if x[i]y then z:=z+x[i];
end ;
//основная программа
Begin
writeln( 'Введите текст:' ); readln(a);
Del (a, ' ' , b); //вызов процедуры
writeln( 'Текст без пробелов:' );
writeln(b);
End .
Задача 3б
Удалить все пробелы в тексте, используя вспомогательный алгоритм удаления символов в строке.
Program Udal_probelov;
Var a, b: string ;
//x – исходная строка, y – удаляемый символ
Function Del (x, y: string ): string ;
var i: integer ; z: string ; //локальные переменные
begin
z:= '' ;
for i:= 1 to length(x) do
if x[i]y then z:=z+x[i];
Del:=z; //значение функции
end ;
//основная программа
Begin
writeln( 'Введите текст:' ); readln(a);
b:=Del (a, ' ' ); //вызов функции
writeln( 'Текст без пробелов:' ); writeln(b);
End .
Задача 4а
Составить программу для вычисления значения выражения:
Program Stepeni;
Var x, s, s1: integer ;
//процедура вычисления степени как произведения
Procedure St (a, b: integer ; var p: integer );
var i: integer ; //локальная переменная
begin
p:= 1 ;
for i:= 1 to b do p:=p*a;
end ;
Begin //основная программа
writeln ( 's = x^3 + x^5 + x^7' );
write ( 'Введите x: ' ); readln (x);
St(x, 3 , s1); s:=s1; //вызов проц. и добавление к сумме
St(x, 5 , s1); s:=s+s1;
St(x, 7 , s1); s:=s+s1;
writeln ( 's = ' , s);
End .
Задача 4б
Составить программу для вычисления значения выражения:
Program Stepeni;
Var x, s: integer ;
//функция вычисления степени как произведения
Function St (a, b: integer ): integer ;
var i, p: integer ; //локальные переменные
begin
p:= 1 ;
for i:= 1 to b do p:=p*a;
St:=p //значение функции
end ;
Begin //основная программа
writeln ( 's = x^3 + x^5 + x^7' );
write ( 'Введите x: ' ); readln (x);
//вызовы функции в выражении
s := St(x, 3 ) + St(x, 5 ) + St(x, 7 );
writeln ( 's = ' , s);
End .
Задача 5а
Составить программу для вычисления периметра треугольника, заданного координатами своих вершин.
Длина отрезка AB по координатам его концов:
y B
B(x B, y B )
y A
A(x A, y A )
x B
x A
Процедура для вычисления длины отрезка:
Procedure Dlina (x1, y1, x2, y2: real ; var dl: real );
begin
dl:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end ;
Задача 5а
Составить программу для вычисления периметра треугольника, заданного координатами своих вершин.
Program Perimetr_Treug;
Var xa, ya, xb, yb, xc, yc, d, p: real ;
//процедура вычисления длины отрезка
Procedure Dlina (x1, y1, x2, y2: real ; var dl: real );
begin
dl:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end ;
Begin //основная программа
writeln( 'Введите координаты вершин треугольника' );
write( 'Точка A: ' ); readln(xa, ya);
write( 'Точка B: ' ); readln(xb, yb);
write( 'Точка C: ' ); readln(xc, yc);
Dlina(xa, ya, xb, yb, d); p:=d;
Dlina(xa, ya, xc, yc, d); p:=p+d;
Dlina(xc, yc, xb, yb, d); p:=p+d;
writeln( 'Периметр треугольника равен' , p: 8 : 2 );
End .
Задача 5б
Составить программу для вычисления периметра треугольника, заданного координатами своих вершин.
Длина отрезка AB по координатам его концов:
y B
B(x B, y B )
y A
A(x A, y A )
x B
x A
Функция для вычисления длины отрезка:
Function Dlina (x1, y1, x2, y2: real ): real ;
begin
Dlina:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end ;
Задача 5б
Составить программу для вычисления периметра треугольника, заданного координатами своих вершин.
Program Perimetr_Treug;
Var xa, ya, xb, yb, xc, yc, p: real ;
//функция вычисления длины отрезка
Function Dlina (x1, y1, x2, y2: real ): real ;
begin
Dlina:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end ;
Begin //основная программа
writeln( 'Введите координаты вершин треугольника' );
write( 'Точка A: ' ); readln(xa, ya);
write( 'Точка B: ' ); readln(xb, yb);
write( 'Точка C: ' ); readln(xc, yc);
p := Dlina(xa,ya,xb,yb) + Dlina(xa,ya,xc,yc) +
Dlina(xc,yc,xb,yb);
writeln( 'Периметр треугольника равен' , p: 8 : 2 );
End .
Задача 6
Составить программу для вычисления числа сочетаний из n по k .
В комбинаторике набор k элементов, выбранных из данного множества, содержащего n различных элементов, называется сочетанием из n по k . Значение этой величины вычисляется по формуле:
Program Sochetanie;
Var c, n, k: integer ;
Function F(x: integer ): integer ; //функция факториал
var i, p: integer ; //локальные переменные
begin
p:= 1 ;
for i:= 1 to x do p:=p*i;
F:=p //значение функции
end ;
Begin //основная программа
write ( 'Введите n (не больше 12): ' ); readln (n);
write ( 'Введите k (не больше 12): ' ); readln (k);
C := F(n) div F(k) div F(n-k);
writeln ( 'Число сочетаний из ' , n, ' по ' , k, ' равно ' , c)
End .