IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Somme de 2 grand nombres entiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Par défaut Somme de 2 grand nombres entiers
    exo2:
    fait la somme de 2 grand nombres entiers comme elle est faite manuellement;
    les nombres sont donnés en arguments comme ceci ; somme de gerand nombre 14544577326589;
    J'ai commencé par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    int main()
    {
        int s=0,n;
        int tab1[50];int tab2[50];int tab3[50];
        int retenue=0;
        int i;
     
        printf ( " entrez le nombre de chifres n");
        scanf("%d",&n);
     
        printf ("entrez les valeur de 1er nombre :");
        for(i=0;i<n;i++)
        {
            scanf ("%d",&tab1[i]);
        }
     
        printf ("entrez les valeur de 2eme nombre: ");
        for(i=0;i<n;i++)
        {
            scanf ("%d",&tab2[i]);
        }
     
        for(i=n;i<0;i--) /*pour demarrer par le dernier chiffre comme ( 236+325) */
        {
            s=tab1[i-1]+tab2[i-1]+retenue; /* on calcule la somme de 6+5+0=11*/
            retenue = s/10; /* on divise 11/10=1*/
            tab3[i-1] = s%10; /* et le reste c'est notre resultat 1*/
     
            /* pour le premier chiffre je ne sais pas comme il faut faire pour le calculer*/
        }
     
        for(i=0;i<n;i++)
        {
            printf (" le 1er nombre est :%d",tab1[n]);
            printf (" le 2eme nombre est :%d",tab2[n]);
            printf ("la somme de nombre1+nombre2= %d",tab3[i]);
        }
    }

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    quelques remarques :
    - l'énoncé parle de valeurs passées en argument, et non pas demandées à l'utilisateur,
    - l'énoncé ne parle pas de l'addition de deux nombres de même longueur,
    - ça manque un peu de vérification (ex. taille max, validité des entiers ...),
    - la somme de deux entiers composés de n chiffres peut comporter n+1 chiffres (environ une chance sur deux, nop ?).

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Par défaut Merci Mr pour ta reponse
    merci bien , mais Mr est-ce-que vous pouvez m'aider pour le corriger ??

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Bonjour,
    Citation Envoyé par narimenedjebbar Voir le message
    merci bien , mais Mr est-ce-que vous pouvez m'aider pour le corriger ??
    Déjà, il faudrait une présentation propre, avec indentation correcte et régulière : c'est beaucoup plus lisible, et ça te sera également utile. (NdlM : fait)

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Par défaut pardon moi
    je suis désolé pour moi c'est la 1er foit

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je suppose que ton problème fait référence à ma quatrième remarque. Je passe donc sur un éventuel problème d'affichage (chiffre par chiffre dans ton cas), la condition de ta boucle descendante qui n'est pas bonne (faute de frappe ?) ou le fait que l'utilisateur peut saisir un nombre contenant plusieurs chiffres.

    Donc ton souci c'est que tu ne gères pas le chiffre n+1. La possibilité la plus simple, vu que tu ne souhaites faire aucune vérification c'est de décaler l'écriture dans ton tableau de résultat (tab3) et de coller la dernière retenue en première position. Ça devrait donner un truc du genre (avec la correction sur la condition de bouclage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(i=n; i>0; i--) {
        s = tab1[i -1] +tab2[i -1] +retenue;
        retenue = s/10;
        // on écrit à l'indice i et plus i -1
        tab3[i] = s%10;
    }
    // on écrit la retenue restante en première position
    tab3[0] = retenue;
    Attention, pour ton affichage il faudra gérer n+1 éléments pour ton tableau tab3.
    Et si tu veux que les choses soient bien faites il faudrait également gérer le cas du zéro en premier élément.
    Enfin, ce code peut être amener au crash assez facilement, ça manque de blindage à tous les niveaux.

    NB : relis quand même l'énoncé ; réussir un algo c'est bien, répondre exactement à la demande c'est mieux.

    edit : diverses corrections de français.

Discussions similaires

  1. [Python 2.X] Somme d'un grand nombre de durées
    Par guidono2 dans le forum Général Python
    Réponses: 4
    Dernier message: 13/08/2015, 21h56
  2. [Débutant] Rendre code plus efficace (grand nombre de sommes)
    Par pa243 dans le forum MATLAB
    Réponses: 10
    Dernier message: 07/07/2015, 20h40
  3. Somme des N premiers nombres entiers positifs
    Par jujurochedu42 dans le forum Débuter
    Réponses: 2
    Dernier message: 26/09/2009, 23h58
  4. Projet : calculette à nombre entiers infiniment GRAND
    Par nzaero dans le forum Débuter
    Réponses: 13
    Dernier message: 01/08/2008, 16h34
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo