BMI Rechner in C#?
Hey liebe Programmier-Kumpels! Hab neulich in der Schule einige der Grundlagen von C# gelernt! Wirklich nichts Komplexes! (if // Textausgabe in der Konsole // Variablen und diverse Typen dort // Grundrechnungsarten) Ich bin also noch ein blutiger Anfänger! Doch mich interessiert das Programmieren und ich will jetzt zu Hause einfach aus Neugier einen BMI-Rechner programmieren, in dem ich das Gelernte verarbeite! Also ein ganz einfaches Programm, in das man Größe und Gewicht einträgt und das Programm dann die Kommazahl ausspuckt und gleich bestimmt in welcher Gewichtsklasse sich der Kandidat bewegt! Könnte mir wer von euch einen optimierten Programmcode anfertigen, damit ich meinen damit vergleichen kann? Wäre sehr lieb, dankesehr! :)
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.
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...
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>
wie gesagt verbesserungsfähig ... weil ich teilweise fixe größen verwendet habe ... du könntest das grid auch durch n dockpanel ersetzten
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
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();
}
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 =??
Danke sehr für die mühevolle Antwort! Sind einige sehr hilfreiche Tipps für mein späteres Programmierleben dabei gewesen! :)
du könntest uns deinen geben und wir sagen dann ob ev. fehler drin sind