掲示板ランキング  心理学(相性・易占)  心理学(読みもの)  心理学(参考図書・白書)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6786

二次方程式の解を求めるプログラム
投稿者---pirin(2006/11/23 21:06:17)


「二次方程式ax2+bx+c=0の係数a,b,cを引数とし、解の公式によって
求めた解を出力する関数(ただしaは0ではない)」
(係数はキーボードから読み込む)
を作成したいのですが、
過去ログを参考に自分で作成してもどうもうまくいきません。

#include <stdio.h>
#include <math.h>

double kai1(int a, int b, int c); 
double kai2(int a, int b, int c); 

main() {
    int a1, b1, c1 = 0;
    double kaia;
    double kaib;
    
    printf("整数aを入力して下さい : ");
    scanf("%d", &a1);
    printf("整数bを入力して下さい : ");
    scanf("%d", &b1);
    printf("整数cを入力して下さい : ");
    scanf("%d", &c1);
    
    if (a1 == 0) {
      printf("aの値には0を入力しないで下さい");
    }
    
    kaia = kai1(a1, b1, c1);
    kaib = kai2(a1, b1, c1); 
    
    printf("一つ目の解は%lfです", kaia);
    printf("二つ目の解は%lfです", kaib);
}

double kai1(int a, int b, int c) {
    double D, x1;
    D = pow(b, 2) - 4 * a * c;
    x1 = (-b + sqrt(D)) / (2 * a);
    return(x1);
}

double kai2(int a, int b, int c) {
    double D, x2;
    D = pow(b , 2) - 4 * a * c;
    x2 = (-b - sqrt(D)) / (2 * a);
    return(x2);
}

        


一応コンパイルはできるし、整数の入力も出来るんですが、
sqrt DOMAIN errorとなってしまいます。
平方根辺りの書き方が不味いのかと思うんですが、
どう直したらいいのか皆目見当がつきません。
教えてくださいお願いします。

環境はOS→WindowsXP HomeEdition、コンパイラ→Borland C++ Compiler2.31
です。




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:二次方程式の解を求めるプログラム 6787 通りすがり 2006/11/23 21:14:07
<子記事> Re:二次方程式の解を求めるプログラム 6788 2006/11/23 21:33:56
<子記事> Re:二次方程式の解を求めるプログラム 6789 pirin 2006/11/23 21:57:40
<子記事> Re:二次方程式の解を求めるプログラム 6790 たかぎ 2006/11/23 22:03:51


No.6787

Re:二次方程式の解を求めるプログラム
投稿者---通りすがり(2006/11/23 21:14:07)


判別式の値が負になるような
係数を与えているから、
平方根が計算できない。


この投稿にコメントする

削除パスワード

No.6788

Re:二次方程式の解を求めるプログラム
投稿者---・(2006/11/23 21:33:56)


#include <stdio.h>
#include <math.h>

void solve(int a, int b, int c);

int main(void)
{
    int a, b, c;
    
    puts("二次方程式a*x^2+b*x+c=0を解きます");
    printf("係数a(整数) > ");
    scanf("%d", &a);
    printf("係数b(整数) > ");
    scanf("%d", &b);
    printf("係数c(整数) > ");
    scanf("%d", &c);
    
    if (a == 0)
        puts("aには0を入力しないでください");
    else
        solve(a, b, c);
    return 0;
}

void solve(int a, int b, int c)
{
    double d = b * b - 4 * a * c, e = 2 * a;
    
    if (d >= 0) {
        printf("解1=%f\n", (-b + sqrt(d)) / e);
        printf("解2=%f\n", (-b - sqrt(d)) / e);
    }
    else
        printf("解=%f±%fi\n", -b / e, sqrt(-d) / e);
}





この投稿にコメントする

削除パスワード

No.6789

Re:二次方程式の解を求めるプログラム
投稿者---pirin(2006/11/23 21:57:40)


回答有難うございます。
解を出力する関数だから、
関数中に出力がないといけないですね。
それに平方根の中が負だと、自分で作ったものでは
答えが出ませんね。

初歩的なミスを指摘してもらって
助かりました。
動くように何とか頑張ります。
有難うございました!


この投稿にコメントする

削除パスワード

No.6790

Re:二次方程式の解を求めるプログラム
投稿者---たかぎ(2006/11/23 22:03:51)
http://takagi.in/


虚数解にも対応してみました。
#include <stdio.h>
#include <complex.h>

int main()
{
    int a1, b1, c1 = 0;
    double complex kaia;
    double complex kaib;
    
    printf("整数aを入力して下さい : ");
    scanf("%d", &a1);
    printf("整数bを入力して下さい : ");
    scanf("%d", &b1);
    printf("整数cを入力して下さい : ");
    scanf("%d", &c1);

    if (a1 == 0)
      printf("aの値には0を入力しないで下さい");

    kaia = (-b1 + csqrt(b1*b1 - 4*a1*c1))/(2*a1);
    kaib = (-b1 - csqrt(b1*b1 - 4*a1*c1))/(2*a1);

    printf("一つ目の解は%g%+giです\n", creal(kaia), cimag(kaia));
    printf("二つ目の解は%g%+giです\n", creal(kaib), cimag(kaib));
    return 0;
}

> Borland C++ Compiler2.31

このバージョンは知りませんが、相当古い16ビットコンパイラでしょうか?



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