tableau et switch en C
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

tableau et switch en C



  1. #1
    invite5a04999e

    tableau et switch en C


    ------

    bonjour;
    j'ai un souci de programmation , je veux retourner un signe alphanumérique pour chaque code binaire donné alors j'utilise la méthode suivante :
    je defini un tableau des différent codes sur 7 (pas 8 bits) puis j'utilise un switch pour retourner le signe coréspondant :


    j'ai des erreurs et je sais pas c'est quoi le probleme :
    const unsigned tabDec[10] = {0b00010000,0b01010001, 0b01010010, 0b00010011, 0b01010100, 0b00010101, 0b00010110, 0b01010111, 0b01011000, 0b00011001};

    char RD7bits(void)
    { char value;
    unsigned i;
    char c=0;
    for(i=1; i<128; i*=2)
    {
    c |= (RDbit() * i);
    }
    c &=0x7F; // faire un "et" avec c pour que sa soit sur 8 bits
    switch(c)
    {
    case tabDec[0]: value='0'; break;
    case tabDec[1]: value='1'; break;
    case tabDec[2]: value='2'; break;
    case tabDec[3]: value='3'; break;
    case tabDec[4]: value='4'; break;
    case tabDec[5]: value='5'; break;
    case tabDec[6]: value='6'; break;
    case tabDec[7]: value='7'; break;
    case tabDec[8]: value='8'; break;
    case tabDec[9]: value='9'; break;
    default : break;
    return value;
    }
    }
    la methode utilisée est simple mais il me fait des erreurs au nivau des switchs
    Error [1113] integer constant expected for case label value

    merci

    -----

  2. #2
    Seb.26

    Re : tableau et swith

    Quel intérêt du tableau si tu fais des case derrière ???

    ... d'ailleurs, il est probable que ton compilo vire le tableau puisque "const" ...

    PS: "unsigned" n'est pas un type de données en C ... encore un compilo à mettre à la benne ...
    http://www.space.unibe.ch/comp_doc/c...ata_types.html
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    invite5a04999e

    Re : tableau et swith

    Bonjour
    dezolé mais j'ai viré le int pendant la recriture
    alors ok; j'ai passé à une autre méthode :
    j'ai enlevé le tableau et puis j'ai que des switchs

    char RD7bits(void)
    { unsigned int i;
    char c=0;
    for(i=1; i<128; i*=2)
    {
    c |= (RDbit() * i);
    }
    c &=0x7F;
    switch(c)
    {
    case 0b00010000: return'0'; break;
    case 0b01010001: return '1'; break;
    case 0b01010010: return '2'; break;
    case 0b00010011: return '3'; break;
    case 0b01010100: return '4'; break;
    case 0b00010101: return '5'; break;
    case 0b00010110: return '6'; break;
    case 0b01010111: return '7'; break;
    case 0b01011000: return '8'; break;
    case 0b00011001: return '9'; break;
    default : break;
    }
    }
    cette fois ci; je sais pas es une bonne méthode ou pas car je ne reçoit rien peut etre parceque aucun cas n'est bon sinon es je peux avoir une autre methode

    merci

  4. #4
    Seb.26

    Re : tableau et swith

    Pour savoir si tu n'as rien car aucun cas n'est OK, fais un return '*' dans le "default" du switch ...

    D'ailleurs, ton compilo devrait t'envoyer un warning car y'a pas de return dans tous les cas ... ?!
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    Seb.26

    Re : tableau et swith

    D'ailleurs, ta construction de c n'est pas top ...

    Essaye un truc dans ce style AMA :

    Code:
    char RD7bits(void)
    {
        unsigned char i=0;
    
        unsigned char c=0;
    
        for( ; i<7 ; i++ )
        {
            if( RDbit() )
                c |= 0x80;
            c >>= 1;
        }
    
        switch(c)
        {
            case 0b00010000: return '0'; break;
            case 0b01010001: return '1'; break;
            case 0b01010010: return '2'; break;
            case 0b00010011: return '3'; break;
            case 0b01010100: return '4'; break;
            case 0b00010101: return '5'; break;
            case 0b00010110: return '6'; break;
            case 0b01010111: return '7'; break;
            case 0b01011000: return '8'; break;
            case 0b00011001: return '9'; break;
            default : return '*'; break;
        }
    }
    Dernière modification par Seb.26 ; 05/05/2010 à 18h40. Motif: typo
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    Seb.26

    Re : tableau et swith

    PS: c'est quoi "RDbit()" ?! ... ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    invite5a04999e

    Re : tableau et swith

    bonjour;
    ok merci ;
    en fait j'ai fait un "!" pour le cas defaut, ok j'ai bien voulu faire decalage au moment de lecture de bit; mais c'est la meme chose je pense

    je pense que le probleme est dans ma lecture de bit car j'ai essayer avec l'oscilloscope le niveau de mes un est 2 V alors que il faut un 5V pour que le port d'entrre peut les lire ;

    alors il faut que je change mon emeteur de bit


    merci pour vous

  9. #8
    invite5a04999e

    Re : tableau et swith

    Bonjour
    mon RDbit() est
    char RDbit(void)
    {
    if((PORTBbits.RB0&1)==0)
    return 1
    else
    return 0;
    }
    en fait sa me permet de lire l'état de mon port d'entrée RB0

    merci

  10. #9
    Seb.26

    Re : tableau et switch en C

    Ton compillo doit déjà avoir des #define pour cela ...

    Essaye de remplacer Rdbit() par RB0 ... tout simplement ...

    Quand à la construction de c ... sauf si ton compilo est TRES malin, les multiplication sur des int sont à proscrire sur un uCPU ...

    Comme tu as un oscillo, passe une pin à 1 en entrée de ton code, et repasse la à 0 une fois fini pour mesurer la durée d'exécution ... ensuite refais de même avec le second code ... sans parler du volume de code ...

    Petit conseil d'un "vieux dev" : il y a certaines règles tacites quand on code sur un petit uCPU ... et quand on passe outre, il faut savoir pourquoi !
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  11. #10
    invite5a04999e

    Re : tableau et switch en C

    Bonjour,
    la configuration #pragma est bonne pour mon pic 18f2450; oscillateur externe ...etc
    je suis entrein d'acquerir des bits sur le PORTB0; j'ai fait des return inverse car je pense que le port de sortie est à l'tat haut par défaut;

    je suis arrivé à acuerir mes char mais c'est pas des bon résultat car j'ai une réference

    autre chose j'ai pas compris ce que vous voulez dire car je suis débbbutant

    merci

  12. #11
    Seb.26

    Re : tableau et switch en C

    ... ta fonction RDbit() ne sert à rien ...

    Dans ton porgramme, tu dois faire un include d'un .h qui correspond à ton uCPU ... regarde dans ce fichier .h, il doit y avoir des #define pour acceder directement à un bit de RB ...

    Tu peux probablement utiliser 'RB0' à la place de 'RDbit()' ... essaye, juste pour voir ...

    Au pire, utilise directement 'PORTBbits.RB0' ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #12
    Seb.26

    Re : tableau et switch en C

    D'ailleurs ton programme ne PEUT pas fonctionner ...

    Tu lis toujours la même chose ... donc c = 0x00 ou 0x7F ... selon que RB0 soit 1 ou 0 ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  14. #13
    invite5a04999e

    Re : tableau et switch en C

    Bonjour;
    alors ce que j'ai trouvé dans le .h inclus pour mon projet est PORTBbits.RB0 (pin RB0) ok, alors mais comment je peux retourner le niveau inverse de l'etat de la broche?
    et puis maintenant j'arrive a avoir des différentes valeurs de mon char c;
    je fait visualiser en mode pas à pas et je retourne bien les valeur de bit lu en décalant vers la gauche;
    mais juste elle sont pas juste par rapport à ma référence alors il faut ajuster autre chose dans le programme.

    maintenant soit je fais la fonction RDbit() et je retourne le niveau inverse de portB0 ou j'utilise PORTBbits.RBO pour retourner le niveau de portb0 tel qu'il est !!!

    j'ai essayer les deux cas et j'ai trouvé une différence (resultat inverse) !!! meme j'ai annuler les deux fonction et j'ai fait tout dans le main et j'ai eu les meme conclusions!!

    es tu peux me confirmer que le niveau des port est haut par defaut?
    merci

  15. #14
    Seb.26

    Re : tableau et switch en C

    Inversion par logiciel -> utilise RB0 ou !RB0 ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #15
    Seb.26

    Re : tableau et switch en C

    NB: plus on avance, et moins on y voit clair ... je te soupçonne de mal t'y prendre ...

    Tu veux faire quoi avec tout ça ???
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  17. #16
    invite5a04999e

    Re : tableau et switch en C

    merci; mais es c'est vrai que le niveau des port est haut par defaut?
    et puis c juste un application de lecture de bit pour un etudiant débutant en c; un miniprojet que ma cassé la tete mais je veux bien le faire et comprendre ce que je fait!!!

    en fait les différentes prototypes des fonction est déja donné par l'enseignant alors il nous a aidée seulement il faut faire les instructions de chaque fonction; ça sera mieu si j'ai fait avec autre chose que sa !!!

    merci

  18. #17
    Seb.26

    Re : tableau et switch en C

    Citation Envoyé par nirvo Voir le message
    merci; mais es c'est vrai que le niveau des port est haut par defaut?
    ... développe, car dit comme ça, ta question ne veut rien dire ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  19. #18
    Seb.26

    Re : tableau et switch en C

    Citation Envoyé par nirvo Voir le message
    merci; mais es c'est vrai que le niveau des port est haut par defaut?
    Tu veux dire après un RESET ?
    ... Pour ça, il te suffit le lire la Datasheet ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  20. #19
    invite5a04999e

    Re : tableau et switch en C

    bonjour;
    merci pour la réponse

    mais je pense toujours que la méthode de decalage n'est pas bonne car si :
    PORTB.RB0=1; alors RDbit() = 0; et puis je pense que le décalage sur ce cas sera pas bon;

    je vais revoir sa avec une méthode de masquage mais j'ai pas une idée clair.

    merci

  21. #20
    invitef86a6203

    Re : tableau et switch en C

    On ne peut pas utiliser le case comme ça .
    La valeur de saut est une valeur numérique qui va de 0 au nombre de case

    Il faut comparer les caractères un à un à la chaine.

    prog testé sur TC2 sous DOS

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    main()
    {
    char buf[256];
    int i,c;
    
    strcpy (buf,"AZERTYUIOP");
    clrscr();
      while (2) {
      printf("entr‚e une lettre");
      c  =getch();
      if (c==27) exit(0);
      for (i=0; i<10; i++)
    	if (c  ==buf[i]) break;
    
    	printf("%c %x\r\n",c,i);
      }
    }

  22. #21
    invite5a04999e

    Re : tableau et switch en C

    bonjour
    mais je comprend pas ce que vous dite , a koi va me servir printf dans mon programme sous MPLAB !!
    alors que je veux recuperer des donnée et les visualiser sous la watch


    merci de m'éclairer ce que vous avez dit

  23. #22
    invitef86a6203

    Re : tableau et switch en C

    Juste pour l'exemple.
    Avec le case pour convertir une lettre par une autre


    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    main()
    {
    char buf[26], tr[26];
    int i,c;
    
    strcpy (buf,"AZERTYUIOP");
    clrscr();
    while (2) {
    printf("entr‚e une lettre ");
    c  =getch();
    printf("\r\n");
    if (c==27) exit(0);
    for (i=0; i<10; i++)
    	if (c  ==buf[i]) break;
    
    	printf("%c => %x\r\n",c,i);
    
    switch (i) {
    	case 0:
    		strcpy(tr,"Q");
    		break;
    	case 1:
    		strcpy(tr,"S");
    		break;
    	case 2:
    		strcpy(tr,"D");
    		break;
    	case 3:
    		strcpy(tr,"F");
    		break;
    	case 4:
    		strcpy(tr,"G");
    		break;
    	case 5:
    		strcpy(tr,"H");
    		break;
    	case 6:
    		strcpy(tr,"J");
    		break;
    	case 7:
    		strcpy(tr,"K");
    		break;
    	case 8:
    		strcpy(tr,"L");
    		break;
    	case 9:
    		strcpy(tr,"M");
    		break;
    	default:
    		strcpy(tr,"Erreur");
    		break;
    	}
    	printf("%c == %s\r\n",buf[i],tr);
    
    }
    }

  24. #23
    invitef86a6203

    Re : tableau et switch en C

    Citation Envoyé par nirvo Voir le message
    bonjour
    mais je comprend pas ce que vous dite , a koi va me servir printf dans mon programme sous MPLAB !!
    alors que je veux recuperer des donnée et les visualiser sous la watch


    merci de m'éclairer ce que vous avez dit
    c 'est un exemple !
    a toi de remplacé le printf par ce que tu as besoin.

  25. #24
    invitef86a6203

    Re : tableau et switch en C

    Code:
    // variable globale
    unsigned tabDec[10];
    
    main()
    {
    // initialisation
    tabDec[0] = 0b00010000;
    tabDec[1] = 0b01010001;
    tabDec[2] = 0b01010010;
    tabDec[3] = 0b00010011;
    tabDec[4] = 0b01010100;
    tabDec[5] = 0b00010101;
    tabDec[6] = 0b00010110;
    tabDec[7] = 0b01010111;
    tabDec[8] = 0b01011000;
    tabDec[9] = 0b00011001;
    
    
    ...
    r = RD7bits();
    ...
    
    }
    
    
    
    char RD7bits(void)
    { char value;
    unsigned i;
    char c=0;
    for(i=1; i<128; i*=2)
    {
    c |= (RDbit() * i);
    }
    c &=0x7F; // faire un "et" avec c pour que sa soit sur 8 bits
    
    for i=0;i<10;i++)
    	if (tabDec[i]==c) return(i+1);
    return(0);
    }

  26. #25
    invite5a04999e

    Re : tableau et switch en C

    ok
    merci pour les réponses mais je doit faire les switch pour retourner les caracteres pour chaque ligne de tableau ?? decodage en fonction de mes reference !!

    et puis si je fait des switch et plus un tableau c'est trop non ....!!!
    merci

Discussions similaires

  1. Switch ou mini switch?
    Par inviteb85ec0d9 dans le forum Électronique
    Réponses: 2
    Dernier message: 28/12/2009, 12h58
  2. Utilisation de switch avec un autre switch
    Par invitef69a6111 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/10/2009, 19h10
  3. Q switch
    Par invite783b0b62 dans le forum Physique
    Réponses: 2
    Dernier message: 15/03/2007, 16h08
  4. Souci de switch
    Par invite61f3024e dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 14/09/2005, 20h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...