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

Langage Pascal Discussion :

[LG]Problême "types incompatibles"


Sujet :

Langage Pascal

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut [LG]Problême "types incompatibles"
    Bonjour !

    J'ai un petit problême:

    En fait je suis en train de travailler sur un petit programme de dérivation de fonctions...j'ai réussi à décomposer ma fonction en différents termes( variables, fonctions(cos, sin...), et réels), et mis chaque terme dans un champ d'une variable dynamique, toutes liées dans une FA...
    lors du vidage de la FA dans mes piles, je voudrai comparer le champ de chacune de mes VD avec les différents ensembles (type set of char)...malheureusement comme j'ai défini le champ de la VD comme un string[10] et que mon ensemble est de type set of char, la comparaison est impossible...n'y a t'il pas la possibilité de faire une convertion char->string...ou de modifier mon programme pour que ça marche ??

    Merci beaucoup

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Si tu pouvais expliciter les sigles FA et VD, ça aiderait.
    Mais bon, le problème peut être résolu sans, donc, en va s'en passer.

    Le problème vient de la déclaration en set of Char. Or, si les ensembles sont très pratiques dans certaines situations, ils deviennent vites ingérables dans des cas comme le tiens, car il n'existe aucune fonction permettant de les manipuler convenablement.

    Alors, de deux choses l'une.

    * Soit ton type set of Char est irremplaçable (ça peut se comprendre), auquel cas il faut se reporter à l'opérateur in :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      S: string;
      i: Integer;
    begin
      for i := 1 to Length(S) do
        if S[i] in CharSet then...
    end;

    * Soit tu peux te passer de ton type, et dans ce cas mieux vaut tenter d'utiliser un array of Char;


    Si ce n'est pas exactement ce à quoi tu te heurtes, essaie de préciser un peu plus.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    VD:variable dynamique
    FA: file d'attente


    En fait le principe est le suivant :

    voici mes ensembles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ensemble_nbr:=['0'..'9'];
    ensemble_char:=['a'..'z'];
    ensemble_op:=['+','/','-','*','^'];
    ensemble_par:=['(',')'];

    l'utilisateur entre sa fonction :
    ex: cosx+3-sin4x

    et moi je décompose la fonction dans une file d'attente de cette maniere: voici ce que contient ma file d'attente:
    cos
    x
    +
    3
    -
    sin
    4
    x

    ensuite, j'ai ma file d'attente et je souhaite créé une pile d'opérateurs et une pile d'opérandes....je voudrai voir en gros si
    (je nomme P_deb_FA le pointeur début de ma file d'attente):
    P_deb_FA^.nbre_E in ensemble_op ....seulement je ne peux pas car nbre_E est de type string et ensemble_op, c un set of char...


    MErci beaucoup

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Mais, s'il s'agit d'opérateur, il ne fait qu'un seul caractère de long ?

    Il suffit donc d'accéder au premier caractère de nbr_E :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P_deb_FA^.nbre_E[1] in ensemble_op
    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    ok mais je ne sais pas avant de comparer si il s'agit d'un opérateur ou pas...

    Imaginons que je compare "arcsin" pour voir si il appartient à l'ensemble des fonctions, et bah si je lis juste le premier caractère, c'est à dire "a", il va me le ranger dans la pile des variables car "a" est contenu dans l'ensemble des variables...Or arcsin est une fonction !!

    à moins que je joue sur la taille grace à la fonction length...si la taille dépasse 1, ça peut être soit une fonction soit plusieurs chiffres...A ce moment là je compare le 1er caractere et la taille !!..

    Qu'en penses tu ?

    Merci

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 43
    Points : 70
    Points
    70
    Par défaut
    Et si d'abord tu regardais la longueur de nbre_E :

    - Si la longueur est 1, tu regardes le premier caractère comme le disait hdd34
    - sinon tu fais le traitement pour les fonctions

  7. #7
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    ouai j'ai fait comme ce que tu dis, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if length(p_cour^.nbre_E)=1
                    then
                    begin
                            RETRAIT_VD_FA(P_deb_FA,P_fin_FA,Pnouveau);
                            AJOUT_VD_PILE(P_pile_arbre,Pnouveau);
                    end
                    else
                    begin
                            RETRAIT_VD_FA(P_deb_FA,P_fin_FA,Pnouveau);
                            AJOUT_VD_PILE(P_pile_op,Pnouveau);
                    end;

    merci à vous deux

    ++

  8. #8
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bon, eh bien je vois que le problème m'a l'air d'être résolu.

    Essaie de penser au tag Résolu la prochaine fois.

    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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

Discussions similaires

  1. Alias avec différents types de quote ?
    Par Djobird dans le forum Administration système
    Réponses: 2
    Dernier message: 14/02/2011, 17h37
  2. [VB.NET] Type Incompatible
    Par Cyrilange dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/11/2009, 20h08
  3. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22

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