Vous êtes sur la page 1sur 46

Arreglo: Es una coleccin de datos del mismo tipo.

Sirve para manejar un


nmero n de elementos en comn, ya sea de tipos definidos por el
Lenguaje,(int,float,String,etc) as como aquellos definidos por el
programador.

Un arreglo unidimensional es un tipo de datos estructurado que est


formado de una coleccin finita y ordenada de datos del mismo tipo. Es la
estructura natural para modelar listas de elementos iguales. El tipo de
acceso a los arreglos unidimensionales es el acceso directo, es decir,
podemos acceder a cualquier elemento del arreglo sin tener que consultar a
elementos anteriores o posteriores, esto mediante el uso de un ndice para
cada elemento del arreglo que nos da su posicin relativa.
Un arreglo unidimensional tiene una sola dimensin, Tambin reciben el
nombre de vectores en lgebra .
Un arreglo se caracterza por :
1. Almacenar los elementos del arreglo en posiciones de memoria contnua.
2. Tener un nico nombre de variable que representa a todos los elementos,
y stos a su vez se diferencian por un ndice o subndice.
3. Acceso directo o aleatorio a los elementos individuales del arreglo.
veamos como se agruparan estos 3 elementos en un solo arreglo:
private int []x = new int[3];
private int[]x = {1,2,3};
En la primera lnea, hemos creado un arreglo vaco de 3 elementos;
mientras que en la segunda, creamos un arreglo de 3 elementos
inicializados.

SINTAXIS
Declaracin:
[ ] < identificador > ;
Creacin:
< identificador > = new [ tamao ] ;

EJEMPLO.
public class arreglo_c7b3r{
// Atributos de la clase arreglo_c7b3r

private String datos[];


public arreglo_c7b3r(int elemento,String datos[]){

this.datos=datos;
}
// Metodos
//Metodo que muestra los datos
public String getdatos(){
String llenar=""; // Variable que acumulara los datos
for(int i=1;i llenar=llenar+"\n"+datos[i];
}
return ("Los datos son:" +llenar);
}
}

Subndice:
El valor de cada elemento de un array (, vector o matriz) est asignado a un
nombre de la variable y a un subndice. El primer elemento del array tiene el
subndice 0, el subndice 1 es el elemento que sigue al elemento 0 en la
horizontal; y as hasta el final de la primera fila y progresivamente para las
siguientes filas.
ej.: El siguiente array
A0,0

A1,0

A0,1

A1,1

se salva como A0,0,A1,0,A0,1,A1,1.

IDL permite llamar a uno o ms elementos del array utilizando una lista de
subndices. La sintaxis de una referencia de subndice es:
nombre_de_variable(Lista_de_subndices)
o
expresin(Lista_de_subndices)
ej.: array1=[3,2,6,3,8,3,8,4]
print,array1(2)
da
6
array2=[[1,2],[-1,5]]
print,array2(0,1)
da
-1
Para llamar a ms de un elemento de un array, hay que utilizar una lista
de nmeros enteros que se pueden guardar en otro array.
ej.: array3=findgen(21)+1
sub=[0,2,4,6]
print,array3(sub)
da
1357
Se puede llamar tambin a un rango de subndices; la secuencia de
llamada es:
Array(sb1:sb2)

sb1 es el principio del subndice y sb2 el ultimo. Se usa ''*'' para llamar todos
los elementos o los que son despus sb1.
ej.: print,array3(14:16)
da
14 15 16
print,array3(19:*)
da
19 20 21
array4=findgen(5,6)
print,array4(1:2,3:5)

unidad 5 Arreglos.
5.1 INICIALIZACIN Y GENERACIN DE ARREGLOS

En Matlab todos las variables son arreglos. Incluso un valor escalar es un arreglo de 1x1 dimensin. Ejem
Denir una variable simple con un valor:
> >a = 2
a=
2

Para denir arreglos (vectores y matrices) se usa los parntesis corchete para especicar los valores dentr
un espacio adems separa las columnas. Por ejemplo:
> >x = [1; 2; 3]
x=1
2
3
> >A = [1 2 3; 4 5 6; 7 8 9]

123

Arreglo es la palabra que se usar en adelante para referirse a cualquier composicin de nmeros, es deci
mayor dimensin.
44 5 6
789

Un comando til para ver todas las variables denidas es whos, que despliega lnea por lnea las variables
Las operaciones bsicas de suma y multiplicacin sobre arreglos se usan de la siguiente forma:
> >A = [1 2 3;4 5 6;7 8 9];
> >B = [1 1 1;2 2 2;3 3 3];
> >C = [1 2;3 4;5 6];
> >A + B

Notar por ejemplo que A + C no tiene sentido por que las dimensiones de las matrices no coinciden, Matl
tambin es posible:
> >A * C

5.2 ARREGLOS MULTIDIMENSIONALES


En Matlab, los arreglos multidimensionales son arreglos o matrices que tienen ms de dos subndices.
Pueden ser creados utilizando las funciones zeros, ones, rand o randn utilizando ms de dos argumentos.
Por ejemplo el comando R = randn(3,4,5); crea un arreglo de 3 4 5, con un total de 60 elementos con

Un arreglo tridimensional puede representar datos fsicos en tres dimensiones, por ejemplo, la temperatur
rectangular. Tambin puede representar una secuencia de matrices, A (k), o muestras de una matriz depen
de la kesima matriz, o la kesima matriz, se denota por A(i,j,k).

Muchas matrices mgicas pueden ser generadas intercambiando columnas. El comando p = perms(1:4) g
permutacin es el rengln p(k,:). Entonces
A = magic(4);

M = zeros(4,4,24);
for k = 1:24
M(:,:,k) = A(:,p(k,:));
end

almacena la secuencia de 24 matrices mgicas en un arreglo tridimensional M. Las dimensiones de M son


22, utilizamos M(:,:,22).
Arreglos de Celdas

En Matlab, los arreglos de celdas son arreglos multidimensionales cuyos elementos son copias de otros ar
ser creado con la funcin cell. Normalmente los arreglos de celdas son creados al agrupar una coleccin v
tambin son utilizadas con subndices para acceder al contenido de las celdas. Por ejemplo, el comando

C = {A sum(A) prod(prod(A))} produce una arreglo de celdas de 1 3. Estas tres celdas contienen la ma
el producto de todos sus elementos.
Cuando
C es desplegado se ve asi:
C=
[4x4 double] [1x4 double] [20922789888000]

Esto se debe a que las primeras dos celdas son muy grandes para ser desplegadas en la pantalla, pero la te
aspectos importantes para recordar. El primero, para tener acceso al contenido de una celda, se deben util
matriz A y C{3} es 16!. Segundo, los arreglos de celdas contienen copias de otros arreglos, no son apunta
nada le sucede a C. Los arreglos tridimensionales sirven para almacenar una secuencia de matrices de las
utilizado para almacenar un arreglo de matrices de dimensiones diferentes. Por ejemplo
M = cell(8,1);
for n = 1:8
M{n} = magic(n);
end
M

