Aide programmation somme de série numérique. [résolu][C] - C - Programmation
Marsh Posté le 08-04-2006 à 10:43:33
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.
Marsh Posté le 08-04-2006 à 11:49:49
#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);
}
Marsh Posté le 08-04-2006 à 12:13:00
Ok, tu casses les prix, mais dans
s += 1/(i^2); |
^ signifie XOR...
Marsh Posté le 08-04-2006 à 15:24:42
mbarekh a écrit :
|
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é...
Marsh Posté le 08-04-2006 à 15:41:42
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);
}
Marsh Posté le 08-04-2006 à 17:21:20
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...
Marsh Posté le 08-04-2006 à 17:43:46
Généraliser ce programme pour n'importe quelle suite ??
C'est-à-dire ??
Tu peux toujours faire une boucle tant que
Marsh Posté le 08-04-2006 à 17:53:29
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...
Marsh Posté le 08-04-2006 à 18:23:54
ajoute
system("PAUSE" );
juste avant le dernier acolade et recompile
Marsh Posté le 08-04-2006 à 18:45:41
J'ai placé system("PAUSE" );
là où tu me l'as indiqué mais lorsque je le compile il me retourne une erreur .
Marsh Posté le 08-04-2006 à 18:48:54
tu utilises devc++?
sinon quelle compilateur tu utilises?
Marsh Posté le 08-04-2006 à 19:17:37
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
Marsh Posté le 08-04-2006 à 19:47:01
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);
}
Marsh Posté le 08-04-2006 à 19:52:47
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))
Marsh Posté le 08-04-2006 à 19:53:52
mbarekh a écrit : c est normal |
guillemets !
Marsh Posté le 08-04-2006 à 20:44:22
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?
Marsh Posté le 08-04-2006 à 21:48:53
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...
Marsh Posté le 08-04-2006 à 22:00:03
ReplyMarsh Posté le 08-04-2006 à 22:17:31
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. |
Ou alors :
Code :
|
Marsh Posté le 08-04-2006 à 22:22:33
0x90 a écrit : Ou alors : |
Un générateur de code à la volée ? Pas bête...
Marsh Posté le 08-04-2006 à 22:23:45
mat445 a écrit : Je vous remercie quand même de votre aide. A bientôt... |
Sympa la restriction...
Marsh Posté le 08-04-2006 à 22:41:22
Désolé Emmanuel pour le "quand même" c'est pas ce que je voulais dire. Merci à tous...
Marsh Posté le 08-04-2006 à 23:15:26
Bonsoir,
Au lieu de 1/(double(i)/double(i)
tu peux écrire plus élégamment :
1.0/i/i
Marsh Posté le 09-04-2006 à 10:58:53
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) |
Le jour où ta suite change, tu changes juste le corps de ta fonction...
Marsh Posté le 08-04-2006 à 10:29:35
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 édité par mat445 le 09-04-2006 à 20:37:34