Forum Programmation.c integer converter

Posté par . Licence CC by-sa.
Tags :
-1
7
mar.
2019

Bonjour,

Je dois réaliser le programme suivant:

Complétez le programme avec une fonction integer_convert ayant comme paramètres un tableau de chiffres (i.e. des nombres entre 0 et 9) et sa taille et qui renvoie l'entier naturel correspondant à la concaténation des éléments du tableau.
Par exemple, si le tableau est
[ 2 4 6 ]
la fonction calculera
246
Si au moins un élément du tableau passé en argument est incorrect, vous devrez afficher un message sur la sortie d'erreur standard et arrêter l'exécution du programme. Pour cela on utilise
fprintf(stderr, "message d'erreur\n");
exit(EXIT_FAILURE);

Testez votre fonction en l'appelant dans la fonction main et en exécutant la commande Run. 
Une fois validée, testez vos fonctions avec la commande Evaluate.

Mon code:

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

unsigned int integer_convert(unsigned int table[], unsigned int size){
    int i;
    int a=10;

    for(i=size-2;i>=0;i--){
if(table[i]<=9){
            table[i]=table[i]*a;
            a=a*10;
            table[size-1]=table[size-1]+table[i];
        }



        }
        printf("%d",table[size-1]);
        return table[size-1];
}


int main(void) {
    unsigned int table[]={1,2,3,4,5,6,7,8,9};
    unsigned int size=9;
    integer_convert(table,size);
 return EXIT_SUCCESS;
}

Ma fonction retourne bien "123456789" mais j'ai un message d'erreur que je ne comprends pas :
==2230==ERROR: AddressSanitizer: SEGV on unknown address 0x1000efbbc1a3 (pc 0x000000405741 bp 0x7fff7de20d10 sp 0x7fff7de20cf0 T0)

0 0x405740 in integer_convert

Merci de m'éclairer si possible.

  • # ne pas cumuler >= et size-truc ça fait des noeuds au cerveau :P

    Posté par . Évalué à 2. Dernière modification le 08/03/19 à 09:58.

    J'ai quelque réserver sur l'algo utilisé, généralement on multiplie la somme par 10 et on ajoute les unités, et on itère jusqu'à la fin du tableau; ça évite de jouer avec des indices décalés…

    ce qui ferait un
    somme := 0
    pour tous les éléments du tableau,
    somme := somme*10 + unité # penser à gérer une unité n'étant pas comprise dans les bonne bornes ;)
    fin pour
    retourne somme

    Oui je pourrai le faire en C, c++, java, caml, python perl, bash…  ;)

    Là le soucis c'est que tu as cumulé >= et indice -1 donc lors de la dernière itération de boucle, tu te retrouve à toper la case -1, ce qui peut poser problème ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.