produce la secuencia de matrices mgicas de orden diferente:


M=
[]
[ 2x2 double]
[ 3x3 double]
[ 4x4 double]
[ 5x5 double]
[ 6x6 double]
[ 7x7 double]
[ 8x8 double]

5.3 ARREGLOS DE CARACTERES

Para escribir texto en Matlab se utilizan comillas sencillas. Por ejemplo, s = 'Hello'. El resultado no es un
ahora se ha usado. Se trata de una arreglo de caracteres de 1 5. Internamente en Matlab, los caracteres s
otante. Para convertir los caracteres a punto otante se utiliza el comando a = double(s).
El resultado corresponde al cdigo ASCII de cada caracter:
a=
72 101 108 108 111

el comando s = char(a) regresa los valores a texto. Para concatenar variables de texto se utilizan los corch
secuencias de caracteres para producir
h=
Hello world
El enunciado v = [s; 'world'] une las dos secuencias de caracteres verticalmente para producir
v=

Hello
world

Es importante resaltar que para h fue necesario insertar el espacio para separar las dos palabras y que en v
arreglos con diferente nmero de caracteres, es necesario rellenar con espacios o utilizar un arreglo de ce

Las estructuras son arreglos multidimensionales de Matlab cuyos elementos pueden ser accesados por
campos de texto. Por ejemplo,
S.name = \'antonio Gonzalez';
S.score = 53.5;
S.grade = '5'
crea una estructura escalar con tres campos:
S=
name: \'antonio Gonzalez'
score: 53.5
grade: '5'

Como todo lo dems en Matlab, las estructuras son arreglos, de tal forma que es posible insertar elemento
una estructura con varios campos. Los campos pueden ser agragados uno a la vez
S(2).name = Luis M. Martinez;
S(2).score = 84.3;
S(2).grade = 8;
o bien, puede ser agregado todo el elemento en un slo comando

S(3) = struct('name','Bernard van der Mersch','score',94.9,'grade',9);


Ahora la estructura es lo sucientemente larga para que Matlab no pueda desplegarla completa
S =1x3
name
score
grade

Existen varias formas para acceder a la informacin en el arreglo. Todas se basan en la notacin conocida
comando S. score es lo mismo que el comando S(1).score, S(2).score, S(3).score. Esta ltima es CSV.
Para obtener la transpuesta conjugada (o transpuesta simplemente para matrices
con valores reales) de una matriz se usa el operador :
> >A
5.4 UTILIZACIN DE ARREGLOS
Asignacin de valores y subndices:

Los vectores y matrices en MATLAB se trabajan igual en cuanto a asignacin, por eso se explican juntos
separadas bajo los encabezados correspondientes.
Asignacin:

La asignacin de variables en MATLAB es sencilla, y los vectores y matrices no son la excepcin. Cuand
realizar directamente de la siguiente forma:
A=[1 2 3 4; 5 6 7 8;9 0 1 2];
A=[1, 2, 3, 4;5, 6, 7, 8;9, 0, 1, 2];
donde la matriz escrita arriba es:
1

Las filas se separan por punto y coma y las columnas por espacios o comas. De lo anterior se ve fcilmen
v=[1 2 3];
v=[1, 2, 3];
Y un vector columna se asigna as:
v=[1; 2; 3];
Manejo de subndices:

Otra forma de asignar valores a una matriz (o un vector) es por medio de los subndices. El menor subnd
a medida que se requieran. Los subndices se escriben entre parntesis. Por ejemplo:
A(2, 3)=1; Asigna al elemento en la fila 2, columna 3 el valor de 1.

Si se desea cambiar todo el valor de una fila o una columna, es muy sencillo hacerlo con el operador ":" a
A(1,:)=[4 5 6];

Asigna a la fila 1 el vector [4, 5, 6] (cambia la fila 1 por 4, 5, 6). As si A era una matriz de 3x3 de ceros,

Igualmente a veces se requiere trabajar con vectores que son una columna o una fila de una matriz. Esto s
vector , asi:
v=A(:,1);
Asigna al vector v la primera columna (completa) de la matriz A.

Operaciones matemticas simples con matrices y vectores:

