Arreglo S

Descargar como ppsx, pdf o txt
Descargar como ppsx, pdf o txt
Está en la página 1de 47

ARREGLOS

 Un arreglo es una variable capaz de guardar


uno o más valores del mismo tipo. Un arreglo
consta de posiciones de memoria contiguas,
para referirse a una posición en particular o
elemento dentro de un arreglo especificamos
el nombre del arreglo y el número de posición
del elemento particular dentro del mismo.
Índices de un arreglo
 Los índices son números que se utilizan para identificar a
cada uno de los componentes de un arreglo. A manera de
ejemplo, podemos pensar en los casilleros del estante de
paquetería de un supermercado, así que si deseamos
guardar o retirar un paquete nos dirigimos a paquetería el
cual sería el nombre del arreglo; luego, el empleado guarda
nuestro paquete dentro de un casillero con un número
específico el cual sería el índice para identificar el lugar del
casillero en paquetería donde quedó guardado el paquete.
Supongamos que el empleado nos entrega una ficha con el
número 12 impreso sobre la misma; de tal manera que
podemos decir que nuestro paquete está guardado en
paquetería(12) ó paqueteria[12].
Dimensiones de un arreglo

 De acuerdo a la forma en que se construye o


declara un arreglo, éste puede ser clasificado
como: unidimensional, bidimensional y
multidimensional..
Arreglos Unimensional,
Bidimensional y
Multidimensional

 Un arreglo unidimensional es un tipo de datos


estructurado que está formado de una
colección finita y ordenada de datos del
mismo tipo. Es la estructura natural para
modelar listas de elementos iguales.
Arreglo Bidimensional

 Este tipo de arreglos al igual que los


anteriores es un tipo de dato estructurado,
finito ordenado y homogéneo. El acceso a
ellos también es en forma directa por medio
de un par de índices.
 Los arreglos bidimensionales se usan para
representar datos que pueden verse como
una tabla con filas y columnas.
Arreglo Multidimensional

 Este también es un tipo de dato estructurado,


que está compuesto por n dimensiones. Para
hacer referencia a cada componente del
arreglo es necesario utilizar n índices, uno
para cada dimensión
DECLARACION DE ARREGLOS

La declaración de los arreglos, ocupan espacio


en memoria. El programador especifica el tipo
de cada elemento y el numero de elementos que
se requieren para el arreglo, mediante la
siguiente estructura:

<tipo> < nombreArreglo > [ tamañoArreglo] ;


Int c [ 20] ; arreglo de 12 enteros
EJEMPLO DE USO DE ARREGLOS
ARREGLO DE 1 DIMENSION

 Declaración
 int a[3]; // forma una secuencia de tres elementos
 Nombre del grupo
 a
 Nombre de los elementos
 a[0] → primer elemento
 a[1] → segundo elemento
 a[2] → tercer elemento
ARREGLO DE 2 DIMENSIONES
 Declaración
 char m[2][3]; // forma una tabla de dos filas y tres columnas
 // cada fila es un arreglo de una dimensión
 // la declaración indica que hay dos arreglos de una dimensión
 Nombre del grupo
 m → indica la localización del grupo en la memoria
 Nombre de las filas
 m[0] → primera fila → indica la localización de la fila dentro del grupo
 m[1] → segunda fila → indica la localización de la fila dentro del grupo
 Nombre de los elementos
 m[0][0] → primer elemento
 m[0][1] → segundo elemento
 m[0][2] → tercer elemento
 m[1][0] → cuarto elemento
 m[1][1] → quinto elemento
 m[1][2] → sexto elemento
ARREGLO DE 3 DIMENSIONES
 Declaración
 double w[2][2][3]; // forma dos tablas de dos filas y tres columnas
 // cada fila es una secuencia de tres elementos
 // cada fila es un arreglo de una dimensión
 // la declaración indica que hay dos arreglos de dos dimensiones
 // los arreglos de dos dimensiones tienen a su vez dos arreglos de una dimensión
 Nombre del grupo
 w → indica la localización del grupo en la memoria
 Nombre de las tablas
 w[0] → primera tabla → indica la localización de la tabla dentro del grupo
 w[1] → segunda tabla→ indica la localización de la tabla dentro del grupo
 Nombre de las filas
 w[0][0] → primera tabla, primera fila
 w[0][1] → primera tabla, segunda fila
 w[1][0] → segunda tabla, primera fila
 w[1][1] → segunda tabla, segunda fila
