Diapositiva 1 - MSc. Jaime Soto (Ing.)

Anuncio
Universidad Rafael Urdaneta
Escuela de Ingeniería de Computación
•
•
Arreglos
Estructura (struct)
MSc Jaime Soto
Una estructura de datos es una colección de
datos que pueden ser caracterizados por su
organización y las operaciones que se definen en
ella.
Estáticos
Datos
Estructurados
Dinámicos

Arrays (Vectores / Matrices)

Registros

Ficheros

Cadenas

Listas (Pilas/Colas)

Listas Enlazadas

Árboles

Grafos
Los tipos de Datos SIMPLES pueden ser
organizados en diferentes estructuras de datos:
Estáticas y Dinámicas.
Las Estructuras de Datos Estáticas son aquellas
en la que el tamaño ocupado en memoria se define
antes de que el programa se ejecute y no puede
modificarse dicho tamaño durante la ejecución del
programa.
Las Estructuras de Datos Dinámicas no tienen las
limitaciones o restricciones en el tamaño de memoria
ocupada que son propias de las estructuras
estáticas. Mediante el uso de un puntero, pueden
construir estructuras dinámicas.
Supongamos queremos guardar en el ordenador la
temperatura que ha hecho cada hora del día. Para darle cierta
utilidad al final calcularemos la media de las temperaturas.
El programa en C quedaría así:
#include <stdio.h>
void main() {
/* Declaramos 24 variables, una para cada hora del dia */
int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16;
int temp17, temp18, temp19, temp20, temp21, temp22, temp23;
int media;
/* Ahora tenemos que dar el valor de cada una */
printf( "Introduzca las 24 temperaturas l separadas por un espacio: " );
scanf( "%i %i %i ... %i", &temp0, &temp1, &temp2, ... &temp23 );
media = ( temp0 + temp1 + temp2 + temp3 + temp4 + ... + temp23 ) / 24;
printf( "\nLa temperatura media es %i\n", media );
}
Como se puede observar, el programa es
largo, y seria poco eficiente si se tratara, por ejemplo,
de tomar la temperatura de las 24 horas del día, de
todos los días del año ¿Cuántas variables serian?
MUCHAS.
Aquí es cuando surgen la maravilla de los
Arrays, los cuales se pueden interpretar como una
colección de variables de un mismo tipo.
#include <stdio.h>
void main() {
/* Con esto ya tenemos declaradas las 24 variables */
int temp[24]; float media;
int hora;
/* Ahora tenemos que dar el valor de cada una */
for( hora=0; hora<24; hora++ )
{
printf( "Temperatura de las %i: ", hora );
scanf( "%i", &temp[hora] );
media += temp[hora];
}
media = media / 24;
printf( "\nLa temperatura media es %f\n", media );
}
Un array es un conjunto finito
y ordenado de elementos
homogéneos.
Propiedades:
 Ordenado. Significa que todos los
elementos del arreglo pueden ser
identificados.
 Homogéneos. Significa que todos los
elementos del array son del mismo
tipo.
 Los arrays también son conocidos
como matrices o tablas.
El tipo más simple de Array es el array Unidimensional o
vector (Matriz de una Dimensión).
Vector denominado Notas
Notas (0) Notas (1)
……..
Notas (I)
……..
Notas
(N)
El subíndice o índice de un elemento (0,1,2,…,i,n) designa su
posición en la ordenación del vector.
Ejemplo de un Vector:
El vector temperatura, contiene las temperaturas horarias
registradas en una ciudad durante las 24 horas del día.
Este vector contiene 24 elementos de tipo REAL, ya que las
temperaturas no son siempre enteras.
El valor mínimo permitido de un vector se denomina
Límite Inferior del vector (L)
El valor máximo permitido de un vector se
denomina Límite Superior del vector (U).
Ejemplo Temperatura:
El limite inferior es 1 y el superior 25, entonces Temperatura (I),
donde 1<= I <=24
El número de elementos de un vector se denomina
Rango del Vector. El rango del vector A(L:U) es U-L+1
Los vectores se almacenan en memoria
central de la computadora en un orden adyacente.
Así un vector de 50 números denominado NUMEROS
se representa gráficamente por 50 posiciones de
memoria sucesiva.
Memoria
NUMEROS [0]
Dirección [X]
NUMEROS [1]
Dirección [X+1]
NUMEROS [2]
Dirección [X+2]
NUMEROS [50]
Dirección [X+49]
Cada elemento de un vector se puede procesar como si
fuese una variable simple al ocupar una posición de memoria.
Así,
NUMEROS [25] = 72
almacena el valor 72 en la posición 25ª, en este caso 72.
Para visualizar el valor almacenado en determinada posición
seria:
escribir NUMEROS [25]
visualiza el valor en la posición 25ª, en este caso 72.
Algoritmos y Programación I – Unidad III
Consideremos un vector X de 8 elementos:
X[0]
X[1]
X[2]
X[3]
X[4]
X[5]
X[6]
X[7]
14.0
12.0
8.0
7.0
6.41
5.23
6.15
7.25
Elemento
1
Elemento
2
Elemento
3
Elemento
4
Elemento
8
Operaciones a Realizar:
Acciones
Resultado
Escribir (X[0])
Visualiza el valor 14.0
X[3] ←45
Almacena el valor 45 en x[4]
SUMA ← X[0] +
X[2]
Almacena en la variable suma, la suma de X[0] + X[2],
es decir, 22.0
X[4] ← X[4] + 3,5
Suma 3.5 a X[4]; el nuevo valor de X[4] será 9.91
X[5] ← X[0] + X[1]
Almacena la suma de X[0] y X[1] en X[5], 26.5
Vector Resultante
X[0]
X[1]
X[2]
X[3]
X[4]
X[5]
X[6]
X[7]
14.0
12.0
8.0
45.0
9.91
26.5
6.15
7.25
Consideremos un vector X de 8 elementos:
X[0]
X[1]
X[2]
X[3]
X[4]
X[5]
X[6]
X[7]
12
5
-7
14.5
20
1.5
2.5
-10
Los subíndices de un vector pueden ser enteros,
variables o expresiones enteras.
Operaciones a Realizar:
Acciones
Resultado
I ←4
X [I+1]
Representa el elemento X(5) de valor 1.5.
X [I+2]
Representa el elemento X(6) de valor 2.5.
X [I-2]
Representa el elemento X(2) de valor -7
X [I+3]
¿Qué valor representa?
Las operaciones que se pueden realizar con
vectores durante el proceso de resolución de un
problema son:

Asignación.

Lectura/Escritura.

Recorrido (acceso Secuencial)

Actualizar (Añadir, Borrar, Insertar)

Ordenación

Búsqueda
Las operaciones con vectores implican el
procesamiento o tratamiento de los elementos
individuales del vector
Notaciones algorítmicas
tipo
tipo_de_datos nombre_del_array [Tamaño]
Donde:
tipo_de_datos: Tipo de Datos de los elementos que contendrá el
arreglo
nombre_array: Nombre válido del array.
Tamaño Numero de Elementos que contendrá el arreglo
Tipo
int NOMBRES [10]
NOMBRES es un array
unidimensional de 10
elementos de tipo int
Tipo
double LISTA [24]
Representa un vector
cuyos elementos son 24,
de tipo double
1. Asignación:
La asignación de valores a un elemento del vector se realizará con la
instrucción de asignación:
A[29] ← 5
asigna el valor 5 al elemento 20 del vector A
Si desea asignar valores a todos los elementos de
un vector, se debe recurrir a estructuras repetitivas
(desde, mientras o repetir) e incluso selectivas (sientonces, según).
1. Asignación:
Ejemplo:
Si se introducen los valores Si se desea dar el mismo valor a
5,7,8, 14 y 12 mediante todos los elementos, la notación
algorítmica se simplifica.
asignaciones.
A[0] ← 5
A[1] ← 7
A[2] ← 8
A[3] ← 14
A[4] ← 12
desde i=0 hasta 4 hacer
A [i] ← 8
fin_desde.
Valores: A[0]=8, A[1]=8,…..,
A[5]=8
Ejemplo de Asignación en C:
#include <stdio.h>
Se pueden inicializar
void main()
arreglos, asignándoles
valor al comienzo del
{
programa.
int hora;
int temperaturas[24] = { 15, 18, 20, 23, 22, 24, 22,
25, 26, 25, 24, 22, 21, 20, 18, 17, 16, 17, 15, 14, 14,
14, 13, 12 };
for (hora=0 ; hora<24 ; hora++ )
{
printf( "La temperatura a las %i era de %i
grados.\n", hora, temperaturas[hora] );
}
}
2. Lectura / Escritura de Datos:
La lectura/escritura de datos en
arrays u operaciones de entrada/salida
normalmente se realiza con estructuras
repetitivas, aunque también pueden
hacerse con estructuras selectivas.
2. Acceso Secuencial al Vector (recorrido)
Se puede acceder a los elementos de un
vector para Introducir Datos (Escribir) en el o bien
para Visualizar su Contenido (Leer).
A la operación de efectuar una acción
general sobre todos los elementos de un vector se
le denomina Recorrido del vector.
Estas operaciones se realizan utilizando
estructuras repetitivas, cuyas variables de control
(por ejemplo I), se utilizan como subíndices del
vector (por ejemplo S[I]).
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vector
denominado F
Procedimiento 1
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
desde i← 0 hasta 19 hacer
leer (F[i])
fin_desde
fin
La lectura de veinte valores
sucesivos desde el teclado
rellenará de valores el vector
F, comenzando con el
elemento F[1] y terminando
F[20].
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vector
denominado F, utilizando bucle mientras.
Procedimiento 2
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
i← 0
mientras i <= 19 hacer
leer (F[i])
i ← i +1
fin_mientras
fin
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vector
denominado F, utilizando bucle repetir
Procedimiento 3
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
i← 0
repetir
leer (F[i])
i ← i +1
hasta_que i>19
fin
Ejemplo 2.
Este ejemplo procesa un array PUNTOS, realizando las
siguientes operaciones: Lectura, Cálculo de la Suma de los
valores del Array y Cálculo de la media de los valores.
algoritmo mediapuntos
const LIMITE= 40
tipo
real PUNTUACION [LIMITE]
var
PUNTUACION: puntos
real: suma, media
entero: i
inicio
suma ← 0
escribir (´ Datos del Array ´)
desde ← 1 hasta LIMITE hacer
leer (Puntos [i])
suma ← suma + puntos [i]
fin_desde
media ← suma/ LIMITE
escribir (´ La media es: ´, media)
fin
Ejemplo de Acceso Secuencial en C
#include <stdio.h>
#include <conio.h>
main() {
int vector[7]; /* Tipo_de_datos nombre_del_array [Tamaño] */
int c;
/* Contador */
for (c=0;c<=6;c++)
{
printf ("Numero para guardar en vector[%d]:,c);
scanf ("%d",&vector[c]);
}
for (c=0;c<=6;c++)
{
/* Para mostrar los datos del vector */
printf("\nValor Vector[%d]=%d",c,vector[c]);
}
getch();
}
4. Actualización de un Vector:
La operación de actualizar un vector, puede
constar a su vez de 3 operaciones elementales:
Añadir, Insertar y Borrar elementos.
Se denomina añadir datos a un vector la operación
de añadir un nuevo elemento al final del vector.
La única condición necesaria para esta operación
consistirá en la comprobación de espacio de
memoria suficiente para el nuevo vector.
4. Actualización de un Vector:
La operación de insertar un elemento
consiste en introducir dicho elemento en el interior
del vector. En este caso se necesita un
desplazamiento previo hacia abajo para colocar el
elemento nuevo en su posición relativa
1
2
3
Alfa Romeo
4
5
Lancia
6
7
8
9
Seat
Fiat
Ford
Renault
1
2
3
Insertar
4
Opel
Alfa Romeo
Fiat
Ford
Lancia
5
Opel
6
7
8
9
Renault
Seat
Insertar
Citroen
1
2
3
Alfa Romeo
4
5
Ford
6
7
8
9
Opel
Citroen
Fiat
Lancia
Renault
Seat
4. Actualización de un Vector:
La operación de borrar un elemento al final del
vector no presenta ningún problema; el borrado de un
elemento del interior del vector provoca el
movimiento hacia arriba de los elementos inferiores a
él para reorganizar el vector.
algoritmo borrado
inicio
AUX ← COCHES [J]
desde i ← j hasta N-1 hacer
// llevar el elemento j+1 hacia arriba
leer (Puntos [i])
COCHES [i] ← COCHES [i + 1]
fin_desde
//actualizar contador de elementos
// ahora tendra un elemento menos, N-1
N ← N-1
fin
Realizar lo EJERCICIOS del Capitulo 7
del Libro de Fundamentos de Programación
De Luis Joyanes Aguilar
Página 283
Ejercicios del 7.1 al 7.6
Descargar