分数の演算をするプログラムを作りました。分数の計算をする部分のアルゴリズムはさほど難しくありませんが、今回は分数の計算式を入力する際のユーザーインターフェイスにこだわりました。
続きを読む
続きを読む
とりあえず中学生でも知っている二次方程式の解の公式を使ったプログラムを書いてみた。
まずは一番プログラム歴(約半年)の長いC言語から。
// 任意の二次方程式の実数解を求めるプログラム #include <stdio.h> #include <math.h> int main(void) { double a, b, c; double x1, x2; puts("ax^2 + bx + c = 0 /a,b,cを実数で入力して下さい。"); printf("a = "); scanf("%lf", &a); printf("b = "); scanf("%lf", &b); printf("c = "); scanf("%lf", &c); if (!a) { if (!b) { if (!c) printf("解は不定。¥n"); else printf("解なし。¥n"); } else printf("x1 = %.2f¥n", -c / b); // 0.0*(-1) が-0.0になる。 } else { double d = b*b - 4*a*c; if (d < 0) printf("実数解は存在しない。¥n"); else { x1 = (-b + sqrt(d)) / 2*a; x2 = (-b - sqrt(d)) / 2*a; printf("x1 = %.2f¥n", x1); if (d > 0) printf("x2 = %.2f¥n", x2); } } return (0); }
a = 0, b = 5, c = 0のとき x1 = -0.00 と出力されてしまう。これではみっともない。どうやったらこの問題を解決できるだろう。問題というほどの問題ではないけど、見た目にはこだわりたい。
もしこの解決方法を知っていたり、このコードの重大な欠点を見つけた人は
Please comment on my code.
お次はPerlで書いてみた。プログラム歴はだいたい2,3週間。まだまだ勉強中です。
#!perl use strict; use warnings; my($a, $b, $c, $d, $x1, $x2); print "ax^2 + bx + c = 0のa, b, cを入力して下さい。¥n"; print "a = "; chomp($a = <STDIN>); print "b = "; chomp($b = <STDIN>); print "c = "; chomp($c = <STDIN>); if ($a == 0) { if ($b == 0) { if ($c == 0) { print "解は不定。¥n"; } else { print "解なし。¥n"; } } else { my $k = -$c / $b; print "x1 = $k¥n"; } } else { $d = $b**2 - 4*$a*$c; if ($d < 0) { print "実数解は存在しない。¥n"; } else { $x1 = (-$b + sqrt $d) / 2*$a; $x2 = (-$b - sqrt $d) / 2*$a; print "x1 = $x1¥n"; if ($d > 0) { print "x2 = $x2¥n"; } } }
最後はJavaScript!(プログラム歴:計20日ほど)しばらくはこれら3言語でプログラムを書いていくつもりです。
function kai (a, b, c) { var x1, x2; if (a == 0) { if (b == 0) { if (c == 0) return("解は不定。"); else return("解なし。"); } else { x1 = -c / b; return("x1 =¥n"+ x1); } } else { var d = Math.pow(b, 2) - 4*a*c; if (d < 0) return("実数解は存在しない。"); else { x1 = (-b + Math.sqrt(d)) / 2*a; x2 = (-b - Math.sqrt(d)) / 2*a; if (d == 0) return("x1 =¥n"+ x1); else return("x1 = "+ x1 + "¥nx2 = "+ x2); } } }
これらのコードについて何かアドバイスや批評があれば
Please comment on my code.
add20