Programmation en langage c

Résolu/Fermé
kokon - 18 juil. 2010 à 03:29
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 juil. 2010 à 12:49
Bonjour, j'ai un problème que j'aimérais vous soumettre.
Ecrire un programme qui calcule et affiche la somme de la serie
S=1/X - 2!/X^2 + 3!/X^3 - 4!/X^4 +.......(+ou -)N!/X^N.
merci pour votre comprehension. FST-TANGER(MAROC)



A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 juil. 2010 à 14:07
Bonjour,

Merci de nous soumettre ton programme. On l'a bien reçu.
Par contre, on n'a pas reçu ta proposition pour qu'on puisse t'aider et te dire ce qui ne va pas.

Cdlt,
0
M4X 0000FF Messages postés 201 Date d'inscription samedi 10 juillet 2010 Statut Membre Dernière intervention 9 septembre 2010 19
Modifié par M4X 0000FF le 18/07/2010 à 20:31
Je crois qu'il a été on ne peu plus clair ;-)
Voici "une" solution l'ami:
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

long fact (long n) 
{ 
    if (n < 0) 
    { 
        return 0 ;  // c'est juste un choix de code d'érreur ;) 
    } 
    else    if ( (n == 0) || (n == 1) ) 
                { 
                    return 1 ; 
                } 
            else 
            { 
                long f = 1 , i; 
                for(i = n ; i >= 2 ; i--) 
                { 
                    f = f * i ; 
                } 
                return f ; 
            } 
} 

int main() 
{ 
    double x, S; 
    long N, i; 

    printf("Solution du probleme !\n\n"); 

    printf("Entrez x : "); 
    scanf("%lf", &x); 

    printf("Entrez N : "); 
    scanf("%d", &N); 

    S = 0; 
    for (i = 1 ; i <= N ; i++) 
    { 
        S = S + pow(-1, i+1) * fact(i) / pow(x, i) ; 
    } 

    printf("Le resultat est : %f", S); 

    return 0; 

}

Tu peu vérifier avec un exemple en Maple:
restart: 
x := 5 : N := 10 : 
sum( (-1)^(n+1) * (n!) / (x^n) , n = 1..N ): 
evalf(%);


Bonne chance ;-)

Petit bonus au passage:
https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 18/07/2010 à 21:58
Oui, il a été on ne peut plus clair. Sauf, que comme t'es nouveau ici, tu ne connais pas la charte. Pour faire simple, CCM est un forum pour aider, pas pour faire les exos des autres...

Sinon ton code contient une petite erreur.
Tu as mis scanf("%d",...) alors que l'argument n'est pas un int, mais un long.
0
M4X 0000FF Messages postés 201 Date d'inscription samedi 10 juillet 2010 Statut Membre Dernière intervention 9 septembre 2010 19
Modifié par M4X 0000FF le 18/07/2010 à 22:03
Être nouveau n'a jamais été synonyme d'être un ignorant: Je connais très bien la charte ! Crois-tu que je m'inscrits sur les forums sans lire leurs TOS [eh oui je réfléchis avant de cocher une case ou d'appuyer sur un bouton]
S'il est vrai que je viens à peinde de m'inscrire à cçc, ça ne m'a pas empéché d'aider pas mal de monde la semaine dérnière à peu près dans tous les forums, en plus ça fais des années que consulte le site/forum mais je ne m'y suis pas inscrit car j'avais pas le temps d'y être très actif. Alors merci de ne pas jujer les personnes que tu ne connais pas encore bien.

Cela étant écris, on peu retourner au problème de kokon:
Bonjour, j'ai un problème que j'aimérais vous soumettre.
Je ne sais pas pour toi, mais perso je traduis ça par:
Salut, j'me suis cassé la tête dessus sans trouver de soluces, vous auriez pas un truc à me proposez svp ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 juil. 2010 à 22:52
Euh, tu traduis mal ^^. Car s'il s'était cassé vraiment la tête, il aurait au moins vu que le problème a déjà été traité sur un autre post. Encore faut-il se casser la tête pour chercher.
De plus, ce n'est certainement pas en donnant une solution toute faite qu'on aide une personne. Penses-tu apprendre à une personne le piano en jouant à sa place ?

Et enfin, voici un petit lien CCM qui traite des demandes d'exercice : https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
Manifestement, plusieurs points concernent ce cas-là. Et conformément à la charte, j'ai demandé qu'il nous explique ce qu'il avait fait pour qu'on puisse l'aider.
0
M4X 0000FF Messages postés 201 Date d'inscription samedi 10 juillet 2010 Statut Membre Dernière intervention 9 septembre 2010 19
Modifié par M4X 0000FF le 18/07/2010 à 23:08
Penses-tu apprendre à une personne le piano en jouant à sa place ?
Tu serais étonné d'apprendre tout ce qu'on peut apprendre rien qu'en observant par les yeux ou en écoutant [ah l'écoute... une qualité bien rare de nos temps... je sais c'est une remarque HS ;p]
Bref, je pense que si une personne en arrive à demandé de l'aide dans un forum, c'est qu'elle a du au moins essayé avec le peu qu'elle sait, après si elle réussi pas, c'est pas grave, elle apprendra de ses erreurs, perso, en analyse quand je n'arrive pas à justifier la convergence d'une série, généramement après une bonne heure je regarde la solution et j'en tire une lecon pour combler les lacunes de mon raisoonnement....
Et puis... faux pas être trop stricte hein, c'est un problème très classique en informatique: calcul d'une somme, programmation d'une factorielle, puissance [même si j'ai utilisé pow de math.h], la seule petite "astuce" [si on peu l'appeler ainsi] c'est de trouver le terme général de la série... Il en verra plein des comme ça ;-)
0
bonjour,mes amis. merci pour vos differentes remarques.A travers ce forum j'ai eu la solution à plusieur jour de travaux.j'ai compris qu'il fallait que je propose ce que j'ai pu faire.de ce faire je vous envoie ce que j'ai fait.
je suis en première année de math-informatiques-physiques-chimie à la faculté des science et technique de tanger(MAROC)
je l'ai résolu sous forme de programme et non de fonction.
MERCI DE ME CORRIGER.



Bonjour, j'ai un problème que j'aimérais vous soumettre.
Ecrire un programme qui calcule et affiche la somme de la serie
S=1/X - 2!/X^2 + 3!/X^3 - 4!/X^4 +.......(+ou -)N!/X^N.
merci pour votre comprehension. FST-TANGER(MAROC)


#include<stdio.h>
int main()
{
int N,X,i,j,puissance=1,factorielle=1;
float somme=0;
printf("entrez une valeur N:");
scanf("%d",&N);
printf("entrez une valeur X:");
scanf("%d",&X);
for(i=1;i<=N;i++)
{
for(j=1;j<=i;j++)
{
puissance*=X;
factorielle*=j;
}
}
for(i=1;i<=N;i++)
{
for(j=1;j<=i;j++)
{
if(i%2==0)
somme=somme -factorielle*j/puissance*X;
if(i%2!=0)
somme=somme +factorielle*j/puissance*X;
}
}
printf("la somme est :%f",somme);
getchar();
getchar();
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
19 juil. 2010 à 12:49
Bonjour,

Voici la correction de ton programme avec mes remarques :
#include<stdio.h> 
int main(void) /*rajout de (void)*/ 
{ 
int N,X,i,j,puissance=1,factorielle=1; /*c'est pas une bonne habitude de tout grouper pour la déclaration des variables. Il vaut mieux grouper les variables par logique. Par exemple grouper i et j car variables de boucles*/
double somme=0; /*Sauf cas très particulier,  utilise toujours le type double (souvent plus performant et plus précis)*/ 
printf("entrez une valeur N:"); 
scanf("%d",&N); 
printf("entrez une valeur X:"); 
scanf("%d",&X);

/*Il aurait été mieux de mettre ces calculs dans une fonction pour augmenter la lisibilité*/*/ 
for(i=1;i<=N;i++) 
{ 
for(j=1;j<=i;j++) 
{ 
puissance*=X; 
factorielle*=j; 
} 
} 
for(i=1;i<=N;i++) 
{ 
for(j=1;j<=i;j++) 
{ 
if(i%2==0) 
somme=somme -(double)factorielle*j/puissance*X; /*il ne faut pas oublier de caster en double, car la division d'entier donne le diviseur. Par exemple, 1/2 fait 0 et non 0.5*/  
if(i%2!=0) 
somme=somme +(double)factorielle*j/puissance*X; /*voir remarque précédente*/
} 
} 
printf("la somme est :%f",somme); 
getchar(); 
getchar(); 
return 0; 
}


Cdlt,
0