BMI Rechner in C#?

5 Antworten

Schlichtweg blöde Idee. Sicherlich können dir das hier ein paar Leute programmieren, allerdings gehen die Ansätze da von "alles in einer Methode" zu "Funktionalität aufgeteilt in verschiedene Klassen"... wobei ich mir beim letzten nicht mal sicher bin, ob du als "blutiger Anfänger" die Syntax überhaupt verstehen kannst.

Probier es selber aus, falls du konkrete Fragen hast, kann dir hier sicherlich geholfen werden. Bitte immer mit Codeschnippsel und versuch dein Problem möglichst genau zu beschreiben.

Mir macht es eher den Anschein das Du möchtest das jemand für Dich Deine Hausaufgaben macht. So ein programm als simple consolen Anwendung beinhaltet nur ein paar wenige Zeile Code. Die Berechnung selbst und dann noch if ... else if... else... und fertig ist die Laube. Da gibt es nicht viel zu optimieren ausser Du willst daraus ein Programm mit grafischer Benutzeroberfläche machen. Das halte ich aber eher für unwarscheinlich da Du Dich als Anfänger wohl eher noch nur mit Consolen Programmen auseinandersetzt.

Wenn dann Poste Du hier Deinen Code, dann können wir Dir sagen ob noch was Verbesserungsfähig ist wenn Du nicht gerade darauf aus bist das hier jemand Deine Hausaufgaben macht.

dancingqueen204 
Fragesteller
 08.10.2014, 16:28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Testprogramm
{
    class Program
    {
        static void Main(string[] args)
        {
            double a; /*Dezimalzahl für Größe in m*/
            double b; /*Dezimalzahl für Gewicht in kg*/
            double c; /*Dezimalzahl für Ergebnis*/
            string eingabe1;
            string eingabe2;

            Console.WriteLine("Gib deine Größe ein: ");
            eingabe1 = Console.ReadLine();
            a = Convert.ToDouble(eingabe1);

            Console.WriteLine("Gib dein Gewicht ein: ");
            eingabe2 = Console.ReadLine();
            b = Convert.ToDouble(eingabe2);

            c = 0;
            c = b / (a * a);

            Console.WriteLine("Ergebnis: " + c);

            if (c >= 25.00)
            {
                Console.WriteLine("ÜBERGEWICHTIG!");
            }
            else if (c >= 18.50)
            {
                Console.WriteLine("NORMALGEWICHTIG!");
            }
            else if (c <= 18.49)
            {
                Console.WriteLine("UNTERGEWICHTIG!");
            }
            else
            {
                Console.WriteLine("FEHLER BEI DER DATENVERARBEITUNG!");
            }
            
            Console.ReadLine();
        }
    }
}

Geht das noch was anderes? Ich hab nämlich ein Problemchen: Der Fall "else" Tritt nie ein... Wenn ich statt einer Kommazahl zum Beispiel Text eingebe, schließt sich das Programm einfach, aber die Fehlermeldung die ich da unten eingefügt habe, erscheint nicht...

0
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 WpfTest
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            lblResult.Content = ...
        }


    }
}

Das wart die Code-Behind-Datei und hier noch die verbesserungsfähige XAML

<Window x:Class="WpfTest.MainWindow"
        xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation</a>"
        xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml">http://schemas.microsoft.com/winfx/2006/xaml</a>"
        Title="MainWindow" Height="183" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <ListView Grid.Column="0">
            <Label>Größe</Label>
            <TextBox x:Name="txtGröße" Width="248"></TextBox>
            <Separator></Separator>
            <Label>Gewicht</Label>
            <TextBox x:Name="txtGewicht" Width="248"></TextBox>
            <Separator></Separator>
            <Button Content="Berechnen" Width="248" Click="Button_Click"/>
        </ListView>
        <Label x:Name="lblResult" Content="" Grid.Column="1"></Label>

    </Grid>
</Window>
Donat47  06.10.2014, 20:58

wie gesagt verbesserungsfähig ... weil ich teilweise fixe größen verwendet habe ... du könntest das grid auch durch n dockpanel ersetzten

0

Schmeiss doch einfach dein code hier rein, da koennen wir dann gerne helfen.

Das wird wahrscheinlich mehr bringen da du wahrscheinlich infos bekommst wieso es manchmal besser ist sachen etwas anderes zu machen.

