![]() |
Mòdul
4
![]() |
Fonaments de
Programació. Llenguatge C/C++![]() |
Pràctica ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
|
Pràctica
d'ampliació ![]() |
![]() |
La suma dels naturals
En aquesta pràctica farem un programa per calcular la suma dels n primers nombres de tres formes diferents:
|
|||||
![]() |
Desenvolupament de la pràctica
És sabut que la suma dels n primers nombres naturals es pot obtenir mitjançant la fórmula: Per exemple, 1+2+3+4+5+6+7+8+9+10=10·(1+10)/2 = 55 La suma dels n primers nombres naturals també es pot fer mitjançant una funció recursiva, ja que: Sn = n+Sn-1. El problema de les funcions recursives és que es pot omplir la pila interna i el programa no funcionarà bé per nombres grans. En el programa que es presenta a continuació es calcularà la suma dels n primers nombres enters, essent n un nombre enter entrat pel teclat. Aquesta suma es farà pels dos mètodes abans esmentats i a més per un tercer mètode que es un algorisme iteratiu molt intuïtiu. Creeu un nou espai de treball per aquest mòdul amb el nom: m4. Aneu afegint un projecte nou del tipus Win32 Console Application per cada nova pràctica o exercici amb els noms que cada vegada es proposi. Definiu un projecte nou anomenat m4p01 i afegiu-li un arxiu de font C/C++ anomenat m4p01.cpp. Escriviu el següent codi:
Explicació del programa La variable local suma1 emmagatzemarà el valor de la suma dels n nombres de forma explicita mitjançant el següent bucle:
És important inicialitzar el valor de la variable suma1 a 0 ja que les variables locals no s'inicien a 0 automàticament. La variable local suma2 emmagatzemarà el valor de la suma a partir de la fórmula abans esmentada:
Per últim, la variable suma3 emmagatzemarà el resultat d'aplicar la funció recursiva suma(). Es diu funció recursiva perquè en el cos de la funció hi ha una crida a la pròpia funció.
Tota funció recursiva ha de tenir un cas d'escapament, és a dir, un cas en què pugui sortir d'aquest bucle infinit que representa la recursivitat. En aquesta funció, en el cas que n sigui més petit que 2, torna el mateix n i surt del bucle. |