Программирование с использованием процедур
Общий вид процедуры следующий:
procedure f (var g1:t1; g2:t2; …);
Раздел описаний
Begin
Раздел операторов
End;
здесь f – имя процедуры; gi - формальные параметры (g1 – формальный параметр-переменная, записывается со служебным словом var; g2 – формальный параметр-значение); t - типы формальных параметров.
Особенности использования процедуры:
– процедура помещается в главной программе после раздела var и перед разделом begin основной программы;
– вызов процедуры: f (b1, b2, … ); здесь bi- фактические параметры;
– возврат из процедуры происходит на оператор, следующий за вызовом;
– формальные и фактические параметры должны соответствовать по количеству, порядку следования и типу;
– параметры–значения используются для передачи значений в подпрограмму (выполняют роль входных параметров процедуры). Они могут получать значения фактических параметров, но не могут передавать значения фактическим параметрам;
– параметры–переменные записываются со служебным словом var в заголовке процедуры. Параметры-переменные выполняют роль как входных, так и выходных параметров процедуры. Они могут получать значения фактических параметров, изменять их в процедуре и возвращать новые значения фактическим параметрам;
– тип массива, передаваемого в процедуру, должен быть описан в разделе type основной программы.
Пример 1. В символьном массиве А(10) заменить все * на : , а в массиве В(15) – все . на !.
Type
cm=array [1..15] of char;
Var
a, b: cm;
a1, a2, b1, b2 : char;
i: integer;
procedure Zam (var x:cm; n: integer; x1, x2: char);
Begin
WriteLn (‘Исходный массив’);
for i := 1 to n do
Write(x[i]);
WriteLn;
for i := 1 to n do
if x[i] = x1 then
x[i] := x2;
WriteLn (‘Новый массив’);
for i := 1 to n do
Write (x[i]);
WriteLn;
End;
{Основная программа}
Begin
WriteLn (‘Введите а(10)’);
for i := 1 to 10 do
ReadLn (a[i]);
WriteLn (‘Введите в(15)’);
for i := 1 to 15 do
ReadLn (b[i]);
Zam (a, 10, ‘*’, ‘:’);
Zam (b, 15, ‘.’, ‘!’);
ReadLn;
End.
Пример 2. Второй вариант первого примера. Ввод, вывод массивов, замену символов оформить как процедуры.
Type
cm =array [1..15] of char;
Var
a, b:cm;
a1, a2, b1, b2:char;
ka, kb, i:integer;
procedure Vvod (var x:cm, n:integer; im: char);
Begin
WriteLn (‘Введите массив’, im);
Write (‘Количество элементов’, n);
for i := 1 to n do
ReadLn (x[i]);
End;
procedure Vivod (x:cm; n:integer; im: char);
Begin
WriteLn (‘массив’,im);
for i := 1 to n do
Write (x[i],’_’);
WriteLn;
End;
procedure Zam (var x:cm; i: integer; x1, x2 :char);
Begin
for i := 1 to n do
if x[i] = x1 then
x[i] := x2;
End;
{Основная программа}
Begin
WriteLn (‘Введите количество элементов в массиве а=>’);
ReadLn (ka);
Vvod (a, ka, ‘a’);
Write (‘введите количество элементов в=>’);
ReadLn(kb);
Vvod (b, kb, ‘b’);
Vivod (a, ka, ‘a’);
Zam (a, ka, ‘*’, ‘:’);
Vivod (a, ka, ‘a’);
Vivod (b, kb, ‘b’);
Zam (b, kb, ‘.’, ‘!’);
Vivod (b, kb, ‘b’);
ReadLn;
End.
Пример 3. В символьных матрицах А(3,3) и D (4,4) определить номер строки и номер столбца, где больше всего *.
Type
cmatr=array [1..4, 1..4] of char;
Var
a, d: cmatr;
c: char;
i, j: integer; k, max : integer;
as, at, ds, dt: integer;
procedure Pz (b: cmatr; n: integer;c1: char; var bs, bt :
integer);
Begin
WriteLn (‘Матрица’,c1);
for i := 1 to n do
Begin
for j := 1 to n do
Write (b[i, j]);
WriteLn ;
end;
max := 0;
bs := 0;
for i := 1 to n do
Begin
k := 0;
for j := 1 to n do
if b[i, j] = ’*’ then k := k+1;
if max < k then max := k;
bt := j;
end;
End;
{Основная программа}
begin
WriteLn (‘Введите а(3, 3)’);
for i := 1 to 3 do
for j := 1 to 3 do
ReadLn (a[i, j]);
Pz (a, 3, ‘a’, as, at );
WriteLn (‘В матрице а строка =’as,’ столбец =’ at);
WriteLn (‘Введите d(4, 4)’);
for i := 1 to 4 do
for j := 1 to 4 do
ReadLn (d[i, j]);
Pz (d, 4, ‘d’, ds, dt);
WriteLn (‘в матрице d строка =’ds,’ столбец =’, dt);
End.
Дата добавления: 2017-01-29; просмотров: 554;