[C con Clase] Consulta sobre ejemplo en C de promedios

Davidson, Steven srd4121 en njit.edu
Mar Oct 2 23:10:19 CEST 2012


Hola Santiago,

On Tue, Oct 2, 2012 at 11:06 AM, Santiago Tabarez
<santiago230792 en gmail.com> wrote:
> Yo había encontrado el siguiente ejemplo escrito en C en internet:
>

[CORTE]

>
> pero algo no me había convencido de este ejemplo, así que lo modifiqué un
> poco:
>
>
>
> ------------------------------------------------------------------------------------------
> #include <stdio.h>
> #include <stdlib.h>
>
> #if defined (linux)
> #define TERM_CLEAN "clear"
>
>
> #else
> #define TERM_CLEAN "cls"
> #endif
>
> int resolver_promedio (void);
>
> int main (void)
> {
> 	int init = resolver_promedio ();
>
> 	system (TERM_CLEAN);
>
> 	if (init == 1)
> 	{
> 		resolver_promedio ();
>
>
> 	}
>
> 	printf("\n\nPresione una tecla para cerrar el programa");
> 	getchar ();
> 	getchar ();
> 	return 0;
> }
>
> int resolver_promedio (void)
> {
> 	unsigned int nota1 = NULL, nota2 = NULL, nota3 = NULL, opcion, promedio;
>

Ten cuidado con usar 'NULL' en estos casos, ya que esta constante
simbólica sirve para representar punteros nulos, no cualquier tipo de
valor nulo. Recomiendo escribir 0 (cero), si eso es lo que quieres.

Tampoco aconsejo definir 'promedio' como 'unsigned int', ya que
debería ser 'float', como aparece originalmente.

>

[CORTE]

> ¿Qué les parece? ¿En qué podría estar fallando el ejemplo original y el
> ejemplo modificado por mí? ¿Tienen alguna recomendacion que quieran hacerme?
>

El problema con el código fuente original es que usaba 'goto', lo cual
no es NADA recomendable, especialmente cuando existen otros vocablos y
mecanismos ofrecidos por el lenguaje para realizar ciertas tareas,
como bucles y saltos condicionales.

Tu implementación es una mejora bastante notable comparada con la
original. Ahora bien, debes cuidar la organización del programa en
rutinas. Creas la función 'resolver_promedio()', que por su nombre
debería hacer eso mismo: calcular el promedio. Sin embargo, esta
descripción no refleja correctamente la tarea a realizar, porque
realiza otras tareas, que son a) la recogida (y validación) de los
datos escritos por el usuario, b) la muestra de los resultados en la
pantalla, y c) interactúa con el usuario para continuar ejecutando el
programa o no. Vemos que hay cuatro tareas a realizar dentro de esta
función. En general, creamos funciones para realizar una sola tarea,
la cual puede ser simple o compleja.

En tu caso, si quieres usar funciones, sugiero crear tres funciones
para las tres tareas; por ejemplo,

void recoger_notas( int notas[3] );
float calcular_promedio( int notas[3] );
void mostrar_resultado( float promedio );

Para la cuarta tarea, no es necesario crear una función, ya que es
algo muy simple preguntar al usuario y realizar la tarea directamente
en 'main()'. La verdad es que lo mismo se puede decir por
'calcular_promedio()', pero bueno, al menos tiene más sentido que sea
una función, creo yo.


Espero que todo esto te sirva.

Steven




Más información sobre la lista de distribución Cconclase