Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos
2013
TransversaldeProgramacinBsica
ProyectoCurriculardeIngenieradeSistemas
Arreglos
1.Objetivos
Asimilarelconceptodearreglo.
Identificarproblemasquepuedensersolucionadosmediantearreglos.
Solucionarproblemasutilizandoarreglos.
2.Introduccin
Una estructura de datos es una coleccin de datos que pueden ser caracterizados por su
organizacin y las operaciones que se definen en ella. Algunas veces a estas estructuras se les
llamatiposdedatos.
Una estructura de datos es una coleccin de datos que pueden ser caracterizados por su
organizacin y las operaciones que se definen en ella. Las estructuras de datos son muy
importantesenlossistemasdecomputadora.Lostiposdedatosmsfrecuentesutilizadosenlos
diferenteslenguajesdeprogramacinson:
Lasestructurasdedatosestticassonaquellasenlasqueeltamaoocupadoenlamemoriase
defineantesdelaejecucindelprogramaynopuedemodificarseduranteesta.
Arreglos
Unacaractersticaimportantequediferenciaalosdatossimplesdelosestructuradosesquepara
losdatossimplescadavariablerepresentaunelemento,mientrasqueenlosdatosestructurados
cadaidentificador(nombre)representamltiplesdatosindividuales,pudiendocadaunodeellos
serreferenciadosindividualmente.
Unarregloesunconjuntofinitoyordenadodeelementoshomogneos.Lapropiedadordenado
significaqueelprimerelemento,elsegundo,eltercero,...,elensimopuedeseridentificado.La
homogeneidadimplicaquetodosloselementosdelarreglosondatosdelmismotipo.
3.Definicin
Unarregloesunaestructuradedatos,omstcnicamente,unespaciodememoriaquepermite
almacenarunacoleccindeelementos,todosdelmismotipo.Convieneimaginarunarreglocomo
unasecuenciacontiguadeceldas(espaciosdememoria),ocasillas,encadaunadelascualesse
puedeguardarunelementodelacoleccin.Adems,esusual dibujarlocomoloilustralafigura
siguiente:
Esta figura representa un arreglo de siete casillas cada una de las cuales se puede utilizar para
guardarundato.Ladimensinotamaodeunarregloeselnmerodecasillasqueloconforman.
Debeserclaro,entonces,quelafiguraanteriorcorrespondeaunarreglodedimensin7.
Cadaunadelascasillasdeunarreglotieneasociadounnmeroquelaidentificademaneranica.
Aestenmeroselellamandiceodireccin.Enlafiguraanterior,debajodecadacasilla,aparece
sundice.EnlenguajescomoC,C++yjava,laprimeracasilladelarreglotienendice0,lasegunda
tienendice1,latercerandice2,yassucesivamente.Esmuyimportantetenerpresentequesiel
arregloesdedimensinN,laltimacasillatienendiceN1.
Otrasposiblesnotacionespuedenser:
Cuando un lenguaje de programacin no soporta de estructura de datos dinmicas eventualmente pueden ser simuladas
mediante el algoritmo apropiado.
Arreglos
Loslenguajesdeprogramacin,permitenqueelprogramadordeclarearreglosdecualquiertipoy
prcticamente de cualquier tamao. En el seudolenguaje, un arreglo se declara usando el
siguienteformatooplantilla:
<NOMBRE>:arreglo[<N>]de<TIPO>
En este formato aparecen en maysculas y entre los caracteres < y > los componentes que el
programador debe determinar. As por ejemplo, si se quiere declarar un arreglo con nombre
letras,dedimensin15yquepuedaalmacenardatosdetipocaracter,sedebeescribirlasiguiente
lnea.
letras:arreglo[15]decarcter
- Sisenecesitaguardarlasventasdiariasdeunatiendadurantelaltimasemana,sepuede
declararelsiguientearreglo:
ventas:arreglo[7]dereal
talleres:arreglo[5]dereal
laboratorios:arreglo[5]dereal
- Sisequiereguardarelvalordelasltimas12facturastelefnicasdeunacasa,sepuede
declararelsiguientearreglo:
facturasTel:arreglo[12]dereal
Losndicessecrearonparapermitirqueelprogramadorsepuedareferir,deformaespecfica,a
una cualquiera de las casillas del arreglo, tanto para guardar un dato en esa casilla, como para
obtener el dato guardado. Para referirse a una casilla particular de un arreglo se debe seguir el
siguienteformato:
<NOMBRE>[<INDICE>]
Arreglos
esdecir,sedebeescribirelnombredelarregloseguidoporelndicedelacasillaentreparntesis
cuadrados.
Ejemplos
A continuacin se muestran algunos ejemplos con el objeto de esclarecer la teora antes
presentada
EjemploUno
Paraelsiguienteejemplo,supongaquesedeclaraelarreglocifras,delasiguientemanera:
cifras:arreglo[10]deentero
i:=5
MIENTRAS(i<10)HACER
cifras[i]:=550
i:=i+1
FINMIENTRAS
La siguiente figura muestra el arreglo cifras despus de ejecutadas las instrucciones de los dos
ejemplosanteriores.Lascasillasvacasnotienenvaloresdefinidos.
100
550
550
550
550
550
0
EjemploDos
Unhistogramaparaunacoleccindedatosesunasecuenciadeparejasdelaforma(d,f),donded
esundatoyfessufrecuenciaenlacoleccin.Porejemplo,supongaqueselepidea20personas
calificar con las letras a b c d y e el desempeo del gobierno actual, y que se obtienen las
siguientesrespuestas:cbcabcdeeabbdcaccbda.Elhistogramaparaestacoleccinde
datossemuestraenseguidaendosformas:connmerosyconasteriscos:
a:4
a:****
b:5
b:*****
c:6
c:******
d:3
d:***
e:2
e:**
Arreglos
Considereelproblemadeconstruirunalgoritmoquehagaunhistogramaparaunalistadehasta
100 valores, donde cada valor es un nmero entero comprendido en el intervalo 1 al 5. Las
entradas(datosconocidos)paraelalgoritmoson:
Elnmerodedatosdelacoleccin
Lacoleccinmisma
Lasalidaesperada(datodesconocido)es:
Elhistogramadelacoleccin
En este problema, los arreglos son tiles para guardar los datos que conforman la coleccin y
tambinparaguardarelhistograma.Elnmerodedatosdelacoleccinsepuedeguardarenuna
variable entera. La siguiente grfica resume las entradas y las salidas del algoritmo que se
Totaldatos
histograma
coleccion
pretendedisear.Ademsbautizatodaslasvariablesmencionadas:
Las condiciones inciales y finales se pueden expresar mediante dos clusulas: REQUIERE y
GARANTIZA,delasiguientemanera:
REQUIERE:Elnmerodedatosdelacoleccindebesermayorqueceroymenoroigual
quecien.(100totalDatos>0)
Cadaunodeloselementosdelacoleccindebeserunnmeroentre1y5.
GARANTIZA:Calculaelhistogramaasociadoalacoleccinylopresentaenlapantalla.La
frecuenciadecadadatoaparecegraficadocomounasecuenciadeasteriscos.
Unaprimeraversindelalgoritmosolucinpuedesersimplementelasiguiente:
Inicio
Paso1.Leerelnmerodeelementosquetienelacoleccin
Paso2.Leerloselementosdelacoleccin
Paso3.Calcularelhistograma
Paso4.Presentarelhistogramaenlapantalla
Fin
Lospasos1y2soninteraccionesconelusuarioquepermitencapturarlosdatosdeentrada.La
versin inicial se puede refinar detallando estos pasos y adems, definiendo las variables
necesariasparahacerlos:
Arreglos
Procedimientoprincipal
Variables
i,totalDatos:entero
coleccin:arreglo[100]deentero
Inicio
escribir(Por favor digite el nmero de datos de la coleccin : (inferior o igual a
100))
leer(totalDatos)
i:=0
mientras(i<totalDatos)hacer
escribir(Porfavordigiteeldato:)
escribir(i+1)
leer(coleccin[i])
i:=i+1
finmientras
Paso3.Calcularelhistograma
Paso4.Presentarelhistogramaenlapantalla
Fin
LapartenucleardelasolucineselPaso3(calcularelhistograma).Enesteproblemaparticularse
sabe que todos los datos estn entre 1 y 5, lo cual quiere decir que se necesita calcular cinco
frecuencias:ladel1,ladel2,etc.Esnaturalentoncesusarunarreglode5casillasparaguardarel
histograma, de tal manera que en la casilla 0 estar la frecuencia del 1, en la casilla 1 estar la
frecuenciadel2,yassucesivamente.Aestavariableselellamarhistogramaysudeclaracin
es:
histograma:arreglo[5]deentero
Ahora,paracalcularlasfrecuenciassepuedehacerlosiguiente:
Paso3.1:inicializarlascincocasillasdelarreglohistogramaencero.
Paso3.2:Revisarlacoleccin,datopordato,eirincrementandolafrecuenciaasociadaacadauno
deellos.As,siseencuentraun5,sedebeincrementaren1lafrecuenciaasociadaal5,esdecir,se
ledebesumar1ahistograma[4].
Enseudolenguaje,elclculodelhistogramapuedeser:
i:=0
mientras(i<5)hacer //inicializalasfrecuenciasen0.Paso3.1
histograma[i]:=0
i:=i+1
finmientras
i:=0
mientras(i<totalDatos)hacer //calculalasfrecuencias.Paso3.2
d:=coleccin[i]1
histograma[d]:=histograma[d]+1
Arreglos
i:=i+1
finmientras
Finalmente,unavezcalculadoelhistograma,sedebepresentarenlapantalla.Cadadatosedebe
presentarjuntoconsufrecuencia,peroserequierequelafrecuenciaaparezcacomounacadena
de asteriscos, en vez de como un nmero. Por ejemplo, si el dato 8 aparece 3 veces en la
coleccin,enlapantalladebeaparecer8:***,comounalneadelhistograma.Estoquieredecir
queparaescribirlafrecuenciadeundato,serequiereuncicloqueescribatantosasteriscoscomo
sealafrecuencia.
Concluyendo,elpaso4(presentarelhistogramaenlapantalla)sepuederefinarcomosemuestra
enseguida:
i:=0
mientras(i<5)hacer //esteciclorecorreelhistograma
escribir(i+1)
escribir(:)
f:=histograma[i]
//fguardalafrecuenciadedatoi+1
j:=0
mientras(j<f)hacer
//estecicloescribefasteriscos
escribir(*)
j:=j+1
finmientras
escribir(saltodelinea)
i:=i+1
finmientras
El algoritmo completo se presenta enseguida. Se han definido algunas constantes para permitir
queelprogramaseamsfcilmentemodificable.
Procedimientoprincipal
Constantes
N5
/Neseltamaomximodelhistograma
MAXDATOS100
/MAXDATOSeseltamaomximodelacoleccin
Variables
i,j,totalDatos:entero
coleccion:arreglo[MAXDATOS]deentero
histograma:arreglo[N]deentero
Inicio
escribir(Por favor digite el nmero de datos de la coleccin : (inferior o igual a
100))
leer(totalDatos)
i:=0
mientras(i<totalDatos)hacer
escribir(Porfavordigiteeldato:)
Arreglos
escribir(i+1)
leer(coleccin[i])
i:=i+1
finmientras
i:=0
mientras(i<N)hacer //inicializalasfrecuenciasen0.Paso3.1
histograma[i]:=0
i:=i+1
finmientras
i:=0
mientras(i<totalDatos)hacer //esteciclocalculalasfrecuencias.Paso3.2
d:=coleccin[i]1
histograma[d]:=histograma[d]+1
i:=i+1
finmientras
i:=0
mientras(i<N)hacer //esteciclorecorreelhistograma
escribir(i+1)
escribir(:)
f:=histograma[i]
//fguardalafrecuenciadedatoi+1
j:=0
mientras(j<f)hacer
//estecicloescribefasteriscos
escribir(*)
j:=j+1
finmientras
escribir(saltodelinea)
i:=i+1
finmientras
Fin
Nota:Veranexos
Problemasparadesarrollarenclase
1. Supongaquesequiereconstruirunalgoritmoquecalifiqueunexamendeseleccinmltiple
presentado por un estudiante de Programacin Bsica. En cada una de las preguntas del
examen,elestudiantedebielegirunadecincoopciones,identificadasconlasletrasA,B,C,Dy
E.Lasentradas(datosconocidos)paraelalgoritmoson:
- Elnmerodepreguntasquetenaelexamen
- Cadaunadelasrespuestasdadasporelestudiante
- Lasrespuestascorrectas
Lasalidaesperada(datodesconocido)es:
- lanotaobtenida.Estanotacorrespondealnmerodeaciertosquetuvoelestudiante.
Arreglos
Enesteproblema,losarreglossontilesparaguardarlasrespuestascorrectasylasopciones
elegidas por el estudiante. El nmero de preguntas del examen se puede guardar en una
variableentera,aligualquelanota.Enseguidasemuestralaespecificacindeesteproblema:
totalPregunta
respuestas
nota
correctas
REQUIERE
- Elnmerodepreguntasdelexamendebesermayorquecero.(totalPreguntas>0).
- Cadaunadelasrespuestasdelestudiantedebeserunaletramaysculaqueest
entreAyE.
- Cadaunadelasrespuestascorrectasdebeserunaletramaysculaqueestentre
AyE.
GARANTIZA
- La nota dada por el algoritmo corresponde al total de respuestas acertadas del
estudiante
Escribaunalgoritmoquecumplaconestaespecificacin.
2. Escribaunalgoritmoqueefectelanormalizacindeunacoleccindenmerosreales.Para
llevar a cabo esta normalizacin, se debe en primer lugar encontrar el nmero mayor de la
coleccin; luego se divide cada nmero por dicho valor mximo, de forma que los valores
resultantes(normalizados)estncomprendidosenelintervalodel0al1.
3. Escribaunalgoritmoquesumeenbinario.Lasentradassondosnmeros(binarios)ylasalida
es la suma de estos dos valores (tambin en binario). Por ejemplo, si el usuario digita las
cadenasbinarias101y1101,larespuestadadadebeser10010.
Ejerciciosparadesarrollarencasa
1. EscribaunalgoritmoqueleadosarreglosdenmerosenterosORDENADOSascendentemente
y luego produzca la lista ordenada de la mezcla de los dos. Por ejemplo, si los dos arreglos
tienenlosnmeros136917y241017,respectivamente,lalistadenmerosenlapantalla
debeser123469101717.
2. Escribaunalgoritmoque leaunarreglodenmerosenteros,yunnmerox,yescribaenla
pantallatodoslosndicesdelasposicionesdelarreglodondeestx.Porejemplo,sielarreglo
eselqueapareceenseguidayxes2:
1
2
3 100 23
2
2
1
10
Arreglos
Elprogramadebeescribir:156.
3. Un arreglo de nmeros se llama partidario si todo nmero que est en una casilla par
(0,2,4,)esmayorquecualquieradelosnmerosqueestnenlascasillasimpares(1,3,5,).
Escribaunalgoritmoqueleaunarreglodenmerosenterosyluego,digasiespartidarioono.
Porejemplo,sielarregloeselsiguiente:
100
5
200
1 1000
0
600 50 300
4
Elprogramadebeescribir:espartidario.
Anexos
Enestaseccinsemostraracomoeslacodificacindelateoravistaenclase,paraelloseutilizara
comoherramientadecodificacin:C++.
CodificacinenC++dearreglosymatrices
Seudocdigo
Arreglo <NOMBRE>:arreglo[<N>]de<TIPO>
C++
<TIPO><NOMBRE>[<N>];
Ejemplo
#include<cstdlib>
#include<iostream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
intconstN=5;
//Neseltamaomximodelhistograma
intconstMAXDATOS=100; //MAXDATOSeseltamaomximodelacoleccin;
inti,j,totalDatos,d,f;
intcoleccion[MAXDATOS];
inthistograma[N];
cout<<("Porfavordigiteelnmerodedatosdelacoleccin:(inferioroiguala
100)");
cin>>(totalDatos);
i=0;
while(i<totalDatos){
cout<<("Porfavordigiteeldato:");
cout<<(i+1);
cin>>(coleccion[i]);
i=i+1;
11
Arreglos
}
i=0;
while(i<N){ //inicializalasfrecuenciasen0.Paso3.1
histograma[i]=0;
i=i+1;
}
i=0;
while(i<totalDatos){ //esteciclocalculalasfrecuencias.Paso3.2
d=coleccion[i]1;
histograma[d]=histograma[d]+1;
i=i+1;
}
i=0;
while(i<N){ //esteciclorecorreelhistograma
cout<<(i+1);
cout<<(":");
f=histograma[i];
//fguardalafrecuenciadedatoi+1
j=0;
while(j<f){
//estecicloescribefasteriscos
cout<<('*');
j=j+1;
cout<<endl;
i=i+1;
}
system("PAUSE");
returnEXIT_SUCCESS;
}
LecturadeProfundizacin
http://enriquebarrueto0.tripod.com/algoritmos/cap06.pdf
http://wikipnfi.wikispaces.com/file/view/Arreglo+de+Registro.pdf
http://aplicaciones.virtual.unal.edu.co/drupal/files/Arreglos%20y%20Matrices%20
%20Programacion%20de%20Computadores.pdf
Imgenes:
Lasimgenesutilizadasenestedocumentofuerontomadasdewww.google.com
12
Arreglos
Fuentes:
http://www.sites.upiicsa.ipn.mx/polilibros/portal/Polilibros/P_terminados/EstrRepreDat/F
iles/insercion_nodos.html
http://lictoledomarcelo.awardspace.com/archivos/Ejercicios_VB_Arreglos.pdf
http://cyberprogramacion.zxq.net/pdf/Arrays%20%28Vectores%20y%20Matrices%29%20
2012%20%20Luis%20U..pdf
http://www.fismat.umich.mx/mn1/manual/node6.html
http://www.herrera.unt.edu.ar/programacion/archivos/ejemplos%20de%20Arreglos.pdf
13