ARREGLO 1
ARREGLO 2
ARREGLO 3
ARREGLO 4
ARREGLO 5
ARREGLO 6
PASO DE ARREGLOS A FUNCIONES
*Cuando un argumento (parametro) de una funcion es un arreglo, el
parametro (arreglo) se pasa por referencia.

tipo funcion(..., tipo x[], ...) {

// cuerpo de la funcion
...
}

*La forma mas usual de pasar un arreglo como parametro a una funcion
es por medio de punteros:

tipo funcion(..., tipo *x, ...) {


// cuerpo de la funcion
...
}
Escriba una funcion en C llamada imprimir que reciba como argumento un
vector formado por 0; 1; 2; : : : ; 9 y los muestre por pantalla.

Solucion
pasar arreglo.c
#include<stdio.h>
#define n 10 // define n=10
/* declaracion de la funcion imprimir
de dos maneras */
void imprimir1(int x[]);
void imprimir2(int *x);
main(){
int x[n], i;
// Inicializa arreglo
for (i=0; i<n; i++)
x[i] = i;
imprimir1(x); // Imprime arreglo
// imprimir2(x);
{
// Definicion de la funcion imprimir1

void imprimir1(int x[]) {


int i;
for (i=0; i<n; i++)
printf(" %d nt", x[i]);
}
// Definicion de la funcion imprimir2

void imprimir2(int *x) {


int i;
for (i=0; i<n; i++)
printf(" %d nt", x[i]);
}
Ejemplo
Escriba un programa en C que calcule el promedio de los elementos de un
vector de tama~no n. El programa debe constar de tres funciones, una que
lea el vector (leer vector), otra que imprima el vector por pantalla
(escribir vector) y otra que calcule el promedio (promedio).

Solucion

Datos de entrada:
n: tamaño del vector
x[n]: vector

Funciones:
void leer vector(double x[], int n)
void escribir vector(double x[], int n)
double promedio(double x[], int n)
#include<stdio.h>
// Declaracion de las funciones
void leer vector(double x[], int n);
void escribir vector(double x[], int n);
double promedio(double x[], int n);
main(){
int n;
printf("Ingrese numero de elementos: ");
scanf("%d", &n);
double x[n];
leer vector(x, n);
escribir vector(x, n);
printf("nnPromedio = %lf", promedio(x,n));
}
void leer vector(double x[], int n) f
int i;
for (i=0; i<n; i++) {
printf("x( %d) = ", i+1);
scanf("%lf", &x[i]);
}
}
// Definicion de las funciones
void escribir vector(double x[], int n)
{
int i;
for (i=0; i<n; i++)
printf(" %5.8lf nt", x[i]);
}
double promedio(double x[], int n) {
int i;
double suma = 0.0;
for (i=0; i<n; i++) suma += x[i];
return suma/n;
}
ORDENAMIENTO DE ARREGLOS

1. Ordenamiento Burbuja (Bubblesort)


2. Ordenamiento de Selección
3. Ordenamiento por Inserción
4. Ordenamiento Rápido (Quicksort)
Ordenamiento Burbuja (Bubblesort)

 Consiste en ciclar repetidamente a través de la lista, comparando elementos adyacentes de dos en


dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian.
 Vamos a ver un ejemplo. Esta es nuestra lista:
 4-3-5-2-1
 Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el primero con el
segundo elemento. 4 es mayor que 3, así que intercambiamos. Ahora tenemos:
 3-4-5-2-1
 Ahora comparamos el segundo con el tercero: 4 es menor que 5, así que no hacemos nada.
Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y obtenemos:
 3-4-2-5-1
 Comparamos el cuarto y el quinto: 5 es mayor que 1. Intercambiamos nuevamente:
 3-4-2-1-5
 Repitiendo este proceso vamos obteniendo los siguientes resultados:
 3-2-1-4-5
 2-1-3-4-5
 1-2-3-4-5
Ordenamiento de selección
 Buscas el elemento más pequeño de la lista.
 Lo intercambias con el elemento ubicado en la primera posición de la lista.
 Buscas el segundo elemento más pequeño de la lista.
 Lo intercambias con el elemento que ocupa la segunda posición en la lista.
 Repites este proceso hasta que hayas ordenado toda la lista.
 Vamos a ordenar la siguiente lista (la misma del ejemplo anterior :-) ):
 4-3-5-2-1
 Comenzamos buscando el elemento menor entre la primera y última posición. Es el
