You are on page 1of 26

Introduccin a la Algoritmia

INTRODUCCIN A LOS ARREGLOS

Profesor: MSc. Jos Luis Alonso Correo: jl.alonso@ce.pucmm.edu.do

Objetivos de la clase
Definicin y construccin de arreglos

unidimensionales. Operaciones bsicas sobre arreglos unidimensionales.


Recorrido de un arreglo. Insercin al principio, en determinada posicin o al final. Eliminar un elemento del arreglo.

Arreglos en una dimensin


Arreglos
El arreglo es un tipo de dato estructurado formado por un

conjunto de elementos de un mismo tipo de datos.

En las unidades anteriores trabajamos con tipos de datos enteros,

flotantes, char, etc., los cuales son considerados como datos de tipo simple ya que existe una relacin de uno a uno entre la variable y el nmero de elementos (valores) que es capaz de almacenar.
almacenar a ms de un elemento (valor) a la vez, con la condicin de que todos los elementos deben ser del mismo tipo de dato, es decir, que se puede tener un arreglo de datos enteros, flotantes, etc.

En cambio un dato de tipo estructurado como el arreglo, puede

Arreglos en una dimensin


Los arreglos se clasifican de acuerdo con el nmero de

dimensiones que tienen. As, se tienen los arreglos unidimensionales (una dimensin), los bidimensionales (dos dimensiones) y los multidimensionales ( de ms de dos dimensiones ), etc. Definicin de arreglo
Un arreglo se define como una coleccin finita, homognea y

ordenada de elementos: Finita.- todo arreglo tiene un limite, es decir se sabe determinar cul ser el nmero mximo de elementos que podrn formar parte del arreglo.

Arreglos en una dimensin


Homognea.- todos los elementos de un arreglo son del mismo tipo. Ordenada.- se puede determinar cul ser el primer elemento, el Jams olvidar segundo, el tercero, , y el n-simo elemento. que un arreglo tiene un tipo representarse grficamente como se muestra a Un arreglo puede continuacin:
Arreglo

Primer elemento

Segundo elemento

N-simo elemento

NO EXISTEN ARREGLOS MEZCLADOS int, float,char

Declaracin de Arreglos

Al declarar una variable cualquiera siempre indicamos: tipo y nombre. Por ejemplo: int a; Para declarar un arreglo, se debe indicar

Tipo Nombre y Tamao

Un arreglo de 10 elementos enteros, se declara:


int ArregloEnteros[10]; Y lo podemos visualizar:

Jams olvidar, el tamao de un arreglo es una constante

ArregloEnteros

Cada elemento del grupo va a estar identificado por un valor numrico, llamado ndice. En C el primer elemento de un arreglo tiene el ndice 0. Siempre, para indicar el tamao de un arreglo, se utilizara una constante, jams una variable.

Operaciones sobre arreglos


Las operaciones que se pueden realizar con vectores o arreglos durante el proceso de resolucin de un problema usando la programacin son:
1. 2. 3. 4. 5.

6.

Recorrido (acceso secuencial) Lectura/escritura Asignacin Actualizacin (aadir, borrar insertar) Ordenacin Bsqueda

1- Recorrido (acceso secuencial)


Se puede acceder a cada elemento de un vector para introducir

datos (leer) en l o bien para visualizar su contenido (escribir).


A la operacin de efectuar una accin general sobre todos los

elementos de un vector se le denomina recorrido del vector.


Estas operaciones se realizan utilizando estructuras repetitivas,

cuyas variables de control (por ejemplo i) se utilizan como subndices del vector (por ejemplo S[i]).
El incremento del contador del bucle producir el tratamiento

sucesivo de los elementos del vector.

1- Recorrido (acceso secuencial)


Normalmente se utiliza la estructura de repeticin desde, ya que for(i = 0; i < 10; i++) se conoce de{antemano la cantidad de veces que se desea repetir el arregloEntero[ i ] = 0; bucle: }
desde i 1 hasta n hacer //-------------------------------// escribir(Introduzca el elemento ,i, del vector F: ) for(i = 0; i < 10; i++) leer(F[i]) { fin_desde scanf(%d,&a);

