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 :

convertir une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut convertir une chaine
    bonjour,
    voila je cherche comment mettre ma chaine de caractere dans un tableau des reels
    exemple :
    12*13%((-2.2)+1)
    la permiere case doit contenir 12
    la 2eme code de *
    la 3eme 13
    la 4eme code de %
    5eme code de parenthese ouvrante
    6eme code de parenthese
    la 7eme case -2.2
    etc
    voila merci d avance pour votre aide
    a+

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ralf91
    voila je cherche comment mettre ma chaine de caractere dans un tableau des reels
    exemple :
    12*13%((-2.2)+1)
    la permiere case doit contenir 12
    la 2eme code de *
    la 3eme 13
    la 4eme code de %
    5eme code de parenthese ouvrante
    6eme code de parenthese
    la 7eme case -2.2
    Ca ressemble fort à un analyseur d'expression mathématique. J'ai bien peur que ce soit un peu plus compliqué que tu ne le croies...

    Quel est ton énoncé exactement ?

  3. #3
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut
    salut,
    ben c'est l'evaluation d'expressions arithmetique, au fait demande d'ecrire une fonction operation qui en parametre x1, x2 et operateur et elle retourn le resultat donc je dois generer un vecteur des reels correspondant a l'expression arithmetique, chaque case du vecteur doit contenir soit un operande, un operateur (son code) ou une parenthese.

    exemple
    chaine = "-14+12.3*(12%2)"
    et le vecteur doit contenir :
    -14 code de '+' 12.3 code de '*' code de '(' etc...
    voila
    a+

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    eh bien si tu dois coder ça, suis les bonnes pratiques de développement.

    Spécification (l'énoncé)

    Conception préliminaire :
    réfléchis à l'agorithme qu'il te faut.

    Conception détaillée :
    écris ton algorithme en pseudo-code

    Programmation :
    Essaye ensuite de le coder

    et là on pourra t'aider..


  5. #5
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut
    voici quelque fonctions que j'ai pu faire, ce prgramme a deux problemes le premier est : il ne marche pas je ne sais pas pourquoi j'ai essayé de le dérouler manuellement ca marche mais avec DEV non ! le deusieme, il lui manque quelque cas comme les nombres négatifs ?? je pense que j'ai un sérieu probleme la, j'ai besoin d'aide svp
    pour les fonctions:
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    float code(char c)
    {
          switch (c)
          {
          case '0': return 0;    break;
          case '1': return 1;    break;
          case '2': return 2;    break;
          case '3': return 3;    break;
          case '4': return 4;    break;
          case '5': return 5;    break;
          case '6': return 6;    break;
          case '7': return 7;    break; 
          case '8': return 8;    break;
          case '9': return 9;    break;
          case '(': return 11;    break;
          case ')': return 12;    break;
          case '+': return 13;    break;
          case '-': return 14;    break;
          case '*': return 15;    break;
          case '/': return 16;    break;
          case '%': return 17;    break;
          }
    }    
     
     
    void conversion(char *ch, float **t, int *pos)
    {
         int i=0,j=0,b=0,l,k=0,pui,l2,pui2;
         float nombre1,nombre2;
         char ch2[22],ch3[22];
     
         *pos=0;
      while(i<=strlen(ch));
      {
         b=0;   j=0;   k=0;
     
         while (!operateur(ch[i]) && ch[i]!=')' && ch[i]!='(' && ch[i]!='\0')  //chercher les nombres et les sauvgarder dans des chaines
         {
               if(ch[i]=='.' || ch[i]=='e' || ch[i]=='E')
               {
                             i++;
                             b==1;
                             }
               if(b==0) 
                  {  ch2[j]=ch[i];   j++;  }
               else 
                  {  ch3[k]=ch[i];   k++;  }
         i++;
         }
     
         nombre1=nombre2=pui=pui2=0;
     
         if(j!=0)   
         {
                 l=strlen(ch2);
                 while(l>0)   //construction de la partie gauche du nombre  (avant le point)
                 {
                  nombre1 = nombre1 + (code(ch2[l-1])*(pow(10,pui)));
                  pui++;
                  l--;
                 }
                 if(k!=0)
                 {
                  l2=strlen(ch3);
                  while(l2>0)   //construction de la partie droite du nombre (apres le point)
                  {
                   nombre2 = nombre2 + (code(ch3[l2-1])*(pow(10,pui2)));
                   pui2++;
                   l2--;
                   }
                 }
     
                 (*t)[(*pos)]=nombre1+((nombre2)/(pow(10,strlen(ch3))));  //mettre le nombre final dans un tableau
                 (*pos)++;
         }
     
         if (operateur(ch[i])==1 || ch[i]=='(' || ch[i]==')' || ch[i]=='e' || ch[i]=='E')  // autre qu'un nombre
         { 
            (*t)[(*pos)]=code(ch[i]);
            (*pos)++;
            }
            i++;
      } 
     
    }
    pour vérifier si ca marche ou pas j'ai éssayé d'afficher le tableau alors j'ai mis dans le main

    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
     
    int main(int argc, char *argv[])
    {
        int i,pos;
        char ch[20];
        float *t;
     
        t=(float *)malloc(20*sizeof(float));
     
        printf("entrer l operation :  ");
            gets(ch);
     
        conversion(ch,&t,&pos);
     
        for (i=0; i<pos; i++)
            printf("case %d est : %f \n",i,t[i]); 
     
     
      system("PAUSE");	
      return 0;
    }
    j'ai pas trouve le probleme merci pour votre aide
    a+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    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
    ...
    float code(char c)
    {
          switch (c)
          {
          case '0': return 0;    break;
          case '1': return 1;    break;
          case '2': return 2;    break;
          case '3': return 3;    break;
          case '4': return 4;    break;
          case '5': return 5;    break;
          case '6': return 6;    break;
          case '7': return 7;    break; 
          case '8': return 8;    break;
          case '9': return 9;    break;
          case '(': return 11;    break;
          case ')': return 12;    break;
          case '+': return 13;    break;
          case '-': return 14;    break;
          case '*': return 15;    break;
          case '/': return 16;    break;
          case '%': return 17;    break;
          }
    }   
    ...
    Aie si tu retournes, cela ne sert a rien de mettre un break.

    je te conseille deja de faire ca :
    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
    ...
    float code(char c)
    {
          int val;
          switch (c)
          {
          case '0': val = 0;    break;
          case '1': val = 1;    break;
          case '2': val = 2;    break;
          case '3': val = 3;    break;
          case '4': val = 4;    break;
          case '5': val = 5;    break;
          case '6': val = 6;    break;
          case '7': val = 7;    break; 
          case '8': val = 8;    break;
          case '9': val = 9;    break;
          case '(': val = 11;    break;
          case ')': val = 12;    break;
          case '+': val = 13;    break;
          case '-': val = 14;    break;
          case '*': val = 15;    break;
          case '/': val = 16;    break;
          case '%': val = 17;    break;
          default: val = -1;
          }
     
          return val;
    }
    ...
    Je n ai pas encore regarde le reste du code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 11h06
  2. Réponses: 3
    Dernier message: 03/01/2006, 23h14
  3. [C#] Convertir une chaine accentue => sans accents
    Par alex57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/09/2005, 09h21
  4. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  5. Convertir une chaine UTF8 en ISO-8859-1
    Par eods dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/08/2004, 16h57

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