Berechnungen in C#

#1
Hallo, ich habe erst neu mit programmieren angefangen und bin noch viel am probieren und komme momentan nicht weiter und hoffe das vlt jemand eine Lösung für mein Problem hat.

Mein Code sieht wie folgt aus;
C#:
            int Aroma = 0;
            int Grundwert =0;
            int mengeAroma =0;
            int mengeBase =0;

            Console.WriteLine("Gesammte Liquidmenge?");
            Grundwert = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Wieviel % Armoa soll begemischt werden?");
            Aroma = Convert.ToInt32(Console.ReadLine());

          

            Console.WriteLine(mengeAroma = Grundwert  / 100 * Aroma );
            Console.ReadLine();
          
          

            Console.WriteLine(mengeBase = Grundwert - mengeAroma );
            Console.ReadLine();
Mein Problem ist das nach der Eingabe des Aroma Anteils, eig das Ergebnis von Grundwert / 100 * Aroma kommen sollte, stattdessen spuckt er nach der Eingabe einfach nur meine Eingabe ohne Berechnung aus.

Wenn ich es als double probiere klappt es mit der rechnung. nur das er mir jetzt sagt das
Console.WriteLine(mengeAroma = (Grundwert/100* Aroma));
mengeAroma = Convert.ToDouble(Console.ReadLine());
das falsche format hat..



C#:
double Aroma = 0;
           double Grundwert =0;
            double mengeAroma =0;
            double mengeBase =0;

            Console.WriteLine("Gesammte Liquidmenge?");
            Grundwert = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Wieviel % Aroma soll begemischt werden?");
            Aroma = Convert.ToDouble(Console.ReadLine());

           

            Console.WriteLine(mengeAroma = (Grundwert/100* Aroma));
            mengeAroma = Convert.ToDouble(Console.ReadLine());

           
           

            Console.WriteLine(mengeBase = (Grundwert - mengeAroma) );
            mengeBase = Convert.ToDouble(Console.ReadLine());
Moderator Notiz: Code-Tags hinzuegfügt
 
Zuletzt bearbeitet von einem Moderator:

Mat

Well-Known Member
c-b Experte
#2
Ist schwer zu lesen. Am besten, du benutzt nächstes Mal Codeblöcke:
https://www.coding-board.de/threads/faq.33345/

Von int weg zu double war schon mal der richtige Weg, weil du sonst Schwierigkeiten beim teilen durch 100 kriegen würdest.

Bei deiner Double-Variante sagst du, mengeAroma = Grundwert/100*Aroma ..aber eine Zeile danach überschreibst du es schon wieder mit einer neuen Konsoleneingabe mengeAroma = Convert.ToDouble(Console.ReadLine()). Das gleiche machst du bei mengeBase. Die können jeweils weg, die Zeilen.

Schau' dir auch mal String.Format an.. damit kannst du deine Konsolenausgaben ein bisschen verschönern.
 
#3
Hallo, mit der Berechnung klappt es jetzt, bin auch von der Konsolenanwendung zu WPF gegangen.
Nun habe ich das Problem das mein ausgerechneter Wert negativ angezeigt wird.
Vlt hat ja jemand eine Lösung für mich? :)

C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            NewMethod();

        }

        private void NewMethod() => Gebindegröße.Text = Slider1.Value.ToString();

        private void Slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            Aroma.Text = Slider2.Value.ToString();
        }

        private void Berechnen_Click(object sender, RoutedEventArgs e)
        {
           Aroma.Text = Convert.ToString(Convert.ToDouble(Gebindegröße.Text)  / 100.0 * Convert.ToDouble(Aroma.Text));
            Gebindegröße.Text = Convert.ToString(Convert.ToDouble(Aroma.Text) - Convert.ToDouble(Gebindegröße.Text ));
        }
    }
}
 
Zuletzt bearbeitet:

Mat

Well-Known Member
c-b Experte
#4
Beschreibe doch mal, welche Werte du eingibst, was du als Ausgabe erhältst und was du als Ausgabe erwartest. Also sowas:

Code:
Gebinde    | Aroma  | Erwartet  | Erhalten
123        | 456    | 50        | -20
Der Code verwirrt mich und ich müsste mich erst mit EZigaretten auseinandersetzen, um zu wissen, was du da berechnen willst.

Also du hast 2 Slider: Einen für Aroma und einen für Gebindegröße (was auch immer das ist)?
Beim Berechnen wird der Text vom Aroma-Label geändert zu Gebindegröße / 100 * Aroma ..also du sagst Aroma = Gebindegröße / 100 * Aroma?
Und danach benutzt du Gebindegröße.Text um Gebindegröße.Text zu berechnen?

Nimm mal extra Variablen nur fürs Berechnen (also in Berechnen_Click), sonst musst du die ganze Zeit im Hinterkopf behalten, in welchem Zustand sich die Textfelder befinden. Kannst du dann auch besser debuggen. Ich hab jetzt nicht getestet, aber ich denke mal es liegt daran, dass du Textfelder veränderst und dann diese veränderten Werte weiterverwendest..was vielleicht gar nicht so geplant war.
 
#5
Code:
 GebindegrößeMl.Text = Convert.ToString(Convert.ToDouble(Gebindegröße.Text)  / 100.0 * Convert.ToDouble(Aroma.Text));
            Aroma1.Text = Convert.ToString(Convert.ToDouble(Aroma.Text) - Convert.ToDouble(Gebindegröße.Text ));
Ich hab es jetzt so das GebindegrößeMl.Text meine Textbox ist wo das Ergebnis für die Berechnung von Gebindegröße steht,
Jetzt will ich einfach z.B 100 ml /100 * Prozent teil des Aromas berechnen. dabei kommt raus 10 ml Aroma
Im nächsten Absatz wird nur das Ergebnis der Rechnung von der Gebindegröße in dem Fall 100 ml abgezogen und es würde 90 ml rauskommen
aber in meiner Textbox wird -90 angezeigt

Code:
Aroma1.Text = Convert.ToString(Convert.ToDouble(Gebindegröße.Text)  / 100.0 * Convert.ToDouble(Aroma.Text));
            GebindegrößeMl.Text = Convert.ToString (Convert.ToDouble (Gebindegröße.Text) - Convert.ToDouble( Aroma1.Text));

irgendwie hatte ich nen denkfehler in meinem code, nach einer stunde grübeln bin ich dann doch noch selbst drauf gekommen, jetzt funktioniert es so wie ich möchte

Liquid_Rechner.jpg
 
Zuletzt bearbeitet:
Oben