1.3 Funciones de cálculo con bucles

Estas funciones son un paso más allá porque implican operaciones más complejas de manipulación que incluyen una repetición de pasos o bucle. Las sentencias de control for y while cuesta trabajo introducirlas porque el alumno no entiende bien las condiciones de finalización.

 
1.3.1 Función tal que dado un número entero n imprime en pantalla la tabla de multiplicar (de 1 a 10). Este problema sirve para introducir los bucles mediante algo que los alumnos conocen sobradamente como las tablas de multiplicar. Hay que advertir que es una función void porque su misión no es devolver algo sino imprimir en pantalla. La solución tiene dos versiones con for o con while:
















1.3.2 Reutilizando la función anterior escriba una función tal que dado un número n imprima en pantalla todas las tablas de multiplicar de 1 a n. Este es un ejemplo de que incluso las funciones void se pueden reutilizar. Hágase notar como no hay ningún conflicto entre la variable cont de esta función y la variable de igual identificador de la función 1.3.1
 








1.3.3 Función que lea desde teclado y devuelva un número entero positivo. Teniendo en cuanta que si el número leído no es positivo deberá seguir leyendo hasta que lo sea.



 






1.3.4 Función tal que dados un número real (base) y un entero (exponente) calcula la potencia de la base elevada al exponente. Este ejemplo puede servir para introducir la función pow y algunas de las funciones de la librería math.h:
 

 

 





1.3.5 Función tal que dado un número entero devuelve su factorial. Este ejemplo puede plantear el problema de que el alumno no sepa el concepto de factorial de un número y por tanto, difícilmente va a entender su implementación:
 

 

 





1.3.6 Función tal que dado un número entero n devuelve la suma de los n primeros números naturales:
 

 







1.3.7 Función tal que dado dos números enteros n y m devuelve la suma de números naturales entre n y m ambos inclusive.


 






Claramente este problema es una generalización del anterior, ya que una invocación

sumatorio = sumaEntre(1,valor);

es equivalente a

sumatorio = sumaPrimeros(valor);



1.3.8 Dado un número entero m devolver si es cuadrado perfecto:


 







1.3.9 Dado un número entero m devolver si es primo. Esto es, que no es divisible por ningún  número entre 2  y m/2
 

 

 
 
 
 
 

 
1.3.10 Un posible programa principal para invocar estas funciones podría ser:

 
 

 
 
 
 
 
 
 
 
 




En este tipo de ejercicios el alumno debe aprender a distinguir los siguientes conceptos:

1. Los argumentos de entrada son variables locales a la función. Por tanto, no deben volver a declararse.

2. No tiene por qué existir relación entre los nombres (identificadores) de los parámetros formales y reales, de hecho es conveniente poner nombres distintos a los parámetros reales y hacer varias invocaciones con distintos argumentos reales para reforzar este concepto.

3. Las variables locales tanto de las funciones como del main sólo tienen ámbito entre las llaves de la función y deben declararse e inicializarse antes de usarse.

4. Los valores de los argumentos reales se copian en los formales cuando se invoca la función. Si una función modificara el parámetro formal esto no afectaría al parámetro real.

No hay comentarios:

Publicar un comentario