rgds

dancingqueen204 
Fragesteller
 08.10.2014, 16:29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Testprogramm
{
    class Program
    {
        static void Main(string[] args)
        {
            double a; /*Dezimalzahl für Größe in m*/
            double b; /*Dezimalzahl für Gewicht in kg*/
            double c; /*Dezimalzahl für Ergebnis*/
            string eingabe1;
            string eingabe2;

            Console.WriteLine("Gib deine Größe ein: ");
            eingabe1 = Console.ReadLine();
            a = Convert.ToDouble(eingabe1);

            Console.WriteLine("Gib dein Gewicht ein: ");
            eingabe2 = Console.ReadLine();
            b = Convert.ToDouble(eingabe2);

            c = 0;
            c = b / (a * a);

            Console.WriteLine("Ergebnis: " + c);

            if (c >= 25.00)
            {
                Console.WriteLine("ÜBERGEWICHTIG!");
            }
            else if (c >= 18.50)
            {
                Console.WriteLine("NORMALGEWICHTIG!");
            }
            else if (c <= 18.49)
            {
                Console.WriteLine("UNTERGEWICHTIG!");
            }
            else
            {
                Console.WriteLine("FEHLER BEI DER DATENVERARBEITUNG!");
            }
            
            Console.ReadLine();
        }
    }
}
0
Woolli  09.10.2014, 13:12
@dancingqueen204

Hi, schon mal ganz gut, es gibt viele andere loseungen hiefuer, aber ich habe einfach nur ein paar kleine anpassungen an deinen code gemacht, um ein paar gedanken anstosse zu geben...

    static void Main(string[] args)
    {
        // gebe deine variablen lesbare namen, das hilft wenn du spaeter dein code anschaust.
        double height = 0; /*Dezimalzahl für Größe in m*/
        double weight = 0; /*Dezimalzahl für Gewicht in kg*/
        double bmi; /*Dezimalzahl für Ergebnis*/

        Console.WriteLine("Gib deine Größe ein: ");
        string eingabeHeight = Console.ReadLine();

        while (height < 1)
        {
            if (!double.TryParse(eingabeHeight, out height)) // tryparse is besser, da ein user nicht numerischen zeichen eingeben koennte
            {
                Console.WriteLine("Invalide Eingabe, bitte gib deine Größe erneut ein: ");
                eingabeHeight = Console.ReadLine();
            }
        }

        Console.WriteLine("Gib dein Gewicht ein: ");
        string eingabeWeight = Console.ReadLine();

        while (weight < 1)
        {
            if (!double.TryParse(eingabeWeight, out weight)) // tryparse is besser, da ein user nicht numerischen zeichen eingeben koennte
            {
                Console.WriteLine("Invalide Eingabe, bitte gib dein Gewicht erneut ein: ");
                eingabeWeight = Console.ReadLine();
            }
        }

        bmi = weight / (height * height);

        Console.WriteLine("Ergebnis: " + bmi);

        if (bmi >= 25.00)
        {
            Console.WriteLine("ÜBERGEWICHTIG!");
        }
        else if (bmi >= 18.50)
        {
            Console.WriteLine("NORMALGEWICHTIG!");
        }
        else if (bmi <= 18.49)
        {
            Console.WriteLine("UNTERGEWICHTIG!");
        }
        else
        {
            Console.WriteLine("FEHLER BEI DER DATENVERARBEITUNG!");
        }

        Console.ReadLine();
    }
0
Woolli  09.10.2014, 13:55
@Woolli

Achja, diese block sollte auch ueberdacht werden:

if (bmi >= 25.00)
        {
            Console.WriteLine("ÜBERGEWICHTIG!");
        }
        else if (bmi >= 18.50)
        {
            Console.WriteLine("NORMALGEWICHTIG!");
        }
        else if (bmi <= 18.49)
        {
            Console.WriteLine("UNTERGEWICHTIG!");
        }

wass ist wenn der bim = 18.493 ist?... vielleicht runden aus 2 decimal stellen? oder doch ohne =??

0
dancingqueen204 
Fragesteller
 09.10.2014, 17:54
@Woolli

Danke sehr für die mühevolle Antwort! Sind einige sehr hilfreiche Tipps für mein späteres Programmierleben dabei gewesen! :)

0

du könntest uns deinen geben und wir sagen dann ob ev. fehler drin sind