Sei sulla pagina 1di 35

1

02/05/2012

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


FACULTAD DE INGENIERIA INDUSTRIAL

Ing. Edgar Ruiz Lizama

02/05/2012

agregado coleccin de variables) permite gestionar un objeto compuesto. A diferencia de los array que poseen elementos de un mismo tipo de dato; las estructuras poseen elementos heterogneos, como una sola unidad. A una estructura tambin se le denomina, registro o record. Los siguientes objetos pueden formularse como estructuras: fecha{ dd/mm/aa }, Tiempo {h/m/s }, punto{ x,y }, numero_complejo { real, imag } , persona{ nombre,direccion,edad, sexo,estado civil,ocupacion }.
Ing. Edgar Ruiz Lizama

DEFINICIN:Una estructura (denominada tambin

02/05/2012

Abstraccin de las structs


fecha
dia

tiempo
hora

persona
nombre

mes

minuto

direccion

year

segundo

edad

sexo

punto
x

complejo
estad_civil real ocupacion

imag
Ing. Edgar Ruiz Lizama

02/05/2012

FORMATO BSICO
<struct> <Identificador nombre> { <tipo_dato1> <nombre variable>; <tipo_dato2> <nombre variable>; ...... }<variable(s) del tipo estructura>;

Donde struct, es la palabra reservada para declarar un registro; tipo_dato puede ser de tipo primitivo no y la(s) variable(s) del tipo struct son opcionales. Mg. Ing. Edgar Ruiz Lizama

02/05/2012

Las declaraciones en C++ para los ejemplos anteriores son:

struct fecha { int dia; int mes; int year; };

struct fecha { int dia,mes,year; };

Dos formas diferentes de declarar la estructura fecha.


Ing. Edgar Ruiz Lizama

02/05/2012

struct tiempo { int hora; int minuto; int segundo; };

struct punto { int x; int y; }p1,p2;

struct complejo{ float real; float imag; }comp1, comp2;

struct persona { char nombre[25]; char direccion[35]; short edad; bool sexo; char estad_civil[30]; char ocupacion[20]; }vecino;
Ing. Edgar Ruiz Lizama

02/05/2012

ACCESO A LOS CAMPOS MIEMBROS DE UNA struct


Los

lenguajes de C++ y C, proporcionan dos operadores para el acceso a los miembros de una struct. El operador de acceso a miembro, llamado tambin operador punto. El operador puntero a miembro, llamado tambin operador flecha.
Ing. Edgar Ruiz Lizama

1. 2.

02/05/2012

Ejemplo 1:Programa que muestra el uso del operador punto para la struct fecha
#include <iostream> //uso del operador punto struct fecha{ int dia, mes,year; }hoy; using namespace std; int main() //struct0.cpp { cout<<"Ingrese dia: "; cin>>hoy.dia; cout<<"Ingrese mes: "; cin>>hoy.mes; cout<<"Ingrese anio: "; cin>>hoy.year; //salida de datos cout<<"El dia de hoy es: "<<hoy.dia<<"/"<<hoy.mes <<"/"<<hoy.year<<endl; return 0; }
Ing. Edgar Ruiz Lizama

02/05/2012

Ejemplo 2:Programa que muestra el uso del operador flecha para la struct fecha
#include <iostream> /* Ilustrar el uso del operador flecha */ struct fecha{ int dia, mes, year; }hoy; using namespace std; int main() //struct01.cpp { struct fecha *aptr; // declaracion del apuntador aptr = &hoy; //inicializacion el apuntador cout<<"Ingrese fecha de hoy(dd mm aa): "; cin>>aptr->dia>>aptr->mes>>aptr->year; cout<<"\nEl dia de hoy es: "; cout<<aptr->dia<<'/'<<aptr->mes<<'/'<<aptr->year<<endl; return 0; }
Ing. Edgar Ruiz Lizama

10

02/05/2012

Ejemplo 3: Sea la estructura llamada registro cuyos campos son: nombre, cantidad y precio unitario para almacenar los datos de un producto. Se desea saber el precio total por la compra de un producto.
#include <iostream>

using namespace std; struct registro { char nombre[20]; int cantidad; float preciou; };

Ing. Edgar Ruiz Lizama

11

02/05/2012

int main() //struct02.cpp { struct registro prod; //registro prod float preciototal; cout<<"Ingrese el nombre del producto: "; gets(prod.nombre); // puede usar cin.getine(prod.nombre,20); cout<<"Ingrese la cantidad a comprar: "; cin>>prod.cantidad; cout<<"Ingrese Precio Unitario del Producto: "; cin>>prod.preciou; preciototal=prod.cantidad*prod.preciou; //salida de resultados cout<<"\nProducto Cantidad\tPrecio Unitario Precio Total"<<endl; cout<<prod.nombre<<"\t\t"<<prod.cantidad<<"\t\t"<<prod.preciou<<"\t\t"<<pre cio total<<endl; cout<<endl; return 0; }
Ing. Edgar Ruiz Lizama

12

02/05/2012

Ejecucin del programa

Ing. Edgar Ruiz Lizama

13

02/05/2012

PASO DE UNA ESTRUCTURA A UNA FUNCIN

Sean P1 y P2:
Al igual que los array cualquier otro tipo de datos, las estructuras tambin pueden pasarse como argumento a una funcin. 2 P2

P1

2
Ing. Edgar Ruiz Lizama

14

02/05/2012

Ejemplo 4: Escribir un programa que implementa la estructura punto de la figura anterior solucin:
#include <iostream> #include <iomanip.h> #include <math.h> struct punto { float x; float y; }; double modulo(punto p1,punto p2); using namespace std; int main() // struct3.cpp { punto p1={1,1},p2={2,2}; double distancia; distancia=modulo(p1,p2); cout<<"La distancia es : "<<setprecision(5)<<setw(8) <<distancia<<endl<<endl; return 0; }
Ing. Edgar Ruiz Lizama

//para setprecision() y setw()

15

02/05/2012

double modulo(punto p1,punto p2) { return sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2)); }

