A l'aide

alex64100 Messages postés 25 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 8 novembre 2009 - 7 août 2008 à 16:25
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 11 août 2008 à 17:00
bonjour

étudiantt par correspondance, je bataille sur un algo
je dois créer un prog en c, calculan les facteurs 1er d'un  entier n a partir de l'algo suivant

entier n
entier k

début
    écrire "décomposition d'un nb en facteurs 1er"
    écrire "introduire un nb  > 0"
    lire n
    tant  qe n > 0 faire
    début
    écrire "facteurs 1er"
    tant n modulo 2 = 0 faire
    début
     écrire "2"
    n <--- n/2
   fin
   k <--- 3
  tant qe n = 1
  si (n modulo k = 0) alors k<--- k + 2
  sinon
  début
   écrire  k
   k <---  n/k
  fin
      écrire "introduire un nb  > 0"

    lire n

   fin
fin

c'est l'algo du sujet,
voici mon code qui ne marche pas

    int main(int argc, char* argv[])
    {
       
        int n;
        int k;

        printf ("Décomposition d'un nombre en facteurs premiers\n");
        printf ("Introduire un nombre > 0 : ");
        scanf ("%ld", &n);
       
        for (n > 0; n % 2 ==0;)

        {

            printf ("%ld", &n);
            {
                printf ("2");
                n = n/2;
            }
        }
            k = 3;

            while ( n == 1)
            {
                if ( n % k == 0)
                {
                    k = k + 2;
                }
                {
                    printf ("%ld", &k);
                    n = n/k;
                }
            }
                   

    }

pouvez-vous m'aider  svp

merci

8 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 août 2008 à 16:31
"for (n > 0; n % 2 ==0;)"

Qu'a tu essayés de faire ici ?
Une boucle for s'emploi comme ceci:

for(initialisation; test; action)

for(i = 0; i < 5; i++)

Aurais tu essayé de faire ceci:

while(n > 0 && n % 2 ==0) ?

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 août 2008 à 16:40
Oupss j'avais pas bien regardé ton algo.

Selon ton algo, il manque un else:

                if ( n % k == 0)
                {
                    k = k + 2;
                }
 ==>        else {
                    printf ("%ld", &k);
                    n = n/k;
                }

Aussi le while(n % 2 == 0) devrait être imbriqué dans le while(n > 0). Bon alors voici ma version. Je n'ai pas testé, j'ai seulement traduit ton algo.

int n, k;

int main () {
    printf("décomposition d'un nb en facteurs 1er\n");
    printf("introduire un nb  > 0\n");
    scanf("%ld", &n);

    while(n > 0) {
       printf("facteurs 1er\n");
      
       while(n % 2 == 0) {
          printf("2\n");

          n /= 2;
       }

       k = 3;

       while(n == 1) {
          if(n % 2 == 0) k += 2;
          else {
             printf("%d\n", k);
             k = n/k;
          }

       printf("introduire un nb  > 0\n");
       scanf("%ld", &n);
    }
}

C++ (@++)<!--
0
alex64100 Messages postés 25 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 8 novembre 2009
7 août 2008 à 17:18
merci

j'ai toujours le même pb
mon  prog s'arrete après la saisie
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 août 2008 à 17:51
Es-tu sûr de ton algo ? Je le test, le code fonctionne mais ça ne donne pas du tout le bon résultat.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alex64100 Messages postés 25 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 8 novembre 2009
7 août 2008 à 18:05
effectiveme  nt après le  test çà donne rien de bon!!!
l'algo est bon
c'est quoi  ce bins!!!!!!!!!!!!!
çà  me prend le chou
@++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 août 2008 à 18:22
Tu as sûrement dû oublier quelque chose en le réécrivant : un fin au mauvais endroit, un tant que mal évalué ou autre parce que sinon, l'algorithme est faux.

C++ (@++)<!--
0
alex64100 Messages postés 25 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 8 novembre 2009
11 août 2008 à 15:31
je confirme ya 1 coquille  danss l'algo!!!
où pourrais je trouver un algo simillaireN
MERCI
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 août 2008 à 17:00
Voir ici

J'ai fais l'algo en C selon cette page:

#include <math.h>

void dfactor (int n)
{
    int div, rac = sqrt(n);

    do {
       
        div = 2;
        while(n%div != 0) {
            if(++div > rac) {
                printf("%d\n", n);
                return;
            }
        }

        printf("%d ", div);
    } while((n /= div) != 1);

    printf("\n");
}

C++ (@++)<!--
0
Rejoignez-nous