30
Arreglos Estructura (struct) MSc Jaime Soto Universidad Rafael Urdaneta Escuela de Ingeniería de Computación

Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Embed Size (px)

Citation preview

Page 1: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

• Arreglos

• Estructura (struct)

MSc Jaime Soto

Universidad Rafael UrdanetaEscuela de Ingeniería de Computación

Page 2: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Una estructura de datos es una colección dedatos que pueden ser caracterizados por suorganización y las operaciones que se definen enella.

Datos Estructurados

Estáticos

Dinámicos

Arrays (Vectores / Matrices)

Registros

Ficheros

Cadenas

Listas (Pilas/Colas)

Listas Enlazadas

Árboles

Grafos

Page 3: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Los tipos de Datos SIMPLES pueden serorganizados en diferentes estructuras de datos:Estáticas y Dinámicas.

Las Estructuras de Datos Estáticas son aquellasen la que el tamaño ocupado en memoria se defineantes de que el programa se ejecute y no puedemodificarse dicho tamaño durante la ejecución delprograma.

Las Estructuras de Datos Dinámicas no tienen laslimitaciones o restricciones en el tamaño de memoriaocupada que son propias de las estructurasestáticas. Mediante el uso de un puntero, puedenconstruir estructuras dinámicas.

Page 4: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

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 );

}

Page 5: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

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.

Page 6: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

#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 );

}

Page 7: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Un array es un conjunto finitoy ordenado de elementoshomogé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.

Page 8: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)
Page 9: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

El tipo más simple de Array es el array Unidimensional ovector (Matriz de una Dimensión).

Notas (0) Notas (1) …….. Notas (I) …….. Notas

(N)

Vector denominado Notas

El subíndice o índice de un elemento (0,1,2,…,i,n) designa suposición en la ordenación del vector.

Ejemplo de un Vector:

El vector temperatura, contiene las temperaturas horariasregistradas en una ciudad durante las 24 horas del día.

Este vector contiene 24 elementos de tipo REAL, ya que lastemperaturas no son siempre enteras.

Page 10: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

El valor mínimo permitido de un vector se denominaLímite Inferior del vector (L)

Ejemplo Temperatura:

El limite inferior es 1 y el superior 25, entonces Temperatura (I),donde 1<= I <=24

El valor máximo permitido de un vector sedenomina Límite Superior del vector (U).

El número de elementos de un vector se denominaRango del Vector. El rango del vector A(L:U) es U-L+1

Page 11: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Los vectores se almacenan en memoriacentral de la computadora en un orden adyacente.Así un vector de 50 números denominado NUMEROSse representa gráficamente por 50 posiciones dememoria sucesiva.

NUMEROS [0]

NUMEROS [1]

NUMEROS [2]

NUMEROS [50]

Dirección [X]

Dirección [X+1]

Dirección [X+2]

Dirección [X+49]

Memoria

Page 12: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Cada elemento de un vector se puede procesar como sifuese una variable simple al ocupar una posición de memoria.Así,

NUMEROS [25] = 72almacena el valor 72 en la posición 25ª, en este caso 72.

Para visualizar el valor almacenado en determinada posiciónseria:

escribir NUMEROS [25]visualiza el valor en la posición 25ª, en este caso 72.

Algoritmos y Programación I – Unidad III

Page 13: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

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

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

Operaciones a Realizar:

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

Vector Resultante

Page 14: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

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

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?

Operaciones a Realizar:

Los subíndices de un vector pueden ser enteros,

variables o expresiones enteras.

Page 15: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Las operaciones que se pueden realizar convectores durante el proceso de resolución de unproblema son:

Asignación.

Lectura/Escritura.

Recorrido (acceso Secuencial)

Actualizar (Añadir, Borrar, Insertar)

Ordenación

Búsqueda

Las operaciones con vectores implican elprocesamiento o tratamiento de los elementosindividuales del vector

Page 16: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Notaciones algorítmicas

tipo

tipo_de_datos nombre_del_array [Tamaño]

Donde:

