Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
02/05/2012
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
02/05/2012
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
02/05/2012
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
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; };
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
13
02/05/2012
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
15
02/05/2012
La distancia es : 1.4142
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; };
17
02/05/2012
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-
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; }
21
02/05/2012
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-
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; }
26
02/05/2012
27
02/05/2012
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; }
31
02/05/2012
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; }
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