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

  FORUM HardWare.fr
  Programmation
  C

  [résolu][C]Aide programmation somme de série numérique.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu][C]Aide programmation somme de série numérique.

n°1341964
mat445
Posté le 08-04-2006 à 10:29:35  profilanswer
 

Bonjour, je suis débutant en programmation et j 'aurais besoin d'un petit coup de main. Voilà je m'explique, il m'a été demandé de traduire un programme sur une calculatrice TI-89 permettant de calculer les sommes partielles de séries numériques, en langage C.
 
Voilà le programme sur TI-89:
 
 
somme(n)  
Func  
local s,i,u  
1/n^2->u(n)  
0->s  
for i,1,n  
 u(i)+s->s  
endfor  
s  
EndFunc
 
 
En vous remerciant d'avance...

Message cité 1 fois
Message édité par mat445 le 09-04-2006 à 20:37:34
mood
Publicité
Posté le 08-04-2006 à 10:29:35  profilanswer
 

n°1341969
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 10:43:33  profilanswer
 

mat445 a écrit :

Bonjour, je suis débutant en programmation et j 'aurais besoin d'un petit coup de main. Voilà je m'explique, il m'a été demandé de traduire un programme sur une calculatrice TI-89 permettant de calculer les sommes partielles de séries numériques, en langage C.


A part apprendre le langage C, je ne vois pas comment tu pourrais t'en sortir autrement. Ou alors je te fais le code pour 1 euro le signe.


---------------
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°1341990
mbarekh
Posté le 08-04-2006 à 11:49:49  profilanswer
 


#include <stdio.h>
 
 
double somme (int n)
{      
      int i;
      double s = 0;
      for (i=1;i<n+1;i++)
      {
          s += 1/(i^2);
      }
      return (s);
}      
 
int main()
{
     
    int n;
    printf("donnez un entier\f" );
    scanf("%d",&n);
         
    printf("la somme numerique est %f \n",somme(n));
    return(1);
}      
 
               

n°1342009
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 12:13:00  profilanswer
 


Ok, tu casses les prix, mais dans  

         s += 1/(i^2);


^ signifie XOR...


---------------
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°1342093
Sve@r
Posté le 08-04-2006 à 15:24:42  profilanswer
 

mbarekh a écrit :

Code :
  1. s += 1/(i^2);



 
Ce qu'a voulu dire Emmanuel, c'est qu'en langage C, il n'y a pas d'opérateur pour "puissance".
 
En utilisant la librairie "libm.a", tu as accès à la fonction "pow()" mais je ne crois pas que ce soit utile pour un simple carré...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1342101
mbarekh
Posté le 08-04-2006 à 15:41:42  profilanswer
 

et voila un programme qui marche bien:
 
 
 
#include <stdio.h>
 
 
double somme (int n)
{      
      int i;
      double s = 0;
      for (i=1;i<n+1;i++)
      {
          s += 1/((double)i*(double)i);
      }
      return (s);
}      
 
int main()
{
     
    int n;
    printf("donnez un entier\n" );
    scanf("%d",&n);
         
    printf("la somme numerique est %f \n",somme(n));
    return(1);
}      

n°1342104
mat445
Posté le 08-04-2006 à 15:56:54  profilanswer
 

Je vous remercie de m'avoir aidé. A bientôt...

n°1342134
mat445
Posté le 08-04-2006 à 17:21:20  profilanswer
 

J'ai réussi à compiler se programme et à l'exécuter. Lorsque je l'exécute il me demande bien de "donnez un entier" puis quand je rentre un entier et j'appuie sur entrée la fenêtre se ferme. J'aimerais savoir comment on peut afficher le résultat et si possible généraliser ce programme pour n'importe quelle suite? Merci d'avance...

n°1342135
Trap D
Posté le 08-04-2006 à 17:43:46  profilanswer
 

Généraliser ce programme pour n'importe quelle suite ??
 
C'est-à-dire ??
 
Tu peux toujours faire une boucle tant que

n°1342136
mat445
Posté le 08-04-2006 à 17:53:29  profilanswer
 

