Presentation is loading. Please wait.

Presentation is loading. Please wait.

仕様4 元素名他 初期画面作成 仕様1 元素数の入力 仕様2 分子名の判定 仕様3 飽和炭化水素の判定 CとH数だけではだめ

Similar presentations


Presentation on theme: "仕様4 元素名他 初期画面作成 仕様1 元素数の入力 仕様2 分子名の判定 仕様3 飽和炭化水素の判定 CとH数だけではだめ"— Presentation transcript:

1

2 仕様4 元素名他 初期画面作成 仕様1 元素数の入力 仕様2 分子名の判定 仕様3 飽和炭化水素の判定 CとH数だけではだめ
Dim c As Byte, h As Byte, o As Byte, n As Byte '炭素、水素、酸素、窒素用 Dim i As Byte 'カウンタ用 Cells = "" '全セルの初期化 Cells(1, 1).Value = "炭素" '元素名表示 Cells(1, 2).Value = "水素" Cells(1, 3).Value = "酸素" Cells(1, 4).Value = "窒素" Cells(1, 5).Value = "分子量" c = InputBox("炭素数を入力してください", "C") '元素数入力 h = InputBox("水素数を入力してください", "H") o = InputBox("酸素数を入力してください", "O") n = InputBox("窒素数を入力してください", "N") Cells(2, 1).Value = c '元素数出力 Cells(2, 2).Value = h Cells(2, 3).Value = o Cells(2, 4).Value = n Cells(2, 5).Value = c * 12 + h * 1 + o * 16 + n * 14 '分子量の計算と表示 If c = 6 And h = 6 And o = 0 And n = 0 Then Cells(2, 6) = "ベンゼン" If c = 1 And h = 4 And o = 0 And n = 0 Then Cells(2, 6) = "メタン" If c = 1 And h = 4 And o = 1 And n = 0 Then Cells(2, 6) = "メタノール" If c = 1 And h = 5 And o = 0 And n = 1 Then Cells(2, 6) = "メチルアミン" If o = 0 And n = 0 And h = c * Then '飽和炭化水素の判定 Cells(8, 1).Value = "H" For i = 1 To c Cells(7, i + 1).Value = "H" Cells(8, i + 1).Value = "C" Cells(9, i + 1).Value = "H" Next Cells(8, c + 2).Value = "H" End If 仕様4 元素名他 初期画面作成 仕様1 元素数の入力 仕様2 分子名の判定 仕様3 飽和炭化水素の判定 CとH数だけではだめ

3 今回の場合、すべてのIf文でセルF2(Cells(2,6))を利用している
ポイント 一番下のIf文しか動作しない(下の例ではメタンとエタンが表示されない) If c = 1 And h = 4 And o = 0 And n = 0 Then Cells(2, 6).Value = "メタン" Else Cells(2, 6).Value = "" If c = 2 And h = 6 And o = 0 And n = 0 Then Cells(2, 6).Value = "エタン" Else Cells(2, 6).Value = "" If c = 3 And h = 8 And o = 0 And n = 0 Then Cells(2, 6).Value = "プロパン" Else Cells(2, 6).Value = "" 今回の場合、すべてのIf文でセルF2(Cells(2,6))を利用している 例:メタン(c=1,h=4,o=0,n=0)を入力した場合  1行目で「メタン」と判断し、F2に「メタン」を表示するが、  2行目で「エタンではない」、3行目で「プロパンではない」と判定され、  即座にF2に空白が出力され、「メタン」が消される。 同一セルを利用する場合Else Cells・・・・=""は使えない場合が多い 改良例:最初にF2セルをクリアしておき、If文は表示のみに利用する Cells(2, 6).Value = "" If c = 1 And h = 4 And o = 0 And n = 0 Then Cells(2, 6).Value = "メタン" If c = 2 And h = 6 And o = 0 And n = 0 Then Cells(2, 6).Value = "エタン" If c = 3 And h = 8 And o = 0 And n = 0 Then Cells(2, 6).Value = "プロパン" ※Cells = ""もOK

