Un error muy común es acceder a una zona donde apunta un puntero indefinido porque:
- No tiene permiso
- no sabemos lo que hay
- no sabemos interpretarlo
- podemos dañar una zona importante del programa o sistema operativo
Programas, manuales y ejemplos en pascal. Página dedicada a la programación en pascal. Aprende a programar en pascal y los conceptos básicos de la programación estructurada. Los programas de esta web están diseñados para Pascal estándar ampliado ISO 10206.
Ejemplo de registro o record en pascal:Un registro puede tener varias variantes con un campo discriminante siempre presente, el cual elige una variante o otra según se indique. En el caso de ser boolean se elige la que sea true.
type
tFecha = record
dia: 1..31;
mes: 1..12;
año: 1..2100;
end;
begindWRITE: Escribe en el fichero seleccionado
v:= fichero^;
get(fichero)
end;
type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;
tRango = record
f,c: tDimension value 1;
end;
tpMatriz = ^eMatriz;
procedure EscribirMatriz(var m: tpMatriz);
var filas,col : integer;
begin
for filas := 1 to m^.f do begin
for col := 1 to m^.c do
write(m^[filas,col]:7:2);
writeln(resultado);
writeln(resultado)
end;
end;
type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;
tRango = record
f,c: tDimension value 1;
end;
tpMatriz = ^eMatriz;
procedure MatrizInversa(m: tpMatriz; var resul: tpMatriz);
var i,j,i2,j2: integer;
adjunta: tpMatriz;
deter: real;
begin
deter:= Determinante(m);
if(deter <> 0) then begin
{Crea la matriz Adjunta}
new (adjunta, m^.c -1, m^.f -1);
for i:=1 to m^.f do
for j:=1 to m^.c do
begin
AdjuntoMatriz(m,i,j,adjunta);
resul^[i,j] := Determinante(adjunta);
end;
MatrizTraspuesta(resul);
{ dividir determinante }
for i2:=1 to m^.f do
for j2:=1 to m^.c do
resul^[i2,j2]:= resul^[i2,j2] / deter;
end;
end;
Dado la declaración en la sección de tipos:
type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;
tpMatriz = ^eMatriz;
Y las variables:
var
pM1, pM2, pResul: tpMatriz;
procedure MatrizTraspuesta(var resul: tpMatriz);
var i,j,i2,j2: integer;
mAux:tpMatriz; {Matriz axuliar}
begin
{Crear matriz m copia de resul}
new (mAux, resul^.f, resul^.c);
for i2:= 1 to mAux^.f do
for j2:=1 to mAux^.c do
mAux^[i2,j2] := resul^[i2,j2];
{ copia de la matriz resul }
for i:= 1 to mAux^.f do
for j:=1 to mAux^.c do
resul^[i,j] := mAux^[j,i];
end;
Dada la matriz
la matriz adjunta del elemento a11 es la matriz que resultante de suprimir la fila 1 y columna 1 en la matriz A, es decir:
Llamamos menor complementario del elemento aij al determinante de la matriz complementaria del elemento aij , y se representa por aij
Se llama adjunto de aij , y se representa por por Aij, al número (–1)i+jaij.
El determinante de una matriz cuadrada es igual a la suma de los elementos de una fila o columna cualquiera, multiplicados por sus adjuntos.
Por ejemplo, si desarrollamos un determinante de orden n por los adjuntos de la 1ª fila se tiene:
Dado la declaración en la sección de tipos:
type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;
tpMatriz = ^eMatriz;
Y las variables:
var
pM1, pM2, pResul: tpMatriz;
El procedimiento AdjuntoMatriz devuelve la matriz adjunta a la fila (f)
y columna (c) indicadas.
procedure AdjuntoMatriz(m: tpMatriz; f,c: integer; var resul: tpMatriz);
var i,j,i2,j2: integer value 0;
begin
i2 := 0;
for i:= 1 to m^.f do begin
if (i <> f) then begin {Comprobar si la fila no es la que se va a elminar}
i2 := i2 +1;
for j:= 1 to m^.c do
if (j <> c) then begin {Comprobar si la columna no es la que se va a eliminar}
j2 := j2 +1;
resul^[i2,j2] := m^[i,j] * (-1) pow(i+j);
end;
end;
j2:= 0;
end;
end;
La función determinante calcula el determinante de la matriz de forma
recursiva y por adjuntos.
function Determinante(m: tpMatriz):real;
var
j:integer value 0;
det:real;
m2: tpMatriz;
begin
new(m2,m^.f -1,m^.c -1);
if m^.c = 2 then
{ Determinante de dos por dos, caso base de la recursividad }
Determinante := m^[1,1] * m^[2,2] - m^[1,2] * m^[2,1]
else
begin
det:= 0;
for j:= 1 to m^.c do
begin
{Calcula los adjuntos de la fila 1. LLama al procedimiento Adjunto
Matriz que devuelve la matriz adjunta a la fila primera y a la columna j}
AdjuntoMatriz(m,1,j,m2);
{LLamada recursiva de la funcion Determinante}
det:= det + m^[1,j] * Determinante(m2);
end;
Determinante:= det;
end;
end;