Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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"};
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)
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