Problème pour faire une suite d'opérations en C#
Résolu/Fermé
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
-
26 juin 2018 à 12:57
Eaglewin Messages postés 6 Date d'inscription mardi 26 juin 2018 Statut Membre Dernière intervention 28 juin 2018 - 28 juin 2018 à 08:24
Eaglewin Messages postés 6 Date d'inscription mardi 26 juin 2018 Statut Membre Dernière intervention 28 juin 2018 - 28 juin 2018 à 08:24
A voir également:
- Problème pour faire une suite d'opérations en C#
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Un opérateur peut il bloquer un téléphone pour non paiement - Forum SFR / NeufBox / Numéricable
- L'opération demandée nécessite une élévation ✓ - Forum LibreOffice / OpenOffice
- Digital river operations limited - Forum Consommation & Internet
- Debloquer telephone blacklisté ✓ - Forum Bouygues Télécom
10 réponses
Utilisateur anonyme
26 juin 2018 à 13:09
26 juin 2018 à 13:09
Bonjour,
Pour que l’on puisse faire quelque chise avec ton code, c’est pas des captures d’écran qu’il nous faut.
C’est le code copié collé et mis en couleur avec les balises dédiées, voir explications ici https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Pour que l’on puisse faire quelque chise avec ton code, c’est pas des captures d’écran qu’il nous faut.
C’est le code copié collé et mis en couleur avec les balises dédiées, voir explications ici https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
26 juin 2018 à 13:42
26 juin 2018 à 13:42
Bonjour,
Voici donc le code :
Le deuxième :
Et le dernier :
J'espère que cela pourra vous aider
Cordialement
Voici donc le code :
private void button5_Click(object sender, RoutedEventArgs e) { Button b = (Button)sender; if (result != 0) { operation = Convert.ToString(b.Content); txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString(); result = Double.Parse(txtDisplay.Text); txtDisplay.Text = ""; IbIShowOps.Text = result + " " + b.Content; enter_value = true; } else { operation = Convert.ToString(b.Content); result = Double.Parse(txtDisplay.Text); IbIShowOps.Text = result + " " + b.Content; enter_value = true; } firstnum = IbIShowOps.Text; }
Le deuxième :
private void btnEquals_Click(object sender, RoutedEventArgs e) { secondnum = txtDisplay.Text; IbIShowOps.Text = ""; switch (operation) { case "+": txtDisplay.Text = (result + Double.Parse(txtDisplay.Text)).ToString(); break; case "-": txtDisplay.Text = (result - Double.Parse(txtDisplay.Text)).ToString(); break; case "X": txtDisplay.Text = (result * Double.Parse(txtDisplay.Text)).ToString(); break; case "/": txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString(); break; default: break; } result = Double.Parse(txtDisplay.Text); operation = "";
Et le dernier :
Double result = 0; String operation = ""; bool enter_value = false; String firstnum, secondnum; public MainPage() { this.InitializeComponent(); }
J'espère que cela pourra vous aider
Cordialement
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
26 juin 2018 à 21:01
26 juin 2018 à 21:01
En fait, je voudrais faire un enchainement d'opérations sans cliquer sur la touche égal. Par exemple, si on touche une fois la touche diviser je voudrais calculer les deux nombres entrés précédemment et cela plusieurs fois. Je ne sais pas si je suis très clair, sinon référez vous au message qui a ouvert le sujet. J'espère que vous pourrez résoudre mon problème.
Bonne soirée
Cordialement
Bonne soirée
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié le 26 juin 2018 à 22:14
Modifié le 26 juin 2018 à 22:14
J'avais relu le premier message, mais je n'étais pas sûr d'avoir bien compris.
Le problème selon moi, est un problème récurrent chez les débutants.
Tu te sers de l'interface graphique comme source de données.
C# est un langage tout objet (tout ce que l'on utilise est un objet, tape
L'idée principale de la programmation objet est de spécialiser ses classes et de les faire travailler ensemble.
Imaginons une classe "Calculatrice"
Elle pourrait avoir une méthode SaisieChiffre qui prend un caractère en paramètre.
Cette méthode ajouterait le chiffre correspondant au nombre en cours.
Du coté de l'interface, tous les clicks des boutons représentant les chiffres appellent cette méthode
D'une part tu fais calculs sur des nombres et pas sur du texte. Ça parait logique non? Et pourtant, ça n'est pas ce que tu as codé.
En te servant de quelques variables tu peux stocker, un résultat temporaire (tant que égal n'est pas tapé), un opérateur intermédiaire et un nombre en cours.
En plus tu peux binder ton affichage sur le résultat ou sur une propriété que tu construis exprès.
Voir ici un aperçu du binding en WPF https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf
Et ici, un tour d'horizon de la programmation objet en C# https://codes-sources.commentcamarche.net/faq/11239-la-programmation-objet-appliquee-a-net-par-l-exemple-partie-1-sur-3
Pour les codes, j'ai tapé de tête, y'a p'tet une boulette ou 2, et j'ai pas gérés les chiffres après la virgule.
Le problème selon moi, est un problème récurrent chez les débutants.
Tu te sers de l'interface graphique comme source de données.
C# est un langage tout objet (tout ce que l'on utilise est un objet, tape
"n'importe quel texte".et intellisense va te proposer les quelques méthodes d'une instance de string.
L'idée principale de la programmation objet est de spécialiser ses classes et de les faire travailler ensemble.
Imaginons une classe "Calculatrice"
Elle pourrait avoir une méthode SaisieChiffre qui prend un caractère en paramètre.
Cette méthode ajouterait le chiffre correspondant au nombre en cours.
public double NombreEnCours {get; set;} = 0; public void SaisieChiffre(char Chiffre) { int chiffre; if (int.TryParse(Chiffre, out chiffre) { NombreEnCours *= 10 + chiffre; } }
Du coté de l'interface, tous les clicks des boutons représentant les chiffres appellent cette méthode
private void buttonChiffres_Click(object sender, RoutedEventArgs e) { bouton b = sender as Button; if (b != null) { maCalculatrice.SaisieChiffre(b.Texte); } }
D'une part tu fais calculs sur des nombres et pas sur du texte. Ça parait logique non? Et pourtant, ça n'est pas ce que tu as codé.
En te servant de quelques variables tu peux stocker, un résultat temporaire (tant que égal n'est pas tapé), un opérateur intermédiaire et un nombre en cours.
- Si tu tapes égal, le résultat final sera le résultat temporaire "opéré" par le nombre en cours,
- si c'est un opérateur alors résultat temporaire sera le résultat temporaire "opéré" par le nombre en cours, et l'opérateur deviendra le nouveau tapé.
En plus tu peux binder ton affichage sur le résultat ou sur une propriété que tu construis exprès.
Voir ici un aperçu du binding en WPF https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf
Et ici, un tour d'horizon de la programmation objet en C# https://codes-sources.commentcamarche.net/faq/11239-la-programmation-objet-appliquee-a-net-par-l-exemple-partie-1-sur-3
Pour les codes, j'ai tapé de tête, y'a p'tet une boulette ou 2, et j'ai pas gérés les chiffres après la virgule.
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
27 juin 2018 à 07:46
27 juin 2018 à 07:46
Bonjour, merci pour votre code qui m'a aidé. Pourriez vous me donner un exemple pour les variables où sera stocké le résultat temporaire car je ne sais pas trop comment m'y prendre. En effet, je suis débutant et collégien. Merci d'avance.
Bonne journée
Cordialement
Bonne journée
Cordialement
Utilisateur anonyme
27 juin 2018 à 18:25
27 juin 2018 à 18:25
Un truc comme ça
class Calculatrice { public double NombreEnCours { get; set; } = 0; public double Resultat { get; set; } = 0; private double resultatTemporaire = double.NaN;//Nan => not a number private string operateur = null; public void SaisieChiffre(string Chiffre) { int chiffre; if (int.TryParse(Chiffre, out chiffre)) { NombreEnCours *= 10 + chiffre; } } public void SaisieOperateur(string Operateur) { if (operateur == null)//on est au premier nombre { resultatTemporaire = NombreEnCours; } else { //On calcule l'opération précédente CalculOperation(); } //on remet le nombre en cours à zéro et on enregistre le nouvel opérateur NombreEnCours = 0; operateur = Operateur; } private void CalculOperation() { switch (operateur) { case "+": resultatTemporaire += NombreEnCours; break; //etc default: //cas d'un opérateur non prévu throw new Exception("Opérateur non codé"); } } public void SaisieEgal() { CalculOperation(); Resultat = resultatTemporaire; //on RAZ les variables NombreEnCours = 0; operateur = null; resultatTemporaire = double.NaN; } }
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
27 juin 2018 à 19:29
27 juin 2018 à 19:29
Merci beaucoup, j'ai appris plein de choses grâce à vous ! Tout fonctionne merci encore !
Bonne soirée
Cordialement
Bonne soirée
Cordialement
Utilisateur anonyme
27 juin 2018 à 19:32
27 juin 2018 à 19:32
Je te conseille de suivre ce cours
https://tahe.developpez.com/dotnet/csharp/
Ça te prendra quelques jours, mais il te donnera de bonnes base en C#
https://tahe.developpez.com/dotnet/csharp/
Ça te prendra quelques jours, mais il te donnera de bonnes base en C#
Eaglewin
Messages postés
6
Date d'inscription
mardi 26 juin 2018
Statut
Membre
Dernière intervention
28 juin 2018
28 juin 2018 à 08:24
28 juin 2018 à 08:24
Merci beaucoup pour le conseil !
Cordialement
Cordialement