Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
4 / 4 / 2
Регистрация: 10.08.2015
Сообщений: 59

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

10.08.2015, 14:13. Показов 1536. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первый язык, изучаю полтора месяца и захотелось написать программу которая вычисляет идеальный вес...
Нашел формулу расчета идеального веса, и все окей, кроме одной ошибки...

Когда проходит по 2 case:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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.....) будет правильно отображен и напишет:
C#
1
2
3
4
5
 if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
                                {
                                    Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
                                    break;
                                }
В тоже время если результат выходит за пределы 25, то все равно показывает сообщение в пределах от 18.5 до 25...

Возможно стоит поставить вместо || другую операцию? Но что бы я не ставил, результат все равно не такой как нужно... Если поставлю && и укажу 79 килограм и рост 1,6, оно выдаст правильный результат только после 4 запросов какой вес и какой рост...

Вот программа целиком.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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;
        }
    }
}
Есть идеи где я сделал что то не то?)))
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2015, 14:13
Ответы с готовыми решениями:

Что-то не так с циклом
string main_array = System.IO.File.ReadAllLines(&quot;../../TextFile1.txt&quot;); string subarray = main_array.Split(' '); ...

Что не так с циклом?
что не так с циклом..вдыает ошибку? Program Funkcia; Var x,s,k,n,a:real; Begin X:=1.28; S:=0; For k:=1 to 5 do ...

что не так с этим циклом
var a = {a:3,b:6,c:9}; var keys = Object.keys(a); var i = 0; while(i&lt;keys.length){ if(a] == 3) {continue;} else...

4
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
10.08.2015, 14:23
Лучший ответ Сообщение было отмечено Dipe как решение

Решение

Dipe,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            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двищений ризик для здоров’я.");
1
4 / 4 / 2
Регистрация: 10.08.2015
Сообщений: 59
10.08.2015, 14:56  [ТС]
Спасибо) Помогло. Плюсик в карму

Добавлено через 28 минут
А все же, что не так с этим кодом? Вроде бы должно работать.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
                            }
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
10.08.2015, 15:23
Цитата Сообщение от Dipe Посмотреть сообщение
А все же, что не так с этим кодом? Вроде бы должно работать.
Вы разве не понимаете, что каждый раз вызывая метод GetVaga2 вы заставляете пользователя вводить данные снова и снова?
0
4 / 4 / 2
Регистрация: 10.08.2015
Сообщений: 59
10.08.2015, 23:43  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Вы разве не понимаете, что каждый раз вызывая метод GetVaga2 вы заставляете пользователя вводить данные снова и снова?
Только учусь...
Но все равно спасибо

Добавлено через 7 часов 12 минут
Немного изменил код с:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;
        }
На:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public double GetVaga2()
        {
            //ІМТ (індекс маси тіла) = маса тіла в кг / (зріст в м * зріст в м)
            Console.WriteLine("Оберiть свою стать - man/woman");
            gender = Convert.ToString(Console.ReadLine());
            Console.Write("Введiть свою вагу в кiлограмах: ");
            vaga = Convert.ToDouble(Console.ReadLine());
            Console.Write("Введiть свiй зрiст в метрах: ");
            zrist = Convert.ToDouble(Console.ReadLine());
            ideal = vaga / (zrist * zrist);
 
            switch (gender)
            {
                case "man":
                    {
                        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;
                    }
                case "woman":
                    {
                        if (zrist < 1.54)
                        {
                            ideal = ideal * 0.9;
                        }
                        else if ((zrist >= 1.54) && (zrist <= 1.74))
                        {
                            ideal = ideal * 1;
                        }
                        else
                        {
                            ideal = ideal * 1.1;
                        }
                        Console.WriteLine();
                        Console.WriteLine("Ваш iндекс маси тiла: {0}", ideal);
                        return ideal;
                    }
            }
        }
Выдает ошибку:
Ошибка 1 "ConsoleApplication1.Vaga.GetVaga2() ": не все ветви кода возвращают значение

Как исправить?

Добавлено через 19 минут
Вопрос отпал, нашел другой путь...
Занести по отдельности в public double GetVaga3() и public double GetVaga2() и в Main создал для одного case "2", для другого case "3"...
Если есть другие способы, буду рад послушать ваши замечания
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2015, 23:43
Помогаю со студенческими работами здесь

Что не так у меня с циклом
Привет, подскажите что не так с циклом? Почему парсится только 1000 и не осуществляется переход на седующий пакет (2000) вроде...

Обьясните, что я делаю не так с циклом while?
Здравствуйте. Простая задача - предложить пользователю ввести число от 1 до 100, проверить действительно ли оно в диапазоне от одного до...

Подскажите что не так с этим циклом
#include&lt;stdio.h&gt; int main(void) { int a; char b; for (a = 1; a &lt; 20; a++) { printf(&quot;enter a letter &quot;); ...

Правильно ли? Что не так с оператором и циклом?
Я потерялась и запуталась,почему не пишет попала ли я иль нет? &quot;Для десяти выстрелов, координаты которых задаются с клавиатуры, написать...

K501u (k501ux rev 2.0) включается на секунду и так циклом
ринесли аппарат после чистки, сгоревший мульт и шим дежурки, заменил всё мульт прошил, в результате получил циклическое включение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru