Besoin d'aide pour une fonction qui fait une soustraction lorsque 2 nb sont <0

Fermé
panier - Modifié le 7 nov. 2021 à 11:02
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 10 nov. 2021 à 15:38
bonjour j'espère vous allez bien , je viens vers vous parce que j'ai besoin d'aide pour une fonction qui fais la soustraction avec les tableau lorsque les de nb sont négatif . j'ai deja fais le cas ou les deux nombres sont positif du genre 5 et 5 par exemple mais j'ai du mal pour l'autre fonction . voici mon code .

int nb_a_conv(int nb_tab[],int tab_taille){
    int i;
    for (i = 0; i < tab_taille ; i++ ){
        if (nb_tab[i] != 0){
            return i;
        }
    }
}
void converte(int nb[], int taille){
    int nb_a = nb_a_conv(nb,1000);
    nb[nb_a] = nb[nb_a] * -1;
}
int comparer(int nb1[], int nb2[],int taille[]){
    int i;
    for (i = 0 ; i < taille ; i++){
        if (nb1[i] > nb2[i]){
            return 1 ;
        }
        else if (nb1[i] < nb2[i]){
            return 2;
        }
    }
    return 3 ;
}

void sous_negative_num(int res[], int nb1[], int nb2[], int taille){
    int i=0;
    int cur=0;
    int comcom = comparer(nb1,nb2,1000);
    for(i=0; i<taille; i++){
        if (comcom == 1){
            if (nb1[taille-i-1] > nb2[taille-i-1]){
            nb2[taille-i-1]=nb2[taille-i-1]+10;
            nb1[taille-i-1]=nb1[taille-i-1]+1;
            cur = nb2[taille-i-1] - nb1[taille-i-1];
        }
        else {
            cur=nb2[taille-i-1]-nb1[taille-i-1];
        }
        res[taille-i-1]=cur;
    }
    else if (comcom == 2){
        if (nb2[taille-i-1] > nb1[taille-i-1]){
            nb1[taille-i-1]=nb1[taille-i-1]+10;
            nb2[taille-i-1]=nb2[taille-i-1]+1;
            cur=nb1[taille-i-1] - nb2[taille-i-1];
        }
        else {
            cur=(nb1[taille-i-1]-nb2[taille-i-1]);
        }
    }
    res[taille-i-1] =  cur;
    }
    converte(res,1000);
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
8 nov. 2021 à 14:56
Bonjour panier,

Peux-tu :
  • donner un exemple de code appelant la fonction
    sous_negative_num()
    avec les données fournies en entrée
  • expliquer ce que tu attends en sortie
  • expliquer ce que obtiens à la place



Dal
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 8 nov. 2021 à 16:39
S'il te plaît répond à la question précédente, car cela permet de fixer, à travers un exemple, ce que tu veux faire très exactement et les problèmes que tu constates.

En attendant, voilà quelques éléments, qui sont de pure arithmétique de primaire/collège et n'ont pas grand choses à voir avec le C. Je pense que ton code n'implémente simplement pas correctement ces comportements attendus.

Si les deux nombres nb1 et nb2 sont négatifs et que tu en fais une soustraction alors tes opérandes sont :
  • nb1 qui est négatif
  • nb2 qui devient positif


l'opération revient à faire une soustraction de ces deux nombres.

Comme tu simules des opérations posées, calculées à la main, il faudra "mettre le grand nombre" en valeur absolue "en haut", et :
  • si c'est un nombre négatif, noter quelque part que le résultat sera un nombre négatif
  • si c'est un nombre positif, noter quelque part que le résultat sera un nombre positif


faire la soustraction des valeurs absolues des deux nombres et mettre le signe du résultat en négatif si nécessaire.

Par ailleurs, lorsqu'on fait une soustraction à la main, on doit faire des choses comme cela lorsque le chiffre du "haut" est plus petit que le chiffre "du bas" sur une colonne donnée :

   2 ₁3
- ₁1 9
_____
0 4


Dans ton code, tu sembles bien ajouter 10 à un chiffre de ta colonne, mais tu ne reportes pas le 1 sur le chiffre concerné de la colonne suivante (tu le fais sur la même colonne). Cela ne peut pas fonctionner.
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096 > [Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024
10 nov. 2021 à 15:38
Est-ce que ma réponse ci-dessus t'aide à comprendre ce qui ne va pas dans ton code ?
0