Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
475 kez görüntülendi
genel kategorisinde tarafından

Selamlar herkese, öncelikle ilk sorum herhangi bir forum kuralına uymadıysam özür dilerim.
Başlıkta da ifade ettiğim gibi textbox'a girilen sayıdan (bu sayı tc no veya doğum gün ay yılın noktalamasız hali gibi uzun olabilir) 10 sonraki asal sayıyı yazdıran programı yazmaya çalışıyorum ancak swiftte yeniyim döngüler kısmında işin içinden çıkamadım.

func asalSayi(number: Int) -> Bool {

if number < 2
{

    return false

}

else if number == 2
{

    return false

}

var i = 2
let limit = Int(ceil(sqrt(Double(number))))
while i <= limit {
    if number % i == 0
    {

        return false

    }

    i += 1
}

return true

}

@IBAction func btnHesapla(_ sender: Any) {

let numberStr = _txtSayi.text

let number = Int(numberStr!)

if number == nil {

    _lblSonuc.text = "bu bir asal sayı değil!"

}

else {

    let result = asalSayi(number: number!)


    if _txtSayi.text == "2"
    {

        _lblSonuc.text = _txtSayi.text! + " asal sayı"
    }

    else if result == true
    {

        _lblSonuc.text = _txtSayi.text! + " asal sayı"

    }

    else if result == false
    {

        self._lblSonuc.text = _txtSayi.text! + " asal sayı değil!"


    }

}

}

bi örnekten yararlanarak koddaki gibi girilen sayı asal mı değilmi bakıyorum ancak 10 sonraki sayı içn gereken döngüleri kuramadım.

1 cevap

+1 oy
tarafından

şöyle birşeyler olabilir mesela;

func findTheNextPrimes(start: Int, count: Int) -> [Int] {
        var result = [Int]()
        if count > 0 {
            if isThisAPrime(start + 1) {
                result.append(start + 1)
                result.append(contentsOf: findTheNextPrimes(start: start + 1, count: count - 1))
                result = result.sorted(by: <)
            } else {
                result = findTheNextPrimes(start: start + 1, count: count)
            }
        }
        return result
    }


    func isThisAPrime(_ value:Any) -> Bool {
        var integer:Int = 0
        if let intValue = value as? Int {
            integer = intValue
        } else if let stringValue = value as? String {
            if let stringValInDouble = Double(stringValue) {
                if stringValInDouble == Double(Int(stringValInDouble)) {
                    integer = Int(stringValInDouble)
                }
            }
        } else if let doubleValue = value as? Double {
            if doubleValue == Double(Int(doubleValue)) {
                integer = Int(doubleValue)
            }
        }
        if integer < 0 {
            return false
        }
        switch integer {
        case 0, 1:
            return false
        case 2, 3:
            return true
        default:
            for i in 2...Int(sqrt(Double(integer))) {
                if integer % i == 0 {
                    return false
                }
            }
            return true
        }
    }

şöyle kullanırsın;

//34'den sonra gelen 10 asal sayıyı gösterir
        let primes = findTheNextPrimes(start: 34, count: 10)
        print(primes) //[37, 41, 43, 47, 53, 59, 61, 67, 71, 73]


        //herhangi bir data tipi olabilir (integer, text, double)
        //tam sayıya çevrilebilir bir tekst eğer asalsa true değeri döner
        print("\"hello world\"  : \(isThisAPrime("hello world"))")  //false
        print("\"37\"           : \(isThisAPrime("37"))")           //true
        print("\"36\"           : \(isThisAPrime("36"))")           //false
        print("\"43.0\"         : \(isThisAPrime("43.0"))")         //true
        print("\"43.2\"         : \(isThisAPrime("43.2"))")         //false
        print("\"41\"           : \(isThisAPrime("41"))")           //true
        print("44               : \(isThisAPrime(44))")             //false
        print("47               : \(isThisAPrime(47))")             //true
        print("53.0             : \(isThisAPrime(53.0))")           //true
        print("53.2             : \(isThisAPrime(53.1))")           //false


        //döngü içerisinde kullanımı
        for i in 0..<12 {
            if isThisAPrime(i) {
                print(i)
            }
        }
...