Está en la página 1de 20

ESTRUCTURAS


Tema: Estructuras
 Una estructura es una colección de información,
dispuesto a modo de tabla.
 La información es dispuesta en campos, los
campos tiene distintos tipos de datos.
 La información para estos campos es lo que se
conoce como registro
 La estructura tiene un nombre y para relacionar
cada campo se hace necesario de un alias.
8/01/2021 Ing Daniel Osorio Maldonado 1
La sintaxis para una estructura es la siguiente
struct nomb_struct{
campo1;
campo2;
campo3;
………..;
campoN
};
……………….
………………
void main(){
nomb_struct alias;
alias.campo1;
alias.campo2:
………………
}
8/01/2021 Ing Daniel Osorio Maldonado 2
ESTRUCTURAS EN Visual C++(modo consola)
Se puede decir que la struct define 02 formas de aplicación:
a) struct a nivel escalar o Registro
b) struct a nivel de programación Orientada a Objetos
Se sabe que un arreglo o array cualquiera que sea su dimensión solo
almacena valores homogéneos y podemos hacer operaciones sobre ellos
mediante su índice o índices como también recuperarlos. Pero si fuera el
caso que se desea almacenar valores como en la siguiente tabla

Nombre Paterno Materno Edad Curso Nota


Francisco Moncada Ruiz 20 Termodinámica 13

Seria algo difícil, por cuanto no podríamos combinar cadenas y


números, sin embargo aplicando estructura (struct ) si es posible.
Veamos una aplicación

8/01/2021 Ing Daniel Osorio Maldonado 3


