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

 
1. Equació de segon grau

Com a complement de l'exercici 6 del mòdul 1, feu un programa amb les modificacions que considereu necessàries per tal que el programa comprovi les dades introduïdes i:

  • si el coeficient a és 0 ha de calcular la solució de l'equació de primer grau bx+c = 0.

  • si el coeficient a és diferent de 0, llavors:

  • si el discriminant és positiu ens ha d'indicar que hi ha dues solucions i les ha d'escriure.

  • si el discriminant és 0 ens ha d'indicar que hi ha una única solució i l'ha de escriure (en aquest cas, el fet de sumar o restar l'arrel quadrada del discriminant no suposarà dues solucions..

  • si el discriminant és més petit que 0 ens ha d'indicar que l'equació no té solucions reals.

Anomeneu l'arxiu font: m3e1.cpp i envieu-lo.  No envieu l'arxiu executable.

 

2. Progressions geomètriques

Una progressió geomètrica és una successió el terme general de la qual és de la forma:

a(n) = a·r n

Per exemple, si a = 2 i r =3, els primers n=4 termes de la progressió seran: {6, 18, 54, 162}

La suma dels n primers termes d'una successió geomètrica es pot calcular amb la fórmula:

on a(1) és el primer terme, r la raó i n el nombre de termes.

Per exemple:

 

Escriviu un programa que, introduïts els valors d'a, r i n, els primers del tipus double i l'últim int, imprimeixi els n primers termes de la successió a(n) i calculi la suma d'aquests n primers termes fent la suma de tots els termes . Afegiu alguna línia per tal de comprovar la fórmula donada de la suma dels n primers termes d'una progressió geomètrica.

Anomeneu l'arxiu font: m3e2.cpp i envieu-lo.  No envieu l'arxiu executable.

 

3. El MCD de tres nombres

A la pràctica 3 s'ha vist una funció per calcular el màxim comú divisor de dos números. Si tenim tres números en lloc de dos es pot fer servir que:

MCD(a,b,c)=MCD(MCD(a,b),c))

Per exemple, si volem el MCD de 120, 140 i 210, podem calcular:

 MCD(120,140)=20 i després MCD(20,210)=10, 

per tant, MCD(120,10,210)=10.

Escriviu un programa que contingui la funció vista a la pràctica 3 i la faci servir per calcular el màxim comú divisor de tres números.

Anomeneu l'arxiu font: m3e3.cpp i envieu-lo.  No envieu l'arxiu executable.

 

4. L'algoritme 3n+1

El problema que es planteja aquí és estudiar un dels algoritmes més clàssics no resolts de la ciència de l'Algorísmica: l'algorisme 3n+1. Considerem el següent algoritme:

  1. entrar n

  2. imprimir n

  3. si n =1 aleshores ACABA EL PROGRAMA 

  4. si n es senar aleshores n:=3n+1

  5. en cas contrari, és a dir, si n és parell, aleshores n:=n/2

  6. tornar a la línia 2

Per exemple, donat el número 22 el programa imprimiria la següent seqüència de números: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1. Aquesta seqüència rep el nom de cicle del número 22. Aquest és un cicle de longitud 16. 

És una conjectura no demostrada que aquest algorisme acaba sempre, és a dir, que el cicle de tot nombre enter és un cicle finit.

Feu un programa que escrigui el cicle d'un número entrat per teclat. Podeu fer servir el programa per investigar cicles grans i cicles petits. Per exemple, els números de la forma 2n tenen un cicle curt...

Anomeneu l'arxiu font: m3e4.cpp i envieu-lo.  No envieu l'arxiu executable.

 

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.

5. Canvis de base de numeració I

Escriviu un programa que llegeixi un nombre natural més petit que 256 i escrigui la seva representació en binari. Per això heu de fer divisions successives per 2 i quedar-vos amb les diferents restes. Per exemple, per calcular la representació binària del número 100 farem: 

  3/2=1 6/2=3 12/2=6 25/2=12 50/2=25 100/2=50

1

3%2=1 6%2=0 12%2=0 25%2=1 50%2=0 100%2=0

per tant 10010 = 11001002

Feu que el programa faci la comprovació que el número introduït sigui més petit que 256 i, en cas contrari, que presenti un missatge de error i torni a demanar un altre número.

Afegiu al programa anterior una funció que permeti fer representació decimal d'un número en base 2. Per això només heu de sumar 2n si en la posició n del número binari hi ha un 1. Exemple:

11001002 = 26+25+22=10010

Anomeneu l'arxiu font: m3e5.cpp i envieu-lo.  No envieu l'arxiu executable.

 

 

6. Canvis de base de numeració II

Per últim, escriviu un programa que permeti fer un canvi de base de qualsevol base inicial a qualsevol base final. En el cas que la base sigui més gran que 10. Feu servir les lletres a,b,c,... per representar els valors 10,11,12,.... És especialment útil la base hexagesimal o base 16 en la qual es fan servir les lletres a, b, c, d, e i f com a representació dels números 10,11,12,13,14 i 15.

Anomeneu l'arxiu font: m3e6.cpp i envieu-lo.  No envieu l'arxiu executable.