Что не так с циклом if-else if? - C#

Узнай цену своей работы

Формулировка задачи:

Первый язык, изучаю полтора месяца и захотелось написать программу которая вычисляет идеальный вес... Нашел формулу расчета идеального веса, и все окей, кроме одной ошибки... Когда проходит по 2 case:
case "2":
                            {
 
                                Vaga IMT = new Vaga();
 
                                if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
                                {
                                    Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
                                    break;
                                }
                                else if ((IMT.GetVaga2() >= 25) || (IMT.GetVaga2() < 30))
                                {
                                    Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
                                }
                                else if ((IMT.GetVaga2() >= 30) || (IMT.GetVaga2() < 35))
                                {
                                    Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
                                }
                                else if ((IMT.GetVaga2() >= 35) || (IMT.GetVaga2() < 40))
                                {
                                    Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
                                }
                                else
                                {
                                    Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");
                                }
                                break;
                            }
Если ввести к примеру 57 килограм и рост 1,66, то результат(18,61.....) будет правильно отображен и напишет:
 if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
                                {
                                    Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
                                    break;
                                }
В тоже время если результат выходит за пределы 25, то все равно показывает сообщение в пределах от 18.5 до 25... Возможно стоит поставить вместо || другую операцию? Но что бы я не ставил, результат все равно не такой как нужно... Если поставлю && и укажу 79 килограм и рост 1,6, оно выдаст правильный результат только после 4 запросов какой вес и какой рост... Вот программа целиком.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
                    Console.WriteLine();
                    Console.Write("Оберiть варiант за яким будем визначати вашу iдеальну вагу:\n1. Формула ЮЗ - Годлевського\n2. Iндекс маси тiла\n" +
                                    "Ваш вибiр: ");
                    string variants = Convert.ToString(Console.ReadLine()); //Convert.ToString(Console.ReadLine());
               
                    switch (variants)
                    {
                        case "1":
                            {
                                Vaga YE = new Vaga();
                                YE.GetVag();
                                break;
                            }
                        case "2":
                            {
 
                                Vaga IMT = new Vaga();
 
                                if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
                                {
                                    Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
                                    break;
                                }
                                else if ((IMT.GetVaga2() >= 25) || (IMT.GetVaga2() < 30))
                                {
                                    Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
                                }
                                else if ((IMT.GetVaga2() >= 30) || (IMT.GetVaga2() < 35))
                                {
                                    Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
                                }
                                else if ((IMT.GetVaga2() >= 35) || (IMT.GetVaga2() < 40))
                                {
                                    Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
                                }
                                else
                                {
                                    Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");
                                }
                                break;
                            }
                            
                    }
                    Console.ReadLine();
                    
        }
    }
 
    class Vaga
    {
 
        public double zrist;
        public double vaga;
        public double vik;
        public double ideal;
 
        public double GetVag()
        {
            Console.WriteLine();
            Console.Write("Введiть свiй зрiст в сантиментрах: ");
            zrist = Convert.ToDouble(Console.ReadLine());
            Console.Write("Введiть свiй вiк: ");
            vik = Convert.ToDouble(Console.ReadLine());
            ideal = ((zrist - 100) + (vik / 10)) - 2 * ((zrist - 100) / 10);
            Console.WriteLine("Ваша iдеальна вага складає: {0} кг.", ideal);
            return ideal;
        }
        public double GetVaga2()
        {
            //ІМТ (індекс маси тіла) = маса тіла в кг / (зріст в м * зріст в м)
            Console.WriteLine();
            Console.Write("Введiть свою вагу в кiлограмах: ");
            vaga = Convert.ToDouble(Console.ReadLine());
            Console.Write("Введiть свiй зрiст в метрах: ");
            zrist = Convert.ToDouble(Console.ReadLine());
            ideal = vaga / (zrist * zrist);
            if (zrist < 1.68)
            {
                ideal = ideal * 0.9;
            }
            else if ((zrist >= 1.68) && (zrist < 1.88))
            {
                ideal = ideal * 1;
            }
            else
            {
                ideal = ideal * 1.1;
            }
            Console.WriteLine();
            Console.WriteLine("Ваш iндекс маси тiла: {0}", ideal);
            return ideal;
        }
    }
}
Есть идеи где я сделал что то не то?)))

Решение задачи: «Что не так с циклом if-else if?»

textual
Листинг программы
            Vaga IMT = new Vaga();
            var weight = IMT.GetVaga2();
 
            if (weight < 25)
                Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
            else 
            if (weight < 30)
                Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
            else 
            if (weight < 35)
                Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
            else
            if (weight < 40)
                Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
            else
                Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5