Ejecucin del programa:

La distancia es : 1.4142

Ing. Edgar Ruiz Lizama

16

02/05/2012

ARRAY DE ESTRUCTURAS
Las estructuras pueden gestionarse como un array. Sea la declaracin
struct producto{ char nombre[20]; int cantidad; float preciou; };

Ing. Edgar Ruiz Lizama

17

02/05/2012

ARRAY DE ESTRUCTURAS (continuacin)


La estructura puede trabajarse como un array haciendo la siguiente declaracin producto articulo[10]; y su ingreso de los datos puede ser tal como sigue:
void leerdatos(producto articulo[10]) { for(int i=0; i<10; i++) { cout<<Ingrese nombre: ; gets(articulo[i].nombre); cout<<Ingrese cantidad: <<endl; cin>>articulos[i].cantidad; cout<<Ingrese precio Unitario: ; cin>>articulo[i].preciou; } }

Mg. Ing. Edgar Ruiz Lizama

18

02/05/2012

Ejemplo 5: Escribir un programa que encuentre el articulo que tenga el menor precio unitario en un array de structs.
#include <iostream> #include <stdio.h> const int N=5; struct producto{ char nombre[20]; int cantidad; float preciou; }; void leerdatos(producto articulo[N]); void imprimedatos(producto art); int pumasbajo(producto arrart[N]); using namespace std;

-Continua-

Ing. Edgar Ruiz Lizama

Continuacion

19

02/05/2012