#include<iostream> cin.getline(mb.materno,40);
cout<<"Ingrese su edad ";
#include<stdlib.h>
cin>>mb.edad;
using namespace std; cout<<"Ingrese Nombre del curso“ ;
struct tabla{ cin.ignore();
char nombre[20]; cin.getline(mb.curso,20);
char paterno[40]; cout<<"Ingrese Nota del curso ";
cin>>mb.nota1;
char materno[40];
///////////////////////////////
int edad; cout<<endl<<"Recuperando de la
char curso[20]; memoria un Registro grabado"<<endl;
int nota1; cout<<"Su Nombre "<<mb.nombre<<endl
}; <<"Su Apellido Paterno “
<<mb.paterno<<endl
void main(){
<<"Su Apellido Materno “
tabla mb; <<mb.materno<<endl<<"Su edad “
cout<<"Ingrese Nombre "; <<mb.edad<<endl
cin.getline(mb.nombre,20); <<"Su Curso "<<mb.curso<<endl
cout<<"Ingrese Apellido “ <<"La nota del Curso “
<<mb.nota1<<endl;
cin.getline(mb.paterno,40);
system("pause");
cout<<"Ingrese su Apellido }
Materno ";
8/01/2021 Ing Daniel Osorio Maldonado
Resultado de la ejecución
Ingres Nombre Carmela
Ingrese Apellido Paterno Vargas
Ingrese su Apellido Materno Sanchez
Ingrese su edad 18
Ingrese Nombre del curso Algebra I
Ingrese Nota del curso 15

Recuperando de la memoria un Registro grabado


Su Nombre Carmela
Su Apellido Paterno Sánchez
Su Apellido Materno Cornejo
Su edad 18
Su Curso Algebra I
La nota del Curso 15
Presione una tecla para continuar . . .
8/01/2021 Ing Daniel Osorio Maldonado 5
Por consiguiente un registro contiene campos y estos campos están definidos de
alguna manera con un tipo de dato. Tal como se apreció en la solución del ejemplo.
Si fuera el caso de gestionar un conjunto de registros con los mismos campos se haría
necesario crear una variable del tipo arreglo.

Varios Registros
int N,i;
#include<iostream>
cout<<"Ingrese la cantidad de
#include<stdlib.h>
Alumnos= ";cin>>N;
#include<time.h>
for(i=1;i<=N;i++){
using namespace std;
cout<<"Ingrese Nombre ";
struct tabla{
cin.getline(boleta[i].nombre,20);
char nombre[20];
cout<<"Ingrese Apellido Paterno
char paterno[40];
";
char materno[40];
cin.getline(boleta[i].paterno,40)
int edad;
;
char curso[20];
cout<<"Ingrese su Apellido
int P1,P2,P3,P4;
Materno ";
};
cin.getline(boleta[i].materno,40)
void main(){
;
tabla boleta[100];
cout<<"Ingrese su edad ";
srand((unsigned)time(NULL));
cin>>boleta[i].edad;
8/01/2021 Ing Daniel Osorio Maldonado 6
cout<<endl<<"Recuperando de la
memoria un Registro grabado"<<endl;
cout<<"Ingrese Nombre del
for(i=1;i<=N;i++){
curso ";cin.ignore();
cout<<"Su Nombre «
cin.getline(boleta[i].curso,20
<<boleta[i].nombre<<endl
);
<<"Su Apellido Paterno«
cout<<"Notas de parcticas del
<<boleta[i].paterno<<endl
curso: "<<endl;
<<"Su Apellido Materno «
boleta[i].P1=rand()%21;
<<boleta[i].materno<<endl
cout<<boleta[i].P1<<endl;
<<"Su edad "<<boleta[i].edad<<endl
boleta[i].P2=rand()%21;
<<"Su Curso "<<boleta[i].curso<<endl
cout<<boleta[i].P2<<endl;
<<"Las nota del Curso \n“
boleta[i].P3=rand()%21;
<<boleta[i].P1<<endl
cout<<boleta[i].P3<<endl;
<<boleta[i].P2<<endl
boleta[i].P4=rand()%21;
<<boleta[i].P3<<endl
cout<<boleta[i].P4<<endl;
<<boleta[i].P4<<endl;
}
}
system("pause");
}

8/01/2021 Ing Daniel Osorio Maldonado 7


Una Estrctura 0
#include<iostream>
#include<stdlib.h> cout<<"El cliente ha comprado “
using namespace std; <<endl
struct VentaCd{ <<Vcd.Titulo<<endl
char Titulo[40]; <<Vcd.Artista<<endl
char Artista[40]; <<Vcd.precio<<endl
float precio; <<Vcd.TCanciones<<endl;
int TCanciones;
}; system("pause");
}
void main(){
VentaCd Vcd;
cout<<"Ingrese el Titulo ";
cin.getline(Vcd.Titulo,40);
cout<<"Ingrese Cantante ";
cin.getline(Vcd.Artista,40);
cout<<"Ingrese Precio ";
cin>>Vcd.precio;
cout<<"Ingrese el Total ";
cin>>Vcd.TCanciones;

9/01/2021 Ing Daniel Osorio Maldonado 8


//Con Valores Iniciales void main(){
#include<iostream> VentaCd Vcd1;
#include<stdlib.h> strcpy(Vcd1.Titulo,"Buscandote ");
#include<string> strcpy(Vcd1.Artista,"Eduardo Franco
using namespace std; ");
struct VentaCd{ Vcd1.precio=10;
char Titulo[40]; Vcd1.TCanciones=15;
char Artista[40]; ///////////////////////////////
float precio; cout<<"\nEl cliente ha comprado «
int TCanciones; <<endl
} Vcd0={ <<Vcd0.Titulo<<"Por el Artista “
"........ ",//titulo, deberá <<endl
colocar un titulo <<Vcd0.Artista<<"Al Precio de "<<endl
"........",//Cantante, igual <<Vcd0.precio<<"\nHaciendo un total
un cantante de "<<endl
...,//Precio de cada CD <<Vcd0.TCanciones<<endl<<endl;
....//Total de Canciones Total
de CDs cout<<"\nEl cliente ha comprado «
}; <<endl
<<Vcd1.Titulo<<"Por el Artista “
<<endl

9/01/2021 Ing Daniel Osorio Maldonado 9


<<Vcd1.Artista<<"Al Precio de
"<<endl
<<Vcd1.precio<<"\nHaciendo un
total de "<<endl
<<Vcd1.TCanciones<<endl;
system("pause");
}

