Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


arrays, Apuntes de Informática

Asignatura: MTP 1, Profesor: , Carrera: Ingeniería Técnica de Informática de Gestión, Universidad: UJAEN

Tipo: Apuntes

Antes del 2010

Subido el 20/11/2007

helena_vv
helena_vv 🇪🇸

3.9

(14)

59 documentos

1 / 17

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1
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
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡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