Академический Документы
Профессиональный Документы
Культура Документы
SEMANA 2
Arreglos
Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No est
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposicin del pblico ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTIENE LAdeSEMANA
fines comerciales 2
ninguna clase.
2
ESTE DOCUMENTO CONTIENE LA SEMANA 2
NDICE
3
ESTE DOCUMENTO CONTIENE LA SEMANA 2
ARREGLOS
OBJETIVO ESPECFICO
Comprender elementos de los arreglos, distinguiendo el uso de arreglos unidimensionales
y bidimensionales.
INTRODUCCIN
En la actualidad existen muchas maneras de almacenar la informacin en estructuras de datos que
vayan de la mano con el propsito del negocio o la empresa, y una de las estructuras ms
conocidas son los arreglos. Este modo de organizacin sirve para coordinar una gran cantidad de
informacin, segn un criterio especfico (orden alfabtico, mayor a menor u otros).
Un ejemplo de un arreglo puede ser un locker identificado con nmeros, donde se guardan
artculos deportivos clasificados por el deporte donde son utilizados. Se conocer la ubicacin de
cada uno de ellos por su nmero y as se mantendrn organizados dentro de cada casillero.
Esta semana se estudiar qu son los arreglos y las operaciones que se pueden realizar con cada
uno de ellos.
4
ESTE DOCUMENTO CONTIENE LA SEMANA 2
1. ARREGLOS
Un arreglo no es ms que una coleccin de datos organizados de manera finita y homognea, los
cuales se van ubicando de manera contigua uno tras otro. Cada uno de estos datos almacenados
tiene un elemento asociado, que permite su ubicacin y acceso, denominado ndice. Este ndice
puede ser utilizado como una variable ms.
Una vez que el programa donde se crea el arreglo est en ejecucin, la longitud de este no puede
ser modificada, debido a que estos datos son almacenados de forma temporal en la memoria
RAM.
5
ESTE DOCUMENTO CONTIENE LA SEMANA 2
1.1. CONCEPTO DE ARREGLO UNIDIMENSIONAL
Se denomina arreglo unidimensional a aquellos que almacenan n cantidad de elementos cuyo tipo
es el mismo (int, float, char, entre otros), donde la longitud del arreglo es n - 1 y su primera
posicin es 0. Es decir, si se declara un arreglo unidimensional que almacene 10 nmeros enteros,
los ndices de posicionamiento irn desde la posicin 0 hasta la posicin 9 (10 - 1). Se puede
declarar un arreglo que comience desde la posicin 1 hasta la posicin 10, pero para mayor
seguridad a la hora de realizar operaciones con un arreglo, es recomendable comenzar desde 0 y
as no perder la informacin de la primera casilla.
El valor del ndice donde se ubica el dato va encerrado entre parntesis de corchetes [] por lo
que si se quiere accesar al valor almacenado en la primera posicin de un arreglo, se debe colocar
nombre_arreglo[0] y as sucesivamente para los arreglos definidos por el usuario y sus ndices de
trabajo.
1.2.1. INSERTAR
Esta operacin consiste en agregar un nuevo elemento dentro del arreglo y para ello se debe tener
en cuenta la longitud del arreglo y la posicin del ltimo dato (el cual debe ser mayor o igual a
cero), para as determinar si es posible insertar un nuevo elemento que no sobrepase el tamao
declarado para el arreglo al inicio del programa.
Una vez que se tenga la posicin del ltimo dato no nulo insertado, se suma una posicin y se
inserta el valor (esto para arreglos no ordenados). Si, por el contrario, el arreglo est ordenado, se
debe recorrer el arreglo y determinar la posicin en la cual se insertar el valor, desplazando los
valores hacia la derecha.
Ejemplo:
Se tiene un arreglo de longitud 8, es decir, que va desde la posicin 0 hasta la 7 y dentro del cual
se encuentran 4 nmeros:
6
ESTE DOCUMENTO CONTIENE LA SEMANA 2
0 1 2 3 4 5 6 7
54 9 1 29
Se desea insertar un nuevo elemento y se tiene como contador actual 3, que es la posicin del
ltimo valor dentro del arreglo. Para insertar un valor dentro del arreglo, se hace de la siguiente
manera, teniendo como entrada los datos de longitud y contador de elementos:
En pseudocdigo:
7
ESTE DOCUMENTO CONTIENE LA SEMANA 2
En PHP:
$longi = 8;
$contador = 3
if ($contador < $longi) {
$i=$contador+1;
$arreglo[$i]=12;
$contador++;
else
{
echo El arreglo est lleno. No se puede insertar el elemento.
}
0 1 2 3 4 5 6 7
54 9 1 29 12
1.2.2. ELIMINAR
0 1 2 3 4 5 6 7
54 9 1 29 12
8
ESTE DOCUMENTO CONTIENE LA SEMANA 2
En pseudocdigo:
En PHP:
$longi = 8
$contador = 4
for ($i=1; $i<$longi;$i++){
$j = $i + 1;
$arreglo[$i] = $arreglo[$j];
}
$contador = $contador--;
9
ESTE DOCUMENTO CONTIENE LA SEMANA 2
De esta manera el arreglo quedara as:
0 1 2 3 4 5 6 7
54 1 29 12
Para borrar todo dentro de un arreglo es necesario eliminar de la memoria tanto la informacin
dentro de este como reiniciar el contador de posiciones, es decir, solo se debe inicializar de nuevo
el arreglo y de esta manera se eliminan los ndices y los datos.
Ejemplo:
Contador = 3
0 1 2 3 4 5 6 7
54 1 29 12
Se inicializa el contador en 0:
contador<-0
0 1 2 3 4 5 6 7
En PHP:
$contador = 0
10
ESTE DOCUMENTO CONTIENE LA SEMANA 2
1.2.4. BUSCAR
Existen dos tipos de bsqueda de valores dentro de un arreglo: secuencial y binaria. Se utiliza una
u otra forma segn el orden de los elementos del arreglo.
Si, por el contrario, el arreglo est ordenado, se utiliza la bsqueda binaria, que no es ms que
dividir en dos el arreglo y comparar el valor buscado con el elemento central del arreglo.
o Si el valor central es menor, entonces se procede a buscar el valor desde el centro hacia la
derecha, dividiendo en ms ocasiones de ser necesario y aplicando la misma regla, hasta
encontrar el valor o llegar al final del arreglo.
Ejemplo:
Se tiene el arreglo:
0 1 2 3 4
1 14 71 23 8
Debido a que el arreglo est desordenado, se emplear la bsqueda secuencial, la cual se realiza
de la siguiente manera:
11
ESTE DOCUMENTO CONTIENE LA SEMANA 2
En pseudocdigo:
Algoritmo buscar_elemento
dimension arreglo[5]
arreglo[0] <- 1
arreglo[1] <- 14
arreglo[2] <- 71
arreglo[3] <-23
arreglo[4] <- 8
longi <- 5 Longitud del arreglo.
12
ESTE DOCUMENTO CONTIENE LA SEMANA 2
En PHP:
$arreglo = array();
$arreglo[1] = 1;
$arreglo[2] = 14;
$arreglo[3] = 71;
$arreglo[4] = 23;
$arreglo[5] = 8;
$longi = 5;
$encontrado = false;
$i = 0;
$buscado = 23;
while (($encontrado==false) && ($i<$longi)) {
if ($arreglo[$i]==$buscado) {
$encontrado = true;
$i = $longi+1;
echo 'El elemento est en la posicin: '.$i;
} else {
$i = $i++;
}
}
if (($i==$longi) && ($encontrado==false)) {
echo 'No se encontr el elemento en el arreglo.';
}
1.2.5. ORDENAR
Es importante mantener organizados los arreglos para optimizar el tiempo de respuesta al realizar
una operacin con sus elementos. Los arreglos numricos pueden ser ordenados segn sus
valores, de manera ascendente o descendente, mientras que los de cadenas o caracteres se
pueden organizar por orden alfabtico (tambin de manera ascendente o descendente). Todo lo
que se necesita saber es cmo se requiere su ordenamiento y aplicar alguno de los mtodos ms
comunes para ello. Dentro de los ms conocidos estn:
13
ESTE DOCUMENTO CONTIENE LA SEMANA 2
caso anterior. Y as para todos los elementos del arreglo hasta que se llegue al final del mismo y se
tenga todo el arreglo ordenado.
Ejemplo en pseudocdigo:
Algoritmo ordenamiento_por_seleccion
Dimension arreglo[5]
arreglo[0] <- 1
arreglo[1] <- 14
arreglo[2] <-71
arreglo[3] <- 23
arreglo[4] <- 8
longi <- 5;
Mostrar "Arreglo Antes del Ordenamiento: "
Para i <- 0 Hasta longi-1 Hacer
Mostrar arreglo[i]
FinPara
14
ESTE DOCUMENTO CONTIENE LA SEMANA 2
Salida:
Ejemplo en PHP:
<?php
$arreglo=array(1,14,71,23,8);
$longi = count($arreglo);
echo 'Arreglo Antes del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
for ($i=0; $i<$longi-1; $i++)
{
$min=$i;
for($j=$i+1;$j<$longi;$j++)
if($arreglo[$min]>$arreglo[$j]){
$min=$j;
$temporal=$arreglo[$min];
$arreglo[$min]=$arreglo[$i];
$arreglo[$i]=$temporal;
}
}
echo 'Arreglo Despues del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
?>
15
ESTE DOCUMENTO CONTIENE LA SEMANA 2
Salida:
Ejemplo en pseudocdigo:
Algoritmo ordenamiento_burbuja
Dimension arreglo[5]
arreglo[0] <- 1
arreglo[1] <- 14
arreglo[2] <- 71
arreglo[3] <- 23
arreglo[4] <- 8
longi <- 5;
Mostrar "Arreglo Antes del Ordenamiento: "
Para i <- 0 Hasta longi-1 Hacer
Mostrar arreglo[i]
FinPara
Para i<-1 Hasta longi Hacer
Para j <- 0 Hasta longi-i Hacer
m <- j+1
Si m<longi Entonces
Si arreglo[j]>arreglo[m] Entonces
temporal <- arreglo[j]
arreglo[j] <-arreglo[m]
arreglo[m] <-temporal
FinSi
FinSi
16
ESTE DOCUMENTO CONTIENE LA SEMANA 2
FinPara
FinPara
Mostrar "Arreglo Despues del Ordenamiento: "
Para i <- 0 Hasta longi-1 Hacer
Mostrar arreglo[i]
FinPara
FinAlgoritmo
Salida:
Ejemplo en PHP:
<?php
$arreglo=array(1,14,71,23,8);
$longi = sizeof($arreglo);
echo 'Arreglo Antes del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
for ($i=1;$i<$longi;$i++) {
for ($j=0;$j<$longi-$i;$j++) {
$m = $j+1;
if ($m<$longi) {
if ($arreglo[$j]>$arreglo[$m]) {
$temporal = $arreglo[$j];
17
ESTE DOCUMENTO CONTIENE LA SEMANA 2
$arreglo[$j] = $arreglo[$m];
$arreglo[$m] = $temporal;
}
}
}
}
echo 'Arreglo Despues del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
?>
Salida:
Este ordenamiento se conoce como mtodo de la baraja, debido a que es el que implementan los
jugadores de cartas cuando tienen un mazo.
Es muy ineficiente si se tiene gran cantidad de datos, ya que en este mtodo se considera cada
elemento del arreglo a la vez y se compara bien sea por la izquierda o la derecha, dependiendo de
su ordenamiento. Se toma como primer elemento el que se ubica en la segunda posicin y se
compara con el anterior; si corresponde el cambio, el de la segunda se guarda en una variable
temporal y el anterior se almacena en la segunda posicin, y el que se almacen en la temporal se
ubica en la primera posicin.
Ejemplo en pseudocdigo:
Algoritmo ordenamiento_por_insercion
Dimension arreglo[5]
arreglo[0] <- 1
arreglo[1] <- 14
arreglo[2] <- 71
arreglo[3] <- 23
arreglo[4] <- 8
longi <- 5;
Mostrar "Arreglo Antes del Ordenamiento: "
Para i <- 0 Hasta longi-1 Hacer
Mostrar arreglo[i]
18
ESTE DOCUMENTO CONTIENE LA SEMANA 2
FinPara
Para i<-0 Hasta longi-1 Hacer
Si i<longi Entonces
temporal <- arreglo[i]
j <- i-1
Mientras j>=0 Y arreglo[j]>temporal Hacer
arreglo[j+1] <-arreglo[j]
j <- j-1
FinMientras
arreglo[j+1] <- temporal
FinSi
FinPara
Mostrar "Arreglo Despues del Ordenamiento: "
Para i <-0 Hasta longi-1 Hacer
Mostrar arreglo[i]
FinPara
FinAlgoritmo
Salida:
19
ESTE DOCUMENTO CONTIENE LA SEMANA 2
Ejemplo en PHP:
<?php
$arreglo=array(1,14,71,23,8);
$longi = count($arreglo);
echo 'Arreglo Antes del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
for ($i=1;$i<$longi;$i++)
{
$temporal = $arreglo[$i];
$j = $i - 1;
while ($j>=0 && $arreglo[$j]>$temporal)
{
$arreglo[$j+1]=$arreglo[$j];
$j--;
}
$arreglo[$j+1]=$temporal;
}
echo 'Arreglo Despues del Ordenamiento: '."\n";
for ($i=0;$i<$longi;$i++) {
echo $arreglo[$i]."\n";
}
?>
Salida:
1.3.1. SUMAS
Para realizar sumas con los arreglos se debe tener en cuenta que no se suma un arreglo con otro,
sino que se suman los valores dentro del arreglo. Para sumar dos elementos se debe conocer su
posicin y declarar una variable que guarde el resultado, por ejemplo:
20
ESTE DOCUMENTO CONTIENE LA SEMANA 2
variable <- arreglo[a] + arreglo[b] pseudocdigo
$variable = $arreglo[$a] + $arreglo[$v]; PHP
Si, por el contrario, se desean sumar todos los elementos dentro de un arreglo, se debe tener la
longitud del arreglo y de esta manera se recorre casilla por casilla y se va guardando la sumatoria
hasta llegar al final del arreglo.
Si se tiene un arreglo cuya longitud es 5, se realizar un ciclo para recorrerlo y sumar sus
elementos hasta que se llegue a la posicin longitud -1.
Ejemplo en pseudocdigo:
Longi <- 5
acumulador <- 0
Para i<-0 Hasta longi-1 Hacer
acumulador <- acumulador + arreglo[i]
FinPara
mostrar El total de la suma de los elementos del arreglo es: acumulador
Ejemplo en PHP:
$longi = 5;
$acumulador = 0;
For ($i=0;$i<$longi;$i++){
$acumulador = $acumulador + arreglo[$i];
}
echo El total de la suma de los elementos del arreglo es: .$acumulador;
1.3.2. PROMEDIOS
Para calcular promedios con los arreglos, se debe tener en cuenta que no se calculan con el
arreglo directamente, sino con los valores dentro del arreglo. Para calcular el promedio de 2
elementos se debe conocer sus posiciones y declarar una variable que guarde el resultado, algo
como lo siguiente:
Si, por el contrario, se desea calcular el promedio de todos los elementos dentro de un arreglo, se
debe tener la longitud del arreglo y, de esta manera, se recorre casilla por casilla y se va
guardando la sumatoria hasta llegar al final del arreglo, para luego dividirla entre la cantidad de
21
ESTE DOCUMENTO CONTIENE LA SEMANA 2
elementos en el arreglo. Si se tiene un arreglo cuya cantidad de valores es 5, se realizar un ciclo
para recorrerlo, sumando sus elementos hasta que se llegue a la posicin longitud -1, para luego
dividir entre 5.
Ejemplo en pseudocdigo:
contador <- 5
acumulador <- 0
Para i<-0 Hasta longi-1 Hacer
acumulador <- acumulador + arreglo[i]
FinPara
promedio <- acumulador/ contador
mostrar El promedio de los elementos del arreglo es: promedio
Ejemplo en PHP:
$ contador = 5;
$acumulador = 0;
For ($i=0;$i<$longi;$i++){
$acumulador = $acumulador + arreglo[$i];
}
$promedio = $acumulador/$contador
echo El promedio de los elementos del arreglo es:. $promedio;
1.3.3. MAYOR/MENOR
Para el valor mayor o menor dentro de un arreglo se debe declarar una variable inicializada en
cero y recorrer el arreglo comparando cada elemento con la variable declarada. Por ejemplo, si se
tiene un arreglo cuya cantidad de valores es 5, se realizar un ciclo para recorrerlo, buscando el
mayor valor del arreglo, sumando sus elementos hasta que se llegue a la posicin longitud -1, y
luego se divide entre 5.
Ejemplo en pseudocdigo:
Algoritmo buscar_mayor
Dimension arreglo[5]
arreglo[0] <- 1
arreglo[1] <- 14
arreglo[2] <- 71
arreglo[3] <- 23
arreglo[4] <- 8
longi <- 5;
22
ESTE DOCUMENTO CONTIENE LA SEMANA 2
valormayor <- 0
Para i<-0 Hasta longi-1 Hacer
Si arreglo[i] > valormayor Entonces
valormayor <- arreglo[i]
FinSi
FinPara
mostrar "El valor mayor del arreglo es: " valormayor
FinAlgoritmo
Ejemplo en PHP:
<?php
$arreglo=array(1,14,71,23,8);
$longi = count($arreglo);
$valormayor=0;
for ($i=0;$i<$longi-1;$i++)
{
if ($arreglo[$i] > $valormayor){
$valormayor=$arreglo[$i];
}
}
echo "El valor mayor del arreglo es: ".$valormayor;
?>
1.4.1. MATRICES
Los arreglos bidimensionales son conocidos como matrices debido a que su distribucin va
simultneamente en filas y columnas. En estos arreglos, los elementos ahora tienen ndices
compuestos por una fila y una columna, de la siguiente manera:
nombre_arreglo[indice_fila][indice_columna]
Ejemplo en pseudocdigo:
Proceso crear_arreglo_2x2
Dimension arreglo[2,2];
arreglo[0,0] <-5;
23
ESTE DOCUMENTO CONTIENE LA SEMANA 2
arreglo[0,1] <-6;
arreglo[1,0] <-7;
arreglo[1,1] <-8;
mostrar "El valor de la fila 1 y columna 1 es: " arreglo[0,0]
mostrar "El valor de la fila 1 y columna 2 es: " arreglo[0,1]
mostrar "El valor de la fila 2 y columna 1 es: " arreglo[1,0]
mostrar "El valor de la fila 2 y columna 2 es: " arreglo[1,1]
FinProceso
Ejemplo en PHP:
<?php
$arreglo = array();
$arreglo[1][1] = 5;
$arreglo[1][2] = 6;
$arreglo[2][1] = 7;
$arreglo[2][2] = 8;
echo 'El valor de la fila 1 y columna 1 es: '.$arreglo[1][1]."<br>";
echo 'El valor de la fila 1 y columna 2 es: '.$arreglo[1][2]."<br>";
echo 'El valor de la fila 2 y columna 1 es: '.$arreglo[2][1]."<br>";
echo 'El valor de la fila 2 y columna 2 es: '.$arreglo[2][2]."<br>";
?>
1.4.2. CLAVE-DATO
A la hora de crear un arreglo de tipo matriz, tambin se pueden asociar valores a travs de claves,
y as generar lo que se denomina un arreglo asociativo, que se representa de la siguiente manera:
nombre_arreglo[clave][valor]
Ejemplo en pseudocdigo:
Proceso arreglo_clave_dato
Dimension arreglo[3];
arreglo['NOMBRE'] <-'MARIA';
arreglo['APELLIDO'] <-'PAZ';
arreglo['RUT'] <-'123456789-0';
mostrar "La estudiante " arreglo['APELLIDO'] " , " arreglo['NOMBRE'] " titular del rut "
24
ESTE DOCUMENTO CONTIENE LA SEMANA 2
arreglo['RUT']
FinProceso
Salida:
Ejemplo en PHP:
<?php
$arreglo = array();
$arreglo['NOMBRE'] = 'MARIA';
$arreglo['APELLIDO'] = 'PAZ';
$arreglo['RUT'] = '123456789-0';
echo 'La estudiante '.$arreglo['APELLIDO'].' , '.$arreglo['NOMBRE'].' titular
del rut '.$arreglo['RUT'];
?>
De esta manera, no es necesario tener un nmero para ubicar un dato, sino solo conocer la clave
con la que fue almacenado.
25
ESTE DOCUMENTO CONTIENE LA SEMANA 2
1.4.3. PAR ORDENADO
Cuando se habla de par ordenado en un arreglo, se hace referencia al conjunto de dos nmeros
que representan las coordenadas o el ndice donde est ubicado un valor dentro de una matriz.
Este valor o par est encerrado dentro de parntesis y sus componentes representan un ejemplo
de un plano cartesiano: el primer elemento dentro del parntesis representa al eje X, que sern las
filas del arreglo, y el segundo elemento, el eje Y, que sern las columnas del arreglo.
COLUMNAS
fil 0 fil 0
col 0 col 1
F
I 5 6
L
A 7 8
S
fil 1 fil 1
col 0 col 1
26
ESTE DOCUMENTO CONTIENE LA SEMANA 2
COMENTARIO FINAL
Para un desarrollo en el campo laboral, se debe tener presente que existen muchas estructuras de
datos y representaciones en esquemas matemticos, para lo cual hace falta tener una visin clara
de lo que se desea almacenar y cmo se desea enlazar esos datos para su uso posterior.
Es necesario tener en claro que la manera como se almacene la data influir en el rendimiento del
procesador y en la respuesta y uso de memoria, por lo cual un buen uso de ndices y claves es lo
ms recomendable para indexar arreglos.
A lo largo del tiempo se crearn ms tipos de datos y sus usos irn ms all de simples valores
almacenados de forma contigua, por lo cual es importante aprender las bases de almacenamiento
y ordenamiento de datos para comprender de mejor manera las bsquedas dentro de ellos.
27
ESTE DOCUMENTO CONTIENE LA SEMANA 2
REFERENCIAS
Aho, A.; Ullman, J. y Hopcroft, J. (1998). Estructuras de datos y algoritmos. 2. edicin. Mxico:
Alhambra Mexicana.
https://youtu.be/e2bD6mhCVc4
28
ESTE DOCUMENTO CONTIENE LA SEMANA 2
29
ESTE DOCUMENTO CONTIENE LA SEMANA 2