1. Lo intercambiamos con el 4 y la lista queda así:
 1-3-5-2-4
 Ahora buscamos el menor elemento entre la segunda y la última posición. Es el 2.
Lo intercambiamos con el elemento en la segunda posición, es decir el 3. La lista
queda así:
 1-2-5-3-4
 Buscamos el menor elemento entre la tercera posición (sí, adivinaste :-D) y la
última. Es el 3, que intercambiamos con el 5:
 1-2-3-5-4
 El menor elemento entre la cuarta y quinta posición es el 4, que intercambiamos con
el 5:
 1-2-3-4-5
Ordenamiento por Inserción
 no podemos desplazar los elementos así como así o se perderá un elemento. Lo que hacemos es guardar una
copia del elemento actual y desplazar todos los elementos mayores hacia la derecha. Luego copiamos el elemento
guardado en la posición del último elemento que se desplazó.
 4-3-5-2-1
 temp toma el valor del segundo elemento, 3. La primera carta es el 4. Ahora comparamos: 3 es menor que 4.
Luego desplazamos el 4 una posición a la derecha y después copiamos el 3 en su lugar.
 4-4-5-2-1
 3-4-5-2-1
 El siguiente elemento es 5. Comparamos con 4. Es mayor que 4, así que no ocurren intercambios.
 Continuamos con el 2. Es menor que cinco: desplazamos el 5 una posición a la derecha:
 3-4-5-5-1
 Comparamos con 4: es menor, así que desplazamos el 4 una posición a la derecha:
 3-4-4-5-1
 Comparamos con 3. Desplazamos el 3 una posición a la derecha:
 3-3-4-5-1
 Finalmente copiamos el 2 en su posición final:
 2-3-4-5-1
 El último elemento a ordenar es el 1. Cinco es menor que 1, así que lo desplazamos una posición a la derecha:
 2-3-4-5-5
 Continuando con el procedimiento la lista va quedando así:
 2-3-4-4-5
 2-3-3-4-5
 2-2-3-4-5
 1-2-3-4-5
Ordenamiento Rápido (Quicksort)

 Eliges un elemento de la lista. Puede ser cualquiera Lo llamaremos


elemento de división
 Buscas la posición que le corresponde en la lista ordenada
 Acomodas los elementos de la lista a cada lado del elemento de
división, de manera que a un lado queden todos los menores que él y
al otro los mayores En este momento el elemento de división separa la
lista en dos sublistas
 Realizas esto de forma recursiva para cada sublista mientras éstas
tengan un largo mayor que 1. Una vez terminado este proceso todos
los elementos estarán ordenados.
 Una idea preliminar para ubicar el elemento de división en su posición
final sería contar la cantidad de elementos menores y colocarlo un
lugar más arriba. Pero luego habría que mover todos estos elementos
a la izquierda del elemento, para que se cumpla la condición y pueda
aplicarse la recursividad. Reflexionando un poco más se obtiene un
procedimiento mucho más efectivo. Se utilizan dos índices: i, al que
llamaremos contador por la izquierda, y j, al que llamaremos contador
por la derecha. El algoritmo es éste:
CONTINUACION
 Recorres la lista simultáneamente con i y j: por la izquierda con i (desde el primer elemento), y por la derecha con j (desde el
último elemento).
 Cuando lista[i] sea mayor que el elemento de división y lista[j] sea menor los intercambias.
 Repites esto hasta que se crucen los índices.
 El punto en que se cruzan los índices es la posición adecuada para colocar el elemento de división, porque sabemos que a
