SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: DanielFB93 en Sábado 11 de Febrero de 2012, 20:57
-
¡Hola! De nuevo estoy teniendo problemas con un código en C, y esta vez relacionado con funciones. Les explico: estoy haciendo un ejercicio que muestra una estadística sobre la evolución de una población de leones y cebras en una isla. Como parte del ejercicio, necesito que me diga "El número mínimo de leones en el año ___ fue de ___ " , y lo mismo pero para cebras.
El problema viene al hacer la función: una posible solución, que es la que he implementado, es hacer una función "mínimo" para ocas y otra para leones de tipo void que después de hacer sus cálculos me muestre lo que toque.
La alternativa que había pensado es hacer una función de tipo int que me retornara dos valores: uno para el año y otro para el número. Y esto hacerlo mediante un array. El problema es que me han comentado que es peligroso hacerlo por temas de inteligibilidad del código y eso, pero yo quiero tener un código más "flexible", por decirlo de algún modo. ¿Se les ocurre alguna idea?
void minimo_leones(int x[]){
int count, min, current_year=0;
min = x[0];
for(count=0; count<=YEARS; count++){
if(x[count]<min){
min = x[count];
current_year = count;
}
}
printf("La poblacion minima de leones fue de %d en el anio %d.\n", min, current_year);
}
-
Puedes hacer lo mismo pasando dos punteros como parámetros
void minimo(int *leones, int *tigres)
o algo similar.
PD: No recuerdo la sintaxis correcta en C para punteros, por lo que los he indicado con el *
-
También había pensado en esa alternativa (aunque sinceramente, aún no la sé emplear). Aún así, nos dijeron que no podíamos usar punteros, y que lo podíamos hacer sin ellos. Eso es lo que me dejó un poco desconcertado. Si tienen alguna otra idea de como hacerlo, lo agradecería mucho porque por mucho que pienso, no doy con una respuesta.
Gracias!
-
Bueno, realmente ahora que vuelvo a mirar el código tu no devuelves nada. Imprimes por pantalla un resultado y pus. No necesitas hacer ningún cambio.
Donde necesitas los valores?
-
Bueno, realmente ahora que vuelvo a mirar el código tu no devuelves nada. Imprimes por pantalla un resultado y pus. No necesitas hacer ningún cambio.
Donde necesitas los valores?
Exacto, solo me imprime el texto por pantalla. Pero tengo una función para leones y otra para zebras, y eso es lo que me fastidia. Lo que pretendo hacer es una función generalizada que retorne un valor u otro dependiendo de si son zebras o leones.
La razón de esto, más alla de la limpieza del código, es que en otra fase del programa tengo que imprimir SOLO el número de zebras o leones, y claro, eso me implica hacer otra función que hace exactamente lo mismo que la que he mostrado, con la única diferencia que me retorna un número.
Por ese motivo quiero que me retorne dos valores, para poderlos utilizar cuando quiera y donde quiera sin tener que sobrecargar el código.
-
Si entiendo bien tu función para calcular el mínimo depende de si son leones o cebras.
Has probado a llamar al método con minimo("nombre","numero). Esto es:
void minimo(string name, int x){Calculas lo que tengas que calcular; return resultado;}
y llamas a la función
minimo(leones, 25);
minimo(cebras, 50);
Eso te permite obtener el resultado directamente e imprimirlo por pantalla. Te retorna un valor por cada llamada, pero puedes llamarla dos veces:
printf("La poblacion minima de leones fue %d , y de cebras fue %d , en el anio %d.\n", minimo(leones, 25), minimo(cebra,50), current_year);
-
Solucionado! Muchísimas gracias :jumpie: