2016-03-24 4 views
0

現在、化学クラスを取っており、強/弱酸溶液のpHを計算できるプログラムを作るのは楽しいと思っていました。コードはプレイグラウンドで動作し、最終的にiOSプロジェクトに実装したいと思います。プログラムは、酸の初期濃度、酸の化学式、および酸の平衡定数(必要であれば)の3つのパラメータを取ります。プログラムは酸の初期濃度を取り込むことから始まり、次に酸の化学式をとり、酸が強いか弱いかを決定する。次に、ifステートメントを設定して、酸の強さに応じてpHを計算します。酸が弱い場合、平衡定数が必要である。私はプログラミングに非常に新しいですし、これは任意のコードを書くことで私の最初の試みであるとして、私が持っているものをクリーンアップするために任意の方法または任意のヒントがあるかどうコードは機能しますが、iOSに実装する方法がわからない

import UIKit 

func acidConcentration(acidMolarity: Double) -> Double { 
    return acidMolarity 
} 

let initialConcentration = acidConcentration(0.50) 

var hydroniumConcentration = 0.00 

var pH = 0.00 

func determineAcidStrength(acidName: String) -> String { 

    var acidStrength = "" 

    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" { 
     acidStrength = "strong" 
    } else { 
     acidStrength = "weak" 
    } 

    return acidStrength 

} 

let strength = determineAcidStrength("HBr") 

if strength == "strong" { 

    hydroniumConcentration = initialConcentration 

    pH = -log10(hydroniumConcentration) 

    print(String(format: "%.2f", pH)) 

} else { 

    func equilibriumConstant(ka: Double) -> Double { 
     return ka 
    } 

    let eqConstant = equilibriumConstant 

    var weakAcidConcentration = sqrt(eqConstant(1.8e-5) * initialConcentration) 

    pH = -log10(weakAcidConcentration) 

    print(String(format: "%.2f", pH)) 

} 

、私が思っていた。ここで私はこれまでにしたものですより良いコードを整理する。どんな助けもありがとうございます。ありがとう。

答えて

2

あなたが投稿したコードは、単一の機能で達成できるもののために非常に複雑です。

以下の関数は、acidNameをStringとし、initialConcentrationをDoubleとし、濃度をDouble値として返します。ここ

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double { 
    var acidIsStrong = false; 

    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" { 
     acidIsStrong = true; 
    } 
    if acidIsStrong { 
     return -log10(initialConcentration); 
    } else { 
     return -log10((1.8e-5) * initialConcentration); 
    } 
} 

は、関数の使用例である:ここ

//Just pass in your acid name and initial concentration 
let concentration = calculateConcentration("HBr", initialConcentration: 0.50); 
print(String(format: "%.2f", concentration)); 

は(それが同じ作品)より効率的にビットを書き込まれた機能の小型版である:

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double { 
    if acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3" { 
     return -log10(initialConcentration); 
    } 
    return -log10((1.8e-5) * initialConcentration); 
} 

そして、それほど読みにくいさらに小さなバージョン:

func calculateConcentration(acidName: String, initialConcentration: Double) -> Double { 
    return -log10(initialConcentration * ((acidName=="HBr" || acidName=="HI" || acidName=="HClO4" || acidName=="HCl" || acidName=="HClO3" || acidName=="H2SO4" || acidName=="HNO3") ? (1.8e-5) : 1.0)); 
} 
0

私は式についてはよく分からないんだけど、これはどうなので、化学者の多くはないよ:あなたができる、アプリを作成するためとして

class Acid: CustomStringConvertible { 

    static let strongAcids = [ "HBr", "HI", "HClO4", "HCl", "HClO3", "H2SO4", "HNO3" ] 

    var name: String 
    var concentration: Double 
    var equilibriumConstant: Double? 

    var pH: Double { 
     get { 
      var adjustedConcentration = concentration 
      if !Acid.strongAcids.contains(name) { 
       guard let ka = equilibriumConstant else { 
        return Double.NaN; 
       } 
       adjustedConcentration = sqrt(ka * concentration) 
      } 
      return -log10(adjustedConcentration) 
     } 
    } 

    init(name: String, concentration: Double, equilibriumConstant ka: Double? = nil) { 
     self.name = name 
     self.concentration = concentration 
     self.equilibriumConstant = ka 
    } 

    var description: String { 
     get { 
      if let ka = equilibriumConstant { 
       return "\(name) (concentration: \(concentration)/EqK: \(ka) pH: \(String(format: "%.2f", pH)))" 

      } else { 
       return "\(name) (concentration: \(concentration)/pH: \(String(format: "%.2f", pH)))" 
      } 
     } 
    } 
} 

let acid = Acid(name: "HBr", concentration: 0.5); 
print("\(acid)") // prints "HBr (concentration: 0.5/pH: 0.30)" 
print(String(format: "%.2f", acid.pH)) // prints "0.30" 
let weakAcid = Acid(name: "Weak", concentration: 0.2, equilibriumConstant: 1.8e-5) 
print("\(weakAcid)") // prints "Weak (concentration: 0.2/EqK: 1.8e-05 pH: 2.72)" 

...このような単純なアプリの場合おそらく、3つのテキストフィールド(名前、濃度、定数)と「計算」ボタンを持つ「Single View Application」を作成するだけです。私はそれが理にかなったことを願う

関連する問題