Vous êtes sur la page 1sur 15

5

ARRELOS BIDIMENSIONALES
5.1 Concepto General
Un arreglo bidimensional (Tabla o Matriz) es un arreglo con dos ndices, al igual
que los vectores deben ser ordinales o tipo subrango.
Para localizar o almacenar un valor en el arreglo se deben especificar dos
posiciones, uno por fila y otro para la columna.
La matriz es una estructura de datos bsica dentro de los lenguajes de
programacin y conceptualmente son idnticas a sus homnimas matemticas. Por
tanto una matriz es un conjunto de datos de un tamao definido que se encuentran
consecutivos en memoria y en la que es posible el acceso al elemento que deseemos
simplemente con indicar su posicin.

5.2 Declaracin de un Arreglo Bidimensional


La declaracin de una matriz es como sigue:
Turbo Pascal:
Identificador : array [1.. tamao1, 1..tamao2] of tipo_ dato;
Dnde:
tipo_de_dato: Es el tipo de datos que contendr la matriz. Hasta ahora slo se
conoce los tipos bsicos de datos. Posteriormente veremos como definir los tipos de
datos.estrctuturados
identificador: Es el nombre que se le da a la variable matriz y por el cual la
referenciaremos en nuestro programa.
[tamao] : Indica el nmero de elementos de tipo tipo_de_datos que contendr la
matriz identificador. Se define dos tamaos [tamao1][tamao2] la matriz ser
bidimensional.

Por tanto, para declarar una matriz de enteros bidimensional de tamao 3 x 4, se


debera escribir:
Turbo Pascal:

tabla: array [1..3,1..4] of Integer


y se representa:
1

344

34

646

-9

-89

-9

1258

Para acceder a una celda se realiza mediante dos ndices, uno para las filas y otro
para las columnas.
Se desea acceder a la posicin 1,2 se realiza de la siguiente
manera:
Turbo Pascal

Mat [1,2 ] := 20 ;

Nota: Es importante recordar que aunque se esta accediendo a la posicin 0,1 en el


cdigo de C para el usuario realmente se esta accediendo a la posicin 1,2
5.3 Operacin de lectura e impresin
En el siguiente ejemplo se llena e imprime una matriz con valores introducidos por
teclado y a continuacin se muestra por pantalla:
Cdigo de Turbo Pascal
PROGRAM diagonal;
USES
crt;
CONST
n=3;
VAR
i,j:integer;
ma: array [1..n,1..n] of integer;
BEGIN
clrscr;

writeln('Insertar valores en la Matriz');


FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,' ',j,']:');
readln(ma[i,j]);
END;
writeln;
writeln('Los valores de la matriz son:');
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln;
END;
END.

5.4 Operaciones con la diagonal principal y secundaria


Cuando se trabaja con una matriz siempre se estar realizando operaciones con la
diagonal principal y secundaria, a continuacin se presenta un conjunto de algoritmos
que permitir recorrer y manipular la diagonal principal y la diagonal secundaria
5.4.1 Mostrar diagonal principal
Cdigo en Turbo Pascal
writeln('La diagonal Principal es:');
FOR i:=1 TO n DO
{En la diagonal principal i y j, son iguales}
write(' ',ma[i,i]);
{entones se coloca el mismo ndice en la fila y}
{en la columna}
5.4.2 Mostrar diagonal Secundaria
Cdigo en Turbo Pascal
writeln ('La diagonal Secundaria es:');
j:=n+1;
{para recorrer la diagonal secundaria se debe }
FOR i:=1 TO n DO
{decrementar la columna por cada incremento de}
write(' ',ma[i,j-i]);
{la fila}

5.4.3 Mostrar valores por encima de la diagonal principal


Cdigo en Turbo Pascal
writeln('Valores por arriba de la diagonal Principal:');
FOR i:=1 TO n DO
{para poder mover por encima de la }
FOR j:=i TO n DO
{diagonal principal (incluyndola), basta con}
write(' ',ma[i,j]);
{inicializar j en el valor de la fila}

5.4.4 Mostrar valores por debajo de la diagonal principal


Cdigo en Turbo Pascal
writeln('Valores por debajo de la diagonal Principal:');
FOR i:=1 TO n DO
{en este caso es similar al anterior pero basta con}
FOR j:=i TO n DO
{intercambiar los ndices en la matriz ma[j,i]}
write(' ',ma[j,i]);

5.4.5 Mostrar Solo los valores por arriba de la diagonal Principal


Cdigo en Turbo Pascal
writeln('Solo los valores por arriba de la diagonal Principal:');
FOR i:=1 TO n DO
{en este caso no interesa imprimir}
FOR j:=i+1 TO n DO
{la diagonal principal, por j comienza en i+1}
write(' ',ma[i,j]);

5.4.6 Mostrar Solo los valores por debajo de la diagonal Principal


