Académique Documents
Professionnel Documents
Culture Documents
SINTAXIS
Declaracin:
[ ] < identificador > ;
Creacin:
< identificador > = new [ tamao ] ;
EJEMPLO.
public class arreglo_c7b3r{
// Atributos de la clase arreglo_c7b3r
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
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
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
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
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
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.
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.)
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.
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:
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.
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):
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
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:
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
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])
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]])
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])
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])
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 )
|------|
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
contenga
el
valor
de
5000
lo
podemos
lograr
con
la
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 )
= { 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.
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' };
#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
#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;
}
-----------------------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
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
= "Oscar";
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.
p = strchr(nombre, 'E');
if (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;
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.
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
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
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.
! la salida es 6.0
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];
?>
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];
?>
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];
<?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]
<?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>";
?>