//: [Previous](@previous) // Xcode で Editor メニュー > Show Render Markup でお読みください //import UIKit import Foundation /*: # 中学3年の数学 */ /*: ## 2次方程式 */ /*: ### 2次方程式の解 𝑎𝑥² + 𝑏𝑥 + 𝑐 = 0 の解 𝑥 を求める 両辺に ×1/𝑎 𝑥² + 𝑏/𝑎𝑥 = -𝑐/𝑎 ここで左辺を (𝑥 + 𝑎)² の形に持っていきたい (𝑥 + 𝑎)² = 𝑥+2𝑎𝑥+𝑎² 両辺に 𝑏/𝑎 の ½ の自乗 (𝑏/(2𝑎))² を加えればよい 𝑥² + 𝑏/𝑎𝑥 + (𝑏/(2𝑎))² = -𝑐/𝑎 + (𝑏/(2𝑎))² (𝑥 + 𝑏/(2𝑎))² = -𝑐/𝑎 + (𝑏/(2𝑎))² 𝑥 + 𝑏/(2𝑎) = ±√{-𝑐/𝑎 + (𝑏/(2𝑎))²} 𝑥 = ±√{-𝑐/𝑎 + (𝑏/(2𝑎))²} - 𝑏/(2𝑎) 𝑥 = {±2𝑎√{-𝑐/𝑎 + (𝑏/(2𝑎))²} - 𝑏}/(2𝑎) 𝑥 = {-𝑏 ± √{-4𝑎²𝑐/𝑎 + 4𝑎²(𝑏/(2𝑎))²}}/(2𝑎) 𝑥 = {-𝑏 ± √{4𝑎²(𝑏/(2𝑎))² - 4𝑎²𝑐/𝑎}}/(2𝑎) 𝑥 = {-𝑏 ± √{𝑏² - 4𝑎𝑐}}/(2𝑎) */ func 2次方程式の解(a: Double, b: Double, c: Double) -> (Double, Double) { let r = sqrt(b*b - 4*a*c) return ((-b + r)/(2*a), (-b - r)/(2*a)) // 重解の場合、等しい値のペアを返す // 解なしの場合、NaN(Not a Number) のペアを返す } for (a, b, c) in [ // 例題39 (a: 1.0, b: -3.0, c: 2.0), (a: 1.0, b: 0.0, c: -3.0), (a: 1.0, b: 2.0, c: -3.0), (a: 2.0, b: -5.0, c: -3.0), (a: 1.0, b: -5.0, c: 6.0), // 練習39 (a: 1.0, b: -2.0, c: -3.0), (a: 1.0, b: 0.0, c: -1.0), (a: 1.0, b: 1.0, c: -2.0), (a: 2.0, b: -3.0, c: 1.0), (a: 3.0, b: 1.0, c: -2.0), // 例題40 (a: 1.0, b: -2.0, c: -15.0), (a: 3.0, b: -5.0, c: 0.0), (a: 9.0, b: 0.0, c: -16.0), (a: 1.0, b: -5.0, c: -14.0), (a: 1.0, b: 8.0, c: 16.0), // 練習40 (a: 2.0, b: 3.0, c: -2.0), (a: 2.0, b: -3.0, c: 0.0), (a: 4.0, b: 0.0, c: -1.0), (a: 1.0, b: -5.0, c: 6.0), (a: 1.0, b: -10.0, c: 25.0), (a: 1.0, b: 3.0, c: -28.0), // 例題41 (a: 1.0, b: 0.0, c: -5.0), (a: 3.0, b: 0.0, c: -48.0), (a: 8.0, b: 0.0, c: -9.0), (a: 1.0, b: 2.0, c: -11.0), (a: 1.0, b: -6.0, c: -21.0), // 練習41 (a: 4.0, b: 0.0, c: -9.0), (a: 6.0, b: 0.0, c: -42.0), (a: 2.0, b: 0.0, c: -25.0), (a: 1.0, b: 6.0, c: -7.0), (a: 1.0, b: -4.0, c: -14.0), // コラム (a: 1.0, b: -1.0, c: -6.0), (a: 1.0, b: -4.0, c: 4.0), (a: 1.0, b: 2.0, c: 5.0), ] { let 解 = 2次方程式の解(a: a, b: b, c: c) print("\(a)𝑥² + \(b)𝑥 + \(c) = 0 →", terminator: "\t") if 解.0.isNaN { print("解なし") } else if 解.0 == 解.1 { print(解.0) } else { print(解.0, 解.1) } } //: [Next](@next)