CCS recherche de valeur dans tableau de données
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

CCS recherche de valeur dans tableau de données



  1. #1
    HAYAC

    CCS recherche de valeur dans tableau de données


    ------

    Bonjour à tous,

    Je recherche la solution pour retrouver une valeur dans un tableau de type long ci-dessous mon tableau de valeur :
    Code:
    long const Def1[20][3] = 
        {
            {    0, 3278, 1},
            { 3278, 6556, 2},
            { 6556, 9834, 3},
            { 9834,13112, 4},
            {13112,16390, 5},
            {16390,19668, 6},
            {19668,22946, 7},
            {22946,26224, 8},
            {26224,29502, 9},
            {29502,32780,10},
            {32780,36058,11},
            {36058,39336,12},
            {39336,42614,13},
            {42614,45892,14},
            {45892,49170,15},
            {49170,52448,16},
            {52448,55726,17},
            {55726,59004,18},
            {59004,62282,19},
            {62282,65535,20},
        };
    j'ai essayé avec une boucle "while" comme suite, sans résultat
    Code:
    long ValTab (long ValPin)
    {
        x=0;
        while(ValPin<=Def1[x][0]&& ValPin>Def1[x][1])
        {
            Result=Def1[x][2];
            return Result;
        }
    }
    Je n'ai pas d’erreurs de compilation mais le programme est passé à une vitesse extrêmement lente et le résultat n'ai pas le bon.
    Pourriez vous m'aider (Compilateur CCS C V4 sous MPLAB 8.83)
    Merci d'avance,

    -----

  2. #2
    HAYAC

    Re : CCS recherche de valeur dans tableau de données

    Bonsoir,

    Apres correction de mon erreur d'inattention, j'ai enfin le bon résultat mais toujours cette lenteur d'exécution.
    Code:
    long const Def1[21][3] = 
        {
            {    0,   10, 0},
            {   10, 3278, 1},
            { 3278, 6556, 2},
            { 6556, 9834, 3},
            { 9834,13112, 4},
            {13112,16390, 5},
            {16390,19668, 6},
            {19668,22946, 7},
            {22946,26224, 8},
            {26224,29502, 9},
            {29502,32780,10},
            {32780,36058,11},
            {36058,39336,12},
            {39336,42614,13},
            {42614,45892,14},
            {45892,49170,15},
            {49170,52448,16},
            {52448,55726,17},
            {55726,59004,18},
            {59004,62282,19},
            {62282,65535,20},
        };
    long ValTab (int tab,long ValPin)
    {
        if (tab==1)
        {
            for (x=1;x<=21;++x)
            {
                if (ValPin>=Def1[x-1][0]&&ValPin<=Def1[x-1][1])
                {
                    Result=Def1[x-1][2];
                    return Result;
                    break;
                }
            }
        }
        return Result;
    }
    Il y a t'il une solution plus optimiser pour retrouver une valeur dans un tableau de constantes ?
    Merci d'avance,

  3. #3
    Jack
    Modérateur

    Re : CCS recherche de valeur dans tableau de données

    Il est bizarre ton programme. Que dis faire cette fonction exactement? Rechercher une valeur passée en paramètre? Dans ce cas que doit-elle retourner? Le rang dans le tableau où la valeur a été trouvée? Dans ce cas, pourquoi ne pas retourner i-1? Et si la valeur n'est pas trouvée, on retourne quoi?.

    De plus, je ne vois vraiment pas à quoi sert la 3ème colonne du tableau. Cette valeur est redondante avec la position de la ligne dans le tableau.

    A quoi sert tab?
    le break est inutile!

    Tu vois, tu poses des questions sans donner suffisamment d'élément pour une réponse précise.

    En admettant que l'on retourne le numéro de ligne ou se trouve la valeur recherchée et une valeur négative dans le cas contraire, tu pourrais essayer:
    Code:
    long const Def1[21][2] = 
        {
            {    0,   10},
            {   10, 3278},
            { 3278, 6556},
            { 6556, 9834},
            { 9834,13112},
            {13112,16390},//etc.
            {52448,55726},
            {55726,59004},
            {59004,62282},
            {62282,65535},
        };
    
    long ValTab (int tab,long ValPin)
    {
        if (tab==1) // On ne sait pas trop à quoi ça sert, mais j'ai laissé cette ligne
        {
            for (x=0;x<21;x++)
            {
                if ((ValPin>=Def1[x][0]) && (ValPin<=Def1[x][1]))
                {
                    return x;
                }
            }
        }
        return -1;
    }
    A+
    Dernière modification par Jack ; 10/09/2012 à 09h33. Motif: return x et pas return i

  4. #4
    HAYAC

    Re : CCS recherche de valeur dans tableau de données

    Bonjour JACK,
    Tout d’abord, merci pour tes réponses,
    Je reformule donc ma question, j’aimerais pouvoir déclarer un tableau d’équivalence (Type courbe de potentiomètre) afin d’interpréter les relevées effectuées sur un port analogique 16 Bits.
    Mon idée étant de retrouver la valeur de la colonne 3 dans le tableau en utilisant comme critères (Valeur analogique 16 bits Port(x) comprise entre valeur colonne 1 et colonne 2).
    Les intérêts de cette méthode sont :
    • Une stabilité de résultat du à la marge entre les valeurs de la colonne 1 et 2.
    • La possibilité de changer simplement la courbe d’un potentiomètre en modifiant les valeurs du tableau ou en créant plusieurs tableaux.
    Voici pour le cas actuel, mais en terme plus général, retrouver une valeur dans un tableau multi dimensions en fonction de plusieurs critères m’intéresse au plus haut point.
    Cordialement,

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : CCS recherche de valeur dans tableau de données

    Je reformule donc ma question, j’aimerais pouvoir déclarer un tableau d’équivalence (Type courbe de potentiomètre) afin d’interpréter les relevées effectuées sur un port analogique 16 Bits.
    Mon idée étant de retrouver la valeur de la colonne 3 dans le tableau en utilisant comme critères (Valeur analogique 16 bits Port(x) comprise entre valeur colonne 1 et colonne 2).
    Dans ce cas, il suffit de changer la ligne
    Code:
    return i;
    en
    Code:
    return Def1[x][2];;
    A+

Discussions similaires

  1. Problème de chaine de données en CCS
    Par HAYAC dans le forum Électronique
    Réponses: 15
    Dernier message: 02/09/2012, 18h31
  2. Estimer constante dans équations avec tableau de valeur
    Par invite5dcd7bce dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 03/01/2011, 14h47
  3. [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau
    Par inviteff826af6 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/04/2010, 15h32
  4. recherche de la k-ieme valeur d'un tableau sous maple
    Par invite1228b4d5 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/03/2009, 16h28
  5. recherche d'une valeur dans un autre tableau
    Par invite3161da8c dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 18/10/2007, 23h42
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...