Enunciado Si hacemos una lista de todos los números naturales
Transcripción
Enunciado Si hacemos una lista de todos los números naturales
Enunciado Si hacemos una lista de todos los números naturales menores que 10 y que son múltiplos de 3 o de 5, obtenemos 3, 5, 6, 9. La suma de estos múltiplos es 23. Encuentre la suma de todos los múltiplos de 3 o 5 menores que 1000. [Fuente: projecteuler.net] Solución Primero redactamos la función main() del programa en lenguaje C. #include <stdio.h> int main() { // suma de los naturales menores que 10 int s; // suma s = sumMulTreCin(10); printf("%d", s); return 0; } Se declara la variable entera s para almacenar la suma a calcular. Se asigna a s el valor que retorna la función sumMulTreCin() a la cual se le pasa el valor 10, pues hasta ahí se desea calcular la suma de los múltiplos de 3 y de 5. Se despliega el valor de la suma, s, invocando la función printf(), indicándole que es un entero, "%d", y que su valor está en s. Ahora redactamos la función sumMulTreCin(). int sumMulTreCin(int t) { // suma de los naturales menores que t int s = 0; // suma int k;// contador for (k = 3; k < t; k++) if (k % 3 == 0 || k % 5 == 0) s += k; return s; } Se indica que la función retornará un número entero, int, que se llama sumMultTreCin y que recibe un entero llamado t. En la función main() se resuelve el problema particular de calcular la suma de los múltiplos de 3 o cinco menores que 1000, pero en la función sumMulTreCin() se resuelve en general, para cualquier t. Para lograrlo se declara la variable entera s para albergar la suma buscada, inicializándola en cero para garantizar que cada vez que la función sea invocada su valor no sea contaminado por posibles valores indeterminados. Se declara la variable k para contar desde uno hasta t-1, pues pide que sean menores que el tope, t. El ciclo for() inicializa la variable k en 1 y recorre con ella todos los valores enteros desde 1 hasta t-1 ya que k debe mantenerse menor que t, y cuando llega a ese valor la condición del ciclo se hace falsa y lo abandona. Para cada valor de k se ejecuta la única sentencia que hay en el interior del ciclo for(), un if(). En el if() se verifica si el valor de k es múltiplo de 3 comparando el valor del residuo que deja k al dividirlo por 3 con cero, y cuando esto ocurre significa que k es múltiplo de 3, también se verifica si k es múltiplo de 5 y ambas verificaciones van unidas con el operador lógico O, ||, de manera que se cumple cuando cualquiera de las verificaciones, o ambas, resulta verdadera. Cuando ocurre que el valor de k es múltiplo de 3 o de 5, se suma el valor actual de k a la variable s, s += k;, ignorando, no sumando, los que los otros, pues no se suman a s. Luego del ciclo for() se retorna entonces el valor que finalmente quede acumulado en s y pasándolo a la función que invoco a sumMulTreCin(), en este caso, main(). El programa C completo sería. #include <stdio.h> int sumMulTreCin(int t) { // suma de los naturales menores que t int s = 0; // suma int k;// contador for (k = 3; k < t; k++) if (k % 3 == 0 || k % 5 == 0) s += k; return s; } int main() { // suma de los naturales menores que 10 int s; // suma s = sumMulTreCin(10); printf("%d", s); return 0; } Si se compila y ejecuta este programa, se puede averiguar cuánto da la suma de los naturales múltiplos de 3 o de cinco y que son menores que 1000. Si se desea averiguar el valor de esta suma para otros valores, basta cambiar el 1000 por el numero deseado en la función main() y compilando y ejecutando nuevamente el programa. Aunque redactamos primero la función main() y luego la sumMulTreCin(), en el programa completo alteramos el orden para que el compilador supiera el formato de sumMulTreCin() antes de ser invocada desde main(). Pero esto se puede lograr declarando a la función sumMulTreCin() antes de main() y detallándola después de ella. #include <stdio.h> int sumMulTreCin(int); int main() { // suma de los naturales menores que 10 int s; // suma s = sumMulTreCin(10); printf("%d", s); return 0; } int sumMulTreCin(int t) { // suma de los naturales menores que t int s = 0; // suma int k;// contador for (k = 3; k < t; k++) if (k % 3 == 0 || k % 5 == 0) s += k; return s; } Ahora la función main() conoce la estructura externa de la función sunMulTreCin(), esto es, que retorna un int, que se llama sumMulTreCin() y que recibe un int, lo cual basta para que el compilador pueda verificar la corrección de la invocación de la función, si bien los detalles se dan luego de la función main() para mantener un estilo “periodístico”, con los titulares primero. ecabrera, 2011, septiembre