5
Laboratorio de Programación I Página 142 Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión  29 UNIVERSIDAD CATÓLICA DE SANTA MARÍA PROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS SESIÓN N° 29: Estructuras Anónimas en C/C++ I OBJETIVOS  Comprender los conceptos de arreglos de variables tipo struct y su implementación dentro de programas.   Aplicar ar reglos de variables tipo struct en la solución de problemas de gestión de datos.   Valorar las ventajas y capacidades que proporcionan los arreglos de variables tipo struct. II TEMAS A TRATAR  Introducción.  Estructuras dinámicas   Arreglos dinámicos de estructuras  Estructuras autoreferenciadas  Resumen. III MARCO TEORICO 1 INTRODUCCIÓN  En Lenguaje C/C++ las estructuras también pueden ser anónimas, eso significa que el tipo de dato específico que construimos en realidad no tiene un identificador y solo lo usamos la construcción del nuevo tipo de dato para definir la estructura y a partir de allí  derivar una variable que determina el identificador del nuevo tipo de dato construido.. 2 TIPOS NÓNIMOS  El nombre de un tipo de estructura puede omitirse, teniéndose lo que se llama un tipo anónimo (sin nombre). Pueden utilizarse en declaraciones de componentes separados por comas cuando se quiere indicar que los componentes son (o derivan de) un tipo de estructura determinado. Presenta el problema de que al no poderse referir más al ti po (por no tener nombre), no pueden declararse más objetos adicionales en ningún otro  sitio. Ejemplo: typedef struct { ..;..;..; } s, *ps, arrs[10]; // tipo sin nombre Es posible crear un typedef al mismo tiempo que se declara una estructura, con o sin nombre, como se ve en los ejemplos; generalmente no se necesitan un typedef y un nombre al mismo tiempo, ya que cualquiera de ellos sirve para las declaraciones. typedef struct mystruct { ..;..; } MST;

Guia de Practicas de Programacion I - Sesion 29 - 2012

Embed Size (px)

Citation preview

7/24/2019 Guia de Practicas de Programacion I - Sesion 29 - 2012

http://slidepdf.com/reader/full/guia-de-practicas-de-programacion-i-sesion-29-2012 1/4

Laboratorio de Programación I Página 142

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N°  29 

UNIVERSIDAD CATÓLICA DE SANTA MARÍAPROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS

SESIÓN N° 29:

Estructuras Anónimas en C/C++

I

OBJETIVOS

 

Comprender los conceptos de arreglos de variables tipo struct y su implementación dentrode programas.

 

 Aplicar ar reglos de variables tipo struct en la solución de problemas de gestión de datos.   Valorar las ventajas y capacidades que proporcionan los arreglos de variables tipo struct.

II

TEMAS A TRATAR

 

Introducción. 

Estructuras dinámicas   Arreglos dinámicos de estructuras  Estructuras autoreferenciadas  Resumen.

III

MARCO TEORICO

1 INTRODUCCIÓN 

En Lenguaje C/C++ las estructuras también pueden ser anónimas, eso significa que el tipode dato específico que construimos en realidad no tiene un identificador y solo lo usamosla construcción del nuevo tipo de dato para definir la estructura y a partir de allí derivar unavariable que determina el identificador del nuevo tipo de dato construido..

2

TIPOS NÓNIMOS

 

El nombre de un tipo de estructura puede omitirse, teniéndose lo que se llama un tipoanónimo (sin nombre). Pueden utilizarse en declaraciones de componentes separadospor comas cuando se quiere indicar que los componentes son (o derivan de) un tipo deestructura determinado. Presenta el problema de que al no poderse referir más al tipo(por no tener nombre), no pueden declararse más objetos adicionales en ningún otro  sitio.Ejemplo:

typedef struct { ..;..;..; } s, *ps, arrs[10]; // tipo sin nombre

Es posible crear un typedef al mismo tiempo que se declara una estructura, con o sin

nombre, como se ve en los ejemplos; generalmente no se necesitan un typedef y unnombre al mismo tiempo, ya que cualquiera de ellos sirve para las declaraciones.

typedef struct mystruct { ..;..; } MST;

7/24/2019 Guia de Practicas de Programacion I - Sesion 29 - 2012

http://slidepdf.com/reader/full/guia-de-practicas-de-programacion-i-sesion-29-2012 2/4

Laboratorio de Programación I Página 143

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N°  29 

MST s, *ps, arrs[10]; // igual que struct mystruct s, etc.typedef struct { ..;..; } YST; // sin nombreYST y, *yp, arry[20];

Cuando son miembros de clases, las estructuras y uniones anónimas son ignoradasdurante la inicialización. 

El ANSI C++ solamente permite estructuras anónimas que declaren un objeto. Por su

parte, el ANSI C no permite estructuras anónimas, y el compilador C++ de Borlandpermite varios tipos de estructuras anónimas que extienden el estándar ANSI. 

Debido a que no hay propiedades de instancia, la sintaxis C++ para las estructurasanónimas no permite referenciar un puntero this. Por consiguiente, mientras que unaestructura C++ puede tener funciones miembro, las estructuras anónimas C++ no puedentenerlas. Los miembros de las estructuras anónimas pueden ser accedidos directamenteen el ámbito en que las estructuras han sido declaradas sin la necesidad de utilizar lasintaxis x.y o p->y. Ejemplo:

struct my_struct {int x;struct {

int i;

};inline int func1(int y){return y + i + x;}} S;

int main() {S.x = 6; S.i = 4;int y = S.func1(3);printf(“y is %d“, y); return 0;

}

3 ESTRUCTUR S NÓNIM S ANIDADAS

Borland C++ permite estructuras anónimas y que no sean usadas para declarar un objetoo cualquier otro tipo. Tienen la forma que se indica:

