Пока петля идя назад к местам где она не должна. (swift)

У меня есть проблема с моим кодом, который, когда «p» или «q» отсутствует, Xcode решает ее снова и снова, и я даже получаю результаты, но он продолжает это делать.

Введите описание изображения здесь
Чего мне не хватает?

Смысл приложения в том, что оно вычисляет недостающие стороны треугольника.
Вот так:

Введите описание изображения здесь

    import UIKit
import Darwin


var i = 0
var ch = ""

var ac = false
var bc = false
var cc = false
var pc = false
var qc = false
var mc = false


var a: Double = 0
var b: Double = 0
var c: Double = 0
var p: Double = 0
var q: Double = 0
var m: Double = 0

a
b = 8
c
p
q = 5
m

if (a > 0) {ac = true}
if (b > 0) {bc = true}
if (c > 0) {cc = true}
if (p > 0) {pc = true}
if (q > 0) {qc = true}
if (m > 0) {mc = true}

//sqrt(p)*b/sqrt(q)

while (ac == false && bc == false && cc == false && pc == false && qc == false && mc == false || i < 20){

//------------------------------------------ a
if (ac == false){
/*
 > a = sqrt(p*c)
 > a = sqrt(c) - sqrt(b)
 > a = sqrt(m) + sqrt(p)
*/
    if(pc == true && cc == true){
        a = sqrt(c*p)
        ac = true
        ch = ch + "a.1; "
    } else if (cc == true && bc == true){
        a = sqrt(c) - sqrt(b)
        ac = true
        ch = ch + "a.2; "
    } else if (mc == true && pc == true){
        a = sqrt(m) + sqrt(p)
        ac = true
        ch = ch + "a.3; "
    }


/*    else if (b>0 && p>0 && q>0){
        a = sqrt(p)*b/sqrt(q)
    }*/
}
//------------------------------------------- b
if (bc == false){
/*
 > b = sqrt(q*c)
 > b = sqrt(c) - sqrt(a)
 > b = sqrt(m) + sqrt(q)
*/
    if (qc == true && cc == true){
        b = sqrt(q * c)
        bc = true
        ch = ch + "b.1; "
    } else if (cc == true && ac == true){
        b = sqrt(c) - sqrt(a)
        bc = true
        ch = ch + "b.2; "
    } else if (cc == true && qc == true){
        b = sqrt(m) + sqrt(q)
        bc = true
        ch = ch + "b.3; "
    }
}
//----------------------------------------------- c
if (cc == false){
/*
 > c = q + p
 > c = sqrt(a) + sqrt(b)
 > c = pow(a, 2) / p
 > c = pow(b, 2) / q
*/
    if (pc == true && qc == true){
        c = p + q
        cc = true
        ch = ch + "c.1; "
    } else if (ac == true && bc == true){
        c = sqrt(a) + sqrt(b)
        cc = true
        ch = ch + "c.2; "
    } else if (ac == true && pc == true){
        c = pow(a, 2) / p
        cc = true
        ch = ch + "c.3; "
    } else if (bc == true && qc == true){
        c = pow(b, 2) / q
        cc = true
        ch = ch + "c.4; "
    }
}
//--------------------------------------------- q
if (qc == false){
/*
 > q = c - p
 > q = sqrt(b) - sqrt(m)
 > q = pow(b, 2) / c
*/
    if (pc == true && cc == true){
        q = c - p
        qc == true
        ch = ch + "q.1; "
        qc == true
    } else if (bc == true && mc == true){
        q = sqrt(b) - sqrt(m)
        qc = true
        ch = ch + "q.2; "
    }else if (bc == true && cc == true){
        q = pow(b, 2) / c
        qc = true
        ch = ch + "q.3; "
    }
}
//------------------------------------------------ p
if (pc == false){
/*
 > p = c - q
 > p = sqrt(a) - sqrt(m)
 > p = pow(a, 2) / c
*/
    if (qc == true && cc == true){
        p = c - q
        pc == true
        ch = ch + "p.1; "
    } else if (ac == true && mc == true){
        p = sqrt(a) - sqrt(m)
        pc == true
        ch = ch + "p.2; "
    } else if (ac == true && cc == true){
        p = pow(a, 2) / c
        pc == true
        ch = ch + "p.3; "
    }
}
//------------------------------------------------- m
if (mc == false){
/*
 > m = p * q
 > m = sqrt(a) - sqrt(p)
 > m = sqrt(b) - sqrt(q)
*/
    if (pc == true && qc == true){
        m = p * q
        mc = true
        ch = ch + "m.1; "
    } else if (ac == true && pc == true){
        m = sqrt(a) - sqrt(p)
        mc = true
        ch = ch + "m.2; "
    } else if (bc == true && qc == true){
        m = sqrt(b) - sqrt(q)
        mc = true
        ch = ch + "m.3; "
    }
}
    i += 1
}
i = 0

if (a+b > c && a+c > b && c+b > a){
    a
    b
    c
    p
    q
    m
    m

}else{
    "incorrect triangle"
}

1 ответ

  1. Вместо

    pc == true
    

    вы, вероятно, хотели сделать

    pc = true
    

    Вы сделали это правильно в большинстве ваших случаев, за исключением pcand qc. Я не могу дать вам номера строк, но в качестве примера это будет одним из тех мест, где вы сделали эту ошибку:

    if (qc == true && cc == true){
        p = c - q
        pc == true         //This line should be pc = true
        ch = ch + "p.1; "
    }