1Captulo 4 - ArreglosLenguaje de Programacin
21. Introduccin
2. Arreglos
3. Declaracin de arreglos
4. Ejemplos usando arreglos
5. Pasando Arreglos a Funciones como argumentos
6. Ordenando arreglos
7. Clculo de la media, mediana y la moda usando arreglos
8. Bsqueda en arreglos: Bsqueda lineal y bsqueda binaria
9. Arreglos Bidimensionales
Contenido
3Introduccin (1)
Suponer que se necesita ingresar datos numricos desde el teclado que deben
guardarse para uso posterior.
Ej.: mostrar las notas de un curso de mayor a menor (ordenados
descendentemente, como en el excel).
4Introduccin (2)
Otra situacin: Suponer que se necesita hacer clculos matemticos con matrices.
Ej.: resolver ecuaciones de 2, 3, o N variables de primer grado.
5Introduccin (3)
Las 2 situaciones descritas anteriormente no se pueden resolver directamente con variables simples.
Es decir, su solucin sera tan engorrosa de escribir que no valdra la pena resolverlos computacionalmente.
Para resolver estas situaciones los lenguajes de programacin de alto nivel como el C, tienen una facilidad conocida como ARREGLOS.
6Definiciones
Un arreglo es una facilidad del lenguaje que permite manejar una gran cantidad de datos del
mismo tipo bajo un mismo nombre o
identificador.
Un vector es un arreglo unidimensional.
Una matriz es un arreglo bidimensional.
7Definiciones (2)
El tamao del arreglo est determinado por la cantidad mxima de datos que puede
almacenar.
Es una entidad esttica porque el tamao es fijo a lo largo de todo el programa.
Para hacer arreglos de tamao variable se utilizan punteros (arreglos dinmicos).
8Definiciones (3)
Cada dato almacenado en el arreglo, se denomina elemento.
Luego, tamao = nmero mximo de elementos
Cada elemento es identificado con una posicindentro del arreglo o ndice.
9Arreglos
Arreglo Es un grupo de posiciones consecutivas
de memoria.
Comparten el mismo nombre y tipo.
Para referirnos a un elemento se debe especificar: Nombre del arreglo.
Posicin numrica.
Formato:nombrearreglo[ posicin numrica ]
El primer elemento est en la posicin 0
Un arreglo de n elementos llamado c:
c[ 0 ], c[ 1 ]...c[ n 1 ]
Nombre del arreglo
(Notar todos los
elementos de este
arreglo tienen el
mismo nombre, c)
Posicin numrica
del elemento en el
arreglo c
c[6]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
c[0]
c[1]
c[2]
c[3]
c[11]
c[10]
c[9]
c[8]
c[7]
c[5]
c[4]
10
Arreglos
Los elementos de un arreglo se utilizan en las expresiones de C como cualquier otra variable.
c[ 0 ] = 3;
printf( "%d", c[ 0 ] );
Los ndices son nmeros enteros positivos.
Los ndices pueden ser variables de tipo int.c[ y - 2 ] == c[ 3 ] == c[ x ]
Para trabajar con los elementos puede ser:
uno a uno.
por medio de bucles (for, while, do-while).
11
Uso de elementos de arreglos (1)
Ejemplos de uso de arreglos uno a uno son los siguientes:
a[5] = 0.8;
a[9] = 30. * a[5];
a[0] = 3. * a[9] - a[5]/a[9];
a[3] = (a[0] + a[9])/a[3];
12
Uso de elementos de arreglos (2)
Ejemplo de uso de arreglos con bucles es el siguiente:
a[0] = 1;
for(i=1;i
13
Declaracin de Arreglos
Para declarar arreglos, se debe especificar:
El nombre.
El tipo de arreglo.
El nmero de elementosTipo Nombre_de_Arreglo[Nro_de_Elementos];
Ejemplos:int c[ 10 ];
float myArray[ 3284 ];
14
Inicializacin de arreglos
Inicializacinint n[ 5 ] = { 1, 2, 3, 4, 5 };
Si no se colocan todos los inicializadores, los dems a la derecha se ponen en 0
int n[ 5 ] = { 1 };
El primer elemento tiene valor 1 y el resto tiene valor 0.
Si se asignan ms inicializadores que el tamao especificado, se genera un error de sntaxis.
Si se omite el tamao, el nmero de los inicializadores lo determina
int n[ ] = { 1, 2, 3, 4, 5 };
Como hay 5 inicializadores, entonces es un arreglo de 5 elementos
15
1. Inicializacin
del arreglo
2. Lazo
3. Impresin
1 /*
2 Histograma */
3 #include
4 #define SIZE 10
5
6 int main()
7 {
8 int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
9 int i, j;
10
11 printf( "%s%13s%17s\n", "Elemento", "Valor", "Histograma" );
12
13 for ( i = 0; i
16
Resultado
obtenido
Elemento Valor Histograma
0 19 *******************
1 3 ***
2 15 ***************
3 7 *******
4 11 ***********
5 9 *********
6 13 *************
7 5 *****
8 17 *****************
9 1 *
17
Recordar
Para usar arreglos en los programas:
Declarar el arreglo.
Dar valores iniciales, si es necesario.
Usar los elementos en base al ndice.
18
Ejemplos de aplicacin
Suma de vectores.
Mximo y mnimo de un conjunto de datos.
Clculo de la varianza de un conjunto de datos.
19
Arreglos y Funciones
Un arreglo puede ser pasado como parmetro de una funcin.
Matemticamente, esto puede expresarse como:
y = F(X)
donde X es un vector (x1, x2, , xN)
Una funcin NO PUEDE DEVOLVER un arreglo como resultado.
20
Arreglos como argumentos de Funciones
Para pasar un arreglo como argumento de una funcin, se especifica el nombre del arreglo sin corchetes.
int myArray[ 24 ];
myFunction( myArray, 24 );
Tambin se pasa el tamao del arreglo, porque la computadora no tiene forma de saber cuantos elementos tiene el arreglo.
El arreglo se pasa con llamadas por referencia. El nombre del arreglo equivale a la direccin del primer
elemento.
La funcin sabe en donde est almacenado el arreglo. Modifica la direccin de memoria original.
21
Arreglos como argumentos de Funciones
Pasando los elementos del arreglo
Se pasan con llamada por valor.
Se pasa el nombre del elemento y su posicin: (myArray[ 3 ]) a la funcin.
22
Arreglos como argumentos de Funciones
Prototipo de funcin void modifyArray( int b[], int
arraySize );
Los nombres de parmetros son opcionalesint b[] puede ser escrito como int []
int arraySize puede ser escrito como int
23
1. Definiciones de Funciones
2. Pasar arreglo a funcin
2.1 Pasa elemento de arreglo a la funcin
3. Muestra
1 /* Fig. 6.13: fig06_13.c
2 Passing arrays and individual array elements to functions */
3 #include
4 #define SIZE 5
5
6 void modifyArray( int [], int ); /* appears strange */
7 void modifyElement( int );
8
9 int main()
10 {
11 int a[ SIZE ] = { 0, 1, 2, 3, 4 }, i;
12
13 printf( "Effects of passing entire array call "
14 "by reference:\n\nThe values of the "
15 "original array are:\n" );
16
17 for ( i = 0; i
24
3.1
Funciones
33
34 void modifyArray( int b[], int size )
35 {
36 int j;
37
38 for ( j = 0; j
25
Aplicacin: Ordenando Datos
Ordenar datos es importante en computacin, porque permite: Encontrar datos ms rpidamente.
Hacer clculos estadsticos, como la moda.
Existen mltiples algoritmos de ordenamiento de datos: Burbuja (bubblesort).
Por seleccin.
Por insercin.
Shell.
Rpido (quicksort).
Bin-sort.
Radix-sort.
26
Mtodo de la Burbuja
Ordenamiento por Burbuja (sinking sort) Varias pasadas a travs del arreglo.
Pares sucesivos son comparados. Si el orden es creciente (identicos ), no se cambia.
Si el orden es decreciente, los elementos se intercambian.
Se repite el procedimiento.
Ejemplo:
original: 3 4 2 6 7
pasada 1: 3 2 4 6 7
pasada 2: 2 3 4 6 7
Los elementos pequeos flotan hacia arriba
27
Implementacin en C
void Burbuja(int a[],int tam){
int pass,j,aux;
for(pass=1; pass
28
Clculo de la media, mediana y la moda
Promedio
Mediana es el dato en el medio en una lista ordenada
Conjunto: 1, 1, 2, 3, 4, 5, 5
3 es la mediana
Moda es el dato ms frecuente Conjunto: 1, 2, 1, 2, 3, 1, 5, 4
1 es la moda
29
Bsqueda en arreglos: Bsqueda lineal
Buscar un arreglo por un valor clave
Bsqueda lineal
Simple
Compara cada elemento del arreglo con el valor clave
til para pequeos arreglos sin ordenar
30
Bsqueda en arreglos: Bsqueda binaria
Bsqueda binaria Para arreglos ordenados
Compara el elemento del medio con la clave Si son iguales, se encontr el valora clave
Si la clave < medio, se busca en la primera mitad del arreglo
Si la clave > medio, se busca en la otra mitad
Se repite sucesivamente
Es muy rpido; mximo en n pasos, donde 2n > nmero de elementos
30 element array takes at most 5 steps 25 > 30 so at most 5 steps
31
Otra situacin especial
Se necesita manipular texto: palabras, frases, oraciones.
Slo tenemos los datos de tipo char.
La solucin es utilizar arreglos de caracteres (conocidos como cadenas de
caracteres).
32
Arreglos de Caracteres (1)
La palabra juan se representa como un arreglo esttico de caracteres.
Los arreglos de caracteres se inicializan :char palabra[] = "juan";
El caracter Nulo '\0' indica fin de la cadena.
Luego, palabra[] tiene 5 elementos
Esto es equivalente achar palabra[] = {'j', 'u', 'a', 'n',
'\0' };
33
Arreglos de Caracteres (2)
Se puede acceder a los caracteres en forma individualpalabra[ 3 ] es el caracter n
El nombre del arreglo es la direccin del arreglo, as que & no es necesario para scanf
scanf( "%s", palabra );
Lee caracteres hasta encontrar un espacio en blanco
Puede escribir ms del fin del arreglo, por lo que se debe tener cuidado
34
1. Inicializa
cadenas
2. Muestra
cadenas
2.1 Define lazo
2.2 Muestra
caracteres
individuales
2.3 Ingresa
cadena
3. Muestra
cadena
1 /*
2 Treating character arrays as strings */
3 #include
4
5 int main()
6 {
7 char string1[ 20 ], string2[] = "string literal";
8 int i;
9
10 printf(" Enter a string: ");
11 scanf( "%s", string1 );
12 printf( "string1 is: %s\nstring2: is %s\n"
13 "string1 with spaces between characters is:\n",
14 string1, string2 );
15
16 for ( i = 0; string1[ i ] != '\0'; i++ )
17 printf( "%c ", string1[ i ] );
18
19 printf( "\n" );
20 return 0;
21 }
35
Resultado del ejemplo
Enter a string: Hello there
string1 is: Hello
string2 is: string literal
string1 with spaces between characters is:
H e l l o
36
Arreglos Bidimensionales
Son como matrices: se especifica la fila y luego la columna.
Tablas en filas y columnas (arreglo de m por n).
Por lo tanto, los arreglos tienen dos ndices: uno para la fila y otro para la columna.
37
Arreglos Bidimensionales
Fila 0
Fila 1
Fila 2
Columna 0 Columna 1 Columna 2 Columna 3
a[ 0 ][ 0 ]
a[ 1 ][ 0 ]
a[ 2 ][ 0 ]
a[ 0 ][ 1 ]
a[ 1 ][ 1 ]
a[ 2 ][ 1 ]
a[ 0 ][ 2 ]
a[ 1 ][ 2 ]
a[ 2 ][ 2 ]
a[ 0 ][ 3 ]
a[ 1 ][ 3 ]
a[ 2 ][ 3 ]
Indice de fila
Nombre de
Arreglo
Indice de columna
38
Arreglos Bidimensionales
Inicializacin int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
Inicializadores se agrupan por filas entre llaves
Elementos no especificados se ponen a ceroint b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
Referenciando elementos Se especifica fila, luego columna
printf( "%d", b[ 0 ][ 1 ] );
1 2
3 4
1 0
3 4
39
1. Inicializa
variables
1.1 Declara
funciones
1.2 Inicializa studentGrades[
][]
2. Llama funciones minimum,
maximum, y
average
1 /* Fig. 6.22: fig06_22.c
2 Double-subscripted array example */
3 #include
4 #define STUDENTS 3
5 #define EXAMS 4
6
7 int minimum( const int [][ EXAMS ], int, int );
8 int maximum( const int [][ EXAMS ], int, int );
9 double average( const int [], int );
10 void printArray( const int [][ EXAMS ], int, int );
11
12 int main()
13 {
14 int student;
15 const int studentGrades[ STUDENTS ][ EXAMS ] =
16 { { 77, 68, 86, 73 },
17 { 96, 87, 89, 78 },
18 { 70, 90, 86, 81 } };
19
20 printf( "The array is:\n" );
21 printArray( studentGrades, STUDENTS, EXAMS );
22 printf( "\n\nLowest grade: %d\nHighest grade: %d\n",
23 minimum( studentGrades, STUDENTS, EXAMS ),
24 maximum( studentGrades, STUDENTS, EXAMS ) );
25
26 for ( student = 0; student
40
3. Define
funciones
33
34 /* Find the minimum grade */
35 int minimum( const int grades[][ EXAMS ],
36 int pupils, int tests )
37 {
38 int i, j, lowGrade = 100;
39
40 for ( i = 0; i
41
3. Define
funciones
65 int i, total = 0;
66
67 for ( i = 0; i
42
Salida del
programa
The array is:
[0] [1] [2] [3]
studentGrades[0] 77 68 86 73
studentGrades[1] 96 87 89 78
studentGrades[2] 70 90 86 81
Lowest grade: 68
Highest grade: 96
The average grade for student 0 is 76.00
The average grade for student 1 is 87.50
The average grade for student 2 is 81.75
Atencin de Preguntas
Top Related