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 perquè 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, ha d'indicar que hi ha dues solucions i les ha d'escriure.

  • Si el discriminant és 0, ha d'indicar que hi ha una única solució i l'ha d'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, 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. Nombre curiós

Direm que un nombre natural es curiós si és igual a la suma d'un cert nombre de naturals consecutius començant per qualsevol natural i acabant per qualsevol natural més petit que ell mateix.

 

Els tres primers nombres “curiós” són:

el  3, ja que és la suma d'1 + 2

el  5, ja que és la suma de 2 + 3

el  6, ja que és la suma d'1 + 2 + 3

 

Especifiqueu una funció anomenada void curios(  ); que rebrà un nombre natural n i decidirà si és curiós o no.

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

 

3. L'MCD de tres nombres

A la pràctica 3 s'ha vist una funció per calcular el màxim comú divisor (MCD) de dos nombres. Si teniu tres nombres en lloc de dos, es pot fer servir:

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

Per exemple, si voleu l'MCD de 120, 140 i 210, podeu 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 nombres.

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

 

4. L'algorisme 3n+1

El problema que es planteja aquí és estudiar un dels algorismes més clàssics no resolts de la ciència de l'algorísmia: l'algorisme 3n+1. Considereu l'algorisme següent:

  1. entrar n

  2. imprimir n

  3. si n = 1 aleshores ACABA EL PROGRAMA 

  4. si n és 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.

 

  5. Nombres amics

Direm que dos nombres enters i positius a i b són amics si la suma dels divisors del primer excepte ell mateix és igual a la suma dels divisors del segon excepte ell mateix.

Per exemple:

Per al número 33 trobem que el seu amic és el 16.

nombre

divisors suma dels divisors
33 1, 3, 11 15

16

1, 2, 4, 8 15

Si introduïu el 128, trobeu que són amics el 1469, el 1853 i el 2033 entre d'altres.

nombre

divisors suma dels divisors
128 1, 2, 4, 8, 16, 32, 64 127

1469

1, 13, 113 127
1853 1, 17, 109 127
2033 1, 19, 107 127

Feu un programa que demani un nombre enter i positiu i mostri el seu amic. El programa es deixarà d'executar en trobar un amic. No és necessari mostrar-los tots.

Anomeneu l'arxiu font m3e5.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 entregar-los. No obstant això, és convenient fer-los i lliurar-los.

6. 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 a 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 fareu: 

  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 nombre introduït sigui més petit que 256 i, en cas contrari, que presenti un missatge d'error i torni a demanar un altre nombre.

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

11001002 = 26 + 25 + 22 = 10010

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

 

7. 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 de 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 comprovar la fórmula donada de la suma dels n primers termes d'una progressió geomètrica.

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