Kalkulator BMI — tutorial (C#)

Cel: praca z typem double, formatowanie wyjścia oraz tworzenie metod pomocniczych do parsowania, obliczeń i kategoryzacji.

Plan

  1. Utwórz projekt: dotnet new console -n BmiCalculator.
  2. Zamień zawartość Program.cs na kod poniżej.
  3. Uruchom: dotnet run i przetestuj różne dane.

Przykładowy kod (Program.cs)

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}");
    }
}
  

Zadania do samodzielnej pracy

Zadanie 1: Rozszerz program o pętlę pozwalającą wykonywać kolejne obliczenia bez ponownego uruchamiania aplikacji (opcje: oblicz ponownie, zakończ).
Zadanie 2: Dodaj walidację i ponawianie zapytań jeśli użytkownik poda nieprawidłowe wartości (użyj ParseDouble w pętli).
Zadanie 3: Zapisuj wyniki (data, masa, wzrost, BMI) do pliku tekstowego i umożliw wyświetlenie historii przy starcie programu.

Powrót do listy tutoriali