4 ただしc=0の時・・・ For文内が動かないので 不要な表示がされない 直前のIf文で、 If c > 0 And ・・・が必要
ポイント For~Next内の記述 容易に作成可能 動作速度高 For n = 1 To c Cells(7, n + 1).Value = "H" Cells(8, n + 1).Value = "C" Cells(9, n + 1).Value = "H" Cells(8, 1).Value = "H" Cells(8, c + 2).Value = "H" Next For n = 1 To c Cells(7, n + 1).Value = "H" Cells(8, n + 1).Value = "C" Cells(9, n + 1).Value = "H" Next Cells(8, 1).Value = "H" Cells(8, c + 2).Value = "H" この2行は、1回表示すればOK 変数nの値も関係がない For文内が動かないので 不要な表示がされない 直前のIf文で、 If c > 0 And ・・・が必要 ただしc=0の時・・・ If文の支配下にFor文を書く For~Next内にIf文を書く If c > 0 Then For i = 1 To 10 Cells(i, 1).Value = i Next End If どちらも同じ動作 プログラムの読みやすさや 実行速度、改良の しやすさなどに差がでるが、 正解はない For i = 1 To 10 If c > 0 Then Cells(i, 1).Value = i End If Next If文は1回実行で動作速度高 比較的読みやすい If文は10回実行で動作速度低 i=3の時だけ表示しない等の 複雑な動作が作りやすい

5 テクニック 入力を組成式ではなく示性式にすれば、 アルコールやエーテルなどの命名ができる 配列をうまく使い、
 f(1):メタン系  f(2):エタン系  f(3):プロパン系  f(4):ブタン系 配列の引数と炭素数を リンクさせるのがポイント Dim f(4) As String, mol As String, c As Byte, h As Byte f(1) = "Meth" f(2) = "Eth" f(3) = "Prop" f(4) = "Buth" c = InputBox("炭素数(1~4)") h = InputBox("水素数") If h = c * Then mol = f(c) & "ane" If h = c * Then mol = f(c) & "ene" If h = c * Then mol = f(c) & "yne" MsgBox "分子名は" & mol & "です" 炭素と水素の数によって 語尾を追加して 分子名を完成させる 入力を組成式ではなく示性式にすれば、 アルコールやエーテルなどの命名ができる

6 コンピュータと人間でデータをやりとりするための入出力部 フールプルーフ (fool:馬鹿 proof:防ぐ、耐える)
ユーザーインターフェイスの意識 コンピュータと人間でデータをやりとりするための入出力部 フールプルーフ (fool:馬鹿 proof:防ぐ、耐える)  工業製品や生産設備、ソフトウェアなどで、利用者が誤った操作をしても  危険に晒されることがないよう、設計の段階で安全対策を施しておくこと。 人間は「必ずミスをする」ということを前提にプログラムを作っておくことが重要 フールプルーフの一例 ・飽和炭化水素よりも水素数が多い場合、再入力を促す Looptop: C = InputBox("C数を入力してください") H = InputBox("H数を入力してください") N = InputBox("N数を入力してください") O = InputBox("O数を入力してください") If H > C * And N = 0 And O = 0 Then d = MsgBox("水素の数が多いです", 0, "やり直し") GoTo LoopTop End If

7 フェイルセーフ (fail:故障 safe:安全な)
機械が故障や誤動作を起こしたとき、安全な方向に壊れたり 被害が出ないように止まったりする仕組み 例:車のブレーキ配管(フェイルセーフブレーキシステム) 配管の1部に破損が生じて、油圧がなくなっても、 配管を二つに分けておくことで、最低2輪にブレーキが かかるようになっている。 フェイルソフト (fail:故障 soft:寛大な) 故障が起きても故障箇所を切り離すことで、多少の機能の 低下があっても最後まで動作させる仕組み 例:航空機のエンジン 1基が止まっても、他のエンジンで飛べるように 設計されている。 フォールトトレラント (fault:故障 tolerant:許容する) 故障が起きても信頼性を損なわずに動き続ける仕組み 例:人工衛星のコンピュータ 複数(奇数台)のコンピュータで多数決を取ることで、 放射線などの影響で多少誤動作を起こしても正常に動く。

8 現在はこれにハッシュ値というさらに複雑化した暗号を使うことで、 解析を困難にしている
乱数とセキュリティ パソコンはサイコロを振ることができない 従って、離散関数と呼ばれる xの変化に対して複雑なyの変化を示す 関数で、擬似的に乱数を発生している yからxを求めるのは難しいが、 xが決まればyは一意に決まる Excelに内蔵されているRnd関数 y=Rnd(-x) (x=0~100)のグラフ ※ExcelのRnd関数の仕様の関係で、   0以下の数値をxとして与えている 離散関数でパスワードを変換して通信回線で送れば、 万が一盗聴されてもパスワードがばれない 現在はこれにハッシュ値というさらに複雑化した暗号を使うことで、 解析を困難にしている 例:Google認証のワンタイムパスワード   一日を30秒単位で区切った時間にパスワードを加えたものからハッシュ値を生成し、   サーバー側と照合(従って生成から30秒過ぎたら無効)


Download ppt "仕様4 元素名他 初期画面作成 仕様1 元素数の入力 仕様2 分子名の判定 仕様3 飽和炭化水素の判定 CとH数だけではだめ"

Similar presentations


Ads by Google