El codigo es:
Código:
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include "header.h"
using namespace std;
const int N=1000;
struct LineaControl{
char numero[14];
char usuario[40];
int nllam; //numero de llamadas
llamada llam[100]; //array de llamadas
}usuarios[N];
void IngresaDatos(LineaControl usuarios[],int &n); //ojo que tenemos que hacer como puntero para que la variable n pueda avanzar
void ImprimeDatos(LineaControl usuarios[],int &n); //notese que cuando solo se declara int n te pedira siempre Ingrese el numero de telefono del 1 cliente
//siempre sera 1 cliente, 1 cliente
void consumo(LineaControl usuarios[],int &n,char numTlf,int mes);
void IngresaDatos(LineaControl usuarios[],int &n)
{
fflush(stdin);
cout<<"\t\t\tIngrese el numero de telefono del "<<n<<" cliente: "; gets(usuarios[n].numero);fflush(stdin);cout<<endl<<endl;
cout<<"Ingrese el nombre del cliente: "; gets(usuarios[n].usuario);fflush(stdin);
cout<<"Ingrese cantidad de llamadas que realizo el cliente: "; cin>>usuarios[n].nllam;fflush(stdin);
cout<<endl;
cout<<"Ingreso de datos de llamadas que realizo el cliente "<<usuarios[n].usuario<<endl;
for(int i=1;i<=usuarios[n].nllam;i++)
{ cout<<"Ingrese el "<<i<<" numero: "; gets(usuarios[n].llam[i].numTlf); fflush(stdin);
cout<<"Ingrese la duracion de la llamada: "; cin>>usuarios[n].llam[i].tiempo; fflush(stdin);
cout<<endl<<"Ingrese la fecha que se realizo la llamada dd/mm/aaaa: "; cin>>usuarios[n].llam[i].f.dia>>usuarios[n].llam[i].f.mes>>usuarios[n].llam[i].f.anio;fflush(stdin);
cout<<endl;
}
n++;// el n sigue avanzando, por ejemplo si ponemos dos personas, al final n valdra 3 por eso en la siguiente funcion
//ponemos com parametro en el for que i<n, sino imprimiria un tercer usuario y todo seria vacio
}
void ImprimeDatos(LineaControl usuarios[],int &n)
{
cout<<"Los datos ingresados fueron: "<<endl<<endl;
for(int i=1;i<n;i++) //ponemos que i<n por que el n ya avanzo en uno mas en la funcion anterior
{
cout<<"..................................................."<<endl;
cout<<"numero del cliente: "<<usuarios[i].numero; cout<<endl<<endl;
cout<<"nombre del cliente: "<<usuarios[i].usuario;cout<<endl;
cout<<"datos de llamadas que realizo el cliente "<<usuarios[i].usuario<<endl;
for(int j=1;j<=usuarios[i].nllam;j++)
{ cout<<usuarios[i].llam[j].numTlf<<endl;
cout<<"duracion de la llamada: "<<usuarios[i].llam[j].tiempo<<endl;
cout<<"fecha que se realizo la llamada dd/mm/aaaa: "<<usuarios[i].llam[j].f.dia<<" \ "<<usuarios[i].llam[j].f.mes<<" \ "<<usuarios[i].llam[j].f.anio;
cout<<endl<<endl;
}
cout<<"..................................................."<<endl;
}
cout<<endl<<endl;
}
void consumo(LineaControl usuarios[],int &n,char numTlf,int mes)
{
int posic;
for(int i=1;i<n;i++)
{ float mayor=0;
for(int j=1;j<=usuarios[i].nllam;j++) //busco quien tiene el tiempo mayor
{ if(usuarios[i].llam[j].tiempo>mayor)
{mayor=usuarios[i].llam[j].tiempo;}
}
for(int j=1;j<=usuarios[i].nllam;j++) //busco a quien le pertenece el numero mayor
{ if(mayor==usuarios[i].llam[j].tiempo)
{posic=j;} //marco la posicion
}
cout<<"La llamada mas larga que realizo "<<usuarios[i].usuario<<" fue al numero: "<<usuarios[i].llam[posic].numTlf<<" y duro: "<<usuarios[i].llam[posic].tiempo<<" en el mes de "<<usuarios[i].llam[posic].f.mes<<endl;
}
}
int main()
{ int personas,i,n=1;
fecha f;
//llamada llam;
//LineaControl usuarios;
cout<<"Ingrese la cantidad de personas a procesar: "; cin>>personas;
for(i=1;i<=personas;i++)//2557156
{ IngresaDatos(usuarios,n);
}
ImprimeDatos(usuarios,n);
consumo(usuarios,n,llam.numTlf,f.mes);
system("PAUSE");
return 0;
}
y el header es:
Código:
#ifndef LLAMADA_H
#define LLAMADA_H
struct fecha{int dia,mes,anio;};
struct llamada{
fecha f;
char numTlf[14]; // numero al cual se llama
float tiempo; // linea control
}llam[50];
#endif

