Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2968 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Aide Programme Suite Mathématique (Merci)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide Programme Suite Mathématique (Merci)

n°1246931
CyberEpsil​on
Posté le 16-11-2005 à 16:51:08  profilanswer
 

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:

mood
Publicité
Posté le 16-11-2005 à 16:51:08  profilanswer
 

n°1246969
Trap D
Posté le 16-11-2005 à 17:21:56  profilanswer
 

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

n°1247100
CyberEpsil​on
Posté le 16-11-2005 à 20:15:19  profilanswer
 

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 :)

n°1247105
Trap D
Posté le 16-11-2005 à 20:25:45  profilanswer
 

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.

n°1247106
Taz
bisounours-codeur
Posté le 16-11-2005 à 20:25:58  profilanswer
 

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

n°1247130
CyberEpsil​on
Posté le 16-11-2005 à 21:00:01  profilanswer
 

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

n°1247159
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-11-2005 à 21:38:10  profilanswer
 

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/
n°1247160
Trap D
Posté le 16-11-2005 à 21:38:12  profilanswer
 

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
n°1247164
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-11-2005 à 21:41:31  profilanswer
 

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/
n°1247441
Sve@r
Posté le 17-11-2005 à 11:26:54  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Aide Programme Suite Mathématique (Merci)

 

Sujets relatifs
Besoin d'aide pour créer des déclencheursAide sur un fichier Data...SVP
[java] debutant besoin d'aide pour interface graph[interbase/SL]besoin d'aide pour creer un trigger
Aide pour site en php[PHP] Besoin d'aide avec une expression régulière tout con
Petit programme en pascalQuel programme ?
Besoin d'aide pour traiter une image en java[PHP] Besoin d'aide pour un systeme de login avec des sessions
Plus de sujets relatifs à : Aide Programme Suite Mathématique (Merci)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR