Mostrando entradas con la etiqueta Estructuras. Mostrar todas las entradas
Mostrando entradas con la etiqueta Estructuras. Mostrar todas las entradas

viernes, 16 de septiembre de 2011

Punteros a estructuras

Ejemplo de punteros a estructuras


#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
using namespace std;

struct Alumno
{
string nombre;
double nota;
};

void ingresoDatos(Alumno *p,int n)
{
for(int i=0;i<n;i++)
{
cout<<"Nombre "<<i+1<<": ";cin>>(*p).nombre;
do{
cout<<"Nota: ";cin>>(*p).nota;
}while((*p).nota<0 || (*p).nota>20);

p++;

cout<<endl;
}
}

void mostrarLista(Alumno *p,int n)
{
cout<<endl<<"Lista:"<<endl<<endl;

cout<<"Nombre:\t\tNota:"<<endl<<endl;

for(int i=0;i<n;i++)
{
cout<<(*p).nombre<<"\t\t"<<(*p).nota<<endl;
p++;
}
}


void main()
{
int n;

cout<<"Cantidad de alumnos: ";cin>>n;

Alumno *alumnos = new Alumno [n];

cout<<endl;

ingresoDatos(alumnos,n);

mostrarLista(alumnos,n);

_getch();
}

Moda de un arreglo

En estadística, la moda es el valor con una mayor frecuencia en una distribución de datos.


#include "stdafx.h"
#include "iostream"
#include "conio.h"

using namespace std;

int n;

struct structFrec
{
int element;
int frecuencia;
};

void ordenarvector(int *V)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(V[i]>V[j])
{
int temp = V[i];
V[i] = V[j];
V[j] = temp;
}
}
}
}

//Ordenar una estructura
void ordenarStruct(structFrec *S)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(S[i].frecuencia<S[j].frecuencia)
{
structFrec aux = S[i];
S[i] = S[j];
S[j] = aux;
}
}
}

}

void main()
{
cout<<"Ingrese el numero de elementos: ";cin>>n;

int *V = new int [n];
structFrec *frecuencias = new structFrec[n];

cout<<endl;

for(int i=0;i<n;i++)
{
cout<<"Nro "<<i+1<<" = ";
cin>>V[i];
}

ordenarvector(V);

int iFrec = 0;//Indice que recorrerá la estructura de frecuencias

double contador=1;

for(int i=0;i<n;i++)
{
if(V[i]==V[i+1])
contador++;
else
{
frecuencias[iFrec].element=V[i];
frecuencias[iFrec].frecuencia=contador;
iFrec++;
contador = 1;
}
}

//Ordenamos las frecuencias de MAYOR a MENOR
ordenarStruct(frecuencias);

//El primer elemento será el de mayor frecuencia
int maxFrec = frecuencias[0].frecuencia;

//Los que tengan esa frecuencia son las modas (incluyendo al primer elemento)
cout<<endl<<"MODA(S):"<<endl<<endl;

for(int i=0;i<iFrec;i++)
if(frecuencias[i].frecuencia==maxFrec)
cout<<"Nro: "<<frecuencias[i].element<<" ("<<frecuencias[i].frecuencia<<") veces"<<endl;

_getch();
}

Agenda

Guarda los nombres y telefonos en una estructura y la ordena.


#include "stdafx.h"
#include "conio.h"
#include "iostream"
using namespace std;

struct TPersona
{
char nombre[35];
int telefono;
}*agenda;

void ordenarStruct(TPersona *S,int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(S[i].nombre,S[j].nombre)>0)//Si la condicion se cumple retorna 1, sino 0
{
TPersona aux = S[i];
S[i] = S[j];
S[j] = aux;
}
}
}
}

void main()
{
int n;

cout<<"Ingrese numero de contactos: ";cin>>n;

agenda = new TPersona [n];

for(int i=0;i<n;i++)
{
cout<<endl<<"CONTACTO Nro "<<i+1<<endl;
cout<<"Nombre: ";cin>>agenda[i].nombre;
cout<<"Telefono: ";cin>>agenda[i].telefono;
}

ordenarStruct(agenda,n);

cout<<endl<<"AGENDA: "<<endl<<endl;
cout<<"Nro"<<"\t"<<"Name: "<<"\t"<<"Phone: "<<endl<<endl;

for(int i=0;i<n;i++)
cout<<i+1<<"\t"<<agenda[i].nombre<<"\t"<<agenda[i].telefono<<endl;

_getch();
}

