Aller au contenu

Algorithme


askk

Messages recommandés

Posté(e)

Bonsoir pourriez-vous m'aider mon devoir maison il me manque une questions à laquelle je n'arrive pas.

alors:

Élaborer un algorithme permettant de calculer un pour un entier naturel n donné et donner une valeur approché de u500 et de u1000.

a) u1= 0 et quelquesoit.gif n appartient.gif N.gif* , un+1 = n+1/n * un

Merci pour votre aide.

Posté(e)

Bonsoir,

Il n'y a pas un autre soucis ?

Si u(n+1) = (n+1/n) ^ u(n)

Alors si on veut u(1) alors n= 0 et donc on a 1/0 et c'est indéfini !

Je n'avais pas vu. Cela commence à u1.

  • E-Bahut
Posté(e)

u1=1

u2=(2+1/2)*u1=2.5

u3=(3+1/3)*u2=8.33

Agorithme

lire n

u prend la valeur 1

pour k allant de 1 à n-1

u prend l valeur (k+1/k)*u

fin de pour

afficher u

qq problèmes :

la valeur de u augmentant très rapidement dépasse souvent les capacité des machines sur lequel cet algorithme peut être programmé (n égal au plus à 170 en ALGOBOX).

Dès que la valeur de n devient importante la valeur de 1/n devient négligeable devant celle de n et la suite se comporte comme un+1=un*n ce qui est l’expression de n! =1*2*3*4*…..*n=(factiorielle n). Donc valeurs approchées de u500=500!=1.22*10^(1134) et u1000=4.02*10^(2567)

Posté(e)

Bonjour,

Si n dépasse la capacité pour un réel, il suffit d'utiliser un autre type, ou de représenter le nombre sous forme d'une chaîne de caractères ou de fabriquer nous-même notre type de nombre en utilisant les listes...

Mais le temps d'exécution sera plus long.

Le mieux c'est faire du téta de 1, en donnant une formule non récursive.

Posté(e)

Sinon tu peux l'écrire en récursif, c'est plus facile.

La fonction qui fait tout le boulot est u, main est la fonction lancée au démarrage.

// Préconditions: n  1 sinon "BOUM".
fonction avec retour réel u(entier n)
Début
   si (n == 1) alors
      retourner 1.0;
   sinon
      retourner (n+(1/n))*u(n-1);
   fin si
Fin
fonction sans retour main()
Début
   entier n=0;
   tant que (n < 1) faire
      Lire(n);
      si (n<1) alors 
         afficher "Veuillez saisir une nouvelle valeur, n doit être >=1";
      fin si
   fin tant que
   Afficher(u(n));
Fin

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...
spam filtering
spam filtering