Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
2 / 2 / 1
Регистрация: 22.06.2016
Сообщений: 191
1

Вложенные условия

06.11.2018, 21:45. Показов 4314. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, начал изучение JS. Решаю вот такую задачу.
Введите 3 числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислите его площадь. Выведите длины сторон и площадь в порядке возрастания значений.
И тут возник вопрос с вложенностью условие в условие. Как лучше писать, если условий много?
PHP/HTML
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
<head>
    <meta charset="utf-8">
</head>
 
<body>
<h1>Задание</h1>
<p>Введите 3 числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислите его площадь.<br>
  Выведите длины сторон и площадь в порядке возрастания значений </p>
 
<script>
 
    var a = prompt (" a = ", a);
    var b = prompt (" b = ", b);
    var c = prompt (" c = ", c);
    var p;
    var mx;
    var mn;
    var sr;
        if  (  Math.abs(( a - b )>= c) || (a + b <= c)  )
        { alert("Это не треугольник");}
        
            if (a > b) { mx = a;} else mx = b;
            if (c > mx) { mx = c;} 
            if (a < b) { mn = a;} else mn = b;
            if (c < mn) { mn = c;} else mn = c;
            sr = a + b + c - mx - mn;
    if ( Math.pow(mn,2)+Math.pow(sr,2) < Math.pow(mx,2) )
        { alert(" Это тупоугольный треугольник");
          alert(" Стороны в порядке возрастания");
           alert(" 1 = " +mn);
            alert(" 2 = " +sr);
             alert(" 3 = " +mx);
                p = (a + b + c)/2;
                s = Math.sqrt( p * (p - a) * (p - b) * (p - c));
                alert(" S = "+s);
                }
     else
    alert(" Это не тупоугольный треугольник");
                
 
</script>
 
 
</body>
Javascript
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
    var a = prompt (" a = ", a);
    var b = prompt (" b = ", b);
    var c = prompt (" c = ", c);
    var p;
    var mx;
    var mn;
    var sr;
        if  (  Math.abs(( a - b )>= c) || (a + b <= c)  )
        { alert("Это не треугольник");}
        
            if (a > b) { mx = a;} else mx = b;
            if (c > mx) { mx = c;} 
            if (a < b) { mn = a;} else mn = b;
            if (c < mn) { mn = c;} else mn = c;
            sr = a + b + c - mx - mn;
    if ( Math.pow(mn,2)+Math.pow(sr,2) < Math.pow(mx,2) )
        { alert(" Это тупоугольный треугольник");
          alert(" Стороны в порядке возрастания" +mn +sr +mx);
           alert(" 1 = " +mn);
            alert(" 2 = " +mn);
             alert(" 3 = " +mn);
                p = (a + b + c)/2;
                s = Math.sqrt( p * (p - a) * (p - b) * (p - c));
                alert(" S = "+s);
                }
     else
    alert(" Это не тупоугольный треугольник");
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2018, 21:45
Ответы с готовыми решениями:

Вложенные условия
Здравствуйте. Проблема такая. procedure TForm1.Button8Click(Sender: TObject); var NaF, KoF, RezF...

Вложенные условия ( if-else )
В уроке прописано следующее: if (x &gt; 0) { if (y &gt; 0) // x &gt; 0 , y &gt; 0 { cout...

Вложенные условия
Какой из предложенных вариантов проверки истинности лучше (в каких ситуациях): вложенная инструкция...

Вложенные циклы и условия
здравствуйте. есть скрипт, в котором один цикл должен быть вложен в другой, а в нём таже...

9
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
06.11.2018, 23:06 2
Здравствуйте.
Непонятно, куда запихивать площадь. Тут всё для тупоугольного равнобедренного:
PHP/HTML
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
<!doctype html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <script>
        triangle();
 
        function triangle() {
            let sides = [];
            for (let i = 1; i <= 3; ++i) {
                sides[i] = +prompt("Введите сторону №" + i);
            }
            sides.sort();
            if (sides[0] <= 0 || sides[1] <= 0 || sides[2] >= sides[0] + sides[1]) {
                alert("Это не треугольник.");
                return;
            }
            if (sides[0] != sides[1] || (Math.pow(sides[0], 2) + Math.pow(sides[1], 2) >= Math.pow(sides[2], 2)))
                return;
 
            for (let i = 0; i < 3; ++i)
                console.log(sides[i]);
 
            let p = (sides[0] + sides[1] + sides[2]) / 2,
                s = Math.sqrt(p * (p - sides[0]) * (p - sides[1]) * (p - sides[2]));
 
            console.log("S=" + s);
        }
    </script>
</body>
</html>
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,987
Записей в блоге: 43
07.11.2018, 04:38 3
Dirt2846, Зачем же столько диалоговых окон? В принципе можно вообще без них обойтись, но уж если и с ними, то достаточно одного для ввода сторон (например через пробел) и одного для вывода результатов. Как-то наверное
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <button onclick="process();">Process</button>
    <script>
 
        function process()
        {
            let a = prompt("Введите длины сторон треугольника, разделяя их пробелами")
                .split(" ").map(parseFloat).sort((x, y) => x - y);
            let getSquare = (base, thigh) => .25 * base * Math.sqrt(4 * thigh ** 2 - base ** 2);
            let result = a[0] == a[1] && 2 * a[0] ** 2 < a[2] ** 2 && a[0] + a[1] > a[2] 
                ? `Площадь треугольника - ${getSquare(Math.max(...a), Math.min(...a))}`
                : "Заданные стороны не могут образовать равнобедренный тупоугольный треугольник";
            alert(`${result}
Длины сторон - ${a.sort((x, y) => x - y)}`);
        }
    </script>
Правда не тестировал, но по идее должно правильно считать. ))
1
2 / 2 / 1
Регистрация: 22.06.2016
Сообщений: 191
07.11.2018, 11:13  [ТС] 4
diadiavova, Просто функций я еще не знаю и хотел
сделать это через логические операторы. Я писал задание из того, что дали из нескольких лекций)
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
07.11.2018, 16:30 5
Цитата Сообщение от Dirt2846 Посмотреть сообщение
Просто функций я еще не знаю
Без термина "функция" невозможно вычислить площадь треугольника в принципе. На ассемблере вычислять собрались?
0
2 / 2 / 1
Регистрация: 22.06.2016
Сообщений: 191
08.11.2018, 19:43  [ТС] 6
amr-now, Я бы рад сделать через функцию, но нужно именно через условия. Переделал код, но в 21 строке жалуется на текст после Else, не знаю как пока еще сократить
Javascript
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
<script>
 
  var a = +prompt("Введите число a");
      var b = +prompt("Введите число b");
      var c = +prompt("Введите число c");
      var m1;
      var m2;
      var m3;
      
            if  (   ( a < b + c) && ( b < a + c) && ( c < a + b)  ) // Проверка на  треугольник  
                        {    
                                if ( a == b ) 
                                { m1 = a;
                                  m2 = c;   
                                } else 
                                    {
                                    if ( c == a )
                                        {
                                        m1 = c;
                                        m2 = b;         
                                        }
                                        else
                                        if ( b == c){
                                        { m1 = b;
                                          m2 = c;
                                                }
                                                else { alert (" Не равнобедренный треугольник "); }
                                                exit;
                                        }
                                            
                                    
                                    }
                            if ( Math.pow(m1,2)+Math.pow(m1,2) < Math.pow(m2,2) ) // Проверка тупоугольный ли треугольник
                                {
                                var p =  (m1 + m1 + m2) / 2;   
                                var s = Math.sqrt(   p * (p - m1) * (p - m1) * (p - m2)   );
                                alert( " a = " + m1 +" " + " b = " + m1 + " " + " c = " +m2 + " " + " S = " + s );
                                }
                                    else { alert(" треугольник не тупоугольный "); }
                                                    
                                    
                                
                        }   
            else 
            alert('Треугольник не удовлетворяет условию задачи');
</script>
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
08.11.2018, 20:03 7
Dirt2846, массивы изучали?
На массивах уже достаточно, чтобы скрипт был вменяемым.

Вообще, мне кажется, одну неделю можно потратить, чтобы изучить конструкцию функций и массивов, чтобы потом не писать совсем уж откровенный отстой.
0
2 / 2 / 1
Регистрация: 22.06.2016
Сообщений: 191
08.11.2018, 20:38  [ТС] 8
amr-now, Я понимаю, что мой код очень плох и так писать нельзя, но преподаватель так заставил сделать, сказав предположим вы не знаете массивы и функции.
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
08.11.2018, 22:16 9
Лучший ответ Сообщение было отмечено Dirt2846 как решение

Решение

Dirt2846, пожалуйста.
Без конструкции функции, массивов. Всё, как в лучших домах Силиконовой долины.
PHP/HTML
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
<!doctype html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <script>
        let a = +prompt("a = "),
            b = +prompt("b = "),
            c = +prompt("c = ");
        if (!isNaN(a) || !isNaN(b) || !isNaN(c)) {
            // Сортировка
            let tmp;
            if (a > b) {
                tmp = b;
                b = a;
                a = tmp;
            }
            if (b > c) {
                tmp = c;
                c = b;
                b = tmp;
            }
            if (a > b) {
                tmp = b;
                b = a;
                a = tmp;
            }
            // Треугольник ли
            if (a <= 0 || b <= 0 || c >= a + b) {
                alert("Это не треугольник.");
            }
            else if (a != b || (Math.pow(a, 2) + Math.pow(b, 2) >= Math.pow(c, 2))) {
                alert("Это не равнобедренный тупоугольный треугольник.");
            }
            else { // Равнобедренный тупоугольный треугольник
                console.log(a);
                console.log(b);
                console.log(c);
 
                let p = (a + b + c) / 2,
                    s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
 
                console.log("S=" + s);
            }
        }
    </script>
</body>
</html>
2
2 / 2 / 1
Регистрация: 22.06.2016
Сообщений: 191
09.11.2018, 00:47  [ТС] 10
amr-now, Ахахах, спасибо вам большое за помощь и терпение
1
09.11.2018, 00:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2018, 00:47
Помогаю со студенческими работами здесь

Странно работают вложенные условия в bat-файле
Доброго времени суток! Вот решил обновить/подтянуть свои знание в области командной строки...

Внутри проверки условия не производится ещё одна проверка условия
Как задумывалось - при нажатии на джойстик просто должны были остановится движки, но если при...

Вложенные классы и статические вложенные классы - нужен пример
Добрый вечер, форумчане! :) Поделитесь примерами практических задач, при решении которых полезно...

Описать оператор выбора, в котором при истинности второго условия выполняются действия и третьего условия тоже
помогите пожалуйста ответить на вопрос 2. Описать оператор выбора, в котором при истинности...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru