Arrays, cadenas y estructuras

42
Fundamentos de Informática ETSI Industrial 1 Universidad de Málaga José Antonio Gómez Ruiz 6.1. CLASIFICACIÓN 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 ESTÁTICAS. 6.6. ALGORITMOS BÁSICOS DE BÚSQUEDA Y ORDENACIÓN. Tema 6: Tipos de Datos Estructurados Estructura y Contenidos Fundamentos de Informática ETSI Industrial 2 Universidad de Málaga José Antonio Gómez Ruiz Establecer las diferencias entre los distintos tipos de datos Análisis de diversos problemas para mostrar la necesidad del uso de tipos de datos estructurados Definición de estructuras de datos complejas Definición de tipos de datos propios para una mayor simplicidad y legibilidad en los programas Estudio y aplicación de los algoritmos de búsqueda y ordenación Tema 6: Tipos de Datos Estructurados OBJETIVOS

description

Fundamentos de la programación.

Transcript of Arrays, cadenas y estructuras

  • 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