¡Descarga arrays y más Apuntes en PDF de Informática solo en Docsity!
Tema 5. Arrays
Tema 5. Arrays 2
Objetivos
Conocer y utilizar tipos de datos estructurados
Usar el tipo de datos array
Unidimensionales – Vectores
Multidimensionales – Matrices
Conocer las operaciones sobre arrays
Implementar arrays en C
Definir y usar punteros en C
Utilizar los arrays como parámetros en un
módulo
Tema 5. Arrays 3
Tema 5. Arrays
Definición de estructuras de datos
Concepto de array
Arrays unidimensionales – Vectores
Arrays multidimensionales – Matrices
Operaciones básicas con arrays
Implementación en C
Punteros
Relación entre arrays y punteros
Uso de arrays como parámetros
Tema 5. Arrays 4
Estructuras de datos
Estructuras de datos o tipos de datos estructurados son
tipos de datos construidos a partir de otros tipos de datos
Tipos de estructuras de datos según
Tipo de datos
Homogénea: Todos los elementos tienen el mismo tipo de datos
Heterogénea: Los elementos pueden incorporar distintos tipos de datos
Cantidad de datos
Estática: Tienen un número fijo de elementos
Dinámica: Tienen un número variable de elementos
A la hora de determinar la estructura de datos que debe de
utilizarse en un determinado problema, la elección dependerá del
problema en sí, y no tanto del lenguaje de programación escogido
para la implementación de su solución
Tema 5. Arrays 7
Declaración de arrays
unidimensionales - Vectores
La declaración de una variable de tipo array tiene la
siguiente sintaxis
Ident_var:ARRAY[tamaño] DE tipodato
tamaño indica cuántos elementos contiene el array
tipodato determina el tipo base de los elementos del array
(el tipo de cada uno de los elementos del array)
Para acceder a los elementos del array se utiliza el índice
de la posición que ocupan empezando a contar desde 0
El primer elemento es accesible con el índice 0
El último elemento es accesible con el índice (tamaño-1)
Tema 5. Arrays 8
Almacenamiento en memoria
Cuando se declara un array, se reserva una cantidad de
memoria fija, que es inalterable durante toda la ejecución
del programa, ocupando cada componente del vector un
espacio en memoria igual al que ocupa el tipo de dato al que
pertenece dicho componente
Todas las posiciones ocupadas por un vector se
reservan/almacenan de forma contigua en memoria
A: ARRAY[100] de ENTEROS
se reservan 100 elementos * 4 bytes/elemento=400 bytes
B: ARRAY[10] de CARACTER
se reservan 10 elementos * 1 bytes/elemento=10 bytes
Tema 5. Arrays 9
Operaciones con arrays
unidimensionales
La única operación que se puede realizar sobre un array es la
selección. Para ello es necesario especificar el nombre del array y
la posición a la que se quiere acceder. Una vez seleccionada una
posición se pueden utilizar todas las operaciones que permita el
tipo de datos del array
Podemos ver un array como una estructura de celdas donde se
pueden almacenar valores
Ejemplo
Notas: ARRAY[5] de REALES
El array notas tiene 5 casillas que pueden contener valores reales.
Una vez que se accede a un elemento del array se puede tratar
como un número real simple
Notas[1]Å5.
Notas[0]Å3.
Notas[2]Å(Notas[0]+Notas[1])/2 3.7 5.5 4.6??
Tema 5. Arrays 10
Ejemplo: inicialización de un array
ALGORITMO inicializa.
VARIABLES
A:ARRAY[100] de ENTEROS
i:ENTERO
1.[Rellenar elementos del array con bucle
para]
PARA i=0 HASTA 99 HACER
A[i] Å 0
FIN_PARA
Resto del algoritmo
2.[Fin]
Tema 5. Arrays 13
Lectura/Escritura de elementos de un vector
ALGORITMO lectura_escritura.
CONSTANTES
MAX=
VARIABLES
A:ARRAY[MAX] de ENTEROS
N,i:ENTERO
1.[Entrada del número de elementos del array N]
REPETIR
ESCRIBIR('Introduzca el nº de datos ')
LEER(N)
HASTA ((N>0) AND N<=MAX))
2.[Entrada de los N elementos del array]
PARA i=0 HASTA N-1 HACER
ESCRIBIR('Introduzca el dato nº ',i+1,': ')
LEER(A[i])
FIN_PARA
4.[Escritura de los N elementos del array]
PARA i=0 HASTA N-1 HACER
ESCRIBIR('El Elemento',i+1,'del array
es',A[i])
FIN_PARA
5.[Fin]
Para el resto de ejercicios se supone que los datos de entrada son los siguientes N=10 A=[2,4,0,3,8,10,2,0,5,4]
i A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]A[8] A[9]
9 El Elemento 10 del array es 4
1 El Elemento 2 del array es 4
0 El Elemento 1 del array es 2
i Salida por pantalla
Tema 5. Arrays 14
Suma de los elementos de un vector
ALGORITMO suma.
{-Lectura de los datos de entrada-}
{-- suma de los elementos -----}
S ← 0
PARA i=0 HASTA N-1 HACER
S ← S+A[i]
FIN_PARA
ESCRIBIR('La suma es ',S)
N=10 A=[2,4,0,3,8,10,2,0,5,4]
i S A
Salida por pantalla: La suma es 38
Tema 5. Arrays 15
Media de los elementos de un vector
ALGORITMO media.
{-Lectura los datos de entrada-}
{-- media de los elementos -----}
media ← 0.
PARA i=0 HASTA N-1 HACER
media ← media+A[i]
FIN_PARA
media ← media/N
ESCRIBIR(‘La media es ’,media)
N=10 A=[2,4,0,3,8,10,2,0,5,4]
i media A
Salida por pantalla: La media es 3.
Tema 5. Arrays 16
Media de los elementos de un vector-
ALGORITMO media.
{-Lectura de datos de entrada--}
{--- media de los elementos ---}
media ← 0.
PARA i=0 HASTA N-1 HACER
media ← media+A[i] /N
FIN_PARA
ESCRIBIR(‘La media es ’,media)
N=10 A=[2,4,0,3,8,10,2,0,5,4]
i media A
Salida por pantalla: La media es 3.
Tema 5. Arrays 19
Arrays multidimensionales
Un array es un conjunto de elementos del mismo tipo y este tipo
puede ser a su vez otro array:
Clase: ARRAY[3] de ARRAY[5] de REALES
En el ejemplo se trata de un array bidimensional puesto que se
necesitan dos índices para acceder a cada elemento. La
declaración anterior es equivalente a
Clase: ARRAY[3][5] de REALES
Por cada dimensión se necesita un índice distinto
El acceso es primero por fila y después por columna
El número de elementos del array multidimensional será la
multiplicación del los elementos de cada uno de los índices. En el
ejemplo anterior será 3*5=
Clase[1][3]Å7.
Tema 5. Arrays 20
Lectura / Escritura de un array multidimensional
ALGORITMO lectura_escritura.
CONSTANTES
MAX=
VARIABLES
A:ARRAY[MAX][MAX] de ENTEROS
N,,M,i,j:ENTERO
1.[Entrada del nº de columnas y filas N y M]
REPETIR
ESCRIBIR('Introduzca el nº de columnas ')
LEER(N)
HASTA ((N>0) AND N<=MAX))
REPETIR
ESCRIBIR('Introduzca el nº de filas ')
LEER(M)
HASTA ((M>0) AND (M<=MAX))
2.[Entrada de los elementos del array]
PARA i=0 HASTA N-1 HACER
PARA j=0 HASTA M-1 HACER
ESCRIBIR('Introduzca el dato
para la columna ',i,', fila ',j,': ')
LEER(A[i][j])
FIN_PARA
FIN_PARA
4.[Escritura de los elementos del array]
PARA i=0 HASTA N-1 HACER
PARA j=0 HASTA M-1 HACER
ESCRIBIR('El Elemento de la
columna ',i,',fila ',j,' es ',A[i][j])
FIN_PARA
FIN_PARA
5.[Fin]
Tema 5. Arrays 21
Seminario 7
Arrays multidimensionales
Jueves 13 de noviembre de 8’30 a 9’30 (grupo
A), y de 15’30 a 16’30 (grupo B)
Relación de ejercicios del tema 5
Ejercicios 13 y 33
Tema 5. Arrays 22
Arrays en C. Declaración
Declaración
tipo iden_array[tamaño];
int miarray[10];
La inicialización se puede realizar en la misma declaración
mediante el uso de llaves y separando los valores por comas
int numeros[4]={10,20,30,40};
Siempre se debe indicar el tamaño del vector mediante un valor
constante o una constante con nombre pero en tiempo de
compilación se debe saber el tamaño del array
Tema 5. Arrays 25
Diséñese una función SIGMA para calcular la
suma de los n elementos del vector X
ALGORITMO fsuma.
VARIABLES
n,i:ENTERO
suma:real
x:ARRAY[100] DE REALES
{-- Definición de la función sigma --}
FUNCION sigma(x:ARRAY[100] DE REALES;
n:ENTERO):REAL
VARIABLES
i: ENTERO
S:REAL
INICIO
S ← 0
PARA i=0 HASTA n-1 HACER
S ← S + x[i]
FIN_PARA
DEVOLVER(S)
FIN_FUNC
{----- Fin de la función sigma -----}
{--- Comienza el módulo principal -------}
INICIO
{---------lectura nº de elementos-------}
REPETIR
ESCRIBIR('Introduzca el nº
elementos del vector: ')
LEER(n)
HASTA (n>0) AND (n<=100)
{--- lectura del vector ----------------}
PARA i=0 HASTA n-1 HACER
LEER(x[i])
FIN_PARA
suma ← sigma(x,n) {llamada a la func}
ESCRIBIR(‘La suma de los ',n,’
elementos es ’,suma)
FIN
Tema 5. Arrays 26
Diséñese una función SIGMA para calcular la suma de
los n elementos del vector X (programación en C)
#include <stdio.h>
#include <stdlib.h>
float sigma( float x[100] ,
int n)
int i;
float s;
s=0;
for(i=0;i<n;i++)
s=s+x[i];
return (s);
int main()
int n,i;
float suma, x[100];
do{
printf("Introduzca num datos: ");
scanf("%d",&n);
}while ((n<1) || (n>100));
for (i=0;i<n;i++)
printf("Introduzca dato %d: ",
i+1);
scanf("%f", &x[i] );
suma=sigma( x ,n);
printf("\nLa suma es %f\n",suma);
system("pause");
return (0);
Tema 5. Arrays 27
Diseñar un módulo que devuelva el producto
de una matriz por un número
PROCEDIMIENTO pe_matriz( num:REAL;
N,M:ENTEROS;
A:ARRAY[20][20] DE REALES;
VAR P:ARRAY[20][20] DE REALES)
VARIABLES
i,j:ENTEROS
INICIO
PARA i=1 HASTA N HACER
PARA j=1 HASTA M HACER
P[i,j]ÅA[i,j]*num
FIN_PARA
FIN_PARA
FIN_PROC
Tema 5. Arrays 28
Diseñar un módulo que devuelva el producto
de una matriz por un número
void pe_matriz( float num,
int N,
int M,
float A[20][20],
float P[20][20] )
int i,j;
for (i=0;i<N;i++)
for (j=0;j<M;j++)
P[i][j]=A[i][j]*num
La llamada al procedimiento se realizaría de la siguiente manera
pe_matriz(num,n,m,a,p);
Tema 5. Arrays 31
Ejemplo
#include <stdio.h>
int main()
int *p,v[10],i;
for (i=0;i<10;i++){
v[i]=i;
p=v;
for (i=0;i<10;i++){
printf(“%d “,p[i]);
p[2]=123;
*(p+4)=45;
if (p==&p[0]){
printf(“\nEsto siempre se escribe\n”);
system(“pause”);
return 0;
Tema 5. Arrays 32
Aritmética de punteros
Es posible realizar sumas y restas con direcciones de
memoria (con punteros) pero su significado es distinto al
ordinario. Así si se tiene la siguiente declaración
int *p;
la siguiente operación hace que p apunte a la dirección
siguiente a la que apuntaba pero teniendo en cuenta el tipo
al que apuntaba (es decir, en este caso suma 4 bytes)
p=p+
La operación diferencia entre dos punteros del mismo tipo
devuelve la distancia entre las direcciones pero no en bytes
sino en datos de ese mismo tipo
Tema 5. Arrays 33
Relación entre punteros y arrays
El identificador de un vector (el nombre) es un puntero
constante a la dirección de memoria que contiene el primer
elemento del vector
Suponiendo las siguientes declaraciones
int a[10], m[3][6], *p,valor;
Se pueden realizar las siguientes operaciones
p=&a[0]; // p apunta al primer elemento de a
p=p+4; //p apunta al elemento a[4]
valor=*(p+2); //accede al elemento a[6]
p=&m[0][0]; // p apunta al primer elemento de m
p=p+3; // p apunta al elemento m[0][3]
p=p+6; // p apunta al elemento m[1][0]
p=p+10; // p apunta al elemento m[1][4]
m[i][j] es equivalente a
(m+(itamaño de la segunda dimensión)+j)
m[1][4] es (m+(16)+4)=*(m+10)
Tema 5. Arrays 34
Resumen
Tipos de datos estructurados
Definición y operaciones básicas con Vectores
Definición y operaciones básicas con Matrices
Definición y aritmética de Punteros
Relación entre arrays y punteros