En fait je voudrais le généraliser dans le sens ou il ne servirait pas qu'à une  fonction particulière comme ici (1/n²) cela me permettrait de mettre n'importe quelle fonction comme (n²,n^3,1/(n+1),etc...).Je sais pas si j'ai répondu à ta question. J'aimerais savoir si tu avais une idée pour pouvoir afficher le résultat final? Merci d'avance...

mood
Publicité
Posté le 08-04-2006 à 17:53:29  profilanswer
 

n°1342139
mbarekh
Posté le 08-04-2006 à 18:23:54  profilanswer
 

ajoute  
 
system("PAUSE" );  
 juste avant le  dernier acolade et recompile

n°1342141
mbarekh
Posté le 08-04-2006 à 18:27:29  profilanswer
 

je me suis trompé ajoute le avant return(1)

n°1342142
mat445
Posté le 08-04-2006 à 18:27:37  profilanswer
 

ok je te remercie.

n°1342146
mat445
Posté le 08-04-2006 à 18:45:41  profilanswer
 

J'ai placé system("PAUSE" );
là où tu me l'as indiqué mais lorsque je le compile il me retourne une erreur .

n°1342148
mbarekh
Posté le 08-04-2006 à 18:48:54  profilanswer
 

tu utilises devc++?
sinon quelle compilateur tu utilises?

n°1342151
mat445
Posté le 08-04-2006 à 19:17:37  profilanswer
 

J'utilise devc++ et pour le compilateur je crois que c'est celui par défaut. Pour le problème de system("pause" ) j'ai trouvé la solution. Maintenant il doit y avoir un problème dans la formule car quand j'execute le programme il me demande un entier alors je rentre 10 par exemple et il m'affiche la somme numérique est 0.00000. Merci pour ton aide

n°1342153
mbarekh
Posté le 08-04-2006 à 19:24:48  profilanswer
 

non chez moi ca marche
monter moi tout ton code

n°1342163
mat445
Posté le 08-04-2006 à 19:47:01  profilanswer
 

Voilà ce que j 'ai:
 
#include <stdio.h>  
#include <stdlib.h>  
 
double somme (int n)  
{      
      int i;  
      double s = 0;  
      for (i=1;i<n+1;i++)  
      {  
          s += 1/((double)i*(double)i);  
      }  
      return (s);  
       
}  
int main(){
     
    int n;  
    printf("donnez un entier\n" );  
    scanf("%d",&n);  
         
    printf("la somme numerique est %f \n","somme(n)" );
    system("pause" );
    return(1);    
}

n°1342166
mbarekh
Posté le 08-04-2006 à 19:52:47  profilanswer
 

c est normal
y a pas de parenthhèses autour de somme(n) dans la ligne:
printf("la somme numerique est %f \n","somme(n)" )  
 
il faut ecrire
 
printf("la somme numerique est %f \n",somme(n))  

n°1342167
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 19:53:52  profilanswer
 

mbarekh a écrit :

c est normal
y a pas de parenthhèses


guillemets !
 


---------------
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°1342169
mbarekh
Posté le 08-04-2006 à 19:54:50  profilanswer
 

oui guillemets pardon

n°1342191
mat445
Posté le 08-04-2006 à 20:44:22  profilanswer
 

C'est impeccable ca marche nickel. Je te remercie encore. Est ce que tu saurais passer de 1/((double)i*(double)i) à u(i) afin de mettre n'importe quelle fonction?

n°1342206
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 21:48:53  profilanswer
 

mat445 a écrit :

C'est impeccable ca marche nickel. Je te remercie encore. Est ce que tu saurais passer de 1/((double)i*(double)i) à u(i) afin de mettre n'importe quelle fonction?


Ca, c'est très complexe. Il faut un analyseur de syntaxe, de sémantique... C'est un problème d'algorithme et non de C.
 
Des outils de réalisation comme lex et yacc (ou GNU/flex & GNU/bison), peuvent aider...