Cdigo en Turbo Pascal
writeln('Solo los valores por debajo de la diagonal Principal:');
FOR i:=1 TO n DO
{sobre caso no interesa imprimir la diagonal principal}
FOR j:=i+1 TO n DO
{se aplica igual que el ejemplo anterior pero,}
write(' ',ma[j,i]);
{intercambiando ndices en la matriz ma[j,i] }

5.4.7 Mostrar valores por arriba de la diagonal Secundaria


Cdigo en Turbo Pascal
writeln('Valores por arriba de la diagonal Secundaria:');
FOR i:=1 TO n DO
{se debe incrementar j hasta N en la fila 1, luego}
FOR j:=1 TO (n+1)-i DO
{en la fila 2 hasta n-1, fila 3 n-2 }
write(' ',ma[i,j]);
{y as sucesivamente }

5.4.8 Mostrar valores por debajo de la diagonal Secundaria


Cdigo en Turbo Pascal
writeln('Valores por debajo de la diagonal Secundaria:');
FOR i:=1 TO n DO
{en este caso se imprime lo que esta en la posicin n}
FOR j:=n-i+1 TO n DO {para la fila 1, luego en la fila 2 n, n-1. luego}
write(' ',ma[i,j]);
{en la fila 3 n, n-1, n-2. y as sucesivamente }

5.4.1 Ejercicios Resueltos.


1) Escribir un programa que permita mostrar las esquinas de una matriz
Este programa es muy sencillo, ya que las esquinas de una matriz siempre son cuatro
las esquinas superior izquierda - derecha, y las esquina inferior izquierda - derecha
Ejercicio 1.
Cdigo en Turbo Pascal
{ Indicar los valores de las esquinas}
PROGRAM ejer1;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln;
writeln;
writeln('Los valores de las esquinas son:');
writeln;
writeln('La Esquina superior izquierda es: ',ma[1,1]);
writeln('La Esquina superior derecha es: ',ma[1,n]);
writeln('La Esquina inferior izquierda es: ',ma[n,1]);
writeln('La Esquina inferior derecha es: ',ma[n,n]);
readkey
END.

2) Escribir un programa que permita calcular el porcentaje de


apariciones del valor mximo de una matriz.
En este problema lo primero que se debe hacer es conseguir el mximo, y
posteriormente, en otro ciclo comparar cuantas veces aparece el mximo en la matriz,
para despus calcular el porcentaje.
Ejercicio 2.
Cdigo en Turbo Pascal
{ calcular el porcentaje de apariciones del valor mximo}
PROGRAM ejer2;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,cont,max: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln
END;
max:=ma[1,1];
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
if (max < ma[i,j])then
max:=ma[i,j]

END;
cont:=0;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
if (max = ma[i,j])then
cont:=cont+1
END;
writeln('El porcentaje de apariciones del maximo es: ',cont*100 div(n*n), '%');
readkey;
END.

3) Escribir un programa que permita indicar la posicin del


mximo.

valor

En este caso no se debe buscar el mximo solamente; sino tambin identificar sus
posiciones (fila y columna). Se asume que solamente existe un nico mximo
Ejercicio 3.
Cdigo en Turbo Pascal
{ Indicar en que posiciones esta el mximo valor}
PROGRAM ejer3;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,cont,max,sum: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN

FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln
END;
max:=ma[1,1];
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
if (max < ma[i,j])then
max:=ma[i,j];
END;
writeln;
writeln('El maximo esta en las siguientes posiciones...');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
if (max = ma[i,j])then
writeln('[',i,']','[',j,']');
readkey;
END.

4) Dado N valores escribir un programa que muestre la cantidad de


apariciones del digito 2.
Es importante acotar que un mismo nmero puede tener varios dgitos 2, atendiendo
esto, explicamos se explica con un ejemplo.
Ejemplo: 123, 22234, 345, -4532 y 1212
Se puede observar que son 5 nmeros pero si se observa la cantidad de dgitos 2 hay
un total de 7
Ejercicio 4.
Cdigo en Turbo Pascal
{Indicar cuantas veces aparece el digito 2 en la matriz}
PROGRAM ejer4;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,cont,aux,d: integer;
BEGIN
clrscr;

writeln('Insertar valores de la Matriz:');


writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln
END;
cont:=0;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
BEGIN
aux:=ma[i,j];
WHILE(aux<>0)DO
BEGIN
d:=aux mod 10;
aux:=aux div 10;
IF(d=2) or (d=-2)THEN
cont:=cont+1
END
END
END;
writeln('El digito 2 aparece ',cont,' veces');
readkey;
END.

5) Escribir un programa que calcule el porcentaje de nmeros primos


existentes en la matriz.
Este programa tiene las mismas caractersticas de buscar un valor mximo o mnimo,
pero reemplazamos la bsqueda directa, por un ciclo que permite identificar si un
nmero es primo o no.
Ejercicio 5.
Cdigo en Turbo Pascal