Tambin se pueden utilizar las estructuras de repeticin mientras }

arregloEnteros[i] = a;

y repetir:

i1 for(i = 0; i < 10; i++) mientras i <={20 hacer escribir(Introduzca el elemento ,i, del \vector F: ) printf(Elemento %d:%d n, i, ArregloEnteros[i]); leer(F[i]) } ii+1 fin_mientras

//----------------------------//

2- Lectura/escritura
La lectura/escritura de datos en arreglos normalmente

se realiza con estructuras repetitivas (usando un recorrido secuencial). Las instrucciones simples de lectura/escritura se representarn como:

leer(A[5]) lectura del elemento 5 del vector A escribir(A[8]) escribir el elemento 8 del vector A

Generalmente se desea leer o escribir el vector completo,

para lo cual se debe hacer un recorrido del vector:

desde i1 hasta n hacer escribir(Introduzca el elemento ,i, del vector F: ) leer(F[i]) fin_desde

2- Lectura/escritura
Para escribir el vector nombres:

desde i1 hasta n hacer escribir(nombres[i]) fin_desde


Para facilitar futuras operaciones con el vector, se

recomienda inicializar el vector antes de operar con l. Puede usarse cualquier valor que respete el tipo de dato del vector:
desde i 1 hasta n hacer nombre[i] * fin_desde

3- Asignacin
La asignacin de valores a un elemento del vector se

realizar con la instruccin de asignacin:


A[29] 5 asigna el valor 5 al elemento 20 del vector A Suma A[1] + A[3] A[3] A[3] + 10.8 A[1] A[4] + A[5]

Si se desea asignar valores a todos los elementos de un

vector, se debe recurrir a estructuras repetitivas e incluso selectivas. Ejemplo: si se desea dar el mismo valor a todos los elementos del vector A de tipo entero:
desde i 1 hasta 5 hacer A[i] 8 fin_desde

4- Actualizacin
La operacin de actualizacin de un vector consta a su

vez de tres operaciones ms elementales:

Aadir elementos: Insertar elementos Borrar elementos

4- Actualizacin: Aadir elementos


Aadir elementos: es la operacin de agregar un nuevo elemento
al final del vector. La nica condicin necesaria para esta operacin consistir en la comprobacin de espacio de memoria suficiente para el nuevo elemento, dicho de otra manera, que el vector no contenga todos los elementos con que fue definido. Ejemplo: se tiene un vector de edades definido para 7 elementos, pero ya tiene almacenado 5 elementos EDADES(1), EDADES(2), EDADES(3), EDADES(4) y EDADES(5). Se podrn aadir dos elementos ms al final del vector con una simple operacin de asignacin: EDADES(6) 23 EDADES(7) 20 (Si conoce los espacio del vector que estn libres.)

4- Actualizacin: Aadir elementos


Si no se sabe si el vector tiene espacios disponibles, primero debe determinarse esto antes de intentar aadir elementos al vector:
desde i 1 hasta n hacer si (edades[i]=-1) entonces escribir(Introduzca una edad:) leer(edades[i]) si_no cont cont + 1 fin_si si (cont=n) entonces escribir(El vector no tiene espacio para aadir ms elementos) fin_si fin_desde

4- Actualizacin: Aadir elementos


Si no se sabe si el vector tiene espacios disponibles, primero debe determinarse esto antes de intentar aadir elementos al vector:
desde i 1 hasta n hacer si (edades[i]=-1) entonces escribir(Introduzca una edad:) leer(edades[i]) si_no cont cont + 1 fin_si si (cont=n) entonces escribir(El vector no tiene espacio para aadir ms elementos) fin_si fin_desde

4- Actualizacin: Insertar elementos

Insertar elementos: consiste en introducir un elemento en el interior de un vector ordenado. En este caso se necesita un desplazamiento previo hacia abajo para colocar el nuevo elemento en su posicin relativa.

