Nombres cousins (bug)

Résolu
22z Messages postés 13 Statut Membre -  
22z Messages postés 13 Statut Membre -
Bonjour à tous,

J'apprends la programmation C et j'ai écrit le programme que voici

#include <stdio.h>
#include <stdlib.h>

// Fonction permettant de calculer le produit des chiffres d'un nombre
int produit(int a, int p) {
    int q, r, inter;
    p = 1; // Produit
    r = a % 10; // Reste de le division entière entre le nombre et 10, le dernier chiffre du nombre
    q = a / 10; // Quotient de la division entière pour continuer la division
    while(q != 0) {
        if (r != 0) {
            p = p * r;
        }
        inter = a;
        a = q;
    }
    return p;
}

int main(){
    int x, y, p, p1, p2;
    printf("Entrer le premier nombre\n");
    scanf("%d", &x);
    p1 = produit(x, p1);
    printf("Entrer le deuxieme nombre\n");
    scanf("%d", &y);
    p2 = produit(y, p2);
    i f(p1 == p2) {
        printf("%d et %d sont cousins car le produit de leurs chiffre donnent respectivement %d et %d\n", x, y, p1, p2);
    } else {
        printf("%d et %d ne sont pas cousins caar le produit de leur chiffres donnent respectivement %d et %d\n", x, y, p1, p2);
    }
    printf("Hello world!\n");
    return 0;
}


Le but est d'écrire une fonction qui vérifie si deux nombres sont cousins (c'est-à-dire si le produit de leurs chiffres non nuls sont égaux). Le problème c'est qu'on ne me signale aucune erreur, mais après récupération des deux nombres, rien ne bouge. Genre la fonction ne fait pas son boulot.

MERCI d'avance

Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Il y a au moins plusieurs choses qui ne vont pas :
    • ta fonction
      produit
      n'a pas besoin de recevoir de paramètre
      p
      en paramètre ;
    • ta fonction
      produit
      fait une boucle infinie (au niveau du
      while
      ) car la variable impliqué dans le test (
      q
      ) n'est pas modifiée. C'est quelque chose qu'on voit assez facilement en rajoutant par exemple des
      printf
      dans la boucle
      while
      ;
    • la variable
      inter
      semble ne servir à rien.


    Algorithmiquement, j'ai l'impression que ce que tu as voulu écrire c'est :
    • Calculer le reste de la division euclidienne par 10 du nombre
      a
      . Ce reste correspond au dernier chiffre du nombre, dont on veut tenir compte dans le produit
      p
      s'il est non nul.
    • Répéter le procéder une fois ce chiffre traité.


    Le dernier problème réside dans cette deuxième étape. Suppose que ton nombre
    a
    soit 1234. À la fin de la première étape, tu vas obtenir 4, et donc il reste 123 à traiter. Ce qui signifie que tu devrais retirer de
    a
    la valeur 4, puis diviser
    a
    par 10 avant de répéter la première étape de la procédure...

    Enfin, note qu'une autre approche pourrait consister à ne pas passer par une représentation entière, et raisonner directement sur la chaîne de caractère qui stocke le nombre. Ensuite, en itérant sur les caractères de la chaîne, et en convertissant chaque caractère
    atoi
    en chiffre, tu peux calculer le produit.

    Bonne chance
    1
  2. 22z Messages postés 13 Statut Membre
     
    ok merci beaucoup a vous
    0