1.10 Arrays bidimensionales
Sesión Prevista para el 16 Enero 2009

 

1.10.1 Escribir un programa en Pascal que utilice un procedimiento para escribir en pantalla el contenido de una matriz bidimensional (el array bidimensional es estático y constante) .
Copiar y pegar el siguiente programa en Free Pascal. Completarlo para que se muestre en pantalla el contenido del array bidimensional estático declarado como una constante.

Program Escribe_Matriz_Constante;
Type matriz=array [1..3,1..4] of integer; (*Matriz de 3 fils x 4 cols*)
Const a:matriz= (
(2,4,6,8),
                  (3,6,9,12),
                  (4,8,12,16));

 

Procedure EscribeMatriz(m:matriz;nfils,ncols:integer);
(*escribe en pantalla una matriz de nfils filas y ncols columnas*)
Var i,j:integer;


Begin
for i:=1 to nfils do

begin

for j:=1 to ncols do
  Write(m[i,j]:3,' ');
Writeln;

end(*for i*)


End;

begin

(*sentencia para escribir la matriz en pantalla *)

end.

 
Escribir en pantalla el contenido de un array estático, definido como una constante, utilizando un procedimiento.
   

 

1.10.2 Hacer el ejercicio anterior, definiendo el array estático como una variable.
1.10.3 Escribir un programa en Pascal que utilice un procedimiento para escribir el contenido de un array bidimensional dinámico en pantalla.
Copiar y pegar este programa en Free Pascal y completarlo siguiendo las instrucciones que aparecen en los comentarios del programa principal

Program Escribe_Matriz_Dinamica;

Type matriz=array of array of integer; (*Matriz dinámica*)

Var a:matriz;
    i,j:integer;


Procedure EscribeMatriz(m:matriz);
(*escribe en pantalla una matriz dinámica, no es necesario conocer sus límites*)

Var i,j:integer;

Begin

for i:=low(m) to high(m) do

begin

for j:=low(m[0]) to high(m[0]) do
  Write(m[i,j]:3,' ');

Writeln;

end(*for i*)

End;

begin
(*dimensionar la matriz dinámica a 3 filas y 4 columnas*)
(*inicializar la matriz con los valores

(2,4,6,8)
(3,6,9,12)
(4,8,12,16)

*)

(*escribir la matriz en pantalla*)

end.

Observar que, a diferencia del ejemplo del array estático, el tamaño de un array bidimensional no se conoce a priori (antes del programa principal), además, antes de utilizarlo debe ser inicializado convenientemente.

Observar:

  • Un array dinámico tiene que dimensionarse (hay que asignarle un tamaño) en el programa y no en la sección de declaración de variables(y esto siempre antes de ser utilizado en el programa).
  • Para hacer referencia a sus índices inferior y superior se utilizan las funciones low y high
  • Dado un array bidimensional a:
    • low(a), high(a) hacen referencia al límite inferior y superior (respectivamente) de las filas del array
    • low(a[0]), high)(a[0]) hacen referencia al límite inferior y superior de las columnas del array
Modificar este programa de tal forma que la inicialización de la matriz se haga a través de un procedimiento que tenga un único parámetro que sea utilizado a la vez como entrada y salida.
   

 

1.10.4 Leer el contenido de un fichero de texto (el fichero debe crearse, con el Bloc de Notas por ejemplo y hacer que contenga varios valores reales en cada línea , la misma cantidad en cada línea, por ejemplo, 5 valores) y almacenarlo en un array dinámico bidimensional , escribiendo su contenido en pantalla

Resolver este ejercicio de varias formas distintas:

  1. En primer lugar, considerar conocido (como una constante) el número de líneas del fichero de texto (e.d. la cantidad de filas) y el número de valores por fila (e.d. el número de columnas). Se recomienda hacer dos versiones de este programa: una de ellas utilizando la sentencia readln para leer todos los valores de una fila y la otra versión utilizando la sentencia read en un bucle para realizar la misma tarea.
  2. A continuación, hacer el programa para que acepte ficheros de cualquier tamaño (Nota: es necesario conocer en el programa el número de líneas del fichero).