BMI - inna zmienna

0

Witam.
Moim problemem jest to, że muszę zmienić zmienne tak aby wyświetlany wynik pokazywał się z max. dwiema cyframi po przecinku.
Kolejny problem to przerobienie działania** (masa/(wzrost*wzrost))**. W takiej formie aby obliczenie się powiodło należy wprowadzić wzrost w METRACH. Ja chciałbym aby to działanie przerobić tak aby dawało taki sam wynik ale do obliczenia należałoby wprowadzić wzrost w CENTYMETRACH.

 private void button1_Click(object sender, EventArgs e)
        {
            short wzrost = 0;
            short masa = 0;
            int wynik = 0;
            string bmi;
            wzrost = Convert.ToInt16(textBox12.Text);
            masa = Convert.ToInt16(textBox2.Text);

            wynik = (masa / (wzrost * wzrost));
            textBox4.Text = Convert.ToString(wynik);

            if (wynik < 16.0)
            {
                bmi = "III Stopień Niedowagi!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik > 16.0 && wynik <= 16.9)
            {
                bmi = "II Stopień Niedowagi!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 17.0 && wynik <= 18.9)
            {
                bmi = "I Stopień Niedowagi!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 19.0 && wynik <= 24.9)
            {
                bmi = "W normie.";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 25.0 && wynik <= 29.9)
            {
                bmi = "Nadwaga!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 30.0 && wynik <= 34.9)
            {
                bmi = "I Stopień Otyłości!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 35.0 && wynik <= 39.9)
            {
                bmi = "II Stopień Otyłości!";
                textBox5.Text = Convert.ToString(bmi);
            }
            else if (wynik >= 40.0)
            {
                bmi = "III Stopień Otyłości!";
                textBox5.Text = Convert.ToString(bmi);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 18; i <= 90; i++)
            {
                listBox1.Items.Add(i);
            }
        }

        private void pPMToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double wzrost = 0;
            double masa = 0;
            double wiek = 0;
            double PPM = 0;
            wzrost = Convert.ToSingle(textBox12.Text);
            masa = Convert.ToSingle(textBox2.Text);
            wiek = Convert.ToSingle(listBox1.Text);
            if (radioButton1.Checked)
            {

                PPM = 66.47 + (13.75 * masa) + (5 * wzrost) - (6.75 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
            if (radioButton2.Checked)
            {
                PPM = 665.09 + (9.56 * masa) + (1.85 * wzrost) - (4.67 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
        }

        private void cPMToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double wzrost = 0;
            double masa = 0;
            double wiek = 0;
            double PPM = 0;
            double CPM = 0;
            double k = 0;
            wzrost = Convert.ToSingle(textBox12.Text);
            masa = Convert.ToSingle(textBox2.Text);
            wiek = Convert.ToSingle(listBox1.Text);
            k = Convert.ToSingle(textBox11.Text);
            if (radioButton1.Checked)
            {

                PPM = 66.47 + (13.75 * masa) + (5 * wzrost) - (6.75 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
            if (radioButton2.Checked)
            {
                PPM = 665.09 + (9.56 * masa) + (1.85 * wzrost) - (4.67 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
            CPM = k * PPM;
            textBox9.Text = Convert.ToString(CPM);
        }

        private void masaMśtłToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double wzrost = 0;
            double masa = 0;
            double wiek = 0;
            double PPM = 0;
            double CPM = 0;
            double k = 0;
            double PAL = 0;
            wzrost = Convert.ToSingle(textBox12.Text);
            masa = Convert.ToSingle(textBox2.Text);
            wiek = Convert.ToSingle(listBox1.Text);
            k = Convert.ToSingle(textBox11.Text);
            if (radioButton1.Checked)
            {

                PPM = 66.47 + (13.75 * masa) + (5 * wzrost) - (6.75 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
            if (radioButton2.Checked)
            {
                PPM = 665.09 + (9.56 * masa) + (1.85 * wzrost) - (4.67 * wiek);
                textBox8.Text = Convert.ToString(PPM);
            }
            CPM = k * PPM;
            textBox9.Text = Convert.ToString(CPM);
            PAL = CPM / PPM;
            textBox10.Text = Convert.ToString(PAL);
        }

        private void masaMśtłToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            double masa = 0;
            double zapm = 0;
            double zapk = 0;

            masa = Convert.ToSingle(textBox2.Text);
            if (radioButton1.Checked)
            {
                zapm = masa * 24;
                textBox6.Text = Convert.ToString(zapm);
            }
            if (radioButton2.Checked)
            {
                zapk = masa * 22;
                textBox7.Text = Convert.ToString(zapk);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            textBox3.Text = Convert.ToString(DateTime.Now);
        }

     
    }
}
 
0

Nie musisz zmieniać zmiennych, musisz zmienić sposób wyświetlania, a to co innego.

Zmień:

textBox4.Text = Convert.ToString(wynik);

na przykład na:

textBox4.Text = string.Format("{0:F2}", wynik);

Co do centymetrów, to najprościej będzie:

wzrost = Convert.ToInt16(textBox12.Text);

zmienić na:

wzrost = Convert.ToInt16(textBox12.Text) / 100;

I już, wpisujesz w centymetrach, a on sobie to sam przerabia na metry i dalej liczy.

BTW, kod typu:

bmi = "III Stopień Niedowagi!";
textBox5.Text = Convert.ToString(bmi);

Jest nadmiarowy, bo bmi już jest typu string, stąd wystarczy: textBox5.Text = bmi; albo nawet bezpośrednio textBox5.Text = "III Stopień Niedowagi!". Spróbuj też unikać nazywania kontrolek tak jak masz teraz - textBox1, textBox2 i tak dalej, możesz nazywać je po swojemu, bo można się potem łatwo pogubić.

Możesz sobie też oszczędzić trochę pisania używając funkcji ToString(), na przykład, textBox1.Text = zmienna.ToString() zamiast textBox1.Text = Convert.ToString(zmienna);.

0

Do pierwszego: użyj Math.Round na wyniku

0

Zmieniłem to co mi poradziłeś, ale niestety nadal źle liczy BMI.
Podając WZROST w CM: 168 i MASĘ w KG: 58, BMI wylicza mi na 58,00 a przed modyfikacjami liczyło 20,54.

Potrzebuję również zastosować ilość cyfr po przecinku do reszty kodu a mianowicie tam gdzie aby obliczyć PPM, CMP, PAL i Min. zapotrzebowanie trzeba kliknąć w przycisk MENU.

Ktos napisał(a):

Nie musisz zmieniać zmiennych, musisz zmienić sposób wyświetlania, a to co innego.

Zmień:

textBox4.Text = Convert.ToString(wynik);

na przykład na:

textBox4.Text = string.Format("{0:F2}", wynik);

Co do centymetrów, to najprościej będzie:

wzrost = Convert.ToInt16(textBox12.Text);

zmienić na:

wzrost = Convert.ToInt16(textBox12.Text) / 100;

I już, wpisujesz w centymetrach, a on sobie to sam przerabia na metry i dalej liczy.

BTW, kod typu:

bmi = "III Stopień Niedowagi!";
textBox5.Text = Convert.ToString(bmi);

Jest nadmiarowy, bo bmi już jest typu string, stąd wystarczy: textBox5.Text = bmi; albo nawet bezpośrednio textBox5.Text = "III Stopień Niedowagi!". Spróbuj też unikać nazywania kontrolek tak jak masz teraz - textBox1, textBox2 i tak dalej, możesz nazywać je po swojemu, bo można się potem łatwo pogubić.

Możesz sobie też oszczędzić trochę pisania używając funkcji ToString(), na przykład, textBox1.Text = zmienna.ToString() zamiast textBox1.Text = Convert.ToString(zmienna);.

0
short wzrost = 0;
short masa = 0;
int wynik = 0;

Zmień te zmienne na typ double, bo obecnie liczysz tylko na liczbach całkowitych.

0

Byłoby lepiej, gdybyś oddzielił kod obliczeń od kodu prezentacji (czyli pobierania i wyświetlania danych użytkownikowi). Łatwiej byłoby naprawić błędy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1