Ahora veremos las variables de tipo struct (estructuras) que permiten guardar varios valores simultáneamente, pudiendo ser éstos de diferentes tipos.
Imaginemos por ejemplo que queremos guardar una agenda de contactos. Los datos a guardar van a ser de diferentes tipos: Nombre, apellido, calle, número, teléfono, celular, email, etc. Además de ser de distinto tipo tipo, muchos de esos datos están relacionados entre sí: de poco nos sirve saber la calle sin el número de la casa o viceversa.
Para estos casos, utilizamos las estructuras, como en el ejemplo siguiente:
struct contacto
{
string nombre;
string apellido;
string calle;
int numero;
string telefono;
string celular;
string email;
};
A partir de esta definición, contacto es un tipo de dato más, puedo crear variables de este tipo, cada una de las cuales tendrá sus campos individuales para guardar el nombre, el apellido, etc.
En el siguiente programa, se crea una struct llamada contacto con todos los campos mencionados, se define una variable llamada a de tipo contacto, luego el usuario ingresa los valores de los distintos campos de la estructura y por último se muestra la estructura por pantalla.
#include <iostream>
#include <cstdio>
using namespace std;
struct contacto
{
string nombre;
string apellido;
string calle;
int numero;
string telefono;
string celular;
string email;
};
int main()
{
setlocale(LC_ALL, "spanish"); // Para poder incluir acentos y eñes en los textos
contacto a;
cout<<"Ingrese los siguientes datos del contacto:"<<endl;
cout<<"Apellido: ";
getline (cin,a.apellido);
cout<<"Nombre: ";
getline (cin,a.nombre);
cout<< "Domicilio"<<endl<<"Calle: ";
getline (cin,a.calle);
cout<<"Número: ";
cin>> a.numero;
fflush(stdin); //para que al ingresar los datos no saltee el celular
cout<<"Celular: ";
getline (cin,a.celular);
cout<<"Teléfono(fijo):" ;
getline (cin, a.telefono);
cout<<"Correo electrónico: ";
cin >> a.email;
cout<<endl<<endl<<endl;
cout<<"Los datos ingresados son:"<<endl<<endl;
cout<<a.apellido<<", "<<a.nombre<<endl;
cout<<"Domicilio: "<<a.calle<<" "<<a.numero<<endl;
cout<<"Tel: "<<a.telefono<<endl;
cout<<"Cel: "<<a.celular<<endl;
cout<<"Email: "<<a.email<<endl<<endl;
return 0;
}
Las variables de tipo struct se pueden copiar con la instrucción de asignación, se pueden pasar como parámetros a una función. En cambio no es posible compararlas (no es posible definir cuándo un struct es menor a otro) ni es posible mostrarlas por pantalla o ingresarlas con cout y cin. Estas operaciones se deben hacer individualmente campo por campo. Para acceder a cada campo de la estructura se escribe el nombre de la variable, un punto y el nombre del campo.
Los campos de un struct pueden ser de cualquier tipo de dato, incluso de otra estructura definida previamente. Por ejemplo, se le puede agregar a contacto el campo fecha de nacimiento, de tipo fecha:
struct fecha
{
int dia;
int mes;
int anio;
};
struct contacto
{
string nombre;
string apellido;
string calle;
int numero;
string telefono;
string celular;
string email;
fecha fnac;
};
Para ingresar el año de nacimiento, se deberá ingresar:
cin>>a.fnac.anio;
También se pueden definir vectores de estructuras:
contacto b[10];
cin >>b[i].nombre;
O estructuras uno de cuyos campos es un vector:
struct alumno
{
int padron;
int notas [15];
};
alumno x;
for (i=0;i<15;i++)
{
cout<< x.notas[i];
Estas variables combinadas con vectores nos permiten crear registros de datos mucho más complejos, lo que nos permite representar problemas más dificiles y con mucha más información. Para no tener que ingresar esta información manualmente cada vez que se ejecuta el programa, se guardará en archivos, que permiten conservar la información aún después de cerrar el programa y apagar la computadora.
No hay comentarios:
Publicar un comentario