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 :

calculatrice avec priorite


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Décembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 35
    Par défaut calculatrice avec priorite
    Bonjour,
    Je suis débutante en c# et je suis entrain de réaliser une calculatrice avec interface graphique et prend en considération la priorité des opérations .
    J'ai déjà fait un code mais lorsque j'ajoute la parti de la priorité le programme ça marche pas.
    Est ce q'il y a quelqu'un qui peut m'aider ?
    Merci

    Voici le code du programme.
    Le 1er programme c'est pour la priorité:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    namespace calcul
    {
        public class operation : object {
    		public string phrase;
    		public string operateur;
    		public operation droite;
    		public operation gauche;
     
     
    		public operation(string phrase) {
    			this.phrase=phrase;
     
     
    		}
     
    		public void decouper(){
    			//on recherche un + (le plus a doite possible) qui n'est pas dans une parenthese
    			int position_plus=this.phrase.LastIndexOf("+");
    			bool trouver_bon_plus = false;
    			while (position_plus != -1 && trouver_bon_plus==false ){
    				if (this.compte_jusqua("[", position_plus) != this.compte_jusqua("]", position_plus) ){
    					position_plus = this.phrase.LastIndexOf("+", position_plus-1, position_plus);
    				}
    				else{
    					trouver_bon_plus = true;
    				}
    			}
    			if (trouver_bon_plus == false){
    				position_plus = -1;
    			}
     
    			//on recherche un - (le plus a doite possible) qui n'est pas dans une parenthese
    			int position_moin=this.phrase.LastIndexOf("-");
    			bool trouver_bon_moin = false;
    			while (position_moin != -1 && trouver_bon_moin==false ){
    				if (this.compte_jusqua("[", position_moin) != this.compte_jusqua("]", position_moin) ){
    					position_moin = this.phrase.LastIndexOf("-", position_moin-1, position_moin);
    				}
    				else{
    					trouver_bon_moin = true;
    				}
    			}
    			if (trouver_bon_moin == false){
    				position_moin = -1;
    			}
     
    			// priorité au + et -
     
    			// il ya a d'abord un +
    			if ( (position_plus!=-1 && position_moin==-1) || (position_plus!=-1 && position_moin!=-1 && position_plus>position_moin) ){
    				this.operateur = "+";
     
    				string phrase_gauche=this.phrase;
    				phrase_gauche = phrase_gauche.Remove(position_plus,phrase_gauche.Length-position_plus);	
    				this.gauche = new operation(phrase_gauche);
     
    				string phrase_droite=this.phrase;
    				phrase_droite = phrase_droite.Remove(0,position_plus+1);
    				this.droite = new operation(phrase_droite);				
    			}
    			// il ya a d'abord un -
    			else if ( (position_plus==-1 && position_moin!=-1) || (position_plus!=-1 && position_moin!=-1 && position_moin>position_plus) ){
    				this.operateur = "-";
     
    				string phrase_gauche=this.phrase;
    				phrase_gauche = phrase_gauche.Remove(position_moin,phrase_gauche.Length-position_moin);	
    				this.gauche = new operation(phrase_gauche);
     
    				string phrase_droite=this.phrase;
    				phrase_droite = phrase_droite.Remove(0,position_moin+1);
    				this.droite = new operation(phrase_droite);	
     
    			}
     
     
     
     
    			// maintenant * et /
    			else {
    				//on recherche un * (le plus a doite possible) qui n'est pas dans une parenthese
    				int position_multiplier=this.phrase.LastIndexOf("*");
    				bool trouver_bon_multiplier = false;
    				while (position_multiplier != -1 && trouver_bon_multiplier==false ){
    					if (this.compte_jusqua("[", position_multiplier) != this.compte_jusqua("]", position_multiplier) ){
    						position_multiplier = this.phrase.LastIndexOf("*", position_multiplier-1, position_multiplier);
    					}
    					else{
    						trouver_bon_multiplier = true;
    					}
    				}
    				if (trouver_bon_multiplier == false){
    					position_multiplier= -1;
    				}
     
    				//on recherche un / (le plus a doite possible) qui n'est pas dans une parenthese
    				int position_diviser=this.phrase.LastIndexOf("/");
    				bool trouver_bon_diviser = false;
    				while (position_diviser != -1 && trouver_bon_diviser==false ){
    					if (this.compte_jusqua("[", position_diviser) != this.compte_jusqua("]", position_diviser) ){
    						position_diviser = this.phrase.LastIndexOf("/", position_diviser-1, position_diviser);
    					}
    					else{
    						trouver_bon_diviser = true;
    					}
    				}				
    				if (trouver_bon_diviser == false){
    					position_diviser= -1;
    				}				
     
     
     
     
    				// il ya a d'abord un *
    				if ( (position_multiplier!=-1 && position_diviser==-1) || (position_multiplier!=-1 && position_diviser!=-1 && position_multiplier>position_diviser) ){	// il ya a d'abord un *
    					this.operateur = "*";
     
    					string phrase_gauche=this.phrase;
    					phrase_gauche = phrase_gauche.Remove(position_multiplier,phrase_gauche.Length-position_multiplier);	
    					this.gauche = new operation(phrase_gauche);
     
    					string phrase_droite=this.phrase;
    					phrase_droite = phrase_droite.Remove(0,position_multiplier+1);
    					this.droite = new operation(phrase_droite);				
    				}
    				// il y a d'abord un /
    				else if ( (position_multiplier==-1 && position_diviser!=-1) || (position_multiplier!=-1 && position_diviser!=-1 && position_diviser>position_multiplier) ){	// il ya a d'abord un /
    					this.operateur = "/";
     
    					string phrase_gauche=this.phrase;
    					phrase_gauche = phrase_gauche.Remove(position_diviser,phrase_gauche.Length-position_diviser);	
    					this.gauche = new operation(phrase_gauche);
     
    					string phrase_droite=this.phrase;
    					phrase_droite = phrase_droite.Remove(0,position_diviser+1);
    					this.droite = new operation(phrase_droite);	
     
    				}
                }
     
    		}
     
    		public float calculer(float x){
    			float resultat=0;
    			this.decouper();
    			// cas: + - * / ^
    			if(this.gauche!=null && this.droite!=null){
    				if(this.operateur=="+"){
    					resultat=this.gauche.calculer(x)+this.droite.calculer(x);
    					return resultat;
    				}
    				else if(this.operateur=="*"){
    					resultat=this.gauche.calculer(x)*this.droite.calculer(x);
    					return resultat;
    				}
    				else if(this.operateur=="-"){
    					resultat=this.gauche.calculer(x)-this.droite.calculer(x);
    					return resultat;					
    				}
    				else if(this.operateur=="/"){
    					resultat=this.gauche.calculer(x)/this.droite.calculer(x);
    					return resultat;
    				}	
     
    			}
     
    			return resultat;
     
    		}
     
     
     
     
     
     
     
     
     
    		// exemple: compte_depuis("a", 3) de "aaaaaa" =>3
    		public int compte_depuis(string ch, int debut){
    			int pos;
    			int nb=0;
    			bool arreter=false;
    			while( (debut <= this.phrase.Length) && (arreter == false) ){
    				pos=phrase.IndexOf(ch,debut);
    				if(pos != -1){
    					nb++;
    					debut=pos+1;
    				}
    				else{
    					arreter=true;
    				}
     
     
    			}
    			return nb;
    		}
     
     
     
    		// exemple: compte_jusqua("a", 3) de "aaaaaa" =>3
    		public int compte_jusqua(string ch, int fin){
    			int pos;
    			int nb=0;
    			bool arreter=false;
    			int i=0;
    			while( (i <= fin) && (arreter == false) && (i <= this.phrase.Length) ){
    				pos=phrase.IndexOf(ch, i, fin-i);
    				if(pos != -1){
    					nb++;
    					i=pos+1;
    				}
    				else{
    					arreter=true;
    				}
     
     
    			}
    			return nb;
    		}
     
     
     
    	}
    }
    Le 2eme est ce lui le principale:

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    using calcul;
    namespace tetcalc
    {
        public partial class Form1 : Form
        {
            string op = "";
            double op1 = 0;
            double op2 = 0;
            public Form1()
            {
                InitializeComponent();
            }
     
            private void buttonegal_Click(object sender, System.EventArgs e)
            {
                string equation = this.txtinsert.Text;
                string string_x = this.txtresults.Text;
                float x;
     
                if (equation != "")
                {
                    if (string_x != "")
                    {
                        decimal decimal_x = Convert.ToDecimal(string_x);
                        x = (float)decimal_x;
                    }
                    else
                    {
                        x = 0f;
                    }
     
                    operation lounis = new operation(equation);
                    float res = lounis.calculer(x);
                    //this.textBox_resultat.Text=Convert.ToString(res);
                    this.txtresults.Text = Convert.ToString(res);
                }
            }
     
            private void txtinsert_TextChanged(object sender, EventArgs e)
            {
     
            }
     
            private void button08_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "8";
            }
     
            private void button01_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "1";
            }
     
            private void button02_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "2";
            }
     
            private void button03_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "3";
            }
     
            private void button04_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "4";
            }
     
            private void button05_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "5";
            }
     
            private void button06_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "6";
            }
     
            private void button09_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "9";
            }
     
            private void buttondivis_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "/";
            }
     
            private void buttonmultipl_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "*";
     
            }
     
            private void buttonmoins_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "-";
            }
     
            private void buttonplus_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "+";
     
            }
     
            private void buttonvergul_Click(object sender, EventArgs e)
            {
                txtinsert.Text += ",";
            }
     
            private void buttonplusmoins_Click(object sender, EventArgs e)
            {
                double op = -Convert.ToDouble(txtinsert.Text);
                txtinsert.Text = op.ToString();
            }
     
            private void button00_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "0";
            }
     
            private void buttonparent2_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "]";
            }
     
            private void buttonparent1_Click(object sender, EventArgs e)
            {
                txtinsert.Text += "[";
            }
     
            private void buttonAC_Click(object sender, EventArgs e)
            {
                txtinsert.Text = "";
                txtresults.Text = "";
                op1 = op2 = 0;
            }
     
            private void txtresults_TextChanged(object sender, EventArgs e)
            {
                this.txtresults.SelectionStart = txtresults.Text.Length;
                this.txtresults.ScrollToCaret();
     
            }
     
            private void txtinsert_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsControl(e.KeyChar)
                      && !char.IsDigit(e.KeyChar)
                           && e.KeyChar != ',')
                {
                    e.Handled = true;
                }
     
                // only allow one decimal point
                if (e.KeyChar == ','
                    && (sender as TextBox).Text.IndexOf(',') > -1)
                {
                    e.Handled = true;
                }
            }
        }
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par azert2010 Voir le message
    j'ai déjà fait un code mais lorsque j'ajoute la parti de la priorité le programme ça marche pas,est ce q'il y a quelqu'un qui peut m'aidez c'est urgent.
    "ça marche pas" : peut-être pourrais-tu préciser un peu le problème ?
    Tu postes des centaines de lignes de code sans donner aucune précision sur le problème : crois-tu vraiment que les gens vont prendre la peine d'analyser tout ce code pour t'aider ? Personne ne t'aidera si tu ne te donnes pas la peine de présenter le problème de façon claire, en isolant la partie qui pose problème...

    Donc, si tu veux de l'aide :
    - indique précisément ce qui pose problème : obtiens-tu une erreur de compilation ? un exception à l'exécution ? quel est le message de l'erreur ? quel est le résultat attendu, et le résultat obtenu ?
    - ne poste que la partie du code liée à ton problème.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 35
    Par défaut calculatrice avec priorite
    salut,
    merci pour tes remarques,en fait le problème ce n'est pas au niveau de compilation mais lorsque l'interface graphique du programme apparaît les bouton du calculatrice lorsque je Click sur eux ne s'active pas rein ne s’écrit dans la zone texte.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Les boutons sont bien actifs (pas de Enabled à false) ?
    Les événements Click des boutons sont bien attachés aux méthodes ?
    Si tu mets un point d'arrêt dans les méthodes tu y passes bien ? A priori non mais ce serait bien de s'en assurer.

    Concernant le code, pour simplifier un peu la chose tu pourrais utiliser la propriété Tag des boutons afin de leur associer une valeur. Il suffit ensuite d'associer l'événement Click des boutons à la même méthode et d'utiliser ensuite le Tag dans le traitement. Ca limitera le nombre de méthodes et ce sera plus clair au final.

    Par exemple, si on associe à chaque bouton utilisé pour construire l'opération (les boutons de 0 à 9, le point, les parenthèses et les opérateurs) un Tag correspondant à la "valeur" du bouton (0, 1, 2, 3...) alors on peut abonner tous ces boutons à la même méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void ButtonTokenClick(object sender, EventArgs e)
    {
        txtInsert.Text += (String)((Button)sender).Tag;
    }
    On passe d'une quinzaine de méthodes à une seule en procédant ainsi

    Sinon cela me semble bien compliqué comme code pour calculer ces opérations. Ce serait plus simple, compte tenu des opérations utilisées, si tu convertissais l'expression en notation polonaise inversée pour ensuite calculer le résultat. On peut même faire encore plus "simple" en passant par CodeDom, mais c'est sortir l'artillerie lourde pour pas grand chose à ce stade

Discussions similaires

  1. Calculatrice avec deux Fenetres ?
    Par marven dans le forum Débuter
    Réponses: 2
    Dernier message: 04/10/2008, 14h34
  2. Calculatrice (avec fonctions)
    Par Fur1ous dans le forum C
    Réponses: 4
    Dernier message: 07/11/2007, 10h21
  3. Tri d'une liste d'attente avec priorité
    Par boutchz dans le forum Access
    Réponses: 8
    Dernier message: 02/03/2006, 18h42
  4. [Conception] Queue avec priorité
    Par Mobius dans le forum Général Java
    Réponses: 4
    Dernier message: 11/04/2005, 08h26
  5. Lancement de processus avec priorité
    Par GMI3 dans le forum Administration système
    Réponses: 2
    Dernier message: 14/06/2004, 16h43

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