struct { lista-de-miembros };

Las estructuras anónimas pueden ser anidadas, es decir, declaradas dentro de otraestructura, unión o clase; en estos casos, la estructura externa debe tener nombre.Ejemplo:

struct my_struct {int x;struct { // estructura anónima anidada dentro de my_struct

int i;};inline int func1(int y);

} S;

Para compatibilidad con el compilador de Visual C++ de Microsoft, el compilador BorlandC++ permite declarar una estructura con nombre que no declara ningún objeto. Estasestructuras huérfanas deben ser anidadas. Ejemplo: 

struct Direccion {char calle[25];int numero;

};

struct Persona {char nombre[35]struct Direccion; // estructura huérfana

} candidato; // una instancia de Persona

7/24/2019 Guia de Practicas de Programacion I - Sesion 29 - 2012

http://slidepdf.com/reader/full/guia-de-practicas-de-programacion-i-sesion-29-2012 3/4

Laboratorio de Programación I Página 144

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N°  29 

candidato.numero = 10;

A ACCESO A MIEMBROS DE ESTRUCTURAS ANIDADAS

Si existen estructuras anidadas, es decir, si la estructura B contiene un campo a de tipo

estructura A, los sub-miembros de a pueden ser accedidos mediante una doble aplicacióndel operador de selección. Ejemplo:

struct A {int j; double x;};

struct B {int i; double d;struct A a;} s, *sptr = &s;

...s.i = 3; // asigna 3 al miembro i de Bs.a.j = 2; // asigna 2 al miembro j de Asptr->d = 1.2; // asigna 1.2 al miembro d de Bsptr->a.x = 3.1; // asigna 3.1 al miembro x de A

Ejemplo:

#include <stdio.h>#include <math.h>

struct punto {int x; int y;}; // definición de estructuradouble isqrt(int valor); // prototipo de función isqrt

int main(void){ // ==============punto p1 = {2,3}, p2 = {4,5}, *ptr1 = &p1;printf ("%3d,%3d", p1.x, p1.y);printf ("%3d,%3d", ptr1->x, ptr1->y);

double dist;dist = isqrt(p1.x * p1.x + p1.y * p1.y );printf("Distancia: %5.5f\n", dist);

}double isqrt(int num) { // definición de función isqrt

return pow((double)num, (double).5);}

El ANSI C dispone en la Librería Estándar de la función sqrt() que calcula directamente laraíz cuadrada, pero esta función no es estándar en ANSI C++, por lo que usamos pow()que si lo és (acepta dos duble); para ello definimos una nueva función isqrt() que calculadirectamente la raíz cuadrada de un int utilizando pow(x, .5). 

4 RESUMEN

Las estructuras se pueden declarar sin nombre, pero no sin la ausencia del typedef enMicrosoft Visual C++, de alguna forma definimos una variable a partir del tipo anónimo sintener una definición que no se usa más que para declarar y luego extendemos el tipo dedato usándola para operar y declarar nuevas variables si se desea..

IV

(La práctica tiene una duración de 2 horas) ACTIVIDADES

1. 

Encender el equipo de cómputo, si existe algún desperfecto o faltante en el equipocomunicarlo inmediatamente.

2.   Al aparecer la solicitud de contraseña hacer clic en el botón Cancelar o ingresar el nombre

de cuenta(login) y contraseña(password) que especifique el Docente. Esperar que

7/24/2019 Guia de Practicas de Programacion I - Sesion 29 - 2012

http://slidepdf.com/reader/full/guia-de-practicas-de-programacion-i-sesion-29-2012 4/4

Laboratorio de Programación I Página 145

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N°  29 

aparezca el mensaje de Inicio de sesión. 3.  Crear una carpeta que se llame Programación I y dentro de ella una que se llame Práctica 

Nº 28 dentro de la carpeta Mis Documentos

4. 

Ejecute el Visual Studio 2010, crear un nuevo proyecto CRL, para esto elegir en lapestaña Archivo y aquí elegir la opción más adecuada.

5. 

Nombrar los archivos como se indica en el archivo ctividades N° 29  que se adjunta yasegurarse de almacenarlos en la carpeta Práctica Nº 29 al momento de crearlos.

6.  Realizar las acciones indicadas en el archivo adjunto.

7. 

 Al finalizar la práctica de be guardar todos sus archivos, ya sea en su memoria USB o porcorreo electrónico y luego eliminar los archivos del equipo y vaciar la papelera de

reciclaje.

V

EJERCICIOS

1.   Agregue una funcionalidad al programa que permita mostrar a los alumnos del quintosuperior.

VI

CUESTIONARIO

1.  ¿Qué es un arreglo de estructuras?.2.

 

¿Cómo se declarar un arreglo de estructuras?. 3.

 

¿Cómo se almacena en memoria un arreglo de estructuras?. 4.  ¿Porqué se debe declarar primero la estructura y luego el arreglo de estructuras?.  5.

 

¿Qué ventajas permite la gestión de datos mediante arreglos de estructuras?.6.

 

¿Cómo accedemos a los datos miembros de un arreglo de estructuras?. 7.  ¿Dentro de una estructura se puede incluir una función?. 

VII

BIBLIOGRAFIA Y REFERENCIAS

  Deitel, Paul J., Deitel, Harvey M., "Cómo Programar en C++", 6ta Edición, Ed. PearsonEducación, México 2009. 

  Ceballos Sierra, Francisco J., "Curso de Programación C++. Programación Orientada aObjetos"; MADRID, RA-MA, 1991.

  Kernighan, Brian W., Ritchie, Dennis M., "El Lenguaje de Programación C", 2da Edición, Ed.Prentice Hispanoamérica S. A., México 1991.