Diapositiva 1

Anuncio
ARRAYS
Lenguajes de programación LPSI EUI UPM
• Colección de datos del mismo tipo
• Todos los elementos se almacenan en memoria
consecutivamente
• El tamaño de un array es fijo
• Declaración:
tipo nombre [dim]
“dim” es la dimensión del array
• El primer elemento es el de índice 0, los
elementos van del 0 al dim-1
• El compilador no controla los límites del array en
ejecución
Lenguajes de programación LPSI EUI UPM
int tabla[10];
char nombre[15], apell[50];
long double ctes[100];
• Acceso a los elementos mediante índices
tabla[0] = 100;
tabla[5] = 50;
tabla[8/5+2] = 13;
tabla[‘B’-’A’] = 71;
tabla[10] = 0;
¡¡ MAL !!
Lenguajes de programación LPSI EUI UPM
• Inicialización:
– En la declaración:
int a[5] = {0, 0, 0, 0, 0};
float x[10] = {1.1, 2.2, 3.3};
char vocales[] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’};
long t[1000] = {0};
char nombre[15] = {‘ ‘};
Lenguajes de programación LPSI EUI UPM
– En ejecución:
int i, tabla[40];
char nombre[15], vocales[5];
for (i = 0; i < 40; i++)
tabla[i] = 0;
for (i = 0; i < 15; i++)
nombre[i] = ‘ ‘;
vocales[0] = ‘a’;
……..
vocales[4] = ‘u’;
Lenguajes de programación LPSI EUI UPM
ARRAYS Y PUNTEROS
• El nombre del array es también el puntero
a la dirección del primer elemento. Es
constante, no se puede modificar nunca.
int tabla[10], *p;
tabla == &tabla[0]
p = tabla;
Lenguajes de programación LPSI EUI UPM
• Los elementos se pueden acceder
mediante punteros
int tabla[10] = {0}, *p;
p = tabla;
*p = 0; (tabla[0] = 0)
Lenguajes de programación LPSI EUI UPM
ARITMÉTICA DE PUNTEROS
• Los punteros avanzan por el array independientemente
del tamaño de los elementos. Si
tipo tabla[100], *p = tabla, *q;
p + n apunta al n-esimo elemento
posterior al apuntado por p
p–n
apunta al n-esimo elemento
anterior al apuntado por p
q–p
es el nº de elementos que
hay entre p y q
tabla <> &tabla[0]
p + 3 <> &tabla[3]
Lenguajes de programación LPSI EUI UPM
int tabla[10] = {1,2,3,4,5,6,7,8,9,10},
*p = tabla;
printf (“%d\n”, *p);
p++;
printf (“%d\n”, *p);
p += 4;
printf (“%d\n”, *p);
printf (“%d\n”, p - tabla);
p = tabla +9;
printf (“%d\n”, *p);
p--;
printf (“%d\n”, *p);
Lenguajes de programación LPSI EUI UPM
*p++
se obtiene el valor apuntado por p y luego p
pasa a apuntar al siguiente elemento
(*p)++
se incrementa el valor apuntado por p y
éste no cambia
*++p
p pasa a apuntar al siguiente elemento y
luego se obtiene el valor de la nueva dirección
Lenguajes de programación LPSI EUI UPM
ARRAYS MULTIDIMENSIONALES
• Declaración
Tipo nombre [dim1][dim2]…
• Acceso por índices
nombre[ind1][ind2]…
• Acceso por punteros
*..**nombre
* matriz[0][0]
Lenguajes de programación LPSI EUI UPM
main ()
{ int tablero[8][8], i, j, *p;
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
tablero[i][j] = 0;
tablero [0][0] = 1;
*(tablero[1]) = 2;
**(tablero+2) = 3;
p = &tablero[0];
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
*(tablero + i*8 +j) = 0;
}
Lenguajes de programación LPSI EUI UPM
int matriz[2][3][2] = {{{4,2},{0,0},{3,9}},
{{3,5},{4,8},{9,6}}};
equivalente a
int matriz[2][3][2] = {{4,2,0,0,3,9},
{3,5,4,8,9,6}};
equivalente a
int matriz[2][3][2] = {4,2,0,0,3,9,3,5,4,8,9,6};
int matriz_2[ ][ ][ ] = {{{4,1,6},{4,8,9},{8,4,7}},
{{3,5,4},{8,9,6},{3,6,1}},
{{1,8,2},{2,2,2},{9,5,8}}};
Lenguajes de programación LPSI EUI UPM
EJERCICIOS
• Escribir un programa que lea matriz de 25x25
enteros e imprima por cada fila la media de sus
elementos.
• Escribir un programa que lea caracteres por
teclado y vaya almacenando en un array de 30
elementos todas las vocales mayúsculas que
aparezcan. El programa termina cuando se
complete el array. Como resultado deberá
mostrar por pantalla las vocales almacenadas y
el porcentaje de vocales frente al total de
caracteres leídos.
Lenguajes de programación LPSI EUI UPM
Descargar