2016-10-20 14 views
0

私はxcode/swiftに私の娘のための数学クイズアプリを書いています。
具体的には、ランダムに生成された2番目の番号に対して、少なくとも1つの負の数を加算または減算する質問を生成したいとします。
2つの正の数値を組み合わせることはできません。クイズのランダムな(正と負の)番号の生成

すなわち

(-45)12を引くとは何ですか?
23マイナス(-34)とは何ですか?

私は、数字を生成する構文の権利を得るのに苦労しています。そして、その数字が否定的なものか正のものかを決定することに苦労しています。

次に、問題が加算または減算である場合、2番目の問題はランダム化です。

+0

明確にするには、数字の組み合わせは何ですか? 'a <0 'または' b <0'のような任意の組み合わせ 'a + b'? –

+1

はい。基本的に数値は範囲内で-50から50までのランダム、NumberBは同じです。しかし、2つの正の数が生成された場合、負の数に切り替える必要があります(NumberB = NumberB * -1) –

+0

申し訳ありませんが、私のコメントは理由なしで送信し続けました;) –

答えて

1

これは私の試みです。遊び場でこれを実行してみてください。うまくいけば結果が得られます。私は、明確化のために気軽に、いずれの場合においても

//: Playground - noun: a place where people can play 

import Cocoa 


let range = Range(uncheckedBounds: (-50, 50)) 

func generateRandomCouple() -> (a: Int, b: Int) { 
    // This function will generate a pair of random integers 
    // (a, b) such that at least a or b is negative. 

    var first, second: Int 

    repeat { 
     first = Int(arc4random_uniform(UInt32(range.upperBound - range.lowerBound))) - range.upperBound 
     second = Int(arc4random_uniform(UInt32(range.upperBound - range.lowerBound))) - range.upperBound 
    } 
     while (first > 0 && second > 0); 

    // Essentially this loops until at least one of the two is less than zero. 

    return (first, second) 
} 


let couple = generateRandomCouple(); 
print("What is \(couple.a) + (\(couple.b))") 
// at this point, either of the variables is negative 


// I don't think you can do it in the playground, but here you would read 
// her input and the expected answer would, naturally, be: 

print(couple.a + couple.b) 

...私は十分にきれいなものを作りました願っています。がんばろう !

+0

ああ男。ありがとうございました。これを私のコードに挿入し、必要な変更を加えます。カカオも考慮しなかった。 –

+1

非常に感謝しています。平和。 –

+0

@ElephantBoy CocoaはiOSでは使用できませんが、Foundationのみが必要です( 'arc4random'の場合)。 – NobodyNada

1

これを繰り返すことなく解決することができます。

  1. 数が負の場合は乱数、正または負の
  2. を描く:同じ範囲から別の番号を描画し、ペアを返すアイデアがです。
  3. 数値が正の場合:負の数に制限された範囲から2番目の数値を描画します。

ここでの実装です:

extension CountableClosedRange where Bound : SignedInteger { 

    /// A property that returns a random element from the range. 
    var random: Bound { 
     return Bound(arc4random_uniform(UInt32(count.toIntMax())).toIntMax()) + lowerBound 
    } 

    /// A pair of random elements where always one element is negative. 
    var randomPair: (Bound, Bound) { 
     let first = random 
     if first >= 0 { 
      return (first, (self.lowerBound ... -1).random) 
     } 
     return (first, random) 
    } 
} 

今、あなただけ...

let pair = (-10 ... 100).randomPair 

を書く...そして、一つの要素が負であることが保証され、ランダムなタプルを取得することができます。

+0

これはかなりきちんとしたアプローチです。私はそれが好きです。 –

+0

これらのスタイルの両方に投票しました。 –

関連する問題