arrays, cadenas y estructuras
DESCRIPTION
Fundamentos de la programación.TRANSCRIPT
-
Fundamentos de Informtica ETSI Industrial 1 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. CLASIFICACIN DE LOS TIPOS DE DATOS: SIMPLES Y ESTRUCTURADOS.
6.2. EL TIPO ARRAY.
6.2.1. Arrays unidimensionales.
6.2.2. Arrays multidimensionales.
6.3. LAS CADENAS DE CARACTERES. El TIPO string.6.3.1. Lectura y escritura de cadenas de caracteres.
6.3.2. Operadores y funciones relacionadas.
6.4. EL TIPO REGISTRO ( struct ).
6.5. ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS.
6.6. ALGORITMOS BSICOS DE BSQUEDA Y ORDENACIN.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 2 Universidad de Mlaga Jos Antonio Gmez Ruiz
Establecer las diferencias entre los distintos tipos de datos
Anlisis de diversos problemas para mostrar la necesidad deluso de tipos de datos estructurados
Definicin de estructuras de datos complejas Definicin de tipos de datos propios para una mayor
simplicidad y legibilidad en los programas
Estudio y aplicacin de los algoritmos de bsqueda yordenacin
Tema 6: Tipos de Datos EstructuradosOBJETIVOS
-
Fundamentos de Informtica ETSI Industrial 3 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. CLASIFICACIN DE LOS TIPOS DE DATOS: SIMPLES Y ESTRUCTURADOS.
6.2. El tipo array.
6.3.1. Arrays unidimensionales.
6.3.2. Arrays multidimensionales.
6.3. Las cadenas de caracteres. El tipo string.6.4.1. Lectura y escritura de cadenas de caracteres.
6.4.2. Operadores y funciones relacionadas.
6.4. El tipo registro ( struct ).
6.5. Anidamientos de estructuras de datos estticas.
6.6. Algoritmos bsicos de bsqueda y ordenacin.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 4 Universidad de Mlaga Jos Antonio Gmez Ruiz
Simples
Estructurados
Simples
Estructurados
Ordinales
Reales
Ordinales
Reales
Predefinidos
Definidos por el programador (enum)
Predefinidos
Definidos por el programador (enum)
EnterosNaturalesCarcter
EnterosNaturalesCarcter
Estticos
Dinmicos
Estticos
Dinmicos
Arrays Cadenas de caracteresRegistros
Arrays Cadenas de caracteresRegistros
FicherosListas, pilas, colas, rbolesOtros TAD
FicherosListas, pilas, colas, rbolesOtros TAD
CLASIFICACIN DE LOS TIPOS DE DATOS: SIMPLES Y ESTRUCTURADOS
-
Fundamentos de Informtica ETSI Industrial 5 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. Clasificacin de los tipos de datos: simples y estructurados.
6.2. EL TIPO ARRAY.
6.2.1. Arrays unidimensionales.
6.2.2. Arrays multidimensionales.
6.3. Las cadenas de caracteres. El tipo string.6.3.1. Lectura y escritura de cadenas de caracteres.
6.3.2. Operadores y funciones relacionadas.
6.4. El tipo registro ( struct ).
6.5. Anidamientos de estructuras de datos estticas.
6.6. Algoritmos bsicos de bsqueda y ordenacin.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 6 Universidad de Mlaga Jos Antonio Gmez Ruiz
Supongamos que un fabricante de mquinas de caf estinteresado en conocer la popularidad de las diferentescombinaciones de caf que dispensan sus mquinas.Las mquinas en cuestin disponen de cuatro botonesetiquetados como 1, 2, 3 y 4 junto con una nota queexplica la funcin de cada uno de ellos:
1. Caf solo, sin azcar.2. Caf solo, con azcar.3. Caf con leche, sin azcar.4. Caf con leche, con azcar.
EL TIPO ARRAY
-
Fundamentos de Informtica ETSI Industrial 7 Universidad de Mlaga Jos Antonio Gmez Ruiz
EL TIPO ARRAY
Fundamentos de Informtica ETSI Industrial 8 Universidad de Mlaga Jos Antonio Gmez Ruiz
#include using namespace std;int main(){int soloSin, soloCon, lecheSin,
lecheCon, seleccion;soloSin = 0;soloCon = 0;lecheSin = 0;lecheCon = 0;cout > seleccion;
while(seleccion != 0){
switch(seleccin){
case 1: soloSin += 1; break;case 2: soloCon += 1; break;case 3: lecheSin += 1; break;case 4: lecheCon += 1; break;
}cout > seleccion;
}cout
-
Fundamentos de Informtica ETSI Industrial 9 Universidad de Mlaga Jos Antonio Gmez Ruiz
Qu ocurre si la mquina se moderniza y se aaden msproductos ?
1. Solo sin azcar2. Solo con azcar3. Solo 1 cucharadita azcar4. Solo 2 cucharaditas azcar5. Solo 3 cucharaditas azcar6. Con leche sin azcar7. Con leche 1 cucharadita azcar8. Con leche 2 cucharaditas azcar9. Con leche 3 cucharaditas azcar10.T solo sin azcar11.T solo 1 cucharadita azcar12....
EL TIPO ARRAY
Fundamentos de Informtica ETSI Industrial 10 Universidad de Mlaga Jos Antonio Gmez Ruiz
#include using namespace std;int main(){int soloSin, soloCon, lecheSin,
lecheCon, ... , seleccion;soloSin = 0;soloCon = 0;lecheSin = 0;lecheCon = 0;...
cout > seleccion;
while(seleccion != 0){
switch(seleccin){
case 1: soloSin += 1; break;case 2: soloCon += 1; break;case 3: conLeche += 1; break;case 4: sinLeche += 1; break;...
}cout > seleccion;
}cout
-
Fundamentos de Informtica ETSI Industrial 11 Universidad de Mlaga Jos Antonio Gmez Ruiz
Un array es una coleccin finita de elementos del mismo tipo(homogneos) ordenados por un ndice
El tamao de un array (nmero mximo de elementos) debeespecificarse en tiempo de compilacin: usando una constante simblica o literal el tamao mximo no cambia durante la ejecucin del programa
(estructura esttica)
Declaracin de un array unidimensional:
tipo_elemento nombre_array[nmero_elementos];
ARRAYS UNIDIMENSIONALES
Fundamentos de Informtica ETSI Industrial 12 Universidad de Mlaga Jos Antonio Gmez Ruiz
En C++, el primer elemento del array est indexado por la posicin 0
Los ndices son consecutivos hasta el tamao total menos uno
Se accede a cada elemento con el nombre del array seguido de sundice entre corchetes
Ejemplos:
int valores[8];
char palabra[5];
?1 6 70
??? ? ?? ?2 3 4 5
valores[1] valores[5]
?10
????2 3 4
palabra[1] palabra[3]
ARRAYS UNIDIMENSIONALES
-
Fundamentos de Informtica ETSI Industrial 13 Universidad de Mlaga Jos Antonio Gmez Ruiz
Inicializacin y asignacin:Inicializacin en la declaracin
Completa
Incompleta
Tamao automtico
Asignacin en ejecucin: A un elemento
A todos los elementos
int vector[3]={5,0,4};10
4052
vector
int medias[5]={8,5};10
?582
medias3
??4
int medias[]={2,3,-7,1};10
-7322
medias3
1
valores[3]=7; ?1 6 70
7?? ? ?? ?2 3 4 5
valores
for(i=0;i vector[3];...
cout
-
Fundamentos de Informtica ETSI Industrial 15 Universidad de Mlaga Jos Antonio Gmez Ruiz
Solucin al problema de la mquina de caf
0281 14 5 141 7 8 10
1 6 7 82 3 4 5 9 121110
3
Caf solo sinCaf solo 1 azcarCaf solo 2 azcar
Caf leche sinCaf leche 1 azcarCaf leche 2 azcarCaf leche 3 azcar
Caf solo 3 azcar
T solo sinT solo 1 azcarT solo 2 azcarT solo 3 azcar
13
ARRAYS UNIDIMENSIONALES
Fundamentos de Informtica ETSI Industrial 16 Universidad de Mlaga Jos Antonio Gmez Ruiz
#include #define N 11 // Para aadir bebidas slo cambio la constanteusing namespace std;int main(){
int frecuencia[N],seleccion, bebida;for(bebida=0; bebida seleccion;while(seleccion != 0){ if (seleccion>=1 && seleccion seleccion;
}for(bebida=0; bebida
-
Fundamentos de Informtica ETSI Industrial 17 Universidad de Mlaga Jos Antonio Gmez Ruiz
En memoria principal, en C++ los elementos de un array sealmacenan de forma contigua por filas
Suponiendo la siguiente declaracin: a[1] es de tipo entero, de que tipo es a (sin ndices) ? El nombre de un array es un puntero constante que tiene la
direccin del primer elemento del array Por tanto, a es un puntero constante a enteros: a apunta al primer
elemento del array ( a &a[0] ) Hay una excepcin: sizeof(a) devuelve el tamao completo en
bytes del array y no de un puntero a enteros
char palabra[5]; int vector[5];ndice 0 1 2 3 4 0 1 2 3 4Direccin 1000 1001 1002 1003 1004 1005 1007 1009 100B 100DSuponiendo que se comienza en la posicin de memoria 1000, que un int ocupa 2 bytes y un char ocupa 1 byte
int a[5];
ARRAYS UNIDIMENSIONALES
Fundamentos de Informtica ETSI Industrial 18 Universidad de Mlaga Jos Antonio Gmez Ruiz
Para mayor simplicidad y claridad en los programas, se puedencrear sinnimos de tipos de datos.
Para ello se utiliza la palabra reservada typedef:
tipo_dato_definido puede ser un tipo predefinido por ellenguaje ( int, char, float, ...) o cualquier tipo de datosestructurado definido por el programador
Como criterio de estilo, los tipos definidos con typedefempezarn con letra T mayscula
Un tipo definido con typedef puede ser utilizado en cualquierparte de un programa, siempre que su definicin sea previa a su uso
DEFINICIN DE TIPOS
typedef tipo_dato_definido nuevo_nombre;
-
Fundamentos de Informtica ETSI Industrial 19 Universidad de Mlaga Jos Antonio Gmez Ruiz
DEFINICIN DE TIPOSEjemplos de definicin de tipos de datos y posterior definicinde variables:
typedef int TEntero;TEntero numero, valor; /* numero y valor son dos variables
de tipo entero */
typedef bool TLogico;TLogico es_positivo; /* es_positivo es una variable de
de tipo booleano */
typedef char TCaracter;TCaracter letra,inicial; /* letra e inicial son dos
variables de tipo carcter */
typedef int TVector[10];TVector v1,v2; /* v1 y v2 son arrays unidimensionales
de 10 elementos enteros */
Fundamentos de Informtica ETSI Industrial 20 Universidad de Mlaga Jos Antonio Gmez Ruiz
Por defecto, en C/C++ la mayora de los parmetros de una funcinson de entrada y se pasan por valor
El paso de un array se implementa como paso por referencia por loque cualquier modificacin del array en el cuerpo de la funcinafecta al array del parmetro real de la llamada
En C/C++ un array no se puede devolver como retorno de unafuncin
Como simplificacin para implementar el paso de arrays comoargumentos en funciones, se utilizarn definiciones de tipos paradefinir los arrays
El paso de un array como parmetro de entrada (por valor) y comoparmetro de salida o E/S (por referencia) se implementar de lamisma forma que los tipos simples
ARRAYS COMO ARGUMENTOS EN FUNCIONES
-
Fundamentos de Informtica ETSI Industrial 21 Universidad de Mlaga Jos Antonio Gmez Ruiz
Ejemplo de arrays como parmetro de entrada a funciones:ARRAYS COMO ARGUMENTOS EN FUNCIONES
typedef int TVector[50];int main() { TVector v;
...
m = mayor_elemento(v,30 );...
}
int mayor_elemento(TVector vector, int tam ){ int max = vector[0] , i;
for(i=0; i < tam ;i++)if(max < vector[i])
max = vector[i];return max;
}
Le pasaremos tambin el tamaoreal del array pues dependiendo del problema podra no coincidir con el tamao mximo definido
Fundamentos de Informtica ETSI Industrial 22 Universidad de Mlaga Jos Antonio Gmez Ruiz
Ejemplo de arrays como parmetro de salida en funciones:ARRAYS COMO ARGUMENTOS EN FUNCIONES
/* producto escalar de dos vectores */#include #define N 5 /* Tamao de los vectores */using namespace std;typedef int TVector[N];
void leer_vector(TVector &v ,int tam);int prod_esc(TVector v1, TVector v2,int tam);
int main(){ int Tvector v1,v2, prod;
cout
-
Fundamentos de Informtica ETSI Industrial 23 Universidad de Mlaga Jos Antonio Gmez Ruiz
Otra alternativa de paso de arrays como argumentos en funcionesde utilidad sobre todo si se desean procesar arrays de distintos tiposcon una misma funcin arrays abiertos
Misma forma para parmetros de entrada, salida y entrada / salida
Siempre se pasan por referencia (no se pone el &)
ARRAYS COMO ARGUMENTOS EN FUNCIONES
void Ordenar1( TVector1 &v);void Ordenar2( TVector2 &v);void Ordenar3( TVector3 &v);int main() {
TVector1 v1; TVector2 v2;TVector3 v3;...
Ordenar1(v1);Ordenar2(v1);Ordenar2(v2);Ordenar3(v3);...
}
void Ordenar (int v[],int tam);int main() {
TVector1 v1;TVector2 v2;TVector3 v3;...
Ordenar(v1,10);Ordenar(v2,100);Ordenar(v3,1000);...
}typedef int TVector1[10];typedef int TVector2[100];typedef int TVector3[1000];
Fundamentos de Informtica ETSI Industrial 24 Universidad de Mlaga Jos Antonio Gmez Ruiz
Un array multidimensional es un array que tiene ms de unadimensin
Declaracin de un array multidimensional:
Ejemplos
Los elementos de arrays multimensionales se almacenan enmemoria contiguos por filas
tipo_elemento nombre_array[dim1][dim2]...[dimn];
int m[5][4]; /* Array bidimensional de 5x4 (matriz)*/float p[3][3][3]; /* Array tridimensional de 3x3x3 (cubo)*/
int matriz[3][5];
matriz
ARRAYS MULTIDIMENSIONALES
-
Fundamentos de Informtica ETSI Industrial 25 Universidad de Mlaga Jos Antonio Gmez Ruiz
Para identificar un elemento de un array multidimensional, se debedar un ndice para cada dimensin, en el mismo orden que en ladeclaracin. Los ndices van desde cero hasta la dimensin menos 1
Cada ndice se encierra en sus propios corchetes
Ejemplo: rellenar una matriz por filas con nmeros del 1 al 12
matriz
int matriz[3][10]; matriz[1][5]
matriz[0][8]
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
...
int matriz[3][4], i,j;for(i=0; i
-
Fundamentos de Informtica ETSI Industrial 27 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* Ejemplo de acceso a los elementos de un array multidimensional */#include #define M 2#define N 3using namespace std;
int main() {int matriz[M][N]={{1,2,3} ,{4,5,6}};int i,j;for(i=0; i
-
Fundamentos de Informtica ETSI Industrial 29 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* funcin que calcula el producto de dos matrices cuadradas N x N */void prod_matrices(TMatriz a, TMatriz b, TMatriz &m ,int tam1,int tam2) {int i, j, k;for(i=0; i
-
Fundamentos de Informtica ETSI Industrial 31 Universidad de Mlaga Jos Antonio Gmez Ruiz
Una cadena de caracteres es una secuencia de cero (cadena vaca) oms caracteres de un cdigo de entrada/salida (ASCII)
La longitud de una cadena es el nmero de caracteres que contiene
Las cadenas de caracteres literales se escriben entre comillas dobles
En C, las cadenas de caracteres se implementan mediante arraysunidimensionales de caracteres, un carcter especial (el carcternulo \0) delimita el final de la cadena dentro del array
En C++, la definicin y manejo de cadenas de caracteres se realizamediante el tipo string
Hola, qu tal?12 DE OCTUBRE DE [email protected]
CADENAS DE CARACTERES
Fundamentos de Informtica ETSI Industrial 32 Universidad de Mlaga Jos Antonio Gmez Ruiz
El tipo string
Declaracin de variables:
Las variables definidas no tienen un tamao prefijado deantemano, se adapta segn las necesidades.
Se puede dar valor a la variable a la vez que se declara:
Como cualquier variable, se les puede asignar cualquierexpresin que sea del mismo tipo o una cadena de caracteresentre comillas dobles:
string cadena;string palabra,frase;
string texto = Esto es un ejemplo;
CADENAS DE CARACTERES
string s1, s2;s2 = Hola;s1 = s2;
-
Fundamentos de Informtica ETSI Industrial 33 Universidad de Mlaga Jos Antonio Gmez Ruiz
Lectura por teclado: cin: lee hasta el primer separador (espacio, tabulador, intro)
getline(): lee hasta el primer retorno de carro
Escritura por pantalla: cout: muestra en pantalla el valor de la cadena de caracteres
string palabra, frase;string s=Hasta luego; ...
cin >> palabra;
si la entrada fuese buenos das se almacenara en la variable palabraslo la cadena buenos
getline(cin,frase); si la entrada fuese Hola, qu tal? se almacenara todo el texto en la variable frase
CADENAS DE CARACTERES
cout > nombre;getline(cin,apellidos);
CADENAS DE CARACTERES
-
Fundamentos de Informtica ETSI Industrial 35 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* Ejemplo de declaracin, inicializacin, lecturay escritura de cadenas de caracteres */
#include using namespace std;
int main() {string nombre, apellidos;string direccion = Avda. Amrica, 35;cout > nombre; // lee una sola palabra cin.ignore(); // quita el separador del buffercout
-
Fundamentos de Informtica ETSI Industrial 37 Universidad de Mlaga Jos Antonio Gmez Ruiz
/*Muestra las veces que aparece un determinado carcter en un texto*/#include using namespace std;
int main() {string texto; char ch;int i=0, veces=0;cout ch;while(texto[i]!='\0') {if (texto[i] == ch)
veces++;
i++;}
cout
-
Fundamentos de Informtica ETSI Industrial 39 Universidad de Mlaga Jos Antonio Gmez Ruiz
CADENAS DE CARACTERES Concatenacin de cadenas: usando el operador +
Comparacin entre cadenas: usando los operadores relacionales(==, !=, , =)
string frase = Hola;frase = frase + , buenos da + s;cout frase2) //mayor lexicogrficamente...
Fundamentos de Informtica ETSI Industrial 40 Universidad de Mlaga Jos Antonio Gmez Ruiz
CADENAS DE CARACTERESCadenas de Caracteres como argumentos y retorno en funciones Las cadenas se pueden pasar como argumento a una funcin Por defecto, las variables de tipo string se pasan por valor
Por tanto, cualquier modificacin que se haga un parmetroformal de tipo string dentro del cuerpo de una funcin, noafecta al parmetro real de la llamada a la misma
Al igual que los tipos simples, una funcin puede devolver unavariable de tipo string como retorno de una funcin
Para pasar una cadena por referencia a una funcin se hace dela misma forma que los tipos simples, se utiliza el operador dedireccin (&) slo en la cabecera de la funcin, precediendo alparmetro formal que queremos que se pase por referencia,pero no en la llamada a la funcin ni en el cuerpo de la misma
-
Fundamentos de Informtica ETSI Industrial 41 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* Ejemplo: funcin equivalente a getline(cin,cadena) */void leer_frase(string &cadena) {char letra;cadena.clear(); // se vaca el contenido de la cadenacin >> noskipws; // para que no se salte los espacios en blancocin >> letra;while(letra!='\n') {cadena+=letra; cin >> letra; }
}
CADENAS DE CARACTERES
/* Ejemplo: funcin equivalente a cout
-
Fundamentos de Informtica ETSI Industrial 43 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. Clasificacin de los tipos de datos: simples y estructurados.
6.2. El tipo array.
6.2.1. Arrays unidimensionales.
6.2.2. Arrays multidimensionales.
6.3. Las cadenas de caracteres. El tipo string.6.3.1. Lectura y escritura de cadenas de caracteres.
6.3.2. Operadores y funciones relacionadas.
6.4. EL TIPO REGISTRO ( struct ).
6.5. Anidamientos de estructuras de datos estticas.
6.6. Algoritmos bsicos de bsqueda y ordenacin.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 44 Universidad de Mlaga Jos Antonio Gmez Ruiz
Cuando se quiere procesar un conjunto de datos de distintotipo, se pueden crean interfaces engorrosas de manejar:
Si se agrupase la informacin, se obtendran interfaces mssimples y legibles:
comparar_fechas(dia1,mes1,ao1,dia2,mes2,ao2);sumar_fracciones(num1,den1, num2,den2);leer_datos_persona(dni,nombre,dir,dia_nacim,
mes_nacim,ao_nacim,lugar_nacim, nacionalidad);
comparar_fechas(fecha1, fecha2);sumar_fracciones(fraccion1, fraccion2);leer_datos_persona(empleado);
EL TIPO REGISTRO
-
Fundamentos de Informtica ETSI Industrial 45 Universidad de Mlaga Jos Antonio Gmez Ruiz
Un registro (o estructura) es una coleccin finita yheterognea (de distinto tipo) de uno o ms elementos
Cada uno de esos elementos tiene asociado su propio nombre,que se denomina campo
Cada campo puede ser de cualquier tipo definido previamente Ejemplo:
dni
nmeros
cadenas
nombre
domicilio
d_nac m_nac a_nac
lugar_nac
nacionalidad
personaCampos
EL TIPO REGISTRO
Fundamentos de Informtica ETSI Industrial 46 Universidad de Mlaga Jos Antonio Gmez Ruiz
Declaracin de un tipo registro (no es necesario usar typedef) :
Ejemplo de declaracin:
struct nombre_registro{Tipo1 campo1;Tipo2 campo2;...
};Los nombres deben ser distintos
Tipo nuevo
Tipos ya definidos: cualesquiera
struct TPersona{long dni;string nombre, domicilio;unsigned d_nac,m_nac,a_nac;string lugar_nac, nacionalidad;
};
EL TIPO REGISTRO
-
Fundamentos de Informtica ETSI Industrial 47 Universidad de Mlaga Jos Antonio Gmez Ruiz
Declaracin de una variable de tipo registro:
Se puede inicializar la variable en el momento de sudeclaracin. Se asigna la informacin en el mismo orden en elque se declararon los campos:
nombre_registro nombre_variable;
El tipo del registro tiene que haber sido declarado antes
TPersona pepito={193412,Pepito Ortega,C/ Rue del Percebe,3,25, 10, 1970,Mlaga, Espaola
};
EL TIPO REGISTRO
Fundamentos de Informtica ETSI Industrial 48 Universidad de Mlaga Jos Antonio Gmez Ruiz
Acceso a los campos: se utiliza el operador punto (.)
pepito.dni
pepitopepitopepitopepito
pepito.a_nac
pepito.d_nac pepito.domicilio[12]
193412
Pepito Ortega
C/ Rue del Percebe, 325 10 1970
Madrid
espaola
EL TIPO REGISTRO
-
Fundamentos de Informtica ETSI Industrial 49 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* ejemplo de declaracin de registros y acceso a los campos */#include using namespace std;
struct TComponente{int codigo;string nombre; float coste;
};int main() {TComponente resistencia;TComponente condensador={25,condensador,0.25};resistencia.codigo=10;resistencia.nombre=resistencia; resistencia.coste =0.06;cout
-
Fundamentos de Informtica ETSI Industrial 51 Universidad de Mlaga Jos Antonio Gmez Ruiz
Registros como argumentos y retorno en funciones Los registros se pueden pasar como argumento a una funcin Por defecto, el registro se pasa por valor Por tanto, cualquier modificacin que se haga un parmetro
formal del tipo registro dentro del cuerpo de una funcin, noafecta al parmetro real de la llamada a la misma
Al igual que los tipos simples, una funcin puede devolveruna variable del tipo registro como retorno de una funcin
Para pasar un registro por referencia a una funcin se hace dela misma forma que los tipos simples, se utiliza el operador dedireccin (&) slo en la cabecera de la funcin, precediendo alparmetro formal que queremos que se pase por referencia,pero no en la llamada a la funcin ni en el cuerpo de la misma
EL TIPO REGISTRO
Fundamentos de Informtica ETSI Industrial 52 Universidad de Mlaga Jos Antonio Gmez Ruiz
#include using namespace std;
struct TPersona{string nombre; long telefono;
};void mostrar_persona(TPersona p);TPersona leer_persona();int main() {TPersona p1;p1 = leer_persona();mostrar_persona( p1 ); return 0;
}void mostrar_persona(TPersona p ) {cout
-
Fundamentos de Informtica ETSI Industrial 53 Universidad de Mlaga Jos Antonio Gmez Ruiz
#include using namespace std;
struct TPersona{string nombre; long telefono;
};void mostrar_persona(TPersona p);void leer_persona(TPersona &p );int main() {TPersona p1;leer_persona( p1 );mostrar_persona( p1 ); return 0;
}
void mostrar_persona(TPersona p ) {cout
-
Fundamentos de Informtica ETSI Industrial 55 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. Clasificacin de los tipos de datos: simples y estructurados.
6.2. El tipo array.
6.2.1. Arrays unidimensionales.
6.2.3. Arrays multidimensionales.
6.3. Las cadenas de caracteres. El tipo string.6.3.1. Lectura y escritura de cadenas de caracteres.
6.3.2. Operadores y funciones relacionadas.
6.5. El tipo registro ( struct ).
6.6. ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS.
6.7. Algoritmos bsicos de bsqueda y ordenacin.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 56 Universidad de Mlaga Jos Antonio Gmez Ruiz
Las estructuras de datos estticas se pueden anidar: Se pueden utilizar enumerados como ndices en arrays Un registro puede tener campos de cualquier tipo que haya
sigo definido: Arrays (uni y multidimensionales) Registros
Cualquier otro tipo definido Los arrays pueden a su vez tener como tipo base a un tipo
registro o cualquier tipo definido Pondremos ejemplos de las construcciones ms tpicas.
ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS
-
Fundamentos de Informtica ETSI Industrial 57 Universidad de Mlaga Jos Antonio Gmez Ruiz
Registros con campos de tipo registro: Para usar un campo de tipo registro tiene que estar previamente
declaradostruct TFecha{unsigned dia;unsigned mes;unsigned anio;};struct TPersona{long dni;string nombre, domicilio;TFecha f_nac ;string lugar_nac, nacionalidad;
};TPersona pepito={193412,Pepito Ortega,
C/ Rue del Percebe,3,{25, 10, 1970}, Mlaga,Espaola};
ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS
Fundamentos de Informtica ETSI Industrial 58 Universidad de Mlaga Jos Antonio Gmez Ruiz
pepito.dni
pepitopepitopepitopepito
pepito.f_nac.anio
pepito.f_nac.dia pepito.domicilio[12]
193412
Pepito Ortega
C/ Rue del Percebe, 3
25 10 1970
Madrid
espaola
ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS
-
Fundamentos de Informtica ETSI Industrial 59 Universidad de Mlaga Jos Antonio Gmez Ruiz
Arrays de registros y registros con tipos simples oestructurados:
#define N_EMPLEADOS 10struct TFecha{unsigned dia;unsigned mes;unsigned anio;};struct TPersona{long dni;string nombre, domicilio;TFecha f_nac;string lugar_nac, nacionalidad;
};typedef TPersona TBanco[N_EMPLEADOS];
ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS
Fundamentos de Informtica ETSI Industrial 60 Universidad de Mlaga Jos Antonio Gmez Ruiz
237879
Pepe Prez
C/ Su Casa, 25
13 02 1981
Malaga
espaola
153317
Luis Ortiz
Avda. Velazquez, 12
21 09 1963
Barcelona
espaola
819412394412
Carmen Luque
Plaza Constitucin, 25
02 05 1975
vilaespaola
193412
Jaimito Barrientos
C/ Rue del Percebe, 3
25 10 1970
Madrid
espaolabanco[0]banco[1]
banco[2]
banco[9]
O
O
banco[2].dni
banco[1].domicilio[0] banco[0].f_nac.mes
ANIDAMIENTOS DE ESTRUCTURAS DE DATOS ESTTICAS
TBanco banco;
-
Fundamentos de Informtica ETSI Industrial 61 Universidad de Mlaga Jos Antonio Gmez Ruiz
6.1. Clasificacin de los tipos de datos: simples y estructurados.
6.2. El tipo array.
6.2.1. Arrays unidimensionales.
6.2.2. Manipulacin de arrays con punteros.
6.2.3. Arrays multidimensionales.
6.3. Las cadenas de caracteres. El tipo string.6.3.1. Lectura y escritura de cadenas de caracteres.
6.3.2. Operadores y funciones relacionadas.
6.5. El tipo registro ( struct ).
6.6. Anidamientos de estructuras de datos estticas.
6.7. ALGORITMOS BSICOS DE BSQUEDA Y ORDENACIN.
Tema 6: Tipos de Datos EstructuradosEstructura y Contenidos
Fundamentos de Informtica ETSI Industrial 62 Universidad de Mlaga Jos Antonio Gmez Ruiz
Algoritmos deBsqueda
Algoritmos deOrdenacin
Algoritmos deBsqueda
Algoritmos deOrdenacin
Bsqueda Secuencial
Bsqueda Binaria
Bsqueda Secuencial
Bsqueda Binaria
Insercin
Seleccin
Intercambio (Burbuja)
Insercin
Seleccin
Intercambio (Burbuja)
ALGORITMOS DE BSQUEDA Y ORDENACIN
-
Fundamentos de Informtica ETSI Industrial 63 Universidad de Mlaga Jos Antonio Gmez Ruiz
Consiste en buscar (indicando su posicin) un elemento enuna estructura de datos
Es una operacin muy frecuente en programacin, por lo queexisten diversidad de algoritmos Con diferencias de eficiencia entre ellos
La estructura de datos puede considerarse una lista de datos
Cada dato de la lista se denomina componente o elemento
Una lista puede implementarse mediante un array
En los ejemplos utilizaremos un array de nmeros enteros
ALGORITMOS DE BSQUEDA
Fundamentos de Informtica ETSI Industrial 64 Universidad de Mlaga Jos Antonio Gmez Ruiz
Aplicabilidad: Desconocimiento acerca
de la organizacin de losdatos
Estructura slo accedidasecuencialmente
Idea clave: Visitar todas las posiciones
del array, hasta que se encuentre el elemento o se llegue al final del array (el elemento no est).
/* Algoritmo de bsqueda secuencial.Devuelve el ndice del elemento enel array. -1 Si no se encuentra */
int bus_sec(TVector v, int x, int tam){
int ind; int pos = -1; /* supongo no
encontrado*/
ind = 0; //primera posicin arraywhile ( ind
-
Fundamentos de Informtica ETSI Industrial 65 Universidad de Mlaga Jos Antonio Gmez Ruiz
En el bucle: la evaluacin en cortocircuito de la condicinevita errores de rango en el array
Eficiencia segn el nmero de operaciones de comparacin(v[ind]!= x) para un array de tamao N:
Mejor Caso 1 comparacinPeor Caso N comparacionesCaso Promedio N/2 comparaciones
Condiciones para el fin de la bsqueda: Elemento hallado: v[ind] == x Elemento no hallado: ind == tam
BSQUEDA SECUENCIAL
Fundamentos de Informtica ETSI Industrial 66 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* Algoritmo de bsqueda binaria. Devuelve el ndice delelemento en el array. Si no se encuentra devuelve -1 */
int bus_binaria(TVector v, int x, int tam){int izq, der, m, posicion = -1; /*supongo no encontrado*/
izq = 0; /*izq comienza con el 1er elemento del array */der = tam - 1; /*der comienza con el ltimo elem array */while((izq
-
Fundamentos de Informtica ETSI Industrial 67 Universidad de Mlaga Jos Antonio Gmez Ruiz
Sobre la eleccin de m: No afecta a la correccin del algoritmo
Objetivo: descartar el mayor nmero de elementos encada iteracin
Eleccin ptima: m =(izq + der)/2 Eficiencia (peor caso): trunc(log2 N) + 1
...
while( izq
-
Fundamentos de Informtica ETSI Industrial 69 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
403
2derizqi +=
m = 4v[4] > xder = 4-1
0 1 2 3 4 5 6 7 8 9
BSQUEDA BINARIA
Fundamentos de Informtica ETSI Industrial 70 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
03
2derizqi +=
m = (1+3)/2
0 1 2 3 4 5 6 7 8 9
1
BSQUEDA BINARIA
-
Fundamentos de Informtica ETSI Industrial 71 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
123
2derizqi +=
m = 1v[1] < xizq = 1+1
0 1 2 3 4 5 6 7 8 9
BSQUEDA BINARIA
Fundamentos de Informtica ETSI Industrial 72 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
223
2derizqi +=
m = (2+3)/2
0 1 2 3 4 5 6 7 8 9
BSQUEDA BINARIA
-
Fundamentos de Informtica ETSI Industrial 73 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
233
2derizqi +=
0 1 2 3 4 5 6 7 8 9
m = 2v[2] < xizq = 2+1
BSQUEDA BINARIA
Fundamentos de Informtica ETSI Industrial 74 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
333
2derizqi +=
0 1 2 3 4 5 6 7 8 9
m = (3+3)/2
BSQUEDA BINARIA
-
Fundamentos de Informtica ETSI Industrial 75 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq derm
61
343
2derizqi +=
0 1 2 3 4 5 6 7 8 9
m = 3v[3] < xizq = 3+1
BSQUEDA BINARIA
Fundamentos de Informtica ETSI Industrial 76 Universidad de Mlaga Jos Antonio Gmez Ruiz
0 2 7 11 18 21 23 37 45
12x
v
izq der
61
43
2derizqi +=
0 1 2 3 4 5 6 7 8 9
izq > derNO encontrado4 iteraciones
BSQUEDA BINARIA
-
Fundamentos de Informtica ETSI Industrial 77 Universidad de Mlaga Jos Antonio Gmez Ruiz
La ordenacin de datos es una tarea relevante enprogramacin
Es un problema clsico ampliamente estudiado, por lo queexisten diversidad de algoritmos
Los algoritmos difieren en su eficiencia: Economa en el uso de memoria Economa en el nmero de operaciones:
Algoritmos directos: Insercin, Seleccin e Intercambio(o Burbuja) (complejidad N2 )
Algoritmo ms eficiente: Quicksort (complejidadNlog2 N), basado en la tcnica de la recursividad
ALGORITMOS DE ORDENACIN
Fundamentos de Informtica ETSI Industrial 78 Universidad de Mlaga Jos Antonio Gmez Ruiz
La estructura de datos a considerar es la misma que para losalgoritmos de bsqueda, consideraremos la lista como unarray de nmeros enteros
Sobre el array debe haber definida una relacin de orden(como es el caso de los nmeros enteros)
El problema de la ordenacin (ascendente) de un vector v, detamao MAX, consiste en encontrar una permutacin s de loselementos del vector, tal que se cumpla:
V[si]
-
Fundamentos de Informtica ETSI Industrial 79 Universidad de Mlaga Jos Antonio Gmez Ruiz
Idea clave: Determinar la posicin del menor elemento del array Intercambiar dicho elemento por el elemento que hay en la
primera posicin V0. Ahora el elemento ms pequeo esten la primera posicin del array
Repetir esta operacin con los MAX-2 elementos restantesV2 , ... , VMAX-1
Ejemplo. Ordenar la siguiente secuencia en orden ascendente:234, 132, 89, 12, 345, 35, 98, 983, 345, 25
ORDENACIN POR SELECCIN
Fundamentos de Informtica ETSI Industrial 80 Universidad de Mlaga Jos Antonio Gmez Ruiz
En cada pasada del algoritmo, se selecciona el menor para laposicin i-sima:
i=1
i=2
i=3
i=4
i=0 234 132 89 12 345 35 98 983 345 25
12 132 89 234 345 35 98 983 345 25
12 25 89 234 345 35 98 983 345 132
12 25 35 234 345 89 98 983 345 132
12 25 35 89 345 234 98 983 345 132
ORDENACIN POR SELECCIN
-
Fundamentos de Informtica ETSI Industrial 81 Universidad de Mlaga Jos Antonio Gmez Ruiz
i=6
i=7
i=8
i=5 12 25 35 89 98 234 345 983 345 132
12 25 35 89 98 132 345 983 345 234
12 25 35 89 98 132 234 983 345 345
12 25 35 89 98 132 234 345 983 345
12 25 35 89 98 132 234 345 345 983
ORDENACIN POR SELECCIN
Fundamentos de Informtica ETSI Industrial 82 Universidad de Mlaga Jos Antonio Gmez Ruiz
/* Algoritmo para intercambiar dos valores */void intercambia(int &x, int &y){int aux;aux = x;x = y;y = aux;
}
/* Algoritmo de ordenacin por Seleccin */void ord_seleccion(TVector &v,int tam){int i, j, posmin;for(i=0; i
-
Fundamentos de Informtica ETSI Industrial 83 Universidad de Mlaga Jos Antonio Gmez Ruiz
FIN DEL TEMA
Tema 6: Tipos de Datos Estructurados