Está en la página 1de 9

Estructuras

Estructuras

2013
TransversaldeProgramacinBsica
ProyectoCurriculardeIngenieradeSistemas

Estructuras

Objetivos

Asimilarelconceptodeestructura
Aprenderadefinirunaestructura
Utilizarestructuraspararepresentardatoscomplejos

Introduccin

Enalgunoslenguajesesposibleagregartiposdedatosdefinidosporelprogramador,estostipos
dedatosnormalmenteestnconstituidosdedatosbsicos(enelcasodeCyC++int,char,etc.)y
sureunintienealgnpropsitodediseo.

Definicin

Unaestructuraesunconjuntodeunaomsvariables,dedistintotipo,agrupadasbajounmismo
nombreparaquesumanejoseamssencillo.Suutilizacinmshabitualesparalaprogramacin
debasesdedatos,yaqueestnespecialmenteindicadasparaeltrabajoconregistrosofichas.

Lasintaxisdesudeclaracineslasiguiente:

structtipo_estructura
{
tipo_variablenombre_variable1;
tipo_variablenombre_variable2;
tipo_variablenombre_variable3;
};

Donde,
tipo_estructuraeselnombredelnuevotipodedatoquehemoscreado.
tipo_variableynombre_variablesonlasvariablesqueformanpartedelaestructura.

Paradefinirvariablesdeltipoqueacabamosdecrearlopodemoshacerdevariasmaneras,
aunquelasdosmsutilizadassonstas:

Unaformadedefinirlaestructura:

structtrabajador
{
charnombre[20];
charapellidos[40];

Estructuras

intedad;
charpuesto[10];
};
structtrabajadorfijo,temporal;

Otraforma:

structtrabajador
{
charnombre[20];
charapellidos[40];
intedad;
charpuesto[10];
}
fijo,temporal;

Enelprimercasodeclaramoslaestructura,yenelmomentoenquenecesitamoslasvariables,las
declaramos. En el segundo las declaramos al mismo tiempo que la estructura. El problema del
segundomtodoesquenopodremosdeclararmsvariablesdeestetipoalolargodelprograma.
Para poder declarar una variable de tipo estructura, la estructura tiene que estar declarada
previamente.Sedebedeclararantesdelafuncinmain.

Elmanejodelasestructurasesmuysencillo,ascomoelaccesoaloscampos(ovariables)deestas
estructuras.Laformadeaccederaestoscamposeslasiguiente:

variable.campo;

Dondevariableeselnombredelavariabledetipoestructuraquehemoscreado,ycampoesel
nombredelavariablequeformapartedelaestructura.Loveremosmejorconunejemplobasado
enlaestructuraanterior.

temporal.edad=25;

Loqueestamoshaciendoesalmacenarelvalor25enelcampoedaddelavariabletemporalde
tipotrabajador.

Otra caracterstica interesante de las estructuras es que permiten pasar el contenido de una
estructuraaotra,siemprequeseandelmismotiponaturalmente:

fijo=temporal;

Aligualqueconlosotrostiposdedatos,tambinesposibleinicializarvariablesdetipoestructura
enelmomentodesudeclaracin:

Estructuras

structtrabajadorfijo={"Pedro","HernndezSurez",32,"gerente"};

Si uno de los campos de la estructura es un array de nmeros, los valores de la inicializacin


debernirentrellaves:

structnotas
{
charnombre[30];
intnotas[5];
};
structnotasalumno={"CarlosPrez",{8,7,9,6,10}};

Estructurasyfunciones

Podemosenviarunaestructuraaunafuncindelasdosmanerasconocidas:

1. Porvalor:sudeclaracinsera:

voidvisualizar(structtrabajador);

Despusdeclararamoslavariablefijoysullamadasera:

visualizar(fijo);

Porltimo,eldesarrollodelafuncinsera:

voidvisualizar(structtrabajadordatos)

/*Pasodeunaestructuraporvalor.*/
#include<cstdlib>
#include<iostream>
usingnamespacestd;
structtrabajador
{
charnombre[20];
charapellidos[40];
intedad;
charpuesto[10];
};
voidvisualizar(structtrabajador);
intmain()/*Rellenaryvisualizar*/

Estructuras

{
structtrabajadorfijo;
cout<<("Nombre:");
gets(fijo.nombre);
cout<<("\nApellidos:");
gets(fijo.apellidos);
cout<<("\nEdad:");
chartemp[10];
gets(temp);
fijo.edad=atoi(temp);
cout<<("\nPuesto:");
gets(fijo.puesto);
visualizar(fijo);
system("PAUSE");
returnEXIT_SUCCESS;
}
voidvisualizar(structtrabajadordatos)
{
cout<<"Nombre:"<<datos.nombre;
cout<<"\nApellidos:"<<datos.apellidos;
cout<<"\nEdad:"<<datos.edad;
cout<<"\nPuesto:"<<datos.puesto<<endl;
}
2.

