Invocación al procedimiento en Pascal
Para invocar a un procedimiento, la sintaxis es:
<nombre_de_procedimiento> (parámetros_actuales) ; |
donde la existencia de parámetros_actuales dependerá de que en la declaración del procedimiento se hayan utilizado parámetros formales.
Para ejemplificar el uso de procedimientos, diseñaremos un programa que resuelva el problema de SUMAR Y MULTIPLICAR MATRICES.
PSEUDOCODIGO
{PROGRAMA PARA SUMAR Y MULTIPLICAR MATRICES} INICIO IMPRIME encabezado. LEE las dimensiones de las matrices A y B. SI las matrices no son compatibles para la suma, ENTONCES IMPRIME mensaje_1. SI las matrices no son compatibles para la mult., ENTONCES IMPRIME mensaje_2. SI son compatibles para la suma o para la mult. , ENTONCES INICIO LEE las matrices A y B. IMPRIME las matrices A y B. SI son compatibles para la suma, ENTONCES INICIO SUMA las matrices A y B. IMPRIMEla matriz resultado C. FIN SI son compatibles para la multiplicacion, ENTONCES INICIO MULTIPLICA las matrices A y B. IMPRIME la matriz resultado D. FIN FIN FIN.
CODIFICACION:
Program Opera_matrices;{Programa para sumar y multiplicar matrices de orden hasta de dim_max por dim_max } UsesCrt;Constdim_max = 10; Typemat = array [1..dim_max , 1..dim_max] ofreal; Varmat_a,mat_b,mat_c : mat; bandera_suma,bandera_mult:boolean; ren_a,ren_b,col_a,col_b :integer;
procedureinicio; Var contador : integer; beginClrScr; gotoxy(23,2); WriteLn('SUMA Y MULTIPLICACION DE MATRICES'); for contador := 1to 80doWrite('='); WriteLnend;
{Lee las dimensiones de las matrices}
procedure dim; begin WriteLn('DIMENSIONES DE LA MATRIZ A'); WriteLn; Write('Número de renglones ==> '); ReadLn(ren_a); Write('Numero de columnas ==> '); ReadLn(col_a); WriteLn; WriteLn; WriteLn('DIMENSIONES DE LA MATRIZ B'); WriteLn; Write('Número de renglones ==> '); ReadLn(ren_b); Write('Número de columnas ==> '); ReadLn(col_b) end;
{Verifica la compatibilidad para la suma}
procedurecompat_suma(ren_f_a,ren_f_b,col_f_a,col_f_b:integer; Varbandera_f:boolean); beginif ((ren_f_a <> ren_f_b) or (col_f_a <> col_f_b)) thenbeginWriteLn; WriteLn('Las matrices A y B son incompatibles para la suma'); bandera_f :=falseend elsebandera_f :=true end;
{Verifica la compatibilidad para la multiplicación}
procedurecompat_mult(ren_f_a,ren_f_b,col_f_a,col_f_b:integer; Varbandera_f:boolean); begin ifcol_f_a <> ren_f_bthenbeginWriteLn; WriteLn('Las matrices A y B son icompatibles para la multiplicación'); bandera_f := false endelsebandera_f := trueend;
{Lee una matriz}
procedurelee(nmat:char;Varmat_f:mat;ren_max,col_max:integer); Varren,col : integer; beginWriteLn; WriteLn('ELEMENTOS DE LA MATRIZ : ',nmat); WriteLn; forren := 1toren_maxdoforcol := 1tocol_maxdobeginWrite('Elemento [ ',ren,',',col,'] = '); ReadLn(mat_f[ren,col]) endend;
{Suma dos matrices}
proceduresuma( mat_f_a,mat_f_b:mat;Varmat_f_c:mat; ren_f, col_f :integer); Varren,col : integer; beginWriteLn; WriteLn('La suma de A y B es :'); forren := 1toren_fdoforcol := 1tocol_fdomat_f_c[ren,col] := mat_f_a[ren,col] + mat_f_b[ren,col] end;
{Multiplica dos matrices}
procedure multiplica( mat_f_a, mat_f_b: mat ;Varmat_f_c : mat ; ren_f_a, col_f_a, col_f_b :integer); Varren, acol, bcol : integer ; acum : real ; beginWriteLn; WriteLn('El producto de A y B es :'); forren := 1toren_f_adoforbcol := 1tocol_f_bdobegin acum := 0.0 ; foracol := 1tocol_f_adoacum := acum + mat_f_a[ren,acol] * mat_f_b[acol,bcol]; mat_f_c[ren,bcol] := acum endend;
{Imprime una matriz}
procedureimprime(nmat : char ; mat_f : mat ; ren_f, col_f : integer) ; Varren, col : integer; beginWriteLn; WriteLn('MATRIZ ',nmat); for ren := 1toren_fdoforcol := 1tocol_f dobeginWrite(mat_f[ren,col]:6:1,' '); WriteLnend; WriteLn; Write('Oprima una tecla para continuar..... '); ReadKey; WriteLnend;
{Módulo Principal}
begininicio; dim; compat_suma(ren_a,ren_b,col_a,col_b,bandera_suma); compat_mult(ren_a,ren_b,col_a,col_b,bandera_mult); ifbandera_sumaorbandera_mult then beginlee('A',mat_a,ren_a,col_a); lee('B',mat_b,ren_b,col_b); imprime('A',mat_a,ren_a,col_a); imprime('B',mat_b,ren_b,col_b); if bandera_suma thenbeginsuma(mat_a,mat_b,mat_c,ren_a,col_a); imprime('C',mat_c,ren_a,col_b) end; ifbandera_mult then beginmultiplica(mat_a,mat_b,mat_c,ren_a,col_a,col_b); imprime('D', mat_c, ren_a, col_b) endendend.
Observe que el MÓDULO PRINCIPAL está formado por un bloque de instrucciones que invocan a procedimientos.