Enrere Mòdul 4
Fonaments de Programació. Llenguatge C/C++---
Exercicis

 
1. Funció recursiva de la potència entera d'un número

Escriviu una funció, el protocol de la qual sigui:

double pot(double base, int exponent)

Aquesta funció ha de calcular de forma recursiva el número que resulta d'elevar la base a l'exponent. Per això heu de fer servir que bn=b·bn-1.

Anomeneu l'arxiu font: m4e1.cpp.

 

2. L’arrel digital d’un número

L'arrel digital d'un número és la que resulta de sumar els seus dígits i, si aquesta suma és més gran o igual a 10, tornar a fer la suma dels dígits d'aquesta suma i així successivament fins que s'obté un nombre d'un dígit. Per exemple:

AD(1523)=AD(1+5+2+3)=AD(11)=2

AD(42513)=AD(4+2+5+1+3)=AD(15)=6

Feu un programa que escrigui l'arrel digital d'un número natural. Podeu fer, tant una versió iterativa com una recursiva.

Anomeneu l'arxiu font: m4e2.cpp 

 

3.Càlcul de nombres combinatoris

Fent servir la funció factorial definida al resum teòric, construir una funció que calculi el valor del nombre combinatori:

sabent que es calcula fent servir la fórmula:

Aquest número representa el nombre de combinacions diferents de m elements que es poden formar amb n elements. Per exemple, amb 4 elements hi ha:

combinacions.

Si els 4 elements són {a,b,c,d}, aquestes 6 combinacions són:

{a,b} , {a,c} , {a,d} , {b,c} , {b,d} , {c,d}

Feu que el programa comprovi que n sigui més gran o igual a m.

Anomeneu l'arxiu font: m4e3.cpp 

 

4. Successió de Fibonacci

Seguint les indicacions del resum teòric respecte a la successió de Fibonacci, feu un programa que mostri els n primers termes d'aquesta successió, essent n un nombre enter entrat per teclat.

Anomeneu l'arxiu font: m4e4.cpp 

 

5. Simulació del llançament de tres daus

Seguint l'esquema de la pràctica 6, feu una simulació del llançament de tres daus 100.000 cops i verifiqueu d'aquesta forma que la probabilitat de treure suma 9 i suma 10 és diferent. Només fa falta que comptabilitzeu els cops que surt 9 i 10 i feu que surti per pantalla les freqüències absolutes i relatives dels esdeveniments: suma 9 i suma 10.

Anomeneu l'arxiu font: m4e5.cpp 

 

Problemes complementaris

Aquests exercicis serveixen per completar aquest mòdul però suposen una ampliació voluntària. No és necessari lliurar aquests exercicis. No obstant això, és convenient fer-los i lliurar-los.

 

6. Càlcul d'una àrea pel mètode d'acceptació-rebuig

Seguint les pautes de la pràctica 7 trobeu l'àrea del recinte del quadrat de costat 2 que queda a sobre de la paràbola y = x2.

El dibuix de l'àrea que es vol calcular és la part ombrejada del dibuix adjunt. Els vèrtexs del rectangle són (-1, 0), (-1,1), (1,1) i (1, 0).

 

El procés ha de consistir en generar punts del rectangle, és a dir, parells de nombres aleatoris:

  • x, un nombre aleatori entre -1 i 1 (exactament igual que a la pràctica 7)
  • y, un nombre aleatori entre 0 i 1.

Els punts de la zona d'acceptació compleixen que y>x2.

Podeu comprovar el resultat obtingut amb el valor exacte d'aquesta àrea que és 4/3.

Anomeneu l'arxiu font: m4e6.cpp 

 

7. Nombres combinatoris (II)

A l'exercici 3 s'ha proposat un programa que contingui una funció que calculi un número combinatori fent servir la funció factorial. En molts casos, el càlcul d'un número combinatori es pot simplificar si en lloc de fer servir la fórmula:

utilitzem aquesta altra equivalent:

La raó és que n! pot ser molt més gran que el numerador de la fórmula anterior i, per aquest motiu, es pot produir un error d'overflow o sobrecàrrega, a més que el temps en el càlcul de la segona fórmula és més petit.

Feu un programa que implementi la funció combinatori de la segona forma i compareu els resultats amb la funció de l'exercici 3 amb números combinatoris com:

Anomeneu l'arxiu font: m4e7.cpp 

 
8. Nombres combinatoris (III)

Encara hi ha una altra forma d'implementar el càlcul dels nombres combinatoris, es tracta de fer servir la relació:

Per tant, es pot definir una funció recursiva en la qual, els casos de sortida siguin:

Si n=m          i si m=0        

Implementeu aquesta funció. Anomeneu l'arxiu font: m4e8.cpp