Aide Programme Suite Mathématique (Merci)

Aide Programme Suite Mathématique (Merci) - C - Programmation

Marsh Posté le 16-11-2005 à 16:51:08    

Hello les gens,
Je suis entrain de galèrrer sur un programme en langage C et étant un novice j'aimerai bien savoir comment continuer le début de programme que j'ai fait.
Voici l'énoncé du probleme de maths, il sera plus explicite que moi :

 
Soit la suite de Pétiard U définie de la manière suivante :
U0 et U1 étant connus, on définit :

http://img222.imageshack.us/img222/9056/nouveauimagebitmap7ul.jpg
Selon les valeurs de U0 et U1, la limite de cette suite est 5, 6 ou 100. Nous allons montrer par un simple programme qu'un ordinateur se trompe sur cette simple suite.
 
Etude informatique :
Par programme : Ecrivez un programme qui saisit les données suivantes : la valeur de U0, la valeur de U1, ainsi que le rang n jusqu'auquel on souhaite faire le calcul. Vérifiez si les limites établies pour les valeurs de U0 et U1 dans l'étude mathématique sont valables.
Instabilité de la suite : La valeur 6 est nommée "point fixe instable" de la suite. Pour tenter de comprendre ce que recouvre cette appellation, il est intéressant de procéder au calculs suivants. U0 et U1 vont prendre des valeurs proches de 6 mais s'en éloignant petit à petit. On vous propose pour cela d'effectuer les calculs précédents en utilisant tout d'abord 6,000000000000000000001 (avec vingt 0), puis 6,0000000000000000001 (avec dix-neuf 0), puis 6,0000000000000000001 (avec dix-huit 0), et ainsi de suite jusqu'à voir apparaître un phénomène intéressant.

 

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.   long n,cpt,i;
  6.   float terme_u,u0,u1,A,B;
  7.   for (i=1; i<(99*99); i++)
  8. {
  9.   printf("Entrez le rang :" );
  10.   scanf("%ld",&n);
  11.   if (n<2)
  12.   {
  13.   printf("Veuillez entrer un rang superieur a 2: \n" );
  14.   }
  15.   else
  16.   {
  17.   printf("Entrez u0 :" );
  18.   scanf("%lf",&u0);
  19.   printf("Entrez u1 :" );
  20.   scanf("%lf",&u1);
  21.   A=u0+(cpt+1);
  22.   B=u1+(cpt+1);
  23.   while(cpt<n)
  24.   {
  25.   terme_u=(111.0-(1130/A)+(3000/(A*B)));
  26.   cpt=cpt+1;
  27.   }
  28.   printf("Au rang %ld, U vaut %ld \n",n,terme_u);
  29. }
  30. }
  31.   system("pause" );
  32.   return 0;
  33. }


 
 
Merci de vos futures réponses.
Sincères Salutations.  :hello:

Reply

Marsh Posté le 16-11-2005 à 16:51:08   

Reply

Marsh Posté le 16-11-2005 à 17:21:56    

Pour plus de précision, utilise déjà les double au lieu des floats.

Reply

Marsh Posté le 16-11-2005 à 20:15:19    

Mais je pense que ca ne change rien au probleme,
Je cherche comment progralmmer la bonne suite car avec les Un-1 et Un-2 je ne sais pas comment faire ....
Si vous aviez quelques petites précésion a ce propo la :)

Reply

Marsh Posté le 16-11-2005 à 20:25:45    

Dans ta boucle  
  while(cpt<n)  
  {  
  terme_u=(111.0-(1130/A)+(3000/(A*B)));  
  cpt=cpt+1;  
  }  
 
Rien ne change, à part, cpt, ces calculs sont inutiles, tels quels.
Il serait peut-être intéressant de mémoriser les valeurs avec term_u1, term_u2, term_u3 et de les faire tourner non ?
Tu peux aller voir du côté du formum algo pour qu'on te conseille mieux.

Reply

Marsh Posté le 16-11-2005 à 20:25:58    

# printf("Entrez u0 :" );
#   scanf("%lf",&u0);
 
->
 
# printf("Entrez u0 :" );
fflush(stdout);
#   scanf("%lf",&u0);

Reply

Marsh Posté le 16-11-2005 à 21:00:01    

oki merci Trap D
Au fait taz ca sert a quoi fflush ?

Reply

Marsh Posté le 16-11-2005 à 21:38:10    

CyberEpsilon a écrit :

oki merci Trap D
Au fait taz ca sert a quoi fflush ?


http://mapage.noos.fr/emdel/notes.htm#fflush_stdout


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-11-2005 à 21:38:12    

Je réponds pour Taz :
Lorsque tu fais printf("Entrez u0 :" ); , le buffer de sortie n'est pas vidé comme il le serait si tu avais écrit printf("Entrez u0 :\n" );  
(le caractère '\n' force le flush).
Donc pour être certain que la phrase soit affichée, il faut faire un fflush(stdout);
Grillé par Emmanuel  :pfff:

Message cité 1 fois
Message édité par Trap D le 16-11-2005 à 21:39:25
Reply

Marsh Posté le 16-11-2005 à 21:41:31    

Trap D a écrit :

Je réponds pour Taz :
Lorsque tu fais printf("Entrez u0 :" ); , le buffer de sortie n'est pas vidé comme il le serait si tu avais écrit printf("Entrez u0 :\n" );  
(le caractère '\n' force le flush).
Donc pour être certain que la phrase soit affichée, il faut faire un fflush(stdout);
Grillé par Emmanuel  :pfff:


http://www.songfight.net/gallery/data/media/7/Nicely-Toasted.gif


Message édité par Emmanuel Delahaye le 16-11-2005 à 21:44:48

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 17-11-2005 à 11:26:54    

CyberEpsilon a écrit :

Mais je pense que ca ne change rien au probleme,
Je cherche comment progralmmer la bonne suite car avec les Un-1 et Un-2 je ne sais pas comment faire ....
Si vous aviez quelques petites précésion a ce propo la :)


 

int main(void)
{
    double U[3];            // Pour le calcul de U0, U1 et Un
    double tmp;             // Pour pouvoir détecter la fin du calcul
 
 
   // Faire saisir U[0] et U[1]
   ...
 
   // Initialiser tmp et U[2] tels que tmp != U[2]
   ...
 
   // Boucler tant que le calculateur peut faire une différence entre le calcul précédent et le calcul actuel
   // Permet d'aller le plus loin possible dans la précision du calcul
    while (tmp != U[2])
    {
         // Mémoriser "U[2]" pour pouvoir le comparer au tour suivant
         tmp=U[2];
 
         // Calcul de U[2] en fonction de U[0] et U[1]
         U[2]=...
 
         // Décalage de U0 et U1 pour le calcul qui sera éventuellement fait au tour suivant
         U[0]=U[1];
         U[1]=U[2];
      }
 
      // Ici, U2 contient la valeur la plus précise possible => c'est la limite
      printf("Limite=...", ...);
}


Message édité par Sve@r le 17-11-2005 à 14:10:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed