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

 
1. Equació de segon grau

Com a complement de l'exercici 7 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.cc 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 de 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 de  1+2

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

el  6       ja que és la suma de  1+2+3.

 

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

Anomeneu l'arxiu font: m3e2.c 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.c i envieu-lo.  No envieu l'arxiu executable.

 

4. Nombres "XX"

Direm que un nombre enter és "XX" si tots els seus divisors ( excepte ell mateix ) son nombres primers. 

Escriu un programa que demani un enter i positiu N i que mostri  per pantalla tots els nombres “XX” que hi ha entre 0 i N  ( amb dos no inclosos )

Si el valor de N és 21 la sortida del programa haurà de ser:

                1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 19

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

 

  5. Números amics

Direm que dos números 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:

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

numero

divisors suma dels divisors
33 1, 3, 11 15

16

1, 2, 4, 8 15

Si introduim el 128 trobem que són amics el 1469, el 1853 , i el 2033 entre d'altres.

numero

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 número enter i positiu i ens mostri el seu amic. El programa es deixarà d'executar al trobar un amic. No és necessari mostrar-los tots.

Anomeneu l'arxiu font: m3e5.c 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.

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 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: m3e6.c 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 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: m3e7.c i envieu-lo.  No envieu l'arxiu executable.

8. 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: m3e8.c i envieu-lo.  No envieu l'arxiu executable.