tipo_de_datos: Tipo de Datos de los elementos que contendrá elarreglo

nombre_array: Nombre válido del array.

Tamaño Numero de Elementos que contendrá el arreglo

Tipo

int NOMBRES [10]

NOMBRES es un arrayunidimensional de 10elementos de tipo int

Tipo

double LISTA [24]

Representa un vectorcuyos elementos son 24,de tipo double

Page 17: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

1. Asignación:

La asignación de valores a un elemento del vector se realizará con lainstrucció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 deun vector, se debe recurrir a estructuras repetitivas(desde, mientras o repetir) e incluso selectivas (si-entonces, según).

Page 18: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Si se introducen los valores

5,7,8, 14 y 12 mediante

asignaciones.

Si se desea dar el mismo valor a

todos los elementos, la notación

algorítmica se simplifica.

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

1. Asignación:

Ejemplo:

Page 19: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Ejemplo de Asignación en C:

#include <stdio.h>

void main()

{

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 %igrados.\n", hora, temperaturas[hora] );

}

}

Se pueden inicializararreglos, asignándolesvalor al comienzo delprograma.

Page 20: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

2. Lectura / Escritura de Datos:

La lectura/escritura de datos enarrays u operaciones de entrada/salidanormalmente se realiza con estructurasrepetitivas, aunque también puedenhacerse con estructuras selectivas.

Page 21: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

2. Acceso Secuencial al Vector (recorrido)

Se puede acceder a los elementos de unvector para Introducir Datos (Escribir) en el o bienpara Visualizar su Contenido (Leer).

A la operación de efectuar una accióngeneral sobre todos los elementos de un vector sele denomina Recorrido del vector.

Estas operaciones se realizan utilizandoestructuras repetitivas, cuyas variables de control(por ejemplo I), se utilizan como subíndices delvector (por ejemplo S[I]).

Page 22: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

2. Acceso Secuencial al Vector (recorrido)

Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado 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 valoressucesivos desde el tecladorellenará de valores el vectorF, comenzando con elelemento F[1] y terminandoF[20].

Page 23: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

2. Acceso Secuencial al Vector (recorrido)

Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado 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

Page 24: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

2. Acceso Secuencial al Vector (recorrido)

Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado 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

Page 25: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

Ejemplo 2.

Este ejemplo procesa un array PUNTOS, realizando lassiguientes operaciones: Lectura, Cálculo de la Suma de losvalores 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

Page 26: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

#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();

}

Ejemplo de Acceso Secuencial en C

Page 27: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

4. Actualización de un Vector:

La operación de actualizar un vector, puedeconstar a su vez de 3 operaciones elementales:

Añadir, Insertar y Borrar elementos.

Se denomina añadir datos a un vector la operaciónde añadir un nuevo elemento al final del vector.

La única condición necesaria para esta operaciónconsistirá en la comprobación de espacio dememoria suficiente para el nuevo vector.

Page 28: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

4. Actualización de un Vector:

La operación de insertar un elementoconsiste en introducir dicho elemento en el interiordel vector. En este caso se necesita undesplazamiento previo hacia abajo para colocar elelemento nuevo en su posición relativa

1

2

3

Alfa Romeo

Fiat

Ford

4

5

Lancia

Renault

6

7

8

9

Seat

1

2

3

Alfa Romeo

Fiat

Ford

4

5

Lancia

Opel

6

7

8

9

Renault

Seat

1

2

3

Alfa Romeo

Citroen

Fiat

4

5

Ford

Lancia

6

7

8

9

Opel

Renault

Seat

InsertarOpel

InsertarCitroen

Page 29: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

4. Actualización de un Vector:

La operación de borrar un elemento al final delvector no presenta ningún problema; el borrado de unelemento del interior del vector provoca elmovimiento 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

Page 30: Universidad Rafael Urdaneta Escuela de Ingeniería de ... · un vector, se debe recurrir a estructuras repetitivas (desde, mientras o repetir) e incluso selectivas (si-entonces, según)

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