Programación General > C/C++
Como declaro miembros de una struct en una funcion
o.ficu:
Muchas gracias por su ayuda!!!!!
o.ficu:
Hola nuevamente, espero no caer "pesado" pero no entiendo que estoy haciendo mal, recien me estoy familiarizando bien en estos temas y espero me tengan paciencia, en el problema trata de que una seria de usuarios, que hacen un numero de llamadas con cierto tiempo cada llamada y con cierta fecha, el problema me dice que haga una funcion llamada CONSUMO que reciba como parametros: El array de usuarios(usuarios),la dimension de usuarios(n),el numero telefonico(del numero con mayor tiempo en la llamada telef) y el mes(q se realizo dicha llamada), el programa funciona bien mientras el codigo que lo explicare en el mismo codigo para que puedan entenderme esta dentro de otra funcion, pero cuando quiero hacer esta funcion consumo no me sale :S gracias de antemano por su ayda:
--- Código: C ---#include<iostream>#include<stdlib.h>#include<stdio.h> using namespace std; const int N=1000; typedef {int dia,mes,anio;}fecha;typedef{ fecha f; char numTlf[14]; // numero al cual se llama float tiempo; // linea control }llamada;typedef{ char numero[14]; char usuario[40]; int nllam; //numero de llamadas llamada llam[100]; //array de llamadas }LineaControl; void IngresaDatos(LineaControl usuarios[],int &n); //ojo que tenemos que hacer como puntero para que la variable n pueda avanzarvoid 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 clientevoid consumo(LineaControl usuarios[],int &n,llamada llam.numTlf[],fecha f.mes); void IngresaDatos(LineaControl usuarios[],int &n){ fflush(stdin); cout<<"tttIngrese 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++;} void ImprimeDatos(LineaControl usuarios[],int &n){ cout<<"Los datos ingresados fueron: "<<endl<<endl; for(int i=1;i<n;i++) { 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; /* ACA ES DONDE EXPLICO QUE SI ME FUNCIONA SIN CREAR LA FUNCION QYE ME PIDEN int posic; for(int i=1;i<n;i++) { float mayor=0; for(int j=1;j<=usuarios[i].nllam;j++) { if(usuarios[i].llam[j].tiempo>mayor) {mayor=usuarios[i].llam[j].tiempo;} } for(int j=1;j<=usuarios[i].nllam;j++) { if(mayor==usuarios[i].llam[j].tiempo) {posic=j;} } 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; }ACA TERMINA*/ } void consumo(LineaControl usuarios[],int &n,llamada llam.numTlf[],fecha f.mes){ int posic; for(int i=1;i<n;i++) { float mayor=0; for(int j=1;j<=usuarios[i].nllam;j++) //busco el de mayor tiempo de llamada { 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 ese mayor tiempo de llamada { if(mayor==usuarios[i].llam[j].tiempo) {posic=j;} } cout<<"La llamada mas larga que realizo "<<usuarios[i].usuario<<" fue al numero: "<< cout<<usuarios[i].llam[posic].numTlf<<" y duro: "<<usuarios[i].llam[posic].tiempo<<" en el mes de "<< cout<<usuarios[i].llam[posic].f.mes<<endl; } } int main(){ int personas,i,n=1; fecha f; llamada llam[]; cout<<"Ingrese la cantidad de personas a procesar: "; cin>>personas; for(i=1;i<=personas;i++) { IngresaDatos(usuarios,n); } ImprimeDatos(usuarios,n); consumo(usuarios,n,llam.numTlf,f.mes); system("PAUSE"); return 0;} GRACIAS POR SU PACIENCIA Y AYUDA
m0skit0:
A ver. Sigues empeñado en poner nombres con referencias a registros en los parámetros de las funciones. En los parámetros de funciones sólo necesitas poner el tipo. Olvídate de si está en una estructura de datos. La función no lo necesita saber ^_^
--- Código: C ---void consumo(LineaControl usuarios[],int &n,llamada llam.numTlf[],fecha f.mes); sería:
--- Código: Text ---int consumo(char usuarios[],char numTlf[],int mes); He suprimido n como referencia. Haz que la función devuelva ese valor con un return, siempre es más limpio y más rápido. Fíjate que declaro directamente los parámetros que necesito. No te comas la cabeza con si el mes está en fecha o no. Simplemente cuando quieras usar la función, llámala con los parámetros adecuados:
--- Código: C ---n = consumo(usuarios, una_llamada.numTlf, f.mes); Otro pequeño apunte: los tipos creados por ti es mejor identificarlos como tipo poniendo una t o algún carácter delante, o crear una regla para nombrarlos que las diferencien de las variables. Sino te haces un lío con tipos y variables, y el código es un caos al final.
Navegación
[*] Página Anterior
Ir a la versión completa