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 :

Mise en place algo complexe en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut Mise en place algo complexe en C#
    Bonjour,

    je vous sollicite pour la mise en place d'un algorithme à écrire en C#.

    En fonctione d'une certaines règles qui peut être de ces différents type:
    - (1&2)
    -(1|2)
    -(1&2)|(3&4)
    -((1&2)|(3&4))&(5|6)
    -....
    Mes règles peuvent être de écrites de n'importes quelles manières. Il faut comprendre que le chiffres correspondent à des paramètre à saisir dans un formulaire. En fonction de cette règle de saisie, si tout est ok alors le formulaire est valide.
    Il faut que je crée une fonction qui me prend en compte tout ces cas et qui me renvoi true ou false si ma saisie est ok.
    Bien evidement en entrée je passe un objet qui contient les éléments du formulaire.

    Voici un exemple de ce que j'aimerais:
    si j'ai 5 paramètres et que ma règle est la suivante (1&2)|(3&4).
    Voici le resultat que j'aimerais pour les cas suivants :
    - si aucun saisi alors retourner FALSE
    - si 1 est saisi et 2/3/4 pas saisie alors retourner FALSE
    - si 1 et 2 saisi et 3/4 pas saisi alors retourner TRUE
    - si 1/2/4 pas saisi et 3 saisi alors retourner FALSE
    - si 1/2/3/4 saisi alors retourner false

    Il faut juste que la règle soit suivi.
    Je vous sollicite car je ne sais pas par où commencer.

    Merci pour votre aide

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Hello, comment comptes-tu paramétrer la règle et sous quelle forme se trouvent les paramètres ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Salut,

    je compte passer par une fonction qui me renverra un booléen.
    Je passerais un objet en paramètre qui contiendra tous les paramètres du formulaire avec bien leur numéro (1,2,3,4,...).
    La règle sera stocké dans une table SQL et sera fixe pour chaque formulaire mais elle peut avoir des formes différentes comme énoncés dans mes exemples :
    - (1&2)
    -(1|2)
    -(1&2)|(3&4)
    -((1&2)|(3&4))&(5|6)

    Du coup, la complexité est de regrouper ceux qui font parti d'un même lot de parenthèse et les tester en fonction du OU |et du ET &.

    Je reste à dispo si d'autres questions bien évidemment.

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    En fait la règle est représentée sous forme de chaîne de caractères ? Si oui il y a deux étapes : d'abord parser la chaîne pour en tirer un arbre syntaxique la représentant (opérateurs binaires ayant deux enfants, etc) et ensuite l'interpréter pour valider les résultats. Pour ma part je construirais un arbre constitué d'objets Expression afin de pouvoir directement compiler ça en une fonction évaluable.

    Si une étape te pose problème, il serait bon que tu nous dises laquelle.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    DonQuiche> Oui la règle est représentée sous forme de chaine de caractère.
    Je comprend pas tout ce que tu me dis mais en effet je voulais construire une sorte de tableau qui contient chaque sous règle mais je suis pas sur d'etre bon.

    Pourrais tu etre plus explicite car je ne comprend pas tout tes termes?

    Merci

  6. #6
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Il ne faut pas construire un tableau de règles mais un arbre de règles. Si tu prends les expressions trees de C# par exemple (System.Linq.Expressions.Expression) un objet "BinaryExpression" a deux enfants (Left et Right) qui sont eux-mêmes du type Expression. Il peut s'agir d'une constante ou d'une autre opérations binaire.

    Ainsi l'expression "5 + 4" est construite de cette façon:
    Expression.Add(Expression.Constant(5), Expression.Constant(4))

    Une fois que tu as bâti l'arbre il est possible de compiler un délégué correspondant.

Discussions similaires

  1. mise en place macros complexes
    Par magalie0210 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2012, 20h00
  2. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  3. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15
  4. mise en place serveur web intranet
    Par gui4593 dans le forum Installation
    Réponses: 7
    Dernier message: 01/01/2004, 18h18
  5. Mise en place d'index....??
    Par liv dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/12/2003, 11h04

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