int main() { producto arrart[N]; int pumb; leerdatos(arrart); pumb=pumasbajo(arrart); cout<<endl<<"Los datos del art. de menor precioU es "<< pumb+1<<endl; imprimedatos(arrart[pumb]); return 0; } void leerdatos(producto arrart[N]) { for(int i=0; i<N; i++) { cout<<"\nIngrese nombre art nro "<<i+1<<" : "; gets(arrart[i].nombre); cout<<"\nIngrese cantidad: "; cin>>arrart[i].cantidad; cout<<"\nIngrese precio Unitario: "; cin>>arrart[i].preciou; Ing. Edgar Ruiz Lizama } -Continua}

Continuacin

20

02/05/2012

void imprimedatos(producto art) { cout<<"Nombre: "<<art.nombre<<endl; cout<<"Cantidad: "<<art.cantidad<<endl; cout<<"Precio Unitario: "<<art.preciou<<endl; } int pumasbajo(producto arrart[N]) { int i,posmenor;; float menor; posmenor=0; menor=arrart[0].preciou; for(i=1;i<N;i++) if(arrart[i].preciou<menor) { menor=arrart[i].preciou; posmenor=i; } return posmenor; }

Fin del programa


Ing. Edgar Ruiz Lizama

21

02/05/2012

Ejecucin del programa:

Ing. Edgar Ruiz Lizama

Ejemplo 6 : Ingresar los datos de un grupo de personas a un array de structs y luego encontrar a la mayor de todas ellas
#include <iostream> #include <stdio.h> #include <ctype.h>

22

02/05/2012

//para toupper()

const int N = 3; struct persona { char nombre[20]; char sexo; char ecivil; int edad; }; void ingresadatos(persona arrper[N]); void imprimedatos(persona per); int posmayor(persona arrper[N]); using namespace std;

-Continua-

Ing. Edgar Ruiz Lizama

23

02/05/2012

Continuacin
int main() { persona arrper[N]; int pmayor; ingresadatos(arrper); pmayor=posmayor(arrper); cout<<endl<<"La persona de mayor edad es la Nro"<<pmayor+1<<endl; imprimedatos(arrper[pmayor]); cout<<endl; return 0; }
Ing. Edgar Ruiz Lizama

//struct22.cpp

Continuacion

24

02/05/2012

void ingresadatos(persona arrper[N]) { char c; for(int i = 0;i < N; i++) { cout<<"Ingrese datos de la persona "<<i+1<<endl; cout<<"Nombre: "; gets(arrper[i].nombre); cout<<"Sexo (M) o (F): "; cin>>c; arrper[i].sexo = toupper(c); cout<<"Est civil (S) (C) (V) (D): "; cin>>c; arrper[i].ecivil=toupper(c); cout<<"edad: "; cin>>arrper[i].edad; } }
Ing. Edgar Ruiz Lizama

Continuacion

25

02/05/2012

void imprimedatos(persona per) { cout<<"Nombre: "<<per.nombre<<endl; cout<<"Sexo: "<<per.sexo<<endl; cout<<"Est. civil: "<<per.ecivil<<endl; cout<<"Edad: "<<per.edad<<endl; } int posmayor(persona arrper[N]) { int i,mayor,posmayor; posmayor=0; mayor=arrper[0].edad; for(i=1;i<N;i++) if(arrper[i].edad>mayor) { mayor=arrper[i].edad; posmayor=i; } return posmayor; }

Fin del programa

Ing. Edgar Ruiz Lizama

26

02/05/2012

Ejecucin del programa

Ing. Edgar Ruiz Lizama

27

02/05/2012

Ejemplo 7: multiplicar constante por polinomio


#include <iostream> //Edgar Ruiz Lizama //Multiplicar constante por polinomio: Version 1.0 const int MAX = 30; //numero maximo de terminos struct termino{ float coef; int expo; }; struct termino poli[MAX]; void leerPoli(termino poli[], int n); void printPoli(termino poli[], int n); void constXpoli(termino poli[], int n, float k); using namespace std;
Ing. Edgar Ruiz Lizama

Continuacin

28

02/05/2012