un lado los elementos son todos menores y al otro son todos mayores (o habrían sido intercambiados).
 Al finalizar este procedimiento el elemento de división queda en una posición en que todos los elementos a su izquierda son
menores que él, y los que están a su derecha son mayores.
 Esta vez voy a cambiar de lista ;-D
 5-3-7-6-2-1-4
 Comenzamos con la lista completa. El elemento divisor será el 4:
 5-3-7-6-2-1-4
 Comparamos con el 5 por la izquierda y el 1 por la derecha.
 5-3-7-6-2-1-4
 5 es mayor que cuatro y 1 es menor. Intercambiamos:
 1-3-7-6-2-5-4
 Avanzamos por la izquierda y la derecha:
 1-3-7-6-2-5-4
 3 es menor que 4: avanzamos por la izquierda. 2 es menor que 4: nos mantenemos ahí.
 1-3-7-6-2-5-4
ARREGLOS

MEDIA, MEDIANA Y MODA


MEDIA

Se suma todos los elementos que se disponen y se


divide entre el total de elementos.
LA MEDIANA

 Se calcula ordenando los datos del menor al


mayor y si la cantidad de datos es Impar: se
selecciona en numero del medio de la lista
 Par: si hay dos números que quedan en
medio, los cuales de sumas y de dividen entre
dos, el resultado de dicha división es la
mediana.
 Se puede hallar solo para variables
cuantitativas.
MODA

Es el numero que mas se repite en el


conjunto de datos, se puede hallar la
moda para variables cualitativas y
cuantitativas, si hay dos datos que mas se
repiten sobre, todos los demás se dice
que el conjunto de datos es BIMODAL y
se reportan las dos modas si hay mas de
dos se dice que es MULTIMODAL y se
reportan los datos correspondientes.
EJEMPLO

Num. De Muestra Estatura (medidas en metros)


I X1
1 1.7
2 1.7
3 1.8
Determinar
a) Media = 1.73m
b) Mediana = 1.7m
c) Moda = 1.7m

X= X1+X2+X3 1.7 + 1.7 + 1.8


_____________= ______________ = 1.73
3 3
BÚSQUEDA BINARIA

Es el método mas eficaz para encontrar elementos


en un arreglo ordenado.
El proceso comienza comparando el elemento
central del arreglo con el valor buscado
.
Por ejemplo si tenemos este valor
int
vector[10]={2,4,6,8,10,12,14,16,18,20
 1 Se determinan un índice arriba y un índice abajo, Iarriba=0 e Iabajo=10
respectivamente.
 2 Se determina un índice central, Icentro = (Iarriba + Iabajo)/2, en este caso
quedaría Icentro = 5.
 3 Evaluamos si vector[Icentro] es igual a la clave de búsqueda, si es igual ya
encontramos la clave y devolvemos Icentro.
 4 Si son distintos, evaluamos si vector[Icentro] es mayor o menor que la
clave, como el arreglo está ordenado al hacer esto ya podemos descartar
una mitad del arreglo asegurándonos que en esa mitad no está la clave que
buscamos. En nuestro caso vector[Icentro] = 5 < 6, entonces la parte del
arreglo vector[0…5] ya puede descartarse.
 5 Reasignamos Iarriba o Iabajo para obtener la nueva parte del arreglo en
donde queremos buscar. Iarriba, queda igual ya que sigue siendo el tope.
Iabajo lo tenemos que subir hasta 6, entonces quedaría Iarriba = 10, Iabajo
= 6. Y volvemos al paso 2.
ARREGLOS CON MULTIPLES SUBINDICES

LOS ARREGLOS CON MULTIPLES


SUBINDICES(CON DOS SUBINDICES)CON
FRECUENCIA SE UTILIZAN PARA
REPRESENTAR TABLAS DE VALORES QUE
CONSISTEN EN INFORMACION
ACOMODADA EN FILAS Y COLUMNAS.
* PARA IDENTIFICAR UN ELEMENTO
EN PARTICULAR DE UNA
TABLA,DEBEMOS ESPECIFICAR,LOS
DOS SUBINDICES; POR
CONVENCION. EL PRIMERO
IDENTIFICA LA FILA DEL ELEMENTO,
Y EL SEGUNDO IDENTIFICA A LA
COLUMNA.
*LO S ARREGLOS QUE REQUIEREN DOS
SUBINDICES PARA IDENTIFICAR UN
ELEMENTO EN PARTICULAR SE CONOCEN
COMO ARREGLOS CON DOS SUBINDICES.
LOS ARREGLOS CON MULTIPLES SUBINDICES
PUEDEN TENER MAS DE DOS SUBINDICES.
LOS ARREGLOS CON MULTIPLES SUBINDICES
PUEDEN INICIALIZARSE EN DECLARACIONES
COMO UN ARREGLO CON UN SOLO
SUBINDICE. UN ARREGLO CON DOS
SUBINDICES.

b [2][2] PODRIA DECLARARSE E


INICIALIZARSE CON int b [ ] [ ] ={ {1,2},
{3,4} };
* LOS VALORES SE AGRUPAN POR FILAS,
ENTRE LLAVES.
ENTONCES 1 Y 2 INICIAN b [0] [0] [0] b
[o] [1], y 3 y 4 INICIALIZAN
b [1] [1]. El COPILADOR DETERMINA EL
NUMERO DE FILAS,CONTANDO EL
NUMERO DE LISTAS DE
SUBINICIALIZACION(REPRESENTADAS
POR CONJUNTO DE LLAVES)EN LA LISTA
PRINCIPAL DE INICIALIZACION.
EL COPILADOR DETERMINA EL NUMERO DE
COLUMNAS EN CADA FILA, CONTANDO EL
NUMERO DE VALORES INICIALIZADORES EN
LA LISTA DE SUBINICIALIZACION PARA ESA
FILA.
*LOS ARREGLOS CON MULTIPLES
SUBINDICES SE MANTIENEN COMO
ARREGLOS DE ARREGLOS, LA
DECLARACION
Int b [ ] [ ]={ {1,2}, {3,4,5} };
CREA UN ARREGLO ENTERO b CON
LA FILA 0 QUE CONTIENE DOS
ELEMENTOS (1 Y 2), Y LA FILA QUE
CONTIENE TRES ELEMENTOS (3,4 Y 5)
COLUMNA 0 COLUMNA 1 COLUMNA 3

FILA 0
FILA1
FILA2
SUBINDICE DE COLUMNA
SUBINDICE DE FILA
NOMBRE DEL ARREGLO
* UN ARREGLO CON MULTIPLES SUBINDICES
CON EL MISMO NUMERO DE COLUMNAS
EN CADA FILA PUEDE ASIGNARSE
DINAMICAMENTE POR EJEMPLO, UN
ARREGLO DE 3 POR 3 SE ASIUN GINA DE LA
SIGUIENTE MANERA.
Int b [ ] [ ];
b = new int [3 ] [3];
ASI COMO LOS ARREGLOS DE UN SOLO
INDICE, LOS ELEMENTOS DE UN ARREGLO
CON DOS SUBINDICES SE INICIALIZAN
CUANDO NEW CREA EL OBJETO
ARREGLOS.
UN ARREGLO CON MULTIPLES SUBINDICE ES EL QUE
CADA FILA TIENE UN NUMERO DIFERENTE DE
COLUMNAS, PUEDE ASIGNARSE DINAMICAMENTE DE
LA SIGUIENTE MANERA:
Int b [ ] [ ];
b= new int [2 ] [ ]; // asigna filas
b [0 ] = new int [5]; // asigna la columnas de fila 0
0
b [1 ] = new int [3]; // asigna las columnas de fila1
EL CODIGO ANTERIOR CREA UN ARREGLO
BIDIMENSIONAL CON DOS FILAS. LA FILA 0 TIENE 5
COLUMNAS Y LA FILA 1 TIENE 3
FINAL DEL TEMA
GRACIAS

También podría gustarte