CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c] Factorielle !

Jean-Imposteur2
Jean-Imposteur2
Niveau 5
04 novembre 2013 à 00:09:30

int main()
{
int a=0, resultat=0, f=0;
printf("Ce programme calcul la factorielle !\n");
scanf("%d", &a);

f=a;
printf("Voici la factorielle de votre nombre : %d", resultat);
while (a != 1)
{
resultat=a*f;
f--;
}
return 0;
}

J'ai créé deux variables, une pour le nombre pour la factorielle et l'autre pour le resultat !

Je demande de saisir un nombre avec scanf, par exemple 5 !
Ensuite avec une boucle while qui dit que tant que a est différent de 1, je fais le calcul : 5x5 et j'enlève 1 au f,
normalement au prochain tour de boucle f prendre la valeur 4 et ainsi de suite jusqu'à arriver au 1 !
Donc, ça devrai faire ça 5x4x3x2x1
Mais le problème c'est qu'il m'affiche 0 !

Merci ! :-)

Chocolayte
Chocolayte
Niveau 73
04 novembre 2013 à 00:23:53

Utilise une boucle for. :o))
Elle s'utilise quand on connait le nombre d'itérations (et dans ton programme, tu sais combien de calculs tu devras faire, et donc d'itérations). La boucle while peut fonctionner bien sûr mais elle n'est pas adaptée.

http://pastebin.com/pf5CYZUT

Pour ton problème sinon, tu affichais le résultat (initialisé à zéro) AVANT de faire le calcul, donc ça ne pouvait pas marcher correctement ! ^^

Chocolayte
Chocolayte
Niveau 73
04 novembre 2013 à 00:26:34

Et tu oubliais aussi d'ajouter le résultat précédent de ta variable résultat.

En gros, pour a = 3, tu faisais :

resultat = 3 * 3 = 9
resultat = 3 * 2 = 6
resultat = 3 * 1 = 3

Donc tu allais afficher 3 comme résultat final, alors qu'il te faut faire pour a = 3 :

resultat = resultat + 3 * 3 = 0 + 9 = 9
resultat = resultat + 3 * 2 = 9 + 6 = 15
resultat = resultat + 3 * 1 = 15 + 3 = 18

Jean-Imposteur2
Jean-Imposteur2
Niveau 5
04 novembre 2013 à 00:29:54

int main()
{
int a=0, resultat=0, f=0;
printf("Ce programme calcul la factorielle !\n");
scanf("%d", &a);

f=a;
printf("Voici la factorielle de votre nombre : %d", resultat);
while (f != 1)
{
resultat=a*f;
f--;
}
return 0;
}

projetkick
projetkick
Niveau 7
04 novembre 2013 à 00:33:36

As-tu lu les messages de Chocolayte au moins ? :hap:

Chocolayte
Chocolayte
Niveau 73
04 novembre 2013 à 00:41:47

Quelque chose m'échappe. :noel:

Jean-Imposteur2
Jean-Imposteur2
Niveau 5
04 novembre 2013 à 06:44:31

Ah oui pardon, j'ai oublié de lire les messages de Chocolaytes !
int main()
{
int a=0, resultat=0, f=1;
printf("Ce programme calcul la factorielle !\n");
scanf("%d", &a);

while (f < a+1)
{
resultat=resultat + f*a;
f++;
}

printf("Voici la factorielle de votre nombre : %d", resultat);

}

Ici à la fonction, j'ai rajouter +1, pour le a, car je sais que pour par exemple, pour 3, si je m'arrêterai pile au 3e tour de boucle, le resultat aurait afficher un nombre inférieur !

Merci de m'avoir aidé !

Ace_Attorney
Ace_Attorney
Niveau 10
04 novembre 2013 à 08:52:36

Chocolayte Voir le profil de Chocolayte
Posté le 4 novembre 2013 à 00:26:34 Avertir un administrateur
Et tu oubliais aussi d'ajouter le résultat précédent de ta variable résultat.

En gros, pour a = 3, tu faisais :

resultat = 3 * 3 = 9
resultat = 3 * 2 = 6
resultat = 3 * 1 = 3

Donc tu allais afficher 3 comme résultat final, alors qu'il te faut faire pour a = 3 :

resultat = resultat + 3 * 3 = 0 + 9 = 9
resultat = resultat + 3 * 2 = 9 + 6 = 15
resultat = resultat + 3 * 1 = 15 + 3 = 18

Euh... tu as compris ce qu'étais une factorielle ?

Le résultat de la factorielle de 3 (ou !3) vaut 6, ce qui est le résultat de 3*2*1.

Si on décortique le tout, ce sera plus.

resultat = 3. (resultat vaut 3)

resultat = 3 * 2. (resultat vaut 6)

resultat = 6 * 1. (resultat vaut 6)

Schiffer
Schiffer
Niveau 10
04 novembre 2013 à 10:35:17

int main()
{
int a=0, resultat=0, f=0; //f sert à rien
printf("Ce programme calcul la factorielle !\n");
scanf("%d", &a);

f=a; //ligne inutile
printf("Voici la factorielle de votre nombre : %d", resultat); //WTF? t'affiches le résultat avant de faire le traitement!
while (f != 1) //il faut faire une condition sur a
{
resultat=a*f; // resultat = resultat * a
f--; //a--
}
return 0;
}

projetkick
projetkick
Niveau 7
04 novembre 2013 à 12:34:30

Jean :d) Non il y a toujours une erreur dans ton code. Ce que tu fais c'est :

a+2a+3a+...+a*a

Chocolayte
Chocolayte
Niveau 73
04 novembre 2013 à 19:40:41

Ouais Ace, je reconnais avoir eu un doute. :noel:
Mais mon algo fonctionnait pour le chiffre 4 et j'avais le même résultat ici :
https://www.google.fr/search?q=3!&amp;oq=3!&amp;aqs=chrome.0.57j60l3j61l2.201j0&amp;sourceid=chrome&amp;ie=UTF-8#q=4!

Navré d'avoir induit en erreur, j'étais pas trop alerte à minuit.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment