開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の6章(条件分岐)、6.5(練習問題)、9をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
6.5(練習問題)、9。
コード
sample.dart
import 'dart:html'; void main(){ var run = querySelector('#run'), clear = querySelector('#clear'), pre0 = querySelector('#pre0'); run.onClick.listen((MouseEvent event){ var result = window.navigator.userAgent + '\n'; result += 'Comparison\n'; result += units.map((e) => e + ' ').join(); result += '\n'; try{ for(double t = 300.00; t >= -260; t -= 10.00){ result += formatNum2Str(temperatures(t, 'Celsius', units[0]), 7, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[1]), 10, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[2]), 6, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[3]), 7, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[4]), 7, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[5]), 6, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[6]), 7, 2) + ' ' + formatNum2Str(temperatures(t, 'Celsius', units[7]), 8, 2) + '\n'; } } catch (e){ result += e; } finally { pre0.text = result; } }); clear.onClick.listen((MouseEvent event){ pre0.text = ''; }); } double temperatures(double t, String source, String target){ return fromCelsius(toCelsius(t, source), target); } String formatNum2Str(double a, int width, int n){ var s = a.toStringAsFixed(n), spaces = width - s.length; return replicate(spaces, ' ') + s; } double toCelsius(double t, String source){ switch(source){ case 'Kelvin': return t - 273.15; case 'Celsius': return t; case 'Fahrenheit': return (t - 32) * 5 / 9; case 'Rankine': return (t - 492.67) * 5 / 9; case 'Delisle': return 100 - t * 2 / 3; case 'Newton': return 100 / 33; case 'Reasumur': return t * 5 / 4; case 'Romer': return (t - 7.5) * 40 / 21; default: throw '${source}は摂氏に変換できない。'; } } double fromCelsius(double t, String target){ switch(target){ case 'Kelvin': return t + 273.15; case 'Celsius': return t; case 'Fahrenheit': return t * 9 / 5 + 32; case 'Rankine': return (t + 272.15) * 9 / 5; case 'Delisle': return (100 - t) * 3 / 2; case 'Newton': return t * 33 / 100; case 'Reaumur': return t * 4 / 5; case 'Romer': return t * 21 / 40 + 7.5; default: throw '摂氏から${target}に変換できない。'; } } List<String> units = ['Celsius', 'Fahrenheit', 'Kelvin', 'Rankine', 'Delisle', 'Newton', 'Reaumur', 'Romer']; String replicate(int n, String s){ return new List.filled(n, s).join(); }
0 コメント:
コメントを投稿