---------------
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°1342212
mat445
Posté le 08-04-2006 à 22:00:03  profilanswer
 

Je vous remercie quand même de votre aide. A bientôt...

n°1342215
0x90
Posté le 08-04-2006 à 22:17:31  profilanswer
 

Emmanuel Delahaye a écrit :

Ca, c'est très complexe. Il faut un analyseur de syntaxe, de sémantique... C'est un problème d'algorithme et non de C.
 
Des outils de réalisation comme lex et yacc (ou GNU/flex & GNU/bison), peuvent aider...


 
 
Ou alors :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main(void)
  6. {
  7.  char* debut="#include <stdio.h>\n#include <stdlib.h>\n double u(int i){return ";
  8.  char* fin=";} double somme(int n){/*le code de somme avec u(i); */} int main(void) {/* le main */}";
  9.  char* fonction;
  10.  puts("Entrez la fonction a calculer (avec i la variable):\nU=" );
  11.  scanf("%as",&fonction);
  12.  code = asprintf("echo  \"%s%s%s\" > tmpcode.c && gcc -o tmpexe tmpcode.c",debut,fonction,fin);
  13.  system(code);
  14.  execl("./tmpexe", NULL);
  15. }


 
 :whistle:

Message cité 1 fois
Message édité par 0x90 le 08-04-2006 à 22:20:27

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1342216
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 22:22:33  profilanswer
 

0x90 a écrit :

Ou alors :


Un générateur de code à la volée ? Pas bête...


Message édité par Emmanuel Delahaye le 08-04-2006 à 22:23:09

---------------
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°1342218
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-04-2006 à 22:23:45  profilanswer
 

mat445 a écrit :

Je vous remercie quand même de votre aide. A bientôt...


Sympa la restriction...
 


---------------
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°1342219
mat445
Posté le 08-04-2006 à 22:41:22  profilanswer
 

Désolé Emmanuel pour le "quand même" c'est pas ce que je voulais dire. Merci à tous...

n°1342230
ami6
Posté le 08-04-2006 à 23:15:26  profilanswer
 

Bonsoir,
 
Au lieu de 1/(double(i)/double(i)

 


tu peux écrire plus élégamment :
 
1.0/i/i

n°1342323
Sve@r
Posté le 09-04-2006 à 10:58:53  profilanswer
 

mat445 a écrit :

En fait je voudrais le généraliser dans le sens ou il ne servirait pas qu'à une  fonction particulière comme ici (1/n²) cela me permettrait de mettre n'importe quelle fonction comme (n²,n^3,1/(n+1),etc...).Je sais pas si j'ai répondu à ta question. J'aimerais savoir si tu avais une idée pour pouvoir afficher le résultat final? Merci d'avance...


 
On peut pas généraliser de façon totalement indépendante du programmeur (style je rentre ma suite en littéral et le pgm se débrouille tout seul) mais on peut découper le programme de façon à séparer la suite de la boucle qui calcule sa somme
 
Au lieu d'écrire "s+=1/(double)i/(double)i"
Tu écris "s+=suite(i)"
 
Ensuite, tu codes le corps de "suite(i)" de la façon que tu veux, par exemple

double suite(int i)
{
      return 1/(double)i/(double)i;
}


 
Le jour où ta suite change, tu changes juste le corps de ta fonction...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le   profilanswer
 


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

  [résolu][C]Aide programmation somme de série numérique.

 

Sujets relatifs
[résolu][PERL]variable bizzare[RESOLU] créer un tableau dynamique en php
[PHP][GD][Résolu] Création de bordure en fondu[VB.NET] Creer une petit navigateur web [Résolu]
Petite aide, traduction vbs -JS : besoin de quelques lignes de codes ![RESOLU] question tres simple sur nombre de caracteres a l'ecriture
[Résolu] Mauvaise incrémentation du NumeroAuto dans Access[STAGE en vue d'embauche] Strasbourg : Programmation C / C++
Aide demandée pour flag[réglé] Aide sur un petit script.
Plus de sujets relatifs à : [résolu][C]Aide programmation somme de série numérique.


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