Enunciado Si hacemos una lista de todos los números naturales

Comentarios

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

Documentos relacionados