1. ARRAYS (LISTAS Y TABLAS)
( )
Sugerencias y herramientas para crear para crear y presentar diapositivas en
formato panorámico
2. Contenido
Arrays
Inicialización de un array
Arrays de caracteres y cadenas de texto
Arrays multidimensionales
Utilización de arrays como parámetros
Ordenación de listas
Búsqueda en listas
Resumen
Ejercicios
E
3. Arrays
Una array (lista o tabla) es una secuencia de datos del
mismo tipo. Los datos se llaman elementos del array y se
numeran consecutivamente 0,1,2,3, etc. Normalmente el
array se utiliza para almacenar tipos tales como char, int o
y p p ,
float
Los elementos de un array se numeran, y estos números se
denominan valores índice o subíndice del array
4. Declaración de un array
Un array se declara de modo similar a otros tipos
y p
de datos, excepto que se debe indicar al
compilador el tamaño o longitud del array. La
sintaxis para declarar un array de una dimensión
determinada es;
Tipo nombreArray [numeroDeElementos];
Int numeros[10];
5. Cont…
Cont
Se puede acceder a cada elemento del array
utilizando un índice en el nombre del array
Printf(“%d n”,numeros [4]);
visualiza el valor d l elemento 5 d l array. L arrays
i li l l del l del Los
siempre comienzan en el elemento 0
#define N 20
Float vector [N];
Scanf(“%f”,&vector[2]);
6. Precaución
C no comprueba que los índices del array están
dentro del rango definido. Así, por ejemplo, se
puede intentar acceder a números [12] y el
compilador no producirá ningún error, lo que puede
producir un fallo en su programa
7. Almacenamiento en memoria de los arrays
Los elementos de los
arrays se almacenan en
bloques contiguos Así
contiguos.
por ejemplo los arrays
Int edades [5]
[5];
Char codigos [5]
8. Inicialización de un array
Se deben asignar valores a los elementos del array
g y
antes de utilizarlos, tal como se asigna valores a
variables
Cuando se inicializa un array, el tamaño del array se
puede determinar automáticamente por las constantes
de inicialización
d i i i li ió
Int numeros [6]={10,20,30,40,50,60}
Int [] {3 4 5}
I t n[] ={3,4,5}
9. Ejemplo 8 2
8.2
/*Programa que lee 8 numeros y a continuacion visualiza
el total de los numeros*/ }
#include <stdio.h> printf("nLista de numeros: ");
#include <stdlib.h> for (i=0; i<NUM; i++)
# define NUM 8
{
int main ()
printf ("%d",nums[i]);
{
total += nums[i];
int nums [NUM];
int i; }
int total =0; printf( nLa
printf("nLa suma de los numeros es
%dn",total);
for (i=0; i<NUM; i++)
{
system("PAUSE");
printf("Por favor, introduzca el numero; "); return 0;
scanf("%d",&nums[i]); }
10. Arrays de caracteres y cadenas de texto
Una cadena de texto es
un conjunto de
caracteres, tales como
<ABCDEFG>.
<ABCDEFG> C soporta
cadenas de texto
utilizando un array de
caracteres que contenga
una secuencia de
caracteres
11. Cont…
Cont
El medio mas fácil de inicializar un array es hacer la
inicialización de la declaración;
Char Cadena[7] = “ABCDEF”;
La asignación de valores a cadena se puede hacer del
modo siguiente;
Cadena [0]=‘A’;
Cadena [1]=‘B’;
…
Cadena[6]= 0 ;
Cadena[6]=‘0’;
12. Ejemplo 8 4
8.4
/*visualiza un array formado p
printf("nIntroduzca una lista de %d
(
con enteros positivos*/
i i */ elementos positivos.n",MAX);
#include <stdio.h> for (i = 0; i < MAX; muestra[i]>0?++i:i)
scanf ("%f",&muestra[i]);
#include <stdlib.h>
stdlib.h
printf ("nDatos leidos del teclado: " ) ;
#define MAX 10 for ( i = 0; i < MAX; ++i)
float muestra[MAX]; printf ("%ft",muestra[i]) ;
int main() system("PAUSE");
return 0;
{
}
int i;
13. Arrays multidimensionales
Los arrays multidimensionales son aquellos que tienen
mas de una dimensión y, en consecuencia, mas de un
índice
Los
L arrays mas usuales son l d d di
l los de dos dimensiones,
i
conocidos también por el nombre de tablas o matrices
La sintaxis para la declaración de un array de dos
dimensiones es
<tipo de datoElemento><nombre array>[<numero de
filas>][<numero d columnas>]
fil ][ de l ]
14. Inicialización de arrays multidimensionales
Int tabla [2][3]={{51,52,53},{54,55,56}};
{{ }{ }}
Int tabla2 [3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
15. Acceso a los elementos de los arrays bidimensionales
Se puede acceder a los elementos de arrays bidimensionales de
igual f
i l forma que a l elementos d un array unidimensional
los l de idi i l
El formato general para la asignación directa de valores a los
elementos es;
Inserción de elementos
<nombre array>[indice fila][indice columna]=valor elemento;
Tabla [2][3]=4.5;
[2][3] 4.5;
Extracción de elementos
<variable>=<nombre array>[indice fila][indice columna];
Ventas=Tabla[1][1];
V T bl [1][1]
16. Acceso a elementos mediante bucles
Se puede acceder a los elementos de arrays
p y
bidimensionales mediante bucles anidados. Su
sintaxis es;
Int IndiceFila, IndiceCol;
For (IndiceFila=0; IndiceFila<NumFilas; ++IndiceFila)
( )
For (indiceCol=0; IndiceCol<NumCol; ++IndiceCol)
Procesar elemento [IndiceFila][indiceCol];
[ ][ ];
17. Ejemplo 8 9
8.9
/*llenala tabla con datos de entrada y muestar los
resultados*/ }
#include <stdio.h> /* Visualizar la tabla */
#include <stdlib.h> for (fila = 0; fila < 2; fila++)
int main ()
{
{
for (col = 0; col < 4; col++)
float discos [2] [4] ;
{
int fila, col;
for (fila = 0; fila < 2; fila++) printf ("n Pts %.lf n",discos [fila] [col] ) ;
{ }
for (col = 0; col < 4; col++) }
{ system("PAUSE");
scanf ("%f",&discos[fila][col]) ; return 0; ;
} }
18. Arrays de mas de dos dimensiones
C proporciona la posibilidad de almacenar varias dimensiones, un
array tridimensional se puede considerar como un conjunto d
idi i l d id j de
arrays bidimensionales combinados juntos para formar, en
profundidad una tercera dimensión
El código siguiente permite procesar el array
int pagina, linea, columna;
for (pagina = 0; pagina < PAGINAS; ++pagina)
(p g ;p g ; p g )
for (linea = 0; linea < LINEAS; ++linea)
for (columna = 0; columna < COLUMNAS; ++columna)
<procesar Libro [pagina] [ lineal [columna] >
19. Utilización de arrays como parámetros
En C todos los arrays se pasan por referencia
(dirección). Esto significa que cuando se llama a una
función y se utiliza un array como parámetro, se debe
tener cuidado de no modificar los arrays en una
función llamada
El código que se utiliza para pasar un array a una
g q p p y
función incluye el tipo de elemento del array y su
nombre. El siguiente ejemplo incluye dos funciones que
procesan arrays
20. Ejemplo 8 6
8.6
/*calcula la suma de una lista de 10 numeros y el valor maximo*/
}
#include <stdio.h>
int SumaDeEnteros(const int ArrayEnteros[], int NoElementos)
#include <stdlib.h>
{
int SumaDeEnteros(const int ArrayEnteros[], int NoElementos);
int i, Total = 0;
int maximo(const int ArrayEnteros[], int NoElementos); for (i = 0; i < NoElementos; i++)
int main () Total += ArrayEnteros[i];
{ return Total;
int Items [10] ; }
int maximo(const int ArrayEnteros[], int NoElementos)
int Total, i;
{
puts("introduzca 10 numeros, seguidos por return");
int mx;
for (i = 0; i < 10; i++)
int i;
scanf ("%d",&Items[i]); mx = ArrayEnteros [ 0 ] ;
printf("Total = %d n",SumaDeEnteros(Items,10)); for (i = 1; i < NoElementos; i++)
printf("Va1or maximo: %d n",maximo(Items,10)); mx = (ArrayEnteros [i] >mx ? ArrayEnteros [i] : mx) ;
system ("PAUSE"); return mx;
}
return 0;
21. Paso de cadenas como parámetros
La técnica de pasar arrays como parámetros se utiliza para pasar
cadenas d caracteres a f i
d de funciones. L cadenas son arrays d
Las d de
caracteres cuando una cadena se pasa a una función, la función
conoce que se ha almacenado el final del array cuando ve un valor
de 0 en un elemento del array
Considere estas declaraciones de una constante y una función que
acepta una parámetro cadena y un valor de su longitud
#define MAXLON 128
Void FuncDemo (char s[], int long);
22. Ordenación de listas
La ordenación de arrays es otra de las tareas usuales en la
mayoría de los programas. La ordenación o clasificación es
el procedimiento mediante el cual se disponen elementos
del array en un orden especificado, tal como orden
y p ,
alfabético u orden numérico
23. Algoritmo de la burbuja
La ordenación por burbuja es uno de los métodos
p j
mas fáciles de ordenación. El método de
ordenación es muy simple. Se compara cada
elemento del array con el siguiente, si no están en
orden correcto, se intercambian entre si sus valores.
El valor mas pequeño flota hasta la parte superior
del array como si fuera una burbuja en un vaso de
refresco con gas
f
24. Ejemplo 8 8
8.8
#include <stdio.h>
#include <stdlib.h> printf ("%.2f,%c",a[i],((i+1)%10==0));
/* prototipos */ }
void imprimir(float a[], int n); printf ("%.2f n",a[n-1]);
void intercambio(float* x, float* y); }
void ordenar (float a[], int n) ; void intercambio(float* x, float* y)
int main() {
{ float aux;
float a[10]={25.5,34.1,27.6,15.24,3.27, 5.14, 6.21,7.57,4.61, 5.4}; aux = *x;
imprimir(a,10); *x = *y;
ordenar (a,10 ) ; *y = aux;
imprimir(a,10); }
system("PAUSE"); /* ordenar burbuja */
return 0; void ordenar (float a[], int n)
} {
void imprimir(float a[], int n) int i, j;
{ for (i = n-1; i>0; i--)
int i = 0; for (j =0; j < i; j++)
for ( ; i < n-1; i++) if (a[j] > a[j+1])
{ intercambio(&a[j] ,&a[j+1]) ;
}
25. Búsqueda en listas
Los arrays son uno de los medios principales por los
cuales se almacenan los datos en programas C.
debido a esta causa existen operaciones
causa,
fundamentales cuyo tratamiento es imprescindible
conocer.
conocer Estas operaciones esenciales son; la
búsqueda de elementos y la ordenación y
clasificación de las listas
26. Búsqueda secuencial
Este algoritmo busca el elemento dado, recorriendo
secuencialmente el array desde un elemento al
siguiente,
siguiente comenzando en la primera posición del
array y se detiene cuando se encuentra el elemento
buscado o bien se alcanza el final del array
Esta tarea se realiza con bucles en nuestro caso con
el b l while
l bucle hil
27. Búsqueda sec
enum {FALSE, TRUE};
{
int BusquedaSec(int Lista[MAX], int Encontrado=((A[i]==Elemento)?TRU
Elemento) E:i++);
{ }
int Encontrado = FALSE; /*Si se encuentra el elemento se
int i = 0; devuelve la posición en la lista. * /
/ * Búsqueda en la lista hasta que se if (Encontrado)
( )
encuentra el elemento o se alcanza el return (i) ;
final de la lista. */ else
while ((!Encontrado) && (i <= MAX 1))
< MAX-1)) return (-1) ;
( 1)
1
28. Ejercicios
Escribir una función que invierta el contenido de n
números enteros. El primero se vuelve el último; el
segundo, penúltimo, etc.
segundo el penúltimo etc
Escribir un programa que lea las dimensiones de
una matriz, l
ti lea y visualice l matriz y a
i li la ti
continuación encuentre el mayor y menor elemento
de la
d l matriz y sus posiciones.
i ii
29. Patrón de prueba de pantalla panorámica (16:9)
Prueba de la
relación de
aspecto
(Debe parecer circular)
4x3
16x9