Nombres cousins (bug)

Résolu/Fermé
22z Messages postés 13 Date d'inscription mercredi 12 juin 2019 Statut Membre Dernière intervention 14 novembre 2022 - Modifié le 30 nov. 2020 à 15:17
22z Messages postés 13 Date d'inscription mercredi 12 juin 2019 Statut Membre Dernière intervention 14 novembre 2022 - 30 nov. 2020 à 17:27
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
A voir également:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 3 déc. 2020 à 16:52
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
22z Messages postés 13 Date d'inscription mercredi 12 juin 2019 Statut Membre Dernière intervention 14 novembre 2022
30 nov. 2020 à 17:27
ok merci beaucoup a vous
0