Nombres cousins (bug) [Résolu]

Signaler
Messages postés
8
Date d'inscription
mercredi 12 juin 2019
Statut
Membre
Dernière intervention
12 décembre 2020
-
Messages postés
8
Date d'inscription
mercredi 12 juin 2019
Statut
Membre
Dernière intervention
12 décembre 2020
-
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

Messages postés
29493
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2021
7 009
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
Messages postés
8
Date d'inscription
mercredi 12 juin 2019
Statut
Membre
Dernière intervention
12 décembre 2020

ok merci beaucoup a vous