Esto es algo en lo que MATLAB hace las cosas verdaderamente simples, si se tienen dos matrices (o vect

multiplicar y restar si lo es necesario anotar esta operacin normalmente (cmo se hara con nmeros). Po
Si se quieren multiplicar dos matrices A y B y almacenar el resultado en C:

C=A*B; (Si se hace entre dos vectores (uno fila y el otro columna) el resultado es el producto punto entre
Si se quieren sumar y restar y almacenar el resultado en C:
C=A+B;
C=A-B; (Sin importar que sean matrices o vectores.)

Comandos matemticos para matrices.


Los comandos matemticos mas empleados con matrices son:
SIZE
Devuelve las dimensiones de la matriz.
EIG
Calcula los valores y vectores propios (ortovalores y ortovectores) de la matriz.
INV
Invierte la matriz. (si es posible)
DET
Calcula el determinante de la matriz.

Comandos matemticos para vectores:


Los comandos matemticos mas empleados con vectores son:
NORM
Calcula la norma de un vector o matriz.

MIN
Retorna el (los) menor (es) componente (s) de un vector o matriz.
MAX
Retorna el (los) mayor (es) componente (s) de un vector o matriz.
CROSS
Calcula el producto cruz entre vectores.
LENGTH
Determina el nmero de componentes de un vector.

ARREGLOS UNIDIMENSIONALES
Un arreglo unidimensional es un tipo de datos estructurado que est formado
por una coleccin finita y ordenada de datos del mismo tipo. Es la estructura
natural para modelar listas de elementos iguales. Los datos que se guarden en
los arreglos todos deben ser del mismo tipo.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir,
podemos acceder a cualquier elemento del arreglo sin tener que consultar a
elementos anteriores o posteriores, esto mediante el uso de un ndice para
cada elemento del arreglo que nos da su posicin relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en
memoria.
Los arreglos nos permiten hacer un conjunto de operaciones para manipular los
datos guardados en ellos, estas operaciones son: ordenar, buscar, insertar,
eliminar, modificar entre otras.

REPRESENTACION EN MEMORIA: Los arreglos guardan en memoria la


cantidad de espacios que se le indican en la declaracin.

Ejemplo: sea el siguente arreglo unidimensional donde se va a guardar 5 datos


de tipo entero (integer)

x : array[1..5] of integer
En memoria el computador guarda 5 espacios: esto quiere decir en el arreglo X
en la posicin 1 guarda 34, en el arreglo X en la posicin 2 guarda 22, asi hasta
la ltima posicin del arreglo X posicion 5 guarda 72.
X [1]
34
X [2]
22
X [3]
39
X [4]
63
X [5]
72
Declaracion de los arreglos unidimensionales: Se declara el tipo del arreglo,
con la palabra reservada TYPE, luego se declara la variable de tipo arreglo,
esto se hace en el bloque de declaracion de variables palabra reservada VAR.
Type
nombre_arreglo= array[x..y]of tipo_dato;
Ejemplos:
salarios= array [1x] of real;
nombre_trabajador=array[1..x] of string;
Nota: El tipo de dato del arreglo puede ser: integer,real, boolean, string etc.
Variables tipo array
Var

sueldo:salarios;
nombre:nombre_trabajador;
Una vez declarados los arreglos procedemos a cargar informacin en ellos,
para esto usamos estructuras repetitivas la mas recomendable por su facilidad
es el for, una vez cargada la informacin se puede hacer cualquier operacin
de calculo y por ltimo mostramos la informacin de los arreglos usando de
igual manera la estructura repetitiva for.
carga de un arreglo, la letra i es el indice o subindice del arreglo e indica la
posicin del arreglo:
for i:=1 to num do
begin
readln(notas[i]);
end;
Mostrar la informacin de un arreglo, la letra i es el indice o subindice del
arreglo e indica la posicin del arreglo::
for i:=1 to num do
begin
writeln(notas[i]:3:1);
end;
Se han hechos programas que suman una cantidad de nmeros usando dos
variables, una para leer cada nmero y otra para acumular la suma. Este
enfoque tiene la desventaja de que se pierden los valores de los sumandos. El
uso de arreglos permite calcular la suma de los nmeros con una cantidad
mnima de cdigo y a la vez conservar cada valor, como muestra el siguiente
programa completo:

Program SumaN;
Uses

Crt;
Const
n = 5;
Var
nums: Array[1..n] Of Integer;
s, i: Integer;
Begin
For i:=1 To n Do
Begin
Write('Escriba el nmero: ');
ReadLn(nums[i]);
s := s + nums[i];
End;
WriteLn('La suma es: ', s);
End.
Ntese el uso de una constante para marcar el tamao del arreglo; dicha
constante, tambin sirve para controlar el For. De este modo, slo se hace
necesario cambiar un nmero para adecuar el programa a la escala apropiada
Ejercicios de arreglos unidimensionales:

* Dadas n cantidad de notas, calcular e imprimir el promedio de las notas


y todas las notas que fueron mayor a la media calculada.
PROGRAM calificaciones;
USES CRT;

type
listacalificaciones=array[1..n]of real;
VAR
notas:listacalificaciones;
media,suma:real;
num,i:integer;
BEGIN
WRITELN('INTRODUZCA la cantidad de notas a procesar');
READLN(NUM);
suma:=0;
for i:=1 to num do
begin
readln(notas[i]);
suma:=suma+notas[i];
end;
media:=suma/num;
writeln('la media es:' , media:2:2);
writeln('la lista de calificaciones mayores a la media es:');
for i:=1 to num do
begin
if notas[i]>media then
writeln(notas[i]:3:1);
readln;
end;
END.
(*Escribir un programa en pascal que rellene un array con 11
numeros, luego dividirlos entre 3 y mostralos por pantalla *)
PROGRAM numeros;
USES CRT;
type
arreglonumeros=array[1..11]of real;
VAR
num:arreglonumeros;
i:integer;
numero:real;
BEGIN

for i:=1 to 11 do
begin
WRITELN('Introduzca el numero ' , i, ' a dividir');
readln(num[i]);
numero:=num[i]/3;
write('los numero resultantes de la division son:' ,numero:2:2);
readln;
end;
end.

Arreglos bidimensionales
Los arreglos bidimensionales son tablas de valores. Cada elemento de un
arreglo bidimensional est simultneamente en una fila y en una columna.
En matemticas, a los arreglos bidimensionales se les llama matrices, y son muy
utilizados en problemas de Ingeniera.
En un arreglo bidimensional, cada elemento tiene una posicin que se identifica
mediante dos ndices: el de su fila y el de su columna.

Crear arreglos bidimensionales


Los arreglos bidimensionales tambin son provistos por NumPy, por lo que
debemos comenzar importando las funciones de este mdulo:
from numpy import *

Al igual que los arreglos de una dimensin, los arreglos bidimensionales


tambin pueden ser creados usando la funcin array, pero pasando como
argumentos una lista con las filas de la matriz:
a = array([[5.1, 7.4, 3.2, 9.9],
[1.9, 6.8, 4.1, 2.3],
[2.9, 6.4, 4.3, 1.4]])

Todas las filas deben ser del mismo largo, o si no ocurre un error de valor:
>>> array([[1], [2, 3]])
Traceback (most recent call last):

File "<stdin>", line 1, in <module>


ValueError: setting an array element with a sequence.

Los arreglos tienen un atributo llamado shape, que es una tupla con los
tamaos de cada dimensin. En el ejemplo, a es un arreglo de dos dimensiones
que tiene tres filas y cuatro columnas:
>>> a.shape
(3, 4)

Los arreglos tambin tienen otro atributo llamado size que indica cuntos
elementos tiene el arreglo:
>>> a.size
12

Por supuesto, el valor de a.size siempre es el producto de los elementos


de a.shape.
Hay que tener cuidado con la funcin len, ya que no retorna el tamao del
arreglo, sino su cantidad de filas:
>>> len(a)
3

Las funciones zeros y ones tambin sirven para crear arreglos bidimensionales.
En vez de pasarles como argumento un entero, hay que entregarles una tupla
con las cantidades de filas y columnas que tendr la matriz:
>>> zeros((3, 2))
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
>>> ones((2, 5))
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])

Lo mismo se cumple para muchas otras funciones que crean arreglos; por
ejemplom la funcinrandom:

>>> from numpy.random import random


>>> random((5, 2))
array([[ 0.80177393, 0.46951148],
[ 0.37728842, 0.72704627],
[ 0.56237317, 0.3491332 ],
[ 0.35710483, 0.44033758],
[ 0.04107107, 0.47408363]])

Operaciones con arreglos bidimensionales


Al igual que los arreglos de una dimensin, las operaciones sobre las matrices
se aplican trmino a trmino:
>>> a = array([[5, 1, 4],
...
[0, 3, 2]])
>>> b = array([[2, 3, -1],
...
[1, 0, 1]])
>>> a + 2
array([[7, 3, 6],
[2, 5, 4]])
>>> a ** b
array([[25, 1, 0],
[ 0, 1, 2]])

Cuando dos matrices aparecen en una operacin, ambas deben tener


exactamente la misma forma:
>>> a = array([[5, 1, 4],
...
[0, 3, 2]])
>>> b = array([[ 2, 3],
...
[-1, 1],
...
[ 0, 1]])
>>> a + b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single
shape

Obtener elementos de un arreglo bidimensional


Para obtener un elemento de un arreglo, debe indicarse los ndices de su fila i y
su columna jmediante la sintaxis a[i, j]:

>>> a = array([[ 3.21,


[ 9.54, 0.30,
[ 5.62, 0.54,
[ 8.19, 2.12,
[ 8.72, 1.47,
>>> a[1, 2]
2.14

5.33,
2.14,
0.71,
6.28,
0.77,

4.67, 6.41],
6.57],
2.56],
8.76],
8.78]])

>>> a[4, 3]
8.78
>>> a[-1, -1]
8.78
>>> a[0, -1]
6.41

Tambin se puede obtener secciones rectangulares del arreglo usando el


operador de rebanado con los ndices:
>>> a[2:3, 1:4]
array([[ 0.54, 0.71, 2.56]])
>>> a[1:4, 0:4]
array([[ 9.54, 0.3 , 2.14, 6.57],
[ 5.62, 0.54, 0.71, 2.56],
[ 8.19, 2.12, 6.28, 8.76]])
>>> a[1:3, 2]
array([ 2.14, 0.71])
>>> a[0:4:2, 3:0:-1]
array([[ 6.41, 4.67, 5.33],
[ 2.56, 0.71, 0.54]])
>>> a[::4, ::3]
array([[ 3.21, 6.41],
[ 8.72, 8.78]])

Para obtener una fila completa, hay que indicar el ndice de la fila, y poner : en
el de las columnas (significa desde el principio hasta el final). Lo mismo para
las columnas:
>>> a[2, :]
array([ 5.62, 0.54, 0.71, 2.56])

>>> a[:, 3]
array([ 6.41, 6.57, 2.56, 8.76, 8.78])

Note que el nmero de dimensiones es igual a la cantidad de rebanados que


hay en los ndices:
>>> a[2, 3]
2.56
>>> a[2:3, 3]
array([ 2.56])

# valor escalar (arreglo de cero dimensiones)


# arreglo de una dimensin de 1 elemento

>>> a[2:3, 3:4] # arreglo de dos dimensiones de 1 x 1


array([[ 2.56]])

Otras operaciones
La trasposicion consiste en cambiar las filas por las columnas y viceversa. Para
trasponer un arreglo, se usa el mtodo transpose:
>>> a
array([[ 3.21, 5.33, 4.67, 6.41],
[ 9.54, 0.3 , 2.14, 6.57],
[ 5.62, 0.54, 0.71, 2.56]])
>>> a.transpose()
array([[ 3.21, 9.54, 5.62],
[ 5.33, 0.3 , 0.54],
[ 4.67, 2.14, 0.71],
[ 6.41, 6.57, 2.56]])

El mtodo reshape entrega un arreglo que tiene los mismos elementos pero
otra forma. El parmetro de reshape es una tupla indicando la nueva forma del
arreglo:
>>> a = arange(12)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.reshape((4, 3))
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])

>>> a.reshape((2, 6))


array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])

La funcin diag aplicada a un arreglo bidimensional entrega la diagonal


principal de la matriz (es decir, todos los elementos de la forma a[i, i]):
>>> a
array([[ 3.21, 5.33, 4.67, 6.41],
[ 9.54, 0.3 , 2.14, 6.57],
[ 5.62, 0.54, 0.71, 2.56]])
>>> diag(a)
array([ 3.21, 0.3 , 0.71])

Adems, diag recibe un segundo parmetro opcional para indicar otra diagonal
que se desee obtener. Las diagonales sobre la principal son positivas, y las que
estn bajo son negativas:
>>> diag(a,
array([ 4.67,
>>> diag(a,
array([ 9.54,

2)
6.57])
-1)
0.54])

La misma funcin diag tambin cumple el rol inverso: al recibir un arreglo de


una dimensin, retorna un arreglo bidimensional que tiene los elementos del
parmetro en la diagonal:
>>> diag(arange(5))
array([[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 2, 0, 0],
[0, 0, 0, 3, 0],
[0, 0, 0, 0, 4]])

Reducciones por fila y por columna


Algunas operaciones pueden aplicarse tanto al arreglo completo como a todas
las filas o a todas las columnas.

Por ejemplo, a.sum() entrega la suma de todos los elementos del arreglo.
Adems, se le puede pasar un parmetro para hacer que la operacin se haga
por filas o por columnas:
>>> a = array([[ 4.3, 2.9, 9.1, 0.1, 2. ],
...
[ 8. , 4.5, 6.4, 6. , 4.3],
...
[ 7.8, 3.1, 3.4, 7.8, 8.4],
...
[ 1.2, 1.5, 9. , 6.3, 6.8],
...
[ 7.6, 9.2, 3.3, 0.9, 8.6],
...
[ 5.3, 6.7, 4.6, 5.3, 1.2],
...
[ 4.6, 9.1, 1.5, 3. , 0.6]])
>>> a.sum()
174.4
>>> a.sum(0)
array([ 38.8, 37. , 37.3, 29.4, 31.9])
>>> a.sum(1)
array([ 18.4, 29.2, 30.5, 24.8, 29.6, 23.1, 18.8])

El parmetro indica a lo largo de qu dimensin se har la suma. El 0 significa


sumar a lo largo de las filas. Pero hay que tener cuidado, por que lo que se
obtiene son las sumas de las columnas! Del mismo modo, 1 significa a lo largo
de las columnas, y lo que se obtiene es el arreglo con las sumas de cada fila.
Las operaciones a.min() y a.max() funcionan del mismo modo:
>>> a.min()
0.1
>>> a.min(0)
array([ 1.2, 1.5, 1.5, 0.1, 0.6])
>>> a.min(1)
array([ 0.1, 4.3, 3.1, 1.2, 0.9, 1.2, 0.6])
a.argmin() y a.argmax() tambin:
>>> a.argmin(0)
array([3, 3, 6, 0, 6])
>>> a.argmin(1)
array([3, 4, 1, 0, 3, 4, 4])
Arrays y cadenas de texto[editar]
Los arrays son usados extensamente por los programadores para contener listas de datos
en la memoria, por ejemplo, los datos almacenados en un disco suelen leerse y ponerse
dentro de un array con el objetivo de facilitar la manipulacin de dichos datos, ya que los

datos en memoria pueden ser modificados, clasificados, marcados para su eliminacion,


etc. para luego ser reescritos al disco. Otro ejemplo podra ser el de un men de opciones
que se desplegarn dentro de una ventana para que el usuario pueda elegir una de stas,
en tales casos y cuando las opciones son numerosas, solamente se ponen unas cuantas
de ellas dentro de la ventana pero se le da al usuario la oportunidad de poder subir y bajar
a su antojo para ver el resto de opciones que, aunque no se vean en la ventana, forman
parte del men o array de opciones.

Array:
Un array es un conjunto de datos del mismo tipo ordenados de forman lneal uno despus
de otro. Los componentes de un array se han de referenciar por medio del nombre del
array y un ndice de desplazamiento para indicar el componente deseado.

Indices de un array[editar]
Los ndices son nmeros que se utilizan para identificar a cada uno de los componentes de
un array. A modo de ejemplo, podemos pensar que los ndices son como los nmeros de
habitaciones de un hotel, es decir, para poder dirigirnos a un hotel especfico es necesario
saber el nombre del mismo, luego, si queremos llegar a una habitacin especfica de dicho
hotel necesitaremos, adems del nombre del hotel, el nmero de habitacin deseado.