9/01/2021 Ing Daniel Osorio Maldonado 10


//Aplicando Struc
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
struct ficha{
char nombres[20];
int edad;
char curso[20];
int nota;
}; // es factible colocar la variable de este tipo }boleta;
using namespace std;
void main(){
ficha boleta[100];
int N,i;
cout<<"Ingrese el No de Alumnos =";
cin>>N;
for(i=1;i<=N;i++){
cout<<"Ingrese el Nombre =";cin.ignore();
cin.getline(boleta[i].nombres,20);
cout<<"Ingrese su edad= ";
cin>>boleta[i].edad;
cout<<"Ingrese su curso =";cin.ignore();
cin.getline(boleta[i].curso,20);
cout<<"Ingrese su nota= ";
cin>>boleta[i].nota;
cout<<endl;
}
8/01/2021 Ing Daniel Osorio Maldonado 11
//Salida
for(i=1;i<=N;i++){
cout<<" El alumno de nombre "<<boleta[i].nombres<<endl<<"Cuya edad es "
<<boleta[i].edad<<endl<<"Lleva el curso de "<<boleta[i].curso<<endl
<<" y tiene por Nota "<<boleta[i].nota<<endl;
}
System(“pause”);
}

8/01/2021 Ing Daniel Osorio Maldonado 12


//Aplicando Struc
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
struct ficha{
char nombres[20];
int edad;
char curso[20];
int nota1;
int nota2;
int nota3;
int nota4;
float promedio;
}; // es factible colocar la variable de este tipo }boleta;
using namespace std;
void main(){
ficha boleta[100];
int N,i;
cout<<"Ingrese el No de Alumnos =";cin>>N;
for(i=1;i<=N;i++){
cout<<"Ingrese el Nombre =";cin.ignore();
cin.getline(boleta[i].nombres,20);
8/01/2021 Ing Daniel Osorio Maldonado 13
cout<<"Ingrese su edad= ";cin.ignore();
cin>>boleta[i].edad;
cout<<"Ingrese su curso =";cin.ignore();
cin.getline(boleta[i].curso,20);
cout<<"Ingrese su nota1= ";cin.ignore();
cin>>boleta[i].nota1;
cout<<"Ingrese su nota2= ";cin.ignore();
cin>>boleta[i].nota2;
cout<<"Ingrese su nota3= ";cin.ignore();
cin>>boleta[i].nota3;
cout<<"Ingrese su nota4= ";cin.ignore();
cin>>boleta[i].nota4;
boleta[i].promedio=(boleta[i].nota1+boleta[i].nota2+
boleta[i].nota3+boleta[i].nota4)/4;
cout<<endl;
}
//Salida
for(i=1;i<=N;i++){
cout<<" El alumno de nombre "<<boleta[i].nombres<<endl<<"Cuya edad es "
<<boleta[i].edad<<endl<<"Lleva el curso de "<<boleta[i].curso<<endl
<<" y tiene por promedio "<<boleta[i].promedio<<endl;}
system("pause");}
8/01/2021 Ing Daniel Osorio Maldonado 14
Usando struct nomb_struc como una forma primitiva de la
programación orientada a Objetos
Con struct nomb_struc se puede simular la programación
orientada a Objetos, que se usa con class pero la limitación
es que sus datos y sus funciones miembros son publicas, a
diferencia de las class que sus datos son privados y que es la
esencia del paradigma de la programación con objetos.
Un objeto tiene determinadas propiedades y característica y
también unas funciónes habilidades para actuar sobre el
objeto.

8/01/2021 Ing Daniel Osorio Maldonado 15


