Cel: praca z typem double, formatowanie wyjścia oraz tworzenie metod pomocniczych do parsowania, obliczeń i kategoryzacji.
dotnet new console -n BmiCalculator.Program.cs na kod poniżej.dotnet run i przetestuj różne dane.Skopiuj do Program.cs.
// Program.cs
using System;
using System.Globalization;
class Program
{
static double ParseDouble(string s)
{
if (string.IsNullOrWhiteSpace(s)) return double.NaN;
s = s.Trim().Replace(',', '.');
return double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var v) ? v : double.NaN;
}
static double CalculateBMI(double weightKg, double heightCm)
{
var m = heightCm / 100.0;
if (m <= 0) return double.NaN;
return weightKg / (m * m);
}
static (string label, string advice) BmiCategory(double bmi)
{
if (double.IsNaN(bmi) || double.IsInfinity(bmi)) return ("Nieprawidłowy wynik", string.Empty);
if (bmi < 18.5) return ("Niedożywienie (niedowaga)", "Skonsultuj dietę z dietetykiem.");
if (bmi < 25) return ("Waga prawidłowa", "Utrzymuj aktywność fizyczną i zbilansowaną dietę.");
if (bmi < 30) return ("Nadwaga", "Zwiększ aktywność i kontroluj kalorie.");
return ("Otyłość", "Rozważ konsultację lekarską i dietetyczną.");
}
static string FormatNumber(double value, int decimals = 1)
{
if (double.IsNaN(value) || double.IsInfinity(value)) return "-";
return value.ToString("F" + decimals, CultureInfo.InvariantCulture);
}
static void Main()
{
Console.WriteLine("Kalkulator BMI (C#)");
Console.Write("Podaj masę ciała (kg): ");
var w = Console.ReadLine();
Console.Write("Podaj wzrost (cm): ");
var h = Console.ReadLine();
var weight = ParseDouble(w);
var height = ParseDouble(h);
if (double.IsNaN(weight) || double.IsNaN(height) || weight <= 0 || height <= 0)
{
Console.WriteLine("Nieprawidłowe dane. Podaj dodatnie liczby dla masy i wzrostu.");
return;
}
var bmi = CalculateBMI(weight, height);
var cat = BmiCategory(bmi);
Console.WriteLine();
Console.WriteLine($"Masa: {FormatNumber(weight, 1)} kg, Wzrost: {FormatNumber(height, 1)} cm");
Console.WriteLine($"BMI: {FormatNumber(bmi, 1)}");
Console.WriteLine($"Kategoria: {cat.label}");
Console.WriteLine($"Porada: {cat.advice}");
}
}