Dimensiones de un array[editar]
De acuerdo a la forma en que se construye o declara un array, ste puede ser clasificado
como: unidimensional, bidimensional y multidimensional. Los arrays que se emplean con
mucha ms frecuencia son los estructurados a manera de vector ( array unidimensional ) y
los estructurados a manera de matriz ( array bidimensional ), as, aunque en C++ se
pueden crear estructuras multidimensionales, en este captulo solo trataremos con
vectores y matrices.

Array unidimensional[editar]

Una array uni-dimensional es aquel en donde los componentes son accesibles por medio
de uno y solamente un ndice que apunte al componente requerido. Los arrays de este tipo
son conocidos tambin con el nombre de vectores. Conceptualmente, podemos pensar en
un array unidimensional como una lista compuesta de datos, donde para referirnos a uno
de ellos emplearemos un nmero para indicar la posicin del mismo dentro de la lista. Por
ejemplo, consideremos el caso de la tabla o array VentaSemanal, la cual est pensada
para registrar las ventas de cada uno de los das de la semana. De manera conceptual
podemos ver el array como se muestra a continuacin:

Nota: en C++ los arrays estn basados en 0 ( cero ), es decir, el primer elemento de un
array se indexa mediante el 0, y el ndice para el ltimo de los elementos es igual al
nmero de componentes menos uno.

array: VentaSemanal
+------+
| dato | <-- componente 0, ( fila 0 )
|------|
| dato | <-- componente 1, ( fila 1 )
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | <-- componente 6, ( fila 6 )
|------|

Si en el array VentaSemanal queremos que el elemento 4 ( por ejemplo ) contenga el valor


de 8987 lo podemos lograr con la instruccin: VentaSemanal[4] = 8987;y el estado del
array sera:

array: VentaSemanal
+------+
| dato |
|------|
| dato |
|------|
| dato |
|------|
| dato |
|------|
| 8987 | <--- componente 4
|------|
| dato |
|------|

| dato |
|------|

Array bidimensional[editar]

Un array bi-dimensional es aquel en donde los componentes son accesibles por medio de
una pareja de ndices que apunten a la fila y a la columna del componente requerido. Los
arrays de este tipo son conocidos tambin con el nombre de matrices. Conceptualmente,
podemos pensar en un array bidimensional como en una lista compuesta de filas y
columnas, en donde para referirnos a una de ellas emplearemos un nmero para indicar la
posicin de fila y otro nmero para indicar la posicin de la columna del componente
deseado. Por ejemplo, consideremos el caso de la tabla o array VentaSemanaQ, la cual
est pensada para registrar las ventas de cada uno de los das de la semana por cuatro
semanas, o sea, una tabla de 7 x 4 elementos. De manera conceptual podemos ver el
array como se muestra a continuacin:

array: VentaSemanaQ
C O L U M N A S
+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
F

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )

Si en el array VentaSemanaQ queremos que el elemento de la fila 4, columna 3 ( por


ejemplo

contenga

el

valor

de

5000

lo

podemos

lograr

con

la

instruccin:VentaSemanaQ[4][3] = 5000; y el estado del array sera:

array: VentaSemanaQ
+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | 5000 | <-- componente ( 4, 3 )
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )

Declaracin de arrays en C, C++[editar]


En C, C++ para declarar un array se emplea la sintaxis:

tipo identificador [tamao]

= { lista de inicializacin }

donde,

tipo se refiere al tipo de datos que contendr el array. El tipo puede ser cualquiera
de los tipos estndar (char, int, float, etc.) o un tipo definido por el usuario. Es ms, el
tipo del array puede ser de una estructura creada con: struct, union y class.

identificador se refiere al nombre que le daremos al array.

tamao es opcional e indica el nmero de elementos que contendr el array. Si un


array se declara sin tamao, el mismo no podr contener elemento alguno a menos
que en la declaracin se emplee una lista de inicializacin.

lista de inicializacin es opcional y se usa para establecer valores para cada uno
de los componentes del array. Si el array es declarado con un tamao especfico, el
nmero de valores inicializados no podr ser mayor a dicho tamao.

Ejemplos:

int intA[5];
long longA[5] = { 1, 2, 3, 4, 5 };
char charA[3] = { 'a', 'b', 'c' };

Iteraciones dentro de un array (vector)[editar]


El termino Iterar se refiere al hecho de acceder (con el fin de leer o escribir) sobre cada
uno de los componentes de un array. As, para poner un ejemplo reconsideremos el caso
de la tabla VentaSemanal (vista en una seccin anterior), y que dicho sea de paso es un
array de 7 elementos de tipo double. Luego, vamos a mostrar como ejemplo un programa
completo en el cual se declara el array mencionado con valores inicializados, que sern
mostrados en pantalla y al final la suma de estos. Observe que la variable i usada para
iterar dentro del array va desde 0 hasta FILAS - 1 ( FILAS es el tamao del array ).
Nota: por motivos de simplificacin el programa est escrito al estilo de C estndar. Sin
embargo puede ser compilado y ejecutado en un compilador de C++.

#include <stdio.h>
#include <stdlib.h>
#define FILAS 7
int main()
{
float ventas[FILAS] = {
123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 0.0 };
float total = 0;
int i;
puts("Ventas de la semana");

puts("-------------------");
for (i=0; i<FILAS; i++) {
total += ventas[i];
printf( "%8.2f\n", ventas[i] );
}
puts("--------");
printf("%8.2f\n", total );
system("pause");
return 0;
}
Esta es la salida del programa:
Ventas de la semana
------------------123.50
234.60
345.45
321.40
345.00
456.65
0.00
-------1826.60

Iteraciones dentro de un array (matriz)[editar]


Con el fin de leer o escribir sobre cada uno de los componentes de una matriz se deben
crear dos ciclos de iteracin. As, para poner un ejemplo reconsideremos el caso de la
tabla VentaSemanaQ (vista en una seccin anterior), y que dicho sea de paso es un array
de 4 x 4 elementos de tipo double. Luego, vamos a mostrar como ejemplo un programa
completo en el cual se declara el array mencionado con valores inicializados, que sern
mostrados en pantalla y al final la suma de estos. Observe que en este caso se utilizan dos
variables, una para iterar sobre las filas y otra para iterar sobre las columnas de la matriz.

#include <stdio.h>
#include <stdlib.h>
#define FILAS 7
#define COLS 4

