開発環境
- 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 コメント:
コメントを投稿