En el ejercicio visto en la ultima clase se practico la
aplicación con argumentos en su método, ahora vea
float rectangulo::area(){
#include<iostream> return(a*b);}
#include<stdlib.h> float rectangulo::perimetro()
using namespace std; {return(2*a+2*b);}
struct rectangulo{ void main(){
float a,b; rectangulo figura;
void leeab(float x,float y); float p,q;
float area(); cout<<"Ingrese el valor del lado a= ";
float perimetro(); cin>>p;
}; cout<<"Ingrese el valor del lado b= ";
//implemntacion cin>>q;
void rectangulo::leeab(float figura.leeab(p,q);
x, float y){ cout<<"El area= "<<
a=x;b=y; figura.area()<<endl
} <<"El perimetro= “
<<figura.perimetro()<<endl;
system("pause");
}
8/01/2021 Ing Daniel Osorio Maldonado 16
//Calcula el area del Trapecio
#include<iostream.h>
#include<conio.h>
struct figura {
float b,B,h;
void leerbBh(float x,float y, float z);
double Cal_Area();
};
void figura::leerbBh(float x,float y, float z){
b=x;B=y;h=z;}
double figura::Cal_Area(){
return((b+B)*h/2.0);}
using namespace std;
void main(){
figura trapecio;
float a,b,c;
cout<<"Ingrese el Valor de b =";cin>>a;
cout<<"Ingrese el Valor de B =";cin>>b;
cout<<"Ingrese el Valor de h =";cin>>c;
trapecio.leerbBh(a,b,c);
cout<<"El Area del Trapecio es “
<<trapecio.Cal_Area();
System(“pause”);
} 8/01/2021 Ing Daniel Osorio Maldonado 17
La explicación, una vez que recibe la asignación
leeab(float float x, float y)
{a=x; b=y;}
Ya queda en la memoria los valores de ‘a’ y ‘b’, por
consiguiente es solo llamar de la memoria los valores de a y b.
Este tema será tratado con mas profundidad cuando lo
toquemos en la POO con class.

El otro tema que es bueno lo practiquen es lo relacionado con


struct , pero en esta ocasión se trata de una struct anidada, es
decir se puede crear una struct A{ } y también crear otra struct
B{ }, en algún momento la struct A va ha tener a la struct B
dentro de la struct A. veamos una aplicación

8/01/2021 Ing Daniel Osorio Maldonado 18


#include<iostream> void main(){
#include<stdlib.h> int N;
#include<string> cout<<"Ingrese la cantidad de
using namespace std; alumnos a procesar: ";cin>>N;
struct DatoObijeo{ for(int i=1;i<=N;i++){
char direccion[40]; fflush(stdin);//Vacia el buffer y
char Distrito[40]; seguir almacenando
char Provincia[40]; cout<<"Digite su Nombre ";
}; cin.getline(alumno[i].Nombre,70,'\n
'); // '\n' es salto de carro
struct DatoAlu{ cout<<"Digite su direccion ";
char Nombre[40]; cin.getline(alumno[i].dir_alumno.di
char Curso[40]; reccion,70,'\n');
int Nota; cout<<"Ciudad ";
struct DatoObijeo dir_alumno; cin.getline(alumno[i].dir_alumno.Di
}alumno[2]; strito,70,'\n');
cout<<"Provincia ";
cin.getline(alumno[i].dir_alumno.Pr
ovincia,70,'\n');
cout<<"Nota ";
cin>>alumno[i].Nota;
cout<<endl;}
9/01/2021 Ing Daniel ///////////////////////////////
Osorio Maldonado 19
//Imprimiendo los datos
for(int i=1;i<=N;i++){
cout<<"Nombre "<<alumno[i].Nombre<<endl
<<"Direccion
"<<alumno[i].dir_alumno.direccion<<endl
<<"Ciudad
"<<alumno[i].dir_alumno.Distrito<<endl
<<"Provincia
"<<alumno[i].dir_alumno.Provincia<<endl
<<"Nota "<<alumno[i].Nota<<endl<<endl;
}
system("pause");
}

9/01/2021 Ing Daniel Osorio Maldonado 20

También podría gustarte