{Calcular el porcentaje de apariciones nmeros primos}


PROGRAM ejer5;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,cont,aux: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln
END;
cont:=0;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
BEGIN
if ma[i,j]=1 then
cont:=cont+1
else
BEGIN
aux:=ma[i,j] div 2;
WHILE aux>1 DO
BEGIN
if(ma[i,j] mod aux) = 0 then
aux:=1;
aux:=aux-1
END;
if aux=1 then
cont:=cont+1
END

END
END;
writeln('El porcentaje de apariciones numeros primos es: ',cont*100 div(n*n), '%');
readkey;
END.

6) Escribir un programa que sume los elementos de la diagonal principal


de una matriz.
Cuando se trabaja con la diagonal principal, se puede notar que la posicin de as filas
y columnas son iguales, por lo tanto basta con un solo ciclo para recorrer
diagonalmente la matriz.
Ejercicio 6.
Cdigo en Turbo Pascal
{ Indicar la suma de la Diagonal principal}
PROGRAM ejer6;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,sum: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);
writeln
END;
sum:=0;

FOR i:=1 TO n DO
sum:=sum+ma[i][i];
writeln;
writeln('La suma de la diagonal principal es: ',sum);
readkey;
END.

7) Escribir un programa que imprima las posiciones del valor menor


Es importante acotar que puede existir el menor varias veces, por lo tanto primero se
busca el menor y luego en otro ciclo se verifica posicin por posicin, para
verificar donde coincide el valor con el menor para imprimir sus posiciones
(fila y columna)
Ejercicio 7.
Cdigo en Turbo Pascal
{Imprimir las posiciones donde esta el valor menor}
PROGRAM ejer7;
USES
crt;
CONST
n = 3;
VAR
ma : array [1..n,1..n] of integer;
i,j,min: integer;
BEGIN
clrscr;
writeln('Insertar valores de la Matriz:');
writeln;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
BEGIN
write('[',i,'][',j, ']: ');
readln(ma[i,j])
END;
writeln;
writeln('La Matriz es:');
writeln;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
write(' ',ma[i,j]);

writeln
END;
min:=ma[1,1];
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
if (ma[i,j]<min)then
min:=ma[i][j]
END;
writeln('El minimo esta en las siguientes posiciones:');
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO n DO
if (ma[i][j]=min)then
writeln('[',i,']','[',j,']')
END;
readln;
END.

Ejercicios Propuestos
Notas Aclaratorias:

a. En los siguientes enunciados cuando se diga Leer una matriz mxn


entera significa leer mxn datos enteros y almacenarlos en m filas y n
columnas para cualquier valor positivo de m y de n.
b. Cuando el enunciado diga Posicin Exacta se refiere a la fila y a la
columna del dato especificado.
1.-Leer una matriz 4x4 entera y determinar en qu fila y en qu columna se encuentra el
nmero mayor.
2.- Leer una matriz 4x4 entera y determinar cuntas veces se repita en ella el nmero
mayor.
3.- Leer una matriz 3x4 entera y determinar en qu posiciones exactas se encuentran los
nmeros pares.
4.- Leer una matriz 4x3 entera y determinar en qu posiciones exactas se encuentran los
nmeros primos.
5.- Leer una matriz 4x3 entera, calcular la suma de los elementos de cada fila y
determinar cul es la fila que tiene la mayor suma.
6.- Leer una matriz 4x4 entera y calcular el promedio de los nmeros mayores de cada
fila.
7.- Leer una matriz 4x4 entera y determinar en qu posiciones estn los enteros
terminados en 0.
8.- Leer una matriz 4x4 entera y determinar cuntos enteros terminados en 0 hay
almacenados en ella.
9.- Leer una matriz 3x4 entera y determinar cuntos de los nmeros almacenados son
primos y terminan en 3.
10.- Leer una matriz 5x3 entera y determinar en qu fila est el mayor nmero primo.
11.- Leer una matriz 5x3 entera y determinar en qu columna est el menor nmero par.
12.- Leer una matriz 5x5 entera y determinar qu fila est el mayor nmero terminado
en 6.
13.- Leer una matriz 5x3 entera y determinar en qu columna est el mayor nmero que
comienza con el dgito 4.
14.- Leer una matriz 5x5 entera y determinar cuntos nmeros almacenados en ella
tienen mas de 3 dgitos.
15.- Leer una matriz 5x4 entera y determinar cuntos nmeros almacenados en ella
terminan en 34.
16.- Leer una matriz 5x4 entera y determinar cuntos nmeros almacenados en ella
tienen un solo dgito.
17.- Leer una matriz 5x4 entera y determinar cuntos mltiplos de 5 hay almacenados
en ella.
18.- Leer una matriz 5x5 entera y determinar en qu posicin exacta se encuentra el
mayor mltiplo de 8.

Vous aimerez peut-être aussi