Viernes 8 de Noviembre de 2024, 21:37
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Como declaro miembros de una struct en una funcion
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Como declaro miembros de una struct en una funcion (Leído 1987 veces)
o.ficu
Nuevo Miembro
Mensajes: 14
Como declaro miembros de una struct en una funcion
«
en:
Viernes 16 de Octubre de 2009, 00:04 »
0
Hola espero puedan ayudarme, siempre tengo problemas con esto, el problema es que no se como declarar un miembro de struct en una funcion, por ejemplo si me struct es: struct Datos{
char nombre[];
char apellidos[];
struct direccion{
char avenida[];
char ciudad;
struct telefonos{
char casa[];
char movi[];};
};
};
si deseo por ejemplo una funcion con argumentos de Datos seria: void(Datos p[]) pero si deseo declarar por ejemplo una funcion con argumento del numero de telefono de la casa, como lo hago??? void(Datos.telefonos.casa)??? no se como declarar cuando una estructura esta dentro de otra, espero puedan ayudarme, gracias.
Oliver
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #1 en:
Viernes 16 de Octubre de 2009, 09:49 »
0
Antes de todo, no te aconsejaría que declararas tales estructuras de datos como lo has hecho:
Código: C
struct
Datos
{
char
nombre
[
]
;
char
apellidos
[
]
;
struct
direccion
{
char
avenida
[
]
;
char
ciudad
;
struct
telefonos
{
char
casa
[
]
;
char
movi
[
]
;
}
;
}
;
}
;
Esto es difícil de leer, de manipular, de entender y poco flexible
Hazlo así mejor, queda más legible y más estructurado:
Código: C
typedef
struct
{
char
casa
[
]
;
char
movil
[
]
;
}
tTelefonos
;
typedef
struct
{
char
avenida
[
]
;
char
ciudad
;
tTelefonos telefonos
;
}
tDireccion
;
typedef
struct
{
char
nombre
[
]
;
char
apellidos
[
]
;
tDireccion direccion
;
}
tDatos
;
Ahora ya no tienes problemas para pasar cualquier tipo a una función:
Código: C
char
*
funcion1
(
tTelefonos telefonos
)
;
int
funcion2
(
tDireccion direccion
,
tTelefonos telefonos
,
tDatos datos
)
;
Fr33k K0mpu73r
o.ficu
Nuevo Miembro
Mensajes: 14
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #2 en:
Sábado 17 de Octubre de 2009, 07:32 »
0
Gracias por tu respuesta y tus consejos!!! pero aun me queda una duda, si me piden que yo en mi funcion tenga como argumento el NUMERO DE CASA entonces solo es posible declarar funcion(tTelefonos telefono) ???? no se puede declarar con el numero de casa??? y si encaso si se puede seria funcion(tTelefonos telefono.casa)???? o como???? esa en si es mi pregunta!!!
1.typedef struct
2.{
3. char casa[];
4. char movil[];
5.} tTelefonos;
6.
7.typedef struct
8.{
9. char avenida[];
10. char ciudad;
11. tTelefonos telefonos;
12.} tDireccion;
13.
14.typedef struct
15.{
16. char nombre[];
17. char apellidos[];
18. tDireccion direccion;
19.} tDatos;
Dynyck
Nuevo Miembro
Mensajes: 17
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #3 en:
Sábado 17 de Octubre de 2009, 14:13 »
0
Si quieres pasar a una función ese argumento, puedes pasar la estructura como referencia si no quieres ocupar "más memoria". Si así lo haces, luego en la definición de la función, accede al campo mediante el operador ".".
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #4 en:
Sábado 17 de Octubre de 2009, 18:33 »
0
Código: C
// Prototipo:
funcion1
(
char
*
numero_de_casa
)
;
// Llamada:
funcion1
(
direccion.
telefonos
.
casa
)
;
Fr33k K0mpu73r
o.ficu
Nuevo Miembro
Mensajes: 14
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #5 en:
Sábado 17 de Octubre de 2009, 18:58 »
0
Muchas gracias por su ayuda!!!!!
o.ficu
Nuevo Miembro
Mensajes: 14
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #6 en:
Domingo 18 de Octubre de 2009, 00:30 »
0
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 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
,
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
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Como declaro miembros de una struct en una funcion
«
Respuesta #7 en:
Lunes 19 de Octubre de 2009, 12:52 »
0
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.
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Como declaro miembros de una struct en una funcion