Necesito ayuda para manejar puntero programando en C

Hola, estoy programando en C y tengo cierta dificultad a la hora de manejar punteros, y tengo que hacer una función en la que es lo que tengo que utilizar. Espero que puedas ayudarme.
La función recibe dos parámetros uno es una estructura que puede ser por ejemplo:
typedef struct persona {
char nombre;
int edad;
struct persona *siguiente;
}persona;
Y también recibe un campo de este registro.
El objetivo de la función es sumar todos los valores del campo que pasas como parámetro del conjunto de registros.
Por ejemplo, si pasas el campo edad, pues debe calcular la suma de las edades.
Me gustaría que me ayudaras. Yo he pensado hacer un bucle, que mientras que el último registro no sea nulo.. Pues se sume el valor del campo, pero no se exactamente como hacerlo, por mi dificultado con los punteros.
Un saludo, y gracias

1 respuesta

Respuesta
1
Che acá lo único que tiene sentido sumar son las edades... pero bueno vamos al grano!
Che la solución es la que estas dando!
El puntero nulo en C creo que es NULL (siempre se me confunde con el NIL de pascal :D)
Así que un do loop funca en este caso... de todas formas por precaución JAMAS HAGAS do loops para recorrer listas en C! Es preferible que lo metas dentro de un FOR grande de manera que por cualquier cosa te salte que te fuiste al carajo con las iteraciones del bucle, o sea que digamos que pones un limite a la lista enlazada de 10000 elementos entonces tu bucle nunca podrá ser mayor a 10000! A menos que estés haciendo cualquier cosa (que laburando en c y con punteros es fácil ... hacer cualquier cosa menos lo que quieres hacer digo.)
¿Bueno y entonces como me refiero a cada elemento y sumo?
Digamos que le pasamos un puntero a un elemento (pElemento)
Entonces la edad sera
(*pElemento).edad
y el puntero al proximo elemento sera
(*pElemento).siguiente
y el puntero al proximo del proximo elemento sera
*((*pElemento).siguiente).siguiente
un quilombo no imaginate si tenes unos 10 elementos... esto no funciona ASI!!!!
tenes que usar un puntero temporal dentro del bucle digamos pElemntoActual
tenes un valor acumulador
int acumulador; // asi te gusta mas?
acumulador = 0;
pElemntoActual = pElemnto;
for(...)
if (pElemntoActual == NULL)
break;
acumulador = acumulador = +
(*pElemntoActual).edad;
// una alternativa es esta notacion
// pElemntoActual->edad;
//Mucho mas clara no?
pElemntoActual = pElemntoActual->siguiente;
}
¿Te fue de utilidad?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas