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