Arrays multidimensionales en Pascal

Turbo Pascal no limita el número de dimensiones de un array, pero sí que debe estar declarado el tipo de cada subíndice.

Formato:

  1. identificador = array [índice1] of array [índice 2]..
    of array [índice n] of tipo de elemento
  2. identificador = array [índice 1, índice 2,,índice n] of tipo de elemento

Ampliando el ejemplo anterior supongase que ahora deseamos capturar calificaciones para 3 materias en cuyo caso aplicaremos un array tridimensional. De la siguiente forma:

(nombre,examen,materia)

Ejemplo:

ProgramTridimensional;
 {El siguiente programa captura calificaciones
 de 5 alumnos en 3 examenes de 3 materias  distintas, y despliega en pantalla los promedios ordenados en forma descendente }
UsesCrt;
ConstMaxAlumno  = 5;
  MaxExamen  = 4; {Columna 4 almacena el promedio}MaxMateria = 3;
  materia    : array[1..3]of string[8]=('Fisica','Ingles','Historia');
VarAlumno     : array [1..MaxAlumno] of string[10];
  examen     : array [1..MaxAlumno,1..MaxExamen,1..MaxMateria] ofreal;
 aux_examen : array [1..MaxExamen]ofreal;
  {reserva 60 posiciones de memoria de datos reales :
   5 filas por 4 columnas y 3 dimensiones} promedio   :real;
  aux_alumno :string [10];
  i,j,k,col,ren : byte;
beginClrScr;
  {lectura de arrays paralelos de manera simultánea}for k:=1 to MaxMateriadobegin ClrScr;
      gotoxy(34,3);Write(materia[k]);
      gotoxy(5,5);Write('Nombre');
      gotoxy(20,5);Write('Examen1 Examen2 Examen3 Promedio');
      col:=5;ren:=6;
      fori:=1toMaxAlumnodobegingotoxy(col,ren);
          ifk=1then ReadLn(alumno[i]) {lectura de vector} elseWrite(alumno[i]);
          col:=22;promedio:=0;
          forj:=1to MaxExamen-1do begin gotoxy(col,ren);
              ReadLn(examen[i,j,k]); {lectura de matríz}promedio:=promedio+examen[i,j,k];
              col:=col+10end;
          examen[i,j+1,k]:=promedio/3;
          gotoxy(col,ren);Write(promedio/3:3:2);
          inc(ren);
          col:=5 end;
      gotoxy(15,22);
      Write('Presione una tecla para continuar....');
      ReadKeyend;
  {ordenación}fork:=1to MaxMateria dofor i:=1toMaxAlumno-1do forj:=i+1toMaxAlumnodo beginifexamen[i,MaxExamen,k]<examen[j,MaxExamen,k] then  begin {intercambio de nombres en vector}aux_alumno:=alumno[i];
              alumno[i] :=alumno[j];
              alumno[j] :=aux_alumno;
              {intercambio de calificaciones en matríz} move(examen[i,k],aux_examen,SizeOf(aux_examen));
              move(examen[j,k],examen[i,k],SizeOf(aux_examen));
              move(aux_examen,examen[j,k],SizeOf(aux_examen))
            end end;
  {recorrido de matríz y vector}for k:=1toMaxMateriadobeginClrScr;
      gotoxy(35,4);Write(materia[k]);
      gotoxy(25,5);Write('Datos ordenados');
      gotoxy(5,6);Write('Nombre');
      gotoxy(20,6);Write('Examen1 Examen2 Examen3 Promedio');
      col:=5;ren:=7;
      fori:=1to MaxAlumnodo begingotoxy(col,ren);
          Write(alumno[i]);
          col:=22;
          forj:=1 toMaxExamendo begingotoxy(col,ren);
              Write(examen[i,j,k]:3:2);
              col:=col+10end;
          col:=5;
          inc(ren)
        end;
      gotoxy(15,22);
      Write('Presione una tecla para continuar....');
      readkeyendend.