int main()
{
float VentaSemanaQ[FILAS][COLS] = {
123.50, 234.60, 345.45, 321.40,
345.00, 456.65, 123.50, 234.60,
345.45, 321.40, 345.00, 456.65,
123.50, 234.60, 345.45, 321.40,
345.00, 456.65, 123.50, 234.60,
345.45, 321.40, 345.00, 456.65,
0.0, 0.0, 0.0, 0.0 };
float totales[COLS] = { 0.0, 0.0, 0.0, 0.0 };
float grantotal = 0;
int f, c, t = 0 ; /* indices para filas, columnas y totales */
puts("Ventas de cuatro semanas");
puts("------------------------");
for (f=0; f<FILAS; f++) {
for (c=0; c<COLS; c++) {
totales[c] += VentaSemanaQ[f][c];
printf("%8.2f

", VentaSemanaQ[f][c] );

}
puts("");
}
puts("--------------------------------------");
for (t=0; t<COLS; t++) {
printf("%8.2f

", totales[t] );

grantotal += totales[t];
}
printf("\n\nGran total: %10.2f\n", grantotal);
system("pause");
return 0;
}

Salida del programa:


Ventas de cuatro semanas

-----------------------123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

0.00

0.00

0.00

0.00

-------------------------------------1627.90

2025.30

1627.90

2025.30

Gran total: 7306.40

Cadenas de caracteres[editar]
En C, C++ las cadenas de caracteres no son ms que arrays de caracteres, salvo que a
este tipo de arrays el compilador les da un tratamiento especial. Usted puede manipular las
cadenas de caracteres de la misma manera en que manipula cualquier otro tipo de array,
sin embargo, es preferible hacer uso de una librera estndar especialmente escrita para
manipulacion de cadenas de caracteres, me refiero a la librera <string.h> y que viene
incluida con todo compilador de C, C++.
Para comenzar y antes de ver algunas de las funciones de la mencionada librera,
tenemos los siguientes ejemplos:

1. char

nombre[]

2. char

nombre2[] = { 'O', 's', 'c', 'a', 'r', '\0' };

= "Oscar";

En el ejemplo 1 se est declarando la variable nombre como una cadena de


caracteres y cuyo contenido inicial es "Oscar".

En el ejemplo 2 se est declarando la variable nombre2 como una cadena de


caracteres y cuyo contenido inicial es { 'O', 's', 'c', 'a', 'r', '\0' };.

En ambos casos el resultado es el mismo, es decir, al final se obtiene la misma cadena,


pero usted debe poner atencin al hecho de que toda cadena de caracteres en C, C++
debe terminar con el carcter NULL, que normalmente es igual a cero y se puede escribir
como '\0'. Ahora bien, cuando usted usa la sintaxis mostrada en el ejemplo 1 no tiene que
preocuparse por agregar el caracter NULL, ya que esto lo hace el compilador
automticamente.

La biblioteca string[editar]
Los compiladores de C, C++ dan soporte a la biblioteca de funciones <string.h>, a la que
accede por medio de la directiva #include <string.h>. No veremos en detalle todas las
funciones contenidas en dicha biblioteca, y nos limitaremos a mostrar algunos ejemplos de
ciertas funciones importantes.

strlen(): Obtener longitud de cadenas


Sintaxis: size_t strlen(const char *s);
Comentarios: La funcin strlen() devuelve la longitud de la cadena s.
Ejemplo:

char *nombre = "Oscar E. Palacios";


cout << strlen(nombre) << endl;

strcpy(): Copiar cadenas


Sintaxis: char *stpcpy(char *dest, const char *src);
Comentarios: stpcpy copia la cadena src hacia dest, la funcin termina hasta haber
encontrado en src el carcter de terminacin null.
Ejemplo:

char *nombre = "Oscar E. Palacios";


char copia[80];
strcpy(copia, nombre);
cout << copia << endl;

strcat(): Concatenar cadenas


Sintaxis: char *strcat(char *dest, const char *src);
Comentarios: strcat agrega la cadena src a dest, la funcin termina hasta haber
encontrado en src el carcter de terminacin null.
Ejemplo:

char nombre[] = "Oscar E.";


char copia[80] = " Palacios";
strcat(copia, nombre);
cout << copia << endl;

strlwr(): Convertir a minsculas.


Sintaxis: char *strlwr(char *dest);
Comentarios: strlwr convierte todos los caracteres alfabticos ( 'A' .. 'Z' ) en dest a
sus correspondientes caracteres alfabticos ( 'a' .. 'z' ).
Ejemplo:

char nombre[] = "Oscar E. Palacios";


strlwr(nombre);
cout << nombre << endl;

strupr(): Convertir a maysculas.


Sintaxis: char *strupr(char *dest);
Comentarios: strupr convierte todos los caracteres alfabticos ( 'a' .. 'z' ) en dest a
sus correspondientes caracteres alfabticos ( 'A' .. 'Z' ).

strchr(): Buscar carcter ( hacia adelante )


Sintaxis: char *strchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el
inicio hasta el final de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la primera
ocurrencia de c en s, en caso contrario strchr regresa null.
Ejemplo:

char nombre[] = "Oscar E. Palacios";


char *p;

p = strchr(nombre, 'E');
if (p) {

cout << "nombre contiene a E" << endl;


cout << "indice = " << (p - nombre) << endl;
}
else cout << "E no est en nombre" << endl;

strrchr(): Buscar carcter ( hacia atras )


Sintaxis: char *strrchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo
desde el final hasta el inicio de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la ltima
ocurrencia de c en s, en caso contrario strchr regresa null.
Ejemplo:
char nombre[] = "Oscar E. Palacios";
char *p;

p = strrchr(nombre, 'E');
if (p) {
cout << "nombre contiene a E" << endl;
cout << "indice = " << (p - nombre) << endl;
}
else cout << "E no est en nombre" << endl;

strstr(): Buscar subcadena


Sintaxis: char *strstr(const char *s1, char *s2);
Comentarios: strstr busca en s1 la subcadena s2. La bsqueda se lleva a
cabo desde el inicio hasta el final de s1.
Regreso: si la operacin es exitosa strstr regresa un puntero hacia la
primera ocurrencia de s2 en s1, en caso contrario strstr regresa null.
Ejemplo:
char s[] = "Un barco de tristeza";

char *p;

p = strstr(s, "barco");
if (p) {
cout << "barco est en s" << endl;
cout << "indice = " << (p - s) << endl;
}
else cout << "barco no est en s" << endl;

Cadenas en C++[editar]
En la seccin anterior descubrimos algunas funciones para trabajar con
cadenas de caracteres al estilo de C estndar, si bien no est de ms tener
tal conocimiento, tambin es cierto que C++ es un lenguaje de
programacn orientado a objetos, de tal manera que ciertos compiladores
( como el gcc, utilzado porBloodshed Dev-C++ y otros tantos entornos de
desarrolo ) dan soporte a la clase cstring, que no debe confundirse con
la <string.h>.
Nota: Bloodshed Dev-C++ es un IDE (Editor con Depurador Integrado) para
programar en C++ en un ambiente grfico para Windows, distibuido
gratuitamente bajo licencia GPL GNU y usted puede encontrarlo
aqu: www.bloodshed.net. Actualmente (febrero de 2008) se recomienda bajar
la versinDev-C++ 4.9.9.2.
Nota:Como el Dev-c++ ya esta descontinuado, es recomendable usar su
extensin Wx Dev-C++ que esta actualmente activa y es recomendable
para muchos proyectos bajo el lenguaje C++, este programa tambien es
licencia GPL, podras descargarlo desde=wxdsgn.sourceforge.net, y encontraras
informacion de este aqui=es.wikipedia.org/wiki/WxDev-C%2B%2B.
Una de las ventajas que ofrece la clase cstring es que, a diferencia de las
cadenas estndar, sta posee la capacidad de crecer o disminuir su tamao
en tiempo de ejecucin. Adems, entre otras caracteristicas destacables, la
clase string soporta operaciones de asignacin tales como: =, +, +=, etc.; y
de comparacin tales como: ==, <=, etc.
Para tener una idea bsica sobre las cadenas en C++ veamos el siguiente
programa:
Nota: en el programa se debe de observar el uso del operador de
asignacin +=, algo que no es posible hacer con las cadenas estndar.

Un estudio exhaustivo sobre la clase string requiere de un captulo


completo, ya que la misma, segn el manual de referencia de C++, posee
aproximadamente 33 mtodos y unos 7 constructores; adems de los
atributos.

Arrays en C++[editar]
As como C++ da aternativas elegantes para la manipulacin de cadenas de
caracteres, tambin da el soporte para la manipulacon de
arrays dinmicos. Este tema ser ampliado en el captulo Libreria de
Plantillas Estndar STL, sin embargo para tener una idea de lo que vendr
mostraremos aqu un ejemplo sencillo en donde se usar la clase
plantilla vector.

Arreglos multidimensionales
Un arreglo multidimensional es un arreglo cuyos elementos tienen ms de un
ndice.
El caso ms simple son los arreglos bidimensionales, que tienen dos ndices, y
son tiles para representar datos con formato tabular, como tablas y matrices.
Los arreglos multidimensionales son declarados indicando los tamaos a lo
largo de cada una de las dimensiones, separados por comas. Por ejemplo, un
arreglo de enteros de 5 3 es declarado as:
integer, dimension(5, 3) :: a

Este arreglo tiene quince elementos: desde a(1, 1) hasta a(5, 3).
La manera tpica de recorrer los elementos de un arreglo multidimensional es
usar varios ciclos do anidados, uno por cada dimension. Por ejemplo, el
siguiente programa suma todos los elementos del arreglo a declarado en el
ejemplo anterior:
suma = 0
do i = 1, 5
do j = 1, 3
suma = suma + a(i, j)
end do
end do

Cada ndice no tiene un significado por s mismo. El programador puede


interpretar cada uno como quiera, siempre que sea consistente a lo largo del
programa. Por ejemplo, para los elementos a(i, j) de un arreglo bidimensional,
uno puede interpretar i como las filas de una tabla y j como las columnas, pero
hacerlo al revs tambin es correcto.

Inicializacin de arreglos
A veces un programa necesita tener un arreglo cuyos valores estn dados de
antemano, por lo que no corresponde que los ingrese el usuario.
Para estos casos, es posible inicializar el arreglo durante la declaracin. El
siguiente ejemplo ilustra la sintaxis inicializando un arreglo con la cantidad de
das que tienen los meses del ao:
program dias_mes
implicit none
integer, dimension(12) :: dias = (/ 31, 28, 31, 30, &
31, 30, 31, 31, &
30, 31, 30, 31 /)
integer :: mes
print *, 'Ingrese el numero del mes'
read *, mes
print *, 'El mes ', mes, ' tiene ', dias(mes), ' dias'
end program dias_mes

ndices arbitrarios
Es posible declarar un arreglo de tamao N de modo que sus ndices no vayan
desde 1 hasta N, sino que tomen otros valores.
Por ejemplo, podemos usar un arreglo bidimensional para guardar los totales
mensuales de lluvia cada de los ltimos cinco aos. No es muy conveniente que
el ndice que representa el ao tome los valores de 1 a 5. Para hacer que los
ndices vayan desde 2006 hasta 2010, la declaracin se hace as:
real, dimension(2006:2010, 12) :: lluvia

Para asignar el total de lluvia cada de agosto de 2010, se hace as:

lluvia(2010, 8) = 13.4

Secciones de arreglos
Para referirse a una seccin de un arreglo que corresponde a un arreglo de
menor dimensin se puede usar dos puntos (:) en lugar del ndice para indicar
que se desea obtener todos los elementos a lo largo de la dimensin
correspondiente.
Por ejemplo, en el arreglo de los totales de lluvia por mes, lluvia(2007, :) es el
arreglo unidimensional con los doce totales mensuales del ao 2007, mientras
quelluvia(:, 9) es el arreglo unidimensional de tamao cinco con los totales de
lluvia de septiembre de cada ao.

Operaciones sobre arreglos


Hay algunas operaciones que pueden ser usadas sobre arreglos. Por ejemplo, la
funcin sum recibe un arreglo como parmetro y entrega como resultado la
suma de los elementos del arreglo:
real, dimension(5) :: a = (/6, 1, -4, 3, 0/)
print *, sum(a)

! la salida es 6.0

Si una operacin binaria es aplicada sobre un arreglo y un valor escalar,


entonces la operacin es aplicada sobre todos los elementos del arreglo. Por
ejemplo, si a es un arreglo, entonces el resultado de la expresin a * 2 es el
arreglo cuyos valores son el doble del elemento respectivo de a.
Si una operacin binaria es aplicada sobre dos arreglos, entonces la operacin es
aplicada elemento a elemento. Por ejemplo, si a y b son arreglos, a * b es el
arreglo de los productos de los elementos respectivos de a y b.

Entrada de elementos de un arreglo


Para que el usuario pueda ingresar todos los elementos de un arreglo en una
misma lnea de entrada, se puede usar la sintaxis llamada do implcito:
read *, (arreglo(i), i = 1, N)

Cuando en el programa aparece esta sentencia, significa que el usuario debe


ingresar, en la misma lnea, todos los N valores del arreglo separados por
espacios.
MATRICES O ARRAYS (ARREGLOS) DE DOS DIMENSIONES
Las matrices decimos que son arrays (arreglos) de dos dimensiones. Tambin podemos verlas
como tablas donde cada elemento tiene una fila y una columna. Para comprenderlas mejor
podemos recordar las matrices matemticas de 2 dimensiones. Un ejemplo de matriz en
matemticas podra ser esta:

En una matriz normalmente hablamos de filas y columnas y decimos que la matriz tiene m
filas y n columnas. As, cada elemento queda identificado por su fila i y su columna j. Por
ejemplo, en la matriz que hemos mostrado anteriormente podramos decir que tenemos 3
filas (fila 0, fila 1 y fila 2) y cuatro columnas (columna 0, columna 1, columna 2, columna 3).
Podramos decir que el elemento de la fila 1, columna 3 es igual a 2. De la misma manera
podramos decir:
$valor [0] [0] = 1; $valor [0] [1] = 14; $valor [0] [2] = 8; $valor [0] [3] = 3;
$valor [1] [0] = 6; $valor [1] [1] = 19; $valor [1] [2] = 7; $valor [1] [3] = 2;
$valor [2] [0] = 3; $valor [2] [1] = 13; $valor [2] [2] = 4; $valor [2] [3] = 1;

Escribe ahora este cdigo y gurdalo con un nombre de archivo como ejemplo3.php. A
continuacin, sube el fichero al servidor y visualiza el resultado.

<?php
$animal[0][0] = "Perro";
$animal[0][1] = "Gato";
$animal[1][0] = "Lombriz";
$animal[1][1] = "Burro";
$animal[2][0] = "Murcilago";
$animal[2][1] = "Cocodrilo";
echo $animal[2][1];
echo $animal[0][0];
?>

Hay que recordar que los arrays siempre comienzan numerndose desde cero.
Otra forma de asignar valores a un array matriz es similar a la que ya describimos para los
vectores. Escribe este cdigo y gurdalo con un nombre de archivo como ejemplo4.php. A
continuacin, sube el fichero al servidor y visualiza el resultado.

<?php
$animal = array(
array("Perro", "Gato"),

array("Lombriz", "Burro"),
array("Murcilago", "Cocodril
o")
);
echo $animal[2][1];
echo $animal[0][0];
?>

La sintaxis que hemos empleado equivale a lo siguiente:


$animal [0] [0] = "Perro"; $animal [0] [1] = "Gato";
$animal [1] [0] = "Lombriz"; $animal [1] [1] = "Burro";
$animal [2] [0] = "Murcilago"; $animal [2] [1] = "Cocodrilo";

De ah que por pantalla se muestre "Cocodrilo" y "Perro", al igual que en el ejemplo anterior.
Tambin obtenemos el mismo resultado usando este cdigo, que es una mezcla de ambos
tipos de sintaxis:

<?php
$animal[0] = array("Perro", "Gato");
$animal[1] = array("Lombriz", "Burro");
$animal[2] = array("Murcilago", "Cocodrilo");
echo $animal[2][1];
echo $animal[0][0];
?>

La visualizacin obtenida es la misma: por pantalla se muestra "Cocodrilo" y "Perro", al igual


que en el ejemplo anterior.

ARRAYS MULTIDIMENSIONALES
Los arrays multidimensionales son los que tienen ms de dos dimensiones. Estos tipos de
arrays se definen como las matrices pero aadiendo ms ndices.
Escribe este cdigo, guarda el archivo php, sbelo al servidor y visualiza el resultado en tu
navegador.

<?php
$animal[0][0][0] = "Perro";
$animal[0][0][1] = "Gato";
$animal[0][0][2] = "Lombriz";
$animal[1][0][0] = "Burro";
$animal[1][0][1] = "Murcilago";
$animal[1][0][2] = "Cocodrilo";
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[1]
[0][1];
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[0]
[0][3];
?>

En este ejemplo hemos incluido una lnea que tiene poco sentido, o podra interpretarse
como un error:
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[0][0][3];

Fjate que estamos invocando un localizador [0][0][3] que no existe, o al que an no le


hemos asignado valor. Dependiendo del lenguaje y de la versin el resultado puede ser uno u
otro. En principio, debe tratar de evitarse invocar a una variable tipo array a la que no se
haya asignado valor, ya que esto supone una inconsistencia o incoherencia. En general, si
esto ocurre, PHP devolver un valor vaco, que en este caso supondra que en la pantalla no
se muestra nada asociado a esta variable. Por eso en la pantalla vemos nicamente
Murcilago y nada ms.
Escribe el cdigo que incluimos ms abajo y visualiza el resultado. Si te fijas, cuando
declaramos un array dentro de otro array lo que hacemos es aadir una dimensin ms al
array. Por ejemplo, si quisiramos declarar un array de tres dimensiones de nombre $miFecha
podramos escribir:

<?php
$miFecha = array( //Declara array
array( //Dimensin [0][][]
array("13 de enero de 2015", "11 de febrero de 2018"), //[0][0][]
array("13 de enero de 2020", "11 de febrero de 2015"), //[0][1][]
),
array( //Dimensin [1][][]
array("3 de agosto de 2017", "1 de octubre de 2016"), //[1][0][]
array("3 de agosto de 2013", "1 de octubre de 2019"), //[1][1][]
),
array( //Dimensin [2][][]
array("10 de junio de 2020", "11 de marzo de 2019"), //[2][0][]
),

array(
array("22 de marzo de 2020", "28 de mayo de 2019"), //[3][0][]
array("22 de marzo de 2019", "28 de mayo de 2018"), //[3][1][]
array("22 de marzo de 2018", "28 de mayo de 2017"), //[3][2][]
array("22 de marzo de 2017", "28 de mayo de 2016"), //[3][3][]
)
);
echo "<br/>& nbsp;& nbsp;& nbsp;" . $miFecha[3][2][0];
?>

En este ejemplo hemos definido valores para los siguientes ndices de array:
$miFecha [0] [0] [0], $miFecha [0] [0] [1]
$miFecha [0] [1] [0], $miFecha [0] [1] [1]
$miFecha [1] [0] [0], $miFecha [1] [0] [1]
$miFecha [1] [1] [0], $miFecha [1] [1] [1]
$miFecha [2] [0] [0], $miFecha [2] [0] [1]
$miFecha [3] [0] [0], $miFecha [3] [0] [1]

$miFecha [3] [1] [0], $miFecha [3] [1] [1]


$miFecha [3] [2] [0], $miFecha [3] [2] [1]
$miFecha [3] [3] [0], $miFecha [3] [3] [1]

Comprubalo solicitando la visualizacin de todas estas variables, como vemos en este


ejemplo.

<?php
$miFecha = array(
array(
array("13 de enero de 2015", "11 de febrero de 2018"),
array("13 de enero de 2020", "11 de febrero de 2015"),
),
array(
array("3 de agosto de 2017", "1 de octubre de 2016"),
array("3 de agosto de 2013", "1 de octubre de 2019"),
),
array(
array("10 de junio de 2020", "11 de marzo de 2019"),
),
array(
array("22 de marzo de 2020", "28 de mayo de 2019"),
array("22 de marzo de 2019", "28 de mayo de 2018"),
array("22 de marzo de 2018", "28 de mayo de 2017"),
array("22 de marzo de 2017", "28 de mayo de 2016"),
)
);
echo "<br/>& nbsp;& nbsp;& nbsp;" . $miFecha[3][2][0];
echo $miFecha [0] [0] [0]. "<br>"; echo $miFecha [0] [0] [1]. "<br>";
echo $miFecha [0] [1] [0]. "<br>"; echo $miFecha [0] [1] [1]. "<br>";
echo $miFecha [1] [0] [0]. "<br>"; echo $miFecha [1] [0] [1]. "<br>";

echo $miFecha [1] [1] [0]. "<br>"; echo $miFecha [1] [1] [1]. "<br>";
echo $miFecha [2] [0] [0]. "<br>"; echo $miFecha [2] [0] [1]. "<br>";
echo $miFecha [3] [0] [0]. "<br>"; echo $miFecha [3] [0] [1]. "<br>";
echo $miFecha [3] [1] [0]. "<br>"; echo $miFecha [3] [1] [1]. "<br>";
echo $miFecha [3] [2] [0]. "<br>"; echo $miFecha [3] [2] [1]. "<br>";
echo $miFecha [3] [3] [0]. "<br>"; echo $miFecha [3] [3] [1]. "<br>";
?>

Vous aimerez peut-être aussi