Ejemplo: se tiene un vector de 8 elementos que contiene nombres ordenados alfabticamente y se desea insertar dos nuevos nombres: Fernando y Luis.

4- Actualizacin: Insertar elementos

Como Fernando est entre Carlos y Gerardo se deben desplazar hacia abajo los elementos 3, 4 y 5 que pasarn a ocupar las posiciones relativas 4, 5 y 6. Posteriormente debe realizarse la misma operacin con el nombre Luis que ocupar la posicin 6.

4- Actualizacin: Insertar elementos


El algoritmo que realiza esta operacin para un vector de n elementos es el siguiente, suponiendo que hay espacio suficiente en el vector:
algoritmo insertar_elemento Const n=500 Tipo array [1 .. n] de cadena[50]: vector var vector: NOMBRES cadena[50]:nuevo entero: Pos, ocupada, cont inicio leer(nuevo) desde i 1 hasta n hacer si (NOMBRES[i]<nuevo) entonces cont cont + 1 fin_si fin_desde Pos cont + 1 desde i 1 hasta n hacer si (NOMBRES[i]<>vacio) entonces ocupada ocupada + 1 si_no cont cont + 1 fin_si fin_desde si (cont=n) entonces escribir(No se pueden aadir elementos) si_no i ocupada mientras (i >= Pos) hacer NOMBRES[i+1] NOMBRES[i] ii-1 fin_mientras NOMBRES[Pos] nuevo ocupada ocupada + 1 fin_si fin

4- Actualizacin: Borrar elementos

Borrar elementos: la operacin de borrar el ltimo elemento de un vector no representa ningn problema. El borrado de un elemento del interior del vector provoca el movimiento hacia arriba de los elementos inferiores a l para reorganizar el vector.

4- Actualizacin: Borrar elementos

Si desea borrar elemento 3 (Gerardo), debe desplazar hacia arriba los elementos de las posiciones 4 (Lorena) y 5 (Marcos).

4- Actualizacin: Borrar elementos


Ejemplo: en el vector del ejemplo anterior NOMBRES, borrar el elemento que el usuario desee. algoritmo borrar_elemento const N=500 tipo array [1 .. N] de cadena[50]: vector var vector: NOMBRES entero: j,ocupada cadena[50]: nom Inicio escribir(Introduzca el nombre a borrar:) leer(nom)

4- Actualizacin: Borrar elementos


Ejemplo: en el vector del ejemplo anterior NOMBRES, borrar el Inicio elemento que el usuario desee. escribir(Introduzca el nombre a borrar:) algoritmo borrar_elemento leer(nom) const desde i 1 hasta N hacer N=500 si (NOMBRES[i]=nom)entonces tipo ji array [1 .. N] de cadena[50]: fin_si vector fin_desde var desde i=j hasta N hacer vector: NOMBRES NOMBRES[i] NOMBRES[i+1] entero: j,ocupada fin_desde cadena[50]: nom ocupada ocupada -1 fin

Cmo calcular el tamao de un arreglo?


Operador sizeof
Un char ocupa un byte. Cuantos bytes ocupa un entero?, un real?, una cadena?

Depende de cada mquina Podemos averiguarlo usando el operador sizeof.sizeof(int) devuelve el nmero de bytes que necesita un dato de tipo int.

CUIDADO: sizeof es un operador, no una funcin.

Cmo calcular el tamao de un arreglo?


1000

Arreglo[0]

Si inicializamos una arreglo

1008 Arreglo[1] 1016 1024 1032

sin indicar su tamao

Arreglo[2]
Arreglo[3]

Cmo podemos saber el tamao, para futuros usos en el programa?

Arreglo[4]

sizeof(Arreglo) devuelve 32
sizeof(Arreglo[0]) devuelve el desfase: 8 sizeof(Arreglo)/sizeof(Arreglo[0]) devuelve 4, justo el nmero de elementos del arreglo.

Introduccin a la Algoritmia
INTRODUCCIN A LOS ARREGLOS

Profesor: MSc. Jos Luis Alonso Correo: jl.alonso@ce.pucmm.edu.do

You might also like