Ordenar por nombre o promedio

Ordena una estructura de 2 diferentes maneras según el tipo de elementos que la componen.


#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;

struct datos
{
int carnet;
string name;
double promedio;
}*alumno;

void intercambio(int i, int j)
{
datos aux=alumno[i];
alumno[i]=alumno[j];
alumno[j]=aux;
}

void main()
{
int n,modo;

cout<<"Ingrese numero de alumnos: ";cin>>n;

alumno = new datos [n];

for(int i=0;i<n;i++)
{
cout<<endl<<"Nro de carnet:\t";cin>>alumno[i].carnet;
cout<<"Nombre: ";cin>>alumno[i].name;
cout<<"Promedio: ";cin>>alumno[i].promedio;
}

int repeat;


do{
do{
cout<<endl<<endl<<"MODO DE ORDENAMIENTO: (0) Alfabetico; (1) Promedios ";cin>>modo;
}while(modo<0 || modo>1);

for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(modo)
{
if(alumno[i].promedio<alumno[j].promedio)
intercambio(i,j);
}
else
{
if(alumno[i].name>alumno[j].name)
intercambio(i,j);
}
}
}

cout<<endl<<"Carnet\tNombre\tPromedio"<<endl;

for(int i=0;i<n;i++)
cout<<alumno[i].carnet<<"\t"<<alumno[i].name<<"\t"<<alumno[i].promedio<<endl;

do{
cout<<endl<<"Ordenar de nuevo (1 SI, 0 NO)";cin>>repeat;
}while(repeat<0 || repeat>1);

}while(repeat);
}

Partida de nacimiento

Ejemplo de una estructura anidada con otra. Guarda el nombre y la fecha de nacimiento, entre otros.


#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "string"
using namespace std;

struct TFecha
{
int dia;
int mes;
int anio;
};

struct TPartida
{
string paterno;
string materno;
string nombres;
string ciudad;
TFecha fechaNac; //Estructura anidada
}partida;

void leerDatos()//Ingresa datos al arreglo de estructuras
{
cout<<"Apellido paterno: ";cin>>partida.paterno;
cout<<"Apellido materno: ";cin>>partida.materno;
cout<<"Nombres: ";cin>>partida.nombres;
cout<<"Ciudad: ";cin>>partida.ciudad;
cout<<"Fecha de Nacimiento:"<<endl;
cout<<"\t"<<"Dia: ";cin>>partida.fechaNac.dia;
cout<<"\t"<<"Mes: ";cin>>partida.fechaNac.mes;
cout<<"\t"<<"Anio: ";cin>>partida.fechaNac.anio;
}

void imprimirDatos() //Imprime la lista
{
cout<<"Apellido paterno: "<<partida.paterno<<endl;
cout<<"Apellido materno: "<<partida.materno<<endl;
cout<<"Nombres: "<<partida.nombres<<endl;
cout<<"Ciudad: "<<partida.ciudad<<endl;
cout<<"Fecha de Nacimiento: "<<partida.fechaNac.dia<<"/"<<partida.fechaNac.mes<<"/"<<partida.fechaNac.anio;
}


void main()
{
leerDatos();
cout<<endl<<"Partida:"<<endl<<endl;
imprimirDatos();
_getch();
}

Tercio superior

Obtiene el tercio superior de una lista de alumnos


#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
using namespace std;

struct datos
{
string nombre;
double nota;
}*alumno;

void main()
{
int n;

cout<<"Ingrese cantidad de alumnos (mas de 3): ";cin>>n;

alumno = new datos [n];

cout<<endl<<"Ingrese nombre (sin espacios) y luego notas:"<<endl<<endl;

for(int i=0;i<n;i++)
{
cout<<"Nombre "<<i+1<<": ";cin>>alumno[i].nombre;

do{
cout<<"Nota: ";cin>>alumno[i].nota;
}while(alumno[i].nota<0 || alumno[i].nota>20);

cout<<endl;
}

for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(alumno[i].nota<alumno[j].nota)
{
datos aux=alumno[i];
alumno[i]=alumno[j];
alumno[j]=aux;
}
}
}

cout<<endl<<"Lista del tercio superior queda asi:"<<endl<<endl;

cout<<"Nombre:\tNota:"<<endl;

for(int i=0;i<n/3;i++)
cout<<alumno[i].nombre<<"\t"<<alumno[i].nota<<endl;

_getch();
}