Porreferencia:sudeclaracinsera:

voidvisualizar(structtrabajador*);

Despusdeclararemoslavariablefijoysullamadaser:
visualizar(&fijo);

Porltimo,eldesarrollodelafuncinser:

voidvisualizar(structtrabajador*datos)

En la funcin visualizar, el acceso a los campos de la variable datos se realiza mediante el


operador>,yaquetratamosconunpuntero.Enestoscasossiempreutilizaremoseloperador>.
Seconsigueconelsignomenosseguidodemayorque.

Estructuras

#include<cstdlib>
#include<iostream>
usingnamespacestd;
/*Pasodeunaestructuraporreferencia.*/
structtrabajador
{
charnombre[20];
charapellidos[40];
intedad;
charpuesto[10];
};
voidvisualizar(structtrabajador*);
main()/*Rellenaryvisualizar*/
{
structtrabajadorfijo;
cout<<("Nombre:");
gets(fijo.nombre);
cout<<("\nApellidos:");
gets(fijo.apellidos);
cout<<("\nEdad:");
chartemp[10];
gets(temp);
fijo.edad=(atoi(temp));
cout<<("\nPuesto:");
gets(fijo.puesto);
visualizar(&fijo);
system("PAUSE");
returnEXIT_SUCCESS;
}
voidvisualizar(structtrabajador*datos)
{
cout<<"Nombre:"<<datos>nombre<<endl;
cout<<"\nApellidos:"<<datos>apellidos<<endl;
cout<<"\nEdad:"<<datos>edad<<endl;
cout<<"\nPuesto:"<<datos>puesto<<endl;
}

Estructuras

Arraysdeestructuras

Esposibleagruparunconjuntodeelementosdetipoestructuraenunarray.Estoseconocecomo
arraydeestructuras:

structtrabajador
{
charnombre[20];
charapellidos[40];
intedad;
};
structtrabajadorfijo[20];

Aspodremosalmacenarlosdatosde20trabajadores.

Ejemplos sobre como acceder a los campos y sus elementos: para ver el nombre del cuarto
trabajador, fijo[3].nombre;. Para ver la tercera letra del nombre del cuarto trabajador,
fijo[3].nombre[2];. Para inicializar la variable en el momento de declararla lo haremos de esta
manera:

structtrabajadorfijo[20]={{"Jos","HerreroMartnez",29},{"Luis","GarcaSnchez",46}};

Typedef

Esposibleagruparunconjuntodeelementosdetipoestructuraenunarray.Estoseconocecomo
arraydeestructuras:Ellenguaje'C'disponedeunadeclaracinllamadatypedefquepermitela
creacindenuevostiposdedatos.Ejemplos:

typedefintentero;/*acabamosdecrearuntipodedatollamadoentero*/
enteroa,b=3;/*declaramosdosvariablesdeestetipo*/

Suempleoconestructurasestespecialmenteindicado.Sepuedehacerdevariasformas:

Unaformadehacerlo:

structtrabajador
{
charnombre[20];
charapellidos[40];
intedad;
};
typedefstructtrabajadordatos;
datosfijo,temporal;

Estructuras

Otraforma:

typedefstruct
{
charnombre[20];
charapellidos[40];
intedad;
}
datos;
datosfijo,temporal;

Ejercicios

1. Creeunaestructuraquerepresenteunpuntogeomtrico(x,y)ycreeunafuncinque
permitacalcularladistanciaentredospuntos.
2. Escribeunprogramautilizandounaestructuraquellevecontroldeuninventariodecintas
enunatiendadevideo.Asegratedequelaestructuraincluyaelttulodelacinta,la
longituddelacinta,elprecioderenta,lafechaenquesevendi,ylaclasificacindela
cinta.
3. Cmoesmsconvenientedeclararunaestructura,enformaglobaloenformalocal?
Expliquesurespuesta.
4. Creardosestructuras
structdistancia{
metros
centimetros
}
structvolumen{
longitud
anchura
altura
}
representanlasdimensionesdeunahabitacin.
Escribirunprogramaquelealasdimensionesdeunahabitacinenmetrosycentmetrosy
calculesuvolumen.
LecturadeProfundizacin:

Textotomadode:
http://www.josedomingo.org/web/pluginfile.php/1270/mod_resource/content/0/curso/E
STRUCTURAS.pdf

Estructuras

Imgenes
Lasimgenesfuerontomadasdewww.google.com

Fuentes:

http://es.wikiversity.org/wiki/Fundamentos_de_C__Lecci%C3%B3n_3
http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29
http://www2.ing.puc.cl/~iic11021/materia/misc/struct.htm
http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm
http://manual.conitec.net/structs.htm

También podría gustarte