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:
|
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.