int main() //structPoli0.cpp { termino poli[MAX]; int n; cout<<"Cuantos terminos para el polinomio? "; cin>>n; leerPoli(poli,n); printPoli(poli,n); int k; cout<<"Ingrese constante que multiplica al polinomio: "; cin>>k; constXpoli(poli, n, k); printPoli(poli,n); return 0; }
Ing. Edgar Ruiz Lizama

Continuacin

29

02/05/2012

void leerPoli(termino poli[], int n) { for (int i = 0; i<n; i++) { cout<<"\nIngrese coeficiente "; cin>>poli[i].coef; cout<<"\nIngrese exponente "; cin>>poli[i].expo; } } void printPoli(termino poli[], int n) { cout<<"\nEl polinomio es: "; for (int i = 0; i<n; i++) { if (poli[i].expo == 0) cout<<poli[i].coef; else cout<<poli[i].coef<<"X^"<<poli[i].expo<<" + "; } cout<<endl; Ing. Edgar Ruiz Lizama }

Continuacin

30

02/05/2012

void constXpoli(termino poli[], int n, float k) { for (int i = 0; i<n; i++) poli[i].coef = k*poli[i].coef; }

Ing. Edgar Ruiz Lizama

31

02/05/2012

Ejemplo 8: multiplicar constante por polinomio.- Uso del typedef


#include <iostream> //Edgar Ruiz Lizama //Multiplicar constante por polinomio: Version 2.0 const int MAX = 30; //numero de terminos struct termino{ float coef; int expo; }; typedef struct termino poli[MAX]; void leerPoli(poli pn, int n); void printPoli(poli pn, int n); void constXpoli(poli pn, int n, float k); using namespace std;
Ing. Edgar Ruiz Lizama

Continuacin

32

02/05/2012

int main() //structPoli1.cpp { poli pn; int n; cout<<"Cuantos terminos para el polinomio? "; cin>>n; leerPoli(pn,n); printPoli(pn,n); int k; cout<<"Ingrese constante que multiplica al polinomio: "; cin>>k; constXpoli(pn, n, k); printPoli(pn,n); return 0; }
Ing. Edgar Ruiz Lizama

Continuacin

33

02/05/2012

void leerPoli(poli pn, int n) { for (int i = 0; i<n; i++) { cout<<"\nIngrese coeficiente "; cin>>pn[i].coef; cout<<"\nIngrese exponente "; cin>>pn[i].expo; } } void printPoli(poli pn, int n) { cout<<"\nEl polinomio es: "; for (int i = 0; i<n; i++) { if (pn[i].expo == 0) cout<<pn[i].coef; else cout<<pn[i].coef<<"X^"<<pn[i].expo<<" + "; } Ing. Edgar Ruiz Lizama cout<<endl; }

Continuacin

34

02/05/2012

void constXpoli(poli pn, int n, float k) { for (int i = 0; i<n; i++) pn[i].coef = k*pn[i].coef; }

Ing. Edgar Ruiz Lizama

35

02/05/2012

Referencias
1. 2. 3. 4. 5. 6.

Deitel y Deitel, Como programar en C/C++ 2da. ed. Editorial Prentice Hall. Mxico, 1995. Jansa Kris Aprenda C++ paso a paso 1ra. Ed. Alfaomega Grupo Editor, Mxico, 1996. Ruiz Lizama Edgar, Programacin con C++ 1ra. Ed. Fondo Editorial UNMSM, Lima, Per, 2009 Raffo Lecca E. Turbo C 3.0 Raffo Lecca Editores, Lima,1995. Schildt Herbert, C Gua de Autoenseanza 2da. ed. Editorial McGraw Hill. Espaa 1994. Ruiz Lizama Edgar, Curso de Lenguaje C 1ra. ed. Facultad de Ingeniera Industrial UNMSM. Lima, 1999.

ERL/2012

Ing. Edgar Ruiz Lizama

Potrebbero piacerti anche